@koobiq/components 18.38.1 → 19.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (891) 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 +4 -4
  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/code-block/code-block.scss +2 -2
  39. package/core/common-behaviors/index.d.ts +0 -1
  40. package/core/formatters/date/formatter.pipe.d.ts +13 -0
  41. package/core/formatters/index.d.ts +4 -4
  42. package/core/formatters/number/formatter.d.ts +3 -3
  43. package/core/forms/forms-module.d.ts +1 -1
  44. package/core/forms/forms.directive.d.ts +2 -2
  45. package/core/highlight/highlight.pipe.d.ts +1 -1
  46. package/core/highlight/index.d.ts +3 -3
  47. package/core/line/line.d.ts +1 -6
  48. package/core/option/_option-theme.scss +5 -2
  49. package/core/option/action.d.ts +1 -1
  50. package/core/option/optgroup.d.ts +1 -1
  51. package/core/option/option-module.d.ts +5 -5
  52. package/core/option/option.d.ts +4 -1
  53. package/core/pop-up/constants.d.ts +4 -0
  54. package/core/pop-up/pop-up-trigger.d.ts +5 -5
  55. package/core/pop-up/pop-up.d.ts +1 -1
  56. package/core/select/common.d.ts +1 -1
  57. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +1 -1
  58. package/core/selection/pseudo-checkbox/pseudo-checkbox.module.d.ts +3 -3
  59. package/core/styles/common/_select.scss +1 -1
  60. package/core/styles/theming/_scrollbar-theme.scss +18 -12
  61. package/core/styles/visual/_layout.scss +10 -0
  62. package/core/utils/utils.d.ts +3 -0
  63. package/datepicker/calendar-body.component.d.ts +1 -1
  64. package/datepicker/calendar-header.component.d.ts +1 -1
  65. package/datepicker/calendar.component.d.ts +1 -1
  66. package/datepicker/datepicker-input.directive.d.ts +1 -1
  67. package/datepicker/datepicker-module.d.ts +15 -15
  68. package/datepicker/datepicker-toggle.component.d.ts +2 -2
  69. package/datepicker/datepicker.component.d.ts +2 -2
  70. package/datepicker/month-view.component.d.ts +1 -1
  71. package/divider/divider.component.d.ts +5 -1
  72. package/divider/divider.module.d.ts +3 -3
  73. package/dl/dl.component.d.ts +3 -3
  74. package/dl/dl.module.d.ts +4 -4
  75. package/dropdown/dropdown-content.directive.d.ts +1 -1
  76. package/dropdown/dropdown-item.component.d.ts +1 -1
  77. package/dropdown/dropdown-trigger.directive.d.ts +1 -1
  78. package/dropdown/dropdown.component.d.ts +1 -1
  79. package/dropdown/dropdown.module.d.ts +8 -8
  80. package/dropdown/dropdown.scss +1 -0
  81. package/ellipsis-center/ellipsis-center.directive.d.ts +2 -2
  82. package/empty-state/empty-state.component.d.ts +5 -5
  83. package/empty-state/empty-state.module.d.ts +4 -4
  84. package/fesm2022/koobiq-components-accordion.mjs +459 -40
  85. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  86. package/fesm2022/koobiq-components-actions-panel.mjs +18 -18
  87. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  88. package/fesm2022/koobiq-components-alert.mjs +28 -36
  89. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  90. package/fesm2022/koobiq-components-app-switcher.mjs +49 -52
  91. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  92. package/fesm2022/koobiq-components-autocomplete.mjs +31 -25
  93. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-badge.mjs +20 -21
  95. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-breadcrumbs.mjs +339 -36
  97. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-button-toggle.mjs +25 -22
  99. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-button.mjs +25 -26
  101. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-checkbox.mjs +18 -16
  103. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-clamped-text.mjs +9 -9
  105. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-code-block.mjs +15 -16
  107. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-content-panel.mjs +55 -57
  109. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-core.mjs +326 -356
  111. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-datepicker.mjs +107 -90
  113. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-divider.mjs +16 -14
  115. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-dl.mjs +19 -20
  117. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-dropdown.mjs +47 -48
  119. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-dynamic-translation.mjs +16 -19
  121. package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-ellipsis-center.mjs +10 -10
  123. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-empty-state.mjs +26 -27
  125. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  126. package/fesm2022/koobiq-components-file-upload.mjs +306 -98
  127. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-filter-bar.mjs +258 -234
  129. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-form-field.mjs +84 -92
  131. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-icon.mjs +18 -18
  133. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-inline-edit.mjs +33 -37
  135. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-input.mjs +31 -30
  137. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-link.mjs +11 -10
  139. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-list.mjs +54 -46
  141. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-loader-overlay.mjs +27 -28
  143. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-markdown.mjs +14 -14
  145. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-modal.mjs +76 -64
  147. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-navbar-ic.mjs +76 -54
  149. package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-navbar.mjs +77 -66
  151. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  152. package/fesm2022/koobiq-components-notification-center.mjs +31 -32
  153. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  154. package/fesm2022/koobiq-components-overflow-items.mjs +16 -19
  155. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-popover.mjs +55 -46
  157. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-progress-bar.mjs +18 -19
  159. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-progress-spinner.mjs +21 -23
  161. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  162. package/fesm2022/koobiq-components-radio.mjs +20 -16
  163. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-resizer.mjs +10 -12
  165. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-risk-level.mjs +13 -12
  167. package/fesm2022/koobiq-components-risk-level.mjs.map +1 -1
  168. package/fesm2022/koobiq-components-scrollbar.mjs +17 -18
  169. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  170. package/fesm2022/koobiq-components-search-expandable.mjs +19 -19
  171. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  172. package/fesm2022/koobiq-components-select.mjs +110 -73
  173. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  174. package/fesm2022/koobiq-components-sidebar.mjs +16 -23
  175. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  176. package/fesm2022/koobiq-components-sidepanel.mjs +61 -55
  177. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  178. package/fesm2022/koobiq-components-split-button.mjs +12 -12
  179. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-splitter.mjs +24 -25
  181. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-table.mjs +17 -18
  183. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-tabs.mjs +85 -89
  185. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-tags.mjs +43 -47
  187. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-textarea.mjs +10 -11
  189. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  190. package/fesm2022/koobiq-components-time-range.mjs +38 -40
  191. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  192. package/fesm2022/koobiq-components-timepicker.mjs +65 -14
  193. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  194. package/fesm2022/koobiq-components-timezone.mjs +68 -59
  195. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  196. package/fesm2022/koobiq-components-title.mjs +9 -10
  197. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  198. package/fesm2022/koobiq-components-toast.mjs +23 -24
  199. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  200. package/fesm2022/koobiq-components-toggle.mjs +16 -14
  201. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  202. package/fesm2022/koobiq-components-tooltip.mjs +20 -23
  203. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  204. package/fesm2022/koobiq-components-top-bar.mjs +18 -20
  205. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  206. package/fesm2022/koobiq-components-tree-select.mjs +81 -70
  207. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  208. package/fesm2022/koobiq-components-tree.mjs +77 -66
  209. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  210. package/fesm2022/koobiq-components-username.mjs +31 -37
  211. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  212. package/file-upload/file-upload.d.ts +11 -0
  213. package/file-upload/file-upload.module.d.ts +15 -15
  214. package/file-upload/multiple-file-upload.component.d.ts +12 -9
  215. package/file-upload/{file-drop.d.ts → primitives/file-drop.d.ts} +3 -3
  216. package/file-upload/primitives/file-picker.d.ts +82 -0
  217. package/file-upload/primitives/index.d.ts +2 -0
  218. package/file-upload/public-api.d.ts +2 -1
  219. package/file-upload/single-file-upload.component.d.ts +11 -8
  220. package/filter-bar/filter-bar.d.ts +1 -1
  221. package/filter-bar/filter-search.d.ts +17 -4
  222. package/icon/_icon-button-theme.scss +2 -1
  223. package/inline-edit/inline-edit.d.ts +2 -3
  224. package/input/_input-theme.scss +2 -1
  225. package/input/input-number-validators.d.ts +2 -2
  226. package/input/input-number.d.ts +1 -1
  227. package/input/input-password.d.ts +1 -1
  228. package/input/input.d.ts +2 -2
  229. package/input/input.module.d.ts +8 -8
  230. package/link/_link-theme.scss +3 -0
  231. package/link/link.component.d.ts +1 -1
  232. package/link/link.module.d.ts +3 -3
  233. package/list/_list-theme.scss +6 -0
  234. package/list/list-selection.component.d.ts +6 -4
  235. package/list/list.component.d.ts +2 -2
  236. package/list/list.module.d.ts +6 -6
  237. package/list/list.scss +1 -0
  238. package/loader-overlay/loader-overlay.component.d.ts +4 -4
  239. package/loader-overlay/loader-overlay.module.d.ts +5 -5
  240. package/modal/css-unit.pipe.d.ts +1 -1
  241. package/modal/modal.component.d.ts +1 -1
  242. package/modal/modal.directive.d.ts +4 -4
  243. package/modal/modal.module.d.ts +10 -10
  244. package/modal/modal.service.d.ts +1 -1
  245. package/navbar/_navbar-theme.scss +1 -0
  246. package/navbar/navbar-brand.component.d.ts +1 -1
  247. package/navbar/navbar-item.component.d.ts +7 -7
  248. package/navbar/navbar-toggle.component.d.ts +1 -1
  249. package/navbar/navbar-toggle.scss +1 -1
  250. package/navbar/navbar.component.d.ts +4 -4
  251. package/navbar/navbar.module.d.ts +10 -10
  252. package/navbar/vertical-navbar.component.d.ts +1 -1
  253. package/navbar/vertical-navbar.scss +5 -2
  254. package/navbar-ic/navbar-ic-header.d.ts +3 -0
  255. package/navbar-ic/navbar-ic-item.d.ts +18 -0
  256. package/navbar-ic/navbar-ic.d.ts +13 -7
  257. package/notification-center/notification-center.d.ts +5 -5
  258. package/overflow-items/overflow-items.d.ts +1 -1
  259. package/package.json +9 -140
  260. package/popover/popover-confirm.component.d.ts +2 -2
  261. package/popover/popover.component.d.ts +9 -9
  262. package/popover/popover.module.d.ts +9 -9
  263. package/popover/popover.scss +3 -2
  264. package/prebuilt-themes/dark-theme.css +1 -1
  265. package/prebuilt-themes/light-theme.css +1 -1
  266. package/prebuilt-themes/theme.css +1 -1
  267. package/progress-bar/progress-bar.component.d.ts +3 -3
  268. package/progress-bar/progress-bar.module.d.ts +3 -3
  269. package/progress-spinner/progress-spinner.component.d.ts +3 -3
  270. package/progress-spinner/progress-spinner.module.d.ts +4 -4
  271. package/progress-spinner/progress-spinner.scss +1 -0
  272. package/radio/_radio-theme.scss +2 -1
  273. package/radio/radio-tokens.scss +1 -0
  274. package/radio/radio.component.d.ts +10 -5
  275. package/radio/radio.module.d.ts +3 -3
  276. package/risk-level/risk-level.component.d.ts +1 -1
  277. package/risk-level/risk-level.module.d.ts +4 -4
  278. package/schematics/migrations/icons-replacement/README.md +5 -1
  279. package/schematics/migrations/icons-replacement/index.js +1 -1
  280. package/schematics/ng-add/index.js +4 -5
  281. package/scrollbar/_scrollbar-component-theme.scss +16 -14
  282. package/select/select-option.directive.d.ts +1 -1
  283. package/select/select.component.d.ts +6 -5
  284. package/select/select.module.d.ts +10 -10
  285. package/sidebar/sidebar.component.d.ts +3 -3
  286. package/sidebar/sidebar.module.d.ts +3 -3
  287. package/sidepanel/sidepanel-container.component.d.ts +1 -1
  288. package/sidepanel/sidepanel-directives.d.ts +5 -5
  289. package/sidepanel/sidepanel.module.d.ts +9 -9
  290. package/splitter/splitter.component.d.ts +4 -4
  291. package/splitter/splitter.module.d.ts +3 -3
  292. package/table/_table-theme.scss +1 -0
  293. package/table/table.component.d.ts +2 -2
  294. package/table/table.module.d.ts +4 -4
  295. package/tabs/paginated-tab-header.d.ts +1 -1
  296. package/tabs/tab-body.component.d.ts +2 -2
  297. package/tabs/tab-content.directive.d.ts +1 -1
  298. package/tabs/tab-group.component.d.ts +5 -5
  299. package/tabs/tab-header.component.d.ts +1 -1
  300. package/tabs/tab-label-wrapper.directive.d.ts +1 -1
  301. package/tabs/tab-label.directive.d.ts +1 -1
  302. package/tabs/tab.component.d.ts +3 -3
  303. package/tabs/tabs.module.d.ts +15 -15
  304. package/tags/tag-input.d.ts +1 -1
  305. package/tags/tag-list.component.d.ts +1 -1
  306. package/tags/tag.component.d.ts +4 -4
  307. package/tags/tag.module.d.ts +4 -4
  308. package/textarea/textarea.component.d.ts +1 -1
  309. package/textarea/textarea.module.d.ts +4 -4
  310. package/timepicker/timepicker.directive.d.ts +15 -5
  311. package/timepicker/timepicker.module.d.ts +5 -5
  312. package/timezone/cities-by-filter.pipe.d.ts +1 -1
  313. package/timezone/timezone-option.component.d.ts +1 -1
  314. package/timezone/timezone-option.directive.d.ts +1 -1
  315. package/timezone/timezone-select.component.d.ts +2 -2
  316. package/timezone/timezone.module.d.ts +15 -15
  317. package/timezone/utc-offset.pipe.d.ts +1 -1
  318. package/title/title.directive.d.ts +1 -1
  319. package/title/title.module.d.ts +3 -3
  320. package/toggle/toggle.component.d.ts +1 -1
  321. package/toggle/toggle.module.d.ts +3 -3
  322. package/tooltip/tooltip.component.d.ts +3 -3
  323. package/top-bar/top-bar.d.ts +1 -1
  324. package/tree/node.d.ts +1 -1
  325. package/tree/outlet.d.ts +1 -1
  326. package/tree/padding.directive.d.ts +1 -1
  327. package/tree/toggle.d.ts +3 -3
  328. package/tree/tree-base.d.ts +2 -2
  329. package/tree/tree-option.component.d.ts +1 -1
  330. package/tree/tree-selection.component.d.ts +1 -1
  331. package/tree/tree.d.ts +1 -1
  332. package/tree/tree.module.d.ts +11 -11
  333. package/tree-select/tree-select.component.d.ts +2 -2
  334. package/tree-select/tree-select.module.d.ts +9 -9
  335. package/core/common-behaviors/focus-monitor.d.ts +0 -19
  336. package/esm2022/accordion/accordion-content.mjs +0 -19
  337. package/esm2022/accordion/accordion-header.mjs +0 -19
  338. package/esm2022/accordion/accordion-item.mjs +0 -25
  339. package/esm2022/accordion/accordion-trigger.component.mjs +0 -48
  340. package/esm2022/accordion/accordion.component.mjs +0 -41
  341. package/esm2022/accordion/accordion.module.mjs +0 -44
  342. package/esm2022/accordion/index.mjs +0 -2
  343. package/esm2022/accordion/koobiq-components-accordion.mjs +0 -5
  344. package/esm2022/accordion/public-api.mjs +0 -7
  345. package/esm2022/actions-panel/actions-panel-config.mjs +0 -55
  346. package/esm2022/actions-panel/actions-panel-container.mjs +0 -217
  347. package/esm2022/actions-panel/actions-panel-ref.mjs +0 -78
  348. package/esm2022/actions-panel/actions-panel.mjs +0 -133
  349. package/esm2022/actions-panel/index.mjs +0 -6
  350. package/esm2022/actions-panel/koobiq-components-actions-panel.mjs +0 -5
  351. package/esm2022/actions-panel/module.mjs +0 -21
  352. package/esm2022/alert/alert.component.mjs +0 -124
  353. package/esm2022/alert/alert.module.mjs +0 -40
  354. package/esm2022/alert/index.mjs +0 -2
  355. package/esm2022/alert/koobiq-components-alert.mjs +0 -5
  356. package/esm2022/alert/public-api.mjs +0 -3
  357. package/esm2022/app-switcher/app-switcher-animations.mjs +0 -18
  358. package/esm2022/app-switcher/app-switcher-dropdown-app.mjs +0 -75
  359. package/esm2022/app-switcher/app-switcher-dropdown-site.mjs +0 -60
  360. package/esm2022/app-switcher/app-switcher.mjs +0 -446
  361. package/esm2022/app-switcher/app-switcher.module.mjs +0 -45
  362. package/esm2022/app-switcher/index.mjs +0 -2
  363. package/esm2022/app-switcher/kbq-app-switcher-list-item.mjs +0 -84
  364. package/esm2022/app-switcher/koobiq-components-app-switcher.mjs +0 -5
  365. package/esm2022/app-switcher/public-api.mjs +0 -7
  366. package/esm2022/autocomplete/autocomplete-origin.directive.mjs +0 -21
  367. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +0 -540
  368. package/esm2022/autocomplete/autocomplete.component.mjs +0 -178
  369. package/esm2022/autocomplete/autocomplete.module.mjs +0 -38
  370. package/esm2022/autocomplete/index.mjs +0 -2
  371. package/esm2022/autocomplete/koobiq-components-autocomplete.mjs +0 -5
  372. package/esm2022/autocomplete/public-api.mjs +0 -5
  373. package/esm2022/badge/badge.component.mjs +0 -124
  374. package/esm2022/badge/badge.module.mjs +0 -36
  375. package/esm2022/badge/index.mjs +0 -2
  376. package/esm2022/badge/koobiq-components-badge.mjs +0 -5
  377. package/esm2022/badge/public-api.mjs +0 -3
  378. package/esm2022/breadcrumbs/breadcrumbs.mjs +0 -268
  379. package/esm2022/breadcrumbs/breadcrumbs.module.mjs +0 -31
  380. package/esm2022/breadcrumbs/breadcrumbs.types.mjs +0 -2
  381. package/esm2022/breadcrumbs/index.mjs +0 -2
  382. package/esm2022/breadcrumbs/koobiq-components-breadcrumbs.mjs +0 -5
  383. package/esm2022/breadcrumbs/public-api.mjs +0 -4
  384. package/esm2022/button/button.component.mjs +0 -180
  385. package/esm2022/button/button.dropdown-trigger.directive.mjs +0 -28
  386. package/esm2022/button/button.module.mjs +0 -41
  387. package/esm2022/button/index.mjs +0 -2
  388. package/esm2022/button/koobiq-components-button.mjs +0 -5
  389. package/esm2022/button/public-api.mjs +0 -4
  390. package/esm2022/button-toggle/button-toggle.component.mjs +0 -384
  391. package/esm2022/button-toggle/button-toggle.module.mjs +0 -19
  392. package/esm2022/button-toggle/index.mjs +0 -2
  393. package/esm2022/button-toggle/koobiq-components-button-toggle.mjs +0 -5
  394. package/esm2022/button-toggle/public-api.mjs +0 -3
  395. package/esm2022/checkbox/checkbox-config.mjs +0 -6
  396. package/esm2022/checkbox/checkbox-module.mjs +0 -19
  397. package/esm2022/checkbox/checkbox-required-validator.mjs +0 -27
  398. package/esm2022/checkbox/checkbox.mjs +0 -295
  399. package/esm2022/checkbox/index.mjs +0 -2
  400. package/esm2022/checkbox/koobiq-components-checkbox.mjs +0 -5
  401. package/esm2022/checkbox/public-api.mjs +0 -5
  402. package/esm2022/clamped-text/clamped-text.mjs +0 -202
  403. package/esm2022/clamped-text/constants.mjs +0 -20
  404. package/esm2022/clamped-text/index.mjs +0 -4
  405. package/esm2022/clamped-text/koobiq-components-clamped-text.mjs +0 -5
  406. package/esm2022/clamped-text/module.mjs +0 -19
  407. package/esm2022/code-block/code-block-highlight.mjs +0 -418
  408. package/esm2022/code-block/code-block.mjs +0 -440
  409. package/esm2022/code-block/code-block.module.mjs +0 -19
  410. package/esm2022/code-block/index.mjs +0 -2
  411. package/esm2022/code-block/koobiq-components-code-block.mjs +0 -5
  412. package/esm2022/code-block/public-api.mjs +0 -5
  413. package/esm2022/code-block/types.mjs +0 -2
  414. package/esm2022/content-panel/content-panel.mjs +0 -432
  415. package/esm2022/content-panel/index.mjs +0 -3
  416. package/esm2022/content-panel/koobiq-components-content-panel.mjs +0 -5
  417. package/esm2022/content-panel/module.mjs +0 -42
  418. package/esm2022/core/animation/animation.mjs +0 -39
  419. package/esm2022/core/animation/fade-animations.mjs +0 -9
  420. package/esm2022/core/animation/index.mjs +0 -4
  421. package/esm2022/core/animation/select-animations.mjs +0 -45
  422. package/esm2022/core/common-behaviors/checkbox.mjs +0 -2
  423. package/esm2022/core/common-behaviors/clipboard.mjs +0 -31
  424. package/esm2022/core/common-behaviors/color.mjs +0 -89
  425. package/esm2022/core/common-behaviors/common-module.mjs +0 -76
  426. package/esm2022/core/common-behaviors/constructor.mjs +0 -2
  427. package/esm2022/core/common-behaviors/disabled.mjs +0 -19
  428. package/esm2022/core/common-behaviors/error-state.mjs +0 -50
  429. package/esm2022/core/common-behaviors/focus-monitor.mjs +0 -37
  430. package/esm2022/core/common-behaviors/hover.mjs +0 -34
  431. package/esm2022/core/common-behaviors/index.mjs +0 -14
  432. package/esm2022/core/common-behaviors/orientation.mjs +0 -2
  433. package/esm2022/core/common-behaviors/read-state.mjs +0 -33
  434. package/esm2022/core/common-behaviors/size.mjs +0 -2
  435. package/esm2022/core/common-behaviors/tabindex.mjs +0 -20
  436. package/esm2022/core/datetime/date-adapter.mjs +0 -14
  437. package/esm2022/core/datetime/date-formats.mjs +0 -3
  438. package/esm2022/core/datetime/index.mjs +0 -3
  439. package/esm2022/core/error/error-state-matcher.mjs +0 -56
  440. package/esm2022/core/form-field/field-sizing-content.mjs +0 -117
  441. package/esm2022/core/form-field/form-field-ref.mjs +0 -10
  442. package/esm2022/core/form-field/index.mjs +0 -3
  443. package/esm2022/core/formatters/date/formatter.mjs +0 -25
  444. package/esm2022/core/formatters/date/formatter.pipe.mjs +0 -380
  445. package/esm2022/core/formatters/filesize/config.mjs +0 -32
  446. package/esm2022/core/formatters/filesize/formatter.mjs +0 -43
  447. package/esm2022/core/formatters/filesize/index.mjs +0 -4
  448. package/esm2022/core/formatters/filesize/size.mjs +0 -65
  449. package/esm2022/core/formatters/index.mjs +0 -146
  450. package/esm2022/core/formatters/number/formatter.mjs +0 -347
  451. package/esm2022/core/forms/forms-module.mjs +0 -24
  452. package/esm2022/core/forms/forms.directive.mjs +0 -66
  453. package/esm2022/core/forms/index.mjs +0 -4
  454. package/esm2022/core/forms/validators.mjs +0 -184
  455. package/esm2022/core/highlight/highlight.pipe.mjs +0 -23
  456. package/esm2022/core/highlight/index.mjs +0 -19
  457. package/esm2022/core/index.mjs +0 -2
  458. package/esm2022/core/koobiq-components-core.mjs +0 -5
  459. package/esm2022/core/line/line.mjs +0 -70
  460. package/esm2022/core/locales/en-US.mjs +0 -210
  461. package/esm2022/core/locales/es-LA.mjs +0 -209
  462. package/esm2022/core/locales/formatters.mjs +0 -193
  463. package/esm2022/core/locales/index.mjs +0 -10
  464. package/esm2022/core/locales/locale-service.mjs +0 -173
  465. package/esm2022/core/locales/locale-service.module.mjs +0 -19
  466. package/esm2022/core/locales/pt-BR.mjs +0 -209
  467. package/esm2022/core/locales/ru-RU.mjs +0 -224
  468. package/esm2022/core/locales/tk-TM.mjs +0 -210
  469. package/esm2022/core/locales/types.mjs +0 -2
  470. package/esm2022/core/navbar/index.mjs +0 -2
  471. package/esm2022/core/navbar/rectangle-item.mjs +0 -40
  472. package/esm2022/core/option/action-container.mjs +0 -23
  473. package/esm2022/core/option/action.mjs +0 -107
  474. package/esm2022/core/option/index.mjs +0 -6
  475. package/esm2022/core/option/optgroup.mjs +0 -37
  476. package/esm2022/core/option/option-module.mjs +0 -20
  477. package/esm2022/core/option/option.mjs +0 -322
  478. package/esm2022/core/overlay/overlay-position-map.mjs +0 -251
  479. package/esm2022/core/pop-up/constants.mjs +0 -55
  480. package/esm2022/core/pop-up/focus-trap-strategy.mjs +0 -6
  481. package/esm2022/core/pop-up/index.mjs +0 -6
  482. package/esm2022/core/pop-up/pop-up-styles.mjs +0 -24
  483. package/esm2022/core/pop-up/pop-up-trigger.mjs +0 -343
  484. package/esm2022/core/pop-up/pop-up.mjs +0 -152
  485. package/esm2022/core/public-api.mjs +0 -24
  486. package/esm2022/core/select/common.mjs +0 -203
  487. package/esm2022/core/select/constants.mjs +0 -25
  488. package/esm2022/core/select/errors.mjs +0 -26
  489. package/esm2022/core/select/events.mjs +0 -2
  490. package/esm2022/core/select/index.mjs +0 -5
  491. package/esm2022/core/selection/constants.mjs +0 -6
  492. package/esm2022/core/selection/index.mjs +0 -4
  493. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +0 -43
  494. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +0 -18
  495. package/esm2022/core/services/measure-scrollbar.service.mjs +0 -42
  496. package/esm2022/core/services/theme.service.mjs +0 -80
  497. package/esm2022/core/title/index.mjs +0 -2
  498. package/esm2022/core/title/title-text-ref.mjs +0 -3
  499. package/esm2022/core/tokens/index.mjs +0 -2
  500. package/esm2022/core/tokens/window.mjs +0 -19
  501. package/esm2022/core/utils/dom.mjs +0 -8
  502. package/esm2022/core/utils/index.mjs +0 -3
  503. package/esm2022/core/utils/public-api.mjs +0 -2
  504. package/esm2022/core/utils/utils.mjs +0 -31
  505. package/esm2022/core/validation/index.mjs +0 -2
  506. package/esm2022/core/validation/validation.mjs +0 -27
  507. package/esm2022/core/version.mjs +0 -3
  508. package/esm2022/datepicker/calendar-body.component.mjs +0 -87
  509. package/esm2022/datepicker/calendar-header.component.mjs +0 -164
  510. package/esm2022/datepicker/calendar.component.mjs +0 -185
  511. package/esm2022/datepicker/datepicker-animations.mjs +0 -32
  512. package/esm2022/datepicker/datepicker-errors.mjs +0 -6
  513. package/esm2022/datepicker/datepicker-input.directive.mjs +0 -1119
  514. package/esm2022/datepicker/datepicker-intl.mjs +0 -40
  515. package/esm2022/datepicker/datepicker-module.mjs +0 -103
  516. package/esm2022/datepicker/datepicker-toggle.component.mjs +0 -170
  517. package/esm2022/datepicker/datepicker.component.mjs +0 -388
  518. package/esm2022/datepicker/index.mjs +0 -2
  519. package/esm2022/datepicker/koobiq-components-datepicker.mjs +0 -5
  520. package/esm2022/datepicker/month-view.component.mjs +0 -148
  521. package/esm2022/datepicker/public-api.mjs +0 -11
  522. package/esm2022/divider/divider.component.mjs +0 -49
  523. package/esm2022/divider/divider.module.mjs +0 -18
  524. package/esm2022/divider/index.mjs +0 -2
  525. package/esm2022/divider/koobiq-components-divider.mjs +0 -5
  526. package/esm2022/divider/public-api.mjs +0 -3
  527. package/esm2022/dl/dl.component.mjs +0 -81
  528. package/esm2022/dl/dl.module.mjs +0 -36
  529. package/esm2022/dl/index.mjs +0 -2
  530. package/esm2022/dl/koobiq-components-dl.mjs +0 -5
  531. package/esm2022/dl/public-api.mjs +0 -3
  532. package/esm2022/dropdown/dropdown-animations.mjs +0 -41
  533. package/esm2022/dropdown/dropdown-content.directive.mjs +0 -61
  534. package/esm2022/dropdown/dropdown-errors.mjs +0 -29
  535. package/esm2022/dropdown/dropdown-item.component.mjs +0 -150
  536. package/esm2022/dropdown/dropdown-trigger.directive.mjs +0 -513
  537. package/esm2022/dropdown/dropdown.component.mjs +0 -293
  538. package/esm2022/dropdown/dropdown.module.mjs +0 -51
  539. package/esm2022/dropdown/dropdown.types.mjs +0 -23
  540. package/esm2022/dropdown/index.mjs +0 -2
  541. package/esm2022/dropdown/koobiq-components-dropdown.mjs +0 -5
  542. package/esm2022/dropdown/public-api.mjs +0 -9
  543. package/esm2022/dynamic-translation/dynamic-translation.mjs +0 -175
  544. package/esm2022/dynamic-translation/index.mjs +0 -3
  545. package/esm2022/dynamic-translation/koobiq-components-dynamic-translation.mjs +0 -5
  546. package/esm2022/dynamic-translation/module.mjs +0 -25
  547. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +0 -120
  548. package/esm2022/ellipsis-center/index.mjs +0 -2
  549. package/esm2022/ellipsis-center/koobiq-components-ellipsis-center.mjs +0 -5
  550. package/esm2022/ellipsis-center/public-api.mjs +0 -2
  551. package/esm2022/empty-state/empty-state.component.mjs +0 -109
  552. package/esm2022/empty-state/empty-state.module.mjs +0 -44
  553. package/esm2022/empty-state/index.mjs +0 -2
  554. package/esm2022/empty-state/koobiq-components-empty-state.mjs +0 -5
  555. package/esm2022/empty-state/public-api.mjs +0 -3
  556. package/esm2022/file-upload/file-drop.mjs +0 -87
  557. package/esm2022/file-upload/file-upload.mjs +0 -71
  558. package/esm2022/file-upload/file-upload.module.mjs +0 -79
  559. package/esm2022/file-upload/index.mjs +0 -2
  560. package/esm2022/file-upload/koobiq-components-file-upload.mjs +0 -5
  561. package/esm2022/file-upload/multiple-file-upload.component.mjs +0 -306
  562. package/esm2022/file-upload/public-api.mjs +0 -6
  563. package/esm2022/file-upload/single-file-upload.component.mjs +0 -257
  564. package/esm2022/filter-bar/filter-bar-button.mjs +0 -31
  565. package/esm2022/filter-bar/filter-bar.mjs +0 -213
  566. package/esm2022/filter-bar/filter-bar.module.mjs +0 -67
  567. package/esm2022/filter-bar/filter-bar.types.mjs +0 -72
  568. package/esm2022/filter-bar/filter-refresher.mjs +0 -34
  569. package/esm2022/filter-bar/filter-reset.mjs +0 -49
  570. package/esm2022/filter-bar/filter-search.mjs +0 -145
  571. package/esm2022/filter-bar/filters.mjs +0 -266
  572. package/esm2022/filter-bar/index.mjs +0 -2
  573. package/esm2022/filter-bar/koobiq-components-filter-bar.mjs +0 -5
  574. package/esm2022/filter-bar/pipe-add.mjs +0 -140
  575. package/esm2022/filter-bar/pipe.directive.mjs +0 -37
  576. package/esm2022/filter-bar/pipes/base-pipe.mjs +0 -146
  577. package/esm2022/filter-bar/pipes/pipe-button.mjs +0 -72
  578. package/esm2022/filter-bar/pipes/pipe-date.mjs +0 -206
  579. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +0 -208
  580. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +0 -188
  581. package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +0 -260
  582. package/esm2022/filter-bar/pipes/pipe-readonly.mjs +0 -68
  583. package/esm2022/filter-bar/pipes/pipe-select.mjs +0 -101
  584. package/esm2022/filter-bar/pipes/pipe-state.mjs +0 -53
  585. package/esm2022/filter-bar/pipes/pipe-text.mjs +0 -104
  586. package/esm2022/filter-bar/pipes/pipe-title.mjs +0 -102
  587. package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +0 -142
  588. package/esm2022/filter-bar/public-api.mjs +0 -22
  589. package/esm2022/form-field/cleaner.mjs +0 -28
  590. package/esm2022/form-field/error.mjs +0 -20
  591. package/esm2022/form-field/fieldset.mjs +0 -84
  592. package/esm2022/form-field/form-field-control.mjs +0 -4
  593. package/esm2022/form-field/form-field.mjs +0 -447
  594. package/esm2022/form-field/form-field.module.mjs +0 -87
  595. package/esm2022/form-field/hint.mjs +0 -36
  596. package/esm2022/form-field/index.mjs +0 -2
  597. package/esm2022/form-field/koobiq-components-form-field.mjs +0 -5
  598. package/esm2022/form-field/label.mjs +0 -19
  599. package/esm2022/form-field/password-hint.mjs +0 -165
  600. package/esm2022/form-field/password-toggle.mjs +0 -129
  601. package/esm2022/form-field/prefix.mjs +0 -19
  602. package/esm2022/form-field/public-api.mjs +0 -16
  603. package/esm2022/form-field/reactive-password-hint.mjs +0 -66
  604. package/esm2022/form-field/stepper.mjs +0 -144
  605. package/esm2022/form-field/suffix.mjs +0 -18
  606. package/esm2022/form-field/validate.directive.mjs +0 -190
  607. package/esm2022/icon/icon-button.component.mjs +0 -64
  608. package/esm2022/icon/icon-item.component.mjs +0 -31
  609. package/esm2022/icon/icon.component.mjs +0 -56
  610. package/esm2022/icon/icon.module.mjs +0 -27
  611. package/esm2022/icon/index.mjs +0 -2
  612. package/esm2022/icon/koobiq-components-icon.mjs +0 -5
  613. package/esm2022/icon/public-api.mjs +0 -5
  614. package/esm2022/index.mjs +0 -2
  615. package/esm2022/inline-edit/index.mjs +0 -3
  616. package/esm2022/inline-edit/inline-edit.mjs +0 -382
  617. package/esm2022/inline-edit/koobiq-components-inline-edit.mjs +0 -5
  618. package/esm2022/inline-edit/module.mjs +0 -25
  619. package/esm2022/input/index.mjs +0 -2
  620. package/esm2022/input/input-errors.mjs +0 -4
  621. package/esm2022/input/input-number-validators.mjs +0 -88
  622. package/esm2022/input/input-number.mjs +0 -386
  623. package/esm2022/input/input-password.mjs +0 -253
  624. package/esm2022/input/input-value-accessor.mjs +0 -3
  625. package/esm2022/input/input.mjs +0 -299
  626. package/esm2022/input/input.module.mjs +0 -58
  627. package/esm2022/input/koobiq-components-input.mjs +0 -5
  628. package/esm2022/input/public-api.mjs +0 -7
  629. package/esm2022/koobiq-components.mjs +0 -5
  630. package/esm2022/link/index.mjs +0 -2
  631. package/esm2022/link/koobiq-components-link.mjs +0 -5
  632. package/esm2022/link/link.component.mjs +0 -143
  633. package/esm2022/link/link.module.mjs +0 -20
  634. package/esm2022/link/public-api.mjs +0 -3
  635. package/esm2022/list/index.mjs +0 -2
  636. package/esm2022/list/koobiq-components-list.mjs +0 -5
  637. package/esm2022/list/list-selection.component.mjs +0 -739
  638. package/esm2022/list/list.component.mjs +0 -43
  639. package/esm2022/list/list.module.mjs +0 -60
  640. package/esm2022/list/public-api.mjs +0 -4
  641. package/esm2022/loader-overlay/index.mjs +0 -2
  642. package/esm2022/loader-overlay/koobiq-components-loader-overlay.mjs +0 -5
  643. package/esm2022/loader-overlay/loader-overlay.component.mjs +0 -110
  644. package/esm2022/loader-overlay/loader-overlay.module.mjs +0 -44
  645. package/esm2022/loader-overlay/public-api.mjs +0 -3
  646. package/esm2022/markdown/index.mjs +0 -2
  647. package/esm2022/markdown/koobiq-components-markdown.mjs +0 -5
  648. package/esm2022/markdown/markdown.component.mjs +0 -67
  649. package/esm2022/markdown/markdown.module.mjs +0 -21
  650. package/esm2022/markdown/markdown.service.mjs +0 -36
  651. package/esm2022/markdown/markdown.values.mjs +0 -35
  652. package/esm2022/markdown/public-api.mjs +0 -5
  653. package/esm2022/modal/css-unit.pipe.mjs +0 -17
  654. package/esm2022/modal/index.mjs +0 -2
  655. package/esm2022/modal/koobiq-components-modal.mjs +0 -5
  656. package/esm2022/modal/modal-control.service.mjs +0 -89
  657. package/esm2022/modal/modal-ref.class.mjs +0 -7
  658. package/esm2022/modal/modal-util.mjs +0 -22
  659. package/esm2022/modal/modal.component.mjs +0 -540
  660. package/esm2022/modal/modal.directive.mjs +0 -94
  661. package/esm2022/modal/modal.module.mjs +0 -78
  662. package/esm2022/modal/modal.service.mjs +0 -135
  663. package/esm2022/modal/modal.type.mjs +0 -7
  664. package/esm2022/modal/public-api.mjs +0 -7
  665. package/esm2022/navbar/index.mjs +0 -2
  666. package/esm2022/navbar/koobiq-components-navbar.mjs +0 -5
  667. package/esm2022/navbar/navbar-brand.component.mjs +0 -105
  668. package/esm2022/navbar/navbar-item.component.mjs +0 -428
  669. package/esm2022/navbar/navbar-toggle.component.mjs +0 -88
  670. package/esm2022/navbar/navbar.component.mjs +0 -251
  671. package/esm2022/navbar/navbar.module.mjs +0 -84
  672. package/esm2022/navbar/public-api.mjs +0 -7
  673. package/esm2022/navbar/vertical-navbar.component.mjs +0 -128
  674. package/esm2022/navbar-ic/index.mjs +0 -2
  675. package/esm2022/navbar-ic/koobiq-components-navbar-ic.mjs +0 -5
  676. package/esm2022/navbar-ic/navbar-ic-header.mjs +0 -74
  677. package/esm2022/navbar-ic/navbar-ic-item.mjs +0 -390
  678. package/esm2022/navbar-ic/navbar-ic.animation.mjs +0 -17
  679. package/esm2022/navbar-ic/navbar-ic.mjs +0 -310
  680. package/esm2022/navbar-ic/navbar-ic.module.mjs +0 -74
  681. package/esm2022/navbar-ic/public-api.mjs +0 -5
  682. package/esm2022/notification-center/index.mjs +0 -2
  683. package/esm2022/notification-center/koobiq-components-notification-center.mjs +0 -5
  684. package/esm2022/notification-center/notification-center-animations.mjs +0 -18
  685. package/esm2022/notification-center/notification-center.mjs +0 -329
  686. package/esm2022/notification-center/notification-center.module.mjs +0 -38
  687. package/esm2022/notification-center/notification-center.service.mjs +0 -127
  688. package/esm2022/notification-center/notification-item.mjs +0 -70
  689. package/esm2022/notification-center/public-api.mjs +0 -5
  690. package/esm2022/overflow-items/index.mjs +0 -3
  691. package/esm2022/overflow-items/koobiq-components-overflow-items.mjs +0 -5
  692. package/esm2022/overflow-items/module.mjs +0 -25
  693. package/esm2022/overflow-items/overflow-items.mjs +0 -290
  694. package/esm2022/popover/index.mjs +0 -2
  695. package/esm2022/popover/koobiq-components-popover.mjs +0 -5
  696. package/esm2022/popover/popover-animations.mjs +0 -16
  697. package/esm2022/popover/popover-confirm.component.mjs +0 -97
  698. package/esm2022/popover/popover.component.mjs +0 -410
  699. package/esm2022/popover/popover.module.mjs +0 -67
  700. package/esm2022/popover/public-api.mjs +0 -5
  701. package/esm2022/progress-bar/index.mjs +0 -2
  702. package/esm2022/progress-bar/koobiq-components-progress-bar.mjs +0 -5
  703. package/esm2022/progress-bar/progress-bar.component.mjs +0 -62
  704. package/esm2022/progress-bar/progress-bar.module.mjs +0 -32
  705. package/esm2022/progress-bar/public-api.mjs +0 -3
  706. package/esm2022/progress-spinner/index.mjs +0 -2
  707. package/esm2022/progress-spinner/koobiq-components-progress-spinner.mjs +0 -5
  708. package/esm2022/progress-spinner/progress-spinner.component.mjs +0 -78
  709. package/esm2022/progress-spinner/progress-spinner.module.mjs +0 -35
  710. package/esm2022/progress-spinner/public-api.mjs +0 -3
  711. package/esm2022/public-api.mjs +0 -2
  712. package/esm2022/radio/index.mjs +0 -2
  713. package/esm2022/radio/koobiq-components-radio.mjs +0 -5
  714. package/esm2022/radio/public-api.mjs +0 -3
  715. package/esm2022/radio/radio.component.mjs +0 -451
  716. package/esm2022/radio/radio.module.mjs +0 -18
  717. package/esm2022/resizer/index.mjs +0 -3
  718. package/esm2022/resizer/koobiq-components-resizer.mjs +0 -5
  719. package/esm2022/resizer/module.mjs +0 -17
  720. package/esm2022/resizer/resizer.mjs +0 -135
  721. package/esm2022/risk-level/index.mjs +0 -2
  722. package/esm2022/risk-level/koobiq-components-risk-level.mjs +0 -5
  723. package/esm2022/risk-level/public-api.mjs +0 -3
  724. package/esm2022/risk-level/risk-level.component.mjs +0 -40
  725. package/esm2022/risk-level/risk-level.module.mjs +0 -24
  726. package/esm2022/scrollbar/index.mjs +0 -2
  727. package/esm2022/scrollbar/koobiq-components-scrollbar.mjs +0 -5
  728. package/esm2022/scrollbar/public-api.mjs +0 -5
  729. package/esm2022/scrollbar/scrollbar.component.mjs +0 -133
  730. package/esm2022/scrollbar/scrollbar.directive.mjs +0 -105
  731. package/esm2022/scrollbar/scrollbar.module.mjs +0 -25
  732. package/esm2022/scrollbar/scrollbar.types.mjs +0 -14
  733. package/esm2022/search-expandable/index.mjs +0 -2
  734. package/esm2022/search-expandable/koobiq-components-search-expandable.mjs +0 -5
  735. package/esm2022/search-expandable/public-api.mjs +0 -3
  736. package/esm2022/search-expandable/search-expandable.mjs +0 -177
  737. package/esm2022/search-expandable/search-expandable.module.mjs +0 -18
  738. package/esm2022/select/index.mjs +0 -2
  739. package/esm2022/select/koobiq-components-select.mjs +0 -5
  740. package/esm2022/select/public-api.mjs +0 -4
  741. package/esm2022/select/select-option.directive.mjs +0 -69
  742. package/esm2022/select/select.component.mjs +0 -1154
  743. package/esm2022/select/select.module.mjs +0 -81
  744. package/esm2022/sidebar/index.mjs +0 -2
  745. package/esm2022/sidebar/koobiq-components-sidebar.mjs +0 -5
  746. package/esm2022/sidebar/public-api.mjs +0 -3
  747. package/esm2022/sidebar/sidebar-animations.mjs +0 -23
  748. package/esm2022/sidebar/sidebar.component.mjs +0 -169
  749. package/esm2022/sidebar/sidebar.module.mjs +0 -30
  750. package/esm2022/sidepanel/index.mjs +0 -2
  751. package/esm2022/sidepanel/koobiq-components-sidepanel.mjs +0 -5
  752. package/esm2022/sidepanel/public-api.mjs +0 -7
  753. package/esm2022/sidepanel/sidepanel-animations.mjs +0 -29
  754. package/esm2022/sidepanel/sidepanel-config.mjs +0 -33
  755. package/esm2022/sidepanel/sidepanel-container.component.mjs +0 -126
  756. package/esm2022/sidepanel/sidepanel-directives.mjs +0 -168
  757. package/esm2022/sidepanel/sidepanel-ref.mjs +0 -60
  758. package/esm2022/sidepanel/sidepanel.module.mjs +0 -73
  759. package/esm2022/sidepanel/sidepanel.service.mjs +0 -167
  760. package/esm2022/split-button/index.mjs +0 -2
  761. package/esm2022/split-button/koobiq-components-split-button.mjs +0 -5
  762. package/esm2022/split-button/public-api.mjs +0 -3
  763. package/esm2022/split-button/split-button.mjs +0 -133
  764. package/esm2022/split-button/split-button.module.mjs +0 -18
  765. package/esm2022/splitter/index.mjs +0 -2
  766. package/esm2022/splitter/koobiq-components-splitter.mjs +0 -5
  767. package/esm2022/splitter/public-api.mjs +0 -3
  768. package/esm2022/splitter/splitter.component.mjs +0 -492
  769. package/esm2022/splitter/splitter.module.mjs +0 -34
  770. package/esm2022/table/index.mjs +0 -2
  771. package/esm2022/table/koobiq-components-table.mjs +0 -5
  772. package/esm2022/table/public-api.mjs +0 -3
  773. package/esm2022/table/table.component.mjs +0 -36
  774. package/esm2022/table/table.module.mjs +0 -32
  775. package/esm2022/tabs/index.mjs +0 -2
  776. package/esm2022/tabs/koobiq-components-tabs.mjs +0 -5
  777. package/esm2022/tabs/paginated-tab-header.mjs +0 -490
  778. package/esm2022/tabs/public-api.mjs +0 -11
  779. package/esm2022/tabs/tab-body.component.mjs +0 -178
  780. package/esm2022/tabs/tab-content.directive.mjs +0 -15
  781. package/esm2022/tabs/tab-group.component.mjs +0 -384
  782. package/esm2022/tabs/tab-header.component.mjs +0 -60
  783. package/esm2022/tabs/tab-label-wrapper.directive.mjs +0 -86
  784. package/esm2022/tabs/tab-label.directive.mjs +0 -17
  785. package/esm2022/tabs/tab-nav-bar.mjs +0 -292
  786. package/esm2022/tabs/tab.component.mjs +0 -145
  787. package/esm2022/tabs/tabs-animations.mjs +0 -24
  788. package/esm2022/tabs/tabs.module.mjs +0 -95
  789. package/esm2022/tags/index.mjs +0 -2
  790. package/esm2022/tags/koobiq-components-tags.mjs +0 -5
  791. package/esm2022/tags/public-api.mjs +0 -6
  792. package/esm2022/tags/tag-default-options.mjs +0 -4
  793. package/esm2022/tags/tag-input.mjs +0 -281
  794. package/esm2022/tags/tag-list.component.mjs +0 -765
  795. package/esm2022/tags/tag-text-control.mjs +0 -2
  796. package/esm2022/tags/tag.component.mjs +0 -647
  797. package/esm2022/tags/tag.module.mjs +0 -67
  798. package/esm2022/textarea/index.mjs +0 -2
  799. package/esm2022/textarea/koobiq-components-textarea.mjs +0 -5
  800. package/esm2022/textarea/public-api.mjs +0 -3
  801. package/esm2022/textarea/textarea.component.mjs +0 -300
  802. package/esm2022/textarea/textarea.module.mjs +0 -20
  803. package/esm2022/time-range/constants.mjs +0 -42
  804. package/esm2022/time-range/index.mjs +0 -8
  805. package/esm2022/time-range/koobiq-components-time-range.mjs +0 -5
  806. package/esm2022/time-range/module.mjs +0 -36
  807. package/esm2022/time-range/time-range-editor.mjs +0 -224
  808. package/esm2022/time-range/time-range-title-as-form-field.mjs +0 -60
  809. package/esm2022/time-range/time-range-title.mjs +0 -112
  810. package/esm2022/time-range/time-range.mjs +0 -234
  811. package/esm2022/time-range/time-range.service.mjs +0 -126
  812. package/esm2022/time-range/types.mjs +0 -2
  813. package/esm2022/timepicker/index.mjs +0 -2
  814. package/esm2022/timepicker/koobiq-components-timepicker.mjs +0 -5
  815. package/esm2022/timepicker/public-api.mjs +0 -4
  816. package/esm2022/timepicker/timepicker.constants.mjs +0 -29
  817. package/esm2022/timepicker/timepicker.directive.mjs +0 -686
  818. package/esm2022/timepicker/timepicker.module.mjs +0 -29
  819. package/esm2022/timezone/cities-by-filter.pipe.mjs +0 -17
  820. package/esm2022/timezone/index.mjs +0 -2
  821. package/esm2022/timezone/koobiq-components-timezone.mjs +0 -5
  822. package/esm2022/timezone/public-api.mjs +0 -7
  823. package/esm2022/timezone/timezone-option.component.mjs +0 -50
  824. package/esm2022/timezone/timezone-option.directive.mjs +0 -54
  825. package/esm2022/timezone/timezone-select.component.mjs +0 -55
  826. package/esm2022/timezone/timezone.models.mjs +0 -2
  827. package/esm2022/timezone/timezone.module.mjs +0 -82
  828. package/esm2022/timezone/timezone.utils.mjs +0 -80
  829. package/esm2022/timezone/utc-offset.pipe.mjs +0 -17
  830. package/esm2022/title/index.mjs +0 -2
  831. package/esm2022/title/koobiq-components-title.mjs +0 -5
  832. package/esm2022/title/public-api.mjs +0 -3
  833. package/esm2022/title/title.directive.mjs +0 -108
  834. package/esm2022/title/title.module.mjs +0 -18
  835. package/esm2022/toast/index.mjs +0 -2
  836. package/esm2022/toast/koobiq-components-toast.mjs +0 -5
  837. package/esm2022/toast/public-api.mjs +0 -6
  838. package/esm2022/toast/toast-animations.mjs +0 -10
  839. package/esm2022/toast/toast-container.component.mjs +0 -57
  840. package/esm2022/toast/toast.component.mjs +0 -125
  841. package/esm2022/toast/toast.module.mjs +0 -26
  842. package/esm2022/toast/toast.service.mjs +0 -197
  843. package/esm2022/toast/toast.type.mjs +0 -39
  844. package/esm2022/toggle/index.mjs +0 -2
  845. package/esm2022/toggle/koobiq-components-toggle.mjs +0 -5
  846. package/esm2022/toggle/public-api.mjs +0 -3
  847. package/esm2022/toggle/toggle.component.mjs +0 -254
  848. package/esm2022/toggle/toggle.module.mjs +0 -18
  849. package/esm2022/tooltip/index.mjs +0 -2
  850. package/esm2022/tooltip/koobiq-components-tooltip.mjs +0 -5
  851. package/esm2022/tooltip/public-api.mjs +0 -3
  852. package/esm2022/tooltip/tooltip.animations.mjs +0 -19
  853. package/esm2022/tooltip/tooltip.component.mjs +0 -400
  854. package/esm2022/tooltip/tooltip.module.mjs +0 -35
  855. package/esm2022/top-bar/index.mjs +0 -2
  856. package/esm2022/top-bar/koobiq-components-top-bar.mjs +0 -5
  857. package/esm2022/top-bar/module.mjs +0 -25
  858. package/esm2022/top-bar/public-api.mjs +0 -3
  859. package/esm2022/top-bar/top-bar.mjs +0 -74
  860. package/esm2022/tree/control/base-tree-control.mjs +0 -59
  861. package/esm2022/tree/control/flat-tree-control.filters.mjs +0 -52
  862. package/esm2022/tree/control/flat-tree-control.mjs +0 -109
  863. package/esm2022/tree/control/nested-tree-control.mjs +0 -40
  864. package/esm2022/tree/control/tree-control.mjs +0 -2
  865. package/esm2022/tree/data-source/flat-data-source.mjs +0 -157
  866. package/esm2022/tree/data-source/nested-data-source.mjs +0 -28
  867. package/esm2022/tree/index.mjs +0 -2
  868. package/esm2022/tree/koobiq-components-tree.mjs +0 -5
  869. package/esm2022/tree/node.mjs +0 -31
  870. package/esm2022/tree/outlet.mjs +0 -15
  871. package/esm2022/tree/padding.directive.mjs +0 -108
  872. package/esm2022/tree/public-api.mjs +0 -17
  873. package/esm2022/tree/toggle.mjs +0 -93
  874. package/esm2022/tree/tree-base.mjs +0 -236
  875. package/esm2022/tree/tree-errors.mjs +0 -36
  876. package/esm2022/tree/tree-option.component.mjs +0 -303
  877. package/esm2022/tree/tree-selection.component.mjs +0 -568
  878. package/esm2022/tree/tree.mjs +0 -19
  879. package/esm2022/tree/tree.module.mjs +0 -64
  880. package/esm2022/tree-select/index.mjs +0 -2
  881. package/esm2022/tree-select/koobiq-components-tree-select.mjs +0 -5
  882. package/esm2022/tree-select/public-api.mjs +0 -3
  883. package/esm2022/tree-select/tree-select.component.mjs +0 -1034
  884. package/esm2022/tree-select/tree-select.module.mjs +0 -71
  885. package/esm2022/username/constants.mjs +0 -25
  886. package/esm2022/username/index.mjs +0 -6
  887. package/esm2022/username/koobiq-components-username.mjs +0 -5
  888. package/esm2022/username/module.mjs +0 -35
  889. package/esm2022/username/types.mjs +0 -32
  890. package/esm2022/username/username.mjs +0 -129
  891. package/esm2022/username/username.pipe.mjs +0 -92
@@ -1,446 +0,0 @@
1
- import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { Overlay } from '@angular/cdk/overlay';
3
- import { AsyncPipe, JsonPipe } from '@angular/common';
4
- import { ChangeDetectionStrategy, Component, Directive, EventEmitter, InjectionToken, Input, Output, ViewChild, ViewEncapsulation, booleanAttribute, inject, numberAttribute } from '@angular/core';
5
- import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
6
- import { FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
7
- import { KbqBadgeModule } from '@koobiq/components/badge';
8
- import { KBQ_LOCALE_SERVICE, KbqOptionModule, KbqPopUp, KbqPopUpTrigger, POSITION_TO_CSS_MAP, PopUpPlacements, PopUpSizes, PopUpTriggers, applyPopupMargins, ruRULocaleData } from '@koobiq/components/core';
9
- import { KbqDividerModule } from '@koobiq/components/divider';
10
- import { KbqDropdownModule, KbqDropdownTrigger } from '@koobiq/components/dropdown';
11
- import { KbqFormFieldModule } from '@koobiq/components/form-field';
12
- import { KbqIconModule } from '@koobiq/components/icon';
13
- import { KbqInput, KbqInputModule } from '@koobiq/components/input';
14
- import { defaultOffsetYWithArrow } from '@koobiq/components/popover';
15
- import { KbqScrollbarModule } from '@koobiq/components/scrollbar';
16
- import { merge } from 'rxjs';
17
- import { kbqAppSwitcherAnimations } from './app-switcher-animations';
18
- import { KbqAppSwitcherDropdownApp } from './app-switcher-dropdown-app';
19
- import { KbqAppSwitcherDropdownSite } from './app-switcher-dropdown-site';
20
- import { KbqAppSwitcherListItem } from './kbq-app-switcher-list-item';
21
- import * as i0 from "@angular/core";
22
- import * as i1 from "@angular/forms";
23
- import * as i2 from "@koobiq/components/form-field";
24
- import * as i3 from "@koobiq/components/input";
25
- import * as i4 from "@koobiq/components/icon";
26
- import * as i5 from "@koobiq/components/divider";
27
- import * as i6 from "@koobiq/components/badge";
28
- import * as i7 from "@koobiq/components/dropdown";
29
- import * as i8 from "@koobiq/components/scrollbar";
30
- import * as i9 from "@koobiq/components/core";
31
- /** @docs-private */
32
- export function defaultGroupBy(app, groups, untyped) {
33
- if (!app.type) {
34
- untyped.push(app);
35
- }
36
- else {
37
- const appType = app.type.toString();
38
- if (groups[appType]) {
39
- groups[appType].aliases.push(app);
40
- }
41
- else {
42
- groups[appType] = {
43
- name: appType,
44
- aliases: [app],
45
- icon: app.icon,
46
- id: ''
47
- };
48
- }
49
- }
50
- }
51
- export const KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_SEARCH = 7;
52
- export const KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING = 3;
53
- /** @docs-private */
54
- export const KBQ_APP_SWITCHER_SCROLL_STRATEGY = new InjectionToken('kbq-app-switcher-scroll-strategy');
55
- /** @docs-private */
56
- export function kbqAppSwitcherScrollStrategyFactory(overlay) {
57
- return () => overlay.scrollStrategies.reposition({ scrollThrottle: 20 });
58
- }
59
- /** @docs-private */
60
- export const KBQ_APP_SWITCHER_SCROLL_STRATEGY_FACTORY_PROVIDER = {
61
- provide: KBQ_APP_SWITCHER_SCROLL_STRATEGY,
62
- deps: [Overlay],
63
- useFactory: kbqAppSwitcherScrollStrategyFactory
64
- };
65
- /** default configuration of app-switcher */
66
- /** @docs-private */
67
- export const KBQ_APP_SWITCHER_DEFAULT_CONFIGURATION = ruRULocaleData.appSwitcher;
68
- /** Injection Token for providing configuration of app-switcher */
69
- /** @docs-private */
70
- export const KBQ_APP_SWITCHER_CONFIGURATION = new InjectionToken('KbqAppSwitcherConfiguration');
71
- /** @docs-private */
72
- export class KbqAppSwitcherComponent extends KbqPopUp {
73
- /** localized data
74
- * @docs-private */
75
- get localeData() {
76
- return this.configuration;
77
- }
78
- constructor() {
79
- super();
80
- /** @docs-private */
81
- this.localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });
82
- this.externalConfiguration = inject(KBQ_APP_SWITCHER_CONFIGURATION, { optional: true });
83
- /** @docs-private */
84
- this.searchControl = new FormControl('');
85
- /** @docs-private */
86
- this.prefix = 'kbq-app-switcher';
87
- /** @docs-private */
88
- this.isTrapFocus = false;
89
- this.updateLocaleParams = () => {
90
- this.configuration = this.externalConfiguration || this.localeService?.getParams('appSwitcher');
91
- this.changeDetectorRef.markForCheck();
92
- };
93
- this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);
94
- if (!this.localeService) {
95
- this.initDefaultParams();
96
- }
97
- }
98
- ngAfterViewInit() {
99
- if (this.input) {
100
- this.input.focus();
101
- }
102
- this.visibleChange.subscribe((state) => {
103
- if (this.offset !== null && state) {
104
- applyPopupMargins(this.renderer, this.elementRef.nativeElement, this.prefix, `${this.offset.toString()}px`);
105
- }
106
- });
107
- this.searchControl.valueChanges.subscribe((value) => (this.filteredSites = this.filterSites(value)));
108
- }
109
- /** @docs-private */
110
- updateClassMap(placement, customClass, size) {
111
- super.updateClassMap(placement, customClass, { [`${this.prefix}_${size}`]: !!size });
112
- }
113
- /** @docs-private */
114
- updateTrapFocus(isTrapFocus) {
115
- this.isTrapFocus = isTrapFocus;
116
- }
117
- /** @docs-private */
118
- escapeHandler() {
119
- this.hide(0);
120
- }
121
- /** @docs-private */
122
- selectAppInSite(site, app) {
123
- this.trigger.selectedSite = site;
124
- this.trigger.selectedApp = app;
125
- this.trigger.selectedSiteChange.emit(site);
126
- this.trigger.selectedAppChange.emit(app);
127
- }
128
- filterSites(query) {
129
- const filteredSites = structuredClone(this.trigger.originalSites);
130
- return query
131
- ? filteredSites.filter((site) => {
132
- const filteredApps = site.apps.filter((app) => app.name.toLowerCase().includes(query.toLowerCase()));
133
- if (filteredApps.length) {
134
- site.apps = filteredApps;
135
- return true;
136
- }
137
- return false;
138
- })
139
- : filteredSites;
140
- }
141
- initDefaultParams() {
142
- this.configuration = KBQ_APP_SWITCHER_DEFAULT_CONFIGURATION;
143
- }
144
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqAppSwitcherComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
145
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: KbqAppSwitcherComponent, isStandalone: true, selector: "kbq-app-switcher", host: { classAttribute: "kbq-app-switcher" }, viewQueries: [{ propertyName: "input", first: true, predicate: KbqInput, descendants: true }, { propertyName: "otherSites", first: true, predicate: ["otherSites"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n autocomplete=\"off\"\n kbqInput\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n kbq-app-switcher-list-item\n href=\"{{ app.link }}\"\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n href=\"{{ alias.link }}\"\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a kbq-app-switcher-list-item href=\"{{ app.link }}\" [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: KbqFormFieldModule }, { kind: "component", type: i2.KbqCleaner, selector: "kbq-cleaner", exportAs: ["kbqCleaner"] }, { kind: "component", type: i2.KbqFormField, selector: "kbq-form-field", inputs: ["noBorders"], exportAs: ["kbqFormField"] }, { kind: "directive", type: i2.KbqPrefix, selector: "[kbqPrefix]", exportAs: ["kbqPrefix"] }, { kind: "directive", type: i2.KbqValidateDirective, selector: " input[kbqInput], input[kbqNumberInput], input[kbqInputPassword], input[kbqTimepicker], input[kbqDatepicker], textarea[kbqTextarea], kbq-select, kbq-tree-select, kbq-tag-list ", exportAs: ["KbqValidate"] }, { kind: "directive", type: i2.KbqTrim, selector: "[kbqInput], [kbqTextarea]", exportAs: ["KbqTrim"] }, { kind: "ngmodule", type: KbqInputModule }, { kind: "directive", type: i3.KbqInput, selector: "input[kbqInput],input[kbqNumberInput]", inputs: ["errorStateMatcher", "placeholder", "disabled", "id", "required", "type", "value"], exportAs: ["kbqInput"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i4.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }, { kind: "ngmodule", type: KbqDividerModule }, { kind: "component", type: i5.KbqDivider, selector: "kbq-divider", inputs: ["vertical", "inset", "paddings"] }, { kind: "ngmodule", type: KbqBadgeModule }, { kind: "component", type: i6.KbqBadge, selector: "kbq-badge", inputs: ["compact", "outline", "badgeColor"] }, { kind: "directive", type: i6.KbqBadgeCssStyler, selector: "kbq-badge" }, { kind: "ngmodule", type: KbqDropdownModule }, { kind: "component", type: i7.KbqDropdown, selector: "kbq-dropdown", inputs: ["navigationWithWrap", "xPosition", "yPosition", "overlapTriggerY", "overlapTriggerX", "hasBackdrop", "class", "backdropClass"], outputs: ["closed"], exportAs: ["kbqDropdown"] }, { kind: "directive", type: i7.KbqDropdownTrigger, selector: "[kbqDropdownTriggerFor]", inputs: ["offsetX", "offsetY", "kbqDropdownTriggerData", "openByArrowDown", "kbqDropdownTriggerRestoreFocus", "kbqDropdownTriggerFor"], outputs: ["dropdownOpened", "dropdownClosed"], exportAs: ["kbqDropdownTrigger"] }, { kind: "directive", type: i7.KbqDropdownStaticContent, selector: "[kbqDropdownStaticContent]" }, { kind: "ngmodule", type: KbqScrollbarModule }, { kind: "component", type: i8.KbqScrollbar, selector: "kbq-scrollbar, [kbq-scrollbar]", inputs: ["initializationTarget", "options", "events", "defer"], outputs: ["onInitialize", "onUpdate", "onDestroy", "onScroll"], exportAs: ["kbqScrollbar"] }, { kind: "ngmodule", type: KbqOptionModule }, { kind: "component", type: i9.KbqOptgroup, selector: "kbq-optgroup", inputs: ["label", "disabled"], exportAs: ["kbqOptgroup"] }, { kind: "component", type: KbqAppSwitcherDropdownApp, selector: "[kbq-app-switcher-dropdown-app]", inputs: ["kbq-app-switcher-dropdown-app"], exportAs: ["kbqAppSwitcherDropdownApp"] }, { kind: "component", type: KbqAppSwitcherDropdownSite, selector: "[kbq-app-switcher-dropdown-site]", inputs: ["kbq-app-switcher-dropdown-site"], exportAs: ["kbqAppSwitcherDropdownSite"] }, { kind: "component", type: KbqAppSwitcherListItem, selector: "[kbq-app-switcher-list-item]", inputs: ["app", "toggle", "collapsed"], exportAs: ["kbqAppSwitcherApp"] }], animations: [kbqAppSwitcherAnimations.state], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
146
- }
147
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqAppSwitcherComponent, decorators: [{
148
- type: Component,
149
- args: [{ standalone: true, selector: 'kbq-app-switcher', preserveWhitespaces: false, host: {
150
- class: 'kbq-app-switcher'
151
- }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
152
- AsyncPipe,
153
- FormsModule,
154
- ReactiveFormsModule,
155
- KbqFormFieldModule,
156
- KbqInputModule,
157
- KbqIconModule,
158
- KbqDividerModule,
159
- KbqBadgeModule,
160
- KbqDropdownModule,
161
- KbqScrollbarModule,
162
- KbqOptionModule,
163
- KbqAppSwitcherDropdownApp,
164
- KbqAppSwitcherDropdownSite,
165
- KbqAppSwitcherListItem,
166
- JsonPipe
167
- ], animations: [kbqAppSwitcherAnimations.state], template: "@if (trigger.withSearch) {\n <div class=\"kbq-app-switcher__search-container\" (mouseenter)=\"otherSites?.close()\">\n <kbq-form-field noBorders>\n <i kbq-icon=\"kbq-magnifying-glass_16\" kbqPrefix></i>\n <input\n autocomplete=\"off\"\n kbqInput\n placeholder=\"{{ localeData.searchPlaceholder }}\"\n [formControl]=\"searchControl\"\n (keydown.escape)=\"escapeHandler()\"\n />\n <kbq-cleaner />\n </kbq-form-field>\n </div>\n\n <kbq-divider />\n}\n\n<div kbq-scrollbar>\n @if (!searchControl.getRawValue()) {\n <div class=\"kbq-app-switcher__app-container\" (mouseenter)=\"otherSites?.close()\">\n @if (trigger.sitesMode) {\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ trigger.selectedSite?.name }}</div>\n @if (trigger.selectedSite?.status) {\n <kbq-badge class=\"kbq-app-switcher-group-header__badge\" [compact]=\"true\">\n {{ trigger.selectedSite.status }}\n </kbq-badge>\n }\n </div>\n }\n\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (app of trigger.currentApps; track app) {\n @if (!app.aliases) {\n <a\n kbq-app-switcher-list-item\n href=\"{{ app.link }}\"\n [class.kbq-selected]=\"app.id === trigger.selectedApp?.id\"\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></a>\n } @else {\n <div\n #appSwitcherApp=\"kbqAppSwitcherApp\"\n kbq-app-switcher-list-item\n [app]=\"app\"\n [toggle]=\"!!app.aliases\"\n ></div>\n\n @if (!appSwitcherApp.collapsed) {\n @for (alias of app.aliases; track alias) {\n <a\n class=\"kbq-app-switcher-site_nested\"\n kbq-app-switcher-list-item\n href=\"{{ alias.link }}\"\n [class.kbq-selected]=\"alias.id === trigger.selectedApp?.id\"\n [app]=\"alias\"\n ></a>\n }\n }\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n @if (trigger.sitesMode) {\n <kbq-divider />\n\n <div class=\"kbq-app-switcher__sites-container\">\n <div class=\"kbq-app-switcher-group-header\">\n <div class=\"kbq-app-switcher-group-header__text\">{{ localeData.sitesHeader }}</div>\n </div>\n\n <kbq-dropdown #otherSites=\"kbqDropdown\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-sites\">\n @for (site of trigger.sites; track site) {\n @if (site.id !== trigger.selectedSite?.id) {\n <div\n [kbq-app-switcher-dropdown-site]=\"site\"\n [kbqDropdownTriggerFor]=\"dropdownWithSelectedSite\"\n [offsetX]=\"0\"\n (mouseenter)=\"activeSite = site\"\n ></div>\n }\n }\n </div>\n </kbq-dropdown>\n </div>\n\n <kbq-dropdown #dropdownWithSelectedSite=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (app of activeSite?.apps; track app) {\n @if (app.aliases) {\n <div\n #dropdownWithGroupedAppsTrigger=\"kbqDropdownTrigger\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n [kbqDropdownTriggerFor]=\"dropdownWithGroupedApps\"\n [offsetX]=\"0\"\n [class.kbq-pressed]=\"dropdownWithGroupedAppsTrigger.opened\"\n (mouseenter)=\"activeApp = app\"\n ></div>\n } @else {\n <a\n href=\"{{ app.link }}\"\n [kbq-app-switcher-dropdown-app]=\"app\"\n (click)=\"selectAppInSite(activeSite, app)\"\n ></a>\n }\n }\n </kbq-dropdown>\n\n <kbq-dropdown #dropdownWithGroupedApps=\"kbqDropdown\" [class]=\"'kbq-app-switcher-sites'\">\n @for (alias of activeApp?.aliases; track alias) {\n <a\n href=\"{{ alias.link }}\"\n [kbq-app-switcher-dropdown-app]=\"alias\"\n (click)=\"selectAppInSite(activeSite, alias)\"\n ></a>\n }\n </kbq-dropdown>\n }\n } @else {\n <div class=\"kbq-app-switcher__search-result\">\n <kbq-dropdown [class]=\"'kbq-app-switcher-sites'\">\n <div kbqDropdownStaticContent class=\"kbq-app-switcher-site\">\n @for (site of filteredSites; track site) {\n @if (site.apps) {\n <kbq-optgroup label=\"{{ site.name }}\" />\n }\n\n @for (app of site.apps; track app) {\n <a kbq-app-switcher-list-item href=\"{{ app.link }}\" [app]=\"app\"></a>\n }\n } @empty {\n <div class=\"kbq-app-switcher__empty-search-result\">{{ localeData.searchEmptyResult }}</div>\n }\n </div>\n </kbq-dropdown>\n </div>\n }\n</div>\n", styles: [".kbq-app-switcher{position:relative;display:flex;flex-direction:column;margin-top:var(--kbq-size-xxs);margin-bottom:var(--kbq-size-xxs);width:320px;border-radius:var(--kbq-size-xs);box-shadow:var(--kbq-shadow-popup);box-sizing:border-box;z-index:1}.kbq-app-switcher__search-container{padding-top:var(--kbq-size-xxs)}.kbq-app-switcher__search-result{max-width:320px;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher__empty-search-result{display:flex;justify-content:center;align-items:center;height:96px}.kbq-app-switcher__app-container{display:flex;flex-direction:column;min-height:0;padding:var(--kbq-size-s) var(--kbq-size-xxs)}.kbq-app-switcher-group-header{padding:var(--kbq-size-s) var(--kbq-size-m);display:flex;flex-direction:row;justify-content:space-between}.kbq-app-switcher__sites-container{padding:var(--kbq-size-xxs)}.kbq-app-switcher{background:var(--kbq-background-card)}.kbq-app-switcher .kbq-app-switcher-group-header,.kbq-app-switcher__empty-search-result{color:var(--kbq-foreground-contrast-secondary)}.kbq-app-switcher,.kbq-app-switcher__empty-search-result{font-size:var(--kbq-typography-text-normal-font-size);font-style:var(--kbq-typography-text-normal-font-style);font-weight:var(--kbq-typography-text-normal-font-weight);line-height:var(--kbq-typography-text-normal-line-height);font-family:var(--kbq-typography-text-normal-font-family);text-transform:var(--kbq-typography-text-normal-text-transform);font-feature-settings:var(--kbq-typography-text-normal-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-letter-spacing)}.kbq-app-switcher-group-header__text{font-size:var(--kbq-typography-caps-compact-strong-font-size);font-style:var(--kbq-typography-caps-compact-strong-font-style);font-weight:var(--kbq-typography-caps-compact-strong-font-weight);line-height:var(--kbq-typography-caps-compact-strong-line-height);font-family:var(--kbq-typography-caps-compact-strong-font-family);text-transform:var(--kbq-typography-caps-compact-strong-text-transform);font-feature-settings:var(--kbq-typography-caps-compact-strong-font-feature-settings);letter-spacing:var(--kbq-typography-caps-compact-strong-letter-spacing)}.kbq-app-switcher-group-header__badge{font-size:var(--kbq-typography-text-compact-medium-font-size);font-style:var(--kbq-typography-text-compact-medium-font-style);font-weight:var(--kbq-typography-text-compact-medium-font-weight);line-height:var(--kbq-typography-text-compact-medium-line-height);font-family:var(--kbq-typography-text-compact-medium-font-family);text-transform:var(--kbq-typography-text-compact-medium-text-transform);font-feature-settings:var(--kbq-typography-text-compact-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-compact-medium-letter-spacing)}.kbq-app-switch-tree-option__text{font-size:var(--kbq-typography-text-normal-medium-font-size);font-style:var(--kbq-typography-text-normal-medium-font-style);font-weight:var(--kbq-typography-text-normal-medium-font-weight);line-height:var(--kbq-typography-text-normal-medium-line-height);font-family:var(--kbq-typography-text-normal-medium-font-family);text-transform:var(--kbq-typography-text-normal-medium-text-transform);font-feature-settings:var(--kbq-typography-text-normal-medium-font-feature-settings);letter-spacing:var(--kbq-typography-text-normal-medium-letter-spacing)}\n"] }]
168
- }], ctorParameters: () => [], propDecorators: { input: [{
169
- type: ViewChild,
170
- args: [KbqInput]
171
- }], otherSites: [{
172
- type: ViewChild,
173
- args: ['otherSites']
174
- }] } });
175
- export class KbqAppSwitcherTrigger extends KbqPopUpTrigger {
176
- constructor() {
177
- super(...arguments);
178
- /** @docs-private */
179
- this.scrollStrategy = inject(KBQ_APP_SWITCHER_SCROLL_STRATEGY);
180
- // not used
181
- /** @docs-private */
182
- this.arrow = false;
183
- /** @docs-private */
184
- this.hasBackdrop = false;
185
- /** @docs-private */
186
- this.size = PopUpSizes.Medium;
187
- /** Placement of popUp */
188
- this.placement = PopUpPlacements.BottomLeft;
189
- /** Class that will be used in the background */
190
- this.backdropClass = 'cdk-overlay-transparent-backdrop';
191
- /** Offset of popUp */
192
- this.offset = defaultOffsetYWithArrow;
193
- this._groupBy = defaultGroupBy;
194
- /** Emits a change event whenever the placement state changes. */
195
- this.placementChange = new EventEmitter();
196
- /** Emits a change event whenever the visible state changes. */
197
- this.visibleChange = new EventEmitter();
198
- /** @docs-private */
199
- this.selectedSiteChange = new EventEmitter();
200
- /** @docs-private */
201
- this.selectedAppChange = new EventEmitter();
202
- /** @docs-private */
203
- this.trigger = `${PopUpTriggers.Click}, ${PopUpTriggers.Keydown}`;
204
- /** @docs-private */
205
- this.originSelector = '.kbq-app-switcher';
206
- this.hideIfNotInViewPort = () => {
207
- if (!this.scrollable)
208
- return;
209
- const rect = this.elementRef.nativeElement.getBoundingClientRect();
210
- const containerRect = this.scrollable.getElementRef().nativeElement.getBoundingClientRect();
211
- if (!(rect.bottom >= containerRect.top &&
212
- rect.right >= containerRect.left &&
213
- rect.top <= containerRect.bottom &&
214
- rect.left <= containerRect.right)) {
215
- this.hide();
216
- }
217
- };
218
- }
219
- /** Whether search is used or not */
220
- get withSearch() {
221
- return this.appsCount > KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_SEARCH;
222
- }
223
- /** Number of applications to choose from
224
- * @docs-private */
225
- get appsCount() {
226
- if (this.sitesMode) {
227
- return this.originalSites.reduce((acc, site) => acc + site.apps.length, 0);
228
- }
229
- return this.originalApps.length;
230
- }
231
- /** Whether the sites are used or not
232
- * @docs-private */
233
- get sitesMode() {
234
- return this.originalSites?.length > 0;
235
- }
236
- /** Whether the sites are used or not
237
- * @docs-private */
238
- get currentApps() {
239
- return this.sitesMode ? this.selectedSite.apps : this._parsedApps;
240
- }
241
- /** Array of sites */
242
- get sites() {
243
- return this._parsedSites;
244
- }
245
- set sites(value) {
246
- this.originalSites = value;
247
- this._parsedSites = [];
248
- value.forEach((site) => {
249
- const newSite = { ...site, apps: [] };
250
- newSite.apps = this.makeGroupsForApps(site.apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING);
251
- this._parsedSites.push(newSite);
252
- });
253
- }
254
- /** Array of applications */
255
- get apps() {
256
- return this._parsedApps;
257
- }
258
- set apps(apps) {
259
- this.originalApps = apps;
260
- this._parsedApps = this.makeGroupsForApps(this.originalApps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING);
261
- }
262
- makeGroupsForApps(apps, minAppsForGrouping) {
263
- const groups = {};
264
- const untyped = [];
265
- const groupedApps = [];
266
- apps.forEach((app) => {
267
- this.groupBy(app, groups, untyped);
268
- });
269
- Object.values(groups).forEach((group) => {
270
- if (group.aliases && group.aliases.length > minAppsForGrouping) {
271
- groupedApps.push(group);
272
- }
273
- else {
274
- untyped.push(...group.aliases);
275
- }
276
- });
277
- groupedApps.push(...untyped);
278
- return groupedApps;
279
- }
280
- /** Function to group the apps by type. The first argument is an app object with type.
281
- * The second is a groups object and third is an array for untyped apps */
282
- get groupBy() {
283
- return this._groupBy;
284
- }
285
- set groupBy(fn) {
286
- if (typeof fn !== 'function') {
287
- throw new Error('The argument must be a function');
288
- }
289
- this._groupBy = fn;
290
- }
291
- /** Selected site */
292
- get selectedSite() {
293
- return this._parsedSelectedSite;
294
- }
295
- set selectedSite(value) {
296
- const originValue = this.originalSites.find((site) => value.id === site.id);
297
- const newSite = { ...originValue, apps: [] };
298
- newSite.apps = this.makeGroupsForApps(originValue.apps, KBQ_MIN_NUMBER_OF_APPS_TO_ENABLE_GROUPING);
299
- this._parsedSelectedSite = newSite;
300
- }
301
- /** Whether the trigger is disabled. */
302
- get disabled() {
303
- return this._disabled;
304
- }
305
- set disabled(value) {
306
- this._disabled = coerceBooleanProperty(value);
307
- if (this._disabled) {
308
- this.hide();
309
- }
310
- }
311
- /** @docs-private */
312
- get hasClickTrigger() {
313
- return this.trigger.includes(PopUpTriggers.Click);
314
- }
315
- /** @docs-private */
316
- get overlayConfig() {
317
- return {
318
- panelClass: 'kbq-app-switcher__panel',
319
- hasBackdrop: this.hasBackdrop,
320
- backdropClass: this.backdropClass
321
- };
322
- }
323
- ngOnInit() {
324
- super.ngOnInit();
325
- this.scrollable
326
- ?.elementScrolled()
327
- .pipe(takeUntilDestroyed(this.destroyRef))
328
- .subscribe(this.hideIfNotInViewPort);
329
- }
330
- ngAfterContentInit() {
331
- if (this.closeOnScroll === null) {
332
- this.scrollDispatcher.scrolled().subscribe((scrollable) => {
333
- if (!scrollable?.getElementRef().nativeElement.classList.contains('kbq-hide-nested-popup'))
334
- return;
335
- const parentRects = scrollable.getElementRef().nativeElement.getBoundingClientRect();
336
- const childRects = this.elementRef.nativeElement.getBoundingClientRect();
337
- if (childRects.bottom < parentRects.top || childRects.top > parentRects.bottom) {
338
- this.hide();
339
- }
340
- });
341
- }
342
- this.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((visible) => {
343
- if (visible) {
344
- // eslint-disable-next-line rxjs/no-nested-subscribe
345
- this.preventClosingByInnerScrollSubscription = this.closingActions().subscribe((event) => {
346
- if (event['scrollDispatcher']) {
347
- event['kbqPopoverPreventHide'] = true;
348
- event['type'] = 'click';
349
- }
350
- });
351
- }
352
- else {
353
- this.preventClosingByInnerScrollSubscription.unsubscribe();
354
- this.focus();
355
- }
356
- });
357
- }
358
- /** @docs-private */
359
- updateData() {
360
- if (!this.instance)
361
- return;
362
- this.instance.header = this.header;
363
- this.instance.content = this.content;
364
- this.instance.arrow = this.arrow;
365
- this.instance.offset = this.offset;
366
- this.instance.footer = this.footer;
367
- this.instance.updateTrapFocus(this.trigger !== PopUpTriggers.Focus);
368
- if (this.isOpen) {
369
- this.updatePosition(true);
370
- }
371
- }
372
- /** Updates the current position.
373
- * @docs-private */
374
- updatePosition(reapplyPosition = false) {
375
- this.overlayRef = this.createOverlay();
376
- const position = this.overlayRef.getConfig().positionStrategy
377
- .withPositions(this.getAdjustedPositions())
378
- .withPush(true);
379
- if (reapplyPosition) {
380
- setTimeout(() => position.reapplyLastPosition());
381
- }
382
- }
383
- /** @docs-private */
384
- getOverlayHandleComponentType() {
385
- return KbqAppSwitcherComponent;
386
- }
387
- /** @docs-private */
388
- updateClassMap(newPlacement = this.placement) {
389
- if (!this.instance)
390
- return;
391
- this.instance.updateClassMap(POSITION_TO_CSS_MAP[newPlacement], this.customClass, this.size);
392
- this.instance.markForCheck();
393
- }
394
- /** @docs-private */
395
- closingActions() {
396
- return merge(this.overlayRef.outsidePointerEvents(), this.overlayRef.backdropClick(), this.scrollDispatcher.scrolled());
397
- }
398
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqAppSwitcherTrigger, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
399
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: KbqAppSwitcherTrigger, isStandalone: true, selector: "[kbqAppSwitcher]", inputs: { selectedApp: "selectedApp", placement: ["kbqAppSwitcherPlacement", "placement"], backdropClass: "backdropClass", offset: ["offset", "offset", numberAttribute], sites: "sites", apps: "apps", groupBy: "groupBy", selectedSite: "selectedSite", disabled: ["disabled", "disabled", booleanAttribute] }, outputs: { placementChange: "kbqPlacementChange", visibleChange: "kbqVisibleChange", selectedSiteChange: "selectedSiteChange", selectedAppChange: "selectedAppChange" }, host: { listeners: { "keydown": "keydownHandler($event)", "touchend": "touchendHandler()" }, properties: { "class.kbq-app-switcher_open": "isOpen", "class.kbq-active": "hasClickTrigger && isOpen" } }, exportAs: ["kbqAppSwitcher"], usesInheritance: true, ngImport: i0 }); }
400
- }
401
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqAppSwitcherTrigger, decorators: [{
402
- type: Directive,
403
- args: [{
404
- standalone: true,
405
- selector: '[kbqAppSwitcher]',
406
- exportAs: 'kbqAppSwitcher',
407
- host: {
408
- '[class.kbq-app-switcher_open]': 'isOpen',
409
- '[class.kbq-active]': 'hasClickTrigger && isOpen',
410
- '(keydown)': 'keydownHandler($event)',
411
- '(touchend)': 'touchendHandler()'
412
- }
413
- }]
414
- }], propDecorators: { selectedApp: [{
415
- type: Input
416
- }], placement: [{
417
- type: Input,
418
- args: ['kbqAppSwitcherPlacement']
419
- }], backdropClass: [{
420
- type: Input
421
- }], offset: [{
422
- type: Input,
423
- args: [{ transform: numberAttribute }]
424
- }], sites: [{
425
- type: Input
426
- }], apps: [{
427
- type: Input
428
- }], groupBy: [{
429
- type: Input
430
- }], selectedSite: [{
431
- type: Input
432
- }], disabled: [{
433
- type: Input,
434
- args: [{ transform: booleanAttribute }]
435
- }], placementChange: [{
436
- type: Output,
437
- args: ['kbqPlacementChange']
438
- }], visibleChange: [{
439
- type: Output,
440
- args: ['kbqVisibleChange']
441
- }], selectedSiteChange: [{
442
- type: Output
443
- }], selectedAppChange: [{
444
- type: Output
445
- }] } });
446
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXN3aXRjaGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9hcHAtc3dpdGNoZXIvYXBwLXN3aXRjaGVyLnRzIiwiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tcG9uZW50cy9hcHAtc3dpdGNoZXIvYXBwLXN3aXRjaGVyLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUdILE9BQU8sRUFHVixNQUFNLHNCQUFzQixDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdEQsT0FBTyxFQUdILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxFQUNULFlBQVksRUFDWixjQUFjLEVBQ2QsS0FBSyxFQUVMLE1BQU0sRUFHTixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLGdCQUFnQixFQUNoQixNQUFNLEVBQ04sZUFBZSxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQ0gsa0JBQWtCLEVBQ2xCLGVBQWUsRUFDZixRQUFRLEVBQ1IsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixlQUFlLEVBQ2YsVUFBVSxFQUNWLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsY0FBYyxFQUNqQixNQUFNLHlCQUF5QixDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBRSxN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ckIscUJBQXFCLDRNQThEVixlQUFlLHNIQWlHZixnQkFBZ0I7OzRGQS9KM0IscUJBQXFCO2tCQVhqQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixJQUFJLEVBQUU7d0JBQ0YsK0JBQStCLEVBQUUsUUFBUTt3QkFDekMsb0JBQW9CLEVBQUUsMkJBQTJCO3dCQUNqRCxXQUFXLEVBQUUsd0JBQXdCO3dCQUNyQyxZQUFZLEVBQUUsbUJBQW1CO3FCQUNwQztpQkFDSjs4QkFzRFksV0FBVztzQkFBbkIsS0FBSztnQkFHNEIsU0FBUztzQkFBMUMsS0FBSzt1QkFBQyx5QkFBeUI7Z0JBR3ZCLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR2lDLE1BQU07c0JBQTVDLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFO2dCQUlqQyxLQUFLO3NCQURSLEtBQUs7Z0JBdUJGLElBQUk7c0JBRFAsS0FBSztnQkFzQ0YsT0FBTztzQkFEVixLQUFLO2dCQW1CRixZQUFZO3NCQURmLEtBQUs7Z0JBa0JGLFFBQVE7c0JBRFgsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFtQkMsZUFBZTtzQkFBckQsTUFBTTt1QkFBQyxvQkFBb0I7Z0JBR1MsYUFBYTtzQkFBakQsTUFBTTt1QkFBQyxrQkFBa0I7Z0JBR1Asa0JBQWtCO3NCQUFwQyxNQUFNO2dCQUVZLGlCQUFpQjtzQkFBbkMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQge1xuICAgIENka1Njcm9sbGFibGUsXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICAgIE92ZXJsYXksXG4gICAgT3ZlcmxheUNvbmZpZyxcbiAgICBTY3JvbGxTdHJhdGVneVxufSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBBc3luY1BpcGUsIEpzb25QaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBEaXJlY3RpdmUsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVHlwZSxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBpbmplY3QsXG4gICAgbnVtYmVyQXR0cmlidXRlXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgS2JxQmFkZ2VNb2R1bGUgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvYmFkZ2UnO1xuaW1wb3J0IHtcbiAgICBLQlFfTE9DQUxFX1NFUlZJQ0UsXG4gICAgS2JxT3B0aW9uTW9kdWxlLFxuICAgIEticVBvcFVwLFxuICAgIEticVBvcFVwVHJpZ2dlcixcbiAgICBQT1NJVElPTl9UT19DU1NfTUFQLFxuICAgIFBvcFVwUGxhY2VtZW50cyxcbiAgICBQb3BVcFNpemVzLFxuICAgIFBvcFVwVHJpZ2dlcnMsXG4gICAgYXBwbHlQb3B1cE1hcmdpbnMsXG4gICAgcnVSVUxvY2FsZURhdGFcbn0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IHsgS2JxRGl2aWRlck1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9kaXZpZGVyJztcbmltcG9ydCB7IEticURyb3Bkb3duTW9kdWxlLCBLYnFEcm9wZG93blRyaWdnZXIgfSBmcm9tICdAa29vYmlxL2NvbXBvbmVudHMvZHJvcGRvd24nO1xuaW1wb3J0IHsgS2JxRm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgS2JxSWNvbk1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pY29uJztcbmltcG9ydCB7IEticUlucHV0LCBLYnFJbnB1dE1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9pbnB1dCc7XG5pbXBvcnQgeyBkZWZhdWx0T2Zmc2V0WVdpdGhBcnJvdyB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9wb3BvdmVyJztcbmltcG9ydCB7IEticVNjcm9sbGJhck1vZHVsZSB9IGZyb20gJ0Brb29iaXEvY29tcG9uZW50cy9zY3JvbGxiYXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsga2JxQXBwU3dpdGNoZXJBbmltYXRpb25zIH0gZnJvbSAnLi9hcHAtc3dpdGNoZXItYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBLYnFBcHBTd2l0Y2hlckRyb3Bkb3duQXBwIH0gZnJvbSAnLi9hcHAtc3dpdGNoZXItZHJvcGRvd24tYXBwJztcbmltcG9ydCB7IEticUFwcFN3aXRjaGVyRHJvcGRvd25TaXRlIH0gZnJvbSAnLi9hcHAtc3dpdGNoZXItZHJvcGRvd24tc2l0ZSc7XG5pbXBvcnQgeyBLYnFBcHBTd2l0Y2hlckxpc3RJdGVtIH0gZnJvbSAnLi9rYnEtYXBwLXN3aXRjaGVyLWxpc3QtaXRlbSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgS2JxQXBwU3dpdGNoZXJBcHAge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHR5cGU/OiBzdHJpbmcgfCBudW1iZXI7XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIGNhcHRpb24/OiBzdHJpbmc7XG4gICAgYWxpYXNlcz86IEticUFwcFN3aXRjaGVyQXBwW107XG4gICAgbGluaz86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBLYnFBcHBTd2l0Y2hlclNpdGUge1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBpZDogc3RyaW5nIHwgbnVtYmVyO1xuICAgIHN0YXR1cz86IHN0cmluZztcbiAgICBpY29uPzogc3RyaW5nO1xuICAgIGFwcHM6IEticUFwcFN3aXRjaGVyQXBwW107XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24gZGVmYXVsdEdyb3VwQnkoXG4gICAgYXBwOiBLYnFBcHBTd2l0Y2hlckFwcCxcbiAgICBncm91cHM6IFJlY29yZDxzdHJpbmcsIEticUFwcFN3aXRjaGVyQXBwPixcbiAgICB1bnR5cGVkOiBLYnFBcHBTd2l0Y2hlckFwcFtdXG4pIHtcbiAgICBpZiAoIWFwcC50eXBlKSB7XG4gICAgICAgIHVudHlwZWQucHVzaChhcHApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGFwcFR5cGUgPSBhcHAudHlwZS50b1N0cmluZygpO1xuXG4gICAgICAgIGlmIChncm91cHNbYXBwVHlwZV0pIHtcbiAgICAgICAgICAgIGdyb3Vwc1thcHBUeXBlXS5hbGlhc2VzIS5wdXNoKGFwcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBncm91cHNbYXBwVHlwZV0gPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogYXBwVHlwZSxcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBbYXBwXSxcbiAgICAgICAgICAgICAgICBpY29uOiBhcHAuaWNvbixcbiAgICAgICAgICAgICAgICBpZDogJydcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmV4cG9ydCBjb25zdCBLQlFfTUlOX05VTUJFUl9PRl9BUFBTX1RPX0VOQUJMRV9TRUFSQ0g6IG51bWJlciA9IDc7XG5leHBvcnQgY29uc3QgS0JRX01JTl9OVU1CRVJfT0ZfQVBQU19UT19FTkFCTEVfR1JPVVBJTkc6IG51bWJlciA9IDM7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgS0JRX0FQUF9TV0lUQ0hFUl9TQ1JPTExfU1RSQVRFR1kgPSBuZXcgSW5qZWN0aW9uVG9rZW48KCkgPT4gU2Nyb2xsU3RyYXRlZ3k+KFxuICAgICdrYnEtYXBwLXN3aXRjaGVyLXNjcm9sbC1zdHJhdGVneSdcbik7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgZnVuY3Rpb24ga2JxQXBwU3dpdGNoZXJTY3JvbGxTdHJhdGVneUZhY3Rvcnkob3ZlcmxheTogT3ZlcmxheSk6ICgpID0+IFNjcm9sbFN0cmF0ZWd5IHtcbiAgICByZXR1cm4gKCkgPT4gb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oeyBzY3JvbGxUaHJvdHRsZTogMjAgfSk7XG59XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgY29uc3QgS0JRX0FQUF9TV0lUQ0hFUl9TQ1JPTExfU1RSQVRFR1lfRkFDVE9SWV9QUk9WSURFUiA9IHtcbiAgICBwcm92aWRlOiBLQlFfQVBQX1NXSVRDSEVSX1NDUk9MTF9TVFJBVEVHWSxcbiAgICBkZXBzOiBbT3ZlcmxheV0sXG4gICAgdXNlRmFjdG9yeToga2JxQXBwU3dpdGNoZXJTY3JvbGxTdHJhdGVneUZhY3Rvcnlcbn07XG5cbi8qKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgYXBwLXN3aXRjaGVyICovXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGNvbnN0IEtCUV9BUFBfU1dJVENIRVJfREVGQVVMVF9DT05GSUdVUkFUSU9OID0gcnVSVUxvY2FsZURhdGEuYXBwU3dpdGNoZXI7XG5cbi8qKiBJbmplY3Rpb24gVG9rZW4gZm9yIHByb3ZpZGluZyBjb25maWd1cmF0aW9uIG9mIGFwcC1zd2l0Y2hlciAqL1xuLyoqIEBkb2NzLXByaXZhdGUgKi9cbmV4cG9ydCBjb25zdCBLQlFfQVBQX1NXSVRDSEVSX0NPTkZJR1VSQVRJT04gPSBuZXcgSW5qZWN0aW9uVG9rZW4oJ0ticUFwcFN3aXRjaGVyQ29uZmlndXJhdGlvbicpO1xuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2ticS1hcHAtc3dpdGNoZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hcHAtc3dpdGNoZXIuaHRtbCcsXG4gICAgcHJlc2VydmVXaGl0ZXNwYWNlczogZmFsc2UsXG4gICAgc3R5bGVVcmxzOiBbJy4vYXBwLXN3aXRjaGVyLnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAna2JxLWFwcC1zd2l0Y2hlcidcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBBc3luY1BpcGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBLYnFGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIEticUlucHV0TW9kdWxlLFxuICAgICAgICBLYnFJY29uTW9kdWxlLFxuICAgICAgICBLYnFEaXZpZGVyTW9kdWxlLFxuICAgICAgICBLYnFCYWRnZU1vZHVsZSxcbiAgICAgICAgS2JxRHJvcGRvd25Nb2R1bGUsXG4gICAgICAgIEticVNjcm9sbGJhck1vZHVsZSxcbiAgICAgICAgS2JxT3B0aW9uTW9kdWxlLFxuICAgICAgICBLYnFBcHBTd2l0Y2hlckRyb3Bkb3duQXBwLFxuICAgICAgICBLYnFBcHBTd2l0Y2hlckRyb3Bkb3duU2l0ZSxcbiAgICAgICAgS2JxQXBwU3dpdGNoZXJMaXN0SXRlbSxcbiAgICAgICAgSnNvblBpcGVcbiAgICBdLFxuICAgIGFuaW1hdGlvbnM6IFtrYnFBcHBTd2l0Y2hlckFuaW1hdGlvbnMuc3RhdGVdXG59KVxuZXhwb3J0IGNsYXNzIEticUFwcFN3aXRjaGVyQ29tcG9uZW50IGV4dGVuZHMgS2JxUG9wVXAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0IHtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBsb2NhbGVTZXJ2aWNlID0gaW5qZWN0KEtCUV9MT0NBTEVfU0VSVklDRSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICAgIHJlYWRvbmx5IGV4dGVybmFsQ29uZmlndXJhdGlvbiA9IGluamVjdChLQlFfQVBQX1NXSVRDSEVSX0NPTkZJR1VSQVRJT04sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICBjb25maWd1cmF0aW9uO1xuXG4gICAgLyoqIGxvY2FsaXplZCBkYXRhXG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcmVhZG9ubHkgc2VhcmNoQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGZpbHRlcmVkU2l0ZXM6IEticUFwcFN3aXRjaGVyU2l0ZVtdO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcmVmaXggPSAna2JxLWFwcC1zd2l0Y2hlcic7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHRyaWdnZXI6IEticUFwcFN3aXRjaGVyVHJpZ2dlcjtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgaXNUcmFwRm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJvdGVjdGVkIGFjdGl2ZVNpdGU6IEticUFwcFN3aXRjaGVyU2l0ZTtcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBhY3RpdmVBcHA6IEticUFwcFN3aXRjaGVyQXBwO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBAVmlld0NoaWxkKEticUlucHV0KSBpbnB1dDogS2JxSW5wdXQ7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBAVmlld0NoaWxkKCdvdGhlclNpdGVzJykgb3RoZXJTaXRlczogS2JxRHJvcGRvd25UcmlnZ2VyO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5sb2NhbGVTZXJ2aWNlPy5jaGFuZ2VzLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSh0aGlzLnVwZGF0ZUxvY2FsZVBhcmFtcyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmxvY2FsZVNlcnZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5pdERlZmF1bHRQYXJhbXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmlzaWJsZUNoYW5nZS5zdWJzY3JpYmUoKHN0YXRlKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vZmZzZXQgIT09IG51bGwgJiYgc3RhdGUpIHtcbiAgICAgICAgICAgICAgICBhcHBseVBvcHVwTWFyZ2lucyhcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlcixcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlZml4LFxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLm9mZnNldCEudG9TdHJpbmcoKX1weGBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlYXJjaENvbnRyb2wudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+ICh0aGlzLmZpbHRlcmVkU2l0ZXMgPSB0aGlzLmZpbHRlclNpdGVzKHZhbHVlKSkpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlQ2xhc3NNYXAocGxhY2VtZW50OiBzdHJpbmcsIGN1c3RvbUNsYXNzOiBzdHJpbmcsIHNpemU6IFBvcFVwU2l6ZXMpIHtcbiAgICAgICAgc3VwZXIudXBkYXRlQ2xhc3NNYXAocGxhY2VtZW50LCBjdXN0b21DbGFzcywgeyBbYCR7dGhpcy5wcmVmaXh9XyR7c2l6ZX1gXTogISFzaXplIH0pO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlVHJhcEZvY3VzKGlzVHJhcEZvY3VzOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNUcmFwRm9jdXMgPSBpc1RyYXBGb2N1cztcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGVzY2FwZUhhbmRsZXIoKSB7XG4gICAgICAgIHRoaXMuaGlkZSgwKTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHNlbGVjdEFwcEluU2l0ZShzaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGUsIGFwcDogS2JxQXBwU3dpdGNoZXJBcHApIHtcbiAgICAgICAgdGhpcy50cmlnZ2VyLnNlbGVjdGVkU2l0ZSA9IHNpdGU7XG4gICAgICAgIHRoaXMudHJpZ2dlci5zZWxlY3RlZEFwcCA9IGFwcDtcblxuICAgICAgICB0aGlzLnRyaWdnZXIuc2VsZWN0ZWRTaXRlQ2hhbmdlLmVtaXQoc2l0ZSk7XG4gICAgICAgIHRoaXMudHJpZ2dlci5zZWxlY3RlZEFwcENoYW5nZS5lbWl0KGFwcCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaWx0ZXJTaXRlcyhxdWVyeTogc3RyaW5nIHwgbnVsbCk6IEticUFwcFN3aXRjaGVyU2l0ZVtdIHtcbiAgICAgICAgY29uc3QgZmlsdGVyZWRTaXRlcyA9IHN0cnVjdHVyZWRDbG9uZSh0aGlzLnRyaWdnZXIub3JpZ2luYWxTaXRlcyk7XG5cbiAgICAgICAgcmV0dXJuIHF1ZXJ5XG4gICAgICAgICAgICA/IGZpbHRlcmVkU2l0ZXMuZmlsdGVyKChzaXRlKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEFwcHMgPSBzaXRlLmFwcHMuZmlsdGVyKChhcHApID0+IGFwcC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMocXVlcnkudG9Mb3dlckNhc2UoKSkpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyZWRBcHBzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgIHNpdGUuYXBwcyA9IGZpbHRlcmVkQXBwcztcblxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICA6IGZpbHRlcmVkU2l0ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVMb2NhbGVQYXJhbXMgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IHRoaXMuZXh0ZXJuYWxDb25maWd1cmF0aW9uIHx8IHRoaXMubG9jYWxlU2VydmljZT8uZ2V0UGFyYW1zKCdhcHBTd2l0Y2hlcicpO1xuXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaW5pdERlZmF1bHRQYXJhbXMoKSB7XG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IEtCUV9BUFBfU1dJVENIRVJfREVGQVVMVF9DT05GSUdVUkFUSU9OO1xuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ1trYnFBcHBTd2l0Y2hlcl0nLFxuICAgIGV4cG9ydEFzOiAna2JxQXBwU3dpdGNoZXInLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5rYnEtYXBwLXN3aXRjaGVyX29wZW5dJzogJ2lzT3BlbicsXG4gICAgICAgICdbY2xhc3Mua2JxLWFjdGl2ZV0nOiAnaGFzQ2xpY2tUcmlnZ2VyICYmIGlzT3BlbicsXG4gICAgICAgICcoa2V5ZG93biknOiAna2V5ZG93bkhhbmRsZXIoJGV2ZW50KScsXG4gICAgICAgICcodG91Y2hlbmQpJzogJ3RvdWNoZW5kSGFuZGxlcigpJ1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgS2JxQXBwU3dpdGNoZXJUcmlnZ2VyXG4gICAgZXh0ZW5kcyBLYnFQb3BVcFRyaWdnZXI8S2JxQXBwU3dpdGNoZXJDb21wb25lbnQ+XG4gICAgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBPbkluaXRcbntcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBzY3JvbGxTdHJhdGVneTogKCkgPT4gU2Nyb2xsU3RyYXRlZ3kgPSBpbmplY3QoS0JRX0FQUF9TV0lUQ0hFUl9TQ1JPTExfU1RSQVRFR1kpO1xuXG4gICAgLy8gbm90IHVzZWRcbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGFycm93OiBib29sZWFuID0gZmFsc2U7XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBjdXN0b21DbGFzczogc3RyaW5nO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJpdmF0ZSBoYXNCYWNrZHJvcDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJpdmF0ZSBzaXplOiBQb3BVcFNpemVzID0gUG9wVXBTaXplcy5NZWRpdW07XG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBjb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgaGVhZGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZm9vdGVyOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgcHJpdmF0ZSBjbG9zZU9uU2Nyb2xsOiBudWxsO1xuXG4gICAgLyoqIFdoZXRoZXIgc2VhcmNoIGlzIHVzZWQgb3Igbm90ICovXG4gICAgZ2V0IHdpdGhTZWFyY2goKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcHNDb3VudCA+IEtCUV9NSU5fTlVNQkVSX09GX0FQUFNfVE9fRU5BQkxFX1NFQVJDSDtcbiAgICB9XG5cbiAgICAvKiogTnVtYmVyIG9mIGFwcGxpY2F0aW9ucyB0byBjaG9vc2UgZnJvbVxuICAgICAqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBnZXQgYXBwc0NvdW50KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLnNpdGVzTW9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxTaXRlcy5yZWR1Y2UoKGFjYywgc2l0ZSkgPT4gYWNjICsgc2l0ZS5hcHBzLmxlbmd0aCwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW5hbEFwcHMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKiBXaGV0aGVyIHRoZSBzaXRlcyBhcmUgdXNlZCBvciBub3RcbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0IHNpdGVzTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3JpZ2luYWxTaXRlcz8ubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICAvKiogV2hldGhlciB0aGUgc2l0ZXMgYXJlIHVzZWQgb3Igbm90XG4gICAgICogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBjdXJyZW50QXBwcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZXNNb2RlID8gdGhpcy5zZWxlY3RlZFNpdGUuYXBwcyA6IHRoaXMuX3BhcnNlZEFwcHM7XG4gICAgfVxuXG4gICAgLyoqIFNlbGVjdGVkIGFwcGxpY2F0aW9uICovXG4gICAgQElucHV0KCkgc2VsZWN0ZWRBcHA6IEticUFwcFN3aXRjaGVyQXBwO1xuXG4gICAgLyoqIFBsYWNlbWVudCBvZiBwb3BVcCAqL1xuICAgIEBJbnB1dCgna2JxQXBwU3dpdGNoZXJQbGFjZW1lbnQnKSBwbGFjZW1lbnQ6IFBvcFVwUGxhY2VtZW50cyA9IFBvcFVwUGxhY2VtZW50cy5Cb3R0b21MZWZ0O1xuXG4gICAgLyoqIENsYXNzIHRoYXQgd2lsbCBiZSB1c2VkIGluIHRoZSBiYWNrZ3JvdW5kICovXG4gICAgQElucHV0KCkgYmFja2Ryb3BDbGFzczogc3RyaW5nID0gJ2Nkay1vdmVybGF5LXRyYW5zcGFyZW50LWJhY2tkcm9wJztcblxuICAgIC8qKiBPZmZzZXQgb2YgcG9wVXAgKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IG51bWJlckF0dHJpYnV0ZSB9KSBvZmZzZXQ6IG51bWJlciB8IG51bGwgPSBkZWZhdWx0T2Zmc2V0WVdpdGhBcnJvdztcblxuICAgIC8qKiBBcnJheSBvZiBzaXRlcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNpdGVzKCk6IEticUFwcFN3aXRjaGVyU2l0ZVtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3BhcnNlZFNpdGVzO1xuICAgIH1cblxuICAgIHNldCBzaXRlcyh2YWx1ZTogS2JxQXBwU3dpdGNoZXJTaXRlW10pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbFNpdGVzID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy5fcGFyc2VkU2l0ZXMgPSBbXTtcblxuICAgICAgICB2YWx1ZS5mb3JFYWNoKChzaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1NpdGU6IEticUFwcFN3aXRjaGVyU2l0ZSA9IHsgLi4uc2l0ZSwgYXBwczogW10gfTtcblxuICAgICAgICAgICAgbmV3U2l0ZS5hcHBzID0gdGhpcy5tYWtlR3JvdXBzRm9yQXBwcyhzaXRlLmFwcHMsIEtCUV9NSU5fTlVNQkVSX09GX0FQUFNfVE9fRU5BQkxFX0dST1VQSU5HKTtcblxuICAgICAgICAgICAgdGhpcy5fcGFyc2VkU2l0ZXMucHVzaChuZXdTaXRlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VkU2l0ZXM6IEticUFwcFN3aXRjaGVyU2l0ZVtdO1xuXG4gICAgLyoqIEFycmF5IG9mIGFwcGxpY2F0aW9ucyAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGFwcHMoKTogS2JxQXBwU3dpdGNoZXJBcHBbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJzZWRBcHBzO1xuICAgIH1cblxuICAgIHNldCBhcHBzKGFwcHM6IEticUFwcFN3aXRjaGVyQXBwW10pIHtcbiAgICAgICAgdGhpcy5vcmlnaW5hbEFwcHMgPSBhcHBzO1xuXG4gICAgICAgIHRoaXMuX3BhcnNlZEFwcHMgPSB0aGlzLm1ha2VHcm91cHNGb3JBcHBzKHRoaXMub3JpZ2luYWxBcHBzLCBLQlFfTUlOX05VTUJFUl9PRl9BUFBTX1RPX0VOQUJMRV9HUk9VUElORyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtYWtlR3JvdXBzRm9yQXBwcyhhcHBzOiBLYnFBcHBTd2l0Y2hlckFwcFtdLCBtaW5BcHBzRm9yR3JvdXBpbmc6IG51bWJlcik6IEticUFwcFN3aXRjaGVyQXBwW10ge1xuICAgICAgICBjb25zdCBncm91cHM6IFJlY29yZDxzdHJpbmcsIEticUFwcFN3aXRjaGVyQXBwPiA9IHt9O1xuICAgICAgICBjb25zdCB1bnR5cGVkOiBLYnFBcHBTd2l0Y2hlckFwcFtdID0gW107XG4gICAgICAgIGNvbnN0IGdyb3VwZWRBcHBzOiBLYnFBcHBTd2l0Y2hlckFwcFtdID0gW107XG5cbiAgICAgICAgYXBwcy5mb3JFYWNoKChhcHApID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBCeShhcHAsIGdyb3VwcywgdW50eXBlZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIE9iamVjdC52YWx1ZXMoZ3JvdXBzKS5mb3JFYWNoKChncm91cCkgPT4ge1xuICAgICAgICAgICAgaWYgKGdyb3VwLmFsaWFzZXMgJiYgZ3JvdXAuYWxpYXNlcy5sZW5ndGggPiBtaW5BcHBzRm9yR3JvdXBpbmcpIHtcbiAgICAgICAgICAgICAgICBncm91cGVkQXBwcy5wdXNoKGdyb3VwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdW50eXBlZC5wdXNoKC4uLmdyb3VwLmFsaWFzZXMhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZ3JvdXBlZEFwcHMucHVzaCguLi51bnR5cGVkKTtcblxuICAgICAgICByZXR1cm4gZ3JvdXBlZEFwcHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VkQXBwczogS2JxQXBwU3dpdGNoZXJBcHBbXTtcblxuICAgIC8qKiBGdW5jdGlvbiB0byBncm91cCB0aGUgYXBwcyBieSB0eXBlLiBUaGUgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXBwIG9iamVjdCB3aXRoIHR5cGUuXG4gICAgICogVGhlIHNlY29uZCBpcyBhIGdyb3VwcyBvYmplY3QgYW5kIHRoaXJkIGlzIGFuIGFycmF5IGZvciB1bnR5cGVkIGFwcHMgKi9cbiAgICBASW5wdXQoKVxuICAgIGdldCBncm91cEJ5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JvdXBCeTtcbiAgICB9XG5cbiAgICBzZXQgZ3JvdXBCeShcbiAgICAgICAgZm46IChhcHA6IEticUFwcFN3aXRjaGVyQXBwLCBncm91cHM6IFJlY29yZDxzdHJpbmcsIEticUFwcFN3aXRjaGVyQXBwPiwgdW50eXBlZDogS2JxQXBwU3dpdGNoZXJBcHBbXSkgPT4gdm9pZFxuICAgICkge1xuICAgICAgICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dyb3VwQnkgPSBmbjtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9ncm91cEJ5ID0gZGVmYXVsdEdyb3VwQnk7XG5cbiAgICAvKiogU2VsZWN0ZWQgc2l0ZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgZ2V0IHNlbGVjdGVkU2l0ZSgpOiBLYnFBcHBTd2l0Y2hlclNpdGUge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFyc2VkU2VsZWN0ZWRTaXRlO1xuICAgIH1cblxuICAgIHNldCBzZWxlY3RlZFNpdGUodmFsdWU6IEticUFwcFN3aXRjaGVyU2l0ZSkge1xuICAgICAgICBjb25zdCBvcmlnaW5WYWx1ZSA9IHRoaXMub3JpZ2luYWxTaXRlcy5maW5kKChzaXRlKSA9PiB2YWx1ZS5pZCA9PT0gc2l0ZS5pZCkgYXMgS2JxQXBwU3dpdGNoZXJTaXRlO1xuICAgICAgICBjb25zdCBuZXdTaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGUgPSB7IC4uLm9yaWdpblZhbHVlLCBhcHBzOiBbXSB9O1xuXG4gICAgICAgIG5ld1NpdGUuYXBwcyA9IHRoaXMubWFrZUdyb3Vwc0ZvckFwcHMob3JpZ2luVmFsdWUuYXBwcywgS0JRX01JTl9OVU1CRVJfT0ZfQVBQU19UT19FTkFCTEVfR1JPVVBJTkcpO1xuXG4gICAgICAgIHRoaXMuX3BhcnNlZFNlbGVjdGVkU2l0ZSA9IG5ld1NpdGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfcGFyc2VkU2VsZWN0ZWRTaXRlOiBLYnFBcHBTd2l0Y2hlclNpdGU7XG5cbiAgICAvKiogV2hldGhlciB0aGUgdHJpZ2dlciBpcyBkaXNhYmxlZC4gKi9cbiAgICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSlcbiAgICBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgICB9XG5cbiAgICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmICh0aGlzLl9kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIGdldCBoYXNDbGlja1RyaWdnZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXIuaW5jbHVkZXMoUG9wVXBUcmlnZ2Vycy5DbGljayk7XG4gICAgfVxuXG4gICAgLyoqIEVtaXRzIGEgY2hhbmdlIGV2ZW50IHdoZW5ldmVyIHRoZSBwbGFjZW1lbnQgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCdrYnFQbGFjZW1lbnRDaGFuZ2UnKSByZWFkb25seSBwbGFjZW1lbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICAvKiogRW1pdHMgYSBjaGFuZ2UgZXZlbnQgd2hlbmV2ZXIgdGhlIHZpc2libGUgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCdrYnFWaXNpYmxlQ2hhbmdlJykgcmVhZG9ubHkgdmlzaWJsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkU2l0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8S2JxQXBwU3dpdGNoZXJTaXRlPigpO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdGVkQXBwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxLYnFBcHBTd2l0Y2hlckFwcD4oKTtcblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgdHJpZ2dlcjogc3RyaW5nID0gYCR7UG9wVXBUcmlnZ2Vycy5DbGlja30sICR7UG9wVXBUcmlnZ2Vycy5LZXlkb3dufWA7XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIG9yaWdpbmFsU2l0ZXM6IEticUFwcFN3aXRjaGVyU2l0ZVtdO1xuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgb3JpZ2luYWxBcHBzOiBLYnFBcHBTd2l0Y2hlckFwcFtdO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgb3JpZ2luU2VsZWN0b3IgPSAnLmticS1hcHAtc3dpdGNoZXInO1xuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICBwcm90ZWN0ZWQgZ2V0IG92ZXJsYXlDb25maWcoKTogT3ZlcmxheUNvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYW5lbENsYXNzOiAna2JxLWFwcC1zd2l0Y2hlcl9fcGFuZWwnLFxuICAgICAgICAgICAgaGFzQmFja2Ryb3A6IHRoaXMuaGFzQmFja2Ryb3AsXG4gICAgICAgICAgICBiYWNrZHJvcENsYXNzOiB0aGlzLmJhY2tkcm9wQ2xhc3NcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHByb3RlY3RlZCBwcmV2ZW50Q2xvc2luZ0J5SW5uZXJTY3JvbGxTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsYWJsZVxuICAgICAgICAgICAgPy5lbGVtZW50U2Nyb2xsZWQoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHRoaXMuaGlkZUlmTm90SW5WaWV3UG9ydCk7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jbG9zZU9uU2Nyb2xsID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbERpc3BhdGNoZXIuc2Nyb2xsZWQoKS5zdWJzY3JpYmUoKHNjcm9sbGFibGU6IENka1Njcm9sbGFibGUgfCB2b2lkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFzY3JvbGxhYmxlPy5nZXRFbGVtZW50UmVmKCkubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ticS1oaWRlLW5lc3RlZC1wb3B1cCcpKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRSZWN0cyA9IHNjcm9sbGFibGUuZ2V0RWxlbWVudFJlZigpLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hpbGRSZWN0cyA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkUmVjdHMuYm90dG9tIDwgcGFyZW50UmVjdHMudG9wIHx8IGNoaWxkUmVjdHMudG9wID4gcGFyZW50UmVjdHMuYm90dG9tKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aXNpYmxlQ2hhbmdlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgodmlzaWJsZTogYm9vbGVhbikgPT4ge1xuICAgICAgICAgICAgaWYgKHZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcnhqcy9uby1uZXN0ZWQtc3Vic2NyaWJlXG4gICAgICAgICAgICAgICAgdGhpcy5wcmV2ZW50Q2xvc2luZ0J5SW5uZXJTY3JvbGxTdWJzY3JpcHRpb24gPSB0aGlzLmNsb3NpbmdBY3Rpb25zKCkuc3Vic2NyaWJlKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXZlbnRbJ3Njcm9sbERpc3BhdGNoZXInXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRbJ2ticVBvcG92ZXJQcmV2ZW50SGlkZSddID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Wyd0eXBlJ10gPSAnY2xpY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucHJldmVudENsb3NpbmdCeUlubmVyU2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGRvY3MtcHJpdmF0ZSAqL1xuICAgIHVwZGF0ZURhdGEoKSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UuaGVhZGVyID0gdGhpcy5oZWFkZXI7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuY29udGVudCA9IHRoaXMuY29udGVudDtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5hcnJvdyA9IHRoaXMuYXJyb3c7XG4gICAgICAgIHRoaXMuaW5zdGFuY2Uub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZm9vdGVyID0gdGhpcy5mb290ZXI7XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS51cGRhdGVUcmFwRm9jdXModGhpcy50cmlnZ2VyICE9PSBQb3BVcFRyaWdnZXJzLkZvY3VzKTtcblxuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb24odHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVXBkYXRlcyB0aGUgY3VycmVudCBwb3NpdGlvbi5cbiAgICAgKiBAZG9jcy1wcml2YXRlICovXG4gICAgdXBkYXRlUG9zaXRpb24ocmVhcHBseVBvc2l0aW9uOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5jcmVhdGVPdmVybGF5KCk7XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSAodGhpcy5vdmVybGF5UmVmLmdldENvbmZpZygpLnBvc2l0aW9uU3RyYXRlZ3kgYXMgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5KVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnModGhpcy5nZXRBZGp1c3RlZFBvc2l0aW9ucygpKVxuICAgICAgICAgICAgLndpdGhQdXNoKHRydWUpO1xuXG4gICAgICAgIGlmIChyZWFwcGx5UG9zaXRpb24pIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gcG9zaXRpb24ucmVhcHBseUxhc3RQb3NpdGlvbigpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgZ2V0T3ZlcmxheUhhbmRsZUNvbXBvbmVudFR5cGUoKTogVHlwZTxLYnFBcHBTd2l0Y2hlckNvbXBvbmVudD4ge1xuICAgICAgICByZXR1cm4gS2JxQXBwU3dpdGNoZXJDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgLyoqIEBkb2NzLXByaXZhdGUgKi9cbiAgICB1cGRhdGVDbGFzc01hcChuZXdQbGFjZW1lbnQ6IHN0cmluZyA9IHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkgcmV0dXJuO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2UudXBkYXRlQ2xhc3NNYXAoUE9TSVRJT05fVE9fQ1NTX01BUFtuZXdQbGFjZW1lbnRdLCB0aGlzLmN1c3RvbUNsYXNzLCB0aGlzLnNpemUpO1xuICAgICAgICB0aGlzLmluc3RhbmNlLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBAZG9jcy1wcml2YXRlICovXG4gICAgY2xvc2luZ0FjdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBtZXJnZShcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiEub3V0c2lkZVBvaW50ZXJFdmVudHMoKSxcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiEuYmFja2Ryb3BDbGljaygpLFxuICAgICAgICAgICAgdGhpcy5zY3JvbGxEaXNwYXRjaGVyLnNjcm9sbGVkKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVJZk5vdEluVmlld1BvcnQgPSAoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5zY3JvbGxhYmxlKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5zY3JvbGxhYmxlLmdldEVsZW1lbnRSZWYoKS5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgcmVjdC5ib3R0b20gPj0gY29udGFpbmVyUmVjdC50b3AgJiZcbiAgICAgICAgICAgICAgICByZWN0LnJpZ2h0ID49IGNvbnRhaW5lclJlY3QubGVmdCAmJlxuICAgICAgICAgICAgICAgIHJlY3QudG9wIDw9IGNvbnRhaW5lclJlY3QuYm90dG9tICYmXG4gICAgICAgICAgICAgICAgcmVjdC5sZWZ0IDw9IGNvbnRhaW5lclJlY3QucmlnaHRcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iLCJAaWYgKHRyaWdnZXIud2l0aFNlYXJjaCkge1xuICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyX19zZWFyY2gtY29udGFpbmVyXCIgKG1vdXNlZW50ZXIpPVwib3RoZXJTaXRlcz8uY2xvc2UoKVwiPlxuICAgICAgICA8a2JxLWZvcm0tZmllbGQgbm9Cb3JkZXJzPlxuICAgICAgICAgICAgPGkga2JxLWljb249XCJrYnEtbWFnbmlmeWluZy1nbGFzc18xNlwiIGticVByZWZpeD48L2k+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIGticUlucHV0XG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7eyBsb2NhbGVEYXRhLnNlYXJjaFBsYWNlaG9sZGVyIH19XCJcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImVzY2FwZUhhbmRsZXIoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGticS1jbGVhbmVyIC8+XG4gICAgICAgIDwva2JxLWZvcm0tZmllbGQ+XG4gICAgPC9kaXY+XG5cbiAgICA8a2JxLWRpdmlkZXIgLz5cbn1cblxuPGRpdiBrYnEtc2Nyb2xsYmFyPlxuICAgIEBpZiAoIXNlYXJjaENvbnRyb2wuZ2V0UmF3VmFsdWUoKSkge1xuICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlcl9fYXBwLWNvbnRhaW5lclwiIChtb3VzZWVudGVyKT1cIm90aGVyU2l0ZXM/LmNsb3NlKClcIj5cbiAgICAgICAgICAgIEBpZiAodHJpZ2dlci5zaXRlc01vZGUpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1ncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXItZ3JvdXAtaGVhZGVyX190ZXh0XCI+e3sgdHJpZ2dlci5zZWxlY3RlZFNpdGU/Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgQGlmICh0cmlnZ2VyLnNlbGVjdGVkU2l0ZT8uc3RhdHVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8a2JxLWJhZGdlIGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1ncm91cC1oZWFkZXJfX2JhZGdlXCIgW2NvbXBhY3RdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHRyaWdnZXIuc2VsZWN0ZWRTaXRlLnN0YXR1cyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9rYnEtYmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPGticS1kcm9wZG93biBbY2xhc3NdPVwiJ2ticS1hcHAtc3dpdGNoZXItc2l0ZXMnXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBrYnFEcm9wZG93blN0YXRpY0NvbnRlbnQgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyLXNpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgQGZvciAoYXBwIG9mIHRyaWdnZXIuY3VycmVudEFwcHM7IHRyYWNrIGFwcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghYXBwLmFsaWFzZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYnEtYXBwLXN3aXRjaGVyLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBocmVmPVwie3sgYXBwLmxpbmsgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Mua2JxLXNlbGVjdGVkXT1cImFwcC5pZCA9PT0gdHJpZ2dlci5zZWxlY3RlZEFwcD8uaWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwXT1cImFwcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b2dnbGVdPVwiISFhcHAuYWxpYXNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2FwcFN3aXRjaGVyQXBwPVwia2JxQXBwU3dpdGNoZXJBcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrYnEtYXBwLXN3aXRjaGVyLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwXT1cImFwcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b2dnbGVdPVwiISFhcHAuYWxpYXNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghYXBwU3dpdGNoZXJBcHAuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGFsaWFzIG9mIGFwcC5hbGlhc2VzOyB0cmFjayBhbGlhcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImticS1hcHAtc3dpdGNoZXItc2l0ZV9uZXN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGticS1hcHAtc3dpdGNoZXItbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IGFsaWFzLmxpbmsgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rYnEtc2VsZWN0ZWRdPVwiYWxpYXMuaWQgPT09IHRyaWdnZXIuc2VsZWN0ZWRBcHA/LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXBwXT1cImFsaWFzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwva2JxLWRyb3Bkb3duPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICBAaWYgKHRyaWdnZXIuc2l0ZXNNb2RlKSB7XG4gICAgICAgICAgICA8a2JxLWRpdmlkZXIgLz5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXJfX3NpdGVzLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyLWdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1ncm91cC1oZWFkZXJfX3RleHRcIj57eyBsb2NhbGVEYXRhLnNpdGVzSGVhZGVyIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8a2JxLWRyb3Bkb3duICNvdGhlclNpdGVzPVwia2JxRHJvcGRvd25cIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBrYnFEcm9wZG93blN0YXRpY0NvbnRlbnQgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyLXNpdGVzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAZm9yIChzaXRlIG9mIHRyaWdnZXIuc2l0ZXM7IHRyYWNrIHNpdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNpdGUuaWQgIT09IHRyaWdnZXIuc2VsZWN0ZWRTaXRlPy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2JxLWFwcC1zd2l0Y2hlci1kcm9wZG93bi1zaXRlXT1cInNpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ticURyb3Bkb3duVHJpZ2dlckZvcl09XCJkcm9wZG93bldpdGhTZWxlY3RlZFNpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29mZnNldFhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJhY3RpdmVTaXRlID0gc2l0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwva2JxLWRyb3Bkb3duPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxrYnEtZHJvcGRvd24gI2Ryb3Bkb3duV2l0aFNlbGVjdGVkU2l0ZT1cImticURyb3Bkb3duXCIgW2NsYXNzXT1cIidrYnEtYXBwLXN3aXRjaGVyLXNpdGVzJ1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGFwcCBvZiBhY3RpdmVTaXRlPy5hcHBzOyB0cmFjayBhcHApIHtcbiAgICAgICAgICAgICAgICAgICAgQGlmIChhcHAuYWxpYXNlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bldpdGhHcm91cGVkQXBwc1RyaWdnZXI9XCJrYnFEcm9wZG93blRyaWdnZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrYnEtYXBwLXN3aXRjaGVyLWRyb3Bkb3duLWFwcF09XCJhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtrYnFEcm9wZG93blRyaWdnZXJGb3JdPVwiZHJvcGRvd25XaXRoR3JvdXBlZEFwcHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvZmZzZXRYXT1cIjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5rYnEtcHJlc3NlZF09XCJkcm9wZG93bldpdGhHcm91cGVkQXBwc1RyaWdnZXIub3BlbmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJhY3RpdmVBcHAgPSBhcHBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IGFwcC5saW5rIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBba2JxLWFwcC1zd2l0Y2hlci1kcm9wZG93bi1hcHBdPVwiYXBwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QXBwSW5TaXRlKGFjdGl2ZVNpdGUsIGFwcClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvYT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwva2JxLWRyb3Bkb3duPlxuXG4gICAgICAgICAgICA8a2JxLWRyb3Bkb3duICNkcm9wZG93bldpdGhHcm91cGVkQXBwcz1cImticURyb3Bkb3duXCIgW2NsYXNzXT1cIidrYnEtYXBwLXN3aXRjaGVyLXNpdGVzJ1wiPlxuICAgICAgICAgICAgICAgIEBmb3IgKGFsaWFzIG9mIGFjdGl2ZUFwcD8uYWxpYXNlczsgdHJhY2sgYWxpYXMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgIGhyZWY9XCJ7eyBhbGlhcy5saW5rIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtrYnEtYXBwLXN3aXRjaGVyLWRyb3Bkb3duLWFwcF09XCJhbGlhc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0QXBwSW5TaXRlKGFjdGl2ZVNpdGUsIGFsaWFzKVwiXG4gICAgICAgICAgICAgICAgICAgID48L2E+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9rYnEtZHJvcGRvd24+XG4gICAgICAgIH1cbiAgICB9IEBlbHNlIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImticS1hcHAtc3dpdGNoZXJfX3NlYXJjaC1yZXN1bHRcIj5cbiAgICAgICAgICAgIDxrYnEtZHJvcGRvd24gW2NsYXNzXT1cIidrYnEtYXBwLXN3aXRjaGVyLXNpdGVzJ1wiPlxuICAgICAgICAgICAgICAgIDxkaXYga2JxRHJvcGRvd25TdGF0aWNDb250ZW50IGNsYXNzPVwia2JxLWFwcC1zd2l0Y2hlci1zaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKHNpdGUgb2YgZmlsdGVyZWRTaXRlczsgdHJhY2sgc2l0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzaXRlLmFwcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8a2JxLW9wdGdyb3VwIGxhYmVsPVwie3sgc2l0ZS5uYW1lIH19XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoYXBwIG9mIHNpdGUuYXBwczsgdHJhY2sgYXBwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEga2JxLWFwcC1zd2l0Y2hlci1saXN0LWl0ZW0gaHJlZj1cInt7IGFwcC5saW5rIH19XCIgW2FwcF09XCJhcHBcIj48L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gQGVtcHR5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJrYnEtYXBwLXN3aXRjaGVyX19lbXB0eS1zZWFyY2gtcmVzdWx0XCI+e3sgbG9jYWxlRGF0YS5zZWFyY2hFbXB0eVJlc3VsdCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2ticS1kcm9wZG93bj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG4iXX0=