@ptsecurity/mosaic 15.5.0 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (788) hide show
  1. package/_theming.scss +29 -6
  2. package/_visual.scss +6 -4
  3. package/autocomplete/autocomplete-trigger.directive.d.ts +6 -16
  4. package/autocomplete/autocomplete.component.d.ts +1 -1
  5. package/button/_button-theme.scss +2 -5
  6. package/button/button.component.d.ts +1 -1
  7. package/button-toggle/_button-toggle-theme.scss +2 -5
  8. package/button-toggle/button-toggle.component.d.ts +3 -3
  9. package/card/card.component.d.ts +1 -1
  10. package/checkbox/_checkbox-theme.scss +6 -5
  11. package/checkbox/checkbox-config.d.ts +1 -1
  12. package/checkbox/checkbox.d.ts +1 -1
  13. package/code-block/_code-block-theme.scss +2 -6
  14. package/code-block/actionbar.component.d.ts +1 -1
  15. package/code-block/code-block.component.d.ts +1 -1
  16. package/core/common-behaviors/color.d.ts +1 -1
  17. package/core/common-behaviors/constructor.d.ts +2 -2
  18. package/core/common-behaviors/disabled.d.ts +1 -1
  19. package/core/common-behaviors/error-state.d.ts +1 -1
  20. package/core/common-behaviors/tabindex.d.ts +1 -1
  21. package/core/datetime/date-formats.d.ts +1 -1
  22. package/core/formatters/index.d.ts +1 -1
  23. package/core/formatters/number/formatter.d.ts +55 -0
  24. package/core/forms/_forms-theme.scss +2 -4
  25. package/core/label/label-options.d.ts +1 -1
  26. package/core/locales/en-US.d.ts +13 -2
  27. package/core/locales/es-LA.d.ts +21 -0
  28. package/core/locales/fa-IR.d.ts +22 -0
  29. package/core/locales/locale-service.d.ts +111 -5
  30. package/core/locales/pt-BR.d.ts +21 -0
  31. package/core/locales/ru-RU.d.ts +13 -2
  32. package/core/locales/zh-CN.d.ts +20 -0
  33. package/core/option/_optgroup-theme.scss +2 -4
  34. package/core/option/_option-theme.scss +2 -5
  35. package/core/option/action.d.ts +1 -1
  36. package/core/option/optgroup.d.ts +1 -1
  37. package/core/option/option.d.ts +37 -8
  38. package/core/overlay/overlay-position-map.d.ts +7 -1
  39. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +2 -2
  40. package/core/styles/_variables.scss +1 -0
  41. package/core/styles/theming/_badges.scss +2 -1
  42. package/core/styles/theming/_theming.scss +1 -0
  43. package/datepicker/_datepicker-theme.scss +2 -5
  44. package/datepicker/calendar-body.component.d.ts +2 -2
  45. package/datepicker/calendar-header.component.d.ts +9 -3
  46. package/datepicker/calendar.component.d.ts +4 -5
  47. package/datepicker/datepicker-input.directive.d.ts +1 -1
  48. package/datepicker/datepicker-toggle.component.d.ts +1 -1
  49. package/datepicker/datepicker.component.d.ts +1 -1
  50. package/datepicker/month-view.component.d.ts +4 -5
  51. package/divider/divider.component.d.ts +1 -1
  52. package/dl/_dl-theme.scss +2 -5
  53. package/dl/dl.component.d.ts +1 -1
  54. package/dropdown/_dropdown-theme.scss +2 -5
  55. package/dropdown/dropdown-item.component.d.ts +1 -1
  56. package/dropdown/dropdown-trigger.directive.d.ts +1 -1
  57. package/dropdown/dropdown.component.d.ts +1 -1
  58. package/dropdown/dropdown.types.d.ts +3 -3
  59. package/ellipsis-center/ellipsis-center.directive.d.ts +1 -1
  60. package/{esm2020 → esm2022}/autocomplete/autocomplete-origin.directive.mjs +4 -4
  61. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +555 -0
  62. package/{esm2020 → esm2022}/autocomplete/autocomplete.component.mjs +26 -26
  63. package/{esm2020 → esm2022}/autocomplete/autocomplete.module.mjs +10 -10
  64. package/esm2022/button/button.component.mjs +148 -0
  65. package/{esm2020 → esm2022}/button/button.module.mjs +13 -13
  66. package/esm2022/button-toggle/button-toggle.component.mjs +381 -0
  67. package/{esm2020 → esm2022}/button-toggle/button-toggle.module.mjs +5 -5
  68. package/esm2022/card/card.component.mjs +80 -0
  69. package/{esm2020 → esm2022}/card/card.module.mjs +9 -9
  70. package/{esm2020 → esm2022}/checkbox/checkbox-module.mjs +5 -5
  71. package/{esm2020 → esm2022}/checkbox/checkbox-required-validator.mjs +4 -4
  72. package/esm2022/checkbox/checkbox.mjs +300 -0
  73. package/{esm2020 → esm2022}/code-block/actionbar.component.mjs +4 -4
  74. package/esm2022/code-block/code-block.component.mjs +157 -0
  75. package/esm2022/code-block/code-block.module.mjs +60 -0
  76. package/esm2022/core/common-behaviors/color.mjs +33 -0
  77. package/{esm2020 → esm2022}/core/common-behaviors/common-module.mjs +5 -5
  78. package/{esm2020 → esm2022}/core/common-behaviors/disabled.mjs +6 -6
  79. package/{esm2020 → esm2022}/core/common-behaviors/tabindex.mjs +6 -6
  80. package/{esm2020 → esm2022}/core/error/error-options.mjs +7 -7
  81. package/{esm2020 → esm2022}/core/formatters/date/formatter.mjs +4 -4
  82. package/{esm2020 → esm2022}/core/formatters/date/formatter.pipe.mjs +40 -40
  83. package/esm2022/core/formatters/index.mjs +86 -0
  84. package/esm2022/core/formatters/number/formatter.mjs +350 -0
  85. package/{esm2020 → esm2022}/core/forms/forms-module.mjs +7 -7
  86. package/{esm2020 → esm2022}/core/forms/forms.directive.mjs +7 -7
  87. package/{esm2020 → esm2022}/core/highlight/highlight.pipe.mjs +4 -4
  88. package/{esm2020 → esm2022}/core/highlight/index.mjs +5 -5
  89. package/{esm2020 → esm2022}/core/line/line.mjs +8 -8
  90. package/esm2022/core/locales/en-US.mjs +21 -0
  91. package/esm2022/core/locales/es-LA.mjs +27 -0
  92. package/esm2022/core/locales/fa-IR.mjs +28 -0
  93. package/{esm2020 → esm2022}/core/locales/locale-service.mjs +7 -7
  94. package/{esm2020 → esm2022}/core/locales/locale-service.module.mjs +7 -7
  95. package/esm2022/core/locales/pt-BR.mjs +27 -0
  96. package/esm2022/core/locales/ru-RU.mjs +21 -0
  97. package/esm2022/core/locales/zh-CN.mjs +26 -0
  98. package/{esm2020 → esm2022}/core/option/action.mjs +9 -9
  99. package/{esm2020 → esm2022}/core/option/optgroup.mjs +5 -5
  100. package/{esm2020 → esm2022}/core/option/option-module.mjs +5 -5
  101. package/esm2022/core/option/option.mjs +298 -0
  102. package/esm2022/core/overlay/overlay-position-map.mjs +251 -0
  103. package/{esm2020 → esm2022}/core/pop-up/pop-up-trigger.mjs +4 -4
  104. package/{esm2020 → esm2022}/core/pop-up/pop-up.mjs +4 -4
  105. package/{esm2020 → esm2022}/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +4 -4
  106. package/{esm2020 → esm2022}/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +5 -5
  107. package/esm2022/core/services/measure-scrollbar.service.mjs +48 -0
  108. package/{esm2020 → esm2022}/core/utils/data-size/data-size.pipe.mjs +8 -8
  109. package/{esm2020 → esm2022}/core/version.mjs +2 -2
  110. package/{esm2020 → esm2022}/datepicker/calendar-body.component.mjs +4 -4
  111. package/esm2022/datepicker/calendar-header.component.mjs +135 -0
  112. package/esm2022/datepicker/calendar.component.mjs +166 -0
  113. package/esm2022/datepicker/datepicker-input.directive.mjs +955 -0
  114. package/{esm2020 → esm2022}/datepicker/datepicker-intl.mjs +4 -4
  115. package/{esm2020 → esm2022}/datepicker/datepicker-module.mjs +38 -38
  116. package/esm2022/datepicker/datepicker-toggle.component.mjs +86 -0
  117. package/esm2022/datepicker/datepicker.component.mjs +393 -0
  118. package/esm2022/datepicker/month-view.component.mjs +149 -0
  119. package/{esm2020 → esm2022}/divider/divider.component.mjs +4 -4
  120. package/{esm2020 → esm2022}/divider/divider.module.mjs +5 -5
  121. package/{esm2020 → esm2022}/dl/dl.component.mjs +10 -10
  122. package/{esm2020 → esm2022}/dl/dl.module.mjs +13 -13
  123. package/{esm2020 → esm2022}/dropdown/dropdown-content.directive.mjs +4 -4
  124. package/{esm2020 → esm2022}/dropdown/dropdown-item.component.mjs +6 -6
  125. package/esm2022/dropdown/dropdown-trigger.directive.mjs +489 -0
  126. package/esm2022/dropdown/dropdown.component.mjs +292 -0
  127. package/{esm2020 → esm2022}/dropdown/dropdown.module.mjs +15 -15
  128. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +106 -0
  129. package/{esm2020 → esm2022}/file-upload/file-drop.mjs +4 -4
  130. package/{esm2020 → esm2022}/file-upload/file-upload.module.mjs +25 -25
  131. package/esm2022/file-upload/multiple-file-upload.component.mjs +165 -0
  132. package/esm2022/file-upload/single-file-upload.component.mjs +134 -0
  133. package/{esm2020 → esm2022}/form-field/cleaner.mjs +4 -4
  134. package/esm2022/form-field/form-field.mjs +267 -0
  135. package/{esm2020 → esm2022}/form-field/form-field.module.mjs +23 -23
  136. package/{esm2020 → esm2022}/form-field/hint.mjs +4 -4
  137. package/esm2022/form-field/password-hint.mjs +146 -0
  138. package/{esm2020 → esm2022}/form-field/prefix.mjs +4 -4
  139. package/{esm2020 → esm2022}/form-field/stepper.mjs +6 -6
  140. package/{esm2020 → esm2022}/form-field/suffix.mjs +4 -4
  141. package/esm2022/form-field/validate.directive.mjs +158 -0
  142. package/{esm2020 → esm2022}/icon/icon.component.mjs +7 -7
  143. package/{esm2020 → esm2022}/icon/icon.module.mjs +11 -11
  144. package/{esm2020 → esm2022}/input/input-number-validators.mjs +7 -7
  145. package/esm2022/input/input-number.mjs +168 -0
  146. package/esm2022/input/input-password.mjs +343 -0
  147. package/esm2022/input/input.mjs +297 -0
  148. package/{esm2020 → esm2022}/input/input.module.mjs +23 -23
  149. package/esm2022/link/link.component.mjs +122 -0
  150. package/{esm2020 → esm2022}/link/link.module.mjs +7 -7
  151. package/esm2022/list/list-selection.component.mjs +705 -0
  152. package/{esm2020 → esm2022}/list/list.component.mjs +8 -8
  153. package/{esm2020 → esm2022}/list/list.module.mjs +20 -20
  154. package/esm2022/loader-overlay/loader-overlay.component.mjs +103 -0
  155. package/{esm2020 → esm2022}/loader-overlay/loader-overlay.module.mjs +17 -17
  156. package/{esm2020 → esm2022}/markdown/markdown.component.mjs +13 -13
  157. package/{esm2020 → esm2022}/markdown/markdown.module.mjs +5 -5
  158. package/{esm2020 → esm2022}/markdown/markdown.service.mjs +4 -4
  159. package/{esm2020 → esm2022}/modal/css-unit.pipe.mjs +4 -4
  160. package/esm2022/modal/modal-control.service.mjs +85 -0
  161. package/esm2022/modal/modal.component.mjs +520 -0
  162. package/{esm2020 → esm2022}/modal/modal.directive.mjs +13 -13
  163. package/esm2022/modal/modal.module.mjs +75 -0
  164. package/{esm2020 → esm2022}/modal/modal.service.mjs +8 -8
  165. package/esm2022/navbar/navbar-item.component.mjs +606 -0
  166. package/esm2022/navbar/navbar.component.mjs +248 -0
  167. package/{esm2020 → esm2022}/navbar/navbar.module.mjs +37 -37
  168. package/{esm2020 → esm2022}/navbar/vertical-navbar.component.mjs +20 -17
  169. package/esm2022/popover/popover-confirm.component.mjs +108 -0
  170. package/esm2022/popover/popover.component.mjs +266 -0
  171. package/{esm2020 → esm2022}/popover/popover.module.mjs +8 -8
  172. package/{esm2020 → esm2022}/progress-bar/progress-bar.component.mjs +4 -4
  173. package/{esm2020 → esm2022}/progress-bar/progress-bar.module.mjs +7 -7
  174. package/{esm2020 → esm2022}/progress-spinner/progress-spinner.component.mjs +12 -12
  175. package/{esm2020 → esm2022}/progress-spinner/progress-spinner.module.mjs +7 -7
  176. package/esm2022/radio/radio.component.mjs +457 -0
  177. package/{esm2020 → esm2022}/radio/radio.module.mjs +5 -5
  178. package/esm2022/select/select-option.directive.mjs +65 -0
  179. package/esm2022/select/select.component.mjs +1160 -0
  180. package/{esm2020 → esm2022}/select/select.module.mjs +32 -32
  181. package/esm2022/sidebar/sidebar.component.mjs +146 -0
  182. package/{esm2020 → esm2022}/sidebar/sidebar.module.mjs +9 -9
  183. package/esm2022/sidepanel/sidepanel-container.component.mjs +110 -0
  184. package/{esm2020 → esm2022}/sidepanel/sidepanel-directives.mjs +18 -18
  185. package/{esm2020 → esm2022}/sidepanel/sidepanel.module.mjs +32 -32
  186. package/{esm2020 → esm2022}/sidepanel/sidepanel.service.mjs +10 -10
  187. package/esm2022/splitter/splitter.component.mjs +482 -0
  188. package/{esm2020 → esm2022}/splitter/splitter.module.mjs +12 -12
  189. package/{esm2020 → esm2022}/table/table.component.mjs +4 -4
  190. package/{esm2020 → esm2022}/table/table.module.mjs +9 -9
  191. package/esm2022/tabs/paginated-tab-header.mjs +488 -0
  192. package/esm2022/tabs/tab-body.component.mjs +179 -0
  193. package/{esm2020 → esm2022}/tabs/tab-content.directive.mjs +4 -4
  194. package/esm2022/tabs/tab-group.component.mjs +349 -0
  195. package/{esm2020 → esm2022}/tabs/tab-header.component.mjs +4 -4
  196. package/{esm2020 → esm2022}/tabs/tab-label-wrapper.directive.mjs +4 -4
  197. package/{esm2020 → esm2022}/tabs/tab-label.directive.mjs +4 -4
  198. package/esm2022/tabs/tab-nav-bar/tab-nav-bar.mjs +111 -0
  199. package/{esm2020 → esm2022}/tabs/tab.component.mjs +43 -34
  200. package/{esm2020 → esm2022}/tabs/tabs.module.mjs +42 -42
  201. package/esm2022/tags/tag-default-options.mjs +4 -0
  202. package/esm2022/tags/tag-input.mjs +250 -0
  203. package/esm2022/tags/tag-list.component.mjs +718 -0
  204. package/esm2022/tags/tag.component.mjs +381 -0
  205. package/esm2022/tags/tag.module.mjs +56 -0
  206. package/esm2022/textarea/textarea.component.mjs +254 -0
  207. package/{esm2020 → esm2022}/textarea/textarea.module.mjs +5 -5
  208. package/esm2022/timepicker/timepicker.directive.mjs +647 -0
  209. package/{esm2020 → esm2022}/timepicker/timepicker.module.mjs +11 -11
  210. package/{esm2020 → esm2022}/timezone/cities-by-filter.pipe.mjs +4 -4
  211. package/esm2022/timezone/timezone-option.component.mjs +48 -0
  212. package/{esm2020 → esm2022}/timezone/timezone-option.directive.mjs +4 -4
  213. package/{esm2020 → esm2022}/timezone/timezone-select.component.mjs +11 -11
  214. package/{esm2020 → esm2022}/timezone/timezone.module.mjs +29 -29
  215. package/{esm2020 → esm2022}/timezone/utc-offset.pipe.mjs +4 -4
  216. package/esm2022/title/title.directive.mjs +107 -0
  217. package/{esm2020 → esm2022}/title/title.module.mjs +5 -5
  218. package/{esm2020 → esm2022}/toast/toast-container.component.mjs +4 -4
  219. package/esm2022/toast/toast.component.mjs +92 -0
  220. package/esm2022/toast/toast.module.mjs +48 -0
  221. package/esm2022/toast/toast.service.mjs +188 -0
  222. package/esm2022/toggle/toggle.component.mjs +156 -0
  223. package/{esm2020 → esm2022}/toggle/toggle.module.mjs +5 -5
  224. package/esm2022/tooltip/tooltip.component.mjs +299 -0
  225. package/{esm2020 → esm2022}/tooltip/tooltip.module.mjs +14 -14
  226. package/esm2022/tree/data-source/flat-data-source.mjs +162 -0
  227. package/{esm2020 → esm2022}/tree/node.mjs +4 -4
  228. package/{esm2020 → esm2022}/tree/outlet.mjs +4 -4
  229. package/esm2022/tree/padding.directive.mjs +113 -0
  230. package/esm2022/tree/toggle.mjs +81 -0
  231. package/esm2022/tree/tree-base.mjs +243 -0
  232. package/esm2022/tree/tree-option.component.mjs +303 -0
  233. package/esm2022/tree/tree-selection.component.mjs +558 -0
  234. package/{esm2020 → esm2022}/tree/tree.mjs +4 -4
  235. package/{esm2020 → esm2022}/tree/tree.module.mjs +21 -21
  236. package/esm2022/tree-select/tree-select.component.mjs +936 -0
  237. package/{esm2020 → esm2022}/tree-select/tree-select.module.mjs +17 -17
  238. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-autocomplete.mjs +80 -77
  239. package/fesm2022/ptsecurity-mosaic-autocomplete.mjs.map +1 -0
  240. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button-toggle.mjs +47 -47
  241. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button-toggle.mjs.map +1 -1
  242. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button.mjs +25 -25
  243. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-button.mjs.map +1 -1
  244. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-card.mjs +17 -17
  245. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-card.mjs.map +1 -1
  246. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-checkbox.mjs +39 -39
  247. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-checkbox.mjs.map +1 -1
  248. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-code-block.mjs +34 -34
  249. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-code-block.mjs.map +1 -1
  250. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-core.mjs +600 -224
  251. package/fesm2022/ptsecurity-mosaic-core.mjs.map +1 -0
  252. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-datepicker.mjs +335 -351
  253. package/fesm2022/ptsecurity-mosaic-datepicker.mjs.map +1 -0
  254. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-divider.mjs +7 -7
  255. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-divider.mjs.map +1 -1
  256. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dl.mjs +21 -21
  257. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dl.mjs.map +1 -1
  258. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dropdown.mjs +89 -89
  259. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-dropdown.mjs.map +1 -1
  260. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-ellipsis-center.mjs +11 -11
  261. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-ellipsis-center.mjs.map +1 -1
  262. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-file-upload.mjs +55 -47
  263. package/fesm2022/ptsecurity-mosaic-file-upload.mjs.map +1 -0
  264. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-form-field.mjs +92 -87
  265. package/fesm2022/ptsecurity-mosaic-form-field.mjs.map +1 -0
  266. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-icon.mjs +16 -16
  267. package/fesm2022/ptsecurity-mosaic-icon.mjs.map +1 -0
  268. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-input.mjs +128 -128
  269. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-input.mjs.map +1 -1
  270. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-link.mjs +22 -22
  271. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-link.mjs.map +1 -1
  272. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-list.mjs +88 -88
  273. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-list.mjs.map +1 -1
  274. package/fesm2022/ptsecurity-mosaic-loader-overlay.mjs +155 -0
  275. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-loader-overlay.mjs.map +1 -1
  276. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-markdown.mjs +19 -19
  277. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-markdown.mjs.map +1 -1
  278. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-modal.mjs +157 -144
  279. package/fesm2022/ptsecurity-mosaic-modal.mjs.map +1 -0
  280. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-navbar.mjs +196 -187
  281. package/fesm2022/ptsecurity-mosaic-navbar.mjs.map +1 -0
  282. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-popover.mjs +37 -37
  283. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-popover.mjs.map +1 -1
  284. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-bar.mjs +9 -9
  285. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-bar.mjs.map +1 -1
  286. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-spinner.mjs +18 -18
  287. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-progress-spinner.mjs.map +1 -1
  288. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-radio.mjs +80 -79
  289. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-radio.mjs.map +1 -1
  290. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-select.mjs +188 -174
  291. package/fesm2022/ptsecurity-mosaic-select.mjs.map +1 -0
  292. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidebar.mjs +29 -29
  293. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidebar.mjs.map +1 -1
  294. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidepanel.mjs +63 -63
  295. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-sidepanel.mjs.map +1 -1
  296. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-splitter.mjs +55 -55
  297. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-splitter.mjs.map +1 -1
  298. package/fesm2022/ptsecurity-mosaic-table.mjs +45 -0
  299. package/fesm2022/ptsecurity-mosaic-table.mjs.map +1 -0
  300. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tabs.mjs +188 -179
  301. package/fesm2022/ptsecurity-mosaic-tabs.mjs.map +1 -0
  302. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tags.mjs +150 -144
  303. package/fesm2022/ptsecurity-mosaic-tags.mjs.map +1 -0
  304. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-textarea.mjs +41 -41
  305. package/{fesm2015 → fesm2022}/ptsecurity-mosaic-textarea.mjs.map +1 -1
  306. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timepicker.mjs +95 -95
  307. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timepicker.mjs.map +1 -1
  308. package/fesm2022/ptsecurity-mosaic-timezone.mjs +314 -0
  309. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-timezone.mjs.map +1 -1
  310. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-title.mjs +18 -18
  311. package/fesm2022/ptsecurity-mosaic-title.mjs.map +1 -0
  312. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toast.mjs +47 -41
  313. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toast.mjs.map +1 -1
  314. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toggle.mjs +35 -35
  315. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-toggle.mjs.map +1 -1
  316. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tooltip.mjs +47 -47
  317. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tooltip.mjs.map +1 -1
  318. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tree-select.mjs +123 -123
  319. package/fesm2022/ptsecurity-mosaic-tree-select.mjs.map +1 -0
  320. package/{fesm2020 → fesm2022}/ptsecurity-mosaic-tree.mjs +203 -198
  321. package/fesm2022/ptsecurity-mosaic-tree.mjs.map +1 -0
  322. package/file-upload/_file-upload-theme.scss +2 -4
  323. package/file-upload/file-upload.d.ts +1 -1
  324. package/file-upload/multiple-file-upload.component.d.ts +5 -4
  325. package/file-upload/single-file-upload.component.d.ts +5 -4
  326. package/form-field/_form-field-theme.scss +7 -5
  327. package/form-field/form-field.d.ts +1 -2
  328. package/form-field/form-field.scss +1 -3
  329. package/form-field/hint.d.ts +1 -1
  330. package/form-field/password-hint.d.ts +6 -3
  331. package/icon/icon.component.d.ts +1 -1
  332. package/input/_input-theme.scss +7 -6
  333. package/input/input-number-validators.d.ts +2 -2
  334. package/input/input-number.d.ts +1 -1
  335. package/input/input-password.d.ts +2 -2
  336. package/input/input.d.ts +1 -1
  337. package/link/_link-theme.scss +7 -8
  338. package/link/link.component.d.ts +1 -1
  339. package/list/_list-theme.scss +2 -5
  340. package/list/list-selection.component.d.ts +2 -2
  341. package/loader-overlay/_loader-overlay-theme.scss +2 -5
  342. package/loader-overlay/loader-overlay.component.d.ts +1 -1
  343. package/loader-overlay/loader-overlay.scss +3 -0
  344. package/markdown/_markdown-theme.scss +3 -6
  345. package/markdown/markdown.component.d.ts +1 -1
  346. package/modal/_modal-theme.scss +3 -5
  347. package/modal/modal.component.d.ts +5 -2
  348. package/modal/modal.module.d.ts +2 -1
  349. package/modal/modal.scss +14 -2
  350. package/modal/modal.type.d.ts +3 -3
  351. package/navbar/_navbar-theme.scss +2 -6
  352. package/navbar/navbar-item.component.d.ts +5 -4
  353. package/navbar/navbar.component.d.ts +7 -4
  354. package/navbar/vertical-navbar.component.d.ts +5 -3
  355. package/package.json +156 -246
  356. package/popover/_popover-theme.scss +2 -6
  357. package/popover/popover-confirm.component.d.ts +1 -1
  358. package/popover/popover.component.d.ts +1 -1
  359. package/prebuilt-themes/dark-theme.css +1 -1
  360. package/prebuilt-themes/default-theme.css +1 -1
  361. package/progress-bar/progress-bar.component.d.ts +2 -2
  362. package/progress-spinner/progress-spinner.component.d.ts +3 -3
  363. package/radio/_radio-theme.scss +6 -6
  364. package/radio/radio.component.d.ts +2 -2
  365. package/select/_select-theme.scss +2 -5
  366. package/select/select.component.d.ts +12 -9
  367. package/select/select.scss +3 -1
  368. package/sidebar/sidebar.component.d.ts +3 -3
  369. package/sidepanel/_sidepanel-theme.scss +2 -5
  370. package/sidepanel/sidepanel-directives.d.ts +2 -2
  371. package/splitter/splitter.component.d.ts +3 -3
  372. package/table/_table-theme.scss +2 -5
  373. package/tabs/_tabs-theme.scss +2 -5
  374. package/tabs/paginated-tab-header.d.ts +3 -3
  375. package/tabs/tab-body.component.d.ts +3 -3
  376. package/tabs/tab-group.component.d.ts +2 -2
  377. package/tabs/tab-header.component.d.ts +2 -2
  378. package/tabs/tab-label-wrapper.directive.d.ts +1 -1
  379. package/tabs/tab-nav-bar/tab-nav-bar.d.ts +1 -1
  380. package/tabs/tab.component.d.ts +1 -1
  381. package/tags/_tag-theme.scss +2 -5
  382. package/tags/tag-default-options.d.ts +4 -0
  383. package/tags/tag-input.d.ts +1 -1
  384. package/tags/tag-list.component.d.ts +2 -1
  385. package/tags/tag-list.scss +6 -2
  386. package/tags/tag.component.d.ts +2 -2
  387. package/textarea/_textarea-theme.scss +2 -5
  388. package/textarea/textarea.component.d.ts +1 -1
  389. package/timepicker/timepicker.directive.d.ts +1 -1
  390. package/timezone/_timezone-option-theme.scss +2 -5
  391. package/timezone/timezone-option.component.d.ts +1 -1
  392. package/toast/_toast-theme.scss +2 -5
  393. package/toast/toast.type.d.ts +1 -1
  394. package/toggle/_toggle-theme.scss +2 -5
  395. package/toggle/toggle.component.d.ts +2 -2
  396. package/tooltip/_tooltip-theme.scss +2 -5
  397. package/tooltip/tooltip.component.d.ts +3 -3
  398. package/tree/_tree-theme.scss +2 -4
  399. package/tree/node.d.ts +1 -1
  400. package/tree/padding.directive.d.ts +1 -1
  401. package/tree/toggle.d.ts +2 -2
  402. package/tree/tree-base.d.ts +1 -1
  403. package/tree/tree-option.component.d.ts +1 -1
  404. package/tree/tree-option.scss +4 -2
  405. package/tree/tree-selection.component.d.ts +1 -1
  406. package/tree-select/_tree-select-theme.scss +2 -5
  407. package/tree-select/tree-select.component.d.ts +1 -1
  408. package/esm2020/autocomplete/autocomplete-trigger.directive.mjs +0 -552
  409. package/esm2020/button/button.component.mjs +0 -148
  410. package/esm2020/button-toggle/button-toggle.component.mjs +0 -381
  411. package/esm2020/card/card.component.mjs +0 -80
  412. package/esm2020/checkbox/checkbox.mjs +0 -300
  413. package/esm2020/code-block/code-block.component.mjs +0 -157
  414. package/esm2020/code-block/code-block.module.mjs +0 -60
  415. package/esm2020/core/common-behaviors/color.mjs +0 -33
  416. package/esm2020/core/formatters/index.mjs +0 -78
  417. package/esm2020/core/formatters/number/formatter.mjs +0 -129
  418. package/esm2020/core/locales/en-US.mjs +0 -10
  419. package/esm2020/core/locales/es-LA.mjs +0 -6
  420. package/esm2020/core/locales/fa-IR.mjs +0 -6
  421. package/esm2020/core/locales/pt-BR.mjs +0 -6
  422. package/esm2020/core/locales/ru-RU.mjs +0 -10
  423. package/esm2020/core/locales/zh-CN.mjs +0 -6
  424. package/esm2020/core/option/option.mjs +0 -262
  425. package/esm2020/core/overlay/overlay-position-map.mjs +0 -245
  426. package/esm2020/core/services/measure-scrollbar.service.mjs +0 -48
  427. package/esm2020/datepicker/calendar-header.component.mjs +0 -134
  428. package/esm2020/datepicker/calendar.component.mjs +0 -175
  429. package/esm2020/datepicker/datepicker-input.directive.mjs +0 -954
  430. package/esm2020/datepicker/datepicker-toggle.component.mjs +0 -86
  431. package/esm2020/datepicker/datepicker.component.mjs +0 -393
  432. package/esm2020/datepicker/month-view.component.mjs +0 -158
  433. package/esm2020/dropdown/dropdown-trigger.directive.mjs +0 -489
  434. package/esm2020/dropdown/dropdown.component.mjs +0 -292
  435. package/esm2020/ellipsis-center/ellipsis-center.directive.mjs +0 -106
  436. package/esm2020/file-upload/multiple-file-upload.component.mjs +0 -161
  437. package/esm2020/file-upload/single-file-upload.component.mjs +0 -130
  438. package/esm2020/form-field/form-field.mjs +0 -270
  439. package/esm2020/form-field/password-hint.mjs +0 -138
  440. package/esm2020/form-field/validate.directive.mjs +0 -158
  441. package/esm2020/input/input-number.mjs +0 -168
  442. package/esm2020/input/input-password.mjs +0 -343
  443. package/esm2020/input/input.mjs +0 -297
  444. package/esm2020/link/link.component.mjs +0 -122
  445. package/esm2020/list/list-selection.component.mjs +0 -705
  446. package/esm2020/loader-overlay/loader-overlay.component.mjs +0 -103
  447. package/esm2020/modal/modal-control.service.mjs +0 -85
  448. package/esm2020/modal/modal.component.mjs +0 -510
  449. package/esm2020/modal/modal.module.mjs +0 -71
  450. package/esm2020/navbar/navbar-item.component.mjs +0 -605
  451. package/esm2020/navbar/navbar.component.mjs +0 -239
  452. package/esm2020/popover/popover-confirm.component.mjs +0 -108
  453. package/esm2020/popover/popover.component.mjs +0 -266
  454. package/esm2020/radio/radio.component.mjs +0 -456
  455. package/esm2020/select/select-option.directive.mjs +0 -65
  456. package/esm2020/select/select.component.mjs +0 -1146
  457. package/esm2020/sidebar/sidebar.component.mjs +0 -146
  458. package/esm2020/sidepanel/sidepanel-container.component.mjs +0 -110
  459. package/esm2020/splitter/splitter.component.mjs +0 -482
  460. package/esm2020/tabs/paginated-tab-header.mjs +0 -488
  461. package/esm2020/tabs/tab-body.component.mjs +0 -179
  462. package/esm2020/tabs/tab-group.component.mjs +0 -349
  463. package/esm2020/tabs/tab-nav-bar/tab-nav-bar.mjs +0 -111
  464. package/esm2020/tags/tag-default-options.mjs +0 -4
  465. package/esm2020/tags/tag-input.mjs +0 -248
  466. package/esm2020/tags/tag-list.component.mjs +0 -714
  467. package/esm2020/tags/tag.component.mjs +0 -381
  468. package/esm2020/tags/tag.module.mjs +0 -56
  469. package/esm2020/textarea/textarea.component.mjs +0 -254
  470. package/esm2020/timepicker/timepicker.directive.mjs +0 -647
  471. package/esm2020/timezone/timezone-option.component.mjs +0 -48
  472. package/esm2020/title/title.directive.mjs +0 -107
  473. package/esm2020/toast/toast.component.mjs +0 -92
  474. package/esm2020/toast/toast.module.mjs +0 -42
  475. package/esm2020/toast/toast.service.mjs +0 -188
  476. package/esm2020/toggle/toggle.component.mjs +0 -156
  477. package/esm2020/tooltip/tooltip.component.mjs +0 -299
  478. package/esm2020/tree/data-source/flat-data-source.mjs +0 -162
  479. package/esm2020/tree/padding.directive.mjs +0 -113
  480. package/esm2020/tree/toggle.mjs +0 -81
  481. package/esm2020/tree/tree-base.mjs +0 -243
  482. package/esm2020/tree/tree-option.component.mjs +0 -299
  483. package/esm2020/tree/tree-selection.component.mjs +0 -557
  484. package/esm2020/tree-select/tree-select.component.mjs +0 -936
  485. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs +0 -753
  486. package/fesm2015/ptsecurity-mosaic-autocomplete.mjs.map +0 -1
  487. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs +0 -405
  488. package/fesm2015/ptsecurity-mosaic-button-toggle.mjs.map +0 -1
  489. package/fesm2015/ptsecurity-mosaic-button.mjs +0 -193
  490. package/fesm2015/ptsecurity-mosaic-button.mjs.map +0 -1
  491. package/fesm2015/ptsecurity-mosaic-card.mjs +0 -111
  492. package/fesm2015/ptsecurity-mosaic-card.mjs.map +0 -1
  493. package/fesm2015/ptsecurity-mosaic-checkbox.mjs +0 -351
  494. package/fesm2015/ptsecurity-mosaic-checkbox.mjs.map +0 -1
  495. package/fesm2015/ptsecurity-mosaic-code-block.mjs +0 -280
  496. package/fesm2015/ptsecurity-mosaic-code-block.mjs.map +0 -1
  497. package/fesm2015/ptsecurity-mosaic-core.mjs +0 -2314
  498. package/fesm2015/ptsecurity-mosaic-core.mjs.map +0 -1
  499. package/fesm2015/ptsecurity-mosaic-datepicker.mjs +0 -2112
  500. package/fesm2015/ptsecurity-mosaic-datepicker.mjs.map +0 -1
  501. package/fesm2015/ptsecurity-mosaic-divider.mjs +0 -61
  502. package/fesm2015/ptsecurity-mosaic-divider.mjs.map +0 -1
  503. package/fesm2015/ptsecurity-mosaic-dl.mjs +0 -126
  504. package/fesm2015/ptsecurity-mosaic-dl.mjs.map +0 -1
  505. package/fesm2015/ptsecurity-mosaic-dropdown.mjs +0 -1115
  506. package/fesm2015/ptsecurity-mosaic-dropdown.mjs.map +0 -1
  507. package/fesm2015/ptsecurity-mosaic-ellipsis-center.mjs +0 -113
  508. package/fesm2015/ptsecurity-mosaic-ellipsis-center.mjs.map +0 -1
  509. package/fesm2015/ptsecurity-mosaic-file-upload.mjs +0 -392
  510. package/fesm2015/ptsecurity-mosaic-file-upload.mjs.map +0 -1
  511. package/fesm2015/ptsecurity-mosaic-form-field.mjs +0 -768
  512. package/fesm2015/ptsecurity-mosaic-form-field.mjs.map +0 -1
  513. package/fesm2015/ptsecurity-mosaic-icon.mjs +0 -86
  514. package/fesm2015/ptsecurity-mosaic-icon.mjs.map +0 -1
  515. package/fesm2015/ptsecurity-mosaic-input.mjs +0 -951
  516. package/fesm2015/ptsecurity-mosaic-input.mjs.map +0 -1
  517. package/fesm2015/ptsecurity-mosaic-link.mjs +0 -150
  518. package/fesm2015/ptsecurity-mosaic-link.mjs.map +0 -1
  519. package/fesm2015/ptsecurity-mosaic-list.mjs +0 -807
  520. package/fesm2015/ptsecurity-mosaic-list.mjs.map +0 -1
  521. package/fesm2015/ptsecurity-mosaic-loader-overlay.mjs +0 -157
  522. package/fesm2015/ptsecurity-mosaic-markdown.mjs +0 -128
  523. package/fesm2015/ptsecurity-mosaic-markdown.mjs.map +0 -1
  524. package/fesm2015/ptsecurity-mosaic-modal.mjs +0 -875
  525. package/fesm2015/ptsecurity-mosaic-modal.mjs.map +0 -1
  526. package/fesm2015/ptsecurity-mosaic-navbar.mjs +0 -1054
  527. package/fesm2015/ptsecurity-mosaic-navbar.mjs.map +0 -1
  528. package/fesm2015/ptsecurity-mosaic-popover.mjs +0 -411
  529. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs +0 -74
  530. package/fesm2015/ptsecurity-mosaic-progress-bar.mjs.map +0 -1
  531. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs +0 -93
  532. package/fesm2015/ptsecurity-mosaic-progress-spinner.mjs.map +0 -1
  533. package/fesm2015/ptsecurity-mosaic-radio.mjs +0 -480
  534. package/fesm2015/ptsecurity-mosaic-select.mjs +0 -1286
  535. package/fesm2015/ptsecurity-mosaic-select.mjs.map +0 -1
  536. package/fesm2015/ptsecurity-mosaic-sidebar.mjs +0 -202
  537. package/fesm2015/ptsecurity-mosaic-sidebar.mjs.map +0 -1
  538. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs +0 -622
  539. package/fesm2015/ptsecurity-mosaic-sidepanel.mjs.map +0 -1
  540. package/fesm2015/ptsecurity-mosaic-splitter.mjs.map +0 -1
  541. package/fesm2015/ptsecurity-mosaic-table.mjs +0 -45
  542. package/fesm2015/ptsecurity-mosaic-table.mjs.map +0 -1
  543. package/fesm2015/ptsecurity-mosaic-tabs.mjs +0 -1523
  544. package/fesm2015/ptsecurity-mosaic-tabs.mjs.map +0 -1
  545. package/fesm2015/ptsecurity-mosaic-tags.mjs +0 -1391
  546. package/fesm2015/ptsecurity-mosaic-tags.mjs.map +0 -1
  547. package/fesm2015/ptsecurity-mosaic-textarea.mjs +0 -280
  548. package/fesm2015/ptsecurity-mosaic-timepicker.mjs +0 -708
  549. package/fesm2015/ptsecurity-mosaic-timepicker.mjs.map +0 -1
  550. package/fesm2015/ptsecurity-mosaic-timezone.mjs +0 -316
  551. package/fesm2015/ptsecurity-mosaic-timezone.mjs.map +0 -1
  552. package/fesm2015/ptsecurity-mosaic-title.mjs +0 -128
  553. package/fesm2015/ptsecurity-mosaic-title.mjs.map +0 -1
  554. package/fesm2015/ptsecurity-mosaic-toast.mjs +0 -379
  555. package/fesm2015/ptsecurity-mosaic-toast.mjs.map +0 -1
  556. package/fesm2015/ptsecurity-mosaic-toggle.mjs +0 -178
  557. package/fesm2015/ptsecurity-mosaic-toggle.mjs.map +0 -1
  558. package/fesm2015/ptsecurity-mosaic-tooltip.mjs +0 -369
  559. package/fesm2015/ptsecurity-mosaic-tooltip.mjs.map +0 -1
  560. package/fesm2015/ptsecurity-mosaic-tree-select.mjs +0 -983
  561. package/fesm2015/ptsecurity-mosaic-tree-select.mjs.map +0 -1
  562. package/fesm2015/ptsecurity-mosaic-tree.mjs +0 -1815
  563. package/fesm2015/ptsecurity-mosaic-tree.mjs.map +0 -1
  564. package/fesm2020/ptsecurity-mosaic-autocomplete.mjs.map +0 -1
  565. package/fesm2020/ptsecurity-mosaic-core.mjs.map +0 -1
  566. package/fesm2020/ptsecurity-mosaic-datepicker.mjs.map +0 -1
  567. package/fesm2020/ptsecurity-mosaic-file-upload.mjs.map +0 -1
  568. package/fesm2020/ptsecurity-mosaic-form-field.mjs.map +0 -1
  569. package/fesm2020/ptsecurity-mosaic-icon.mjs.map +0 -1
  570. package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs +0 -155
  571. package/fesm2020/ptsecurity-mosaic-loader-overlay.mjs.map +0 -1
  572. package/fesm2020/ptsecurity-mosaic-modal.mjs.map +0 -1
  573. package/fesm2020/ptsecurity-mosaic-navbar.mjs.map +0 -1
  574. package/fesm2020/ptsecurity-mosaic-popover.mjs.map +0 -1
  575. package/fesm2020/ptsecurity-mosaic-radio.mjs.map +0 -1
  576. package/fesm2020/ptsecurity-mosaic-select.mjs.map +0 -1
  577. package/fesm2020/ptsecurity-mosaic-splitter.mjs +0 -524
  578. package/fesm2020/ptsecurity-mosaic-table.mjs +0 -45
  579. package/fesm2020/ptsecurity-mosaic-table.mjs.map +0 -1
  580. package/fesm2020/ptsecurity-mosaic-tabs.mjs.map +0 -1
  581. package/fesm2020/ptsecurity-mosaic-tags.mjs.map +0 -1
  582. package/fesm2020/ptsecurity-mosaic-textarea.mjs.map +0 -1
  583. package/fesm2020/ptsecurity-mosaic-timezone.mjs +0 -314
  584. package/fesm2020/ptsecurity-mosaic-title.mjs.map +0 -1
  585. package/fesm2020/ptsecurity-mosaic-tree-select.mjs.map +0 -1
  586. package/fesm2020/ptsecurity-mosaic-tree.mjs.map +0 -1
  587. package/fesm2020/ptsecurity-mosaic.mjs +0 -4
  588. package/fesm2020/ptsecurity-mosaic.mjs.map +0 -1
  589. /package/{esm2020 → esm2022}/autocomplete/index.mjs +0 -0
  590. /package/{esm2020 → esm2022}/autocomplete/ptsecurity-mosaic-autocomplete.mjs +0 -0
  591. /package/{esm2020 → esm2022}/autocomplete/public-api.mjs +0 -0
  592. /package/{esm2020 → esm2022}/button/index.mjs +0 -0
  593. /package/{esm2020 → esm2022}/button/ptsecurity-mosaic-button.mjs +0 -0
  594. /package/{esm2020 → esm2022}/button/public-api.mjs +0 -0
  595. /package/{esm2020 → esm2022}/button-toggle/index.mjs +0 -0
  596. /package/{esm2020 → esm2022}/button-toggle/ptsecurity-mosaic-button-toggle.mjs +0 -0
  597. /package/{esm2020 → esm2022}/button-toggle/public-api.mjs +0 -0
  598. /package/{esm2020 → esm2022}/card/index.mjs +0 -0
  599. /package/{esm2020 → esm2022}/card/ptsecurity-mosaic-card.mjs +0 -0
  600. /package/{esm2020 → esm2022}/card/public-api.mjs +0 -0
  601. /package/{esm2020 → esm2022}/checkbox/checkbox-config.mjs +0 -0
  602. /package/{esm2020 → esm2022}/checkbox/index.mjs +0 -0
  603. /package/{esm2020 → esm2022}/checkbox/ptsecurity-mosaic-checkbox.mjs +0 -0
  604. /package/{esm2020 → esm2022}/checkbox/public-api.mjs +0 -0
  605. /package/{esm2020 → esm2022}/code-block/code-block.types.mjs +0 -0
  606. /package/{esm2020 → esm2022}/code-block/index.mjs +0 -0
  607. /package/{esm2020 → esm2022}/code-block/ptsecurity-mosaic-code-block.mjs +0 -0
  608. /package/{esm2020 → esm2022}/code-block/public-api.mjs +0 -0
  609. /package/{esm2020 → esm2022}/core/animation/animation.mjs +0 -0
  610. /package/{esm2020 → esm2022}/core/animation/fade-animations.mjs +0 -0
  611. /package/{esm2020 → esm2022}/core/animation/index.mjs +0 -0
  612. /package/{esm2020 → esm2022}/core/animation/select-animations.mjs +0 -0
  613. /package/{esm2020 → esm2022}/core/common-behaviors/constructor.mjs +0 -0
  614. /package/{esm2020 → esm2022}/core/common-behaviors/error-state.mjs +0 -0
  615. /package/{esm2020 → esm2022}/core/common-behaviors/index.mjs +0 -0
  616. /package/{esm2020 → esm2022}/core/datetime/date-adapter.mjs +0 -0
  617. /package/{esm2020 → esm2022}/core/datetime/date-formats.mjs +0 -0
  618. /package/{esm2020 → esm2022}/core/datetime/index.mjs +0 -0
  619. /package/{esm2020 → esm2022}/core/forms/index.mjs +0 -0
  620. /package/{esm2020 → esm2022}/core/index.mjs +0 -0
  621. /package/{esm2020 → esm2022}/core/label/label-options.mjs +0 -0
  622. /package/{esm2020 → esm2022}/core/locales/index.mjs +0 -0
  623. /package/{esm2020 → esm2022}/core/option/index.mjs +0 -0
  624. /package/{esm2020 → esm2022}/core/pop-up/constants.mjs +0 -0
  625. /package/{esm2020 → esm2022}/core/pop-up/index.mjs +0 -0
  626. /package/{esm2020 → esm2022}/core/ptsecurity-mosaic-core.mjs +0 -0
  627. /package/{esm2020 → esm2022}/core/public-api.mjs +0 -0
  628. /package/{esm2020 → esm2022}/core/select/constants.mjs +0 -0
  629. /package/{esm2020 → esm2022}/core/select/errors.mjs +0 -0
  630. /package/{esm2020 → esm2022}/core/select/events.mjs +0 -0
  631. /package/{esm2020 → esm2022}/core/select/index.mjs +0 -0
  632. /package/{esm2020 → esm2022}/core/selection/constants.mjs +0 -0
  633. /package/{esm2020 → esm2022}/core/selection/index.mjs +0 -0
  634. /package/{esm2020 → esm2022}/core/title/index.mjs +0 -0
  635. /package/{esm2020 → esm2022}/core/title/title-text-ref.mjs +0 -0
  636. /package/{esm2020 → esm2022}/core/utils/data-size/config.mjs +0 -0
  637. /package/{esm2020 → esm2022}/core/utils/data-size/index.mjs +0 -0
  638. /package/{esm2020 → esm2022}/core/utils/data-size/size.mjs +0 -0
  639. /package/{esm2020 → esm2022}/core/utils/index.mjs +0 -0
  640. /package/{esm2020 → esm2022}/core/utils/public-api.mjs +0 -0
  641. /package/{esm2020 → esm2022}/core/utils/utils.mjs +0 -0
  642. /package/{esm2020 → esm2022}/core/validation/index.mjs +0 -0
  643. /package/{esm2020 → esm2022}/core/validation/validation.mjs +0 -0
  644. /package/{esm2020 → esm2022}/datepicker/datepicker-animations.mjs +0 -0
  645. /package/{esm2020 → esm2022}/datepicker/datepicker-errors.mjs +0 -0
  646. /package/{esm2020 → esm2022}/datepicker/index.mjs +0 -0
  647. /package/{esm2020 → esm2022}/datepicker/ptsecurity-mosaic-datepicker.mjs +0 -0
  648. /package/{esm2020 → esm2022}/datepicker/public-api.mjs +0 -0
  649. /package/{esm2020 → esm2022}/divider/index.mjs +0 -0
  650. /package/{esm2020 → esm2022}/divider/ptsecurity-mosaic-divider.mjs +0 -0
  651. /package/{esm2020 → esm2022}/divider/public-api.mjs +0 -0
  652. /package/{esm2020 → esm2022}/dl/index.mjs +0 -0
  653. /package/{esm2020 → esm2022}/dl/ptsecurity-mosaic-dl.mjs +0 -0
  654. /package/{esm2020 → esm2022}/dl/public-api.mjs +0 -0
  655. /package/{esm2020 → esm2022}/dropdown/dropdown-animations.mjs +0 -0
  656. /package/{esm2020 → esm2022}/dropdown/dropdown-errors.mjs +0 -0
  657. /package/{esm2020 → esm2022}/dropdown/dropdown.types.mjs +0 -0
  658. /package/{esm2020 → esm2022}/dropdown/index.mjs +0 -0
  659. /package/{esm2020 → esm2022}/dropdown/ptsecurity-mosaic-dropdown.mjs +0 -0
  660. /package/{esm2020 → esm2022}/dropdown/public-api.mjs +0 -0
  661. /package/{esm2020 → esm2022}/ellipsis-center/index.mjs +0 -0
  662. /package/{esm2020 → esm2022}/ellipsis-center/ptsecurity-mosaic-ellipsis-center.mjs +0 -0
  663. /package/{esm2020 → esm2022}/ellipsis-center/public-api.mjs +0 -0
  664. /package/{esm2020 → esm2022}/file-upload/file-upload.mjs +0 -0
  665. /package/{esm2020 → esm2022}/file-upload/index.mjs +0 -0
  666. /package/{esm2020 → esm2022}/file-upload/ptsecurity-mosaic-file-upload.mjs +0 -0
  667. /package/{esm2020 → esm2022}/file-upload/public-api.mjs +0 -0
  668. /package/{esm2020 → esm2022}/form-field/form-field-control.mjs +0 -0
  669. /package/{esm2020 → esm2022}/form-field/form-field-errors.mjs +0 -0
  670. /package/{esm2020 → esm2022}/form-field/index.mjs +0 -0
  671. /package/{esm2020 → esm2022}/form-field/ptsecurity-mosaic-form-field.mjs +0 -0
  672. /package/{esm2020 → esm2022}/form-field/public-api.mjs +0 -0
  673. /package/{esm2020 → esm2022}/icon/index.mjs +0 -0
  674. /package/{esm2020 → esm2022}/icon/ptsecurity-mosaic-icon.mjs +0 -0
  675. /package/{esm2020 → esm2022}/icon/public-api.mjs +0 -0
  676. /package/{esm2020 → esm2022}/index.mjs +0 -0
  677. /package/{esm2020 → esm2022}/input/index.mjs +0 -0
  678. /package/{esm2020 → esm2022}/input/input-errors.mjs +0 -0
  679. /package/{esm2020 → esm2022}/input/input-value-accessor.mjs +0 -0
  680. /package/{esm2020 → esm2022}/input/ptsecurity-mosaic-input.mjs +0 -0
  681. /package/{esm2020 → esm2022}/input/public-api.mjs +0 -0
  682. /package/{esm2020 → esm2022}/link/index.mjs +0 -0
  683. /package/{esm2020 → esm2022}/link/ptsecurity-mosaic-link.mjs +0 -0
  684. /package/{esm2020 → esm2022}/link/public-api.mjs +0 -0
  685. /package/{esm2020 → esm2022}/list/index.mjs +0 -0
  686. /package/{esm2020 → esm2022}/list/ptsecurity-mosaic-list.mjs +0 -0
  687. /package/{esm2020 → esm2022}/list/public-api.mjs +0 -0
  688. /package/{esm2020 → esm2022}/loader-overlay/index.mjs +0 -0
  689. /package/{esm2020 → esm2022}/loader-overlay/ptsecurity-mosaic-loader-overlay.mjs +0 -0
  690. /package/{esm2020 → esm2022}/loader-overlay/public-api.mjs +0 -0
  691. /package/{esm2020 → esm2022}/markdown/index.mjs +0 -0
  692. /package/{esm2020 → esm2022}/markdown/markdown.values.mjs +0 -0
  693. /package/{esm2020 → esm2022}/markdown/ptsecurity-mosaic-markdown.mjs +0 -0
  694. /package/{esm2020 → esm2022}/markdown/public-api.mjs +0 -0
  695. /package/{esm2020 → esm2022}/modal/index.mjs +0 -0
  696. /package/{esm2020 → esm2022}/modal/modal-ref.class.mjs +0 -0
  697. /package/{esm2020 → esm2022}/modal/modal-util.mjs +0 -0
  698. /package/{esm2020 → esm2022}/modal/modal.type.mjs +0 -0
  699. /package/{esm2020 → esm2022}/modal/ptsecurity-mosaic-modal.mjs +0 -0
  700. /package/{esm2020 → esm2022}/modal/public-api.mjs +0 -0
  701. /package/{esm2020 → esm2022}/navbar/index.mjs +0 -0
  702. /package/{esm2020 → esm2022}/navbar/ptsecurity-mosaic-navbar.mjs +0 -0
  703. /package/{esm2020 → esm2022}/navbar/public-api.mjs +0 -0
  704. /package/{esm2020 → esm2022}/navbar/vertical-navbar.animation.mjs +0 -0
  705. /package/{esm2020 → esm2022}/popover/index.mjs +0 -0
  706. /package/{esm2020 → esm2022}/popover/popover-animations.mjs +0 -0
  707. /package/{esm2020 → esm2022}/popover/ptsecurity-mosaic-popover.mjs +0 -0
  708. /package/{esm2020 → esm2022}/popover/public-api.mjs +0 -0
  709. /package/{esm2020 → esm2022}/progress-bar/index.mjs +0 -0
  710. /package/{esm2020 → esm2022}/progress-bar/ptsecurity-mosaic-progress-bar.mjs +0 -0
  711. /package/{esm2020 → esm2022}/progress-bar/public-api.mjs +0 -0
  712. /package/{esm2020 → esm2022}/progress-spinner/index.mjs +0 -0
  713. /package/{esm2020 → esm2022}/progress-spinner/ptsecurity-mosaic-progress-spinner.mjs +0 -0
  714. /package/{esm2020 → esm2022}/progress-spinner/public-api.mjs +0 -0
  715. /package/{esm2020 → esm2022}/ptsecurity-mosaic.mjs +0 -0
  716. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
  717. /package/{esm2020 → esm2022}/radio/index.mjs +0 -0
  718. /package/{esm2020 → esm2022}/radio/ptsecurity-mosaic-radio.mjs +0 -0
  719. /package/{esm2020 → esm2022}/radio/public-api.mjs +0 -0
  720. /package/{esm2020 → esm2022}/select/index.mjs +0 -0
  721. /package/{esm2020 → esm2022}/select/ptsecurity-mosaic-select.mjs +0 -0
  722. /package/{esm2020 → esm2022}/select/public-api.mjs +0 -0
  723. /package/{esm2020 → esm2022}/sidebar/index.mjs +0 -0
  724. /package/{esm2020 → esm2022}/sidebar/ptsecurity-mosaic-sidebar.mjs +0 -0
  725. /package/{esm2020 → esm2022}/sidebar/public-api.mjs +0 -0
  726. /package/{esm2020 → esm2022}/sidebar/sidebar-animations.mjs +0 -0
  727. /package/{esm2020 → esm2022}/sidepanel/index.mjs +0 -0
  728. /package/{esm2020 → esm2022}/sidepanel/ptsecurity-mosaic-sidepanel.mjs +0 -0
  729. /package/{esm2020 → esm2022}/sidepanel/public-api.mjs +0 -0
  730. /package/{esm2020 → esm2022}/sidepanel/sidepanel-animations.mjs +0 -0
  731. /package/{esm2020 → esm2022}/sidepanel/sidepanel-config.mjs +0 -0
  732. /package/{esm2020 → esm2022}/sidepanel/sidepanel-ref.mjs +0 -0
  733. /package/{esm2020 → esm2022}/splitter/index.mjs +0 -0
  734. /package/{esm2020 → esm2022}/splitter/ptsecurity-mosaic-splitter.mjs +0 -0
  735. /package/{esm2020 → esm2022}/splitter/public-api.mjs +0 -0
  736. /package/{esm2020 → esm2022}/table/index.mjs +0 -0
  737. /package/{esm2020 → esm2022}/table/ptsecurity-mosaic-table.mjs +0 -0
  738. /package/{esm2020 → esm2022}/table/public-api.mjs +0 -0
  739. /package/{esm2020 → esm2022}/tabs/index.mjs +0 -0
  740. /package/{esm2020 → esm2022}/tabs/ptsecurity-mosaic-tabs.mjs +0 -0
  741. /package/{esm2020 → esm2022}/tabs/public-api.mjs +0 -0
  742. /package/{esm2020 → esm2022}/tabs/tab-nav-bar/index.mjs +0 -0
  743. /package/{esm2020 → esm2022}/tabs/tabs-animations.mjs +0 -0
  744. /package/{esm2020 → esm2022}/tags/index.mjs +0 -0
  745. /package/{esm2020 → esm2022}/tags/ptsecurity-mosaic-tags.mjs +0 -0
  746. /package/{esm2020 → esm2022}/tags/public-api.mjs +0 -0
  747. /package/{esm2020 → esm2022}/tags/tag-text-control.mjs +0 -0
  748. /package/{esm2020 → esm2022}/textarea/index.mjs +0 -0
  749. /package/{esm2020 → esm2022}/textarea/ptsecurity-mosaic-textarea.mjs +0 -0
  750. /package/{esm2020 → esm2022}/textarea/public-api.mjs +0 -0
  751. /package/{esm2020 → esm2022}/timepicker/index.mjs +0 -0
  752. /package/{esm2020 → esm2022}/timepicker/ptsecurity-mosaic-timepicker.mjs +0 -0
  753. /package/{esm2020 → esm2022}/timepicker/public-api.mjs +0 -0
  754. /package/{esm2020 → esm2022}/timepicker/timepicker.constants.mjs +0 -0
  755. /package/{esm2020 → esm2022}/timezone/index.mjs +0 -0
  756. /package/{esm2020 → esm2022}/timezone/ptsecurity-mosaic-timezone.mjs +0 -0
  757. /package/{esm2020 → esm2022}/timezone/public-api.mjs +0 -0
  758. /package/{esm2020 → esm2022}/timezone/timezone.models.mjs +0 -0
  759. /package/{esm2020 → esm2022}/timezone/timezone.utils.mjs +0 -0
  760. /package/{esm2020 → esm2022}/title/index.mjs +0 -0
  761. /package/{esm2020 → esm2022}/title/ptsecurity-mosaic-title.mjs +0 -0
  762. /package/{esm2020 → esm2022}/title/public-api.mjs +0 -0
  763. /package/{esm2020 → esm2022}/toast/index.mjs +0 -0
  764. /package/{esm2020 → esm2022}/toast/ptsecurity-mosaic-toast.mjs +0 -0
  765. /package/{esm2020 → esm2022}/toast/public-api.mjs +0 -0
  766. /package/{esm2020 → esm2022}/toast/toast-animations.mjs +0 -0
  767. /package/{esm2020 → esm2022}/toast/toast.type.mjs +0 -0
  768. /package/{esm2020 → esm2022}/toggle/index.mjs +0 -0
  769. /package/{esm2020 → esm2022}/toggle/ptsecurity-mosaic-toggle.mjs +0 -0
  770. /package/{esm2020 → esm2022}/toggle/public-api.mjs +0 -0
  771. /package/{esm2020 → esm2022}/tooltip/index.mjs +0 -0
  772. /package/{esm2020 → esm2022}/tooltip/ptsecurity-mosaic-tooltip.mjs +0 -0
  773. /package/{esm2020 → esm2022}/tooltip/public-api.mjs +0 -0
  774. /package/{esm2020 → esm2022}/tooltip/tooltip.animations.mjs +0 -0
  775. /package/{esm2020 → esm2022}/tree/control/base-tree-control.mjs +0 -0
  776. /package/{esm2020 → esm2022}/tree/control/flat-tree-control.mjs +0 -0
  777. /package/{esm2020 → esm2022}/tree/control/nested-tree-control.mjs +0 -0
  778. /package/{esm2020 → esm2022}/tree/control/tree-control.mjs +0 -0
  779. /package/{esm2020 → esm2022}/tree/data-source/nested-data-source.mjs +0 -0
  780. /package/{esm2020 → esm2022}/tree/index.mjs +0 -0
  781. /package/{esm2020 → esm2022}/tree/ptsecurity-mosaic-tree.mjs +0 -0
  782. /package/{esm2020 → esm2022}/tree/public-api.mjs +0 -0
  783. /package/{esm2020 → esm2022}/tree/tree-errors.mjs +0 -0
  784. /package/{esm2020 → esm2022}/tree-select/index.mjs +0 -0
  785. /package/{esm2020 → esm2022}/tree-select/ptsecurity-mosaic-tree-select.mjs +0 -0
  786. /package/{esm2020 → esm2022}/tree-select/public-api.mjs +0 -0
  787. /package/{fesm2015 → fesm2022}/ptsecurity-mosaic.mjs +0 -0
  788. /package/{fesm2015 → fesm2022}/ptsecurity-mosaic.mjs.map +0 -0
@@ -1,510 +0,0 @@
1
- import { Overlay, OverlayRef } from '@angular/cdk/overlay';
2
- import { DOCUMENT } from '@angular/common';
3
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, ElementRef, EventEmitter, Inject, Injector, Input, Output, QueryList, Renderer2, TemplateRef, Type, ViewChild, ViewChildren, ViewContainerRef, ViewEncapsulation } from '@angular/core';
4
- import { ESCAPE, ENTER } from '@ptsecurity/cdk/keycodes';
5
- import { ThemePalette } from '@ptsecurity/mosaic/core';
6
- import { McModalControlService } from './modal-control.service';
7
- import { McModalRef } from './modal-ref.class';
8
- import { modalUtilObject as ModalUtil } from './modal-util';
9
- import { ModalSize } from './modal.type';
10
- import * as i0 from "@angular/core";
11
- import * as i1 from "@angular/cdk/overlay";
12
- import * as i2 from "./modal-control.service";
13
- import * as i3 from "@angular/common";
14
- import * as i4 from "@angular/cdk/a11y";
15
- import * as i5 from "@ptsecurity/mosaic/button";
16
- import * as i6 from "@ptsecurity/mosaic/icon";
17
- import * as i7 from "./modal.directive";
18
- import * as i8 from "./css-unit.pipe";
19
- // Duration when perform animations (ms)
20
- export const MODAL_ANIMATE_DURATION = 200;
21
- export class McModalComponent extends McModalRef {
22
- constructor(overlay, renderer, cfr, elementRef, viewContainer, modalControl, changeDetector, document) {
23
- super();
24
- this.overlay = overlay;
25
- this.renderer = renderer;
26
- this.cfr = cfr;
27
- this.elementRef = elementRef;
28
- this.viewContainer = viewContainer;
29
- this.modalControl = modalControl;
30
- this.changeDetector = changeDetector;
31
- this.document = document;
32
- this.themePalette = ThemePalette;
33
- this.mcModalType = 'default';
34
- this._mcVisible = false;
35
- this.mcVisibleChange = new EventEmitter();
36
- this.mcZIndex = 1000;
37
- this.mcSize = ModalSize.Medium;
38
- this.mcCloseByESC = true;
39
- this._mcClosable = true;
40
- this._mcMask = true;
41
- this._mcMaskClosable = false;
42
- // Trigger when modal open(visible) after animations
43
- this.mcAfterOpen = new EventEmitter();
44
- // Trigger when modal leave-animation over
45
- this.mcAfterClose = new EventEmitter();
46
- this.mcOkType = 'primary';
47
- this.mcRestoreFocus = true;
48
- this._mcOkLoading = false;
49
- this.mcOnOk = new EventEmitter();
50
- this._mcCancelLoading = false;
51
- this.mcOnCancel = new EventEmitter();
52
- this.isTopOverflow = false;
53
- this.isBottomOverflow = false;
54
- // The origin point that animation based on
55
- this.transformOrigin = '0px 0px 0px';
56
- this.mcGetContainer = () => this.overlay.create();
57
- }
58
- get mcVisible() { return this._mcVisible; }
59
- set mcVisible(value) { this._mcVisible = value; }
60
- get mcClosable() { return this._mcClosable; }
61
- set mcClosable(value) { this._mcClosable = value; }
62
- get mcMask() { return this._mcMask; }
63
- set mcMask(value) { this._mcMask = value; }
64
- get mcMaskClosable() { return this._mcMaskClosable; }
65
- set mcMaskClosable(value) { this._mcMaskClosable = value; }
66
- get mcOkLoading() { return this._mcOkLoading; }
67
- set mcOkLoading(value) { this._mcOkLoading = value; }
68
- get mcCancelLoading() { return this._mcCancelLoading; }
69
- set mcCancelLoading(value) { this._mcCancelLoading = value; }
70
- // Observable alias for mcAfterOpen
71
- get afterOpen() {
72
- return this.mcAfterOpen.asObservable();
73
- }
74
- // Observable alias for mcAfterClose
75
- get afterClose() {
76
- return this.mcAfterClose.asObservable();
77
- }
78
- get okText() {
79
- return this.mcOkText;
80
- }
81
- get cancelText() {
82
- return this.mcCancelText;
83
- }
84
- // Indicate whether this dialog should hidden
85
- get hidden() {
86
- return !this.mcVisible && !this.animationState;
87
- }
88
- ngOnInit() {
89
- // Create component along without View
90
- if (this.isComponent(this.mcContent)) {
91
- this.createDynamicComponent(this.mcContent);
92
- }
93
- // Setup default button options
94
- if (this.isModalButtons(this.mcFooter)) {
95
- this.mcFooter = this.formatModalButtons(this.mcFooter);
96
- }
97
- if (this.isComponent(this.mcComponent)) {
98
- this.createDynamicComponent(this.mcComponent);
99
- }
100
- // Place the modal dom to elsewhere
101
- this.container = typeof this.mcGetContainer === 'function' ? this.mcGetContainer() : this.mcGetContainer;
102
- if (this.container instanceof HTMLElement) {
103
- this.container.appendChild(this.elementRef.nativeElement);
104
- }
105
- else if (this.container instanceof OverlayRef) {
106
- // NOTE: only attach the dom to overlay, the view container is not changed actually
107
- this.container.overlayElement.appendChild(this.elementRef.nativeElement);
108
- }
109
- // Register modal when afterOpen/afterClose is stable
110
- this.modalControl.registerModal(this);
111
- }
112
- // [NOTE] NOT available when using by service!
113
- // Because ngOnChanges never be called when using by service,
114
- // here we can't support "mcContent"(Component) etc. as inputs that initialized dynamically.
115
- // BUT: User also can change "mcContent" dynamically to trigger UI changes
116
- // (provided you don't use Component that needs initializations)
117
- ngOnChanges(changes) {
118
- if (changes.mcVisible) {
119
- // Do not trigger animation while initializing
120
- this.handleVisibleStateChange(this.mcVisible, !changes.mcVisible.firstChange);
121
- }
122
- }
123
- ngAfterViewInit() {
124
- // If using Component, it is the time to attach View while bodyContainer is ready
125
- if (this.contentComponentRef) {
126
- this.bodyContainer.insert(this.contentComponentRef.hostView);
127
- }
128
- this.getElement().getElementsByTagName('button')[0]?.focus();
129
- for (const autoFocusedButton of this.autoFocusedButtons.toArray()) {
130
- if (autoFocusedButton.nativeElement.autofocus) {
131
- autoFocusedButton.nativeElement.focus();
132
- break;
133
- }
134
- }
135
- this.checkOverflow();
136
- }
137
- ngOnDestroy() {
138
- if (this.container instanceof OverlayRef) {
139
- this.container.dispose();
140
- }
141
- }
142
- checkOverflow() {
143
- const nativeElement = this.modalBody?.nativeElement;
144
- if (!nativeElement) {
145
- return;
146
- }
147
- const scrollTop = nativeElement.scrollTop;
148
- const offsetHeight = nativeElement.offsetHeight;
149
- const scrollHeight = nativeElement.scrollHeight;
150
- this.isTopOverflow = scrollTop > 0;
151
- this.isBottomOverflow = scrollTop + offsetHeight < scrollHeight;
152
- }
153
- open() {
154
- this.focusedElementBeforeOpen = this.document.activeElement;
155
- this.changeVisibleFromInside(true);
156
- }
157
- close(result) {
158
- if (this.mcRestoreFocus) {
159
- this.focusedElementBeforeOpen?.focus();
160
- }
161
- this.changeVisibleFromInside(false, result);
162
- this.focusedElementBeforeOpen = null;
163
- }
164
- // Destroy equals Close
165
- destroy(result) {
166
- this.close(result);
167
- }
168
- markForCheck() {
169
- this.changeDetector.markForCheck();
170
- }
171
- triggerOk() {
172
- this.onClickOkCancel('ok');
173
- }
174
- triggerCancel() {
175
- this.onClickOkCancel('cancel');
176
- }
177
- getInstance() {
178
- return this;
179
- }
180
- getContentComponentRef() {
181
- return this.contentComponentRef;
182
- }
183
- getContentComponent() {
184
- return this.contentComponentRef && this.contentComponentRef.instance;
185
- }
186
- getElement() {
187
- return this.elementRef && this.elementRef.nativeElement;
188
- }
189
- getMcFooter() {
190
- return this.getElement().getElementsByClassName('mc-modal-footer').item(0);
191
- }
192
- onClickMask($event) {
193
- if (this.mcMask &&
194
- this.mcMaskClosable &&
195
- $event.target.classList.contains('mc-modal-wrap') &&
196
- this.mcVisible) {
197
- this.onClickOkCancel('cancel');
198
- }
199
- }
200
- // tslint:disable-next-line: no-reserved-keywords
201
- isModalType(type) {
202
- return this.mcModalType === type;
203
- }
204
- onKeyDown(event) {
205
- // tslint:disable-next-line:deprecation .key isn't supported in Edge
206
- if (event.keyCode === ESCAPE && this.container && (this.container instanceof OverlayRef)) {
207
- this.close();
208
- event.preventDefault();
209
- }
210
- // tslint:disable-next-line:deprecation .key isn't supported in Edge
211
- if (event.ctrlKey && event.keyCode === ENTER) {
212
- if (this.mcModalType === 'confirm') {
213
- this.triggerOk();
214
- }
215
- this.getElement().querySelector('[mc-modal-main-action]')?.click();
216
- event.preventDefault();
217
- }
218
- }
219
- // AoT
220
- onClickCloseBtn() {
221
- if (this.mcVisible) {
222
- this.onClickOkCancel('cancel');
223
- }
224
- }
225
- // AoT
226
- // tslint:disable-next-line: no-reserved-keywords
227
- onClickOkCancel(type) {
228
- const trigger = { ok: this.mcOnOk, cancel: this.mcOnCancel }[type];
229
- const loadingKey = { ok: 'mcOkLoading', cancel: 'mcCancelLoading' }[type];
230
- if (trigger instanceof EventEmitter) {
231
- trigger.emit(this.getContentComponent());
232
- }
233
- else if (typeof trigger === 'function') {
234
- const result = trigger(this.getContentComponent());
235
- // Users can return "false" to prevent closing by default
236
- const caseClose = (doClose) => (doClose !== false) && this.close(doClose);
237
- if (isPromise(result)) {
238
- this[loadingKey] = true;
239
- const handleThen = (doClose) => {
240
- this[loadingKey] = false;
241
- caseClose(doClose);
242
- };
243
- result.then(handleThen).catch(handleThen);
244
- }
245
- else {
246
- caseClose(result);
247
- }
248
- }
249
- }
250
- // AoT
251
- isNonEmptyString(value) {
252
- return typeof value === 'string' && value !== '';
253
- }
254
- // AoT
255
- isTemplateRef(value) {
256
- return value instanceof TemplateRef;
257
- }
258
- // AoT
259
- isComponent(value) {
260
- return value instanceof Type;
261
- }
262
- // AoT
263
- isModalButtons(value) {
264
- return Array.isArray(value) && value.length > 0;
265
- }
266
- // Lookup a button's property, if the prop is a function, call & then return the result, otherwise, return itself.
267
- // AoT
268
- getButtonCallableProp(options, prop) {
269
- const value = options[prop];
270
- const args = [];
271
- if (this.contentComponentRef) {
272
- args.push(this.contentComponentRef.instance);
273
- }
274
- return typeof value === 'function' ? value.apply(options, args) : value;
275
- }
276
- // On mcFooter's modal button click
277
- // AoT
278
- onButtonClick(button) {
279
- // Call onClick directly
280
- // tslint:disable-next-line:no-inferred-empty-object-type rule seems to be broken
281
- const result = this.getButtonCallableProp(button, 'onClick');
282
- if (isPromise(result)) {
283
- button.loading = true;
284
- result.then(() => button.loading = false).catch(() => button.loading = false);
285
- }
286
- }
287
- // Do rest things when visible state changed
288
- handleVisibleStateChange(visible, animation = true, closeResult) {
289
- // Hide scrollbar at the first time when shown up
290
- if (visible) {
291
- this.changeBodyOverflow(1);
292
- }
293
- return Promise
294
- .resolve(animation && this.animateTo(visible))
295
- // Emit open/close event after animations over
296
- .then(() => {
297
- if (visible) {
298
- this.mcAfterOpen.emit();
299
- }
300
- else {
301
- this.mcAfterClose.emit(closeResult);
302
- // Show/hide scrollbar when animation is over
303
- this.changeBodyOverflow();
304
- }
305
- });
306
- }
307
- // Change mcVisible from inside
308
- changeVisibleFromInside(visible, closeResult) {
309
- if (this.mcVisible !== visible) {
310
- // Change mcVisible value immediately
311
- this.mcVisible = visible;
312
- this.mcVisibleChange.emit(visible);
313
- return this.handleVisibleStateChange(visible, true, closeResult);
314
- }
315
- return Promise.resolve();
316
- }
317
- changeAnimationState(state) {
318
- this.animationState = state;
319
- if (state) {
320
- this.maskAnimationClassMap = {
321
- [`fade-${state}`]: true,
322
- [`fade-${state}-active`]: true
323
- };
324
- this.modalAnimationClassMap = {
325
- [`zoom-${state}`]: true,
326
- [`zoom-${state}-active`]: true
327
- };
328
- }
329
- else {
330
- // @ts-ignore
331
- this.maskAnimationClassMap = this.modalAnimationClassMap = null;
332
- }
333
- if (this.contentComponentRef) {
334
- this.contentComponentRef.changeDetectorRef.markForCheck();
335
- }
336
- else {
337
- this.changeDetector.markForCheck();
338
- }
339
- }
340
- animateTo(isVisible) {
341
- // Figure out the lastest click position when shows up
342
- if (isVisible) {
343
- // [NOTE] Using timeout due to the document.click event is fired later than visible change,
344
- // so if not postponed to next event-loop, we can't get the lastest click position
345
- window.setTimeout(() => this.updateTransformOrigin());
346
- }
347
- this.changeAnimationState(isVisible ? 'enter' : 'leave');
348
- // Return when animation is over
349
- return new Promise((resolve) => {
350
- return window.setTimeout(() => {
351
- this.changeAnimationState(null);
352
- resolve(null);
353
- }, MODAL_ANIMATE_DURATION);
354
- });
355
- }
356
- formatModalButtons(buttons) {
357
- return buttons.map((button) => {
358
- return {
359
- ...{
360
- type: 'default',
361
- size: 'default',
362
- autoLoading: true,
363
- show: true,
364
- loading: false,
365
- disabled: false
366
- },
367
- ...button
368
- };
369
- });
370
- }
371
- /**
372
- * Create a component dynamically but not attach to any View
373
- * (this action will be executed when bodyContainer is ready)
374
- * @param component Component class
375
- */
376
- createDynamicComponent(component) {
377
- const factory = this.cfr.resolveComponentFactory(component);
378
- const childInjector = Injector.create({
379
- providers: [{ provide: McModalRef, useValue: this }],
380
- parent: this.viewContainer.injector
381
- });
382
- this.contentComponentRef = factory.create(childInjector);
383
- if (this.mcComponentParams) {
384
- // @ts-ignore
385
- Object.assign(this.contentComponentRef.instance, this.mcComponentParams);
386
- }
387
- // Do the first change detection immediately
388
- // (or we do detection at ngAfterViewInit, multi-changes error will be thrown)
389
- this.contentComponentRef.changeDetectorRef.detectChanges();
390
- }
391
- // Update transform-origin to the last click position on document
392
- updateTransformOrigin() {
393
- const modalElement = this.modalContainer.nativeElement;
394
- const lastPosition = ModalUtil.getLastClickPosition();
395
- if (lastPosition) {
396
- this.transformOrigin = `${lastPosition.x - modalElement.offsetLeft}px ${lastPosition.y - modalElement.offsetTop}px 0px`;
397
- }
398
- }
399
- /**
400
- * Take care of the body's overflow to decide the existense of scrollbar
401
- * @param plusNum The number that the openModals.length will increase soon
402
- */
403
- changeBodyOverflow(plusNum = 0) {
404
- const openModals = this.modalControl.openModals;
405
- if (openModals.length + plusNum > 0) {
406
- this.renderer.setStyle(this.document.body, 'overflow', 'hidden');
407
- }
408
- else {
409
- this.renderer.removeStyle(this.document.body, 'overflow');
410
- }
411
- }
412
- }
413
- /** @nocollapse */ McModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: McModalComponent, deps: [{ token: i1.Overlay }, { token: i0.Renderer2 }, { token: i0.ComponentFactoryResolver }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i2.McModalControlService }, { token: i0.ChangeDetectorRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Component });
414
- /** @nocollapse */ McModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: McModalComponent, selector: "mc-modal", inputs: { mcModalType: "mcModalType", mcComponent: "mcComponent", mcContent: "mcContent", mcComponentParams: "mcComponentParams", mcFooter: "mcFooter", mcVisible: "mcVisible", mcZIndex: "mcZIndex", mcWidth: "mcWidth", mcSize: "mcSize", mcWrapClassName: "mcWrapClassName", mcClassName: "mcClassName", mcStyle: "mcStyle", mcTitle: "mcTitle", mcCloseByESC: "mcCloseByESC", mcClosable: "mcClosable", mcMask: "mcMask", mcMaskClosable: "mcMaskClosable", mcMaskStyle: "mcMaskStyle", mcBodyStyle: "mcBodyStyle", mcOkText: "mcOkText", mcOkType: "mcOkType", mcRestoreFocus: "mcRestoreFocus", mcOkLoading: "mcOkLoading", mcOnOk: "mcOnOk", mcCancelText: "mcCancelText", mcCancelLoading: "mcCancelLoading", mcOnCancel: "mcOnCancel", mcGetContainer: "mcGetContainer" }, outputs: { mcVisibleChange: "mcVisibleChange", mcAfterOpen: "mcAfterOpen", mcAfterClose: "mcAfterClose", mcOnOk: "mcOnOk", mcOnCancel: "mcOnCancel" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, viewQueries: [{ propertyName: "modalContainer", first: true, predicate: ["modalContainer"], descendants: true, static: true }, { propertyName: "bodyContainer", first: true, predicate: ["bodyContainer"], descendants: true, read: ViewContainerRef }, { propertyName: "modalBody", first: true, predicate: ["modalBody"], descendants: true }, { propertyName: "autoFocusedButtons", predicate: ["autoFocusedButton"], descendants: true, read: ElementRef }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content></ng-content>\n</ng-template>\n\n<div>\n <div *ngIf=\"mcMask\"\n class=\"mc-modal-mask\"\n [ngClass]=\"maskAnimationClassMap\"\n [class.mc-modal-mask-hidden]=\"hidden\"\n [ngStyle]=\"mcMaskStyle\"\n [style.zIndex]=\"mcZIndex\"\n ></div>\n <div (mousedown)=\"onClickMask($event)\"\n class=\"mc-modal-wrap {{ mcWrapClassName }}\"\n [style.zIndex]=\"mcZIndex\"\n [style.display]=\"hidden ? 'none' : ''\"\n tabindex=\"-1\">\n\n <div #modalContainer\n class=\"mc-modal {{ mcClassName }} mc-modal_{{ mcSize }}\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"mcStyle\"\n [style.width]=\"mcWidth | toCssUnit\"\n [style.transform-origin]=\"transformOrigin\">\n\n <div class=\"mc-modal-content\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"mcRestoreFocus\">\n <button *ngIf=\"mcClosable\"\n mc-button\n (click)=\"onClickCloseBtn()\"\n class=\"mc-modal-close mc-button_transparent\">\n <i mc-icon=\"mc-close-L_16\" class=\"mc-icon mc-icon_light\" [color]=\"themePalette.Secondary\"></i>\n </button>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isModalType('default')\"\n [ngTemplateOutlet]=\"tplContentDefault\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('confirm')\"\n [ngTemplateOutlet]=\"tplContentConfirm\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('custom')\"\n [ngTemplateOutlet]=\"tplContentCustom\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer></ng-container>\n</ng-template>\n\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n <div *ngIf=\"mcTitle\" class=\"mc-modal-header\" [class.mc-modal-body_top-overflow]=\"isTopOverflow\">\n <div class=\"mc-modal-title\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcTitle)\" [ngTemplateOutlet]=\"$any(mcTitle)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcTitle)\">\n <div [innerHTML]=\"mcTitle\"></div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div class=\"mc-modal-body mc-scrollbar\" #modalBody [ngStyle]=\"mcBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\" [ngTemplateOutlet]=\"$any(mcContent)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div *ngIf=\"mcFooter || mcOkText || mcCancelText\" class=\"mc-modal-footer\" [class.mc-modal-body_bottom-overflow]=\"isBottomOverflow\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcFooter)\" [ngTemplateOutlet]=\"$any(mcFooter)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcFooter)\">\n <div [innerHTML]=\"mcFooter\"></div>\n </ng-container>\n <ng-container *ngSwitchCase=\"isModalButtons(mcFooter)\">\n <ng-container *ngFor=\"let button of $any(mcFooter)\">\n <button\n mc-button\n #autoFocusedButton\n [attr.autofocus]=\"button.autoFocus\"\n [attr.mc-modal-main-action]=\"button.mcModalMainAction\"\n *ngIf=\"getButtonCallableProp(button, 'show')\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n [class.mc-progress]=\"getButtonCallableProp(button, 'loading')\"\n (click)=\"onButtonClick(button)\"\n [color]=\"button.type\">\n {{ button.label }}\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button\n #autoFocusedButton\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n mc-button\n [color]=\"themePalette.Primary\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n <button *ngIf=\"mcCancelText\" mc-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"mc-modal-body\" [ngStyle]=\"mcBodyStyle\">\n <div class=\"mc-confirm-body-wrapper\">\n <div class=\"mc-confirm-body\">\n <div class=\"mc-confirm-content\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\"\n [ngTemplateOutlet]=\"$any(mcContent)\">\n </ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div> <!-- /.mc-confirm-body-wrapper -->\n </div>\n <div class=\"mc-confirm-btns\" *ngIf=\"mcOkText || mcCancelText\">\n <button\n mc-button\n #autoFocusedButton\n [color]=\"mcOkType\"\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n\n <button mc-button [color]=\"themePalette.Secondary\" *ngIf=\"mcCancelText\" (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </div>\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".mc-confirm .mc-modal-header,.mc-confirm .mc-modal-close{display:none}.mc-confirm .mc-modal-body{padding:var(--mc-modal-confirm-size-padding, 24px)}.mc-confirm-body-wrapper{zoom:1}.mc-confirm-body-wrapper:before,.mc-confirm-body-wrapper:after{content:\"\";display:table}.mc-confirm-body-wrapper:after{clear:both}.mc-confirm-body .mc-confirm-title{display:block;overflow:auto}.mc-confirm .mc-confirm-btns{border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);text-align:right}.mc-confirm .mc-confirm-btns button+button,.mc-confirm .mc-confirm-btns button:only-child{margin:16px}.mc-modal{box-sizing:border-box;position:relative;top:var(--mc-modal-size-top, 48px);width:auto;margin:0 auto;list-style:none}.mc-modal.zoom-enter,.mc-modal.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.mc-modal.mc-modal_small{width:var(--mc-modal-size-small, 400px)}.mc-modal.mc-modal_medium{width:var(--mc-modal-size-medium, 640px)}.mc-modal.mc-modal_large{width:var(--mc-modal-size-large, 960px)}.mc-modal .mc-modal-close{position:absolute;z-index:10;top:0;right:0;width:var(--mc-modal-size-close-width, 56px);height:var(--mc-modal-size-close-width, 56px)}.mc-modal-wrap{position:fixed;z-index:1000;inset:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.mc-modal-title{margin:0}.mc-modal-content{position:relative;border-radius:var(--mc-modal-size-border-radius, 4px);background-clip:padding-box;background-color:#fff}.mc-modal-header{display:flex;align-items:center;height:var(--mc-modal-header-size-height, 56px);border-radius:var(--mc-modal-header-size-border-radius, 4px 4px 0 0);padding:var(--mc-modal-header-size-padding, 0 16px)}.mc-modal-body{display:block;overflow-y:auto;max-height:var(--mc-modal-body-size-max-height, calc(100vh - 260px));padding:var(--mc-modal-body-size-padding, 16px 24px 24px);word-wrap:break-word}.mc-modal-footer{display:flex;align-items:center;justify-content:flex-end;height:var(--mc-modal-footer-size-height, 64px);border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);padding:var(--mc-modal-footer-size-padding, 0 16px)}.mc-modal-footer button+button{margin-left:16px;margin-bottom:0}.mc-modal-mask{position:fixed;z-index:1000;inset:0;height:100%}.mc-modal-mask.mc-modal-mask-hidden{display:none}.mc-modal-open{overflow:hidden}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "component", type: i5.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i5.McButtonCssStyler, selector: "[mc-button]" }, { kind: "component", type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i6.McIconCSSStyler, selector: "[mc-icon]" }, { kind: "directive", type: i7.McModalMainAction, selector: "[mc-modal-main-action]" }, { kind: "pipe", type: i8.CssUnitPipe, name: "toCssUnit" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
415
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: McModalComponent, decorators: [{
416
- type: Component,
417
- args: [{ selector: 'mc-modal', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, host: {
418
- '(keydown)': 'onKeyDown($event)'
419
- }, template: "<!-- Compatible: the <ng-content> can appear only once -->\n<ng-template #tplOriginContent>\n <ng-content></ng-content>\n</ng-template>\n\n<div>\n <div *ngIf=\"mcMask\"\n class=\"mc-modal-mask\"\n [ngClass]=\"maskAnimationClassMap\"\n [class.mc-modal-mask-hidden]=\"hidden\"\n [ngStyle]=\"mcMaskStyle\"\n [style.zIndex]=\"mcZIndex\"\n ></div>\n <div (mousedown)=\"onClickMask($event)\"\n class=\"mc-modal-wrap {{ mcWrapClassName }}\"\n [style.zIndex]=\"mcZIndex\"\n [style.display]=\"hidden ? 'none' : ''\"\n tabindex=\"-1\">\n\n <div #modalContainer\n class=\"mc-modal {{ mcClassName }} mc-modal_{{ mcSize }}\"\n [ngClass]=\"modalAnimationClassMap\"\n [ngStyle]=\"mcStyle\"\n [style.width]=\"mcWidth | toCssUnit\"\n [style.transform-origin]=\"transformOrigin\">\n\n <div class=\"mc-modal-content\" cdkTrapFocus [cdkTrapFocusAutoCapture]=\"mcRestoreFocus\">\n <button *ngIf=\"mcClosable\"\n mc-button\n (click)=\"onClickCloseBtn()\"\n class=\"mc-modal-close mc-button_transparent\">\n <i mc-icon=\"mc-close-L_16\" class=\"mc-icon mc-icon_light\" [color]=\"themePalette.Secondary\"></i>\n </button>\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isModalType('default')\"\n [ngTemplateOutlet]=\"tplContentDefault\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('confirm')\"\n [ngTemplateOutlet]=\"tplContentConfirm\"></ng-container>\n <ng-container *ngSwitchCase=\"isModalType('custom')\"\n [ngTemplateOutlet]=\"tplContentCustom\"></ng-container>\n </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #tplContentCustom>\n <ng-container #bodyContainer></ng-container>\n</ng-template>\n\n\n<!-- [Predefined] Default Modal Content -->\n<ng-template #tplContentDefault>\n <div *ngIf=\"mcTitle\" class=\"mc-modal-header\" [class.mc-modal-body_top-overflow]=\"isTopOverflow\">\n <div class=\"mc-modal-title\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcTitle)\" [ngTemplateOutlet]=\"$any(mcTitle)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcTitle)\">\n <div [innerHTML]=\"mcTitle\"></div>\n </ng-container>\n </ng-container>\n </div>\n </div>\n <div class=\"mc-modal-body mc-scrollbar\" #modalBody [ngStyle]=\"mcBodyStyle\" (scroll)=\"checkOverflow()\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\" [ngTemplateOutlet]=\"$any(mcContent)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n <div *ngIf=\"mcFooter || mcOkText || mcCancelText\" class=\"mc-modal-footer\" [class.mc-modal-body_bottom-overflow]=\"isBottomOverflow\">\n <ng-container [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcFooter)\" [ngTemplateOutlet]=\"$any(mcFooter)\"></ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcFooter)\">\n <div [innerHTML]=\"mcFooter\"></div>\n </ng-container>\n <ng-container *ngSwitchCase=\"isModalButtons(mcFooter)\">\n <ng-container *ngFor=\"let button of $any(mcFooter)\">\n <button\n mc-button\n #autoFocusedButton\n [attr.autofocus]=\"button.autoFocus\"\n [attr.mc-modal-main-action]=\"button.mcModalMainAction\"\n *ngIf=\"getButtonCallableProp(button, 'show')\"\n [disabled]=\"getButtonCallableProp(button, 'disabled')\"\n [class.mc-progress]=\"getButtonCallableProp(button, 'loading')\"\n (click)=\"onButtonClick(button)\"\n [color]=\"button.type\">\n {{ button.label }}\n </button>\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <button\n #autoFocusedButton\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n mc-button\n [color]=\"themePalette.Primary\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n <button *ngIf=\"mcCancelText\" mc-button (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n<!-- /[Predefined] Default Modal Content -->\n\n<!-- [Predefined] Confirm Modal Content -->\n<ng-template #tplContentConfirm>\n <div class=\"mc-modal-body\" [ngStyle]=\"mcBodyStyle\">\n <div class=\"mc-confirm-body-wrapper\">\n <div class=\"mc-confirm-body\">\n <div class=\"mc-confirm-content\">\n <ng-container #bodyContainer>\n <ng-container *ngIf=\"!isComponent(mcContent)\" [ngSwitch]=\"true\">\n <ng-container *ngSwitchCase=\"isTemplateRef(mcContent)\"\n [ngTemplateOutlet]=\"$any(mcContent)\">\n </ng-container>\n <ng-container *ngSwitchCase=\"isNonEmptyString(mcContent)\">\n <div [innerHTML]=\"mcContent\"></div>\n </ng-container>\n <ng-container *ngSwitchDefault [ngTemplateOutlet]=\"tplOriginContent\"></ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n </div> <!-- /.mc-confirm-body-wrapper -->\n </div>\n <div class=\"mc-confirm-btns\" *ngIf=\"mcOkText || mcCancelText\">\n <button\n mc-button\n #autoFocusedButton\n [color]=\"mcOkType\"\n [attr.autofocus]=\"true\"\n *ngIf=\"mcOkText\"\n (click)=\"onClickOkCancel('ok')\">\n\n {{ okText }}\n </button>\n\n <button mc-button [color]=\"themePalette.Secondary\" *ngIf=\"mcCancelText\" (click)=\"onClickOkCancel('cancel')\">\n {{ cancelText }}\n </button>\n </div>\n</ng-template>\n<!-- /[Predefined] Confirm Modal Content -->\n", styles: [".mc-confirm .mc-modal-header,.mc-confirm .mc-modal-close{display:none}.mc-confirm .mc-modal-body{padding:var(--mc-modal-confirm-size-padding, 24px)}.mc-confirm-body-wrapper{zoom:1}.mc-confirm-body-wrapper:before,.mc-confirm-body-wrapper:after{content:\"\";display:table}.mc-confirm-body-wrapper:after{clear:both}.mc-confirm-body .mc-confirm-title{display:block;overflow:auto}.mc-confirm .mc-confirm-btns{border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);text-align:right}.mc-confirm .mc-confirm-btns button+button,.mc-confirm .mc-confirm-btns button:only-child{margin:16px}.mc-modal{box-sizing:border-box;position:relative;top:var(--mc-modal-size-top, 48px);width:auto;margin:0 auto;list-style:none}.mc-modal.zoom-enter,.mc-modal.zoom-appear{animation-duration:.3s;transform:none;opacity:0}.mc-modal.mc-modal_small{width:var(--mc-modal-size-small, 400px)}.mc-modal.mc-modal_medium{width:var(--mc-modal-size-medium, 640px)}.mc-modal.mc-modal_large{width:var(--mc-modal-size-large, 960px)}.mc-modal .mc-modal-close{position:absolute;z-index:10;top:0;right:0;width:var(--mc-modal-size-close-width, 56px);height:var(--mc-modal-size-close-width, 56px)}.mc-modal-wrap{position:fixed;z-index:1000;inset:0;overflow:auto;-webkit-overflow-scrolling:touch;outline:0}.mc-modal-title{margin:0}.mc-modal-content{position:relative;border-radius:var(--mc-modal-size-border-radius, 4px);background-clip:padding-box;background-color:#fff}.mc-modal-header{display:flex;align-items:center;height:var(--mc-modal-header-size-height, 56px);border-radius:var(--mc-modal-header-size-border-radius, 4px 4px 0 0);padding:var(--mc-modal-header-size-padding, 0 16px)}.mc-modal-body{display:block;overflow-y:auto;max-height:var(--mc-modal-body-size-max-height, calc(100vh - 260px));padding:var(--mc-modal-body-size-padding, 16px 24px 24px);word-wrap:break-word}.mc-modal-footer{display:flex;align-items:center;justify-content:flex-end;height:var(--mc-modal-footer-size-height, 64px);border-radius:var(--mc-modal-footer-size-border-radius, 0 0 4px 4px);padding:var(--mc-modal-footer-size-padding, 0 16px)}.mc-modal-footer button+button{margin-left:16px;margin-bottom:0}.mc-modal-mask{position:fixed;z-index:1000;inset:0;height:100%}.mc-modal-mask.mc-modal-mask-hidden{display:none}.mc-modal-open{overflow:hidden}\n"] }]
420
- }], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.Renderer2 }, { type: i0.ComponentFactoryResolver }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i2.McModalControlService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
421
- type: Inject,
422
- args: [DOCUMENT]
423
- }] }]; }, propDecorators: { mcModalType: [{
424
- type: Input
425
- }], mcComponent: [{
426
- type: Input
427
- }], mcContent: [{
428
- type: Input
429
- }], mcComponentParams: [{
430
- type: Input
431
- }], mcFooter: [{
432
- type: Input
433
- }], mcVisible: [{
434
- type: Input
435
- }], mcVisibleChange: [{
436
- type: Output
437
- }], mcZIndex: [{
438
- type: Input
439
- }], mcWidth: [{
440
- type: Input
441
- }], mcSize: [{
442
- type: Input
443
- }], mcWrapClassName: [{
444
- type: Input
445
- }], mcClassName: [{
446
- type: Input
447
- }], mcStyle: [{
448
- type: Input
449
- }], mcTitle: [{
450
- type: Input
451
- }], mcCloseByESC: [{
452
- type: Input
453
- }], mcClosable: [{
454
- type: Input
455
- }], mcMask: [{
456
- type: Input
457
- }], mcMaskClosable: [{
458
- type: Input
459
- }], mcMaskStyle: [{
460
- type: Input
461
- }], mcBodyStyle: [{
462
- type: Input
463
- }], mcAfterOpen: [{
464
- type: Output
465
- }], mcAfterClose: [{
466
- type: Output
467
- }], mcOkText: [{
468
- type: Input
469
- }], mcOkType: [{
470
- type: Input
471
- }], mcRestoreFocus: [{
472
- type: Input
473
- }], mcOkLoading: [{
474
- type: Input
475
- }], mcOnOk: [{
476
- type: Input
477
- }, {
478
- type: Output
479
- }], mcCancelText: [{
480
- type: Input
481
- }], mcCancelLoading: [{
482
- type: Input
483
- }], mcOnCancel: [{
484
- type: Input
485
- }, {
486
- type: Output
487
- }], modalContainer: [{
488
- type: ViewChild,
489
- args: ['modalContainer', { static: true }]
490
- }], bodyContainer: [{
491
- type: ViewChild,
492
- args: ['bodyContainer', { read: ViewContainerRef, static: false }]
493
- }], autoFocusedButtons: [{
494
- type: ViewChildren,
495
- args: ['autoFocusedButton', { read: ElementRef }]
496
- }], modalBody: [{
497
- type: ViewChild,
498
- args: ['modalBody']
499
- }], mcGetContainer: [{
500
- type: Input
501
- }] } });
502
- ////////////
503
- function isPromise(obj) {
504
- // tslint:disable-next-line: no-unbound-method
505
- return !!obj &&
506
- (typeof obj === 'object' || typeof obj === 'function') &&
507
- typeof obj.then === 'function' &&
508
- typeof obj.catch === 'function';
509
- }
510
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbW9zYWljL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9tb2RhbC9tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzNELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBRXhCLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBSUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLElBQUksRUFDSixTQUFTLEVBQ1QsWUFBWSxFQUNaLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHdkQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxlQUFlLElBQUksU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVELE9BQU8sRUFBc0MsU0FBUyxFQUE4QixNQUFNLGNBQWMsQ0FBQzs7Ozs7Ozs7OztBQUd6Ryx3Q0FBd0M7QUFDeEMsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUFDO0FBZTFDLE1BQU0sT0FBTyxnQkFBbUMsU0FBUSxVQUFn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QUFHO1FBQ1IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDO1FBQ3RELE9BQVEsR0FBbUIsQ0FBQyxJQUFJLEtBQUssVUFBVTtRQUMvQyxPQUFRLEdBQW1CLENBQUMsS0FBSyxLQUFLLFVBQVUsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3QsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBSZW5kZXJlcjIsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBUeXBlLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q2hpbGRyZW4sXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEVTQ0FQRSwgRU5URVIgfSBmcm9tICdAcHRzZWN1cml0eS9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgVGhlbWVQYWxldHRlIH0gZnJvbSAnQHB0c2VjdXJpdHkvbW9zYWljL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBNY01vZGFsQ29udHJvbFNlcnZpY2UgfSBmcm9tICcuL21vZGFsLWNvbnRyb2wuc2VydmljZSc7XG5pbXBvcnQgeyBNY01vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYuY2xhc3MnO1xuaW1wb3J0IHsgbW9kYWxVdGlsT2JqZWN0IGFzIE1vZGFsVXRpbCB9IGZyb20gJy4vbW9kYWwtdXRpbCc7XG5pbXBvcnQgeyBJTW9kYWxCdXR0b25PcHRpb25zLCBJTW9kYWxPcHRpb25zLCBNb2RhbFNpemUsIE1vZGFsVHlwZSwgT25DbGlja0NhbGxiYWNrIH0gZnJvbSAnLi9tb2RhbC50eXBlJztcblxuXG4vLyBEdXJhdGlvbiB3aGVuIHBlcmZvcm0gYW5pbWF0aW9ucyAobXMpXG5leHBvcnQgY29uc3QgTU9EQUxfQU5JTUFURV9EVVJBVElPTiA9IDIwMDtcblxudHlwZSBBbmltYXRpb25TdGF0ZSA9ICdlbnRlcicgfCAnbGVhdmUnIHwgbnVsbDtcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21jLW1vZGFsJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL21vZGFsLnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJyhrZXlkb3duKSc6ICdvbktleURvd24oJGV2ZW50KSdcbiAgICB9XG59KVxuZXhwb3J0IGNsYXNzIE1jTW9kYWxDb21wb25lbnQ8VCA9IGFueSwgUiA9IGFueT4gZXh0ZW5kcyBNY01vZGFsUmVmPFQsIFI+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBJTW9kYWxPcHRpb25zIHtcblxuICAgIHRoZW1lUGFsZXR0ZSA9IFRoZW1lUGFsZXR0ZTtcblxuICAgIEBJbnB1dCgpIG1jTW9kYWxUeXBlOiBNb2RhbFR5cGUgPSAnZGVmYXVsdCc7XG5cbiAgICAvLyBUaGUgaW5zdGFuY2Ugb2YgY29tcG9uZW50IG9wZW5lZCBpbnRvIHRoZSBkaWFsb2cuXG4gICAgQElucHV0KCkgbWNDb21wb25lbnQ6IFR5cGU8VD47XG4gICAgLy8gSWYgbm90IHNwZWNpZmllZCwgd2lsbCB1c2UgPG5nLWNvbnRlbnQ+XG4gICAgQElucHV0KCkgbWNDb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx7fT4gfCBUeXBlPFQ+O1xuICAgIC8vIGF2YWlsYWJsZSB3aGVuIG1jQ29udGVudCBpcyBhIGNvbXBvbmVudFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBASW5wdXQoKSBtY0NvbXBvbmVudFBhcmFtczogYW55O1xuICAgIC8vIERlZmF1bHQgTW9kYWwgT05MWVxuICAgIEBJbnB1dCgpIG1jRm9vdGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjx7fT4gfCBJTW9kYWxCdXR0b25PcHRpb25zPFQ+W107XG5cbiAgICBASW5wdXQoKVxuICAgIGdldCBtY1Zpc2libGUoKSB7IHJldHVybiB0aGlzLl9tY1Zpc2libGU7IH1cbiAgICBzZXQgbWNWaXNpYmxlKHZhbHVlKSB7IHRoaXMuX21jVmlzaWJsZSA9IHZhbHVlOyB9XG5cbiAgICBwcml2YXRlIF9tY1Zpc2libGUgPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBtY1Zpc2libGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBASW5wdXQoKSBtY1pJbmRleDogbnVtYmVyID0gMTAwMDtcbiAgICBASW5wdXQoKSBtY1dpZHRoOiBudW1iZXIgfCBzdHJpbmc7XG4gICAgQElucHV0KCkgbWNTaXplOiBNb2RhbFNpemUgPSBNb2RhbFNpemUuTWVkaXVtO1xuICAgIEBJbnB1dCgpIG1jV3JhcENsYXNzTmFtZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1jQ2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgbWNTdHlsZTogb2JqZWN0O1xuICAgIEBJbnB1dCgpIG1jVGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPHt9PjtcbiAgICBASW5wdXQoKSBtY0Nsb3NlQnlFU0M6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWNDbG9zYWJsZSgpIHsgcmV0dXJuIHRoaXMuX21jQ2xvc2FibGU7IH1cbiAgICBzZXQgbWNDbG9zYWJsZSh2YWx1ZSkgeyB0aGlzLl9tY0Nsb3NhYmxlID0gdmFsdWU7IH1cbiAgICBwcml2YXRlIF9tY0Nsb3NhYmxlID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1jTWFzaygpIHsgcmV0dXJuIHRoaXMuX21jTWFzazsgfVxuICAgIHNldCBtY01hc2sodmFsdWUpIHsgdGhpcy5fbWNNYXNrID0gdmFsdWU7IH1cbiAgICBwcml2YXRlIF9tY01hc2sgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWNNYXNrQ2xvc2FibGUoKSB7IHJldHVybiB0aGlzLl9tY01hc2tDbG9zYWJsZTsgfVxuICAgIHNldCBtY01hc2tDbG9zYWJsZSh2YWx1ZSkgeyB0aGlzLl9tY01hc2tDbG9zYWJsZSA9IHZhbHVlOyB9XG4gICAgcHJpdmF0ZSBfbWNNYXNrQ2xvc2FibGUgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIG1jTWFza1N0eWxlOiBvYmplY3Q7XG4gICAgQElucHV0KCkgbWNCb2R5U3R5bGU6IG9iamVjdDtcblxuICAgIC8vIFRyaWdnZXIgd2hlbiBtb2RhbCBvcGVuKHZpc2libGUpIGFmdGVyIGFuaW1hdGlvbnNcbiAgICBAT3V0cHV0KCkgbWNBZnRlck9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gICAgLy8gVHJpZ2dlciB3aGVuIG1vZGFsIGxlYXZlLWFuaW1hdGlvbiBvdmVyXG4gICAgQE91dHB1dCgpIG1jQWZ0ZXJDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8Uj4oKTtcblxuICAgIC8vIC0tLSBQcmVkZWZpbmVkIE9LICYgQ2FuY2VsIGJ1dHRvbnNcbiAgICBASW5wdXQoKSBtY09rVGV4dDogc3RyaW5nO1xuICAgIEBJbnB1dCgpIG1jT2tUeXBlID0gJ3ByaW1hcnknO1xuXG4gICAgQElucHV0KCkgbWNSZXN0b3JlRm9jdXMgPSB0cnVlO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWNPa0xvYWRpbmcoKSB7IHJldHVybiB0aGlzLl9tY09rTG9hZGluZzsgfVxuICAgIHNldCBtY09rTG9hZGluZyh2YWx1ZSkgeyB0aGlzLl9tY09rTG9hZGluZyA9IHZhbHVlOyB9XG4gICAgcHJpdmF0ZSBfbWNPa0xvYWRpbmcgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIEBPdXRwdXQoKSBtY09uT2s6IEV2ZW50RW1pdHRlcjxUPiB8IE9uQ2xpY2tDYWxsYmFjazxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4oKTtcbiAgICBASW5wdXQoKSBtY0NhbmNlbFRleHQ6IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1jQ2FuY2VsTG9hZGluZygpIHsgcmV0dXJuIHRoaXMuX21jQ2FuY2VsTG9hZGluZzsgfVxuICAgIHNldCBtY0NhbmNlbExvYWRpbmcodmFsdWUpIHsgdGhpcy5fbWNDYW5jZWxMb2FkaW5nID0gdmFsdWU7IH1cbiAgICBwcml2YXRlIF9tY0NhbmNlbExvYWRpbmcgPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIEBPdXRwdXQoKSBtY09uQ2FuY2VsOiBFdmVudEVtaXR0ZXI8VD4gfCBPbkNsaWNrQ2FsbGJhY2s8VD4gPSBuZXcgRXZlbnRFbWl0dGVyPFQ+KCk7XG5cbiAgICBAVmlld0NoaWxkKCdtb2RhbENvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIG1vZGFsQ29udGFpbmVyOiBFbGVtZW50UmVmO1xuICAgIEBWaWV3Q2hpbGQoJ2JvZHlDb250YWluZXInLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYsIHN0YXRpYzogZmFsc2UgfSkgYm9keUNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcbiAgICAvLyBPbmx5IGFpbSB0byBmb2N1cyB0aGUgb2sgYnV0dG9uIHRoYXQgbmVlZHMgdG8gYmUgYXV0byBmb2N1c2VkXG4gICAgQFZpZXdDaGlsZHJlbignYXV0b0ZvY3VzZWRCdXR0b24nLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgYXV0b0ZvY3VzZWRCdXR0b25zOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgICBAVmlld0NoaWxkKCdtb2RhbEJvZHknKSBtb2RhbEJvZHk6IEVsZW1lbnRSZWY7XG5cbiAgICBpc1RvcE92ZXJmbG93OiBib29sZWFuID0gZmFsc2U7XG4gICAgaXNCb3R0b21PdmVyZmxvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgbWFza0FuaW1hdGlvbkNsYXNzTWFwOiBvYmplY3Q7XG4gICAgbW9kYWxBbmltYXRpb25DbGFzc01hcDogb2JqZWN0O1xuICAgIC8vIFRoZSBvcmlnaW4gcG9pbnQgdGhhdCBhbmltYXRpb24gYmFzZWQgb25cbiAgICB0cmFuc2Zvcm1PcmlnaW4gPSAnMHB4IDBweCAwcHgnO1xuXG4gICAgLy8gT2JzZXJ2YWJsZSBhbGlhcyBmb3IgbWNBZnRlck9wZW5cbiAgICBnZXQgYWZ0ZXJPcGVuKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tY0FmdGVyT3Blbi5hc09ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICAvLyBPYnNlcnZhYmxlIGFsaWFzIGZvciBtY0FmdGVyQ2xvc2VcbiAgICBnZXQgYWZ0ZXJDbG9zZSgpOiBPYnNlcnZhYmxlPFI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWNBZnRlckNsb3NlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGdldCBva1RleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWNPa1RleHQ7XG4gICAgfVxuXG4gICAgZ2V0IGNhbmNlbFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWNDYW5jZWxUZXh0O1xuICAgIH1cblxuICAgIC8vIEluZGljYXRlIHdoZXRoZXIgdGhpcyBkaWFsb2cgc2hvdWxkIGhpZGRlblxuICAgIGdldCBoaWRkZW4oKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5tY1Zpc2libGUgJiYgIXRoaXMuYW5pbWF0aW9uU3RhdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c2VkRWxlbWVudEJlZm9yZU9wZW46IEhUTUxFbGVtZW50IHwgbnVsbDtcblxuICAgIC8vIEhhbmRsZSB0aGUgcmVmZXJlbmNlIHdoZW4gdXNpbmcgbWNDb250ZW50IGFzIENvbXBvbmVudFxuICAgIHByaXZhdGUgY29udGVudENvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPFQ+O1xuICAgIC8vIEN1cnJlbnQgYW5pbWF0aW9uIHN0YXRlXG4gICAgcHJpdmF0ZSBhbmltYXRpb25TdGF0ZTogQW5pbWF0aW9uU3RhdGU7XG4gICAgcHJpdmF0ZSBjb250YWluZXI6IEhUTUxFbGVtZW50IHwgT3ZlcmxheVJlZjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBjZnI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIHZpZXdDb250YWluZXI6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgbW9kYWxDb250cm9sOiBNY01vZGFsQ29udHJvbFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBASW5qZWN0KERPQ1VNRU5UKSBwcml2YXRlIGRvY3VtZW50OiBhbnlcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBtY0dldENvbnRhaW5lcjogSFRNTEVsZW1lbnQgfCBPdmVybGF5UmVmIHwgKCgpID0+IEhUTUxFbGVtZW50IHwgT3ZlcmxheVJlZikgPSAoKSA9PiB0aGlzLm92ZXJsYXkuY3JlYXRlKCk7XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGNvbXBvbmVudCBhbG9uZyB3aXRob3V0IFZpZXdcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wb25lbnQodGhpcy5tY0NvbnRlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUR5bmFtaWNDb21wb25lbnQodGhpcy5tY0NvbnRlbnQgYXMgVHlwZTxUPik7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTZXR1cCBkZWZhdWx0IGJ1dHRvbiBvcHRpb25zXG4gICAgICAgIGlmICh0aGlzLmlzTW9kYWxCdXR0b25zKHRoaXMubWNGb290ZXIpKSB7XG4gICAgICAgICAgICB0aGlzLm1jRm9vdGVyID0gdGhpcy5mb3JtYXRNb2RhbEJ1dHRvbnModGhpcy5tY0Zvb3RlciBhcyBJTW9kYWxCdXR0b25PcHRpb25zPFQ+W10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wb25lbnQodGhpcy5tY0NvbXBvbmVudCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlRHluYW1pY0NvbXBvbmVudCh0aGlzLm1jQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBsYWNlIHRoZSBtb2RhbCBkb20gdG8gZWxzZXdoZXJlXG4gICAgICAgIHRoaXMuY29udGFpbmVyID0gdHlwZW9mIHRoaXMubWNHZXRDb250YWluZXIgPT09ICdmdW5jdGlvbicgPyB0aGlzLm1jR2V0Q29udGFpbmVyKCkgOiB0aGlzLm1jR2V0Q29udGFpbmVyO1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY29udGFpbmVyIGluc3RhbmNlb2YgT3ZlcmxheVJlZikge1xuICAgICAgICAgICAgLy8gTk9URTogb25seSBhdHRhY2ggdGhlIGRvbSB0byBvdmVybGF5LCB0aGUgdmlldyBjb250YWluZXIgaXMgbm90IGNoYW5nZWQgYWN0dWFsbHlcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLm92ZXJsYXlFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlZ2lzdGVyIG1vZGFsIHdoZW4gYWZ0ZXJPcGVuL2FmdGVyQ2xvc2UgaXMgc3RhYmxlXG4gICAgICAgIHRoaXMubW9kYWxDb250cm9sLnJlZ2lzdGVyTW9kYWwodGhpcyk7XG4gICAgfVxuXG4gICAgLy8gW05PVEVdIE5PVCBhdmFpbGFibGUgd2hlbiB1c2luZyBieSBzZXJ2aWNlIVxuICAgIC8vIEJlY2F1c2UgbmdPbkNoYW5nZXMgbmV2ZXIgYmUgY2FsbGVkIHdoZW4gdXNpbmcgYnkgc2VydmljZSxcbiAgICAvLyBoZXJlIHdlIGNhbid0IHN1cHBvcnQgXCJtY0NvbnRlbnRcIihDb21wb25lbnQpIGV0Yy4gYXMgaW5wdXRzIHRoYXQgaW5pdGlhbGl6ZWQgZHluYW1pY2FsbHkuXG4gICAgLy8gQlVUOiBVc2VyIGFsc28gY2FuIGNoYW5nZSBcIm1jQ29udGVudFwiIGR5bmFtaWNhbGx5IHRvIHRyaWdnZXIgVUkgY2hhbmdlc1xuICAgIC8vIChwcm92aWRlZCB5b3UgZG9uJ3QgdXNlIFxiQ29tcG9uZW50IHRoYXQgbmVlZHMgaW5pdGlhbGl6YXRpb25zKVxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubWNWaXNpYmxlKSB7XG4gICAgICAgICAgICAvLyBEbyBub3QgdHJpZ2dlciBhbmltYXRpb24gd2hpbGUgaW5pdGlhbGl6aW5nXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVZpc2libGVTdGF0ZUNoYW5nZSh0aGlzLm1jVmlzaWJsZSwgIWNoYW5nZXMubWNWaXNpYmxlLmZpcnN0Q2hhbmdlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gSWYgdXNpbmcgQ29tcG9uZW50LCBpdCBpcyB0aGUgdGltZSB0byBhdHRhY2ggVmlldyB3aGlsZSBib2R5Q29udGFpbmVyIGlzIHJlYWR5XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYm9keUNvbnRhaW5lci5pbnNlcnQodGhpcy5jb250ZW50Q29tcG9uZW50UmVmLmhvc3RWaWV3KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldEVsZW1lbnQoKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJylbMF0/LmZvY3VzKCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBhdXRvRm9jdXNlZEJ1dHRvbiBvZiB0aGlzLmF1dG9Gb2N1c2VkQnV0dG9ucy50b0FycmF5KCkpIHtcbiAgICAgICAgICAgIGlmIChhdXRvRm9jdXNlZEJ1dHRvbi5uYXRpdmVFbGVtZW50LmF1dG9mb2N1cykge1xuICAgICAgICAgICAgICAgIChhdXRvRm9jdXNlZEJ1dHRvbi5uYXRpdmVFbGVtZW50IGFzIEhUTUxCdXR0b25FbGVtZW50KS5mb2N1cygpO1xuXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyIGluc3RhbmNlb2YgT3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXIuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2hlY2tPdmVyZmxvdygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbmF0aXZlRWxlbWVudCA9IHRoaXMubW9kYWxCb2R5Py5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGlmICghbmF0aXZlRWxlbWVudCkgeyByZXR1cm47IH1cblxuICAgICAgICBjb25zdCBzY3JvbGxUb3A6IG51bWJlciA9IG5hdGl2ZUVsZW1lbnQuc2Nyb2xsVG9wO1xuICAgICAgICBjb25zdCBvZmZzZXRIZWlnaHQ6IG51bWJlciA9IG5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgICAgICBjb25zdCBzY3JvbGxIZWlnaHQ6IG51bWJlciA9IG5hdGl2ZUVsZW1lbnQuc2Nyb2xsSGVpZ2h0O1xuXG4gICAgICAgIHRoaXMuaXNUb3BPdmVyZmxvdyA9IHNjcm9sbFRvcCA+IDA7XG5cbiAgICAgICAgdGhpcy5pc0JvdHRvbU92ZXJmbG93ID0gKHNjcm9sbFRvcCBhcyBudW1iZXIgKyBvZmZzZXRIZWlnaHQgYXMgbnVtYmVyKSA8IHNjcm9sbEhlaWdodDtcbiAgICB9XG5cbiAgICBvcGVuKCkge1xuICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IHRoaXMuZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgICAgICB0aGlzLmNoYW5nZVZpc2libGVGcm9tSW5zaWRlKHRydWUpO1xuICAgIH1cblxuICAgIGNsb3NlKHJlc3VsdD86IFIpIHtcbiAgICAgICAgaWYgKHRoaXMubWNSZXN0b3JlRm9jdXMpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZEVsZW1lbnRCZWZvcmVPcGVuPy5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VWaXNpYmxlRnJvbUluc2lkZShmYWxzZSwgcmVzdWx0KTtcblxuICAgICAgICB0aGlzLmZvY3VzZWRFbGVtZW50QmVmb3JlT3BlbiA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gRGVzdHJveSBlcXVhbHMgQ2xvc2VcbiAgICBkZXN0cm95KHJlc3VsdD86IFIpIHtcbiAgICAgICAgdGhpcy5jbG9zZShyZXN1bHQpO1xuICAgIH1cblxuICAgIG1hcmtGb3JDaGVjaygpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICB0cmlnZ2VyT2soKSB7XG4gICAgICAgIHRoaXMub25DbGlja09rQ2FuY2VsKCdvaycpO1xuICAgIH1cblxuICAgIHRyaWdnZXJDYW5jZWwoKSB7XG4gICAgICAgIHRoaXMub25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKTtcbiAgICB9XG5cbiAgICBnZXRJbnN0YW5jZSgpOiBNY01vZGFsQ29tcG9uZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZ2V0Q29udGVudENvbXBvbmVudFJlZigpOiBDb21wb25lbnRSZWY8VD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50Q29tcG9uZW50UmVmO1xuICAgIH1cblxuICAgIGdldENvbnRlbnRDb21wb25lbnQoKTogVCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYgJiYgdGhpcy5jb250ZW50Q29tcG9uZW50UmVmLmluc3RhbmNlO1xuICAgIH1cblxuICAgIGdldEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmICYmIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldE1jRm9vdGVyKCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudCgpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ21jLW1vZGFsLWZvb3RlcicpLml0ZW0oMCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgfVxuXG4gICAgb25DbGlja01hc2soJGV2ZW50OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMubWNNYXNrICYmXG4gICAgICAgICAgICB0aGlzLm1jTWFza0Nsb3NhYmxlICYmXG4gICAgICAgICAgICAoJGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYy1tb2RhbC13cmFwJykgJiZcbiAgICAgICAgICAgIHRoaXMubWNWaXNpYmxlXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrT2tDYW5jZWwoJ2NhbmNlbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1yZXNlcnZlZC1rZXl3b3Jkc1xuICAgIGlzTW9kYWxUeXBlKHR5cGU6IE1vZGFsVHlwZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tY01vZGFsVHlwZSA9PT0gdHlwZTtcbiAgICB9XG5cbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcblxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb24gLmtleSBpc24ndCBzdXBwb3J0ZWQgaW4gRWRnZVxuICAgICAgICBpZiAoZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFICYmIHRoaXMuY29udGFpbmVyICYmICh0aGlzLmNvbnRhaW5lciBpbnN0YW5jZW9mIE92ZXJsYXlSZWYpKSB7XG5cbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uIC5rZXkgaXNuJ3Qgc3VwcG9ydGVkIGluIEVkZ2VcbiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkgJiYgZXZlbnQua2V5Q29kZSA9PT0gRU5URVIpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1jTW9kYWxUeXBlID09PSAnY29uZmlybScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJPaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAodGhpcy5nZXRFbGVtZW50KCkucXVlcnlTZWxlY3RvcignW21jLW1vZGFsLW1haW4tYWN0aW9uXScpIGFzIEhUTUxFbGVtZW50KT8uY2xpY2soKTtcblxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEFvVFxuICAgIG9uQ2xpY2tDbG9zZUJ0bigpIHtcbiAgICAgICAgaWYgKHRoaXMubWNWaXNpYmxlKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tPa0NhbmNlbCgnY2FuY2VsJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBb1RcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXJlc2VydmVkLWtleXdvcmRzXG4gICAgb25DbGlja09rQ2FuY2VsKHR5cGU6ICdvaycgfCAnY2FuY2VsJykge1xuICAgICAgICBjb25zdCB0cmlnZ2VyID0geyBvazogdGhpcy5tY09uT2ssIGNhbmNlbDogdGhpcy5tY09uQ2FuY2VsIH1bdHlwZV07XG4gICAgICAgIGNvbnN0IGxvYWRpbmdLZXkgPSB7IG9rOiAnbWNPa0xvYWRpbmcnLCBjYW5jZWw6ICdtY0NhbmNlbExvYWRpbmcnIH1bdHlwZV07XG5cbiAgICAgICAgaWYgKHRyaWdnZXIgaW5zdGFuY2VvZiBFdmVudEVtaXR0ZXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXIuZW1pdCh0aGlzLmdldENvbnRlbnRDb21wb25lbnQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRyaWdnZXIgPT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdHJpZ2dlcih0aGlzLmdldENvbnRlbnRDb21wb25lbnQoKSk7XG4gICAgICAgICAgICAvLyBVc2VycyBjYW4gcmV0dXJuIFwiZmFsc2VcIiB0byBwcmV2ZW50IGNsb3NpbmcgYnkgZGVmYXVsdFxuICAgICAgICAgICAgY29uc3QgY2FzZUNsb3NlID0gKGRvQ2xvc2U6IGJvb2xlYW4gfCB2b2lkIHwge30pID0+IChkb0Nsb3NlICE9PSBmYWxzZSkgJiYgdGhpcy5jbG9zZShkb0Nsb3NlIGFzIFIpO1xuXG4gICAgICAgICAgICBpZiAoaXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2xvYWRpbmdLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVUaGVuID0gKGRvQ2xvc2UpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tsb2FkaW5nS2V5XSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjYXNlQ2xvc2UoZG9DbG9zZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAocmVzdWx0IGFzIFByb21pc2U8dm9pZD4pLnRoZW4oaGFuZGxlVGhlbikuY2F0Y2goaGFuZGxlVGhlbik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNhc2VDbG9zZShyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQW9UXG4gICAgaXNOb25FbXB0eVN0cmluZyh2YWx1ZToge30pOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09ICcnO1xuICAgIH1cblxuICAgIC8vIEFvVFxuICAgIGlzVGVtcGxhdGVSZWYodmFsdWU6IHt9KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmO1xuICAgIH1cblxuICAgIC8vIEFvVFxuICAgIGlzQ29tcG9uZW50KHZhbHVlOiB7fSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBUeXBlO1xuICAgIH1cblxuICAgIC8vIEFvVFxuICAgIGlzTW9kYWxCdXR0b25zKHZhbHVlOiB7fSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvLyBMb29rdXAgYSBidXR0b24ncyBwcm9wZXJ0eSwgaWYgdGhlIHByb3AgaXMgYSBmdW5jdGlvbiwgY2FsbCAmIHRoZW4gcmV0dXJuIHRoZSByZXN1bHQsIG90aGVyd2lzZSwgcmV0dXJuIGl0c2VsZi5cbiAgICAvLyBBb1RcbiAgICBnZXRCdXR0b25DYWxsYWJsZVByb3Aob3B0aW9uczogSU1vZGFsQnV0dG9uT3B0aW9uczxUPiwgcHJvcDogc3RyaW5nKToge30ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IG9wdGlvbnNbcHJvcF07XG4gICAgICAgIGNvbnN0IGFyZ3M6IGFueVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIGFyZ3MucHVzaCh0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYuaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmFwcGx5KG9wdGlvbnMsIGFyZ3MpIDogdmFsdWU7XG4gICAgfVxuXG4gICAgLy8gT24gbWNGb290ZXIncyBtb2RhbCBidXR0b24gY2xpY2tcbiAgICAvLyBBb1RcbiAgICBvbkJ1dHRvbkNsaWNrKGJ1dHRvbjogSU1vZGFsQnV0dG9uT3B0aW9uczxUPikge1xuICAgICAgICAvLyBDYWxsIG9uQ2xpY2sgZGlyZWN0bHlcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWluZmVycmVkLWVtcHR5LW9iamVjdC10eXBlICBydWxlIHNlZW1zIHRvIGJlIGJyb2tlblxuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmdldEJ1dHRvbkNhbGxhYmxlUHJvcChidXR0b24sICdvbkNsaWNrJyk7XG4gICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgYnV0dG9uLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgKHJlc3VsdCBhcyBQcm9taXNlPHt9PikudGhlbigoKSA9PiBidXR0b24ubG9hZGluZyA9IGZhbHNlKS5jYXRjaCgoKSA9PiBidXR0b24ubG9hZGluZyA9IGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIERvIHJlc3QgdGhpbmdzIHdoZW4gdmlzaWJsZSBzdGF0ZSBjaGFuZ2VkXG4gICAgcHJpdmF0ZSBoYW5kbGVWaXNpYmxlU3RhdGVDaGFuZ2UodmlzaWJsZTogYm9vbGVhbiwgYW5pbWF0aW9uOiBib29sZWFuID0gdHJ1ZSwgY2xvc2VSZXN1bHQ/OiBSKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgLy8gSGlkZSBzY3JvbGxiYXIgYXQgdGhlIGZpcnN0IHRpbWUgd2hlbiBzaG93biB1cFxuICAgICAgICBpZiAodmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VCb2R5T3ZlcmZsb3coMSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZVxuICAgICAgICAgICAgLnJlc29sdmUoYW5pbWF0aW9uICYmIHRoaXMuYW5pbWF0ZVRvKHZpc2libGUpKVxuICAgICAgICAgICAgLy8gRW1pdCBvcGVuL2Nsb3NlIGV2ZW50IGFmdGVyIGFuaW1hdGlvbnMgb3ZlclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWNBZnRlck9wZW4uZW1pdCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWNBZnRlckNsb3NlLmVtaXQoY2xvc2VSZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBTaG93L2hpZGUgc2Nyb2xsYmFyIHdoZW4gYW5pbWF0aW9uIGlzIG92ZXJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VCb2R5T3ZlcmZsb3coKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBDaGFuZ2UgbWNWaXNpYmxlIGZyb20gaW5zaWRlXG4gICAgcHJpdmF0ZSBjaGFuZ2VWaXNpYmxlRnJvbUluc2lkZSh2aXNpYmxlOiBib29sZWFuLCBjbG9zZVJlc3VsdD86IFIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMubWNWaXNpYmxlICE9PSB2aXNpYmxlKSB7XG4gICAgICAgICAgICAvLyBDaGFuZ2UgbWNWaXNpYmxlIHZhbHVlIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICB0aGlzLm1jVmlzaWJsZSA9IHZpc2libGU7XG4gICAgICAgICAgICB0aGlzLm1jVmlzaWJsZUNoYW5nZS5lbWl0KHZpc2libGUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVWaXNpYmxlU3RhdGVDaGFuZ2UodmlzaWJsZSwgdHJ1ZSwgY2xvc2VSZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hhbmdlQW5pbWF0aW9uU3RhdGUoc3RhdGU6IEFuaW1hdGlvblN0YXRlKSB7XG4gICAgICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgaWYgKHN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLm1hc2tBbmltYXRpb25DbGFzc01hcCA9IHtcbiAgICAgICAgICAgICAgICBbYGZhZGUtJHtzdGF0ZX1gXTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBbYGZhZGUtJHtzdGF0ZX0tYWN0aXZlYF06IHRydWVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMubW9kYWxBbmltYXRpb25DbGFzc01hcCA9IHtcbiAgICAgICAgICAgICAgICBbYHpvb20tJHtzdGF0ZX1gXTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBbYHpvb20tJHtzdGF0ZX0tYWN0aXZlYF06IHRydWVcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICB0aGlzLm1hc2tBbmltYXRpb25DbGFzc01hcCA9IHRoaXMubW9kYWxBbmltYXRpb25DbGFzc01hcCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250ZW50Q29tcG9uZW50UmVmKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhbmltYXRlVG8oaXNWaXNpYmxlOiBib29sZWFuKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgLy8gRmlndXJlIG91dCB0aGUgbGFzdGVzdCBjbGljayBwb3NpdGlvbiB3aGVuIHNob3dzIHVwXG4gICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIC8vIFtOT1RFXSBVc2luZyB0aW1lb3V0IGR1ZSB0byB0aGUgZG9jdW1lbnQuY2xpY2sgZXZlbnQgaXMgZmlyZWQgbGF0ZXIgdGhhbiB2aXNpYmxlIGNoYW5nZSxcbiAgICAgICAgICAgIC8vIHNvIGlmIG5vdCBwb3N0cG9uZWQgdG8gbmV4dCBldmVudC1sb29wLCB3ZSBjYW4ndCBnZXQgdGhlIGxhc3Rlc3QgY2xpY2sgcG9zaXRpb25cbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlVHJhbnNmb3JtT3JpZ2luKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VBbmltYXRpb25TdGF0ZShpc1Zpc2libGUgPyAnZW50ZXInIDogJ2xlYXZlJyk7XG5cbiAgICAgICAgLy8gUmV0dXJuIHdoZW4gYW5pbWF0aW9uIGlzIG92ZXJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gd2luZG93LnNldFRpbWVvdXQoXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZUFuaW1hdGlvblN0YXRlKG51bGwpO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKG51bGwpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgTU9EQUxfQU5JTUFURV9EVVJBVElPTlxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb3JtYXRNb2RhbEJ1dHRvbnMoYnV0dG9uczogSU1vZGFsQnV0dG9uT3B0aW9uczxUPltdKTogSU1vZGFsQnV0dG9uT3B0aW9uczxUPltdIHtcbiAgICAgICAgcmV0dXJuIGJ1dHRvbnMubWFwKChidXR0b24pID0+IHtcblxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi57XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICAgICAgICAgICAgICAgICAgc2l6ZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgICAgICAgICBhdXRvTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgbG9hZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLi4uYnV0dG9uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBjb21wb25lbnQgZHluYW1pY2FsbHkgYnV0IG5vdCBhdHRhY2ggdG8gYW55IFZpZXdcbiAgICAgKiAodGhpcyBhY3Rpb24gd2lsbCBiZSBleGVjdXRlZCB3aGVuIGJvZHlDb250YWluZXIgaXMgcmVhZHkpXG4gICAgICogQHBhcmFtIGNvbXBvbmVudCBDb21wb25lbnQgY2xhc3NcbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZUR5bmFtaWNDb21wb25lbnQoY29tcG9uZW50OiBUeXBlPFQ+KSB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLmNmci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpO1xuICAgICAgICBjb25zdCBjaGlsZEluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICAgIHByb3ZpZGVyczogW3twcm92aWRlOiBNY01vZGFsUmVmLCB1c2VWYWx1ZTogdGhpc31dLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLnZpZXdDb250YWluZXIuaW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jb250ZW50Q29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUoY2hpbGRJbmplY3Rvcik7XG5cbiAgICAgICAgaWYgKHRoaXMubWNDb21wb25lbnRQYXJhbXMpIHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5jb250ZW50Q29tcG9uZW50UmVmLmluc3RhbmNlLCB0aGlzLm1jQ29tcG9uZW50UGFyYW1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERvIHRoZSBmaXJzdCBjaGFuZ2UgZGV0ZWN0aW9uIGltbWVkaWF0ZWx5XG4gICAgICAgIC8vIChvciB3ZSBkbyBkZXRlY3Rpb24gYXQgbmdBZnRlclZpZXdJbml0LCBtdWx0aS1jaGFuZ2VzIGVycm9yIHdpbGwgYmUgdGhyb3duKVxuICAgICAgICB0aGlzLmNvbnRlbnRDb21wb25lbnRSZWYuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSB0cmFuc2Zvcm0tb3JpZ2luIHRvIHRoZSBsYXN0IGNsaWNrIHBvc2l0aW9uIG9uIGRvY3VtZW50XG4gICAgcHJpdmF0ZSB1cGRhdGVUcmFuc2Zvcm1PcmlnaW4oKSB7XG4gICAgICAgIGNvbnN0IG1vZGFsRWxlbWVudCA9IHRoaXMubW9kYWxDb250YWluZXIubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgbGFzdFBvc2l0aW9uID0gTW9kYWxVdGlsLmdldExhc3RDbGlja1Bvc2l0aW9uKCk7XG5cbiAgICAgICAgaWYgKGxhc3RQb3NpdGlvbikge1xuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1PcmlnaW4gPSBgJHtsYXN0UG9zaXRpb24ueCAtIG1vZGFsRWxlbWVudC5vZmZzZXRMZWZ0fXB4ICR7bGFzdFBvc2l0aW9uLnkgLSBtb2RhbEVsZW1lbnQub2Zmc2V0VG9wfXB4IDBweGA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYWtlIGNhcmUgb2YgdGhlIGJvZHkncyBvdmVyZmxvdyB0byBkZWNpZGUgdGhlIGV4aXN0ZW5zZSBvZiBzY3JvbGxiYXJcbiAgICAgKiBAcGFyYW0gcGx1c051bSBUaGUgbnVtYmVyIHRoYXQgdGhlIG9wZW5Nb2RhbHMubGVuZ3RoIHdpbGwgaW5jcmVhc2Ugc29vblxuICAgICAqL1xuICAgIHByaXZhdGUgY2hhbmdlQm9keU92ZXJmbG93KHBsdXNOdW06IG51bWJlciA9IDApIHtcbiAgICAgICAgY29uc3Qgb3Blbk1vZGFscyA9IHRoaXMubW9kYWxDb250cm9sLm9wZW5Nb2RhbHM7XG5cbiAgICAgICAgaWYgKG9wZW5Nb2RhbHMubGVuZ3RoICsgcGx1c051bSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUodGhpcy5kb2N1bWVudC5ib2R5LCAnb3ZlcmZsb3cnLCAnaGlkZGVuJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZVN0eWxlKHRoaXMuZG9jdW1lbnQuYm9keSwgJ292ZXJmbG93Jyk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vLy8vLy8vLy8vL1xuXG5mdW5jdGlvbiBpc1Byb21pc2Uob2JqOiB7fSB8IHZvaWQpOiBib29sZWFuIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLXVuYm91bmQtbWV0aG9kXG4gICAgcmV0dXJuICEhb2JqICYmXG4gICAgICAgICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJlxuICAgICAgICB0eXBlb2YgKG9iaiBhcyBQcm9taXNlPHt9PikudGhlbiA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgKG9iaiBhcyBQcm9taXNlPHt9PikuY2F0Y2ggPT09ICdmdW5jdGlvbic7XG59XG4iLCI8IS0tIENvbXBhdGlibGU6IHRoZSA8bmctY29udGVudD4gY2FuIGFwcGVhciBvbmx5IG9uY2UgLS0+XG48bmctdGVtcGxhdGUgI3RwbE9yaWdpbkNvbnRlbnQ+XG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdj5cbiAgICA8ZGl2ICpuZ0lmPVwibWNNYXNrXCJcbiAgICAgICAgIGNsYXNzPVwibWMtbW9kYWwtbWFza1wiXG4gICAgICAgICBbbmdDbGFzc109XCJtYXNrQW5pbWF0aW9uQ2xhc3NNYXBcIlxuICAgICAgICAgW2NsYXNzLm1jLW1vZGFsLW1hc2staGlkZGVuXT1cImhpZGRlblwiXG4gICAgICAgICBbbmdTdHlsZV09XCJtY01hc2tTdHlsZVwiXG4gICAgICAgICBbc3R5bGUuekluZGV4XT1cIm1jWkluZGV4XCJcbiAgICA+PC9kaXY+XG4gICAgPGRpdiAobW91c2Vkb3duKT1cIm9uQ2xpY2tNYXNrKCRldmVudClcIlxuICAgICAgICAgY2xhc3M9XCJtYy1tb2RhbC13cmFwIHt7IG1jV3JhcENsYXNzTmFtZSB9fVwiXG4gICAgICAgICBbc3R5bGUuekluZGV4XT1cIm1jWkluZGV4XCJcbiAgICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cImhpZGRlbiA/ICdub25lJyA6ICcnXCJcbiAgICAgICAgIHRhYmluZGV4PVwiLTFcIj5cblxuICAgICAgICA8ZGl2ICNtb2RhbENvbnRhaW5lclxuICAgICAgICAgICAgIGNsYXNzPVwibWMtbW9kYWwge3sgbWNDbGFzc05hbWUgfX0gbWMtbW9kYWxfe3sgbWNTaXplIH19XCJcbiAgICAgICAgICAgICBbbmdDbGFzc109XCJtb2RhbEFuaW1hdGlvbkNsYXNzTWFwXCJcbiAgICAgICAgICAgICBbbmdTdHlsZV09XCJtY1N0eWxlXCJcbiAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwibWNXaWR0aCB8IHRvQ3NzVW5pdFwiXG4gICAgICAgICAgICAgW3N0eWxlLnRyYW5zZm9ybS1vcmlnaW5dPVwidHJhbnNmb3JtT3JpZ2luXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYy1tb2RhbC1jb250ZW50XCIgY2RrVHJhcEZvY3VzIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCJtY1Jlc3RvcmVGb2N1c1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJtY0Nsb3NhYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1jLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tDbG9zZUJ0bigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWMtbW9kYWwtY2xvc2UgbWMtYnV0dG9uX3RyYW5zcGFyZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxpIG1jLWljb249XCJtYy1jbG9zZS1MXzE2XCIgY2xhc3M9XCJtYy1pY29uIG1jLWljb25fbGlnaHRcIiBbY29sb3JdPVwidGhlbWVQYWxldHRlLlNlY29uZGFyeVwiPjwvaT5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTW9kYWxUeXBlKCdkZWZhdWx0JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbENvbnRlbnREZWZhdWx0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTW9kYWxUeXBlKCdjb25maXJtJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbENvbnRlbnRDb25maXJtXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTW9kYWxUeXBlKCdjdXN0b20nKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsQ29udGVudEN1c3RvbVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdHBsQ29udGVudEN1c3RvbT5cbiAgICA8bmctY29udGFpbmVyICNib2R5Q29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cblxuXG48IS0tIFtQcmVkZWZpbmVkXSBEZWZhdWx0IE1vZGFsIENvbnRlbnQgLS0+XG48bmctdGVtcGxhdGUgI3RwbENvbnRlbnREZWZhdWx0PlxuICAgIDxkaXYgKm5nSWY9XCJtY1RpdGxlXCIgY2xhc3M9XCJtYy1tb2RhbC1oZWFkZXJcIiBbY2xhc3MubWMtbW9kYWwtYm9keV90b3Atb3ZlcmZsb3ddPVwiaXNUb3BPdmVyZmxvd1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibWMtbW9kYWwtdGl0bGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpc1RlbXBsYXRlUmVmKG1jVGl0bGUpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShtY1RpdGxlKVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTm9uRW1wdHlTdHJpbmcobWNUaXRsZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIm1jVGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibWMtbW9kYWwtYm9keSBtYy1zY3JvbGxiYXJcIiAjbW9kYWxCb2R5IFtuZ1N0eWxlXT1cIm1jQm9keVN0eWxlXCIgKHNjcm9sbCk9XCJjaGVja092ZXJmbG93KClcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAjYm9keUNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDb21wb25lbnQobWNDb250ZW50KVwiIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNUZW1wbGF0ZVJlZihtY0NvbnRlbnQpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShtY0NvbnRlbnQpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNOb25FbXB0eVN0cmluZyhtY0NvbnRlbnQpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2lubmVySFRNTF09XCJtY0NvbnRlbnRcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQgW25nVGVtcGxhdGVPdXRsZXRdPVwidHBsT3JpZ2luQ29udGVudFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCJtY0Zvb3RlciB8fCBtY09rVGV4dCB8fCBtY0NhbmNlbFRleHRcIiBjbGFzcz1cIm1jLW1vZGFsLWZvb3RlclwiIFtjbGFzcy5tYy1tb2RhbC1ib2R5X2JvdHRvbS1vdmVyZmxvd109XCJpc0JvdHRvbU92ZXJmbG93XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzVGVtcGxhdGVSZWYobWNGb290ZXIpXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiJGFueShtY0Zvb3RlcilcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTm9uRW1wdHlTdHJpbmcobWNGb290ZXIpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cIm1jRm9vdGVyXCI+PC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTW9kYWxCdXR0b25zKG1jRm9vdGVyKVwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGJ1dHRvbiBvZiAkYW55KG1jRm9vdGVyKVwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICBtYy1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICNhdXRvRm9jdXNlZEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXV0b2ZvY3VzXT1cImJ1dHRvbi5hdXRvRm9jdXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIubWMtbW9kYWwtbWFpbi1hY3Rpb25dPVwiYnV0dG9uLm1jTW9kYWxNYWluQWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKGJ1dHRvbiwgJ3Nob3cnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZ2V0QnV0dG9uQ2FsbGFibGVQcm9wKGJ1dHRvbiwgJ2Rpc2FibGVkJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLm1jLXByb2dyZXNzXT1cImdldEJ1dHRvbkNhbGxhYmxlUHJvcChidXR0b24sICdsb2FkaW5nJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQnV0dG9uQ2xpY2soYnV0dG9uKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiYnV0dG9uLnR5cGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7IGJ1dHRvbi5sYWJlbCB9fVxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgI2F1dG9Gb2N1c2VkQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmF1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJtY09rVGV4dFwiXG4gICAgICAgICAgICAgICAgICAgIG1jLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwidGhlbWVQYWxldHRlLlByaW1hcnlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DbGlja09rQ2FuY2VsKCdvaycpXCI+XG5cbiAgICAgICAgICAgICAgICAgICAge3sgb2tUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cIm1jQ2FuY2VsVGV4dFwiIG1jLWJ1dHRvbiAoY2xpY2spPVwib25DbGlja09rQ2FuY2VsKCdjYW5jZWwnKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBjYW5jZWxUZXh0IH19XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPCEtLSAvW1ByZWRlZmluZWRdIERlZmF1bHQgTW9kYWwgQ29udGVudCAtLT5cblxuPCEtLSBbUHJlZGVmaW5lZF0gQ29uZmlybSBNb2RhbCBDb250ZW50IC0tPlxuPG5nLXRlbXBsYXRlICN0cGxDb250ZW50Q29uZmlybT5cbiAgICA8ZGl2IGNsYXNzPVwibWMtbW9kYWwtYm9keVwiIFtuZ1N0eWxlXT1cIm1jQm9keVN0eWxlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtYy1jb25maXJtLWJvZHktd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1jLWNvbmZpcm0tYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYy1jb25maXJtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAjYm9keUNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDb21wb25lbnQobWNDb250ZW50KVwiIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXNUZW1wbGF0ZVJlZihtY0NvbnRlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIiRhbnkobWNDb250ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cImlzTm9uRW1wdHlTdHJpbmcobWNDb250ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwibWNDb250ZW50XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0IFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRwbE9yaWdpbkNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj4gPCEtLSAvLm1jLWNvbmZpcm0tYm9keS13cmFwcGVyIC0tPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJtYy1jb25maXJtLWJ0bnNcIiAqbmdJZj1cIm1jT2tUZXh0IHx8IG1jQ2FuY2VsVGV4dFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBtYy1idXR0b25cbiAgICAgICAgICAgICNhdXRvRm9jdXNlZEJ1dHRvblxuICAgICAgICAgICAgW2NvbG9yXT1cIm1jT2tUeXBlXCJcbiAgICAgICAgICAgIFthdHRyLmF1dG9mb2N1c109XCJ0cnVlXCJcbiAgICAgICAgICAgICpuZ0lmPVwibWNPa1RleHRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uQ2xpY2tPa0NhbmNlbCgnb2snKVwiPlxuXG4gICAgICAgICAgICB7eyBva1RleHQgfX1cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiBtYy1idXR0b24gW2NvbG9yXT1cInRoZW1lUGFsZXR0ZS5TZWNvbmRhcnlcIiAqbmdJZj1cIm1jQ2FuY2VsVGV4dFwiIChjbGljayk9XCJvbkNsaWNrT2tDYW5jZWwoJ2NhbmNlbCcpXCI+XG4gICAgICAgICAgICB7eyBjYW5jZWxUZXh0IH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjwhLS0gL1tQcmVkZWZpbmVkXSBDb25maXJtIE1vZGFsIENvbnRlbnQgLS0+XG4iXX0=