@ptsecurity/mosaic 15.6.0 → 16.1.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 (763) hide show
  1. package/_theming.scss +28 -1
  2. package/_visual.scss +3 -1
  3. package/autocomplete/autocomplete-trigger.directive.d.ts +6 -16
  4. package/autocomplete/autocomplete.component.d.ts +1 -1
  5. package/button/button.component.d.ts +1 -1
  6. package/button-toggle/button-toggle.component.d.ts +3 -3
  7. package/card/card.component.d.ts +1 -1
  8. package/checkbox/_checkbox-theme.scss +4 -0
  9. package/checkbox/checkbox-config.d.ts +1 -1
  10. package/checkbox/checkbox.d.ts +1 -1
  11. package/code-block/_code-block-theme.scss +8 -0
  12. package/code-block/actionbar.component.d.ts +1 -1
  13. package/code-block/code-block.component.d.ts +1 -1
  14. package/core/common-behaviors/color.d.ts +1 -1
  15. package/core/common-behaviors/constructor.d.ts +2 -2
  16. package/core/common-behaviors/disabled.d.ts +1 -1
  17. package/core/common-behaviors/error-state.d.ts +1 -1
  18. package/core/common-behaviors/tabindex.d.ts +1 -1
  19. package/core/datetime/date-formats.d.ts +1 -1
  20. package/core/formatters/index.d.ts +1 -1
  21. package/core/formatters/number/formatter.d.ts +55 -0
  22. package/core/label/label-options.d.ts +1 -1
  23. package/core/locales/en-US.d.ts +19 -1
  24. package/core/locales/es-LA.d.ts +27 -0
  25. package/core/locales/fa-IR.d.ts +28 -0
  26. package/core/locales/locale-service.d.ts +148 -3
  27. package/core/locales/pt-BR.d.ts +27 -0
  28. package/core/locales/ru-RU.d.ts +20 -1
  29. package/core/locales/zh-CN.d.ts +26 -0
  30. package/core/option/action.d.ts +1 -1
  31. package/core/option/optgroup.d.ts +1 -1
  32. package/core/option/option.d.ts +37 -8
  33. package/core/overlay/overlay-position-map.d.ts +7 -1
  34. package/core/pop-up/constants.d.ts +2 -1
  35. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +2 -2
  36. package/core/styles/_variables.scss +1 -0
  37. package/core/styles/theming/_theming.scss +1 -0
  38. package/datepicker/calendar-body.component.d.ts +2 -2
  39. package/datepicker/calendar-header.component.d.ts +9 -3
  40. package/datepicker/calendar.component.d.ts +4 -5
  41. package/datepicker/datepicker-input.directive.d.ts +1 -1
  42. package/datepicker/datepicker-toggle.component.d.ts +1 -1
  43. package/datepicker/datepicker.component.d.ts +1 -1
  44. package/datepicker/month-view.component.d.ts +4 -5
  45. package/divider/divider.component.d.ts +1 -1
  46. package/dl/dl.component.d.ts +1 -1
  47. package/dropdown/dropdown-item.component.d.ts +1 -1
  48. package/dropdown/dropdown-trigger.directive.d.ts +1 -1
  49. package/dropdown/dropdown.component.d.ts +1 -1
  50. package/dropdown/dropdown.scss +6 -6
  51. package/dropdown/dropdown.types.d.ts +3 -3
  52. package/ellipsis-center/ellipsis-center.directive.d.ts +1 -1
  53. package/{esm2020 → esm2022}/autocomplete/autocomplete-origin.directive.mjs +4 -4
  54. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +555 -0
  55. package/{esm2020 → esm2022}/autocomplete/autocomplete.component.mjs +26 -26
  56. package/{esm2020 → esm2022}/autocomplete/autocomplete.module.mjs +10 -10
  57. package/esm2022/button/button.component.mjs +148 -0
  58. package/{esm2020 → esm2022}/button/button.module.mjs +13 -13
  59. package/esm2022/button-toggle/button-toggle.component.mjs +381 -0
  60. package/{esm2020 → esm2022}/button-toggle/button-toggle.module.mjs +5 -5
  61. package/esm2022/card/card.component.mjs +80 -0
  62. package/{esm2020 → esm2022}/card/card.module.mjs +9 -9
  63. package/{esm2020 → esm2022}/checkbox/checkbox-module.mjs +5 -5
  64. package/{esm2020 → esm2022}/checkbox/checkbox-required-validator.mjs +4 -4
  65. package/esm2022/checkbox/checkbox.mjs +300 -0
  66. package/{esm2020 → esm2022}/code-block/actionbar.component.mjs +4 -4
  67. package/esm2022/code-block/code-block.component.mjs +157 -0
  68. package/esm2022/code-block/code-block.module.mjs +60 -0
  69. package/esm2022/core/common-behaviors/color.mjs +33 -0
  70. package/{esm2020 → esm2022}/core/common-behaviors/common-module.mjs +5 -5
  71. package/{esm2020 → esm2022}/core/common-behaviors/disabled.mjs +6 -6
  72. package/{esm2020 → esm2022}/core/common-behaviors/tabindex.mjs +6 -6
  73. package/{esm2020 → esm2022}/core/error/error-options.mjs +7 -7
  74. package/{esm2020 → esm2022}/core/formatters/date/formatter.mjs +4 -4
  75. package/{esm2020 → esm2022}/core/formatters/date/formatter.pipe.mjs +40 -40
  76. package/esm2022/core/formatters/index.mjs +86 -0
  77. package/esm2022/core/formatters/number/formatter.mjs +350 -0
  78. package/{esm2020 → esm2022}/core/forms/forms-module.mjs +7 -7
  79. package/{esm2020 → esm2022}/core/forms/forms.directive.mjs +7 -7
  80. package/{esm2020 → esm2022}/core/highlight/highlight.pipe.mjs +4 -4
  81. package/{esm2020 → esm2022}/core/highlight/index.mjs +5 -5
  82. package/{esm2020 → esm2022}/core/line/line.mjs +8 -8
  83. package/esm2022/core/locales/en-US.mjs +28 -0
  84. package/esm2022/core/locales/es-LA.mjs +35 -0
  85. package/esm2022/core/locales/fa-IR.mjs +34 -0
  86. package/{esm2020 → esm2022}/core/locales/locale-service.mjs +7 -7
  87. package/{esm2020 → esm2022}/core/locales/locale-service.module.mjs +7 -7
  88. package/esm2022/core/locales/pt-BR.mjs +33 -0
  89. package/esm2022/core/locales/ru-RU.mjs +31 -0
  90. package/esm2022/core/locales/zh-CN.mjs +32 -0
  91. package/{esm2020 → esm2022}/core/option/action.mjs +9 -9
  92. package/{esm2020 → esm2022}/core/option/optgroup.mjs +4 -4
  93. package/{esm2020 → esm2022}/core/option/option-module.mjs +5 -5
  94. package/esm2022/core/option/option.mjs +299 -0
  95. package/esm2022/core/overlay/overlay-position-map.mjs +251 -0
  96. package/{esm2020 → esm2022}/core/pop-up/constants.mjs +2 -1
  97. package/esm2022/core/pop-up/pop-up-trigger.mjs +256 -0
  98. package/{esm2020 → esm2022}/core/pop-up/pop-up.mjs +4 -4
  99. package/{esm2020 → esm2022}/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +4 -4
  100. package/{esm2020 → esm2022}/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +5 -5
  101. package/esm2022/core/services/measure-scrollbar.service.mjs +48 -0
  102. package/{esm2020 → esm2022}/core/utils/data-size/data-size.pipe.mjs +8 -8
  103. package/{esm2020 → esm2022}/core/version.mjs +2 -2
  104. package/{esm2020 → esm2022}/datepicker/calendar-body.component.mjs +4 -4
  105. package/esm2022/datepicker/calendar-header.component.mjs +135 -0
  106. package/esm2022/datepicker/calendar.component.mjs +166 -0
  107. package/esm2022/datepicker/datepicker-input.directive.mjs +963 -0
  108. package/{esm2020 → esm2022}/datepicker/datepicker-intl.mjs +4 -4
  109. package/{esm2020 → esm2022}/datepicker/datepicker-module.mjs +38 -38
  110. package/esm2022/datepicker/datepicker-toggle.component.mjs +86 -0
  111. package/esm2022/datepicker/datepicker.component.mjs +393 -0
  112. package/esm2022/datepicker/month-view.component.mjs +149 -0
  113. package/{esm2020 → esm2022}/divider/divider.component.mjs +4 -4
  114. package/{esm2020 → esm2022}/divider/divider.module.mjs +5 -5
  115. package/{esm2020 → esm2022}/dl/dl.component.mjs +10 -10
  116. package/{esm2020 → esm2022}/dl/dl.module.mjs +13 -13
  117. package/{esm2020 → esm2022}/dropdown/dropdown-content.directive.mjs +4 -4
  118. package/{esm2020 → esm2022}/dropdown/dropdown-item.component.mjs +6 -6
  119. package/esm2022/dropdown/dropdown-trigger.directive.mjs +489 -0
  120. package/esm2022/dropdown/dropdown.component.mjs +292 -0
  121. package/{esm2020 → esm2022}/dropdown/dropdown.module.mjs +15 -15
  122. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +106 -0
  123. package/{esm2020 → esm2022}/file-upload/file-drop.mjs +4 -4
  124. package/{esm2020 → esm2022}/file-upload/file-upload.module.mjs +25 -25
  125. package/esm2022/file-upload/multiple-file-upload.component.mjs +165 -0
  126. package/esm2022/file-upload/single-file-upload.component.mjs +134 -0
  127. package/{esm2020 → esm2022}/form-field/cleaner.mjs +4 -4
  128. package/esm2022/form-field/form-field.mjs +267 -0
  129. package/{esm2020 → esm2022}/form-field/form-field.module.mjs +23 -23
  130. package/{esm2020 → esm2022}/form-field/hint.mjs +4 -4
  131. package/esm2022/form-field/password-hint.mjs +149 -0
  132. package/{esm2020 → esm2022}/form-field/prefix.mjs +4 -4
  133. package/{esm2020 → esm2022}/form-field/stepper.mjs +6 -6
  134. package/{esm2020 → esm2022}/form-field/suffix.mjs +4 -4
  135. package/esm2022/form-field/validate.directive.mjs +158 -0
  136. package/{esm2020 → esm2022}/icon/icon.component.mjs +7 -7
  137. package/{esm2020 → esm2022}/icon/icon.module.mjs +11 -11
  138. package/{esm2020 → esm2022}/input/input-number-validators.mjs +7 -7
  139. package/esm2022/input/input-number.mjs +386 -0
  140. package/esm2022/input/input-password.mjs +343 -0
  141. package/esm2022/input/input.mjs +297 -0
  142. package/{esm2020 → esm2022}/input/input.module.mjs +23 -23
  143. package/esm2022/link/link.component.mjs +122 -0
  144. package/{esm2020 → esm2022}/link/link.module.mjs +7 -7
  145. package/esm2022/list/list-selection.component.mjs +705 -0
  146. package/{esm2020 → esm2022}/list/list.component.mjs +7 -7
  147. package/{esm2020 → esm2022}/list/list.module.mjs +20 -20
  148. package/esm2022/loader-overlay/loader-overlay.component.mjs +103 -0
  149. package/{esm2020 → esm2022}/loader-overlay/loader-overlay.module.mjs +17 -17
  150. package/{esm2020 → esm2022}/markdown/markdown.component.mjs +13 -13
  151. package/{esm2020 → esm2022}/markdown/markdown.module.mjs +5 -5
  152. package/{esm2020 → esm2022}/markdown/markdown.service.mjs +4 -4
  153. package/{esm2020 → esm2022}/modal/css-unit.pipe.mjs +4 -4
  154. package/esm2022/modal/modal-control.service.mjs +85 -0
  155. package/esm2022/modal/modal.component.mjs +523 -0
  156. package/{esm2020 → esm2022}/modal/modal.directive.mjs +13 -13
  157. package/esm2022/modal/modal.module.mjs +75 -0
  158. package/esm2022/modal/modal.service.mjs +124 -0
  159. package/esm2022/navbar/navbar-item.component.mjs +606 -0
  160. package/esm2022/navbar/navbar.component.mjs +248 -0
  161. package/{esm2020 → esm2022}/navbar/navbar.module.mjs +37 -37
  162. package/esm2022/navbar/vertical-navbar.component.mjs +117 -0
  163. package/esm2022/popover/popover-confirm.component.mjs +108 -0
  164. package/esm2022/popover/popover.component.mjs +266 -0
  165. package/{esm2020 → esm2022}/popover/popover.module.mjs +8 -8
  166. package/{esm2020 → esm2022}/progress-bar/progress-bar.component.mjs +4 -4
  167. package/{esm2020 → esm2022}/progress-bar/progress-bar.module.mjs +7 -7
  168. package/{esm2020 → esm2022}/progress-spinner/progress-spinner.component.mjs +12 -12
  169. package/{esm2020 → esm2022}/progress-spinner/progress-spinner.module.mjs +7 -7
  170. package/esm2022/radio/radio.component.mjs +457 -0
  171. package/{esm2020 → esm2022}/radio/radio.module.mjs +5 -5
  172. package/esm2022/select/select-option.directive.mjs +65 -0
  173. package/esm2022/select/select.component.mjs +1160 -0
  174. package/{esm2020 → esm2022}/select/select.module.mjs +32 -32
  175. package/esm2022/sidebar/sidebar.component.mjs +146 -0
  176. package/{esm2020 → esm2022}/sidebar/sidebar.module.mjs +9 -9
  177. package/esm2022/sidepanel/sidepanel-container.component.mjs +110 -0
  178. package/{esm2020 → esm2022}/sidepanel/sidepanel-directives.mjs +18 -18
  179. package/{esm2020 → esm2022}/sidepanel/sidepanel.module.mjs +32 -32
  180. package/{esm2020 → esm2022}/sidepanel/sidepanel.service.mjs +10 -10
  181. package/esm2022/splitter/splitter.component.mjs +482 -0
  182. package/{esm2020 → esm2022}/splitter/splitter.module.mjs +12 -12
  183. package/{esm2020 → esm2022}/table/table.component.mjs +4 -4
  184. package/{esm2020 → esm2022}/table/table.module.mjs +9 -9
  185. package/esm2022/tabs/paginated-tab-header.mjs +488 -0
  186. package/esm2022/tabs/tab-body.component.mjs +179 -0
  187. package/{esm2020 → esm2022}/tabs/tab-content.directive.mjs +4 -4
  188. package/esm2022/tabs/tab-group.component.mjs +349 -0
  189. package/{esm2020 → esm2022}/tabs/tab-header.component.mjs +4 -4
  190. package/{esm2020 → esm2022}/tabs/tab-label-wrapper.directive.mjs +4 -4
  191. package/{esm2020 → esm2022}/tabs/tab-label.directive.mjs +4 -4
  192. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +111 -0
  193. package/{esm2020 → esm2022}/tabs/tab.component.mjs +43 -34
  194. package/{esm2020 → esm2022}/tabs/tabs.module.mjs +42 -42
  195. package/esm2022/tags/tag-input.mjs +250 -0
  196. package/esm2022/tags/tag-list.component.mjs +718 -0
  197. package/esm2022/tags/tag.component.mjs +381 -0
  198. package/esm2022/tags/tag.module.mjs +56 -0
  199. package/esm2022/textarea/textarea.component.mjs +254 -0
  200. package/{esm2020 → esm2022}/textarea/textarea.module.mjs +5 -5
  201. package/esm2022/timepicker/timepicker.directive.mjs +647 -0
  202. package/{esm2020 → esm2022}/timepicker/timepicker.module.mjs +11 -11
  203. package/{esm2020 → esm2022}/timezone/cities-by-filter.pipe.mjs +4 -4
  204. package/esm2022/timezone/timezone-option.component.mjs +48 -0
  205. package/{esm2020 → esm2022}/timezone/timezone-option.directive.mjs +4 -4
  206. package/esm2022/timezone/timezone-select.component.mjs +40 -0
  207. package/{esm2020 → esm2022}/timezone/timezone.module.mjs +29 -29
  208. package/{esm2020 → esm2022}/timezone/utc-offset.pipe.mjs +4 -4
  209. package/esm2022/title/title.directive.mjs +107 -0
  210. package/{esm2020 → esm2022}/title/title.module.mjs +5 -5
  211. package/{esm2020 → esm2022}/toast/toast-container.component.mjs +4 -4
  212. package/esm2022/toast/toast.component.mjs +92 -0
  213. package/esm2022/toast/toast.module.mjs +48 -0
  214. package/esm2022/toast/toast.service.mjs +188 -0
  215. package/esm2022/toggle/toggle.component.mjs +156 -0
  216. package/{esm2020 → esm2022}/toggle/toggle.module.mjs +5 -5
  217. package/esm2022/tooltip/tooltip.component.mjs +299 -0
  218. package/{esm2020 → esm2022}/tooltip/tooltip.module.mjs +14 -14
  219. package/esm2022/tree/data-source/flat-data-source.mjs +162 -0
  220. package/{esm2020 → esm2022}/tree/node.mjs +4 -4
  221. package/{esm2020 → esm2022}/tree/outlet.mjs +4 -4
  222. package/esm2022/tree/padding.directive.mjs +113 -0
  223. package/esm2022/tree/toggle.mjs +81 -0
  224. package/esm2022/tree/tree-base.mjs +243 -0
  225. package/esm2022/tree/tree-option.component.mjs +303 -0
  226. package/esm2022/tree/tree-selection.component.mjs +558 -0
  227. package/{esm2020 → esm2022}/tree/tree.mjs +4 -4
  228. package/{esm2020 → esm2022}/tree/tree.module.mjs +21 -21
  229. package/esm2022/tree-select/tree-select.component.mjs +936 -0
  230. package/{esm2020 → esm2022}/tree-select/tree-select.module.mjs +17 -17
  231. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-autocomplete.mjs +80 -77
  232. package/fesm2022/ptsecurity-mosaic-autocomplete.mjs.map +1 -0
  233. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button-toggle.mjs +47 -47
  234. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
  235. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button.mjs +25 -25
  236. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button.mjs.map +1 -1
  237. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-card.mjs +17 -17
  238. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-card.mjs.map +1 -1
  239. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-checkbox.mjs +39 -39
  240. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-checkbox.mjs.map +1 -1
  241. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-code-block.mjs +34 -34
  242. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-code-block.mjs.map +1 -1
  243. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-core.mjs +650 -220
  244. package/fesm2022/ptsecurity-mosaic-core.mjs.map +1 -0
  245. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-datepicker.mjs +343 -351
  246. package/fesm2022/ptsecurity-mosaic-datepicker.mjs.map +1 -0
  247. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-divider.mjs +7 -7
  248. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-divider.mjs.map +1 -1
  249. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dl.mjs +21 -21
  250. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dl.mjs.map +1 -1
  251. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dropdown.mjs +90 -90
  252. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dropdown.mjs.map +1 -1
  253. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-ellipsis-center.mjs +11 -11
  254. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-ellipsis-center.mjs.map +1 -1
  255. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-file-upload.mjs +55 -47
  256. package/fesm2022/ptsecurity-mosaic-file-upload.mjs.map +1 -0
  257. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-form-field.mjs +87 -84
  258. package/fesm2022/ptsecurity-mosaic-form-field.mjs.map +1 -0
  259. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-icon.mjs +16 -16
  260. package/fesm2022/ptsecurity-mosaic-icon.mjs.map +1 -0
  261. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-input.mjs +383 -167
  262. package/fesm2022/ptsecurity-mosaic-input.mjs.map +1 -0
  263. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-link.mjs +22 -22
  264. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-link.mjs.map +1 -1
  265. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-list.mjs +86 -86
  266. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-list.mjs.map +1 -1
  267. package/fesm2022/ptsecurity-mosaic-loader-overlay.mjs +155 -0
  268. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-loader-overlay.mjs.map +1 -1
  269. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-markdown.mjs +19 -19
  270. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-markdown.mjs.map +1 -1
  271. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-modal.mjs +164 -148
  272. package/fesm2022/ptsecurity-mosaic-modal.mjs.map +1 -0
  273. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-navbar.mjs +186 -178
  274. package/fesm2022/ptsecurity-mosaic-navbar.mjs.map +1 -0
  275. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-popover.mjs +38 -38
  276. package/fesm2022/ptsecurity-mosaic-popover.mjs.map +1 -0
  277. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-bar.mjs +9 -9
  278. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
  279. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-spinner.mjs +18 -18
  280. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
  281. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-radio.mjs +78 -78
  282. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-radio.mjs.map +1 -1
  283. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-select.mjs +189 -175
  284. package/fesm2022/ptsecurity-mosaic-select.mjs.map +1 -0
  285. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidebar.mjs +29 -29
  286. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidebar.mjs.map +1 -1
  287. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidepanel.mjs +63 -63
  288. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
  289. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-splitter.mjs +55 -55
  290. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-splitter.mjs.map +1 -1
  291. package/fesm2022/ptsecurity-mosaic-table.mjs +45 -0
  292. package/fesm2022/ptsecurity-mosaic-table.mjs.map +1 -0
  293. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tabs.mjs +188 -179
  294. package/fesm2022/ptsecurity-mosaic-tabs.mjs.map +1 -0
  295. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tags.mjs +131 -131
  296. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tags.mjs.map +1 -1
  297. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-textarea.mjs +41 -41
  298. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-textarea.mjs.map +1 -1
  299. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timepicker.mjs +95 -95
  300. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timepicker.mjs.map +1 -1
  301. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timezone.mjs +54 -54
  302. package/fesm2022/ptsecurity-mosaic-timezone.mjs.map +1 -0
  303. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-title.mjs +18 -18
  304. package/fesm2022/ptsecurity-mosaic-title.mjs.map +1 -0
  305. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toast.mjs +47 -41
  306. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toast.mjs.map +1 -1
  307. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toggle.mjs +35 -35
  308. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toggle.mjs.map +1 -1
  309. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tooltip.mjs +47 -47
  310. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tooltip.mjs.map +1 -1
  311. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tree-select.mjs +123 -123
  312. package/fesm2022/ptsecurity-mosaic-tree-select.mjs.map +1 -0
  313. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tree.mjs +202 -198
  314. package/fesm2022/ptsecurity-mosaic-tree.mjs.map +1 -0
  315. package/file-upload/file-upload.d.ts +1 -1
  316. package/file-upload/multiple-file-upload.component.d.ts +5 -4
  317. package/file-upload/single-file-upload.component.d.ts +5 -4
  318. package/form-field/_form-field-theme.scss +4 -0
  319. package/form-field/form-field.d.ts +1 -1
  320. package/form-field/hint.d.ts +1 -1
  321. package/form-field/password-hint.d.ts +2 -1
  322. package/icon/icon.component.d.ts +1 -1
  323. package/input/input-number-validators.d.ts +2 -2
  324. package/input/input-number.d.ts +61 -10
  325. package/input/input-password.d.ts +2 -2
  326. package/input/input.d.ts +1 -1
  327. package/link/link.component.d.ts +1 -1
  328. package/list/list-selection.component.d.ts +2 -2
  329. package/loader-overlay/loader-overlay.component.d.ts +1 -1
  330. package/loader-overlay/loader-overlay.scss +12 -2
  331. package/markdown/markdown.component.d.ts +1 -1
  332. package/modal/modal.component.d.ts +6 -2
  333. package/modal/modal.module.d.ts +2 -1
  334. package/modal/modal.scss +14 -2
  335. package/modal/modal.type.d.ts +3 -3
  336. package/navbar/navbar-item.component.d.ts +3 -3
  337. package/navbar/navbar-item.scss +5 -0
  338. package/navbar/navbar.component.d.ts +7 -4
  339. package/navbar/vertical-navbar.component.d.ts +5 -3
  340. package/package.json +148 -237
  341. package/popover/popover-confirm.component.d.ts +1 -1
  342. package/popover/popover.component.d.ts +1 -1
  343. package/prebuilt-themes/dark-theme.css +1 -1
  344. package/prebuilt-themes/default-theme.css +1 -1
  345. package/prebuilt-visual/default-visual.css +1 -1
  346. package/progress-bar/progress-bar.component.d.ts +2 -2
  347. package/progress-spinner/progress-spinner.component.d.ts +3 -3
  348. package/radio/_radio-theme.scss +4 -0
  349. package/radio/radio.component.d.ts +2 -2
  350. package/select/select.component.d.ts +12 -9
  351. package/select/select.scss +1 -1
  352. package/sidebar/sidebar.component.d.ts +3 -3
  353. package/sidepanel/sidepanel-directives.d.ts +2 -2
  354. package/splitter/splitter.component.d.ts +3 -3
  355. package/tabs/paginated-tab-header.d.ts +3 -3
  356. package/tabs/tab-body.component.d.ts +3 -3
  357. package/tabs/tab-group.component.d.ts +2 -2
  358. package/tabs/tab-header.component.d.ts +2 -2
  359. package/tabs/tab-label-wrapper.directive.d.ts +1 -1
  360. package/tabs/tab-nav-bar/tab-nav-bar.d.ts +1 -1
  361. package/tabs/tab.component.d.ts +1 -1
  362. package/tags/tag-input.d.ts +1 -1
  363. package/tags/tag-list.component.d.ts +1 -1
  364. package/tags/tag.component.d.ts +1 -1
  365. package/textarea/textarea.component.d.ts +1 -1
  366. package/timepicker/timepicker.directive.d.ts +1 -1
  367. package/timezone/timezone-option.component.d.ts +1 -1
  368. package/toast/toast.type.d.ts +1 -1
  369. package/toggle/toggle.component.d.ts +2 -2
  370. package/tooltip/tooltip.component.d.ts +3 -3
  371. package/tree/node.d.ts +1 -1
  372. package/tree/padding.directive.d.ts +1 -1
  373. package/tree/toggle.d.ts +2 -2
  374. package/tree/tree-base.d.ts +1 -1
  375. package/tree/tree-option.component.d.ts +1 -1
  376. package/tree/tree-option.scss +4 -2
  377. package/tree/tree-selection.component.d.ts +1 -1
  378. package/tree-select/tree-select.component.d.ts +1 -1
  379. package/esm2020/autocomplete/autocomplete-trigger.directive.mjs +0 -552
  380. package/esm2020/button/button.component.mjs +0 -148
  381. package/esm2020/button-toggle/button-toggle.component.mjs +0 -381
  382. package/esm2020/card/card.component.mjs +0 -80
  383. package/esm2020/checkbox/checkbox.mjs +0 -300
  384. package/esm2020/code-block/code-block.component.mjs +0 -157
  385. package/esm2020/code-block/code-block.module.mjs +0 -60
  386. package/esm2020/core/common-behaviors/color.mjs +0 -33
  387. package/esm2020/core/formatters/index.mjs +0 -78
  388. package/esm2020/core/formatters/number/formatter.mjs +0 -129
  389. package/esm2020/core/locales/en-US.mjs +0 -10
  390. package/esm2020/core/locales/es-LA.mjs +0 -6
  391. package/esm2020/core/locales/fa-IR.mjs +0 -6
  392. package/esm2020/core/locales/pt-BR.mjs +0 -6
  393. package/esm2020/core/locales/ru-RU.mjs +0 -10
  394. package/esm2020/core/locales/zh-CN.mjs +0 -6
  395. package/esm2020/core/option/option.mjs +0 -262
  396. package/esm2020/core/overlay/overlay-position-map.mjs +0 -245
  397. package/esm2020/core/pop-up/pop-up-trigger.mjs +0 -247
  398. package/esm2020/core/services/measure-scrollbar.service.mjs +0 -48
  399. package/esm2020/datepicker/calendar-header.component.mjs +0 -134
  400. package/esm2020/datepicker/calendar.component.mjs +0 -175
  401. package/esm2020/datepicker/datepicker-input.directive.mjs +0 -954
  402. package/esm2020/datepicker/datepicker-toggle.component.mjs +0 -86
  403. package/esm2020/datepicker/datepicker.component.mjs +0 -393
  404. package/esm2020/datepicker/month-view.component.mjs +0 -158
  405. package/esm2020/dropdown/dropdown-trigger.directive.mjs +0 -489
  406. package/esm2020/dropdown/dropdown.component.mjs +0 -292
  407. package/esm2020/ellipsis-center/ellipsis-center.directive.mjs +0 -106
  408. package/esm2020/file-upload/multiple-file-upload.component.mjs +0 -161
  409. package/esm2020/file-upload/single-file-upload.component.mjs +0 -130
  410. package/esm2020/form-field/form-field.mjs +0 -267
  411. package/esm2020/form-field/password-hint.mjs +0 -146
  412. package/esm2020/form-field/validate.directive.mjs +0 -158
  413. package/esm2020/input/input-number.mjs +0 -168
  414. package/esm2020/input/input-password.mjs +0 -343
  415. package/esm2020/input/input.mjs +0 -297
  416. package/esm2020/link/link.component.mjs +0 -122
  417. package/esm2020/list/list-selection.component.mjs +0 -705
  418. package/esm2020/loader-overlay/loader-overlay.component.mjs +0 -103
  419. package/esm2020/modal/modal-control.service.mjs +0 -85
  420. package/esm2020/modal/modal.component.mjs +0 -510
  421. package/esm2020/modal/modal.module.mjs +0 -71
  422. package/esm2020/modal/modal.service.mjs +0 -124
  423. package/esm2020/navbar/navbar-item.component.mjs +0 -606
  424. package/esm2020/navbar/navbar.component.mjs +0 -239
  425. package/esm2020/navbar/vertical-navbar.component.mjs +0 -114
  426. package/esm2020/popover/popover-confirm.component.mjs +0 -108
  427. package/esm2020/popover/popover.component.mjs +0 -266
  428. package/esm2020/radio/radio.component.mjs +0 -457
  429. package/esm2020/select/select-option.directive.mjs +0 -65
  430. package/esm2020/select/select.component.mjs +0 -1146
  431. package/esm2020/sidebar/sidebar.component.mjs +0 -146
  432. package/esm2020/sidepanel/sidepanel-container.component.mjs +0 -110
  433. package/esm2020/splitter/splitter.component.mjs +0 -482
  434. package/esm2020/tabs/paginated-tab-header.mjs +0 -488
  435. package/esm2020/tabs/tab-body.component.mjs +0 -179
  436. package/esm2020/tabs/tab-group.component.mjs +0 -349
  437. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +0 -111
  438. package/esm2020/tags/tag-input.mjs +0 -250
  439. package/esm2020/tags/tag-list.component.mjs +0 -718
  440. package/esm2020/tags/tag.component.mjs +0 -381
  441. package/esm2020/tags/tag.module.mjs +0 -56
  442. package/esm2020/textarea/textarea.component.mjs +0 -254
  443. package/esm2020/timepicker/timepicker.directive.mjs +0 -647
  444. package/esm2020/timezone/timezone-option.component.mjs +0 -48
  445. package/esm2020/timezone/timezone-select.component.mjs +0 -40
  446. package/esm2020/title/title.directive.mjs +0 -107
  447. package/esm2020/toast/toast.component.mjs +0 -92
  448. package/esm2020/toast/toast.module.mjs +0 -42
  449. package/esm2020/toast/toast.service.mjs +0 -188
  450. package/esm2020/toggle/toggle.component.mjs +0 -156
  451. package/esm2020/tooltip/tooltip.component.mjs +0 -299
  452. package/esm2020/tree/data-source/flat-data-source.mjs +0 -162
  453. package/esm2020/tree/padding.directive.mjs +0 -113
  454. package/esm2020/tree/toggle.mjs +0 -81
  455. package/esm2020/tree/tree-base.mjs +0 -243
  456. package/esm2020/tree/tree-option.component.mjs +0 -300
  457. package/esm2020/tree/tree-selection.component.mjs +0 -557
  458. package/esm2020/tree-select/tree-select.component.mjs +0 -936
  459. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +0 -753
  460. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs.map +0 -1
  461. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +0 -405
  462. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs.map +0 -1
  463. package/fesm2015/ptsecurity-mosaic-button.mjs +0 -193
  464. package/fesm2015/ptsecurity-mosaic-button.mjs.map +0 -1
  465. package/fesm2015/ptsecurity-mosaic-card.mjs +0 -111
  466. package/fesm2015/ptsecurity-mosaic-card.mjs.map +0 -1
  467. package/fesm2015/ptsecurity-mosaic-checkbox.mjs +0 -351
  468. package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +0 -1
  469. package/fesm2015/ptsecurity-mosaic-code-block.mjs +0 -280
  470. package/fesm2015/ptsecurity-mosaic-code-block.mjs.map +0 -1
  471. package/fesm2015/ptsecurity-mosaic-core.mjs +0 -2314
  472. package/fesm2015/ptsecurity-mosaic-core.mjs.map +0 -1
  473. package/fesm2015/ptsecurity-mosaic-datepicker.mjs +0 -2112
  474. package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +0 -1
  475. package/fesm2015/ptsecurity-mosaic-divider.mjs +0 -61
  476. package/fesm2015/ptsecurity-mosaic-divider.mjs.map +0 -1
  477. package/fesm2015/ptsecurity-mosaic-dl.mjs +0 -126
  478. package/fesm2015/ptsecurity-mosaic-dl.mjs.map +0 -1
  479. package/fesm2015/ptsecurity-mosaic-dropdown.mjs +0 -1115
  480. package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +0 -1
  481. package/fesm2015/ptsecurity-mosaic-ellipsis-center.mjs +0 -113
  482. package/fesm2015/ptsecurity-mosaic-ellipsis-center.mjs.map +0 -1
  483. package/fesm2015/ptsecurity-mosaic-file-upload.mjs +0 -392
  484. package/fesm2015/ptsecurity-mosaic-file-upload.mjs.map +0 -1
  485. package/fesm2015/ptsecurity-mosaic-form-field.mjs +0 -772
  486. package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +0 -1
  487. package/fesm2015/ptsecurity-mosaic-icon.mjs +0 -86
  488. package/fesm2015/ptsecurity-mosaic-icon.mjs.map +0 -1
  489. package/fesm2015/ptsecurity-mosaic-input.mjs +0 -951
  490. package/fesm2015/ptsecurity-mosaic-input.mjs.map +0 -1
  491. package/fesm2015/ptsecurity-mosaic-link.mjs +0 -150
  492. package/fesm2015/ptsecurity-mosaic-link.mjs.map +0 -1
  493. package/fesm2015/ptsecurity-mosaic-list.mjs +0 -807
  494. package/fesm2015/ptsecurity-mosaic-list.mjs.map +0 -1
  495. package/fesm2015/ptsecurity-mosaic-loader-overlay.mjs +0 -157
  496. package/fesm2015/ptsecurity-mosaic-markdown.mjs +0 -128
  497. package/fesm2015/ptsecurity-mosaic-markdown.mjs.map +0 -1
  498. package/fesm2015/ptsecurity-mosaic-modal.mjs +0 -875
  499. package/fesm2015/ptsecurity-mosaic-modal.mjs.map +0 -1
  500. package/fesm2015/ptsecurity-mosaic-navbar.mjs +0 -1055
  501. package/fesm2015/ptsecurity-mosaic-navbar.mjs.map +0 -1
  502. package/fesm2015/ptsecurity-mosaic-popover.mjs +0 -411
  503. package/fesm2015/ptsecurity-mosaic-popover.mjs.map +0 -1
  504. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs +0 -74
  505. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs.map +0 -1
  506. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +0 -93
  507. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs.map +0 -1
  508. package/fesm2015/ptsecurity-mosaic-radio.mjs +0 -481
  509. package/fesm2015/ptsecurity-mosaic-select.mjs +0 -1286
  510. package/fesm2015/ptsecurity-mosaic-select.mjs.map +0 -1
  511. package/fesm2015/ptsecurity-mosaic-sidebar.mjs +0 -202
  512. package/fesm2015/ptsecurity-mosaic-sidebar.mjs.map +0 -1
  513. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs +0 -622
  514. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs.map +0 -1
  515. package/fesm2015/ptsecurity-mosaic-splitter.mjs.map +0 -1
  516. package/fesm2015/ptsecurity-mosaic-table.mjs +0 -45
  517. package/fesm2015/ptsecurity-mosaic-table.mjs.map +0 -1
  518. package/fesm2015/ptsecurity-mosaic-tabs.mjs +0 -1523
  519. package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +0 -1
  520. package/fesm2015/ptsecurity-mosaic-tags.mjs +0 -1397
  521. package/fesm2015/ptsecurity-mosaic-tags.mjs.map +0 -1
  522. package/fesm2015/ptsecurity-mosaic-textarea.mjs +0 -280
  523. package/fesm2015/ptsecurity-mosaic-timepicker.mjs +0 -708
  524. package/fesm2015/ptsecurity-mosaic-timepicker.mjs.map +0 -1
  525. package/fesm2015/ptsecurity-mosaic-timezone.mjs +0 -316
  526. package/fesm2015/ptsecurity-mosaic-timezone.mjs.map +0 -1
  527. package/fesm2015/ptsecurity-mosaic-title.mjs +0 -128
  528. package/fesm2015/ptsecurity-mosaic-title.mjs.map +0 -1
  529. package/fesm2015/ptsecurity-mosaic-toast.mjs +0 -379
  530. package/fesm2015/ptsecurity-mosaic-toast.mjs.map +0 -1
  531. package/fesm2015/ptsecurity-mosaic-toggle.mjs +0 -178
  532. package/fesm2015/ptsecurity-mosaic-toggle.mjs.map +0 -1
  533. package/fesm2015/ptsecurity-mosaic-tooltip.mjs +0 -369
  534. package/fesm2015/ptsecurity-mosaic-tooltip.mjs.map +0 -1
  535. package/fesm2015/ptsecurity-mosaic-tree-select.mjs +0 -983
  536. package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +0 -1
  537. package/fesm2015/ptsecurity-mosaic-tree.mjs +0 -1816
  538. package/fesm2015/ptsecurity-mosaic-tree.mjs.map +0 -1
  539. package/fesm2020/ptsecurity-mosaic-autocomplete.mjs.map +0 -1
  540. package/fesm2020/ptsecurity-mosaic-core.mjs.map +0 -1
  541. package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +0 -1
  542. package/fesm2020/ptsecurity-mosaic-file-upload.mjs.map +0 -1
  543. package/fesm2020/ptsecurity-mosaic-form-field.mjs.map +0 -1
  544. package/fesm2020/ptsecurity-mosaic-icon.mjs.map +0 -1
  545. package/fesm2020/ptsecurity-mosaic-input.mjs.map +0 -1
  546. package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs +0 -155
  547. package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs.map +0 -1
  548. package/fesm2020/ptsecurity-mosaic-modal.mjs.map +0 -1
  549. package/fesm2020/ptsecurity-mosaic-navbar.mjs.map +0 -1
  550. package/fesm2020/ptsecurity-mosaic-popover.mjs.map +0 -1
  551. package/fesm2020/ptsecurity-mosaic-radio.mjs.map +0 -1
  552. package/fesm2020/ptsecurity-mosaic-select.mjs.map +0 -1
  553. package/fesm2020/ptsecurity-mosaic-splitter.mjs +0 -524
  554. package/fesm2020/ptsecurity-mosaic-table.mjs +0 -45
  555. package/fesm2020/ptsecurity-mosaic-table.mjs.map +0 -1
  556. package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +0 -1
  557. package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +0 -1
  558. package/fesm2020/ptsecurity-mosaic-timezone.mjs.map +0 -1
  559. package/fesm2020/ptsecurity-mosaic-title.mjs.map +0 -1
  560. package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +0 -1
  561. package/fesm2020/ptsecurity-mosaic-tree.mjs.map +0 -1
  562. package/fesm2020/ptsecurity-mosaic.mjs +0 -4
  563. package/fesm2020/ptsecurity-mosaic.mjs.map +0 -1
  564. /package/{esm2020 → esm2022}/autocomplete/index.mjs +0 -0
  565. /package/{esm2020 → esm2022}/autocomplete/ptsecurity-mosaic-autocomplete.mjs +0 -0
  566. /package/{esm2020 → esm2022}/autocomplete/public-api.mjs +0 -0
  567. /package/{esm2020 → esm2022}/button/index.mjs +0 -0
  568. /package/{esm2020 → esm2022}/button/ptsecurity-mosaic-button.mjs +0 -0
  569. /package/{esm2020 → esm2022}/button/public-api.mjs +0 -0
  570. /package/{esm2020 → esm2022}/button-toggle/index.mjs +0 -0
  571. /package/{esm2020 → esm2022}/button-toggle/ptsecurity-mosaic-button-toggle.mjs +0 -0
  572. /package/{esm2020 → esm2022}/button-toggle/public-api.mjs +0 -0
  573. /package/{esm2020 → esm2022}/card/index.mjs +0 -0
  574. /package/{esm2020 → esm2022}/card/ptsecurity-mosaic-card.mjs +0 -0
  575. /package/{esm2020 → esm2022}/card/public-api.mjs +0 -0
  576. /package/{esm2020 → esm2022}/checkbox/checkbox-config.mjs +0 -0
  577. /package/{esm2020 → esm2022}/checkbox/index.mjs +0 -0
  578. /package/{esm2020 → esm2022}/checkbox/ptsecurity-mosaic-checkbox.mjs +0 -0
  579. /package/{esm2020 → esm2022}/checkbox/public-api.mjs +0 -0
  580. /package/{esm2020 → esm2022}/code-block/code-block.types.mjs +0 -0
  581. /package/{esm2020 → esm2022}/code-block/index.mjs +0 -0
  582. /package/{esm2020 → esm2022}/code-block/ptsecurity-mosaic-code-block.mjs +0 -0
  583. /package/{esm2020 → esm2022}/code-block/public-api.mjs +0 -0
  584. /package/{esm2020 → esm2022}/core/animation/animation.mjs +0 -0
  585. /package/{esm2020 → esm2022}/core/animation/fade-animations.mjs +0 -0
  586. /package/{esm2020 → esm2022}/core/animation/index.mjs +0 -0
  587. /package/{esm2020 → esm2022}/core/animation/select-animations.mjs +0 -0
  588. /package/{esm2020 → esm2022}/core/common-behaviors/constructor.mjs +0 -0
  589. /package/{esm2020 → esm2022}/core/common-behaviors/error-state.mjs +0 -0
  590. /package/{esm2020 → esm2022}/core/common-behaviors/index.mjs +0 -0
  591. /package/{esm2020 → esm2022}/core/datetime/date-adapter.mjs +0 -0
  592. /package/{esm2020 → esm2022}/core/datetime/date-formats.mjs +0 -0
  593. /package/{esm2020 → esm2022}/core/datetime/index.mjs +0 -0
  594. /package/{esm2020 → esm2022}/core/forms/index.mjs +0 -0
  595. /package/{esm2020 → esm2022}/core/index.mjs +0 -0
  596. /package/{esm2020 → esm2022}/core/label/label-options.mjs +0 -0
  597. /package/{esm2020 → esm2022}/core/locales/index.mjs +0 -0
  598. /package/{esm2020 → esm2022}/core/option/index.mjs +0 -0
  599. /package/{esm2020 → esm2022}/core/pop-up/index.mjs +0 -0
  600. /package/{esm2020 → esm2022}/core/ptsecurity-mosaic-core.mjs +0 -0
  601. /package/{esm2020 → esm2022}/core/public-api.mjs +0 -0
  602. /package/{esm2020 → esm2022}/core/select/constants.mjs +0 -0
  603. /package/{esm2020 → esm2022}/core/select/errors.mjs +0 -0
  604. /package/{esm2020 → esm2022}/core/select/events.mjs +0 -0
  605. /package/{esm2020 → esm2022}/core/select/index.mjs +0 -0
  606. /package/{esm2020 → esm2022}/core/selection/constants.mjs +0 -0
  607. /package/{esm2020 → esm2022}/core/selection/index.mjs +0 -0
  608. /package/{esm2020 → esm2022}/core/title/index.mjs +0 -0
  609. /package/{esm2020 → esm2022}/core/title/title-text-ref.mjs +0 -0
  610. /package/{esm2020 → esm2022}/core/utils/data-size/config.mjs +0 -0
  611. /package/{esm2020 → esm2022}/core/utils/data-size/index.mjs +0 -0
  612. /package/{esm2020 → esm2022}/core/utils/data-size/size.mjs +0 -0
  613. /package/{esm2020 → esm2022}/core/utils/index.mjs +0 -0
  614. /package/{esm2020 → esm2022}/core/utils/public-api.mjs +0 -0
  615. /package/{esm2020 → esm2022}/core/utils/utils.mjs +0 -0
  616. /package/{esm2020 → esm2022}/core/validation/index.mjs +0 -0
  617. /package/{esm2020 → esm2022}/core/validation/validation.mjs +0 -0
  618. /package/{esm2020 → esm2022}/datepicker/datepicker-animations.mjs +0 -0
  619. /package/{esm2020 → esm2022}/datepicker/datepicker-errors.mjs +0 -0
  620. /package/{esm2020 → esm2022}/datepicker/index.mjs +0 -0
  621. /package/{esm2020 → esm2022}/datepicker/ptsecurity-mosaic-datepicker.mjs +0 -0
  622. /package/{esm2020 → esm2022}/datepicker/public-api.mjs +0 -0
  623. /package/{esm2020 → esm2022}/divider/index.mjs +0 -0
  624. /package/{esm2020 → esm2022}/divider/ptsecurity-mosaic-divider.mjs +0 -0
  625. /package/{esm2020 → esm2022}/divider/public-api.mjs +0 -0
  626. /package/{esm2020 → esm2022}/dl/index.mjs +0 -0
  627. /package/{esm2020 → esm2022}/dl/ptsecurity-mosaic-dl.mjs +0 -0
  628. /package/{esm2020 → esm2022}/dl/public-api.mjs +0 -0
  629. /package/{esm2020 → esm2022}/dropdown/dropdown-animations.mjs +0 -0
  630. /package/{esm2020 → esm2022}/dropdown/dropdown-errors.mjs +0 -0
  631. /package/{esm2020 → esm2022}/dropdown/dropdown.types.mjs +0 -0
  632. /package/{esm2020 → esm2022}/dropdown/index.mjs +0 -0
  633. /package/{esm2020 → esm2022}/dropdown/ptsecurity-mosaic-dropdown.mjs +0 -0
  634. /package/{esm2020 → esm2022}/dropdown/public-api.mjs +0 -0
  635. /package/{esm2020 → esm2022}/ellipsis-center/index.mjs +0 -0
  636. /package/{esm2020 → esm2022}/ellipsis-center/ptsecurity-mosaic-ellipsis-center.mjs +0 -0
  637. /package/{esm2020 → esm2022}/ellipsis-center/public-api.mjs +0 -0
  638. /package/{esm2020 → esm2022}/file-upload/file-upload.mjs +0 -0
  639. /package/{esm2020 → esm2022}/file-upload/index.mjs +0 -0
  640. /package/{esm2020 → esm2022}/file-upload/ptsecurity-mosaic-file-upload.mjs +0 -0
  641. /package/{esm2020 → esm2022}/file-upload/public-api.mjs +0 -0
  642. /package/{esm2020 → esm2022}/form-field/form-field-control.mjs +0 -0
  643. /package/{esm2020 → esm2022}/form-field/form-field-errors.mjs +0 -0
  644. /package/{esm2020 → esm2022}/form-field/index.mjs +0 -0
  645. /package/{esm2020 → esm2022}/form-field/ptsecurity-mosaic-form-field.mjs +0 -0
  646. /package/{esm2020 → esm2022}/form-field/public-api.mjs +0 -0
  647. /package/{esm2020 → esm2022}/icon/index.mjs +0 -0
  648. /package/{esm2020 → esm2022}/icon/ptsecurity-mosaic-icon.mjs +0 -0
  649. /package/{esm2020 → esm2022}/icon/public-api.mjs +0 -0
  650. /package/{esm2020 → esm2022}/index.mjs +0 -0
  651. /package/{esm2020 → esm2022}/input/index.mjs +0 -0
  652. /package/{esm2020 → esm2022}/input/input-errors.mjs +0 -0
  653. /package/{esm2020 → esm2022}/input/input-value-accessor.mjs +0 -0
  654. /package/{esm2020 → esm2022}/input/ptsecurity-mosaic-input.mjs +0 -0
  655. /package/{esm2020 → esm2022}/input/public-api.mjs +0 -0
  656. /package/{esm2020 → esm2022}/link/index.mjs +0 -0
  657. /package/{esm2020 → esm2022}/link/ptsecurity-mosaic-link.mjs +0 -0
  658. /package/{esm2020 → esm2022}/link/public-api.mjs +0 -0
  659. /package/{esm2020 → esm2022}/list/index.mjs +0 -0
  660. /package/{esm2020 → esm2022}/list/ptsecurity-mosaic-list.mjs +0 -0
  661. /package/{esm2020 → esm2022}/list/public-api.mjs +0 -0
  662. /package/{esm2020 → esm2022}/loader-overlay/index.mjs +0 -0
  663. /package/{esm2020 → esm2022}/loader-overlay/ptsecurity-mosaic-loader-overlay.mjs +0 -0
  664. /package/{esm2020 → esm2022}/loader-overlay/public-api.mjs +0 -0
  665. /package/{esm2020 → esm2022}/markdown/index.mjs +0 -0
  666. /package/{esm2020 → esm2022}/markdown/markdown.values.mjs +0 -0
  667. /package/{esm2020 → esm2022}/markdown/ptsecurity-mosaic-markdown.mjs +0 -0
  668. /package/{esm2020 → esm2022}/markdown/public-api.mjs +0 -0
  669. /package/{esm2020 → esm2022}/modal/index.mjs +0 -0
  670. /package/{esm2020 → esm2022}/modal/modal-ref.class.mjs +0 -0
  671. /package/{esm2020 → esm2022}/modal/modal-util.mjs +0 -0
  672. /package/{esm2020 → esm2022}/modal/modal.type.mjs +0 -0
  673. /package/{esm2020 → esm2022}/modal/ptsecurity-mosaic-modal.mjs +0 -0
  674. /package/{esm2020 → esm2022}/modal/public-api.mjs +0 -0
  675. /package/{esm2020 → esm2022}/navbar/index.mjs +0 -0
  676. /package/{esm2020 → esm2022}/navbar/ptsecurity-mosaic-navbar.mjs +0 -0
  677. /package/{esm2020 → esm2022}/navbar/public-api.mjs +0 -0
  678. /package/{esm2020 → esm2022}/navbar/vertical-navbar.animation.mjs +0 -0
  679. /package/{esm2020 → esm2022}/popover/index.mjs +0 -0
  680. /package/{esm2020 → esm2022}/popover/popover-animations.mjs +0 -0
  681. /package/{esm2020 → esm2022}/popover/ptsecurity-mosaic-popover.mjs +0 -0
  682. /package/{esm2020 → esm2022}/popover/public-api.mjs +0 -0
  683. /package/{esm2020 → esm2022}/progress-bar/index.mjs +0 -0
  684. /package/{esm2020 → esm2022}/progress-bar/ptsecurity-mosaic-progress-bar.mjs +0 -0
  685. /package/{esm2020 → esm2022}/progress-bar/public-api.mjs +0 -0
  686. /package/{esm2020 → esm2022}/progress-spinner/index.mjs +0 -0
  687. /package/{esm2020 → esm2022}/progress-spinner/ptsecurity-mosaic-progress-spinner.mjs +0 -0
  688. /package/{esm2020 → esm2022}/progress-spinner/public-api.mjs +0 -0
  689. /package/{esm2020 → esm2022}/ptsecurity-mosaic.mjs +0 -0
  690. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  691. /package/{esm2020 → esm2022}/radio/index.mjs +0 -0
  692. /package/{esm2020 → esm2022}/radio/ptsecurity-mosaic-radio.mjs +0 -0
  693. /package/{esm2020 → esm2022}/radio/public-api.mjs +0 -0
  694. /package/{esm2020 → esm2022}/select/index.mjs +0 -0
  695. /package/{esm2020 → esm2022}/select/ptsecurity-mosaic-select.mjs +0 -0
  696. /package/{esm2020 → esm2022}/select/public-api.mjs +0 -0
  697. /package/{esm2020 → esm2022}/sidebar/index.mjs +0 -0
  698. /package/{esm2020 → esm2022}/sidebar/ptsecurity-mosaic-sidebar.mjs +0 -0
  699. /package/{esm2020 → esm2022}/sidebar/public-api.mjs +0 -0
  700. /package/{esm2020 → esm2022}/sidebar/sidebar-animations.mjs +0 -0
  701. /package/{esm2020 → esm2022}/sidepanel/index.mjs +0 -0
  702. /package/{esm2020 → esm2022}/sidepanel/ptsecurity-mosaic-sidepanel.mjs +0 -0
  703. /package/{esm2020 → esm2022}/sidepanel/public-api.mjs +0 -0
  704. /package/{esm2020 → esm2022}/sidepanel/sidepanel-animations.mjs +0 -0
  705. /package/{esm2020 → esm2022}/sidepanel/sidepanel-config.mjs +0 -0
  706. /package/{esm2020 → esm2022}/sidepanel/sidepanel-ref.mjs +0 -0
  707. /package/{esm2020 → esm2022}/splitter/index.mjs +0 -0
  708. /package/{esm2020 → esm2022}/splitter/ptsecurity-mosaic-splitter.mjs +0 -0
  709. /package/{esm2020 → esm2022}/splitter/public-api.mjs +0 -0
  710. /package/{esm2020 → esm2022}/table/index.mjs +0 -0
  711. /package/{esm2020 → esm2022}/table/ptsecurity-mosaic-table.mjs +0 -0
  712. /package/{esm2020 → esm2022}/table/public-api.mjs +0 -0
  713. /package/{esm2020 → esm2022}/tabs/index.mjs +0 -0
  714. /package/{esm2020 → esm2022}/tabs/ptsecurity-mosaic-tabs.mjs +0 -0
  715. /package/{esm2020 → esm2022}/tabs/public-api.mjs +0 -0
  716. /package/{esm2020 → esm2022}/tabs/tab-nav-bar/index.mjs +0 -0
  717. /package/{esm2020 → esm2022}/tabs/tabs-animations.mjs +0 -0
  718. /package/{esm2020 → esm2022}/tags/index.mjs +0 -0
  719. /package/{esm2020 → esm2022}/tags/ptsecurity-mosaic-tags.mjs +0 -0
  720. /package/{esm2020 → esm2022}/tags/public-api.mjs +0 -0
  721. /package/{esm2020 → esm2022}/tags/tag-default-options.mjs +0 -0
  722. /package/{esm2020 → esm2022}/tags/tag-text-control.mjs +0 -0
  723. /package/{esm2020 → esm2022}/textarea/index.mjs +0 -0
  724. /package/{esm2020 → esm2022}/textarea/ptsecurity-mosaic-textarea.mjs +0 -0
  725. /package/{esm2020 → esm2022}/textarea/public-api.mjs +0 -0
  726. /package/{esm2020 → esm2022}/timepicker/index.mjs +0 -0
  727. /package/{esm2020 → esm2022}/timepicker/ptsecurity-mosaic-timepicker.mjs +0 -0
  728. /package/{esm2020 → esm2022}/timepicker/public-api.mjs +0 -0
  729. /package/{esm2020 → esm2022}/timepicker/timepicker.constants.mjs +0 -0
  730. /package/{esm2020 → esm2022}/timezone/index.mjs +0 -0
  731. /package/{esm2020 → esm2022}/timezone/ptsecurity-mosaic-timezone.mjs +0 -0
  732. /package/{esm2020 → esm2022}/timezone/public-api.mjs +0 -0
  733. /package/{esm2020 → esm2022}/timezone/timezone.models.mjs +0 -0
  734. /package/{esm2020 → esm2022}/timezone/timezone.utils.mjs +0 -0
  735. /package/{esm2020 → esm2022}/title/index.mjs +0 -0
  736. /package/{esm2020 → esm2022}/title/ptsecurity-mosaic-title.mjs +0 -0
  737. /package/{esm2020 → esm2022}/title/public-api.mjs +0 -0
  738. /package/{esm2020 → esm2022}/toast/index.mjs +0 -0
  739. /package/{esm2020 → esm2022}/toast/ptsecurity-mosaic-toast.mjs +0 -0
  740. /package/{esm2020 → esm2022}/toast/public-api.mjs +0 -0
  741. /package/{esm2020 → esm2022}/toast/toast-animations.mjs +0 -0
  742. /package/{esm2020 → esm2022}/toast/toast.type.mjs +0 -0
  743. /package/{esm2020 → esm2022}/toggle/index.mjs +0 -0
  744. /package/{esm2020 → esm2022}/toggle/ptsecurity-mosaic-toggle.mjs +0 -0
  745. /package/{esm2020 → esm2022}/toggle/public-api.mjs +0 -0
  746. /package/{esm2020 → esm2022}/tooltip/index.mjs +0 -0
  747. /package/{esm2020 → esm2022}/tooltip/ptsecurity-mosaic-tooltip.mjs +0 -0
  748. /package/{esm2020 → esm2022}/tooltip/public-api.mjs +0 -0
  749. /package/{esm2020 → esm2022}/tooltip/tooltip.animations.mjs +0 -0
  750. /package/{esm2020 → esm2022}/tree/control/base-tree-control.mjs +0 -0
  751. /package/{esm2020 → esm2022}/tree/control/flat-tree-control.mjs +0 -0
  752. /package/{esm2020 → esm2022}/tree/control/nested-tree-control.mjs +0 -0
  753. /package/{esm2020 → esm2022}/tree/control/tree-control.mjs +0 -0
  754. /package/{esm2020 → esm2022}/tree/data-source/nested-data-source.mjs +0 -0
  755. /package/{esm2020 → esm2022}/tree/index.mjs +0 -0
  756. /package/{esm2020 → esm2022}/tree/ptsecurity-mosaic-tree.mjs +0 -0
  757. /package/{esm2020 → esm2022}/tree/public-api.mjs +0 -0
  758. /package/{esm2020 → esm2022}/tree/tree-errors.mjs +0 -0
  759. /package/{esm2020 → esm2022}/tree-select/index.mjs +0 -0
  760. /package/{esm2020 → esm2022}/tree-select/ptsecurity-mosaic-tree-select.mjs +0 -0
  761. /package/{esm2020 → esm2022}/tree-select/public-api.mjs +0 -0
  762. /package/{fesm2015 → fesm2022}/ptsecurity-mosaic.mjs +0 -0
  763. /package/{fesm2015 → fesm2022}/ptsecurity-mosaic.mjs.map +0 -0
@@ -0,0 +1,386 @@
1
+ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
+ import { Attribute, Directive, ElementRef, EventEmitter, forwardRef, Inject, Input, Optional, Renderer2 } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR } from '@angular/forms';
4
+ import { END, C, V, X, A, Z, DELETE, BACKSPACE, TAB, ENTER, ESCAPE, NUMPAD_MINUS, DASH, FF_MINUS, LEFT_ARROW, RIGHT_ARROW, HOME, UP_ARROW, DOWN_ARROW, isFunctionKey, isNumberKey, isNumpadKey } from '@ptsecurity/cdk/keycodes';
5
+ import { MC_LOCALE_SERVICE, McLocaleService } from '@ptsecurity/mosaic/core';
6
+ import { Subject, Subscription } from 'rxjs';
7
+ import * as i0 from "@angular/core";
8
+ import * as i1 from "@ptsecurity/mosaic/core";
9
+ export const BIG_STEP = 10;
10
+ export const SMALL_STEP = 1;
11
+ // TODO: подставлять локализованный сплиттер
12
+ export function normalizeSplitter(value) {
13
+ return value ? value.replace(/,/g, '.') : value;
14
+ }
15
+ export function isFloat(value) {
16
+ return /^-?\d+\.\d+$/.test(value);
17
+ }
18
+ export function isInt(value) {
19
+ return /^-?\d+$/.test(value);
20
+ }
21
+ export function isDigit(value) {
22
+ return isFloat(value) || isInt(value);
23
+ }
24
+ export function getPrecision(value) {
25
+ const arr = value.toString().split('.');
26
+ return arr.length === 1
27
+ ? 1
28
+ // tslint:disable-next-line:no-magic-numbers
29
+ : Math.pow(10, arr[1].length);
30
+ }
31
+ export function add(value1, value2) {
32
+ const precision = Math.max(getPrecision(value1), getPrecision(value2));
33
+ return (value1 * precision + value2 * precision) / precision;
34
+ }
35
+ export const MC_NUMBER_INPUT_VALUE_ACCESSOR = {
36
+ provide: NG_VALUE_ACCESSOR,
37
+ useExisting: forwardRef(() => McNumberInput),
38
+ multi: true
39
+ };
40
+ export class McNumberInput {
41
+ get value() {
42
+ return this._value;
43
+ }
44
+ set value(value) {
45
+ const oldValue = this.value;
46
+ this._value = value;
47
+ if (oldValue !== value) {
48
+ this.setViewValue(this.formatNumber(value));
49
+ this.valueChange.emit(value);
50
+ }
51
+ }
52
+ get disabled() {
53
+ return this._disabled;
54
+ }
55
+ set disabled(value) {
56
+ const newValue = coerceBooleanProperty(value);
57
+ const element = this.nativeElement;
58
+ if (this._disabled !== newValue) {
59
+ this._disabled = newValue;
60
+ this.disabledChange.emit(newValue);
61
+ }
62
+ // We need to null check the `blur` method, because it's undefined during SSR.
63
+ if (newValue && element.blur) {
64
+ // Normally, native input elements automatically blur if they turn disabled. This behavior
65
+ // is problematic, because it would mean that it triggers another change detection cycle,
66
+ // which then causes a changed after checked error if the input element was focused before.
67
+ element.blur();
68
+ }
69
+ }
70
+ get nativeElement() {
71
+ return this.elementRef.nativeElement;
72
+ }
73
+ get viewValue() {
74
+ return this.nativeElement.value;
75
+ }
76
+ get ngControl() {
77
+ return this.control;
78
+ }
79
+ constructor(elementRef, renderer, step, bigStep, min, max, localeService) {
80
+ this.elementRef = elementRef;
81
+ this.renderer = renderer;
82
+ this.localeService = localeService;
83
+ /** Emits when the value changes (either due to user input or programmatic change). */
84
+ this.valueChange = new EventEmitter();
85
+ /** Emits when the disabled state has changed */
86
+ this.disabledChange = new EventEmitter();
87
+ this.stateChanges = new Subject();
88
+ this.withThousandSeparator = true;
89
+ this._disabled = false;
90
+ this.focused = false;
91
+ this.localeSubscription = Subscription.EMPTY;
92
+ // tslint:disable-next-line:no-empty
93
+ this.onTouched = () => { };
94
+ // tslint:disable-next-line:no-empty
95
+ this.cvaOnChange = () => { };
96
+ this.updateLocaleParams = (id) => {
97
+ this.numberLocaleConfig = this.localeService.locales[id].input.number;
98
+ this.setViewValue(this.formatNumber(this.value));
99
+ };
100
+ this.step = isDigit(step) ? parseFloat(step) : SMALL_STEP;
101
+ this.bigStep = isDigit(bigStep) ? parseFloat(bigStep) : BIG_STEP;
102
+ this.min = isDigit(min) ? parseFloat(min) : -Infinity;
103
+ this.max = isDigit(max) ? parseFloat(max) : Infinity;
104
+ setTimeout(() => this.nativeElement.type = 'text', 0);
105
+ if ('valueAsNumber' in this.nativeElement) {
106
+ /* переделать алгоритм */
107
+ Object.defineProperty(Object.getPrototypeOf(this.nativeElement), 'valueAsNumber', {
108
+ // tslint:disable-next-line:no-reserved-keywords
109
+ get() {
110
+ const res = parseFloat(normalizeSplitter(this.value));
111
+ return isNaN(res) ? null : res;
112
+ }
113
+ });
114
+ }
115
+ this.allNumberLocaleConfigs = this.localeService.locales.items
116
+ .map((localeItem) => {
117
+ return { id: localeItem.id, config: this.localeService.locales[localeItem.id].input.number };
118
+ });
119
+ this.localeSubscription = this.localeService.changes.subscribe(this.updateLocaleParams);
120
+ }
121
+ ngOnDestroy() {
122
+ this.localeSubscription.unsubscribe();
123
+ this.valueChange.complete();
124
+ this.disabledChange.complete();
125
+ }
126
+ onContainerClick() {
127
+ this.focus();
128
+ }
129
+ focus() {
130
+ this.nativeElement.focus();
131
+ }
132
+ // Implemented as part of ControlValueAccessor.
133
+ writeValue(value) {
134
+ this.value = value;
135
+ }
136
+ // Implemented as part of ControlValueAccessor.
137
+ registerOnChange(fn) {
138
+ this.cvaOnChange = fn;
139
+ }
140
+ // Implemented as part of ControlValueAccessor.
141
+ registerOnTouched(fn) {
142
+ this.onTouched = fn;
143
+ }
144
+ // Implemented as part of ControlValueAccessor.
145
+ setDisabledState(isDisabled) {
146
+ this.disabled = isDisabled;
147
+ }
148
+ focusChanged(isFocused) {
149
+ if (isFocused !== this.focused) {
150
+ this.focused = isFocused;
151
+ this.stateChanges.next();
152
+ }
153
+ }
154
+ onKeyDown(event) {
155
+ // tslint:disable-next-line:deprecation
156
+ const keyCode = event.keyCode;
157
+ const isCtrlA = (e) => e.keyCode === A && (e.ctrlKey || e.metaKey);
158
+ const isCtrlC = (e) => e.keyCode === C && (e.ctrlKey || e.metaKey);
159
+ const isCtrlV = (e) => e.keyCode === V && (e.ctrlKey || e.metaKey);
160
+ const isCtrlX = (e) => e.keyCode === X && (e.ctrlKey || e.metaKey);
161
+ const isCtrlZ = (e) => e.keyCode === Z && (e.ctrlKey || e.metaKey);
162
+ const isPeriod = (e) => this.numberLocaleConfig.groupSeparator.includes(e.key)
163
+ || [this.numberLocaleConfig.fractionSeparator, '.'].includes(e.key);
164
+ const minuses = [NUMPAD_MINUS, DASH, FF_MINUS];
165
+ const serviceKeys = [DELETE, BACKSPACE, TAB, ESCAPE, ENTER];
166
+ const arrows = [LEFT_ARROW, RIGHT_ARROW];
167
+ const allowedKeys = [HOME, END].concat(arrows).concat(serviceKeys).concat(minuses);
168
+ if (minuses.includes(keyCode) &&
169
+ (this.viewValue.includes(event.key) || this.min >= 0)) {
170
+ event.preventDefault();
171
+ return;
172
+ }
173
+ if (isPeriod(event)) {
174
+ if (event.key === this.numberLocaleConfig.fractionSeparator &&
175
+ this.viewValue.indexOf(this.numberLocaleConfig.fractionSeparator) !== -1) {
176
+ event.preventDefault();
177
+ return;
178
+ }
179
+ }
180
+ if (allowedKeys.indexOf(keyCode) !== -1 ||
181
+ [
182
+ isCtrlA,
183
+ isCtrlC,
184
+ isCtrlV,
185
+ isCtrlX,
186
+ isCtrlZ,
187
+ isFunctionKey,
188
+ isPeriod
189
+ ].some((fn) => fn(event))) {
190
+ // let it happen, don't do anything
191
+ return;
192
+ }
193
+ // Ensure that it is not a number and stop the keypress
194
+ if (event.shiftKey || !isNumberKey(event) && !isNumpadKey(event)) {
195
+ event.preventDefault();
196
+ // process steps
197
+ const step = event.shiftKey ? this.bigStep : this.step;
198
+ if (keyCode === UP_ARROW) {
199
+ this.stepUp(step);
200
+ }
201
+ if (keyCode === DOWN_ARROW) {
202
+ this.stepDown(step);
203
+ }
204
+ }
205
+ }
206
+ onInput(event) {
207
+ const currentValueLength = this.formatNumber(this.value)?.length || 0;
208
+ setTimeout(() => {
209
+ const fromPaste = event.inputType === 'insertFromPaste';
210
+ let formattedValue;
211
+ if (fromPaste) {
212
+ formattedValue = this.formatNumber(this.valueFromPaste);
213
+ }
214
+ else {
215
+ /*this.viewValue is raw and should be reformatted to localized number */
216
+ formattedValue = this.formatViewValue();
217
+ const offsetWhenSeparatorAdded = 2;
218
+ Promise.resolve().then(() => {
219
+ if (Math.abs(this.viewValue.length - currentValueLength) === offsetWhenSeparatorAdded) {
220
+ const cursorPosition = Math.max(0, (this.nativeElement.selectionStart || 0) + Math.sign(this.viewValue.length - currentValueLength));
221
+ this.renderer.setProperty(this.nativeElement, 'selectionStart', cursorPosition);
222
+ this.renderer.setProperty(this.nativeElement, 'selectionEnd', cursorPosition);
223
+ }
224
+ });
225
+ }
226
+ this.setViewValue(formattedValue, !fromPaste);
227
+ this.viewToModelUpdate(formattedValue);
228
+ });
229
+ }
230
+ onPaste(event) {
231
+ this.valueFromPaste = this.checkAndNormalizeLocalizedNumber(event.clipboardData?.getData('text'));
232
+ if (this.valueFromPaste === null) {
233
+ event.preventDefault();
234
+ }
235
+ }
236
+ stepUp(step) {
237
+ this.nativeElement.focus();
238
+ const res = Math.max(Math.min(add(this.value || 0, step), this.max), this.min);
239
+ this.setViewValue(this.formatNumber(res));
240
+ this._value = res;
241
+ this.cvaOnChange(res);
242
+ this.valueChange.emit(res);
243
+ }
244
+ stepDown(step) {
245
+ this.nativeElement.focus();
246
+ const res = Math.min(Math.max(add(this.value || 0, -step), this.min), this.max);
247
+ this.setViewValue(this.formatNumber(res));
248
+ this._value = res;
249
+ this.cvaOnChange(res);
250
+ this.valueChange.emit(res);
251
+ }
252
+ setViewValue(value, savePosition = false) {
253
+ const cursorPosition = this.nativeElement.selectionStart;
254
+ this.renderer.setProperty(this.nativeElement, 'value', value);
255
+ if (savePosition) {
256
+ this.renderer.setProperty(this.nativeElement, 'selectionStart', cursorPosition);
257
+ this.renderer.setProperty(this.nativeElement, 'selectionEnd', cursorPosition);
258
+ }
259
+ }
260
+ viewToModelUpdate(newValue) {
261
+ const normalizedValue = newValue === null ? null : +this.normalizeNumber(newValue);
262
+ if (normalizedValue !== this.value) {
263
+ this._value = normalizedValue;
264
+ this.cvaOnChange(normalizedValue);
265
+ this.valueChange.emit(normalizedValue);
266
+ }
267
+ this.ngControl?.updateValueAndValidity({ emitEvent: false });
268
+ }
269
+ formatViewValue() {
270
+ if (this.viewValue === null || this.viewValue === '' || Number.isNaN(+this.normalizeNumber(this.viewValue))) {
271
+ return null;
272
+ }
273
+ const separator = this.numberLocaleConfig.groupSeparator.includes(' ')
274
+ && this.numberLocaleConfig.fractionSeparator === ','
275
+ ? /[,.]/
276
+ : this.numberLocaleConfig.fractionSeparator;
277
+ const [intPart, fractionPart] = this.viewValue.split(separator)
278
+ .map((valuePart) => this.normalizeNumber(valuePart));
279
+ return this.createLocalizedNumberFromParts(+intPart, fractionPart);
280
+ }
281
+ formatNumber(value) {
282
+ if (value === null || value === undefined) {
283
+ return null;
284
+ }
285
+ const [intPart, fractionPart] = value.toString().split('.');
286
+ return this.createLocalizedNumberFromParts(+intPart, fractionPart);
287
+ }
288
+ createLocalizedNumberFromParts(intPart, fractionPart) {
289
+ const formatOptions = {
290
+ useGrouping: this.withThousandSeparator,
291
+ maximumFractionDigits: 20
292
+ };
293
+ if (this.withThousandSeparator && this.numberLocaleConfig.startFormattingFrom) {
294
+ formatOptions.useGrouping = intPart >= Math.pow(
295
+ // tslint:disable-next-line:no-magic-numbers
296
+ 10, this.numberLocaleConfig.startFormattingFrom);
297
+ }
298
+ const localeId = this.localeService.id === 'es-LA' ? 'ru-RU' : this.localeService.id;
299
+ const formatter = new Intl.NumberFormat(localeId, formatOptions);
300
+ const formattedFractionPart = fractionPart?.split('')
301
+ .map((numChar) => formatter.format(+numChar)).join('');
302
+ return formattedFractionPart === undefined
303
+ ? formatter.format(intPart)
304
+ : `${formatter.format(intPart)}${this.numberLocaleConfig.fractionSeparator}${formattedFractionPart}`;
305
+ }
306
+ /**
307
+ * Method that returns a string representation of a number without localized separators
308
+ */
309
+ normalizeNumber(value, customConfig) {
310
+ if (value === null || value === undefined) {
311
+ return '';
312
+ }
313
+ const { groupSeparator, fractionSeparator } = customConfig || this.numberLocaleConfig;
314
+ const groupSeparatorRegexp = new RegExp(`[${groupSeparator.join('')}]`, 'g');
315
+ const fractionSeparatorRegexp = new RegExp(`\\${fractionSeparator}`, 'g');
316
+ return value.toString()
317
+ .replace(groupSeparatorRegexp, '')
318
+ .replace(fractionSeparatorRegexp, '.');
319
+ }
320
+ checkAndNormalizeLocalizedNumber(num) {
321
+ if (num === null || num === undefined) {
322
+ return null;
323
+ }
324
+ /* if some locale input config satisfies pasted number, try to normalise with selected locale config */
325
+ let numberOutput = null;
326
+ for (const { config } of this.allNumberLocaleConfigs) {
327
+ const normalized = +this.normalizeNumber(num, config);
328
+ if (!Number.isNaN(normalized)) {
329
+ numberOutput = normalized;
330
+ break;
331
+ }
332
+ }
333
+ return numberOutput;
334
+ }
335
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: McNumberInput, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: 'step', attribute: true }, { token: 'big-step', attribute: true }, { token: 'min', attribute: true }, { token: 'max', attribute: true }, { token: MC_LOCALE_SERVICE, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
336
+ /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.5", type: McNumberInput, selector: "input[mcInput][type=\"number\"]", inputs: { bigStep: "bigStep", step: "step", min: "min", max: "max", withThousandSeparator: "withThousandSeparator", startFormattingFrom: "startFormattingFrom", value: "value", disabled: "disabled" }, host: { listeners: { "blur": "focusChanged(false)", "focus": "focusChanged(true)", "paste": "onPaste($event)", "keydown": "onKeyDown($event)", "input": "onInput($event)" } }, providers: [MC_NUMBER_INPUT_VALUE_ACCESSOR], exportAs: ["mcNumericalInput"], ngImport: i0 }); }
337
+ }
338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: McNumberInput, decorators: [{
339
+ type: Directive,
340
+ args: [{
341
+ selector: `input[mcInput][type="number"]`,
342
+ exportAs: 'mcNumericalInput',
343
+ providers: [MC_NUMBER_INPUT_VALUE_ACCESSOR],
344
+ host: {
345
+ '(blur)': 'focusChanged(false)',
346
+ '(focus)': 'focusChanged(true)',
347
+ '(paste)': 'onPaste($event)',
348
+ '(keydown)': 'onKeyDown($event)',
349
+ '(input)': 'onInput($event)'
350
+ }
351
+ }]
352
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
353
+ type: Attribute,
354
+ args: ['step']
355
+ }] }, { type: undefined, decorators: [{
356
+ type: Attribute,
357
+ args: ['big-step']
358
+ }] }, { type: undefined, decorators: [{
359
+ type: Attribute,
360
+ args: ['min']
361
+ }] }, { type: undefined, decorators: [{
362
+ type: Attribute,
363
+ args: ['max']
364
+ }] }, { type: i1.McLocaleService, decorators: [{
365
+ type: Optional
366
+ }, {
367
+ type: Inject,
368
+ args: [MC_LOCALE_SERVICE]
369
+ }] }]; }, propDecorators: { bigStep: [{
370
+ type: Input
371
+ }], step: [{
372
+ type: Input
373
+ }], min: [{
374
+ type: Input
375
+ }], max: [{
376
+ type: Input
377
+ }], withThousandSeparator: [{
378
+ type: Input
379
+ }], startFormattingFrom: [{
380
+ type: Input
381
+ }], value: [{
382
+ type: Input
383
+ }], disabled: [{
384
+ type: Input
385
+ }] } });
386
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtbnVtYmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbW9zYWljL2lucHV0L2lucHV0LW51bWJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQ0gsU0FBUyxFQUNULFNBQVMsRUFDVCxVQUFVLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQzVDLEtBQUssRUFBYSxRQUFRLEVBQzFCLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXlDLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUYsT0FBTyxFQUNILEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFDakQsTUFBTSxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQzFCLFFBQVEsRUFBRSxVQUFVLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFDNUUsV0FBVyxFQUFFLFdBQVcsRUFDM0IsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFN0UsT0FBTyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7OztBQUc3QyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQzNCLE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFFNUIsNENBQTRDO0FBQzVDLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFhO0lBQzNDLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElB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UCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixTQUFTLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQztvQkFDM0MsSUFBSSxFQUFFO3dCQUNGLFFBQVEsRUFBRSxxQkFBcUI7d0JBQy9CLFNBQVMsRUFBRSxvQkFBb0I7d0JBQy9CLFNBQVMsRUFBRSxpQkFBaUI7d0JBQzVCLFdBQVcsRUFBRSxtQkFBbUI7d0JBQ2hDLFNBQVMsRUFBRSxpQkFBaUI7cUJBQy9CO2lCQUNKOzswQkFpSFEsU0FBUzsyQkFBQyxNQUFNOzswQkFDaEIsU0FBUzsyQkFBQyxVQUFVOzswQkFDcEIsU0FBUzsyQkFBQyxLQUFLOzswQkFDZixTQUFTOzJCQUFDLEtBQUs7OzBCQUNmLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsaUJBQWlCOzRDQTlGekMsT0FBTztzQkFETixLQUFLO2dCQUlOLElBQUk7c0JBREgsS0FBSztnQkFJTixHQUFHO3NCQURGLEtBQUs7Z0JBSU4sR0FBRztzQkFERixLQUFLO2dCQUlOLHFCQUFxQjtzQkFEcEIsS0FBSztnQkFPTixtQkFBbUI7c0JBRGxCLEtBQUs7Z0JBSUYsS0FBSztzQkFEUixLQUFLO2dCQW1CRixRQUFRO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHtcbiAgICBBdHRyaWJ1dGUsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5qZWN0LFxuICAgIElucHV0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLFxuICAgIFJlbmRlcmVyMlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgICBFTkQsIEMsIFYsIFgsIEEsIFosIERFTEVURSwgQkFDS1NQQUNFLCBUQUIsIEVOVEVSLFxuICAgIEVTQ0FQRSwgTlVNUEFEX01JTlVTLCBEQVNILFxuICAgIEZGX01JTlVTLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgSE9NRSwgVVBfQVJST1csIERPV05fQVJST1csIGlzRnVuY3Rpb25LZXksXG4gICAgaXNOdW1iZXJLZXksIGlzTnVtcGFkS2V5XG59IGZyb20gJ0BwdHNlY3VyaXR5L2Nkay9rZXljb2Rlcyc7XG5pbXBvcnQgeyBNQ19MT0NBTEVfU0VSVklDRSwgTWNMb2NhbGVTZXJ2aWNlIH0gZnJvbSAnQHB0c2VjdXJpdHkvbW9zYWljL2NvcmUnO1xuaW1wb3J0IHsgTWNGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQHB0c2VjdXJpdHkvbW9zYWljL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cblxuZXhwb3J0IGNvbnN0IEJJR19TVEVQID0gMTA7XG5leHBvcnQgY29uc3QgU01BTExfU1RFUCA9IDE7XG5cbi8vIFRPRE86INC/0L7QtNGB0YLQsNCy0LvRj9GC0Ywg0LvQvtC60LDQu9C40LfQvtCy0LDQvdC90YvQuSDRgdC/0LvQuNGC0YLQtdGAXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplU3BsaXR0ZXIodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlID8gdmFsdWUucmVwbGFjZSgvLC9nLCAnLicpIDogdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zsb2F0KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gL14tP1xcZCtcXC5cXGQrJC8udGVzdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0ludCh2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIC9eLT9cXGQrJC8udGVzdCh2YWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0RpZ2l0KHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNGbG9hdCh2YWx1ZSkgfHwgaXNJbnQodmFsdWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJlY2lzaW9uKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGNvbnN0IGFyciA9IHZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJy4nKTtcblxuICAgIHJldHVybiBhcnIubGVuZ3RoID09PSAxXG4gICAgICAgID8gMVxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbWFnaWMtbnVtYmVyc1xuICAgICAgICA6ICBNYXRoLnBvdygxMCwgYXJyWzFdLmxlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGQodmFsdWUxOiBudW1iZXIsIHZhbHVlMjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwcmVjaXNpb24gPSBNYXRoLm1heChnZXRQcmVjaXNpb24odmFsdWUxKSwgZ2V0UHJlY2lzaW9uKHZhbHVlMikpO1xuXG4gICAgcmV0dXJuICh2YWx1ZTEgKiBwcmVjaXNpb24gKyB2YWx1ZTIgKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uO1xufVxuXG5leHBvcnQgY29uc3QgTUNfTlVNQkVSX0lOUFVUX1ZBTFVFX0FDQ0VTU09SOiBhbnkgPSB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWNOdW1iZXJJbnB1dCksXG4gICAgbXVsdGk6IHRydWVcbn07XG5cbmludGVyZmFjZSBOdW1iZXJMb2NhbGVDb25maWcge1xuICAgIGdyb3VwU2VwYXJhdG9yOiBzdHJpbmdbXTtcbiAgICBmcmFjdGlvblNlcGFyYXRvcjogc3RyaW5nO1xuICAgIHN0YXJ0Rm9ybWF0dGluZ0Zyb20/OiBudW1iZXI7XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiBgaW5wdXRbbWNJbnB1dF1bdHlwZT1cIm51bWJlclwiXWAsXG4gICAgZXhwb3J0QXM6ICdtY051bWVyaWNhbElucHV0JyxcbiAgICBwcm92aWRlcnM6IFtNQ19OVU1CRVJfSU5QVVRfVkFMVUVfQUNDRVNTT1JdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhibHVyKSc6ICdmb2N1c0NoYW5nZWQoZmFsc2UpJyxcbiAgICAgICAgJyhmb2N1cyknOiAnZm9jdXNDaGFuZ2VkKHRydWUpJyxcbiAgICAgICAgJyhwYXN0ZSknOiAnb25QYXN0ZSgkZXZlbnQpJyxcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleURvd24oJGV2ZW50KScsXG4gICAgICAgICcoaW5wdXQpJzogJ29uSW5wdXQoJGV2ZW50KSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIE1jTnVtYmVySW5wdXQgaW1wbGVtZW50cyBNY0Zvcm1GaWVsZENvbnRyb2w8YW55PiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uRGVzdHJveSB7XG4gICAgLyoqIEVtaXRzIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXMgKGVpdGhlciBkdWUgdG8gdXNlciBpbnB1dCBvciBwcm9ncmFtbWF0aWMgY2hhbmdlKS4gKi9cbiAgICB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcblxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBkaXNhYmxlZCBzdGF0ZSBoYXMgY2hhbmdlZCAqL1xuICAgIGRpc2FibGVkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgcmVhZG9ubHkgc3RhdGVDaGFuZ2VzOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGlkOiBzdHJpbmc7XG5cbiAgICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgZW1wdHk6IGJvb2xlYW47XG5cbiAgICByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIGVycm9yU3RhdGU6IGJvb2xlYW47XG5cbiAgICBjb250cm9sVHlwZT86IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIEBJbnB1dCgpXG4gICAgYmlnU3RlcDogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBzdGVwOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKVxuICAgIG1pbjogbnVtYmVyO1xuXG4gICAgQElucHV0KClcbiAgICBtYXg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgd2l0aFRob3VzYW5kU2VwYXJhdG9yOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEluY2x1ZGUgdGhvdXNhbmQgc2VwYXJhdG9yIGZyb20gY3VzdG9tIGluZGV4LiBGb3IgZXhhbXBsZSwgaXQgd2lsbCBiZSB1c2VmdWwgaW4gdGFibGVzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhcnRGb3JtYXR0aW5nRnJvbT86IG51bWJlcjtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHZhbHVlKCk6IG51bWJlciB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuXG4gICAgc2V0IHZhbHVlKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICBpZiAob2xkVmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcih2YWx1ZSkpO1xuXG4gICAgICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlciB8IG51bGw7XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xuICAgIH1cblxuICAgIHNldCBkaXNhYmxlZCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBjb25zdCBuZXdWYWx1ZSA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHRoaXMuX2Rpc2FibGVkICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBuZXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRDaGFuZ2UuZW1pdChuZXdWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXZSBuZWVkIHRvIG51bGwgY2hlY2sgdGhlIGBibHVyYCBtZXRob2QsIGJlY2F1c2UgaXQncyB1bmRlZmluZWQgZHVyaW5nIFNTUi5cbiAgICAgICAgaWYgKG5ld1ZhbHVlICYmIGVsZW1lbnQuYmx1cikge1xuICAgICAgICAgICAgLy8gTm9ybWFsbHksIG5hdGl2ZSBpbnB1dCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IGJsdXIgaWYgdGhleSB0dXJuIGRpc2FibGVkLiBUaGlzIGJlaGF2aW9yXG4gICAgICAgICAgICAvLyBpcyBwcm9ibGVtYXRpYywgYmVjYXVzZSBpdCB3b3VsZCBtZWFuIHRoYXQgaXQgdHJpZ2dlcnMgYW5vdGhlciBjaGFuZ2UgZGV0ZWN0aW9uIGN5Y2xlLFxuICAgICAgICAgICAgLy8gd2hpY2ggdGhlbiBjYXVzZXMgYSBjaGFuZ2VkIGFmdGVyIGNoZWNrZWQgZXJyb3IgaWYgdGhlIGlucHV0IGVsZW1lbnQgd2FzIGZvY3VzZWQgYmVmb3JlLlxuICAgICAgICAgICAgZWxlbWVudC5ibHVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9kaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZm9jdXNlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTElucHV0RWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBnZXQgdmlld1ZhbHVlKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0IG5nQ29udHJvbCgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxOdW1iZXJMb2NhbGVDb25maWdzOiB7IGlkOiBzdHJpbmc7IGNvbmZpZzogTnVtYmVyTG9jYWxlQ29uZmlnIH1bXTtcblxuICAgIHByaXZhdGUgbnVtYmVyTG9jYWxlQ29uZmlnOiBOdW1iZXJMb2NhbGVDb25maWc7XG5cbiAgICBwcml2YXRlIHZhbHVlRnJvbVBhc3RlOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcHJpdmF0ZSBsb2NhbGVTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ3N0ZXAnKSBzdGVwOiBzdHJpbmcsXG4gICAgICAgIEBBdHRyaWJ1dGUoJ2JpZy1zdGVwJykgYmlnU3RlcDogc3RyaW5nLFxuICAgICAgICBAQXR0cmlidXRlKCdtaW4nKSBtaW46IHN0cmluZyxcbiAgICAgICAgQEF0dHJpYnV0ZSgnbWF4JykgbWF4OiBzdHJpbmcsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTUNfTE9DQUxFX1NFUlZJQ0UpIHByaXZhdGUgbG9jYWxlU2VydmljZTogTWNMb2NhbGVTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3RlcCA9IGlzRGlnaXQoc3RlcCkgPyBwYXJzZUZsb2F0KHN0ZXApIDogU01BTExfU1RFUDtcbiAgICAgICAgdGhpcy5iaWdTdGVwID0gaXNEaWdpdChiaWdTdGVwKSA/IHBhcnNlRmxvYXQoYmlnU3RlcCkgOiBCSUdfU1RFUDtcbiAgICAgICAgdGhpcy5taW4gPSBpc0RpZ2l0KG1pbikgPyBwYXJzZUZsb2F0KG1pbikgOiAtSW5maW5pdHk7XG4gICAgICAgIHRoaXMubWF4ID0gaXNEaWdpdChtYXgpID8gcGFyc2VGbG9hdChtYXgpIDogSW5maW5pdHk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm5hdGl2ZUVsZW1lbnQudHlwZSA9ICd0ZXh0JywgMCk7XG5cbiAgICAgICAgaWYgKCd2YWx1ZUFzTnVtYmVyJyBpbiB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIC8qINC/0LXRgNC10LTQtdC70LDRgtGMINCw0LvQs9C+0YDQuNGC0LwgICovXG4gICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMubmF0aXZlRWxlbWVudCksICd2YWx1ZUFzTnVtYmVyJywge1xuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1yZXNlcnZlZC1rZXl3b3Jkc1xuICAgICAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gcGFyc2VGbG9hdChub3JtYWxpemVTcGxpdHRlcih0aGlzLnZhbHVlKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHJlcykgPyBudWxsIDogcmVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5hbGxOdW1iZXJMb2NhbGVDb25maWdzID0gdGhpcy5sb2NhbGVTZXJ2aWNlLmxvY2FsZXMuaXRlbXNcbiAgICAgICAgICAgIC5tYXAoKGxvY2FsZUl0ZW06IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBpZDogbG9jYWxlSXRlbS5pZCwgY29uZmlnOiB0aGlzLmxvY2FsZVNlcnZpY2UubG9jYWxlc1tsb2NhbGVJdGVtLmlkXS5pbnB1dC5udW1iZXIgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubG9jYWxlU3Vic2NyaXB0aW9uID0gdGhpcy5sb2NhbGVTZXJ2aWNlLmNoYW5nZXMuc3Vic2NyaWJlKHRoaXMudXBkYXRlTG9jYWxlUGFyYW1zKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5sb2NhbGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRpc2FibGVkQ2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgb25Db250YWluZXJDbGljaygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgIHdyaXRlVmFsdWUodmFsdWU6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIC8vIEltcGxlbWVudGVkIGFzIHBhcnQgb2YgQ29udHJvbFZhbHVlQWNjZXNzb3IuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvLyBJbXBsZW1lbnRlZCBhcyBwYXJ0IG9mIENvbnRyb2xWYWx1ZUFjY2Vzc29yLlxuICAgIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcbiAgICB9XG5cbiAgICBmb2N1c0NoYW5nZWQoaXNGb2N1c2VkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChpc0ZvY3VzZWQgIT09IHRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkID0gaXNGb2N1c2VkO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWVtcHR5XG4gICAgb25Ub3VjaGVkID0gKCkgPT4ge307XG5cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uXG4gICAgICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgICAgIGNvbnN0IGlzQ3RybEEgPSAoZSkgPT4gZS5rZXlDb2RlID09PSBBICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KTtcbiAgICAgICAgY29uc3QgaXNDdHJsQyA9IChlKSA9PiBlLmtleUNvZGUgPT09IEMgJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpO1xuICAgICAgICBjb25zdCBpc0N0cmxWID0gKGUpID0+IGUua2V5Q29kZSA9PT0gViAmJiAoZS5jdHJsS2V5IHx8IGUubWV0YUtleSk7XG4gICAgICAgIGNvbnN0IGlzQ3RybFggPSAoZSkgPT4gZS5rZXlDb2RlID09PSBYICYmIChlLmN0cmxLZXkgfHwgZS5tZXRhS2V5KTtcbiAgICAgICAgY29uc3QgaXNDdHJsWiA9IChlKSA9PiBlLmtleUNvZGUgPT09IFogJiYgKGUuY3RybEtleSB8fCBlLm1ldGFLZXkpO1xuXG4gICAgICAgIGNvbnN0IGlzUGVyaW9kID0gKGUpID0+IHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnLmdyb3VwU2VwYXJhdG9yLmluY2x1ZGVzKGUua2V5KVxuICAgICAgICAgICAgfHwgW3RoaXMubnVtYmVyTG9jYWxlQ29uZmlnLmZyYWN0aW9uU2VwYXJhdG9yLCAnLiddLmluY2x1ZGVzKGUua2V5KTtcblxuICAgICAgICBjb25zdCBtaW51c2VzID0gW05VTVBBRF9NSU5VUywgREFTSCwgRkZfTUlOVVNdO1xuICAgICAgICBjb25zdCBzZXJ2aWNlS2V5cyA9IFtERUxFVEUsIEJBQ0tTUEFDRSwgVEFCLCBFU0NBUEUsIEVOVEVSXTtcbiAgICAgICAgY29uc3QgYXJyb3dzID0gW0xFRlRfQVJST1csIFJJR0hUX0FSUk9XXTtcbiAgICAgICAgY29uc3QgYWxsb3dlZEtleXMgPSAgW0hPTUUsIEVORF0uY29uY2F0KGFycm93cykuY29uY2F0KHNlcnZpY2VLZXlzKS5jb25jYXQobWludXNlcyk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbWludXNlcy5pbmNsdWRlcyhrZXlDb2RlKSAmJlxuICAgICAgICAgICAgKHRoaXMudmlld1ZhbHVlLmluY2x1ZGVzKGV2ZW50LmtleSkgfHwgdGhpcy5taW4gPj0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNQZXJpb2QoZXZlbnQpKSB7XG4gICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSB0aGlzLm51bWJlckxvY2FsZUNvbmZpZy5mcmFjdGlvblNlcGFyYXRvciAmJlxuICAgICAgICAgICAgICAgIHRoaXMudmlld1ZhbHVlLmluZGV4T2YodGhpcy5udW1iZXJMb2NhbGVDb25maWcuZnJhY3Rpb25TZXBhcmF0b3IpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxsb3dlZEtleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTEgfHxcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICBpc0N0cmxBLFxuICAgICAgICAgICAgICAgIGlzQ3RybEMsXG4gICAgICAgICAgICAgICAgaXNDdHJsVixcbiAgICAgICAgICAgICAgICBpc0N0cmxYLFxuICAgICAgICAgICAgICAgIGlzQ3RybFosXG4gICAgICAgICAgICAgICAgaXNGdW5jdGlvbktleSxcbiAgICAgICAgICAgICAgICBpc1BlcmlvZFxuICAgICAgICAgICAgXS5zb21lKChmbikgPT4gZm4oZXZlbnQpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIGxldCBpdCBoYXBwZW4sIGRvbid0IGRvIGFueXRoaW5nXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gRW5zdXJlIHRoYXQgaXQgaXMgbm90IGEgbnVtYmVyIGFuZCBzdG9wIHRoZSBrZXlwcmVzc1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgIWlzTnVtYmVyS2V5KGV2ZW50KSAmJiAhaXNOdW1wYWRLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAvLyBwcm9jZXNzIHN0ZXBzXG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZXZlbnQuc2hpZnRLZXkgPyB0aGlzLmJpZ1N0ZXAgOiB0aGlzLnN0ZXA7XG5cbiAgICAgICAgICAgIGlmIChrZXlDb2RlID09PSBVUF9BUlJPVykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcFVwKHN0ZXApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoa2V5Q29kZSA9PT0gRE9XTl9BUlJPVykge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RlcERvd24oc3RlcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbklucHV0KGV2ZW50OiBJbnB1dEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZUxlbmd0aCA9IHRoaXMuZm9ybWF0TnVtYmVyKHRoaXMudmFsdWUpPy5sZW5ndGggfHwgMDtcblxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZyb21QYXN0ZSA9IGV2ZW50LmlucHV0VHlwZSA9PT0gJ2luc2VydEZyb21QYXN0ZSc7XG4gICAgICAgICAgICBsZXQgZm9ybWF0dGVkVmFsdWU6IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICBpZiAoZnJvbVBhc3RlKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdE51bWJlcih0aGlzLnZhbHVlRnJvbVBhc3RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLyp0aGlzLnZpZXdWYWx1ZSBpcyByYXcgYW5kIHNob3VsZCBiZSByZWZvcm1hdHRlZCB0byBsb2NhbGl6ZWQgbnVtYmVyICovXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVkVmFsdWUgPSB0aGlzLmZvcm1hdFZpZXdWYWx1ZSgpO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgb2Zmc2V0V2hlblNlcGFyYXRvckFkZGVkID0gMjtcblxuICAgICAgICAgICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy52aWV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFZhbHVlTGVuZ3RoKSA9PT0gb2Zmc2V0V2hlblNlcGFyYXRvckFkZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IE1hdGgubWF4KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMubmF0aXZlRWxlbWVudC5zZWxlY3Rpb25TdGFydCB8fCAwKSArIE1hdGguc2lnbihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52aWV3VmFsdWUubGVuZ3RoIC0gY3VycmVudFZhbHVlTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdzZWxlY3Rpb25TdGFydCcsIGN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnc2VsZWN0aW9uRW5kJywgY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZShmb3JtYXR0ZWRWYWx1ZSwgIWZyb21QYXN0ZSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdUb01vZGVsVXBkYXRlKGZvcm1hdHRlZFZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpIHtcbiAgICAgICB0aGlzLnZhbHVlRnJvbVBhc3RlID0gdGhpcy5jaGVja0FuZE5vcm1hbGl6ZUxvY2FsaXplZE51bWJlcihldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykpO1xuICAgICAgIGlmICh0aGlzLnZhbHVlRnJvbVBhc3RlID09PSBudWxsKSB7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IH1cbiAgICB9XG5cbiAgICBzdGVwVXAoc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICAgIGNvbnN0IHJlcyA9IE1hdGgubWF4KE1hdGgubWluKGFkZCh0aGlzLnZhbHVlIHx8IDAsIHN0ZXApLCB0aGlzLm1heCksIHRoaXMubWluKTtcblxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcihyZXMpKTtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHJlcztcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShyZXMpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQocmVzKTtcbiAgICB9XG5cbiAgICBzdGVwRG93bihzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICAgICAgY29uc3QgcmVzID0gTWF0aC5taW4oTWF0aC5tYXgoYWRkKHRoaXMudmFsdWUgfHwgMCwgLXN0ZXApLCB0aGlzLm1pbiksIHRoaXMubWF4KTtcblxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcihyZXMpKTtcblxuICAgICAgICB0aGlzLl92YWx1ZSA9IHJlcztcbiAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShyZXMpO1xuICAgICAgICB0aGlzLnZhbHVlQ2hhbmdlLmVtaXQocmVzKTtcbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tZW1wdHlcbiAgICBwcml2YXRlIGN2YU9uQ2hhbmdlOiAodmFsdWU6IGFueSkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgcHJpdmF0ZSBzZXRWaWV3VmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwsIHNhdmVQb3NpdGlvbjogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGN1cnNvclBvc2l0aW9uID0gdGhpcy5uYXRpdmVFbGVtZW50LnNlbGVjdGlvblN0YXJ0O1xuXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAndmFsdWUnLCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHNhdmVQb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdzZWxlY3Rpb25TdGFydCcsIGN1cnNvclBvc2l0aW9uKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcGVydHkodGhpcy5uYXRpdmVFbGVtZW50LCAnc2VsZWN0aW9uRW5kJywgY3Vyc29yUG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3VG9Nb2RlbFVwZGF0ZShuZXdWYWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBuZXdWYWx1ZSA9PT0gbnVsbCA/IG51bGwgOiArdGhpcy5ub3JtYWxpemVOdW1iZXIobmV3VmFsdWUpO1xuXG4gICAgICAgIGlmIChub3JtYWxpemVkVmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5jdmFPbkNoYW5nZShub3JtYWxpemVkVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KG5vcm1hbGl6ZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm5nQ29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRWaWV3VmFsdWUoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLnZpZXdWYWx1ZSA9PT0gbnVsbCB8fCB0aGlzLnZpZXdWYWx1ZSA9PT0gJycgfHwgTnVtYmVyLmlzTmFOKCt0aGlzLm5vcm1hbGl6ZU51bWJlcih0aGlzLnZpZXdWYWx1ZSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnLmdyb3VwU2VwYXJhdG9yLmluY2x1ZGVzKCcgJylcbiAgICAgICAgJiYgdGhpcy5udW1iZXJMb2NhbGVDb25maWcuZnJhY3Rpb25TZXBhcmF0b3IgPT09ICcsJ1xuICAgICAgICAgICAgPyAvWywuXS9cbiAgICAgICAgICAgIDogdGhpcy5udW1iZXJMb2NhbGVDb25maWcuZnJhY3Rpb25TZXBhcmF0b3I7XG5cbiAgICAgICAgY29uc3QgW2ludFBhcnQsIGZyYWN0aW9uUGFydF0gPSB0aGlzLnZpZXdWYWx1ZS5zcGxpdChzZXBhcmF0b3IpXG4gICAgICAgICAgICAubWFwKCh2YWx1ZVBhcnQpID0+IHRoaXMubm9ybWFsaXplTnVtYmVyKHZhbHVlUGFydCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvY2FsaXplZE51bWJlckZyb21QYXJ0cygraW50UGFydCwgZnJhY3Rpb25QYXJ0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvcm1hdE51bWJlcih2YWx1ZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAgIGNvbnN0IFtpbnRQYXJ0LCBmcmFjdGlvblBhcnRdID0gdmFsdWUudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUxvY2FsaXplZE51bWJlckZyb21QYXJ0cygraW50UGFydCwgZnJhY3Rpb25QYXJ0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUxvY2FsaXplZE51bWJlckZyb21QYXJ0cyhpbnRQYXJ0OiBudW1iZXIsIGZyYWN0aW9uUGFydD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG4gICAgICAgICAgICB1c2VHcm91cGluZzogdGhpcy53aXRoVGhvdXNhbmRTZXBhcmF0b3IsXG4gICAgICAgICAgICBtYXhpbXVtRnJhY3Rpb25EaWdpdHM6IDIwXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKHRoaXMud2l0aFRob3VzYW5kU2VwYXJhdG9yICYmIHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnLnN0YXJ0Rm9ybWF0dGluZ0Zyb20pIHtcbiAgICAgICAgICAgIGZvcm1hdE9wdGlvbnMudXNlR3JvdXBpbmcgPSBpbnRQYXJ0ID49IE1hdGgucG93KFxuICAgICAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1tYWdpYy1udW1iZXJzXG4gICAgICAgICAgICAgICAgMTAsIHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnLnN0YXJ0Rm9ybWF0dGluZ0Zyb21cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb2NhbGVJZCA9IHRoaXMubG9jYWxlU2VydmljZS5pZCA9PT0gJ2VzLUxBJyA/ICdydS1SVScgOiB0aGlzLmxvY2FsZVNlcnZpY2UuaWQ7XG5cbiAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY2FsZUlkLCBmb3JtYXRPcHRpb25zKTtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkRnJhY3Rpb25QYXJ0ID0gZnJhY3Rpb25QYXJ0Py5zcGxpdCgnJylcbiAgICAgICAgICAgIC5tYXAoKG51bUNoYXIpID0+IGZvcm1hdHRlci5mb3JtYXQoK251bUNoYXIpKS5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkRnJhY3Rpb25QYXJ0ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gZm9ybWF0dGVyLmZvcm1hdChpbnRQYXJ0KVxuICAgICAgICAgICAgOiBgJHsgZm9ybWF0dGVyLmZvcm1hdChpbnRQYXJ0KSB9JHsgdGhpcy5udW1iZXJMb2NhbGVDb25maWcuZnJhY3Rpb25TZXBhcmF0b3IgfSR7IGZvcm1hdHRlZEZyYWN0aW9uUGFydCB9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgdGhhdCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgbnVtYmVyIHdpdGhvdXQgbG9jYWxpemVkIHNlcGFyYXRvcnNcbiAgICAgKi9cbiAgICBwcml2YXRlIG5vcm1hbGl6ZU51bWJlcih2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCwgY3VzdG9tQ29uZmlnPzogTnVtYmVyTG9jYWxlQ29uZmlnKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHsgcmV0dXJuICcnOyB9XG5cbiAgICAgICAgY29uc3QgeyBncm91cFNlcGFyYXRvciwgZnJhY3Rpb25TZXBhcmF0b3IgfSA9IGN1c3RvbUNvbmZpZyB8fCB0aGlzLm51bWJlckxvY2FsZUNvbmZpZztcbiAgICAgICAgY29uc3QgZ3JvdXBTZXBhcmF0b3JSZWdleHAgPSBuZXcgUmVnRXhwKGBbJHtncm91cFNlcGFyYXRvci5qb2luKCcnKX1dYCwgJ2cnKTtcbiAgICAgICAgY29uc3QgZnJhY3Rpb25TZXBhcmF0b3JSZWdleHAgPSBuZXcgUmVnRXhwKGBcXFxcJHtmcmFjdGlvblNlcGFyYXRvcn1gLCAnZycpO1xuXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpXG4gICAgICAgICAgICAucmVwbGFjZShncm91cFNlcGFyYXRvclJlZ2V4cCwgJycpXG4gICAgICAgICAgICAucmVwbGFjZShmcmFjdGlvblNlcGFyYXRvclJlZ2V4cCwgJy4nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUxvY2FsZVBhcmFtcyA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMubnVtYmVyTG9jYWxlQ29uZmlnID0gdGhpcy5sb2NhbGVTZXJ2aWNlLmxvY2FsZXNbaWRdLmlucHV0Lm51bWJlcjtcblxuICAgICAgICB0aGlzLnNldFZpZXdWYWx1ZSh0aGlzLmZvcm1hdE51bWJlcih0aGlzLnZhbHVlKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0FuZE5vcm1hbGl6ZUxvY2FsaXplZE51bWJlcihudW06IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBudW1iZXIgfCBudWxsIHtcbiAgICAgICAgaWYgKG51bSA9PT0gbnVsbCB8fCBudW0gPT09IHVuZGVmaW5lZCkgeyByZXR1cm4gbnVsbDsgfVxuXG4gICAgICAgIC8qIGlmIHNvbWUgbG9jYWxlIGlucHV0IGNvbmZpZyBzYXRpc2ZpZXMgcGFzdGVkIG51bWJlciwgdHJ5IHRvIG5vcm1hbGlzZSB3aXRoIHNlbGVjdGVkIGxvY2FsZSBjb25maWcgKi9cbiAgICAgICAgbGV0IG51bWJlck91dHB1dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgeyBjb25maWcgfSBvZiB0aGlzLmFsbE51bWJlckxvY2FsZUNvbmZpZ3MpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSArdGhpcy5ub3JtYWxpemVOdW1iZXIobnVtLCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4obm9ybWFsaXplZCkpIHtcbiAgICAgICAgICAgICAgICBudW1iZXJPdXRwdXQgPSBub3JtYWxpemVkO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bWJlck91dHB1dDtcbiAgICB9XG59XG4iXX0=