@koobiq/components 18.39.0 → 19.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (912) hide show
  1. package/accordion/accordion-content.d.ts +2 -2
  2. package/accordion/accordion-content.directive.d.ts +11 -0
  3. package/accordion/accordion-header.d.ts +2 -2
  4. package/accordion/accordion-header.directive.d.ts +7 -0
  5. package/accordion/accordion-item.d.ts +2 -2
  6. package/accordion/accordion-item.directive.d.ts +72 -0
  7. package/accordion/accordion-root.directive.d.ts +64 -0
  8. package/accordion/accordion-trigger.component.d.ts +2 -2
  9. package/accordion/accordion-trigger.directive.d.ts +13 -0
  10. package/accordion/accordion.component.d.ts +2 -4
  11. package/accordion/accordion.module.d.ts +7 -7
  12. package/accordion/public-api.d.ts +5 -0
  13. package/alert/_alert-theme.scss +4 -16
  14. package/alert/alert-tokens.scss +6 -12
  15. package/alert/alert.component.d.ts +5 -12
  16. package/alert/alert.module.d.ts +4 -4
  17. package/app-switcher/app-switcher.d.ts +8 -7
  18. package/autocomplete/autocomplete-origin.directive.d.ts +1 -1
  19. package/autocomplete/autocomplete-trigger.directive.d.ts +1 -1
  20. package/autocomplete/autocomplete.component.d.ts +1 -1
  21. package/autocomplete/autocomplete.module.d.ts +7 -7
  22. package/badge/badge.component.d.ts +3 -3
  23. package/badge/badge.module.d.ts +4 -4
  24. package/breadcrumbs/breadcrumbs.d.ts +3 -2
  25. package/breadcrumbs/public-api.d.ts +2 -0
  26. package/breadcrumbs/roving-focus-group.directive.d.ts +50 -0
  27. package/breadcrumbs/roving-focus-item.directive.d.ts +50 -0
  28. package/breadcrumbs/utils.d.ts +19 -0
  29. package/button/button.component.d.ts +2 -2
  30. package/button/button.module.d.ts +6 -6
  31. package/button-toggle/_button-toggle-theme.scss +30 -27
  32. package/button-toggle/button-toggle.component.d.ts +2 -2
  33. package/button-toggle/button-toggle.module.d.ts +4 -4
  34. package/button-toggle/button-toggle.scss +2 -2
  35. package/checkbox/checkbox-module.d.ts +4 -4
  36. package/checkbox/checkbox-required-validator.d.ts +1 -1
  37. package/checkbox/checkbox.d.ts +1 -1
  38. package/checkbox/checkbox.scss +5 -21
  39. package/code-block/code-block.scss +2 -2
  40. package/core/common-behaviors/index.d.ts +0 -1
  41. package/core/formatters/date/formatter.pipe.d.ts +13 -0
  42. package/core/formatters/index.d.ts +4 -4
  43. package/core/formatters/number/formatter.d.ts +3 -3
  44. package/core/forms/forms-module.d.ts +1 -1
  45. package/core/forms/forms.directive.d.ts +2 -2
  46. package/core/highlight/highlight.pipe.d.ts +1 -1
  47. package/core/highlight/index.d.ts +3 -3
  48. package/core/line/line.d.ts +1 -6
  49. package/core/locales/en-US.d.ts +8 -0
  50. package/core/locales/es-LA.d.ts +8 -0
  51. package/core/locales/locale-service.d.ts +40 -0
  52. package/core/locales/pt-BR.d.ts +8 -0
  53. package/core/locales/ru-RU.d.ts +8 -0
  54. package/core/locales/tk-TM.d.ts +8 -0
  55. package/core/locales/types.d.ts +21 -0
  56. package/core/option/_option-theme.scss +5 -2
  57. package/core/option/action.d.ts +1 -1
  58. package/core/option/optgroup.d.ts +1 -1
  59. package/core/option/option-module.d.ts +5 -5
  60. package/core/option/option.d.ts +5 -1
  61. package/core/pop-up/constants.d.ts +4 -0
  62. package/core/pop-up/pop-up-trigger.d.ts +5 -5
  63. package/core/pop-up/pop-up.d.ts +1 -1
  64. package/core/select/common.d.ts +1 -1
  65. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +1 -1
  66. package/core/selection/pseudo-checkbox/pseudo-checkbox.module.d.ts +3 -3
  67. package/core/styles/common/_select.scss +1 -1
  68. package/core/styles/common/_visually-hidden.scss +1 -0
  69. package/core/styles/theming/_scrollbar-theme.scss +19 -12
  70. package/core/utils/utils.d.ts +3 -0
  71. package/datepicker/calendar-body.component.d.ts +1 -1
  72. package/datepicker/calendar-header.component.d.ts +1 -1
  73. package/datepicker/calendar.component.d.ts +1 -1
  74. package/datepicker/datepicker-input.directive.d.ts +2 -2
  75. package/datepicker/datepicker-module.d.ts +15 -15
  76. package/datepicker/datepicker-toggle.component.d.ts +2 -2
  77. package/datepicker/datepicker.component.d.ts +2 -2
  78. package/datepicker/month-view.component.d.ts +1 -1
  79. package/divider/divider.component.d.ts +5 -1
  80. package/divider/divider.module.d.ts +3 -3
  81. package/dl/dl.component.d.ts +3 -3
  82. package/dl/dl.module.d.ts +4 -4
  83. package/dropdown/dropdown-content.directive.d.ts +1 -1
  84. package/dropdown/dropdown-item.component.d.ts +1 -1
  85. package/dropdown/dropdown-trigger.directive.d.ts +1 -1
  86. package/dropdown/dropdown.component.d.ts +1 -1
  87. package/dropdown/dropdown.module.d.ts +8 -8
  88. package/dropdown/dropdown.scss +1 -0
  89. package/ellipsis-center/ellipsis-center.directive.d.ts +2 -2
  90. package/empty-state/empty-state.component.d.ts +5 -5
  91. package/empty-state/empty-state.module.d.ts +4 -4
  92. package/fesm2022/koobiq-components-accordion.mjs +459 -40
  93. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-actions-panel.mjs +18 -18
  95. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-alert.mjs +28 -36
  97. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-app-switcher.mjs +66 -66
  99. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-autocomplete.mjs +31 -25
  101. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-badge.mjs +20 -21
  103. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-breadcrumbs.mjs +339 -36
  105. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-button-toggle.mjs +25 -22
  107. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-button.mjs +25 -26
  109. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-checkbox.mjs +18 -16
  111. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-clamped-text.mjs +9 -9
  113. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-code-block.mjs +15 -16
  115. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-content-panel.mjs +55 -57
  117. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-core.mjs +379 -367
  119. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-datepicker.mjs +107 -91
  121. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-divider.mjs +16 -14
  123. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-dl.mjs +19 -20
  125. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  126. package/fesm2022/koobiq-components-dropdown.mjs +47 -48
  127. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-dynamic-translation.mjs +16 -19
  129. package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-ellipsis-center.mjs +10 -10
  131. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-empty-state.mjs +26 -27
  133. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-file-upload.mjs +402 -152
  135. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-filter-bar.mjs +293 -258
  137. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-form-field.mjs +84 -92
  139. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-icon.mjs +18 -18
  141. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-inline-edit.mjs +33 -37
  143. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-input.mjs +31 -30
  145. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-link.mjs +11 -10
  147. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-list.mjs +47 -45
  149. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-loader-overlay.mjs +27 -28
  151. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  152. package/fesm2022/koobiq-components-markdown.mjs +14 -14
  153. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  154. package/fesm2022/koobiq-components-modal.mjs +76 -64
  155. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-navbar-ic.mjs +76 -54
  157. package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-navbar.mjs +77 -66
  159. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-notification-center.mjs +31 -32
  161. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  162. package/fesm2022/koobiq-components-overflow-items.mjs +16 -19
  163. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-popover.mjs +55 -46
  165. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-progress-bar.mjs +18 -19
  167. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  168. package/fesm2022/koobiq-components-progress-spinner.mjs +22 -23
  169. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  170. package/fesm2022/koobiq-components-radio.mjs +20 -16
  171. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  172. package/fesm2022/koobiq-components-resizer.mjs +10 -12
  173. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  174. package/fesm2022/koobiq-components-risk-level.mjs +19 -12
  175. package/fesm2022/koobiq-components-risk-level.mjs.map +1 -1
  176. package/fesm2022/koobiq-components-scrollbar.mjs +17 -18
  177. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  178. package/fesm2022/koobiq-components-search-expandable.mjs +19 -19
  179. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-select.mjs +113 -74
  181. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-sidebar.mjs +16 -23
  183. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-sidepanel.mjs +61 -55
  185. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-split-button.mjs +12 -12
  187. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-splitter.mjs +24 -25
  189. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  190. package/fesm2022/koobiq-components-table.mjs +17 -18
  191. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  192. package/fesm2022/koobiq-components-tabs.mjs +85 -89
  193. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  194. package/fesm2022/koobiq-components-tags.mjs +43 -47
  195. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  196. package/fesm2022/koobiq-components-textarea.mjs +10 -11
  197. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  198. package/fesm2022/koobiq-components-time-range.mjs +38 -40
  199. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  200. package/fesm2022/koobiq-components-timepicker.mjs +68 -18
  201. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  202. package/fesm2022/koobiq-components-timezone.mjs +68 -59
  203. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  204. package/fesm2022/koobiq-components-title.mjs +23 -11
  205. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  206. package/fesm2022/koobiq-components-toast.mjs +23 -24
  207. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  208. package/fesm2022/koobiq-components-toggle.mjs +16 -14
  209. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  210. package/fesm2022/koobiq-components-tooltip.mjs +20 -23
  211. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  212. package/fesm2022/koobiq-components-top-bar.mjs +18 -20
  213. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  214. package/fesm2022/koobiq-components-tree-select.mjs +81 -70
  215. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  216. package/fesm2022/koobiq-components-tree.mjs +77 -66
  217. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  218. package/fesm2022/koobiq-components-username.mjs +31 -37
  219. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  220. package/file-upload/file-upload.d.ts +33 -3
  221. package/file-upload/file-upload.module.d.ts +15 -15
  222. package/file-upload/multiple-file-upload.component.d.ts +25 -34
  223. package/file-upload/{file-drop.d.ts → primitives/file-drop.d.ts} +3 -3
  224. package/file-upload/primitives/file-picker.d.ts +82 -0
  225. package/file-upload/primitives/index.d.ts +2 -0
  226. package/file-upload/public-api.d.ts +2 -1
  227. package/file-upload/single-file-upload.component.d.ts +25 -18
  228. package/filter-bar/pipes/pipe-multi-select.d.ts +4 -1
  229. package/filter-bar/pipes/pipe-multi-tree-select.d.ts +5 -0
  230. package/icon/_icon-button-theme.scss +2 -1
  231. package/inline-edit/inline-edit.d.ts +2 -3
  232. package/input/_input-theme.scss +2 -1
  233. package/input/input-number-validators.d.ts +2 -2
  234. package/input/input-number.d.ts +1 -1
  235. package/input/input-password.d.ts +1 -1
  236. package/input/input.d.ts +2 -2
  237. package/input/input.module.d.ts +8 -8
  238. package/link/_link-theme.scss +3 -0
  239. package/link/link.component.d.ts +1 -1
  240. package/link/link.module.d.ts +3 -3
  241. package/list/_list-theme.scss +6 -0
  242. package/list/list-selection.component.d.ts +3 -3
  243. package/list/list.component.d.ts +2 -2
  244. package/list/list.module.d.ts +6 -6
  245. package/list/list.scss +1 -0
  246. package/loader-overlay/loader-overlay.component.d.ts +4 -4
  247. package/loader-overlay/loader-overlay.module.d.ts +5 -5
  248. package/loader-overlay/loader-overlay.scss +22 -31
  249. package/modal/css-unit.pipe.d.ts +1 -1
  250. package/modal/modal.component.d.ts +1 -1
  251. package/modal/modal.directive.d.ts +4 -4
  252. package/modal/modal.module.d.ts +10 -10
  253. package/modal/modal.scss +1 -1
  254. package/modal/modal.service.d.ts +1 -1
  255. package/navbar/_navbar-theme.scss +1 -0
  256. package/navbar/navbar-brand.component.d.ts +1 -1
  257. package/navbar/navbar-item.component.d.ts +7 -7
  258. package/navbar/navbar-toggle.component.d.ts +1 -1
  259. package/navbar/navbar-toggle.scss +1 -1
  260. package/navbar/navbar.component.d.ts +4 -4
  261. package/navbar/navbar.module.d.ts +10 -10
  262. package/navbar/vertical-navbar.component.d.ts +1 -1
  263. package/navbar/vertical-navbar.scss +5 -2
  264. package/navbar-ic/navbar-ic-header.d.ts +3 -0
  265. package/navbar-ic/navbar-ic-item.d.ts +18 -0
  266. package/navbar-ic/navbar-ic.d.ts +13 -7
  267. package/notification-center/notification-center.d.ts +5 -5
  268. package/overflow-items/overflow-items.d.ts +1 -1
  269. package/package.json +11 -142
  270. package/popover/_popover-theme.scss +2 -2
  271. package/popover/popover-confirm.component.d.ts +2 -2
  272. package/popover/popover.component.d.ts +9 -9
  273. package/popover/popover.module.d.ts +9 -9
  274. package/prebuilt-themes/dark-theme.css +1 -1
  275. package/prebuilt-themes/light-theme.css +1 -1
  276. package/prebuilt-themes/theme.css +1 -1
  277. package/progress-bar/progress-bar.component.d.ts +3 -3
  278. package/progress-bar/progress-bar.module.d.ts +3 -3
  279. package/progress-spinner/_progress-spinner-theme.scss +14 -4
  280. package/progress-spinner/progress-spinner-tokens.scss +2 -0
  281. package/progress-spinner/progress-spinner.component.d.ts +3 -3
  282. package/progress-spinner/progress-spinner.module.d.ts +4 -4
  283. package/progress-spinner/progress-spinner.scss +1 -0
  284. package/radio/_radio-theme.scss +2 -1
  285. package/radio/radio-tokens.scss +1 -0
  286. package/radio/radio.component.d.ts +10 -5
  287. package/radio/radio.module.d.ts +3 -3
  288. package/risk-level/risk-level.component.d.ts +4 -1
  289. package/risk-level/risk-level.module.d.ts +7 -4
  290. package/schematics/migrations/icons-replacement/README.md +5 -1
  291. package/schematics/migrations/icons-replacement/index.js +1 -1
  292. package/schematics/migrations/new-icons-pack/README.md +52 -4
  293. package/schematics/migrations/new-icons-pack/data.js +1142 -1142
  294. package/schematics/migrations/new-icons-pack/index.js +18 -7
  295. package/schematics/migrations/new-icons-pack/migration.json +4570 -0
  296. package/schematics/migrations/new-icons-pack/replacement.json +18 -0
  297. package/schematics/migrations/new-icons-pack/schema.json +13 -0
  298. package/schematics/ng-add/index.js +6 -7
  299. package/scrollbar/_scrollbar-component-theme.scss +16 -14
  300. package/select/select-option.directive.d.ts +1 -1
  301. package/select/select.component.d.ts +6 -5
  302. package/select/select.module.d.ts +10 -10
  303. package/sidebar/sidebar.component.d.ts +3 -3
  304. package/sidebar/sidebar.module.d.ts +3 -3
  305. package/sidepanel/sidepanel-container.component.d.ts +1 -1
  306. package/sidepanel/sidepanel-directives.d.ts +5 -5
  307. package/sidepanel/sidepanel.module.d.ts +9 -9
  308. package/splitter/splitter.component.d.ts +4 -4
  309. package/splitter/splitter.module.d.ts +3 -3
  310. package/table/_table-theme.scss +1 -0
  311. package/table/table.component.d.ts +2 -2
  312. package/table/table.module.d.ts +4 -4
  313. package/tabs/paginated-tab-header.d.ts +1 -1
  314. package/tabs/tab-body.component.d.ts +2 -2
  315. package/tabs/tab-content.directive.d.ts +1 -1
  316. package/tabs/tab-group.component.d.ts +5 -5
  317. package/tabs/tab-header.component.d.ts +1 -1
  318. package/tabs/tab-label-wrapper.directive.d.ts +1 -1
  319. package/tabs/tab-label.directive.d.ts +1 -1
  320. package/tabs/tab.component.d.ts +3 -3
  321. package/tabs/tabs.module.d.ts +15 -15
  322. package/tags/tag-input.d.ts +1 -1
  323. package/tags/tag-list.component.d.ts +1 -1
  324. package/tags/tag.component.d.ts +4 -4
  325. package/tags/tag.module.d.ts +4 -4
  326. package/textarea/textarea.component.d.ts +1 -1
  327. package/textarea/textarea.module.d.ts +4 -4
  328. package/timepicker/timepicker.directive.d.ts +17 -7
  329. package/timepicker/timepicker.module.d.ts +5 -5
  330. package/timezone/cities-by-filter.pipe.d.ts +1 -1
  331. package/timezone/timezone-option.component.d.ts +1 -1
  332. package/timezone/timezone-option.directive.d.ts +1 -1
  333. package/timezone/timezone-select.component.d.ts +2 -2
  334. package/timezone/timezone.module.d.ts +15 -15
  335. package/timezone/utc-offset.pipe.d.ts +1 -1
  336. package/title/title.directive.d.ts +4 -1
  337. package/title/title.module.d.ts +3 -3
  338. package/toggle/toggle.component.d.ts +1 -1
  339. package/toggle/toggle.module.d.ts +3 -3
  340. package/tooltip/_tooltip-theme.scss +5 -6
  341. package/tooltip/tooltip.component.d.ts +3 -3
  342. package/tooltip/tooltip.scss +1 -0
  343. package/top-bar/top-bar.d.ts +1 -1
  344. package/tree/node.d.ts +1 -1
  345. package/tree/outlet.d.ts +1 -1
  346. package/tree/padding.directive.d.ts +1 -1
  347. package/tree/toggle.d.ts +3 -3
  348. package/tree/tree-base.d.ts +2 -2
  349. package/tree/tree-option.component.d.ts +1 -1
  350. package/tree/tree-option.scss +1 -1
  351. package/tree/tree-selection.component.d.ts +1 -1
  352. package/tree/tree.d.ts +1 -1
  353. package/tree/tree.module.d.ts +11 -11
  354. package/tree-select/tree-select.component.d.ts +2 -2
  355. package/tree-select/tree-select.module.d.ts +9 -9
  356. package/core/common-behaviors/focus-monitor.d.ts +0 -19
  357. package/esm2022/accordion/accordion-content.mjs +0 -19
  358. package/esm2022/accordion/accordion-header.mjs +0 -19
  359. package/esm2022/accordion/accordion-item.mjs +0 -25
  360. package/esm2022/accordion/accordion-trigger.component.mjs +0 -48
  361. package/esm2022/accordion/accordion.component.mjs +0 -41
  362. package/esm2022/accordion/accordion.module.mjs +0 -44
  363. package/esm2022/accordion/index.mjs +0 -2
  364. package/esm2022/accordion/koobiq-components-accordion.mjs +0 -5
  365. package/esm2022/accordion/public-api.mjs +0 -7
  366. package/esm2022/actions-panel/actions-panel-config.mjs +0 -55
  367. package/esm2022/actions-panel/actions-panel-container.mjs +0 -217
  368. package/esm2022/actions-panel/actions-panel-ref.mjs +0 -78
  369. package/esm2022/actions-panel/actions-panel.mjs +0 -133
  370. package/esm2022/actions-panel/index.mjs +0 -6
  371. package/esm2022/actions-panel/koobiq-components-actions-panel.mjs +0 -5
  372. package/esm2022/actions-panel/module.mjs +0 -21
  373. package/esm2022/alert/alert.component.mjs +0 -124
  374. package/esm2022/alert/alert.module.mjs +0 -40
  375. package/esm2022/alert/index.mjs +0 -2
  376. package/esm2022/alert/koobiq-components-alert.mjs +0 -5
  377. package/esm2022/alert/public-api.mjs +0 -3
  378. package/esm2022/app-switcher/app-switcher-animations.mjs +0 -18
  379. package/esm2022/app-switcher/app-switcher-dropdown-app.mjs +0 -75
  380. package/esm2022/app-switcher/app-switcher-dropdown-site.mjs +0 -60
  381. package/esm2022/app-switcher/app-switcher.mjs +0 -446
  382. package/esm2022/app-switcher/app-switcher.module.mjs +0 -45
  383. package/esm2022/app-switcher/index.mjs +0 -2
  384. package/esm2022/app-switcher/kbq-app-switcher-list-item.mjs +0 -84
  385. package/esm2022/app-switcher/koobiq-components-app-switcher.mjs +0 -5
  386. package/esm2022/app-switcher/public-api.mjs +0 -7
  387. package/esm2022/autocomplete/autocomplete-origin.directive.mjs +0 -21
  388. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +0 -540
  389. package/esm2022/autocomplete/autocomplete.component.mjs +0 -178
  390. package/esm2022/autocomplete/autocomplete.module.mjs +0 -38
  391. package/esm2022/autocomplete/index.mjs +0 -2
  392. package/esm2022/autocomplete/koobiq-components-autocomplete.mjs +0 -5
  393. package/esm2022/autocomplete/public-api.mjs +0 -5
  394. package/esm2022/badge/badge.component.mjs +0 -124
  395. package/esm2022/badge/badge.module.mjs +0 -36
  396. package/esm2022/badge/index.mjs +0 -2
  397. package/esm2022/badge/koobiq-components-badge.mjs +0 -5
  398. package/esm2022/badge/public-api.mjs +0 -3
  399. package/esm2022/breadcrumbs/breadcrumbs.mjs +0 -268
  400. package/esm2022/breadcrumbs/breadcrumbs.module.mjs +0 -31
  401. package/esm2022/breadcrumbs/breadcrumbs.types.mjs +0 -2
  402. package/esm2022/breadcrumbs/index.mjs +0 -2
  403. package/esm2022/breadcrumbs/koobiq-components-breadcrumbs.mjs +0 -5
  404. package/esm2022/breadcrumbs/public-api.mjs +0 -4
  405. package/esm2022/button/button.component.mjs +0 -180
  406. package/esm2022/button/button.dropdown-trigger.directive.mjs +0 -28
  407. package/esm2022/button/button.module.mjs +0 -41
  408. package/esm2022/button/index.mjs +0 -2
  409. package/esm2022/button/koobiq-components-button.mjs +0 -5
  410. package/esm2022/button/public-api.mjs +0 -4
  411. package/esm2022/button-toggle/button-toggle.component.mjs +0 -384
  412. package/esm2022/button-toggle/button-toggle.module.mjs +0 -19
  413. package/esm2022/button-toggle/index.mjs +0 -2
  414. package/esm2022/button-toggle/koobiq-components-button-toggle.mjs +0 -5
  415. package/esm2022/button-toggle/public-api.mjs +0 -3
  416. package/esm2022/checkbox/checkbox-config.mjs +0 -6
  417. package/esm2022/checkbox/checkbox-module.mjs +0 -19
  418. package/esm2022/checkbox/checkbox-required-validator.mjs +0 -27
  419. package/esm2022/checkbox/checkbox.mjs +0 -295
  420. package/esm2022/checkbox/index.mjs +0 -2
  421. package/esm2022/checkbox/koobiq-components-checkbox.mjs +0 -5
  422. package/esm2022/checkbox/public-api.mjs +0 -5
  423. package/esm2022/clamped-text/clamped-text.mjs +0 -202
  424. package/esm2022/clamped-text/constants.mjs +0 -20
  425. package/esm2022/clamped-text/index.mjs +0 -4
  426. package/esm2022/clamped-text/koobiq-components-clamped-text.mjs +0 -5
  427. package/esm2022/clamped-text/module.mjs +0 -19
  428. package/esm2022/code-block/code-block-highlight.mjs +0 -418
  429. package/esm2022/code-block/code-block.mjs +0 -440
  430. package/esm2022/code-block/code-block.module.mjs +0 -19
  431. package/esm2022/code-block/index.mjs +0 -2
  432. package/esm2022/code-block/koobiq-components-code-block.mjs +0 -5
  433. package/esm2022/code-block/public-api.mjs +0 -5
  434. package/esm2022/code-block/types.mjs +0 -2
  435. package/esm2022/content-panel/content-panel.mjs +0 -432
  436. package/esm2022/content-panel/index.mjs +0 -3
  437. package/esm2022/content-panel/koobiq-components-content-panel.mjs +0 -5
  438. package/esm2022/content-panel/module.mjs +0 -42
  439. package/esm2022/core/animation/animation.mjs +0 -39
  440. package/esm2022/core/animation/fade-animations.mjs +0 -9
  441. package/esm2022/core/animation/index.mjs +0 -4
  442. package/esm2022/core/animation/select-animations.mjs +0 -45
  443. package/esm2022/core/common-behaviors/checkbox.mjs +0 -2
  444. package/esm2022/core/common-behaviors/clipboard.mjs +0 -31
  445. package/esm2022/core/common-behaviors/color.mjs +0 -89
  446. package/esm2022/core/common-behaviors/common-module.mjs +0 -76
  447. package/esm2022/core/common-behaviors/constructor.mjs +0 -2
  448. package/esm2022/core/common-behaviors/disabled.mjs +0 -19
  449. package/esm2022/core/common-behaviors/error-state.mjs +0 -50
  450. package/esm2022/core/common-behaviors/focus-monitor.mjs +0 -37
  451. package/esm2022/core/common-behaviors/hover.mjs +0 -34
  452. package/esm2022/core/common-behaviors/index.mjs +0 -14
  453. package/esm2022/core/common-behaviors/orientation.mjs +0 -2
  454. package/esm2022/core/common-behaviors/read-state.mjs +0 -33
  455. package/esm2022/core/common-behaviors/size.mjs +0 -2
  456. package/esm2022/core/common-behaviors/tabindex.mjs +0 -20
  457. package/esm2022/core/datetime/date-adapter.mjs +0 -14
  458. package/esm2022/core/datetime/date-formats.mjs +0 -3
  459. package/esm2022/core/datetime/index.mjs +0 -3
  460. package/esm2022/core/error/error-state-matcher.mjs +0 -56
  461. package/esm2022/core/form-field/field-sizing-content.mjs +0 -117
  462. package/esm2022/core/form-field/form-field-ref.mjs +0 -10
  463. package/esm2022/core/form-field/index.mjs +0 -3
  464. package/esm2022/core/formatters/date/formatter.mjs +0 -25
  465. package/esm2022/core/formatters/date/formatter.pipe.mjs +0 -380
  466. package/esm2022/core/formatters/filesize/config.mjs +0 -32
  467. package/esm2022/core/formatters/filesize/formatter.mjs +0 -43
  468. package/esm2022/core/formatters/filesize/index.mjs +0 -4
  469. package/esm2022/core/formatters/filesize/size.mjs +0 -65
  470. package/esm2022/core/formatters/index.mjs +0 -146
  471. package/esm2022/core/formatters/number/formatter.mjs +0 -347
  472. package/esm2022/core/forms/forms-module.mjs +0 -24
  473. package/esm2022/core/forms/forms.directive.mjs +0 -66
  474. package/esm2022/core/forms/index.mjs +0 -4
  475. package/esm2022/core/forms/validators.mjs +0 -184
  476. package/esm2022/core/highlight/highlight.pipe.mjs +0 -23
  477. package/esm2022/core/highlight/index.mjs +0 -19
  478. package/esm2022/core/index.mjs +0 -2
  479. package/esm2022/core/koobiq-components-core.mjs +0 -5
  480. package/esm2022/core/line/line.mjs +0 -70
  481. package/esm2022/core/locales/en-US.mjs +0 -210
  482. package/esm2022/core/locales/es-LA.mjs +0 -209
  483. package/esm2022/core/locales/formatters.mjs +0 -193
  484. package/esm2022/core/locales/index.mjs +0 -10
  485. package/esm2022/core/locales/locale-service.mjs +0 -173
  486. package/esm2022/core/locales/locale-service.module.mjs +0 -19
  487. package/esm2022/core/locales/pt-BR.mjs +0 -209
  488. package/esm2022/core/locales/ru-RU.mjs +0 -224
  489. package/esm2022/core/locales/tk-TM.mjs +0 -210
  490. package/esm2022/core/locales/types.mjs +0 -2
  491. package/esm2022/core/navbar/index.mjs +0 -2
  492. package/esm2022/core/navbar/rectangle-item.mjs +0 -40
  493. package/esm2022/core/option/action-container.mjs +0 -23
  494. package/esm2022/core/option/action.mjs +0 -107
  495. package/esm2022/core/option/index.mjs +0 -6
  496. package/esm2022/core/option/optgroup.mjs +0 -37
  497. package/esm2022/core/option/option-module.mjs +0 -20
  498. package/esm2022/core/option/option.mjs +0 -322
  499. package/esm2022/core/overlay/overlay-position-map.mjs +0 -251
  500. package/esm2022/core/pop-up/constants.mjs +0 -55
  501. package/esm2022/core/pop-up/focus-trap-strategy.mjs +0 -6
  502. package/esm2022/core/pop-up/index.mjs +0 -6
  503. package/esm2022/core/pop-up/pop-up-styles.mjs +0 -24
  504. package/esm2022/core/pop-up/pop-up-trigger.mjs +0 -343
  505. package/esm2022/core/pop-up/pop-up.mjs +0 -152
  506. package/esm2022/core/public-api.mjs +0 -24
  507. package/esm2022/core/select/common.mjs +0 -203
  508. package/esm2022/core/select/constants.mjs +0 -25
  509. package/esm2022/core/select/errors.mjs +0 -26
  510. package/esm2022/core/select/events.mjs +0 -2
  511. package/esm2022/core/select/index.mjs +0 -5
  512. package/esm2022/core/selection/constants.mjs +0 -6
  513. package/esm2022/core/selection/index.mjs +0 -4
  514. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +0 -43
  515. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +0 -18
  516. package/esm2022/core/services/measure-scrollbar.service.mjs +0 -42
  517. package/esm2022/core/services/theme.service.mjs +0 -80
  518. package/esm2022/core/title/index.mjs +0 -2
  519. package/esm2022/core/title/title-text-ref.mjs +0 -3
  520. package/esm2022/core/tokens/index.mjs +0 -2
  521. package/esm2022/core/tokens/window.mjs +0 -19
  522. package/esm2022/core/utils/dom.mjs +0 -8
  523. package/esm2022/core/utils/index.mjs +0 -3
  524. package/esm2022/core/utils/public-api.mjs +0 -2
  525. package/esm2022/core/utils/utils.mjs +0 -31
  526. package/esm2022/core/validation/index.mjs +0 -2
  527. package/esm2022/core/validation/validation.mjs +0 -27
  528. package/esm2022/core/version.mjs +0 -3
  529. package/esm2022/datepicker/calendar-body.component.mjs +0 -87
  530. package/esm2022/datepicker/calendar-header.component.mjs +0 -164
  531. package/esm2022/datepicker/calendar.component.mjs +0 -185
  532. package/esm2022/datepicker/datepicker-animations.mjs +0 -32
  533. package/esm2022/datepicker/datepicker-errors.mjs +0 -6
  534. package/esm2022/datepicker/datepicker-input.directive.mjs +0 -1119
  535. package/esm2022/datepicker/datepicker-intl.mjs +0 -40
  536. package/esm2022/datepicker/datepicker-module.mjs +0 -103
  537. package/esm2022/datepicker/datepicker-toggle.component.mjs +0 -170
  538. package/esm2022/datepicker/datepicker.component.mjs +0 -388
  539. package/esm2022/datepicker/index.mjs +0 -2
  540. package/esm2022/datepicker/koobiq-components-datepicker.mjs +0 -5
  541. package/esm2022/datepicker/month-view.component.mjs +0 -148
  542. package/esm2022/datepicker/public-api.mjs +0 -11
  543. package/esm2022/divider/divider.component.mjs +0 -49
  544. package/esm2022/divider/divider.module.mjs +0 -18
  545. package/esm2022/divider/index.mjs +0 -2
  546. package/esm2022/divider/koobiq-components-divider.mjs +0 -5
  547. package/esm2022/divider/public-api.mjs +0 -3
  548. package/esm2022/dl/dl.component.mjs +0 -81
  549. package/esm2022/dl/dl.module.mjs +0 -36
  550. package/esm2022/dl/index.mjs +0 -2
  551. package/esm2022/dl/koobiq-components-dl.mjs +0 -5
  552. package/esm2022/dl/public-api.mjs +0 -3
  553. package/esm2022/dropdown/dropdown-animations.mjs +0 -41
  554. package/esm2022/dropdown/dropdown-content.directive.mjs +0 -61
  555. package/esm2022/dropdown/dropdown-errors.mjs +0 -29
  556. package/esm2022/dropdown/dropdown-item.component.mjs +0 -150
  557. package/esm2022/dropdown/dropdown-trigger.directive.mjs +0 -513
  558. package/esm2022/dropdown/dropdown.component.mjs +0 -293
  559. package/esm2022/dropdown/dropdown.module.mjs +0 -51
  560. package/esm2022/dropdown/dropdown.types.mjs +0 -23
  561. package/esm2022/dropdown/index.mjs +0 -2
  562. package/esm2022/dropdown/koobiq-components-dropdown.mjs +0 -5
  563. package/esm2022/dropdown/public-api.mjs +0 -9
  564. package/esm2022/dynamic-translation/dynamic-translation.mjs +0 -175
  565. package/esm2022/dynamic-translation/index.mjs +0 -3
  566. package/esm2022/dynamic-translation/koobiq-components-dynamic-translation.mjs +0 -5
  567. package/esm2022/dynamic-translation/module.mjs +0 -25
  568. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +0 -120
  569. package/esm2022/ellipsis-center/index.mjs +0 -2
  570. package/esm2022/ellipsis-center/koobiq-components-ellipsis-center.mjs +0 -5
  571. package/esm2022/ellipsis-center/public-api.mjs +0 -2
  572. package/esm2022/empty-state/empty-state.component.mjs +0 -109
  573. package/esm2022/empty-state/empty-state.module.mjs +0 -44
  574. package/esm2022/empty-state/index.mjs +0 -2
  575. package/esm2022/empty-state/koobiq-components-empty-state.mjs +0 -5
  576. package/esm2022/empty-state/public-api.mjs +0 -3
  577. package/esm2022/file-upload/file-drop.mjs +0 -87
  578. package/esm2022/file-upload/file-upload.mjs +0 -71
  579. package/esm2022/file-upload/file-upload.module.mjs +0 -79
  580. package/esm2022/file-upload/index.mjs +0 -2
  581. package/esm2022/file-upload/koobiq-components-file-upload.mjs +0 -5
  582. package/esm2022/file-upload/multiple-file-upload.component.mjs +0 -306
  583. package/esm2022/file-upload/public-api.mjs +0 -6
  584. package/esm2022/file-upload/single-file-upload.component.mjs +0 -257
  585. package/esm2022/filter-bar/filter-bar-button.mjs +0 -31
  586. package/esm2022/filter-bar/filter-bar.mjs +0 -213
  587. package/esm2022/filter-bar/filter-bar.module.mjs +0 -67
  588. package/esm2022/filter-bar/filter-bar.types.mjs +0 -72
  589. package/esm2022/filter-bar/filter-refresher.mjs +0 -34
  590. package/esm2022/filter-bar/filter-reset.mjs +0 -49
  591. package/esm2022/filter-bar/filter-search.mjs +0 -173
  592. package/esm2022/filter-bar/filters.mjs +0 -266
  593. package/esm2022/filter-bar/index.mjs +0 -2
  594. package/esm2022/filter-bar/koobiq-components-filter-bar.mjs +0 -5
  595. package/esm2022/filter-bar/pipe-add.mjs +0 -140
  596. package/esm2022/filter-bar/pipe.directive.mjs +0 -37
  597. package/esm2022/filter-bar/pipes/base-pipe.mjs +0 -146
  598. package/esm2022/filter-bar/pipes/pipe-button.mjs +0 -72
  599. package/esm2022/filter-bar/pipes/pipe-date.mjs +0 -206
  600. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +0 -208
  601. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +0 -188
  602. package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +0 -260
  603. package/esm2022/filter-bar/pipes/pipe-readonly.mjs +0 -68
  604. package/esm2022/filter-bar/pipes/pipe-select.mjs +0 -101
  605. package/esm2022/filter-bar/pipes/pipe-state.mjs +0 -53
  606. package/esm2022/filter-bar/pipes/pipe-text.mjs +0 -104
  607. package/esm2022/filter-bar/pipes/pipe-title.mjs +0 -102
  608. package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +0 -142
  609. package/esm2022/filter-bar/public-api.mjs +0 -22
  610. package/esm2022/form-field/cleaner.mjs +0 -28
  611. package/esm2022/form-field/error.mjs +0 -20
  612. package/esm2022/form-field/fieldset.mjs +0 -84
  613. package/esm2022/form-field/form-field-control.mjs +0 -4
  614. package/esm2022/form-field/form-field.mjs +0 -447
  615. package/esm2022/form-field/form-field.module.mjs +0 -87
  616. package/esm2022/form-field/hint.mjs +0 -36
  617. package/esm2022/form-field/index.mjs +0 -2
  618. package/esm2022/form-field/koobiq-components-form-field.mjs +0 -5
  619. package/esm2022/form-field/label.mjs +0 -19
  620. package/esm2022/form-field/password-hint.mjs +0 -165
  621. package/esm2022/form-field/password-toggle.mjs +0 -129
  622. package/esm2022/form-field/prefix.mjs +0 -19
  623. package/esm2022/form-field/public-api.mjs +0 -16
  624. package/esm2022/form-field/reactive-password-hint.mjs +0 -66
  625. package/esm2022/form-field/stepper.mjs +0 -144
  626. package/esm2022/form-field/suffix.mjs +0 -18
  627. package/esm2022/form-field/validate.directive.mjs +0 -190
  628. package/esm2022/icon/icon-button.component.mjs +0 -64
  629. package/esm2022/icon/icon-item.component.mjs +0 -31
  630. package/esm2022/icon/icon.component.mjs +0 -56
  631. package/esm2022/icon/icon.module.mjs +0 -27
  632. package/esm2022/icon/index.mjs +0 -2
  633. package/esm2022/icon/koobiq-components-icon.mjs +0 -5
  634. package/esm2022/icon/public-api.mjs +0 -5
  635. package/esm2022/index.mjs +0 -2
  636. package/esm2022/inline-edit/index.mjs +0 -3
  637. package/esm2022/inline-edit/inline-edit.mjs +0 -382
  638. package/esm2022/inline-edit/koobiq-components-inline-edit.mjs +0 -5
  639. package/esm2022/inline-edit/module.mjs +0 -25
  640. package/esm2022/input/index.mjs +0 -2
  641. package/esm2022/input/input-errors.mjs +0 -4
  642. package/esm2022/input/input-number-validators.mjs +0 -88
  643. package/esm2022/input/input-number.mjs +0 -386
  644. package/esm2022/input/input-password.mjs +0 -253
  645. package/esm2022/input/input-value-accessor.mjs +0 -3
  646. package/esm2022/input/input.mjs +0 -299
  647. package/esm2022/input/input.module.mjs +0 -58
  648. package/esm2022/input/koobiq-components-input.mjs +0 -5
  649. package/esm2022/input/public-api.mjs +0 -7
  650. package/esm2022/koobiq-components.mjs +0 -5
  651. package/esm2022/link/index.mjs +0 -2
  652. package/esm2022/link/koobiq-components-link.mjs +0 -5
  653. package/esm2022/link/link.component.mjs +0 -143
  654. package/esm2022/link/link.module.mjs +0 -20
  655. package/esm2022/link/public-api.mjs +0 -3
  656. package/esm2022/list/index.mjs +0 -2
  657. package/esm2022/list/koobiq-components-list.mjs +0 -5
  658. package/esm2022/list/list-selection.component.mjs +0 -745
  659. package/esm2022/list/list.component.mjs +0 -43
  660. package/esm2022/list/list.module.mjs +0 -60
  661. package/esm2022/list/public-api.mjs +0 -4
  662. package/esm2022/loader-overlay/index.mjs +0 -2
  663. package/esm2022/loader-overlay/koobiq-components-loader-overlay.mjs +0 -5
  664. package/esm2022/loader-overlay/loader-overlay.component.mjs +0 -110
  665. package/esm2022/loader-overlay/loader-overlay.module.mjs +0 -44
  666. package/esm2022/loader-overlay/public-api.mjs +0 -3
  667. package/esm2022/markdown/index.mjs +0 -2
  668. package/esm2022/markdown/koobiq-components-markdown.mjs +0 -5
  669. package/esm2022/markdown/markdown.component.mjs +0 -67
  670. package/esm2022/markdown/markdown.module.mjs +0 -21
  671. package/esm2022/markdown/markdown.service.mjs +0 -36
  672. package/esm2022/markdown/markdown.values.mjs +0 -35
  673. package/esm2022/markdown/public-api.mjs +0 -5
  674. package/esm2022/modal/css-unit.pipe.mjs +0 -17
  675. package/esm2022/modal/index.mjs +0 -2
  676. package/esm2022/modal/koobiq-components-modal.mjs +0 -5
  677. package/esm2022/modal/modal-control.service.mjs +0 -89
  678. package/esm2022/modal/modal-ref.class.mjs +0 -7
  679. package/esm2022/modal/modal-util.mjs +0 -22
  680. package/esm2022/modal/modal.component.mjs +0 -540
  681. package/esm2022/modal/modal.directive.mjs +0 -94
  682. package/esm2022/modal/modal.module.mjs +0 -78
  683. package/esm2022/modal/modal.service.mjs +0 -135
  684. package/esm2022/modal/modal.type.mjs +0 -7
  685. package/esm2022/modal/public-api.mjs +0 -7
  686. package/esm2022/navbar/index.mjs +0 -2
  687. package/esm2022/navbar/koobiq-components-navbar.mjs +0 -5
  688. package/esm2022/navbar/navbar-brand.component.mjs +0 -105
  689. package/esm2022/navbar/navbar-item.component.mjs +0 -428
  690. package/esm2022/navbar/navbar-toggle.component.mjs +0 -88
  691. package/esm2022/navbar/navbar.component.mjs +0 -251
  692. package/esm2022/navbar/navbar.module.mjs +0 -84
  693. package/esm2022/navbar/public-api.mjs +0 -7
  694. package/esm2022/navbar/vertical-navbar.component.mjs +0 -128
  695. package/esm2022/navbar-ic/index.mjs +0 -2
  696. package/esm2022/navbar-ic/koobiq-components-navbar-ic.mjs +0 -5
  697. package/esm2022/navbar-ic/navbar-ic-header.mjs +0 -74
  698. package/esm2022/navbar-ic/navbar-ic-item.mjs +0 -390
  699. package/esm2022/navbar-ic/navbar-ic.animation.mjs +0 -17
  700. package/esm2022/navbar-ic/navbar-ic.mjs +0 -310
  701. package/esm2022/navbar-ic/navbar-ic.module.mjs +0 -74
  702. package/esm2022/navbar-ic/public-api.mjs +0 -5
  703. package/esm2022/notification-center/index.mjs +0 -2
  704. package/esm2022/notification-center/koobiq-components-notification-center.mjs +0 -5
  705. package/esm2022/notification-center/notification-center-animations.mjs +0 -18
  706. package/esm2022/notification-center/notification-center.mjs +0 -329
  707. package/esm2022/notification-center/notification-center.module.mjs +0 -38
  708. package/esm2022/notification-center/notification-center.service.mjs +0 -127
  709. package/esm2022/notification-center/notification-item.mjs +0 -70
  710. package/esm2022/notification-center/public-api.mjs +0 -5
  711. package/esm2022/overflow-items/index.mjs +0 -3
  712. package/esm2022/overflow-items/koobiq-components-overflow-items.mjs +0 -5
  713. package/esm2022/overflow-items/module.mjs +0 -25
  714. package/esm2022/overflow-items/overflow-items.mjs +0 -290
  715. package/esm2022/popover/index.mjs +0 -2
  716. package/esm2022/popover/koobiq-components-popover.mjs +0 -5
  717. package/esm2022/popover/popover-animations.mjs +0 -16
  718. package/esm2022/popover/popover-confirm.component.mjs +0 -97
  719. package/esm2022/popover/popover.component.mjs +0 -410
  720. package/esm2022/popover/popover.module.mjs +0 -67
  721. package/esm2022/popover/public-api.mjs +0 -5
  722. package/esm2022/progress-bar/index.mjs +0 -2
  723. package/esm2022/progress-bar/koobiq-components-progress-bar.mjs +0 -5
  724. package/esm2022/progress-bar/progress-bar.component.mjs +0 -62
  725. package/esm2022/progress-bar/progress-bar.module.mjs +0 -32
  726. package/esm2022/progress-bar/public-api.mjs +0 -3
  727. package/esm2022/progress-spinner/index.mjs +0 -2
  728. package/esm2022/progress-spinner/koobiq-components-progress-spinner.mjs +0 -5
  729. package/esm2022/progress-spinner/progress-spinner.component.mjs +0 -78
  730. package/esm2022/progress-spinner/progress-spinner.module.mjs +0 -35
  731. package/esm2022/progress-spinner/public-api.mjs +0 -3
  732. package/esm2022/public-api.mjs +0 -2
  733. package/esm2022/radio/index.mjs +0 -2
  734. package/esm2022/radio/koobiq-components-radio.mjs +0 -5
  735. package/esm2022/radio/public-api.mjs +0 -3
  736. package/esm2022/radio/radio.component.mjs +0 -451
  737. package/esm2022/radio/radio.module.mjs +0 -18
  738. package/esm2022/resizer/index.mjs +0 -3
  739. package/esm2022/resizer/koobiq-components-resizer.mjs +0 -5
  740. package/esm2022/resizer/module.mjs +0 -17
  741. package/esm2022/resizer/resizer.mjs +0 -135
  742. package/esm2022/risk-level/index.mjs +0 -2
  743. package/esm2022/risk-level/koobiq-components-risk-level.mjs +0 -5
  744. package/esm2022/risk-level/public-api.mjs +0 -3
  745. package/esm2022/risk-level/risk-level.component.mjs +0 -40
  746. package/esm2022/risk-level/risk-level.module.mjs +0 -24
  747. package/esm2022/scrollbar/index.mjs +0 -2
  748. package/esm2022/scrollbar/koobiq-components-scrollbar.mjs +0 -5
  749. package/esm2022/scrollbar/public-api.mjs +0 -5
  750. package/esm2022/scrollbar/scrollbar.component.mjs +0 -133
  751. package/esm2022/scrollbar/scrollbar.directive.mjs +0 -105
  752. package/esm2022/scrollbar/scrollbar.module.mjs +0 -25
  753. package/esm2022/scrollbar/scrollbar.types.mjs +0 -14
  754. package/esm2022/search-expandable/index.mjs +0 -2
  755. package/esm2022/search-expandable/koobiq-components-search-expandable.mjs +0 -5
  756. package/esm2022/search-expandable/public-api.mjs +0 -3
  757. package/esm2022/search-expandable/search-expandable.mjs +0 -177
  758. package/esm2022/search-expandable/search-expandable.module.mjs +0 -18
  759. package/esm2022/select/index.mjs +0 -2
  760. package/esm2022/select/koobiq-components-select.mjs +0 -5
  761. package/esm2022/select/public-api.mjs +0 -4
  762. package/esm2022/select/select-option.directive.mjs +0 -69
  763. package/esm2022/select/select.component.mjs +0 -1154
  764. package/esm2022/select/select.module.mjs +0 -81
  765. package/esm2022/sidebar/index.mjs +0 -2
  766. package/esm2022/sidebar/koobiq-components-sidebar.mjs +0 -5
  767. package/esm2022/sidebar/public-api.mjs +0 -3
  768. package/esm2022/sidebar/sidebar-animations.mjs +0 -23
  769. package/esm2022/sidebar/sidebar.component.mjs +0 -169
  770. package/esm2022/sidebar/sidebar.module.mjs +0 -30
  771. package/esm2022/sidepanel/index.mjs +0 -2
  772. package/esm2022/sidepanel/koobiq-components-sidepanel.mjs +0 -5
  773. package/esm2022/sidepanel/public-api.mjs +0 -7
  774. package/esm2022/sidepanel/sidepanel-animations.mjs +0 -29
  775. package/esm2022/sidepanel/sidepanel-config.mjs +0 -33
  776. package/esm2022/sidepanel/sidepanel-container.component.mjs +0 -126
  777. package/esm2022/sidepanel/sidepanel-directives.mjs +0 -168
  778. package/esm2022/sidepanel/sidepanel-ref.mjs +0 -60
  779. package/esm2022/sidepanel/sidepanel.module.mjs +0 -73
  780. package/esm2022/sidepanel/sidepanel.service.mjs +0 -167
  781. package/esm2022/split-button/index.mjs +0 -2
  782. package/esm2022/split-button/koobiq-components-split-button.mjs +0 -5
  783. package/esm2022/split-button/public-api.mjs +0 -3
  784. package/esm2022/split-button/split-button.mjs +0 -133
  785. package/esm2022/split-button/split-button.module.mjs +0 -18
  786. package/esm2022/splitter/index.mjs +0 -2
  787. package/esm2022/splitter/koobiq-components-splitter.mjs +0 -5
  788. package/esm2022/splitter/public-api.mjs +0 -3
  789. package/esm2022/splitter/splitter.component.mjs +0 -492
  790. package/esm2022/splitter/splitter.module.mjs +0 -34
  791. package/esm2022/table/index.mjs +0 -2
  792. package/esm2022/table/koobiq-components-table.mjs +0 -5
  793. package/esm2022/table/public-api.mjs +0 -3
  794. package/esm2022/table/table.component.mjs +0 -36
  795. package/esm2022/table/table.module.mjs +0 -32
  796. package/esm2022/tabs/index.mjs +0 -2
  797. package/esm2022/tabs/koobiq-components-tabs.mjs +0 -5
  798. package/esm2022/tabs/paginated-tab-header.mjs +0 -490
  799. package/esm2022/tabs/public-api.mjs +0 -11
  800. package/esm2022/tabs/tab-body.component.mjs +0 -178
  801. package/esm2022/tabs/tab-content.directive.mjs +0 -15
  802. package/esm2022/tabs/tab-group.component.mjs +0 -384
  803. package/esm2022/tabs/tab-header.component.mjs +0 -60
  804. package/esm2022/tabs/tab-label-wrapper.directive.mjs +0 -86
  805. package/esm2022/tabs/tab-label.directive.mjs +0 -17
  806. package/esm2022/tabs/tab-nav-bar.mjs +0 -292
  807. package/esm2022/tabs/tab.component.mjs +0 -145
  808. package/esm2022/tabs/tabs-animations.mjs +0 -24
  809. package/esm2022/tabs/tabs.module.mjs +0 -95
  810. package/esm2022/tags/index.mjs +0 -2
  811. package/esm2022/tags/koobiq-components-tags.mjs +0 -5
  812. package/esm2022/tags/public-api.mjs +0 -6
  813. package/esm2022/tags/tag-default-options.mjs +0 -4
  814. package/esm2022/tags/tag-input.mjs +0 -281
  815. package/esm2022/tags/tag-list.component.mjs +0 -765
  816. package/esm2022/tags/tag-text-control.mjs +0 -2
  817. package/esm2022/tags/tag.component.mjs +0 -647
  818. package/esm2022/tags/tag.module.mjs +0 -67
  819. package/esm2022/textarea/index.mjs +0 -2
  820. package/esm2022/textarea/koobiq-components-textarea.mjs +0 -5
  821. package/esm2022/textarea/public-api.mjs +0 -3
  822. package/esm2022/textarea/textarea.component.mjs +0 -300
  823. package/esm2022/textarea/textarea.module.mjs +0 -20
  824. package/esm2022/time-range/constants.mjs +0 -42
  825. package/esm2022/time-range/index.mjs +0 -8
  826. package/esm2022/time-range/koobiq-components-time-range.mjs +0 -5
  827. package/esm2022/time-range/module.mjs +0 -36
  828. package/esm2022/time-range/time-range-editor.mjs +0 -224
  829. package/esm2022/time-range/time-range-title-as-form-field.mjs +0 -60
  830. package/esm2022/time-range/time-range-title.mjs +0 -112
  831. package/esm2022/time-range/time-range.mjs +0 -234
  832. package/esm2022/time-range/time-range.service.mjs +0 -126
  833. package/esm2022/time-range/types.mjs +0 -2
  834. package/esm2022/timepicker/index.mjs +0 -2
  835. package/esm2022/timepicker/koobiq-components-timepicker.mjs +0 -5
  836. package/esm2022/timepicker/public-api.mjs +0 -4
  837. package/esm2022/timepicker/timepicker.constants.mjs +0 -29
  838. package/esm2022/timepicker/timepicker.directive.mjs +0 -686
  839. package/esm2022/timepicker/timepicker.module.mjs +0 -29
  840. package/esm2022/timezone/cities-by-filter.pipe.mjs +0 -17
  841. package/esm2022/timezone/index.mjs +0 -2
  842. package/esm2022/timezone/koobiq-components-timezone.mjs +0 -5
  843. package/esm2022/timezone/public-api.mjs +0 -7
  844. package/esm2022/timezone/timezone-option.component.mjs +0 -50
  845. package/esm2022/timezone/timezone-option.directive.mjs +0 -54
  846. package/esm2022/timezone/timezone-select.component.mjs +0 -55
  847. package/esm2022/timezone/timezone.models.mjs +0 -2
  848. package/esm2022/timezone/timezone.module.mjs +0 -82
  849. package/esm2022/timezone/timezone.utils.mjs +0 -80
  850. package/esm2022/timezone/utc-offset.pipe.mjs +0 -17
  851. package/esm2022/title/index.mjs +0 -2
  852. package/esm2022/title/koobiq-components-title.mjs +0 -5
  853. package/esm2022/title/public-api.mjs +0 -3
  854. package/esm2022/title/title.directive.mjs +0 -108
  855. package/esm2022/title/title.module.mjs +0 -18
  856. package/esm2022/toast/index.mjs +0 -2
  857. package/esm2022/toast/koobiq-components-toast.mjs +0 -5
  858. package/esm2022/toast/public-api.mjs +0 -6
  859. package/esm2022/toast/toast-animations.mjs +0 -10
  860. package/esm2022/toast/toast-container.component.mjs +0 -57
  861. package/esm2022/toast/toast.component.mjs +0 -125
  862. package/esm2022/toast/toast.module.mjs +0 -26
  863. package/esm2022/toast/toast.service.mjs +0 -197
  864. package/esm2022/toast/toast.type.mjs +0 -39
  865. package/esm2022/toggle/index.mjs +0 -2
  866. package/esm2022/toggle/koobiq-components-toggle.mjs +0 -5
  867. package/esm2022/toggle/public-api.mjs +0 -3
  868. package/esm2022/toggle/toggle.component.mjs +0 -254
  869. package/esm2022/toggle/toggle.module.mjs +0 -18
  870. package/esm2022/tooltip/index.mjs +0 -2
  871. package/esm2022/tooltip/koobiq-components-tooltip.mjs +0 -5
  872. package/esm2022/tooltip/public-api.mjs +0 -3
  873. package/esm2022/tooltip/tooltip.animations.mjs +0 -19
  874. package/esm2022/tooltip/tooltip.component.mjs +0 -400
  875. package/esm2022/tooltip/tooltip.module.mjs +0 -35
  876. package/esm2022/top-bar/index.mjs +0 -2
  877. package/esm2022/top-bar/koobiq-components-top-bar.mjs +0 -5
  878. package/esm2022/top-bar/module.mjs +0 -25
  879. package/esm2022/top-bar/public-api.mjs +0 -3
  880. package/esm2022/top-bar/top-bar.mjs +0 -74
  881. package/esm2022/tree/control/base-tree-control.mjs +0 -59
  882. package/esm2022/tree/control/flat-tree-control.filters.mjs +0 -52
  883. package/esm2022/tree/control/flat-tree-control.mjs +0 -109
  884. package/esm2022/tree/control/nested-tree-control.mjs +0 -40
  885. package/esm2022/tree/control/tree-control.mjs +0 -2
  886. package/esm2022/tree/data-source/flat-data-source.mjs +0 -157
  887. package/esm2022/tree/data-source/nested-data-source.mjs +0 -28
  888. package/esm2022/tree/index.mjs +0 -2
  889. package/esm2022/tree/koobiq-components-tree.mjs +0 -5
  890. package/esm2022/tree/node.mjs +0 -31
  891. package/esm2022/tree/outlet.mjs +0 -15
  892. package/esm2022/tree/padding.directive.mjs +0 -108
  893. package/esm2022/tree/public-api.mjs +0 -17
  894. package/esm2022/tree/toggle.mjs +0 -93
  895. package/esm2022/tree/tree-base.mjs +0 -236
  896. package/esm2022/tree/tree-errors.mjs +0 -36
  897. package/esm2022/tree/tree-option.component.mjs +0 -303
  898. package/esm2022/tree/tree-selection.component.mjs +0 -568
  899. package/esm2022/tree/tree.mjs +0 -19
  900. package/esm2022/tree/tree.module.mjs +0 -64
  901. package/esm2022/tree-select/index.mjs +0 -2
  902. package/esm2022/tree-select/koobiq-components-tree-select.mjs +0 -5
  903. package/esm2022/tree-select/public-api.mjs +0 -3
  904. package/esm2022/tree-select/tree-select.component.mjs +0 -1034
  905. package/esm2022/tree-select/tree-select.module.mjs +0 -71
  906. package/esm2022/username/constants.mjs +0 -25
  907. package/esm2022/username/index.mjs +0 -6
  908. package/esm2022/username/koobiq-components-username.mjs +0 -5
  909. package/esm2022/username/module.mjs +0 -35
  910. package/esm2022/username/types.mjs +0 -32
  911. package/esm2022/username/username.mjs +0 -129
  912. package/esm2022/username/username.pipe.mjs +0 -92
@@ -1,490 +0,0 @@
1
- import { FocusKeyManager } from '@angular/cdk/a11y';
2
- import { Directionality } from '@angular/cdk/bidi';
3
- import { coerceNumberProperty } from '@angular/cdk/coercion';
4
- import { ENTER, hasModifierKey, SPACE } from '@angular/cdk/keycodes';
5
- import { normalizePassiveListenerOptions, Platform } from '@angular/cdk/platform';
6
- import { ViewportRuler } from '@angular/cdk/scrolling';
7
- import { booleanAttribute, ChangeDetectorRef, DestroyRef, Directive, ElementRef, EventEmitter, inject, Input, NgZone, numberAttribute } from '@angular/core';
8
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
9
- import { DOWN_ARROW, END, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@koobiq/cdk/keycodes';
10
- import { KBQ_WINDOW } from '@koobiq/components/core';
11
- import { fromEvent, merge, of as observableOf, Subject, timer } from 'rxjs';
12
- import { takeUntil } from 'rxjs/operators';
13
- import * as i0 from "@angular/core";
14
- /** Config used to bind passive event listeners */
15
- const passiveEventListenerOptions = normalizePassiveListenerOptions({ passive: true });
16
- /**
17
- * The distance in pixels that will be overshot when scrolling a tab label into view. This helps
18
- * provide a small affordance to the label next to it.
19
- */
20
- const EXAGGERATED_OVERSCROLL = 60;
21
- /**
22
- * Amount of milliseconds to wait before starting to scroll the header automatically.
23
- * Set a little conservatively in order to handle fake events dispatched on touch devices.
24
- */
25
- const HEADER_SCROLL_DELAY = 650;
26
- /**
27
- * Interval in milliseconds at which to scroll the header
28
- * while the user is holding their pointer.
29
- */
30
- const HEADER_SCROLL_INTERVAL = 100;
31
- const VIEWPORT_THROTTLE_TIME = 150;
32
- const SCROLL_DISTANCE = 0.8;
33
- /**
34
- * Base class for a tab header that supported pagination.
35
- * @docs-private
36
- */
37
- export class KbqPaginatedTabHeader {
38
- /** The index of the active tab. */
39
- get selectedIndex() {
40
- return this._selectedIndex;
41
- }
42
- set selectedIndex(value) {
43
- const coercedValue = coerceNumberProperty(value);
44
- this.selectedIndexChanged = this._selectedIndex !== coercedValue;
45
- this._selectedIndex = coercedValue;
46
- this.keyManager?.updateActiveItem(coercedValue);
47
- }
48
- /** Tracks which element has focus; used for keyboard navigation */
49
- get focusIndex() {
50
- return this.keyManager ? this.keyManager.activeItemIndex : 0;
51
- }
52
- /** When the focus index is set, we must manually send focus to the correct label */
53
- set focusIndex(value) {
54
- if (!this.isValidIndex(value) || this.focusIndex === value || !this.keyManager) {
55
- return;
56
- }
57
- this.keyManager.setActiveItem(value);
58
- }
59
- /** Sets the distance in pixels that the tab header should be transformed in the X-axis. */
60
- get scrollDistance() {
61
- return this._scrollDistance;
62
- }
63
- set scrollDistance(v) {
64
- this._scrollDistance = Math.max(0, Math.min(this.getMaxScrollDistance(), v));
65
- // Mark that the scroll distance has changed so that after the view is checked, the CSS
66
- // transformation can move the header.
67
- this.scrollDistanceChanged = true;
68
- this.checkScrollingControls();
69
- }
70
- /** Whether the tabs should be displayed vertically. */
71
- set vertical(value) {
72
- this._vertical = value;
73
- if (this._vertical) {
74
- this.disablePagination = true;
75
- }
76
- }
77
- get vertical() {
78
- return this._vertical;
79
- }
80
- constructor() {
81
- this._selectedIndex = 0;
82
- /** The distance in pixels that the tab labels should be translated to the left. */
83
- this._scrollDistance = 0;
84
- /** Event emitted when the option is selected. */
85
- this.selectFocusedIndex = new EventEmitter();
86
- /** Event emitted when a label is focused. */
87
- this.indexFocused = new EventEmitter();
88
- /** Whether the controls for pagination should be displayed */
89
- this.showPaginationControls = false;
90
- /** Whether the tab list can be scrolled more towards the end of the tab label list. */
91
- this.disableScrollAfter = true;
92
- /** Whether the tab list can be scrolled more towards the beginning of the tab label list. */
93
- this.disableScrollBefore = true;
94
- /**
95
- * Whether pagination should be disabled. This can be used to avoid unnecessary
96
- * layout recalculations if it's known that pagination won't be required.
97
- */
98
- this.disablePagination = false;
99
- this._vertical = false;
100
- /** Stream that will stop the automated scrolling. */
101
- this.stopScrolling = new Subject();
102
- /** Whether the header should scroll to the selected index after the view has been checked. */
103
- this.selectedIndexChanged = false;
104
- this.destroyRef = inject(DestroyRef);
105
- this.elementRef = inject(ElementRef);
106
- this.changeDetectorRef = inject(ChangeDetectorRef);
107
- this.viewportRuler = inject(ViewportRuler);
108
- this.ngZone = inject(NgZone);
109
- this.platform = inject(Platform);
110
- this.dir = inject(Directionality, { optional: true });
111
- this.window = inject(KBQ_WINDOW);
112
- // Bind the `mouseleave` event on the outside since it doesn't change anything in the view.
113
- this.ngZone.runOutsideAngular(() => {
114
- fromEvent(this.elementRef.nativeElement, 'mouseleave')
115
- .pipe(takeUntilDestroyed())
116
- .subscribe(() => this.stopInterval());
117
- });
118
- }
119
- /** Called when the user has selected an item via the keyboard. */
120
- ngAfterViewInit() {
121
- // We need to handle these events manually, because we want to bind passive event listeners.
122
- fromEvent(this.previousPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)
123
- .pipe(takeUntilDestroyed(this.destroyRef))
124
- .subscribe(() => this.handlePaginatorPress('before'));
125
- fromEvent(this.nextPaginator.nativeElement, 'touchstart', passiveEventListenerOptions)
126
- .pipe(takeUntilDestroyed(this.destroyRef))
127
- .subscribe(() => this.handlePaginatorPress('after'));
128
- }
129
- ngAfterContentInit() {
130
- const dirChange = this.dir ? this.dir.change : observableOf('ltr');
131
- const resize = this.viewportRuler.change(VIEWPORT_THROTTLE_TIME);
132
- const realign = () => {
133
- this.updatePagination();
134
- };
135
- this.keyManager = new FocusKeyManager(this.items).withHorizontalOrientation(this.getLayoutDirection());
136
- this.keyManager.updateActiveItem(this._selectedIndex);
137
- // Defer the first call in order to allow for slower browsers to lay out the elements.
138
- // This helps in cases where the user lands directly on a page with paginated tabs.
139
- typeof this.window.requestAnimationFrame !== 'undefined'
140
- ? this.window.requestAnimationFrame(realign)
141
- : realign();
142
- // On dir change or window resize, realign the ink bar and update the orientation of
143
- // the key manager if the direction has changed.
144
- merge(dirChange, resize, this.items.changes)
145
- .pipe(takeUntilDestroyed(this.destroyRef))
146
- .subscribe(() => {
147
- // We need to defer this to give the browser some time to recalculate
148
- // the element dimensions. The call has to be wrapped in `NgZone.run`,
149
- // because the viewport change handler runs outside of Angular.
150
- this.ngZone.run(() => Promise.resolve().then(() => {
151
- this.updateScrollPosition();
152
- realign();
153
- }));
154
- this.keyManager.withHorizontalOrientation(this.getLayoutDirection());
155
- });
156
- // If there is a change in the focus key manager we need to emit the `indexFocused`
157
- // event in order to provide a public event that notifies about focus changes. Also we realign
158
- // the tabs container by scrolling the new focused tab into the visible section.
159
- this.keyManager.change.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((newFocusIndex) => {
160
- this.indexFocused.emit(newFocusIndex);
161
- this.setTabFocus(newFocusIndex);
162
- });
163
- }
164
- ngAfterContentChecked() {
165
- // If the number of tab labels have changed, check if scrolling should be enabled
166
- if (this.tabLabelCount !== this.items.length) {
167
- this.updatePagination();
168
- this.tabLabelCount = this.items.length;
169
- this.changeDetectorRef.markForCheck();
170
- }
171
- // If the selected index has changed, scroll to the label and check if the scrolling controls
172
- // should be disabled.
173
- if (this.selectedIndexChanged) {
174
- this.scrollToLabel(this._selectedIndex);
175
- this.checkScrollingControls();
176
- this.selectedIndexChanged = false;
177
- this.changeDetectorRef.markForCheck();
178
- }
179
- // If the scroll distance has been changed (tab selected, focused, scroll controls activated),
180
- // then translate the header to reflect this.
181
- if (this.scrollDistanceChanged) {
182
- this.updateTabScrollPosition();
183
- this.scrollDistanceChanged = false;
184
- this.changeDetectorRef.markForCheck();
185
- }
186
- }
187
- ngOnDestroy() {
188
- this.stopScrolling.complete();
189
- }
190
- handleKeydown(event) {
191
- // We don't handle any key bindings with a modifier key.
192
- if (hasModifierKey(event)) {
193
- return;
194
- }
195
- const key = event.keyCode;
196
- if (key === HOME) {
197
- this.keyManager.setFirstItemActive();
198
- }
199
- else if (key === END) {
200
- this.keyManager.setLastItemActive();
201
- }
202
- else if (key === UP_ARROW && this.vertical) {
203
- this.keyManager.setPreviousItemActive();
204
- }
205
- else if (key === DOWN_ARROW && this.vertical) {
206
- this.keyManager.setNextItemActive();
207
- }
208
- else if (key === RIGHT_ARROW && !this.vertical) {
209
- this.keyManager.setNextItemActive();
210
- }
211
- else if (key === LEFT_ARROW && !this.vertical) {
212
- this.keyManager.setPreviousItemActive();
213
- }
214
- else if ([ENTER, SPACE].includes(key)) {
215
- this.selectFocusedIndex.emit(this.focusIndex);
216
- }
217
- if ([HOME, END, UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW, SPACE, ENTER].includes(key)) {
218
- event.preventDefault();
219
- }
220
- }
221
- /**
222
- * Callback for when the MutationObserver detects that the content has changed.
223
- */
224
- onContentChanges() {
225
- const textContent = this.elementRef.nativeElement.textContent;
226
- // We need to diff the text content of the header, because the MutationObserver callback
227
- // will fire even if the text content didn't change which is inefficient and is prone
228
- // to infinite loops if a poorly constructed expression is passed in (see #14249).
229
- if (textContent !== this.currentTextContent) {
230
- this.currentTextContent = textContent || '';
231
- // The content observer runs outside the `NgZone` by default, which
232
- // means that we need to bring the callback back in ourselves.
233
- this.ngZone.run(() => {
234
- this.updatePagination();
235
- this.changeDetectorRef.markForCheck();
236
- });
237
- }
238
- }
239
- /**
240
- * Updates the view whether pagination should be enabled or not.
241
- *
242
- * WARNING: Calling this method can be very costly in terms of performance. It should be called
243
- * as infrequently as possible from outside of the Tabs component as it causes a reflow of the
244
- * page.
245
- */
246
- updatePagination() {
247
- this.checkPaginationEnabled();
248
- this.checkScrollingControls();
249
- this.updateTabScrollPosition();
250
- }
251
- /**
252
- * Determines if an index is valid. If the tabs are not ready yet, we assume that the user is
253
- * providing a valid index and return true.
254
- */
255
- isValidIndex(index) {
256
- if (!this.items) {
257
- return true;
258
- }
259
- const tab = this.items ? this.items.toArray()[index] : null;
260
- return !!tab && !tab.disabled;
261
- }
262
- /**
263
- * Sets focus on the HTML element for the label wrapper and scrolls it into the view if
264
- * scrolling is enabled.
265
- */
266
- setTabFocus(tabIndex) {
267
- if (this.showPaginationControls) {
268
- this.scrollToLabel(tabIndex);
269
- }
270
- if (this.items?.length) {
271
- this.items.toArray()[tabIndex].focus();
272
- // Do not let the browser manage scrolling to focus the element, this will be handled
273
- // by using translation. In LTR, the scroll left should be 0. In RTL, the scroll width
274
- // should be the full width minus the offset width.
275
- const containerEl = this.tabListContainer.nativeElement;
276
- const dir = this.getLayoutDirection();
277
- if (dir === 'ltr') {
278
- containerEl.scrollLeft = 0;
279
- }
280
- else {
281
- containerEl.scrollLeft = containerEl.scrollWidth - containerEl.offsetWidth;
282
- }
283
- }
284
- }
285
- /** The layout direction of the containing app. */
286
- getLayoutDirection() {
287
- return this.dir?.value === 'rtl' ? 'rtl' : 'ltr';
288
- }
289
- /** Performs the CSS transformation on the tab list that will cause the list to scroll. */
290
- updateTabScrollPosition() {
291
- if (this.disablePagination) {
292
- return;
293
- }
294
- const scrollDistance = this.scrollDistance;
295
- const translateX = this.getLayoutDirection() === 'ltr' ? -scrollDistance : scrollDistance;
296
- // Don't use `translate3d` here because we don't want to create a new layer. A new layer
297
- // seems to cause flickering and overflow in Internet Explorer. For example, the ink bar
298
- // and ripples will exceed the boundaries of the visible tab bar.
299
- // See: https://github.com/angular/components/issues/10276
300
- // We round the `transform` here, because transforms with sub-pixel precision cause some
301
- // browsers to blur the content of the element.
302
- this.tabList.nativeElement.style.transform = `translateX(${Math.round(translateX)}px)`;
303
- // Setting the `transform` on IE will change the scroll offset of the parent, causing the
304
- // position to be thrown off in some cases. We have to reset it ourselves to ensure that
305
- // it doesn't get thrown off. Note that we scope it only to IE and Edge, because messing
306
- // with the scroll position throws off Chrome 71+ in RTL mode (see #14689).
307
- if (this.platform.TRIDENT || this.platform.EDGE) {
308
- this.tabListContainer.nativeElement.scrollLeft = 0;
309
- }
310
- }
311
- /**
312
- * Moves the tab list in the 'before' or 'after' direction (towards the beginning of the list or
313
- * the end of the list, respectively). The distance to scroll is computed to be a third of the
314
- * length of the tab list view window.
315
- *
316
- * This is an expensive call that forces a layout reflow to compute box and scroll metrics and
317
- * should be called sparingly.
318
- */
319
- scrollHeader(direction) {
320
- const viewLength = this.tabListContainer.nativeElement.offsetWidth;
321
- // Move the scroll distance one-third the length of the tab list's viewport.
322
- const scrollAmount = (direction === 'before' ? -1 : 1) * viewLength * SCROLL_DISTANCE;
323
- return this.scrollTo(this.scrollDistance + scrollAmount);
324
- }
325
- /** Handles click events on the pagination arrows. */
326
- handlePaginatorClick(direction) {
327
- this.stopInterval();
328
- this.scrollHeader(direction);
329
- }
330
- /**
331
- * Moves the tab list such that the desired tab label (marked by index) is moved into view.
332
- *
333
- * This is an expensive call that forces a layout reflow to compute box and scroll metrics and
334
- * should be called sparingly.
335
- */
336
- scrollToLabel(labelIndex) {
337
- if (this.disablePagination) {
338
- return;
339
- }
340
- const selectedLabel = this.items ? this.items.toArray()[labelIndex] : null;
341
- if (!selectedLabel) {
342
- return;
343
- }
344
- // The view length is the visible width of the tab labels.
345
- const viewLength = this.tabListContainer.nativeElement.offsetWidth;
346
- const { offsetLeft, offsetWidth } = selectedLabel.elementRef.nativeElement;
347
- let labelBeforePos;
348
- let labelAfterPos;
349
- if (this.getLayoutDirection() === 'ltr') {
350
- labelBeforePos = offsetLeft;
351
- labelAfterPos = labelBeforePos + offsetWidth;
352
- }
353
- else {
354
- labelAfterPos = this.tabList.nativeElement.offsetWidth - offsetLeft;
355
- labelBeforePos = labelAfterPos - offsetWidth;
356
- }
357
- const beforeVisiblePos = this.scrollDistance;
358
- const afterVisiblePos = this.scrollDistance + viewLength;
359
- if (labelBeforePos < beforeVisiblePos) {
360
- // Scroll header to move label to the before direction
361
- this.scrollDistance -= beforeVisiblePos - labelBeforePos + EXAGGERATED_OVERSCROLL;
362
- }
363
- else if (labelAfterPos > afterVisiblePos) {
364
- // Scroll header to move label to the after direction
365
- this.scrollDistance += labelAfterPos - afterVisiblePos + EXAGGERATED_OVERSCROLL;
366
- }
367
- }
368
- /**
369
- * Evaluate whether the pagination controls should be displayed. If the scroll width of the
370
- * tab list is wider than the size of the header container, then the pagination controls should
371
- * be shown.
372
- *
373
- * This is an expensive call that forces a layout reflow to compute box and scroll metrics and
374
- * should be called sparingly.
375
- */
376
- checkPaginationEnabled() {
377
- if (this.disablePagination) {
378
- this.showPaginationControls = false;
379
- }
380
- else {
381
- const isEnabled = this.tabList.nativeElement.scrollWidth > this.elementRef.nativeElement.offsetWidth;
382
- if (!isEnabled) {
383
- this.scrollDistance = 0;
384
- }
385
- if (isEnabled !== this.showPaginationControls) {
386
- this.changeDetectorRef.markForCheck();
387
- }
388
- this.showPaginationControls = isEnabled;
389
- }
390
- }
391
- /**
392
- * Evaluate whether the before and after controls should be enabled or disabled.
393
- * If the header is at the beginning of the list (scroll distance is equal to 0) then disable the
394
- * before button. If the header is at the end of the list (scroll distance is equal to the
395
- * maximum distance we can scroll), then disable the after button.
396
- *
397
- * This is an expensive call that forces a layout reflow to compute box and scroll metrics and
398
- * should be called sparingly.
399
- */
400
- checkScrollingControls() {
401
- if (this.disablePagination) {
402
- this.disableScrollAfter = this.disableScrollBefore = true;
403
- }
404
- else {
405
- // Check if the pagination arrows should be activated.
406
- this.disableScrollBefore = this.scrollDistance === 0;
407
- this.disableScrollAfter = this.scrollDistance === this.getMaxScrollDistance();
408
- this.changeDetectorRef.markForCheck();
409
- }
410
- }
411
- /**
412
- * Determines what is the maximum length in pixels that can be set for the scroll distance. This
413
- * is equal to the difference in width between the tab list container and tab header container.
414
- *
415
- * This is an expensive call that forces a layout reflow to compute box and scroll metrics and
416
- * should be called sparingly.
417
- */
418
- getMaxScrollDistance() {
419
- const lengthOfTabList = this.tabList.nativeElement.scrollWidth;
420
- const viewLength = this.tabListContainer.nativeElement.offsetWidth;
421
- return lengthOfTabList - viewLength || 0;
422
- }
423
- /** Stops the currently-running paginator interval. */
424
- stopInterval() {
425
- this.stopScrolling.next();
426
- }
427
- /**
428
- * Handles the user pressing down on one of the paginators.
429
- * Starts scrolling the header after a certain amount of time.
430
- * @param direction In which direction the paginator should be scrolled.
431
- */
432
- handlePaginatorPress(direction, mouseEvent) {
433
- // Don't start auto scrolling for right mouse button clicks. Note that we shouldn't have to
434
- // null check the `button`, but we do it so we don't break tests that use fake events.
435
- if (mouseEvent && mouseEvent.button != null && mouseEvent.button !== 0) {
436
- return;
437
- }
438
- // Avoid overlapping timers.
439
- this.stopInterval();
440
- // Start a timer after the delay and keep firing based on the interval.
441
- timer(HEADER_SCROLL_DELAY, HEADER_SCROLL_INTERVAL)
442
- // Keep the timer going until something tells it to stop or the component is destroyed.
443
- .pipe(takeUntilDestroyed(this.destroyRef), takeUntil(this.stopScrolling))
444
- .subscribe(() => {
445
- const { maxScrollDistance, distance } = this.scrollHeader(direction);
446
- // Stop the timer if we've reached the start or the end.
447
- if (distance === 0 || distance >= maxScrollDistance) {
448
- this.stopInterval();
449
- }
450
- });
451
- }
452
- /**
453
- * Scrolls the header to a given position.
454
- * @param position Position to which to scroll.
455
- * @returns Information on the current scroll distance and the maximum.
456
- */
457
- scrollTo(position) {
458
- if (this.disablePagination) {
459
- return { maxScrollDistance: 0, distance: 0 };
460
- }
461
- const maxScrollDistance = this.getMaxScrollDistance();
462
- this.scrollDistance = Math.max(0, Math.min(maxScrollDistance, position));
463
- // Mark that the scroll distance has changed so that after the view is checked, the CSS
464
- // transformation can move the header.
465
- this.scrollDistanceChanged = true;
466
- this.checkScrollingControls();
467
- return { maxScrollDistance, distance: this.scrollDistance };
468
- }
469
- updateScrollPosition() {
470
- const maxScrollDistance = this.getMaxScrollDistance();
471
- if (this.scrollDistance > maxScrollDistance) {
472
- this.scrollTo(maxScrollDistance);
473
- }
474
- }
475
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqPaginatedTabHeader, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
476
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: KbqPaginatedTabHeader, inputs: { selectedIndex: ["selectedIndex", "selectedIndex", numberAttribute], disablePagination: ["disablePagination", "disablePagination", booleanAttribute], vertical: ["vertical", "vertical", booleanAttribute] }, ngImport: i0 }); }
477
- }
478
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqPaginatedTabHeader, decorators: [{
479
- type: Directive
480
- }], ctorParameters: () => [], propDecorators: { selectedIndex: [{
481
- type: Input,
482
- args: [{ transform: numberAttribute }]
483
- }], disablePagination: [{
484
- type: Input,
485
- args: [{ transform: booleanAttribute }]
486
- }], vertical: [{
487
- type: Input,
488
- args: [{ transform: booleanAttribute }]
489
- }] } });
490
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGVkLXRhYi1oZWFkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL3RhYnMvcGFnaW5hdGVkLXRhYi1oZWFkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRSxPQUFPLEVBQWEsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDckUsT0FBTyxFQUFFLCtCQUErQixFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBSUgsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixVQUFVLEVBQ1YsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sZUFBZSxFQUdsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNoRyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxJQUFJLFlBQVksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0Is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QztRQUNqRCxDQUFDO1FBRUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUV0RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUV6RSx1RkFBdUY7UUFDdkYsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFFOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDaEUsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBRXRELElBQUksSUFBSSxDQUFDLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1lBQzFDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0wsQ0FBQztrSUFsaUJpQixxQkFBcUI7c0hBQXJCLHFCQUFxQiw4REFFbkIsZUFBZSxpRUF3RWYsZ0JBQWdCLHNDQUdoQixnQkFBZ0I7OzRGQTdFbEIscUJBQXFCO2tCQUQxQyxTQUFTO3dEQUlGLGFBQWE7c0JBRGhCLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQXdFRyxpQkFBaUI7c0JBQXhELEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSWxDLFFBQVE7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZvY3VzYWJsZU9wdGlvbiwgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aW9uLCBEaXJlY3Rpb25hbGl0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IEVOVEVSLCBoYXNNb2RpZmllcktleSwgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGFzc2l2ZUxpc3RlbmVyT3B0aW9ucywgUGxhdGZvcm0gfSBmcm9tICdAYW5ndWxhci9jZGsvcGxhdGZvcm0nO1xuaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRDaGVja2VkLFxuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBib29sZWFuQXR0cmlidXRlLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRGlyZWN0aXZlLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgbnVtYmVyQXR0cmlidXRlLFxuICAgIE9uRGVzdHJveSxcbiAgICBRdWVyeUxpc3Rcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTkQsIEhPTUUsIExFRlRfQVJST1csIFJJR0hUX0FSUk9XLCBVUF9BUlJPVyB9IGZyb20gJ0Brb29iaXEvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IEtCUV9XSU5ET1cgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvY29yZSc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlLCBvZiBhcyBvYnNlcnZhYmxlT2YsIFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKiBDb25maWcgdXNlZCB0byBiaW5kIHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzICovXG5jb25zdCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMgPSBub3JtYWxpemVQYXNzaXZlTGlzdGVuZXJPcHRpb25zKHsgcGFzc2l2ZTogdHJ1ZSB9KSBhcyBFdmVudExpc3RlbmVyT3B0aW9ucztcblxuLyoqXG4gKiBUaGUgZGlyZWN0aW9ucyB0aGF0IHNjcm9sbGluZyBjYW4gZ28gaW4gd2hlbiB0aGUgaGVhZGVyJ3MgdGFicyBleGNlZWQgdGhlIGhlYWRlciB3aWR0aC4gJ0FmdGVyJ1xuICogd2lsbCBzY3JvbGwgdGhlIGhlYWRlciB0b3dhcmRzIHRoZSBlbmQgb2YgdGhlIHRhYnMgbGlzdCBhbmQgJ2JlZm9yZScgd2lsbCBzY3JvbGwgdG93YXJkcyB0aGVcbiAqIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAqL1xuZXhwb3J0IHR5cGUgU2Nyb2xsRGlyZWN0aW9uID0gJ2FmdGVyJyB8ICdiZWZvcmUnO1xuXG4vKipcbiAqIFRoZSBkaXN0YW5jZSBpbiBwaXhlbHMgdGhhdCB3aWxsIGJlIG92ZXJzaG90IHdoZW4gc2Nyb2xsaW5nIGEgdGFiIGxhYmVsIGludG8gdmlldy4gVGhpcyBoZWxwc1xuICogcHJvdmlkZSBhIHNtYWxsIGFmZm9yZGFuY2UgdG8gdGhlIGxhYmVsIG5leHQgdG8gaXQuXG4gKi9cbmNvbnN0IEVYQUdHRVJBVEVEX09WRVJTQ1JPTEwgPSA2MDtcblxuLyoqXG4gKiBBbW91bnQgb2YgbWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIHN0YXJ0aW5nIHRvIHNjcm9sbCB0aGUgaGVhZGVyIGF1dG9tYXRpY2FsbHkuXG4gKiBTZXQgYSBsaXR0bGUgY29uc2VydmF0aXZlbHkgaW4gb3JkZXIgdG8gaGFuZGxlIGZha2UgZXZlbnRzIGRpc3BhdGNoZWQgb24gdG91Y2ggZGV2aWNlcy5cbiAqL1xuY29uc3QgSEVBREVSX1NDUk9MTF9ERUxBWSA9IDY1MDtcblxuLyoqXG4gKiBJbnRlcnZhbCBpbiBtaWxsaXNlY29uZHMgYXQgd2hpY2ggdG8gc2Nyb2xsIHRoZSBoZWFkZXJcbiAqIHdoaWxlIHRoZSB1c2VyIGlzIGhvbGRpbmcgdGhlaXIgcG9pbnRlci5cbiAqL1xuY29uc3QgSEVBREVSX1NDUk9MTF9JTlRFUlZBTCA9IDEwMDtcblxuY29uc3QgVklFV1BPUlRfVEhST1RUTEVfVElNRSA9IDE1MDtcbmNvbnN0IFNDUk9MTF9ESVNUQU5DRSA9IDAuODtcblxuLyoqIEl0ZW0gaW5zaWRlIGEgcGFnaW5hdGVkIHRhYiBoZWFkZXIuICovXG5leHBvcnQgdHlwZSBLYnFQYWdpbmF0ZWRUYWJIZWFkZXJJdGVtID0gRm9jdXNhYmxlT3B0aW9uICYgeyBlbGVtZW50UmVmOiBFbGVtZW50UmVmIH07XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYSB0YWIgaGVhZGVyIHRoYXQgc3VwcG9ydGVkIHBhZ2luYXRpb24uXG4gKiBAZG9jcy1wcml2YXRlXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEticVBhZ2luYXRlZFRhYkhlYWRlciBpbXBsZW1lbnRzIEFmdGVyQ29udGVudENoZWNrZWQsIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIFRoZSBpbmRleCBvZiB0aGUgYWN0aXZlIHRhYi4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KVxuICAgIGdldCBzZWxlY3RlZEluZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEluZGV4O1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZFZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZWQgPSB0aGlzLl9zZWxlY3RlZEluZGV4ICE9PSBjb2VyY2VkVmFsdWU7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkSW5kZXggPSBjb2VyY2VkVmFsdWU7XG5cbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyPy51cGRhdGVBY3RpdmVJdGVtKGNvZXJjZWRWYWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2VsZWN0ZWRJbmRleCA9IDA7XG5cbiAgICAvKiogVHJhY2tzIHdoaWNoIGVsZW1lbnQgaGFzIGZvY3VzOyB1c2VkIGZvciBrZXlib2FyZCBuYXZpZ2F0aW9uICovXG4gICAgZ2V0IGZvY3VzSW5kZXgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMua2V5TWFuYWdlciA/IHRoaXMua2V5TWFuYWdlci5hY3RpdmVJdGVtSW5kZXghIDogMDtcbiAgICB9XG5cbiAgICAvKiogV2hlbiB0aGUgZm9jdXMgaW5kZXggaXMgc2V0LCB3ZSBtdXN0IG1hbnVhbGx5IHNlbmQgZm9jdXMgdG8gdGhlIGNvcnJlY3QgbGFiZWwgKi9cbiAgICBzZXQgZm9jdXNJbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkSW5kZXgodmFsdWUpIHx8IHRoaXMuZm9jdXNJbmRleCA9PT0gdmFsdWUgfHwgIXRoaXMua2V5TWFuYWdlcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldEFjdGl2ZUl0ZW0odmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBTZXRzIHRoZSBkaXN0YW5jZSBpbiBwaXhlbHMgdGhhdCB0aGUgdGFiIGhlYWRlciBzaG91bGQgYmUgdHJhbnNmb3JtZWQgaW4gdGhlIFgtYXhpcy4gKi9cbiAgICBnZXQgc2Nyb2xsRGlzdGFuY2UoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Njcm9sbERpc3RhbmNlO1xuICAgIH1cblxuICAgIHNldCBzY3JvbGxEaXN0YW5jZSh2OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fc2Nyb2xsRGlzdGFuY2UgPSBNYXRoLm1heCgwLCBNYXRoLm1pbih0aGlzLmdldE1heFNjcm9sbERpc3RhbmNlKCksIHYpKTtcblxuICAgICAgICAvLyBNYXJrIHRoYXQgdGhlIHNjcm9sbCBkaXN0YW5jZSBoYXMgY2hhbmdlZCBzbyB0aGF0IGFmdGVyIHRoZSB2aWV3IGlzIGNoZWNrZWQsIHRoZSBDU1NcbiAgICAgICAgLy8gdHJhbnNmb3JtYXRpb24gY2FuIG1vdmUgdGhlIGhlYWRlci5cbiAgICAgICAgdGhpcy5zY3JvbGxEaXN0YW5jZUNoYW5nZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNoZWNrU2Nyb2xsaW5nQ29udHJvbHMoKTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGRpc3RhbmNlIGluIHBpeGVscyB0aGF0IHRoZSB0YWIgbGFiZWxzIHNob3VsZCBiZSB0cmFuc2xhdGVkIHRvIHRoZSBsZWZ0LiAqL1xuICAgIHByaXZhdGUgX3Njcm9sbERpc3RhbmNlID0gMDtcblxuICAgIGFic3RyYWN0IHJlYWRvbmx5IGl0ZW1zOiBRdWVyeUxpc3Q8S2JxUGFnaW5hdGVkVGFiSGVhZGVySXRlbT47XG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgdGFiTGlzdENvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgdGFiTGlzdDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgbmV4dFBhZ2luYXRvcjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG4gICAgYWJzdHJhY3QgcmVhZG9ubHkgcHJldmlvdXNQYWdpbmF0b3I6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gICAgLyoqIEV2ZW50IGVtaXR0ZWQgd2hlbiB0aGUgb3B0aW9uIGlzIHNlbGVjdGVkLiAqL1xuICAgIHJlYWRvbmx5IHNlbGVjdEZvY3VzZWRJbmRleDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKiBFdmVudCBlbWl0dGVkIHdoZW4gYSBsYWJlbCBpcyBmb2N1c2VkLiAqL1xuICAgIHJlYWRvbmx5IGluZGV4Rm9jdXNlZDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBjb250cm9scyBmb3IgcGFnaW5hdGlvbiBzaG91bGQgYmUgZGlzcGxheWVkICovXG4gICAgc2hvd1BhZ2luYXRpb25Db250cm9scyA9IGZhbHNlO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIHRhYiBsaXN0IGNhbiBiZSBzY3JvbGxlZCBtb3JlIHRvd2FyZHMgdGhlIGVuZCBvZiB0aGUgdGFiIGxhYmVsIGxpc3QuICovXG4gICAgZGlzYWJsZVNjcm9sbEFmdGVyID0gdHJ1ZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0YWIgbGlzdCBjYW4gYmUgc2Nyb2xsZWQgbW9yZSB0b3dhcmRzIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRhYiBsYWJlbCBsaXN0LiAqL1xuICAgIGRpc2FibGVTY3JvbGxCZWZvcmUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciBwYWdpbmF0aW9uIHNob3VsZCBiZSBkaXNhYmxlZC4gVGhpcyBjYW4gYmUgdXNlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeVxuICAgICAqIGxheW91dCByZWNhbGN1bGF0aW9ucyBpZiBpdCdzIGtub3duIHRoYXQgcGFnaW5hdGlvbiB3b24ndCBiZSByZXF1aXJlZC5cbiAgICAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgZGlzYWJsZVBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSB0YWJzIHNob3VsZCBiZSBkaXNwbGF5ZWQgdmVydGljYWxseS4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBzZXQgdmVydGljYWwodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdmVydGljYWwgPSB2YWx1ZTtcblxuICAgICAgICBpZiAodGhpcy5fdmVydGljYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZVBhZ2luYXRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHZlcnRpY2FsKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVydGljYWw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdmVydGljYWwgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBudW1iZXIgb2YgdGFiIGxhYmVscyB0aGF0IGFyZSBkaXNwbGF5ZWQgb24gdGhlIGhlYWRlci4gV2hlbiB0aGlzIGNoYW5nZXMsIHRoZSBoZWFkZXJcbiAgICAgKiBzaG91bGQgcmUtZXZhbHVhdGUgdGhlIHNjcm9sbCBwb3NpdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHRhYkxhYmVsQ291bnQ6IG51bWJlcjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzY3JvbGwgZGlzdGFuY2UgaGFzIGNoYW5nZWQgYW5kIHNob3VsZCBiZSBhcHBsaWVkIGFmdGVyIHRoZSB2aWV3IGlzIGNoZWNrZWQuICovXG4gICAgcHJpdmF0ZSBzY3JvbGxEaXN0YW5jZUNoYW5nZWQ6IGJvb2xlYW47XG5cbiAgICAvKiogVXNlZCB0byBtYW5hZ2UgZm9jdXMgYmV0d2VlbiB0aGUgdGFicy4gKi9cbiAgICBwcml2YXRlIGtleU1hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxLYnFQYWdpbmF0ZWRUYWJIZWFkZXJJdGVtPjtcblxuICAgIC8qKiBDYWNoZWQgdGV4dCBjb250ZW50IG9mIHRoZSBoZWFkZXIuICovXG4gICAgcHJpdmF0ZSBjdXJyZW50VGV4dENvbnRlbnQ6IHN0cmluZztcblxuICAgIC8qKiBTdHJlYW0gdGhhdCB3aWxsIHN0b3AgdGhlIGF1dG9tYXRlZCBzY3JvbGxpbmcuICovXG4gICAgcHJpdmF0ZSBzdG9wU2Nyb2xsaW5nID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBoZWFkZXIgc2hvdWxkIHNjcm9sbCB0byB0aGUgc2VsZWN0ZWQgaW5kZXggYWZ0ZXIgdGhlIHZpZXcgaGFzIGJlZW4gY2hlY2tlZC4gKi9cbiAgICBwcml2YXRlIHNlbGVjdGVkSW5kZXhDaGFuZ2VkID0gZmFsc2U7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdwb3J0UnVsZXIgPSBpbmplY3QoVmlld3BvcnRSdWxlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBsYXRmb3JtID0gaW5qZWN0KFBsYXRmb3JtKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpciA9IGluamVjdChEaXJlY3Rpb25hbGl0eSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChLQlFfV0lORE9XKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAvLyBCaW5kIHRoZSBgbW91c2VsZWF2ZWAgZXZlbnQgb24gdGhlIG91dHNpZGUgc2luY2UgaXQgZG9lc24ndCBjaGFuZ2UgYW55dGhpbmcgaW4gdGhlIHZpZXcuXG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGZyb21FdmVudCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlbGVhdmUnKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zdG9wSW50ZXJ2YWwoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgdXNlciBoYXMgc2VsZWN0ZWQgYW4gaXRlbSB2aWEgdGhlIGtleWJvYXJkLiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgdGhlc2UgZXZlbnRzIG1hbnVhbGx5LCBiZWNhdXNlIHdlIHdhbnQgdG8gYmluZCBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgZnJvbUV2ZW50KHRoaXMucHJldmlvdXNQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oYW5kbGVQYWdpbmF0b3JQcmVzcygnYmVmb3JlJykpO1xuXG4gICAgICAgIGZyb21FdmVudCh0aGlzLm5leHRQYWdpbmF0b3IubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCBwYXNzaXZlRXZlbnRMaXN0ZW5lck9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oYW5kbGVQYWdpbmF0b3JQcmVzcygnYWZ0ZXInKSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgICAgICBjb25zdCBkaXJDaGFuZ2UgPSB0aGlzLmRpciA/IHRoaXMuZGlyLmNoYW5nZSA6IG9ic2VydmFibGVPZignbHRyJyk7XG4gICAgICAgIGNvbnN0IHJlc2l6ZSA9IHRoaXMudmlld3BvcnRSdWxlci5jaGFuZ2UoVklFV1BPUlRfVEhST1RUTEVfVElNRSk7XG5cbiAgICAgICAgY29uc3QgcmVhbGlnbiA9ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMua2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXI8S2JxUGFnaW5hdGVkVGFiSGVhZGVySXRlbT4odGhpcy5pdGVtcykud2l0aEhvcml6b250YWxPcmllbnRhdGlvbihcbiAgICAgICAgICAgIHRoaXMuZ2V0TGF5b3V0RGlyZWN0aW9uKClcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmtleU1hbmFnZXIudXBkYXRlQWN0aXZlSXRlbSh0aGlzLl9zZWxlY3RlZEluZGV4KTtcblxuICAgICAgICAvLyBEZWZlciB0aGUgZmlyc3QgY2FsbCBpbiBvcmRlciB0byBhbGxvdyBmb3Igc2xvd2VyIGJyb3dzZXJzIHRvIGxheSBvdXQgdGhlIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGhlbHBzIGluIGNhc2VzIHdoZXJlIHRoZSB1c2VyIGxhbmRzIGRpcmVjdGx5IG9uIGEgcGFnZSB3aXRoIHBhZ2luYXRlZCB0YWJzLlxuICAgICAgICB0eXBlb2YgdGhpcy53aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyB0aGlzLndpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVhbGlnbilcbiAgICAgICAgICAgIDogcmVhbGlnbigpO1xuXG4gICAgICAgIC8vIE9uIGRpciBjaGFuZ2Ugb3Igd2luZG93IHJlc2l6ZSwgcmVhbGlnbiB0aGUgaW5rIGJhciBhbmQgdXBkYXRlIHRoZSBvcmllbnRhdGlvbiBvZlxuICAgICAgICAvLyB0aGUga2V5IG1hbmFnZXIgaWYgdGhlIGRpcmVjdGlvbiBoYXMgY2hhbmdlZC5cbiAgICAgICAgbWVyZ2UoZGlyQ2hhbmdlLCByZXNpemUsIHRoaXMuaXRlbXMuY2hhbmdlcylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkZWZlciB0aGlzIHRvIGdpdmUgdGhlIGJyb3dzZXIgc29tZSB0aW1lIHRvIHJlY2FsY3VsYXRlXG4gICAgICAgICAgICAgICAgLy8gdGhlIGVsZW1lbnQgZGltZW5zaW9ucy4gVGhlIGNhbGwgaGFzIHRvIGJlIHdyYXBwZWQgaW4gYE5nWm9uZS5ydW5gLFxuICAgICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIHZpZXdwb3J0IGNoYW5nZSBoYW5kbGVyIHJ1bnMgb3V0c2lkZSBvZiBBbmd1bGFyLlxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PlxuICAgICAgICAgICAgICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxpZ24oKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLndpdGhIb3Jpem9udGFsT3JpZW50YXRpb24odGhpcy5nZXRMYXlvdXREaXJlY3Rpb24oKSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGNoYW5nZSBpbiB0aGUgZm9jdXMga2V5IG1hbmFnZXIgd2UgbmVlZCB0byBlbWl0IHRoZSBgaW5kZXhGb2N1c2VkYFxuICAgICAgICAvLyBldmVudCBpbiBvcmRlciB0byBwcm92aWRlIGEgcHVibGljIGV2ZW50IHRoYXQgbm90aWZpZXMgYWJvdXQgZm9jdXMgY2hhbmdlcy4gQWxzbyB3ZSByZWFsaWduXG4gICAgICAgIC8vIHRoZSB0YWJzIGNvbnRhaW5lciBieSBzY3JvbGxpbmcgdGhlIG5ldyBmb2N1c2VkIHRhYiBpbnRvIHRoZSB2aXNpYmxlIHNlY3Rpb24uXG4gICAgICAgIHRoaXMua2V5TWFuYWdlci5jaGFuZ2UucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChuZXdGb2N1c0luZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluZGV4Rm9jdXNlZC5lbWl0KG5ld0ZvY3VzSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5zZXRUYWJGb2N1cyhuZXdGb2N1c0luZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xuICAgICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHRhYiBsYWJlbHMgaGF2ZSBjaGFuZ2VkLCBjaGVjayBpZiBzY3JvbGxpbmcgc2hvdWxkIGJlIGVuYWJsZWRcbiAgICAgICAgaWYgKHRoaXMudGFiTGFiZWxDb3VudCAhPT0gdGhpcy5pdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgdGhpcy50YWJMYWJlbENvdW50ID0gdGhpcy5pdGVtcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGluZGV4IGhhcyBjaGFuZ2VkLCBzY3JvbGwgdG8gdGhlIGxhYmVsIGFuZCBjaGVjayBpZiB0aGUgc2Nyb2xsaW5nIGNvbnRyb2xzXG4gICAgICAgIC8vIHNob3VsZCBiZSBkaXNhYmxlZC5cbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleENoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG9MYWJlbCh0aGlzLl9zZWxlY3RlZEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tTY3JvbGxpbmdDb250cm9scygpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4Q2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoZSBzY3JvbGwgZGlzdGFuY2UgaGFzIGJlZW4gY2hhbmdlZCAodGFiIHNlbGVjdGVkLCBmb2N1c2VkLCBzY3JvbGwgY29udHJvbHMgYWN0aXZhdGVkKSxcbiAgICAgICAgLy8gdGhlbiB0cmFuc2xhdGUgdGhlIGhlYWRlciB0byByZWZsZWN0IHRoaXMuXG4gICAgICAgIGlmICh0aGlzLnNjcm9sbERpc3RhbmNlQ2hhbmdlZCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXN0YW5jZUNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nLmNvbXBsZXRlKCk7XG4gICAgfVxuXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgICAgICAvLyBXZSBkb24ndCBoYW5kbGUgYW55IGtleSBiaW5kaW5ncyB3aXRoIGEgbW9kaWZpZXIga2V5LlxuICAgICAgICBpZiAoaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXlDb2RlO1xuXG4gICAgICAgIGlmIChrZXkgPT09IEhPTUUpIHtcbiAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXRGaXJzdEl0ZW1BY3RpdmUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChrZXkgPT09IEVORCkge1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldExhc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBVUF9BUlJPVyAmJiB0aGlzLnZlcnRpY2FsKSB7XG4gICAgICAgICAgICB0aGlzLmtleU1hbmFnZXIuc2V0UHJldmlvdXNJdGVtQWN0aXZlKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSBET1dOX0FSUk9XICYmIHRoaXMudmVydGljYWwpIHtcbiAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXROZXh0SXRlbUFjdGl2ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gUklHSFRfQVJST1cgJiYgIXRoaXMudmVydGljYWwpIHtcbiAgICAgICAgICAgIHRoaXMua2V5TWFuYWdlci5zZXROZXh0SXRlbUFjdGl2ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gTEVGVF9BUlJPVyAmJiAhdGhpcy52ZXJ0aWNhbCkge1xuICAgICAgICAgICAgdGhpcy5rZXlNYW5hZ2VyLnNldFByZXZpb3VzSXRlbUFjdGl2ZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKFtFTlRFUiwgU1BBQ0VdLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0Rm9jdXNlZEluZGV4LmVtaXQodGhpcy5mb2N1c0luZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChbSE9NRSwgRU5ELCBVUF9BUlJPVywgRE9XTl9BUlJPVywgUklHSFRfQVJST1csIExFRlRfQVJST1csIFNQQUNFLCBFTlRFUl0uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIGZvciB3aGVuIHRoZSBNdXRhdGlvbk9ic2VydmVyIGRldGVjdHMgdGhhdCB0aGUgY29udGVudCBoYXMgY2hhbmdlZC5cbiAgICAgKi9cbiAgICBvbkNvbnRlbnRDaGFuZ2VzKCkge1xuICAgICAgICBjb25zdCB0ZXh0Q29udGVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnRleHRDb250ZW50O1xuXG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGlmZiB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBoZWFkZXIsIGJlY2F1c2UgdGhlIE11dGF0aW9uT2JzZXJ2ZXIgY2FsbGJhY2tcbiAgICAgICAgLy8gd2lsbCBmaXJlIGV2ZW4gaWYgdGhlIHRleHQgY29udGVudCBkaWRuJ3QgY2hhbmdlIHdoaWNoIGlzIGluZWZmaWNpZW50IGFuZCBpcyBwcm9uZVxuICAgICAgICAvLyB0byBpbmZpbml0ZSBsb29wcyBpZiBhIHBvb3JseSBjb25zdHJ1Y3RlZCBleHByZXNzaW9uIGlzIHBhc3NlZCBpbiAoc2VlICMxNDI0OSkuXG4gICAgICAgIGlmICh0ZXh0Q29udGVudCAhPT0gdGhpcy5jdXJyZW50VGV4dENvbnRlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFRleHRDb250ZW50ID0gdGV4dENvbnRlbnQgfHwgJyc7XG5cbiAgICAgICAgICAgIC8vIFRoZSBjb250ZW50IG9ic2VydmVyIHJ1bnMgb3V0c2lkZSB0aGUgYE5nWm9uZWAgYnkgZGVmYXVsdCwgd2hpY2hcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgd2UgbmVlZCB0byBicmluZyB0aGUgY2FsbGJhY2sgYmFjayBpbiBvdXJzZWx2ZXMuXG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHZpZXcgd2hldGhlciBwYWdpbmF0aW9uIHNob3VsZCBiZSBlbmFibGVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIFdBUk5JTkc6IENhbGxpbmcgdGhpcyBtZXRob2QgY2FuIGJlIHZlcnkgY29zdGx5IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlLiBJdCBzaG91bGQgYmUgY2FsbGVkXG4gICAgICogYXMgaW5mcmVxdWVudGx5IGFzIHBvc3NpYmxlIGZyb20gb3V0c2lkZSBvZiB0aGUgVGFicyBjb21wb25lbnQgYXMgaXQgY2F1c2VzIGEgcmVmbG93IG9mIHRoZVxuICAgICAqIHBhZ2UuXG4gICAgICovXG4gICAgdXBkYXRlUGFnaW5hdGlvbigpIHtcbiAgICAgICAgdGhpcy5jaGVja1BhZ2luYXRpb25FbmFibGVkKCk7XG4gICAgICAgIHRoaXMuY2hlY2tTY3JvbGxpbmdDb250cm9scygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVRhYlNjcm9sbFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyBpZiBhbiBpbmRleCBpcyB2YWxpZC4gIElmIHRoZSB0YWJzIGFyZSBub3QgcmVhZHkgeWV0LCB3ZSBhc3N1bWUgdGhhdCB0aGUgdXNlciBpc1xuICAgICAqIHByb3ZpZGluZyBhIHZhbGlkIGluZGV4IGFuZCByZXR1cm4gdHJ1ZS5cbiAgICAgKi9cbiAgICBpc1ZhbGlkSW5kZXgoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFiID0gdGhpcy5pdGVtcyA/IHRoaXMuaXRlbXMudG9BcnJheSgpW2luZGV4XSA6IG51bGw7XG5cbiAgICAgICAgcmV0dXJuICEhdGFiICYmICF0YWIuZGlzYWJsZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBmb2N1cyBvbiB0aGUgSFRNTCBlbGVtZW50IGZvciB0aGUgbGFiZWwgd3JhcHBlciBhbmQgc2Nyb2xscyBpdCBpbnRvIHRoZSB2aWV3IGlmXG4gICAgICogc2Nyb2xsaW5nIGlzIGVuYWJsZWQuXG4gICAgICovXG4gICAgc2V0VGFiRm9jdXModGFiSW5kZXg6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbFRvTGFiZWwodGFiSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pdGVtcy50b0FycmF5KClbdGFiSW5kZXhdLmZvY3VzKCk7XG5cbiAgICAgICAgICAgIC8vIERvIG5vdCBsZXQgdGhlIGJyb3dzZXIgbWFuYWdlIHNjcm9sbGluZyB0byBmb2N1cyB0aGUgZWxlbWVudCwgdGhpcyB3aWxsIGJlIGhhbmRsZWRcbiAgICAgICAgICAgIC8vIGJ5IHVzaW5nIHRyYW5zbGF0aW9uLiBJbiBMVFIsIHRoZSBzY3JvbGwgbGVmdCBzaG91bGQgYmUgMC4gSW4gUlRMLCB0aGUgc2Nyb2xsIHdpZHRoXG4gICAgICAgICAgICAvLyBzaG91bGQgYmUgdGhlIGZ1bGwgd2lkdGggbWludXMgdGhlIG9mZnNldCB3aWR0aC5cbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsID0gdGhpcy50YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBkaXIgPSB0aGlzLmdldExheW91dERpcmVjdGlvbigpO1xuXG4gICAgICAgICAgICBpZiAoZGlyID09PSAnbHRyJykge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5lckVsLnNjcm9sbExlZnQgPSAwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb250YWluZXJFbC5zY3JvbGxMZWZ0ID0gY29udGFpbmVyRWwuc2Nyb2xsV2lkdGggLSBjb250YWluZXJFbC5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBUaGUgbGF5b3V0IGRpcmVjdGlvbiBvZiB0aGUgY29udGFpbmluZyBhcHAuICovXG4gICAgZ2V0TGF5b3V0RGlyZWN0aW9uKCk6IERpcmVjdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpcj8udmFsdWUgPT09ICdydGwnID8gJ3J0bCcgOiAnbHRyJztcbiAgICB9XG5cbiAgICAvKiogUGVyZm9ybXMgdGhlIENTUyB0cmFuc2Zvcm1hdGlvbiBvbiB0aGUgdGFiIGxpc3QgdGhhdCB3aWxsIGNhdXNlIHRoZSBsaXN0IHRvIHNjcm9sbC4gKi9cbiAgICB1cGRhdGVUYWJTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNjcm9sbERpc3RhbmNlID0gdGhpcy5zY3JvbGxEaXN0YW5jZTtcbiAgICAgICAgY29uc3QgdHJhbnNsYXRlWCA9IHRoaXMuZ2V0TGF5b3V0RGlyZWN0aW9uKCkgPT09ICdsdHInID8gLXNjcm9sbERpc3RhbmNlIDogc2Nyb2xsRGlzdGFuY2U7XG5cbiAgICAgICAgLy8gRG9uJ3QgdXNlIGB0cmFuc2xhdGUzZGAgaGVyZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gY3JlYXRlIGEgbmV3IGxheWVyLiBBIG5ldyBsYXllclxuICAgICAgICAvLyBzZWVtcyB0byBjYXVzZSBmbGlja2VyaW5nIGFuZCBvdmVyZmxvdyBpbiBJbnRlcm5ldCBFeHBsb3Jlci4gRm9yIGV4YW1wbGUsIHRoZSBpbmsgYmFyXG4gICAgICAgIC8vIGFuZCByaXBwbGVzIHdpbGwgZXhjZWVkIHRoZSBib3VuZGFyaWVzIG9mIHRoZSB2aXNpYmxlIHRhYiBiYXIuXG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9pc3N1ZXMvMTAyNzZcbiAgICAgICAgLy8gV2Ugcm91bmQgdGhlIGB0cmFuc2Zvcm1gIGhlcmUsIGJlY2F1c2UgdHJhbnNmb3JtcyB3aXRoIHN1Yi1waXhlbCBwcmVjaXNpb24gY2F1c2Ugc29tZVxuICAgICAgICAvLyBicm93c2VycyB0byBibHVyIHRoZSBjb250ZW50IG9mIHRoZSBlbGVtZW50LlxuICAgICAgICB0aGlzLnRhYkxpc3QubmF0aXZlRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgke01hdGgucm91bmQodHJhbnNsYXRlWCl9cHgpYDtcblxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBgdHJhbnNmb3JtYCBvbiBJRSB3aWxsIGNoYW5nZSB0aGUgc2Nyb2xsIG9mZnNldCBvZiB0aGUgcGFyZW50LCBjYXVzaW5nIHRoZVxuICAgICAgICAvLyBwb3NpdGlvbiB0byBiZSB0aHJvd24gb2ZmIGluIHNvbWUgY2FzZXMuIFdlIGhhdmUgdG8gcmVzZXQgaXQgb3Vyc2VsdmVzIHRvIGVuc3VyZSB0aGF0XG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgZ2V0IHRocm93biBvZmYuIE5vdGUgdGhhdCB3ZSBzY29wZSBpdCBvbmx5IHRvIElFIGFuZCBFZGdlLCBiZWNhdXNlIG1lc3NpbmdcbiAgICAgICAgLy8gd2l0aCB0aGUgc2Nyb2xsIHBvc2l0aW9uIHRocm93cyBvZmYgQ2hyb21lIDcxKyBpbiBSVEwgbW9kZSAoc2VlICMxNDY4OSkuXG4gICAgICAgIGlmICh0aGlzLnBsYXRmb3JtLlRSSURFTlQgfHwgdGhpcy5wbGF0Zm9ybS5FREdFKSB7XG4gICAgICAgICAgICB0aGlzLnRhYkxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1vdmVzIHRoZSB0YWIgbGlzdCBpbiB0aGUgJ2JlZm9yZScgb3IgJ2FmdGVyJyBkaXJlY3Rpb24gKHRvd2FyZHMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBvclxuICAgICAqIHRoZSBlbmQgb2YgdGhlIGxpc3QsIHJlc3BlY3RpdmVseSkuIFRoZSBkaXN0YW5jZSB0byBzY3JvbGwgaXMgY29tcHV0ZWQgdG8gYmUgYSB0aGlyZCBvZiB0aGVcbiAgICAgKiBsZW5ndGggb2YgdGhlIHRhYiBsaXN0IHZpZXcgd2luZG93LlxuICAgICAqXG4gICAgICogVGhpcyBpcyBhbiBleHBlbnNpdmUgY2FsbCB0aGF0IGZvcmNlcyBhIGxheW91dCByZWZsb3cgdG8gY29tcHV0ZSBib3ggYW5kIHNjcm9sbCBtZXRyaWNzIGFuZFxuICAgICAqIHNob3VsZCBiZSBjYWxsZWQgc3BhcmluZ2x5LlxuICAgICAqL1xuICAgIHNjcm9sbEhlYWRlcihkaXJlY3Rpb246IFNjcm9sbERpcmVjdGlvbikge1xuICAgICAgICBjb25zdCB2aWV3TGVuZ3RoID0gdGhpcy50YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG5cbiAgICAgICAgLy8gTW92ZSB0aGUgc2Nyb2xsIGRpc3RhbmNlIG9uZS10aGlyZCB0aGUgbGVuZ3RoIG9mIHRoZSB0YWIgbGlzdCdzIHZpZXdwb3J0LlxuICAgICAgICBjb25zdCBzY3JvbGxBbW91bnQgPSAoZGlyZWN0aW9uID09PSAnYmVmb3JlJyA/IC0xIDogMSkgKiB2aWV3TGVuZ3RoICogU0NST0xMX0RJU1RBTkNFO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnNjcm9sbFRvKHRoaXMuc2Nyb2xsRGlzdGFuY2UgKyBzY3JvbGxBbW91bnQpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIGNsaWNrIGV2ZW50cyBvbiB0aGUgcGFnaW5hdGlvbiBhcnJvd3MuICovXG4gICAgaGFuZGxlUGFnaW5hdG9yQ2xpY2soZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24pIHtcbiAgICAgICAgdGhpcy5zdG9wSW50ZXJ2YWwoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxIZWFkZXIoZGlyZWN0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNb3ZlcyB0aGUgdGFiIGxpc3Qgc3VjaCB0aGF0IHRoZSBkZXNpcmVkIHRhYiBsYWJlbCAobWFya2VkIGJ5IGluZGV4KSBpcyBtb3ZlZCBpbnRvIHZpZXcuXG4gICAgICpcbiAgICAgKiBUaGlzIGlzIGFuIGV4cGVuc2l2ZSBjYWxsIHRoYXQgZm9yY2VzIGEgbGF5b3V0IHJlZmxvdyB0byBjb21wdXRlIGJveCBhbmQgc2Nyb2xsIG1ldHJpY3MgYW5kXG4gICAgICogc2hvdWxkIGJlIGNhbGxlZCBzcGFyaW5nbHkuXG4gICAgICovXG4gICAgc2Nyb2xsVG9MYWJlbChsYWJlbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZVBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGFiZWwgPSB0aGlzLml0ZW1zID8gdGhpcy5pdGVtcy50b0FycmF5KClbbGFiZWxJbmRleF0gOiBudWxsO1xuXG4gICAgICAgIGlmICghc2VsZWN0ZWRMYWJlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHZpZXcgbGVuZ3RoIGlzIHRoZSB2aXNpYmxlIHdpZHRoIG9mIHRoZSB0YWIgbGFiZWxzLlxuICAgICAgICBjb25zdCB2aWV3TGVuZ3RoID0gdGhpcy50YWJMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgIGNvbnN0IHsgb2Zmc2V0TGVmdCwgb2Zmc2V0V2lkdGggfSA9IHNlbGVjdGVkTGFiZWwuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgIGxldCBsYWJlbEJlZm9yZVBvczogbnVtYmVyO1xuICAgICAgICBsZXQgbGFiZWxBZnRlclBvczogbnVtYmVyO1xuXG4gICAgICAgIGlmICh0aGlzLmdldExheW91dERpcmVjdGlvbigpID09PSAnbHRyJykge1xuICAgICAgICAgICAgbGFiZWxCZWZvcmVQb3MgPSBvZmZzZXRMZWZ0O1xuICAgICAgICAgICAgbGFiZWxBZnRlclBvcyA9IGxhYmVsQmVmb3JlUG9zICsgKG9mZnNldFdpZHRoIGFzIG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYWJlbEFmdGVyUG9zID0gdGhpcy50YWJMaXN0Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggLSBvZmZzZXRMZWZ0O1xuICAgICAgICAgICAgbGFiZWxCZWZvcmVQb3MgPSBsYWJlbEFmdGVyUG9zIC0gb2Zmc2V0V2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBiZWZvcmVWaXNpYmxlUG9zID0gdGhpcy5zY3JvbGxEaXN0YW5jZTtcbiAgICAgICAgY29uc3QgYWZ0ZXJWaXNpYmxlUG9zID0gdGhpcy5zY3JvbGxEaXN0YW5jZSArIHZpZXdMZW5ndGg7XG5cbiAgICAgICAgaWYgKGxhYmVsQmVmb3JlUG9zIDwgYmVmb3JlVmlzaWJsZVBvcykge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIGhlYWRlciB0byBtb3ZlIGxhYmVsIHRvIHRoZSBiZWZvcmUgZGlyZWN0aW9uXG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3RhbmNlIC09IGJlZm9yZVZpc2libGVQb3MgLSBsYWJlbEJlZm9yZVBvcyArIEVYQUdHRVJBVEVEX09WRVJTQ1JPTEw7XG4gICAgICAgIH0gZWxzZSBpZiAobGFiZWxBZnRlclBvcyA+IGFmdGVyVmlzaWJsZVBvcykge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIGhlYWRlciB0byBtb3ZlIGxhYmVsIHRvIHRoZSBhZnRlciBkaXJlY3Rpb25cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzdGFuY2UgKz0gbGFiZWxBZnRlclBvcyAtIGFmdGVyVmlzaWJsZVBvcyArIEVYQUdHRVJBVEVEX09WRVJTQ1JPTEw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZSB3aGV0aGVyIHRoZSBwYWdpbmF0aW9uIGNvbnRyb2xzIHNob3VsZCBiZSBkaXNwbGF5ZWQuIElmIHRoZSBzY3JvbGwgd2lkdGggb2YgdGhlXG4gICAgICogdGFiIGxpc3QgaXMgd2lkZXIgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgaGVhZGVyIGNvbnRhaW5lciwgdGhlbiB0aGUgcGFnaW5hdGlvbiBjb250cm9scyBzaG91bGRcbiAgICAgKiBiZSBzaG93bi5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcbiAgICAgKiBzaG91bGQgYmUgY2FsbGVkIHNwYXJpbmdseS5cbiAgICAgKi9cbiAgICBjaGVja1BhZ2luYXRpb25FbmFibGVkKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5zaG93UGFnaW5hdGlvbkNvbnRyb2xzID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpc0VuYWJsZWQgPSB0aGlzLnRhYkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aCA+IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgICAgICBpZiAoIWlzRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsRGlzdGFuY2UgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoaXNFbmFibGVkICE9PSB0aGlzLnNob3dQYWdpbmF0aW9uQ29udHJvbHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnNob3dQYWdpbmF0aW9uQ29udHJvbHMgPSBpc0VuYWJsZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFdmFsdWF0ZSB3aGV0aGVyIHRoZSBiZWZvcmUgYW5kIGFmdGVyIGNvbnRyb2xzIHNob3VsZCBiZSBlbmFibGVkIG9yIGRpc2FibGVkLlxuICAgICAqIElmIHRoZSBoZWFkZXIgaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCAoc2Nyb2xsIGRpc3RhbmNlIGlzIGVxdWFsIHRvIDApIHRoZW4gZGlzYWJsZSB0aGVcbiAgICAgKiBiZWZvcmUgYnV0dG9uLiBJZiB0aGUgaGVhZGVyIGlzIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgKHNjcm9sbCBkaXN0YW5jZSBpcyBlcXVhbCB0byB0aGVcbiAgICAgKiBtYXhpbXVtIGRpc3RhbmNlIHdlIGNhbiBzY3JvbGwpLCB0aGVuIGRpc2FibGUgdGhlIGFmdGVyIGJ1dHRvbi5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcbiAgICAgKiBzaG91bGQgYmUgY2FsbGVkIHNwYXJpbmdseS5cbiAgICAgKi9cbiAgICBjaGVja1Njcm9sbGluZ0NvbnRyb2xzKCkge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2Nyb2xsQWZ0ZXIgPSB0aGlzLmRpc2FibGVTY3JvbGxCZWZvcmUgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIHBhZ2luYXRpb24gYXJyb3dzIHNob3VsZCBiZSBhY3RpdmF0ZWQuXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTY3JvbGxCZWZvcmUgPSB0aGlzLnNjcm9sbERpc3RhbmNlID09PSAwO1xuICAgICAgICAgICAgdGhpcy5kaXNhYmxlU2Nyb2xsQWZ0ZXIgPSB0aGlzLnNjcm9sbERpc3RhbmNlID09PSB0aGlzLmdldE1heFNjcm9sbERpc3RhbmNlKCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBpbiBwaXhlbHMgdGhhdCBjYW4gYmUgc2V0IGZvciB0aGUgc2Nyb2xsIGRpc3RhbmNlLiBUaGlzXG4gICAgICogaXMgZXF1YWwgdG8gdGhlIGRpZmZlcmVuY2UgaW4gd2lkdGggYmV0d2VlbiB0aGUgdGFiIGxpc3QgY29udGFpbmVyIGFuZCB0YWIgaGVhZGVyIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIFRoaXMgaXMgYW4gZXhwZW5zaXZlIGNhbGwgdGhhdCBmb3JjZXMgYSBsYXlvdXQgcmVmbG93IHRvIGNvbXB1dGUgYm94IGFuZCBzY3JvbGwgbWV0cmljcyBhbmRcbiAgICAgKiBzaG91bGQgYmUgY2FsbGVkIHNwYXJpbmdseS5cbiAgICAgKi9cbiAgICBnZXRNYXhTY3JvbGxEaXN0YW5jZSgpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBsZW5ndGhPZlRhYkxpc3QgPSB0aGlzLnRhYkxpc3QubmF0aXZlRWxlbWVudC5zY3JvbGxXaWR0aDtcbiAgICAgICAgY29uc3Qgdmlld0xlbmd0aCA9IHRoaXMudGFiTGlzdENvbnRhaW5lci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIHJldHVybiBsZW5ndGhPZlRhYkxpc3QgLSB2aWV3TGVuZ3RoIHx8IDA7XG4gICAgfVxuXG4gICAgLyoqIFN0b3BzIHRoZSBjdXJyZW50bHktcnVubmluZyBwYWdpbmF0b3IgaW50ZXJ2YWwuICAqL1xuICAgIHN0b3BJbnRlcnZhbCgpIHtcbiAgICAgICAgdGhpcy5zdG9wU2Nyb2xsaW5nLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIHRoZSB1c2VyIHByZXNzaW5nIGRvd24gb24gb25lIG9mIHRoZSBwYWdpbmF0b3JzLlxuICAgICAqIFN0YXJ0cyBzY3JvbGxpbmcgdGhlIGhlYWRlciBhZnRlciBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUuXG4gICAgICogQHBhcmFtIGRpcmVjdGlvbiBJbiB3aGljaCBkaXJlY3Rpb24gdGhlIHBhZ2luYXRvciBzaG91bGQgYmUgc2Nyb2xsZWQuXG4gICAgICovXG4gICAgaGFuZGxlUGFnaW5hdG9yUHJlc3MoZGlyZWN0aW9uOiBTY3JvbGxEaXJlY3Rpb24sIG1vdXNlRXZlbnQ/OiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIC8vIERvbid0IHN0YXJ0IGF1dG8gc2Nyb2xsaW5nIGZvciByaWdodCBtb3VzZSBidXR0b24gY2xpY2tzLiBOb3RlIHRoYXQgd2Ugc2hvdWxkbid0IGhhdmUgdG9cbiAgICAgICAgLy8gbnVsbCBjaGVjayB0aGUgYGJ1dHRvbmAsIGJ1dCB3ZSBkbyBpdCBzbyB3ZSBkb24ndCBicmVhayB0ZXN0cyB0aGF0IHVzZSBmYWtlIGV2ZW50cy5cblxuICAgICAgICBpZiAobW91c2VFdmVudCAmJiBtb3VzZUV2ZW50LmJ1dHRvbiAhPSBudWxsICYmIG1vdXNlRXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBdm9pZCBvdmVybGFwcGluZyB0aW1lcnMuXG4gICAgICAgIHRoaXMuc3RvcEludGVydmFsKCk7XG5cbiAgICAgICAgLy8gU3RhcnQgYSB0aW1lciBhZnRlciB0aGUgZGVsYXkgYW5kIGtlZXAgZmlyaW5nIGJhc2VkIG9uIHRoZSBpbnRlcnZhbC5cbiAgICAgICAgdGltZXIoSEVBREVSX1NDUk9MTF9ERUxBWSwgSEVBREVSX1NDUk9MTF9JTlRFUlZBTClcbiAgICAgICAgICAgIC8vIEtlZXAgdGhlIHRpbWVyIGdvaW5nIHVudGlsIHNvbWV0aGluZyB0ZWxscyBpdCB0byBzdG9wIG9yIHRoZSBjb21wb25lbnQgaXMgZGVzdHJveWVkLlxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZiksIHRha2VVbnRpbCh0aGlzLnN0b3BTY3JvbGxpbmcpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBtYXhTY3JvbGxEaXN0YW5jZSwgZGlzdGFuY2UgfSA9IHRoaXMuc2Nyb2xsSGVhZGVyKGRpcmVjdGlvbik7XG5cbiAgICAgICAgICAgICAgICAvLyBTdG9wIHRoZSB0aW1lciBpZiB3ZSd2ZSByZWFjaGVkIHRoZSBzdGFydCBvciB0aGUgZW5kLlxuICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA9PT0gMCB8fCBkaXN0YW5jZSA+PSBtYXhTY3JvbGxEaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0b3BJbnRlcnZhbCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBhYnN0cmFjdCBpdGVtU2VsZWN0ZWQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkO1xuXG4gICAgLyoqXG4gICAgICogU2Nyb2xscyB0aGUgaGVhZGVyIHRvIGEgZ2l2ZW4gcG9zaXRpb24uXG4gICAgICogQHBhcmFtIHBvc2l0aW9uIFBvc2l0aW9uIHRvIHdoaWNoIHRvIHNjcm9sbC5cbiAgICAgKiBAcmV0dXJucyBJbmZvcm1hdGlvbiBvbiB0aGUgY3VycmVudCBzY3JvbGwgZGlzdGFuY2UgYW5kIHRoZSBtYXhpbXVtLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2Nyb2xsVG8ocG9zaXRpb246IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWF4U2Nyb2xsRGlzdGFuY2U6IDAsIGRpc3RhbmNlOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXhTY3JvbGxEaXN0YW5jZSA9IHRoaXMuZ2V0TWF4U2Nyb2xsRGlzdGFuY2UoKTtcblxuICAgICAgICB0aGlzLnNjcm9sbERpc3RhbmNlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obWF4U2Nyb2xsRGlzdGFuY2UsIHBvc2l0aW9uKSk7XG5cbiAgICAgICAgLy8gTWFyayB0aGF0IHRoZSBzY3JvbGwgZGlzdGFuY2UgaGFzIGNoYW5nZWQgc28gdGhhdCBhZnRlciB0aGUgdmlldyBpcyBjaGVja2VkLCB0aGUgQ1NTXG4gICAgICAgIC8vIHRyYW5zZm9ybWF0aW9uIGNhbiBtb3ZlIHRoZSBoZWFkZXIuXG4gICAgICAgIHRoaXMuc2Nyb2xsRGlzdGFuY2VDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaGVja1Njcm9sbGluZ0NvbnRyb2xzKCk7XG5cbiAgICAgICAgcmV0dXJuIHsgbWF4U2Nyb2xsRGlzdGFuY2UsIGRpc3RhbmNlOiB0aGlzLnNjcm9sbERpc3RhbmNlIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTY3JvbGxQb3NpdGlvbigpIHtcbiAgICAgICAgY29uc3QgbWF4U2Nyb2xsRGlzdGFuY2UgPSB0aGlzLmdldE1heFNjcm9sbERpc3RhbmNlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsRGlzdGFuY2UgPiBtYXhTY3JvbGxEaXN0YW5jZSkge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxUbyhtYXhTY3JvbGxEaXN0YW5jZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
@@ -1,11 +0,0 @@
1
- export * from './tab-body.component';
2
- export * from './tab-content.directive';
3
- export * from './tab-group.component';
4
- export * from './tab-header.component';
5
- export * from './tab-label-wrapper.directive';
6
- export * from './tab-label.directive';
7
- export * from './tab-nav-bar';
8
- export * from './tab.component';
9
- export * from './tabs-animations';
10
- export * from './tabs.module';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbXBvbmVudHMvdGFicy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGVBQWUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdGFiLWJvZHkuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLWNvbnRlbnQuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLWdyb3VwLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYi1oZWFkZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLWxhYmVsLXdyYXBwZXIuZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLWxhYmVsLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYi1uYXYtYmFyJztcbmV4cG9ydCAqIGZyb20gJy4vdGFiLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL3RhYnMtYW5pbWF0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL3RhYnMubW9kdWxlJztcbiJdfQ==