@koobiq/components 18.39.0 → 19.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (912) hide show
  1. package/accordion/accordion-content.d.ts +2 -2
  2. package/accordion/accordion-content.directive.d.ts +11 -0
  3. package/accordion/accordion-header.d.ts +2 -2
  4. package/accordion/accordion-header.directive.d.ts +7 -0
  5. package/accordion/accordion-item.d.ts +2 -2
  6. package/accordion/accordion-item.directive.d.ts +72 -0
  7. package/accordion/accordion-root.directive.d.ts +64 -0
  8. package/accordion/accordion-trigger.component.d.ts +2 -2
  9. package/accordion/accordion-trigger.directive.d.ts +13 -0
  10. package/accordion/accordion.component.d.ts +2 -4
  11. package/accordion/accordion.module.d.ts +7 -7
  12. package/accordion/public-api.d.ts +5 -0
  13. package/alert/_alert-theme.scss +4 -16
  14. package/alert/alert-tokens.scss +6 -12
  15. package/alert/alert.component.d.ts +5 -12
  16. package/alert/alert.module.d.ts +4 -4
  17. package/app-switcher/app-switcher.d.ts +8 -7
  18. package/autocomplete/autocomplete-origin.directive.d.ts +1 -1
  19. package/autocomplete/autocomplete-trigger.directive.d.ts +1 -1
  20. package/autocomplete/autocomplete.component.d.ts +1 -1
  21. package/autocomplete/autocomplete.module.d.ts +7 -7
  22. package/badge/badge.component.d.ts +3 -3
  23. package/badge/badge.module.d.ts +4 -4
  24. package/breadcrumbs/breadcrumbs.d.ts +3 -2
  25. package/breadcrumbs/public-api.d.ts +2 -0
  26. package/breadcrumbs/roving-focus-group.directive.d.ts +50 -0
  27. package/breadcrumbs/roving-focus-item.directive.d.ts +50 -0
  28. package/breadcrumbs/utils.d.ts +19 -0
  29. package/button/button.component.d.ts +2 -2
  30. package/button/button.module.d.ts +6 -6
  31. package/button-toggle/_button-toggle-theme.scss +30 -27
  32. package/button-toggle/button-toggle.component.d.ts +2 -2
  33. package/button-toggle/button-toggle.module.d.ts +4 -4
  34. package/button-toggle/button-toggle.scss +2 -2
  35. package/checkbox/checkbox-module.d.ts +4 -4
  36. package/checkbox/checkbox-required-validator.d.ts +1 -1
  37. package/checkbox/checkbox.d.ts +1 -1
  38. package/checkbox/checkbox.scss +5 -21
  39. package/code-block/code-block.scss +2 -2
  40. package/core/common-behaviors/index.d.ts +0 -1
  41. package/core/formatters/date/formatter.pipe.d.ts +13 -0
  42. package/core/formatters/index.d.ts +4 -4
  43. package/core/formatters/number/formatter.d.ts +3 -3
  44. package/core/forms/forms-module.d.ts +1 -1
  45. package/core/forms/forms.directive.d.ts +2 -2
  46. package/core/highlight/highlight.pipe.d.ts +1 -1
  47. package/core/highlight/index.d.ts +3 -3
  48. package/core/line/line.d.ts +1 -6
  49. package/core/locales/en-US.d.ts +8 -0
  50. package/core/locales/es-LA.d.ts +8 -0
  51. package/core/locales/locale-service.d.ts +40 -0
  52. package/core/locales/pt-BR.d.ts +8 -0
  53. package/core/locales/ru-RU.d.ts +8 -0
  54. package/core/locales/tk-TM.d.ts +8 -0
  55. package/core/locales/types.d.ts +21 -0
  56. package/core/option/_option-theme.scss +5 -2
  57. package/core/option/action.d.ts +1 -1
  58. package/core/option/optgroup.d.ts +1 -1
  59. package/core/option/option-module.d.ts +5 -5
  60. package/core/option/option.d.ts +5 -1
  61. package/core/pop-up/constants.d.ts +4 -0
  62. package/core/pop-up/pop-up-trigger.d.ts +5 -5
  63. package/core/pop-up/pop-up.d.ts +1 -1
  64. package/core/select/common.d.ts +1 -1
  65. package/core/selection/pseudo-checkbox/pseudo-checkbox.d.ts +1 -1
  66. package/core/selection/pseudo-checkbox/pseudo-checkbox.module.d.ts +3 -3
  67. package/core/styles/common/_select.scss +1 -1
  68. package/core/styles/common/_visually-hidden.scss +1 -0
  69. package/core/styles/theming/_scrollbar-theme.scss +19 -12
  70. package/core/utils/utils.d.ts +3 -0
  71. package/datepicker/calendar-body.component.d.ts +1 -1
  72. package/datepicker/calendar-header.component.d.ts +1 -1
  73. package/datepicker/calendar.component.d.ts +1 -1
  74. package/datepicker/datepicker-input.directive.d.ts +2 -2
  75. package/datepicker/datepicker-module.d.ts +15 -15
  76. package/datepicker/datepicker-toggle.component.d.ts +2 -2
  77. package/datepicker/datepicker.component.d.ts +2 -2
  78. package/datepicker/month-view.component.d.ts +1 -1
  79. package/divider/divider.component.d.ts +5 -1
  80. package/divider/divider.module.d.ts +3 -3
  81. package/dl/dl.component.d.ts +3 -3
  82. package/dl/dl.module.d.ts +4 -4
  83. package/dropdown/dropdown-content.directive.d.ts +1 -1
  84. package/dropdown/dropdown-item.component.d.ts +1 -1
  85. package/dropdown/dropdown-trigger.directive.d.ts +1 -1
  86. package/dropdown/dropdown.component.d.ts +1 -1
  87. package/dropdown/dropdown.module.d.ts +8 -8
  88. package/dropdown/dropdown.scss +1 -0
  89. package/ellipsis-center/ellipsis-center.directive.d.ts +2 -2
  90. package/empty-state/empty-state.component.d.ts +5 -5
  91. package/empty-state/empty-state.module.d.ts +4 -4
  92. package/fesm2022/koobiq-components-accordion.mjs +459 -40
  93. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  94. package/fesm2022/koobiq-components-actions-panel.mjs +18 -18
  95. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  96. package/fesm2022/koobiq-components-alert.mjs +28 -36
  97. package/fesm2022/koobiq-components-alert.mjs.map +1 -1
  98. package/fesm2022/koobiq-components-app-switcher.mjs +66 -66
  99. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  100. package/fesm2022/koobiq-components-autocomplete.mjs +31 -25
  101. package/fesm2022/koobiq-components-autocomplete.mjs.map +1 -1
  102. package/fesm2022/koobiq-components-badge.mjs +20 -21
  103. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  104. package/fesm2022/koobiq-components-breadcrumbs.mjs +339 -36
  105. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  106. package/fesm2022/koobiq-components-button-toggle.mjs +25 -22
  107. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  108. package/fesm2022/koobiq-components-button.mjs +25 -26
  109. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  110. package/fesm2022/koobiq-components-checkbox.mjs +18 -16
  111. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  112. package/fesm2022/koobiq-components-clamped-text.mjs +9 -9
  113. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  114. package/fesm2022/koobiq-components-code-block.mjs +15 -16
  115. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  116. package/fesm2022/koobiq-components-content-panel.mjs +55 -57
  117. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  118. package/fesm2022/koobiq-components-core.mjs +379 -367
  119. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  120. package/fesm2022/koobiq-components-datepicker.mjs +107 -91
  121. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  122. package/fesm2022/koobiq-components-divider.mjs +16 -14
  123. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  124. package/fesm2022/koobiq-components-dl.mjs +19 -20
  125. package/fesm2022/koobiq-components-dl.mjs.map +1 -1
  126. package/fesm2022/koobiq-components-dropdown.mjs +47 -48
  127. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  128. package/fesm2022/koobiq-components-dynamic-translation.mjs +16 -19
  129. package/fesm2022/koobiq-components-dynamic-translation.mjs.map +1 -1
  130. package/fesm2022/koobiq-components-ellipsis-center.mjs +10 -10
  131. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  132. package/fesm2022/koobiq-components-empty-state.mjs +26 -27
  133. package/fesm2022/koobiq-components-empty-state.mjs.map +1 -1
  134. package/fesm2022/koobiq-components-file-upload.mjs +402 -152
  135. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  136. package/fesm2022/koobiq-components-filter-bar.mjs +293 -258
  137. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  138. package/fesm2022/koobiq-components-form-field.mjs +84 -92
  139. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  140. package/fesm2022/koobiq-components-icon.mjs +18 -18
  141. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  142. package/fesm2022/koobiq-components-inline-edit.mjs +33 -37
  143. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  144. package/fesm2022/koobiq-components-input.mjs +31 -30
  145. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  146. package/fesm2022/koobiq-components-link.mjs +11 -10
  147. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  148. package/fesm2022/koobiq-components-list.mjs +47 -45
  149. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  150. package/fesm2022/koobiq-components-loader-overlay.mjs +27 -28
  151. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  152. package/fesm2022/koobiq-components-markdown.mjs +14 -14
  153. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  154. package/fesm2022/koobiq-components-modal.mjs +76 -64
  155. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  156. package/fesm2022/koobiq-components-navbar-ic.mjs +76 -54
  157. package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -1
  158. package/fesm2022/koobiq-components-navbar.mjs +77 -66
  159. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  160. package/fesm2022/koobiq-components-notification-center.mjs +31 -32
  161. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  162. package/fesm2022/koobiq-components-overflow-items.mjs +16 -19
  163. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  164. package/fesm2022/koobiq-components-popover.mjs +55 -46
  165. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  166. package/fesm2022/koobiq-components-progress-bar.mjs +18 -19
  167. package/fesm2022/koobiq-components-progress-bar.mjs.map +1 -1
  168. package/fesm2022/koobiq-components-progress-spinner.mjs +22 -23
  169. package/fesm2022/koobiq-components-progress-spinner.mjs.map +1 -1
  170. package/fesm2022/koobiq-components-radio.mjs +20 -16
  171. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  172. package/fesm2022/koobiq-components-resizer.mjs +10 -12
  173. package/fesm2022/koobiq-components-resizer.mjs.map +1 -1
  174. package/fesm2022/koobiq-components-risk-level.mjs +19 -12
  175. package/fesm2022/koobiq-components-risk-level.mjs.map +1 -1
  176. package/fesm2022/koobiq-components-scrollbar.mjs +17 -18
  177. package/fesm2022/koobiq-components-scrollbar.mjs.map +1 -1
  178. package/fesm2022/koobiq-components-search-expandable.mjs +19 -19
  179. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  180. package/fesm2022/koobiq-components-select.mjs +113 -74
  181. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  182. package/fesm2022/koobiq-components-sidebar.mjs +16 -23
  183. package/fesm2022/koobiq-components-sidebar.mjs.map +1 -1
  184. package/fesm2022/koobiq-components-sidepanel.mjs +61 -55
  185. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  186. package/fesm2022/koobiq-components-split-button.mjs +12 -12
  187. package/fesm2022/koobiq-components-split-button.mjs.map +1 -1
  188. package/fesm2022/koobiq-components-splitter.mjs +24 -25
  189. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  190. package/fesm2022/koobiq-components-table.mjs +17 -18
  191. package/fesm2022/koobiq-components-table.mjs.map +1 -1
  192. package/fesm2022/koobiq-components-tabs.mjs +85 -89
  193. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  194. package/fesm2022/koobiq-components-tags.mjs +43 -47
  195. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  196. package/fesm2022/koobiq-components-textarea.mjs +10 -11
  197. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  198. package/fesm2022/koobiq-components-time-range.mjs +38 -40
  199. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  200. package/fesm2022/koobiq-components-timepicker.mjs +68 -18
  201. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  202. package/fesm2022/koobiq-components-timezone.mjs +68 -59
  203. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  204. package/fesm2022/koobiq-components-title.mjs +23 -11
  205. package/fesm2022/koobiq-components-title.mjs.map +1 -1
  206. package/fesm2022/koobiq-components-toast.mjs +23 -24
  207. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  208. package/fesm2022/koobiq-components-toggle.mjs +16 -14
  209. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  210. package/fesm2022/koobiq-components-tooltip.mjs +20 -23
  211. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  212. package/fesm2022/koobiq-components-top-bar.mjs +18 -20
  213. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  214. package/fesm2022/koobiq-components-tree-select.mjs +81 -70
  215. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  216. package/fesm2022/koobiq-components-tree.mjs +77 -66
  217. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  218. package/fesm2022/koobiq-components-username.mjs +31 -37
  219. package/fesm2022/koobiq-components-username.mjs.map +1 -1
  220. package/file-upload/file-upload.d.ts +33 -3
  221. package/file-upload/file-upload.module.d.ts +15 -15
  222. package/file-upload/multiple-file-upload.component.d.ts +25 -34
  223. package/file-upload/{file-drop.d.ts → primitives/file-drop.d.ts} +3 -3
  224. package/file-upload/primitives/file-picker.d.ts +82 -0
  225. package/file-upload/primitives/index.d.ts +2 -0
  226. package/file-upload/public-api.d.ts +2 -1
  227. package/file-upload/single-file-upload.component.d.ts +25 -18
  228. package/filter-bar/pipes/pipe-multi-select.d.ts +4 -1
  229. package/filter-bar/pipes/pipe-multi-tree-select.d.ts +5 -0
  230. package/icon/_icon-button-theme.scss +2 -1
  231. package/inline-edit/inline-edit.d.ts +2 -3
  232. package/input/_input-theme.scss +2 -1
  233. package/input/input-number-validators.d.ts +2 -2
  234. package/input/input-number.d.ts +1 -1
  235. package/input/input-password.d.ts +1 -1
  236. package/input/input.d.ts +2 -2
  237. package/input/input.module.d.ts +8 -8
  238. package/link/_link-theme.scss +3 -0
  239. package/link/link.component.d.ts +1 -1
  240. package/link/link.module.d.ts +3 -3
  241. package/list/_list-theme.scss +6 -0
  242. package/list/list-selection.component.d.ts +3 -3
  243. package/list/list.component.d.ts +2 -2
  244. package/list/list.module.d.ts +6 -6
  245. package/list/list.scss +1 -0
  246. package/loader-overlay/loader-overlay.component.d.ts +4 -4
  247. package/loader-overlay/loader-overlay.module.d.ts +5 -5
  248. package/loader-overlay/loader-overlay.scss +22 -31
  249. package/modal/css-unit.pipe.d.ts +1 -1
  250. package/modal/modal.component.d.ts +1 -1
  251. package/modal/modal.directive.d.ts +4 -4
  252. package/modal/modal.module.d.ts +10 -10
  253. package/modal/modal.scss +1 -1
  254. package/modal/modal.service.d.ts +1 -1
  255. package/navbar/_navbar-theme.scss +1 -0
  256. package/navbar/navbar-brand.component.d.ts +1 -1
  257. package/navbar/navbar-item.component.d.ts +7 -7
  258. package/navbar/navbar-toggle.component.d.ts +1 -1
  259. package/navbar/navbar-toggle.scss +1 -1
  260. package/navbar/navbar.component.d.ts +4 -4
  261. package/navbar/navbar.module.d.ts +10 -10
  262. package/navbar/vertical-navbar.component.d.ts +1 -1
  263. package/navbar/vertical-navbar.scss +5 -2
  264. package/navbar-ic/navbar-ic-header.d.ts +3 -0
  265. package/navbar-ic/navbar-ic-item.d.ts +18 -0
  266. package/navbar-ic/navbar-ic.d.ts +13 -7
  267. package/notification-center/notification-center.d.ts +5 -5
  268. package/overflow-items/overflow-items.d.ts +1 -1
  269. package/package.json +11 -142
  270. package/popover/_popover-theme.scss +2 -2
  271. package/popover/popover-confirm.component.d.ts +2 -2
  272. package/popover/popover.component.d.ts +9 -9
  273. package/popover/popover.module.d.ts +9 -9
  274. package/prebuilt-themes/dark-theme.css +1 -1
  275. package/prebuilt-themes/light-theme.css +1 -1
  276. package/prebuilt-themes/theme.css +1 -1
  277. package/progress-bar/progress-bar.component.d.ts +3 -3
  278. package/progress-bar/progress-bar.module.d.ts +3 -3
  279. package/progress-spinner/_progress-spinner-theme.scss +14 -4
  280. package/progress-spinner/progress-spinner-tokens.scss +2 -0
  281. package/progress-spinner/progress-spinner.component.d.ts +3 -3
  282. package/progress-spinner/progress-spinner.module.d.ts +4 -4
  283. package/progress-spinner/progress-spinner.scss +1 -0
  284. package/radio/_radio-theme.scss +2 -1
  285. package/radio/radio-tokens.scss +1 -0
  286. package/radio/radio.component.d.ts +10 -5
  287. package/radio/radio.module.d.ts +3 -3
  288. package/risk-level/risk-level.component.d.ts +4 -1
  289. package/risk-level/risk-level.module.d.ts +7 -4
  290. package/schematics/migrations/icons-replacement/README.md +5 -1
  291. package/schematics/migrations/icons-replacement/index.js +1 -1
  292. package/schematics/migrations/new-icons-pack/README.md +52 -4
  293. package/schematics/migrations/new-icons-pack/data.js +1142 -1142
  294. package/schematics/migrations/new-icons-pack/index.js +18 -7
  295. package/schematics/migrations/new-icons-pack/migration.json +4570 -0
  296. package/schematics/migrations/new-icons-pack/replacement.json +18 -0
  297. package/schematics/migrations/new-icons-pack/schema.json +13 -0
  298. package/schematics/ng-add/index.js +6 -7
  299. package/scrollbar/_scrollbar-component-theme.scss +16 -14
  300. package/select/select-option.directive.d.ts +1 -1
  301. package/select/select.component.d.ts +6 -5
  302. package/select/select.module.d.ts +10 -10
  303. package/sidebar/sidebar.component.d.ts +3 -3
  304. package/sidebar/sidebar.module.d.ts +3 -3
  305. package/sidepanel/sidepanel-container.component.d.ts +1 -1
  306. package/sidepanel/sidepanel-directives.d.ts +5 -5
  307. package/sidepanel/sidepanel.module.d.ts +9 -9
  308. package/splitter/splitter.component.d.ts +4 -4
  309. package/splitter/splitter.module.d.ts +3 -3
  310. package/table/_table-theme.scss +1 -0
  311. package/table/table.component.d.ts +2 -2
  312. package/table/table.module.d.ts +4 -4
  313. package/tabs/paginated-tab-header.d.ts +1 -1
  314. package/tabs/tab-body.component.d.ts +2 -2
  315. package/tabs/tab-content.directive.d.ts +1 -1
  316. package/tabs/tab-group.component.d.ts +5 -5
  317. package/tabs/tab-header.component.d.ts +1 -1
  318. package/tabs/tab-label-wrapper.directive.d.ts +1 -1
  319. package/tabs/tab-label.directive.d.ts +1 -1
  320. package/tabs/tab.component.d.ts +3 -3
  321. package/tabs/tabs.module.d.ts +15 -15
  322. package/tags/tag-input.d.ts +1 -1
  323. package/tags/tag-list.component.d.ts +1 -1
  324. package/tags/tag.component.d.ts +4 -4
  325. package/tags/tag.module.d.ts +4 -4
  326. package/textarea/textarea.component.d.ts +1 -1
  327. package/textarea/textarea.module.d.ts +4 -4
  328. package/timepicker/timepicker.directive.d.ts +17 -7
  329. package/timepicker/timepicker.module.d.ts +5 -5
  330. package/timezone/cities-by-filter.pipe.d.ts +1 -1
  331. package/timezone/timezone-option.component.d.ts +1 -1
  332. package/timezone/timezone-option.directive.d.ts +1 -1
  333. package/timezone/timezone-select.component.d.ts +2 -2
  334. package/timezone/timezone.module.d.ts +15 -15
  335. package/timezone/utc-offset.pipe.d.ts +1 -1
  336. package/title/title.directive.d.ts +4 -1
  337. package/title/title.module.d.ts +3 -3
  338. package/toggle/toggle.component.d.ts +1 -1
  339. package/toggle/toggle.module.d.ts +3 -3
  340. package/tooltip/_tooltip-theme.scss +5 -6
  341. package/tooltip/tooltip.component.d.ts +3 -3
  342. package/tooltip/tooltip.scss +1 -0
  343. package/top-bar/top-bar.d.ts +1 -1
  344. package/tree/node.d.ts +1 -1
  345. package/tree/outlet.d.ts +1 -1
  346. package/tree/padding.directive.d.ts +1 -1
  347. package/tree/toggle.d.ts +3 -3
  348. package/tree/tree-base.d.ts +2 -2
  349. package/tree/tree-option.component.d.ts +1 -1
  350. package/tree/tree-option.scss +1 -1
  351. package/tree/tree-selection.component.d.ts +1 -1
  352. package/tree/tree.d.ts +1 -1
  353. package/tree/tree.module.d.ts +11 -11
  354. package/tree-select/tree-select.component.d.ts +2 -2
  355. package/tree-select/tree-select.module.d.ts +9 -9
  356. package/core/common-behaviors/focus-monitor.d.ts +0 -19
  357. package/esm2022/accordion/accordion-content.mjs +0 -19
  358. package/esm2022/accordion/accordion-header.mjs +0 -19
  359. package/esm2022/accordion/accordion-item.mjs +0 -25
  360. package/esm2022/accordion/accordion-trigger.component.mjs +0 -48
  361. package/esm2022/accordion/accordion.component.mjs +0 -41
  362. package/esm2022/accordion/accordion.module.mjs +0 -44
  363. package/esm2022/accordion/index.mjs +0 -2
  364. package/esm2022/accordion/koobiq-components-accordion.mjs +0 -5
  365. package/esm2022/accordion/public-api.mjs +0 -7
  366. package/esm2022/actions-panel/actions-panel-config.mjs +0 -55
  367. package/esm2022/actions-panel/actions-panel-container.mjs +0 -217
  368. package/esm2022/actions-panel/actions-panel-ref.mjs +0 -78
  369. package/esm2022/actions-panel/actions-panel.mjs +0 -133
  370. package/esm2022/actions-panel/index.mjs +0 -6
  371. package/esm2022/actions-panel/koobiq-components-actions-panel.mjs +0 -5
  372. package/esm2022/actions-panel/module.mjs +0 -21
  373. package/esm2022/alert/alert.component.mjs +0 -124
  374. package/esm2022/alert/alert.module.mjs +0 -40
  375. package/esm2022/alert/index.mjs +0 -2
  376. package/esm2022/alert/koobiq-components-alert.mjs +0 -5
  377. package/esm2022/alert/public-api.mjs +0 -3
  378. package/esm2022/app-switcher/app-switcher-animations.mjs +0 -18
  379. package/esm2022/app-switcher/app-switcher-dropdown-app.mjs +0 -75
  380. package/esm2022/app-switcher/app-switcher-dropdown-site.mjs +0 -60
  381. package/esm2022/app-switcher/app-switcher.mjs +0 -446
  382. package/esm2022/app-switcher/app-switcher.module.mjs +0 -45
  383. package/esm2022/app-switcher/index.mjs +0 -2
  384. package/esm2022/app-switcher/kbq-app-switcher-list-item.mjs +0 -84
  385. package/esm2022/app-switcher/koobiq-components-app-switcher.mjs +0 -5
  386. package/esm2022/app-switcher/public-api.mjs +0 -7
  387. package/esm2022/autocomplete/autocomplete-origin.directive.mjs +0 -21
  388. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +0 -540
  389. package/esm2022/autocomplete/autocomplete.component.mjs +0 -178
  390. package/esm2022/autocomplete/autocomplete.module.mjs +0 -38
  391. package/esm2022/autocomplete/index.mjs +0 -2
  392. package/esm2022/autocomplete/koobiq-components-autocomplete.mjs +0 -5
  393. package/esm2022/autocomplete/public-api.mjs +0 -5
  394. package/esm2022/badge/badge.component.mjs +0 -124
  395. package/esm2022/badge/badge.module.mjs +0 -36
  396. package/esm2022/badge/index.mjs +0 -2
  397. package/esm2022/badge/koobiq-components-badge.mjs +0 -5
  398. package/esm2022/badge/public-api.mjs +0 -3
  399. package/esm2022/breadcrumbs/breadcrumbs.mjs +0 -268
  400. package/esm2022/breadcrumbs/breadcrumbs.module.mjs +0 -31
  401. package/esm2022/breadcrumbs/breadcrumbs.types.mjs +0 -2
  402. package/esm2022/breadcrumbs/index.mjs +0 -2
  403. package/esm2022/breadcrumbs/koobiq-components-breadcrumbs.mjs +0 -5
  404. package/esm2022/breadcrumbs/public-api.mjs +0 -4
  405. package/esm2022/button/button.component.mjs +0 -180
  406. package/esm2022/button/button.dropdown-trigger.directive.mjs +0 -28
  407. package/esm2022/button/button.module.mjs +0 -41
  408. package/esm2022/button/index.mjs +0 -2
  409. package/esm2022/button/koobiq-components-button.mjs +0 -5
  410. package/esm2022/button/public-api.mjs +0 -4
  411. package/esm2022/button-toggle/button-toggle.component.mjs +0 -384
  412. package/esm2022/button-toggle/button-toggle.module.mjs +0 -19
  413. package/esm2022/button-toggle/index.mjs +0 -2
  414. package/esm2022/button-toggle/koobiq-components-button-toggle.mjs +0 -5
  415. package/esm2022/button-toggle/public-api.mjs +0 -3
  416. package/esm2022/checkbox/checkbox-config.mjs +0 -6
  417. package/esm2022/checkbox/checkbox-module.mjs +0 -19
  418. package/esm2022/checkbox/checkbox-required-validator.mjs +0 -27
  419. package/esm2022/checkbox/checkbox.mjs +0 -295
  420. package/esm2022/checkbox/index.mjs +0 -2
  421. package/esm2022/checkbox/koobiq-components-checkbox.mjs +0 -5
  422. package/esm2022/checkbox/public-api.mjs +0 -5
  423. package/esm2022/clamped-text/clamped-text.mjs +0 -202
  424. package/esm2022/clamped-text/constants.mjs +0 -20
  425. package/esm2022/clamped-text/index.mjs +0 -4
  426. package/esm2022/clamped-text/koobiq-components-clamped-text.mjs +0 -5
  427. package/esm2022/clamped-text/module.mjs +0 -19
  428. package/esm2022/code-block/code-block-highlight.mjs +0 -418
  429. package/esm2022/code-block/code-block.mjs +0 -440
  430. package/esm2022/code-block/code-block.module.mjs +0 -19
  431. package/esm2022/code-block/index.mjs +0 -2
  432. package/esm2022/code-block/koobiq-components-code-block.mjs +0 -5
  433. package/esm2022/code-block/public-api.mjs +0 -5
  434. package/esm2022/code-block/types.mjs +0 -2
  435. package/esm2022/content-panel/content-panel.mjs +0 -432
  436. package/esm2022/content-panel/index.mjs +0 -3
  437. package/esm2022/content-panel/koobiq-components-content-panel.mjs +0 -5
  438. package/esm2022/content-panel/module.mjs +0 -42
  439. package/esm2022/core/animation/animation.mjs +0 -39
  440. package/esm2022/core/animation/fade-animations.mjs +0 -9
  441. package/esm2022/core/animation/index.mjs +0 -4
  442. package/esm2022/core/animation/select-animations.mjs +0 -45
  443. package/esm2022/core/common-behaviors/checkbox.mjs +0 -2
  444. package/esm2022/core/common-behaviors/clipboard.mjs +0 -31
  445. package/esm2022/core/common-behaviors/color.mjs +0 -89
  446. package/esm2022/core/common-behaviors/common-module.mjs +0 -76
  447. package/esm2022/core/common-behaviors/constructor.mjs +0 -2
  448. package/esm2022/core/common-behaviors/disabled.mjs +0 -19
  449. package/esm2022/core/common-behaviors/error-state.mjs +0 -50
  450. package/esm2022/core/common-behaviors/focus-monitor.mjs +0 -37
  451. package/esm2022/core/common-behaviors/hover.mjs +0 -34
  452. package/esm2022/core/common-behaviors/index.mjs +0 -14
  453. package/esm2022/core/common-behaviors/orientation.mjs +0 -2
  454. package/esm2022/core/common-behaviors/read-state.mjs +0 -33
  455. package/esm2022/core/common-behaviors/size.mjs +0 -2
  456. package/esm2022/core/common-behaviors/tabindex.mjs +0 -20
  457. package/esm2022/core/datetime/date-adapter.mjs +0 -14
  458. package/esm2022/core/datetime/date-formats.mjs +0 -3
  459. package/esm2022/core/datetime/index.mjs +0 -3
  460. package/esm2022/core/error/error-state-matcher.mjs +0 -56
  461. package/esm2022/core/form-field/field-sizing-content.mjs +0 -117
  462. package/esm2022/core/form-field/form-field-ref.mjs +0 -10
  463. package/esm2022/core/form-field/index.mjs +0 -3
  464. package/esm2022/core/formatters/date/formatter.mjs +0 -25
  465. package/esm2022/core/formatters/date/formatter.pipe.mjs +0 -380
  466. package/esm2022/core/formatters/filesize/config.mjs +0 -32
  467. package/esm2022/core/formatters/filesize/formatter.mjs +0 -43
  468. package/esm2022/core/formatters/filesize/index.mjs +0 -4
  469. package/esm2022/core/formatters/filesize/size.mjs +0 -65
  470. package/esm2022/core/formatters/index.mjs +0 -146
  471. package/esm2022/core/formatters/number/formatter.mjs +0 -347
  472. package/esm2022/core/forms/forms-module.mjs +0 -24
  473. package/esm2022/core/forms/forms.directive.mjs +0 -66
  474. package/esm2022/core/forms/index.mjs +0 -4
  475. package/esm2022/core/forms/validators.mjs +0 -184
  476. package/esm2022/core/highlight/highlight.pipe.mjs +0 -23
  477. package/esm2022/core/highlight/index.mjs +0 -19
  478. package/esm2022/core/index.mjs +0 -2
  479. package/esm2022/core/koobiq-components-core.mjs +0 -5
  480. package/esm2022/core/line/line.mjs +0 -70
  481. package/esm2022/core/locales/en-US.mjs +0 -210
  482. package/esm2022/core/locales/es-LA.mjs +0 -209
  483. package/esm2022/core/locales/formatters.mjs +0 -193
  484. package/esm2022/core/locales/index.mjs +0 -10
  485. package/esm2022/core/locales/locale-service.mjs +0 -173
  486. package/esm2022/core/locales/locale-service.module.mjs +0 -19
  487. package/esm2022/core/locales/pt-BR.mjs +0 -209
  488. package/esm2022/core/locales/ru-RU.mjs +0 -224
  489. package/esm2022/core/locales/tk-TM.mjs +0 -210
  490. package/esm2022/core/locales/types.mjs +0 -2
  491. package/esm2022/core/navbar/index.mjs +0 -2
  492. package/esm2022/core/navbar/rectangle-item.mjs +0 -40
  493. package/esm2022/core/option/action-container.mjs +0 -23
  494. package/esm2022/core/option/action.mjs +0 -107
  495. package/esm2022/core/option/index.mjs +0 -6
  496. package/esm2022/core/option/optgroup.mjs +0 -37
  497. package/esm2022/core/option/option-module.mjs +0 -20
  498. package/esm2022/core/option/option.mjs +0 -322
  499. package/esm2022/core/overlay/overlay-position-map.mjs +0 -251
  500. package/esm2022/core/pop-up/constants.mjs +0 -55
  501. package/esm2022/core/pop-up/focus-trap-strategy.mjs +0 -6
  502. package/esm2022/core/pop-up/index.mjs +0 -6
  503. package/esm2022/core/pop-up/pop-up-styles.mjs +0 -24
  504. package/esm2022/core/pop-up/pop-up-trigger.mjs +0 -343
  505. package/esm2022/core/pop-up/pop-up.mjs +0 -152
  506. package/esm2022/core/public-api.mjs +0 -24
  507. package/esm2022/core/select/common.mjs +0 -203
  508. package/esm2022/core/select/constants.mjs +0 -25
  509. package/esm2022/core/select/errors.mjs +0 -26
  510. package/esm2022/core/select/events.mjs +0 -2
  511. package/esm2022/core/select/index.mjs +0 -5
  512. package/esm2022/core/selection/constants.mjs +0 -6
  513. package/esm2022/core/selection/index.mjs +0 -4
  514. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +0 -43
  515. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +0 -18
  516. package/esm2022/core/services/measure-scrollbar.service.mjs +0 -42
  517. package/esm2022/core/services/theme.service.mjs +0 -80
  518. package/esm2022/core/title/index.mjs +0 -2
  519. package/esm2022/core/title/title-text-ref.mjs +0 -3
  520. package/esm2022/core/tokens/index.mjs +0 -2
  521. package/esm2022/core/tokens/window.mjs +0 -19
  522. package/esm2022/core/utils/dom.mjs +0 -8
  523. package/esm2022/core/utils/index.mjs +0 -3
  524. package/esm2022/core/utils/public-api.mjs +0 -2
  525. package/esm2022/core/utils/utils.mjs +0 -31
  526. package/esm2022/core/validation/index.mjs +0 -2
  527. package/esm2022/core/validation/validation.mjs +0 -27
  528. package/esm2022/core/version.mjs +0 -3
  529. package/esm2022/datepicker/calendar-body.component.mjs +0 -87
  530. package/esm2022/datepicker/calendar-header.component.mjs +0 -164
  531. package/esm2022/datepicker/calendar.component.mjs +0 -185
  532. package/esm2022/datepicker/datepicker-animations.mjs +0 -32
  533. package/esm2022/datepicker/datepicker-errors.mjs +0 -6
  534. package/esm2022/datepicker/datepicker-input.directive.mjs +0 -1119
  535. package/esm2022/datepicker/datepicker-intl.mjs +0 -40
  536. package/esm2022/datepicker/datepicker-module.mjs +0 -103
  537. package/esm2022/datepicker/datepicker-toggle.component.mjs +0 -170
  538. package/esm2022/datepicker/datepicker.component.mjs +0 -388
  539. package/esm2022/datepicker/index.mjs +0 -2
  540. package/esm2022/datepicker/koobiq-components-datepicker.mjs +0 -5
  541. package/esm2022/datepicker/month-view.component.mjs +0 -148
  542. package/esm2022/datepicker/public-api.mjs +0 -11
  543. package/esm2022/divider/divider.component.mjs +0 -49
  544. package/esm2022/divider/divider.module.mjs +0 -18
  545. package/esm2022/divider/index.mjs +0 -2
  546. package/esm2022/divider/koobiq-components-divider.mjs +0 -5
  547. package/esm2022/divider/public-api.mjs +0 -3
  548. package/esm2022/dl/dl.component.mjs +0 -81
  549. package/esm2022/dl/dl.module.mjs +0 -36
  550. package/esm2022/dl/index.mjs +0 -2
  551. package/esm2022/dl/koobiq-components-dl.mjs +0 -5
  552. package/esm2022/dl/public-api.mjs +0 -3
  553. package/esm2022/dropdown/dropdown-animations.mjs +0 -41
  554. package/esm2022/dropdown/dropdown-content.directive.mjs +0 -61
  555. package/esm2022/dropdown/dropdown-errors.mjs +0 -29
  556. package/esm2022/dropdown/dropdown-item.component.mjs +0 -150
  557. package/esm2022/dropdown/dropdown-trigger.directive.mjs +0 -513
  558. package/esm2022/dropdown/dropdown.component.mjs +0 -293
  559. package/esm2022/dropdown/dropdown.module.mjs +0 -51
  560. package/esm2022/dropdown/dropdown.types.mjs +0 -23
  561. package/esm2022/dropdown/index.mjs +0 -2
  562. package/esm2022/dropdown/koobiq-components-dropdown.mjs +0 -5
  563. package/esm2022/dropdown/public-api.mjs +0 -9
  564. package/esm2022/dynamic-translation/dynamic-translation.mjs +0 -175
  565. package/esm2022/dynamic-translation/index.mjs +0 -3
  566. package/esm2022/dynamic-translation/koobiq-components-dynamic-translation.mjs +0 -5
  567. package/esm2022/dynamic-translation/module.mjs +0 -25
  568. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +0 -120
  569. package/esm2022/ellipsis-center/index.mjs +0 -2
  570. package/esm2022/ellipsis-center/koobiq-components-ellipsis-center.mjs +0 -5
  571. package/esm2022/ellipsis-center/public-api.mjs +0 -2
  572. package/esm2022/empty-state/empty-state.component.mjs +0 -109
  573. package/esm2022/empty-state/empty-state.module.mjs +0 -44
  574. package/esm2022/empty-state/index.mjs +0 -2
  575. package/esm2022/empty-state/koobiq-components-empty-state.mjs +0 -5
  576. package/esm2022/empty-state/public-api.mjs +0 -3
  577. package/esm2022/file-upload/file-drop.mjs +0 -87
  578. package/esm2022/file-upload/file-upload.mjs +0 -71
  579. package/esm2022/file-upload/file-upload.module.mjs +0 -79
  580. package/esm2022/file-upload/index.mjs +0 -2
  581. package/esm2022/file-upload/koobiq-components-file-upload.mjs +0 -5
  582. package/esm2022/file-upload/multiple-file-upload.component.mjs +0 -306
  583. package/esm2022/file-upload/public-api.mjs +0 -6
  584. package/esm2022/file-upload/single-file-upload.component.mjs +0 -257
  585. package/esm2022/filter-bar/filter-bar-button.mjs +0 -31
  586. package/esm2022/filter-bar/filter-bar.mjs +0 -213
  587. package/esm2022/filter-bar/filter-bar.module.mjs +0 -67
  588. package/esm2022/filter-bar/filter-bar.types.mjs +0 -72
  589. package/esm2022/filter-bar/filter-refresher.mjs +0 -34
  590. package/esm2022/filter-bar/filter-reset.mjs +0 -49
  591. package/esm2022/filter-bar/filter-search.mjs +0 -173
  592. package/esm2022/filter-bar/filters.mjs +0 -266
  593. package/esm2022/filter-bar/index.mjs +0 -2
  594. package/esm2022/filter-bar/koobiq-components-filter-bar.mjs +0 -5
  595. package/esm2022/filter-bar/pipe-add.mjs +0 -140
  596. package/esm2022/filter-bar/pipe.directive.mjs +0 -37
  597. package/esm2022/filter-bar/pipes/base-pipe.mjs +0 -146
  598. package/esm2022/filter-bar/pipes/pipe-button.mjs +0 -72
  599. package/esm2022/filter-bar/pipes/pipe-date.mjs +0 -206
  600. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +0 -208
  601. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +0 -188
  602. package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +0 -260
  603. package/esm2022/filter-bar/pipes/pipe-readonly.mjs +0 -68
  604. package/esm2022/filter-bar/pipes/pipe-select.mjs +0 -101
  605. package/esm2022/filter-bar/pipes/pipe-state.mjs +0 -53
  606. package/esm2022/filter-bar/pipes/pipe-text.mjs +0 -104
  607. package/esm2022/filter-bar/pipes/pipe-title.mjs +0 -102
  608. package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +0 -142
  609. package/esm2022/filter-bar/public-api.mjs +0 -22
  610. package/esm2022/form-field/cleaner.mjs +0 -28
  611. package/esm2022/form-field/error.mjs +0 -20
  612. package/esm2022/form-field/fieldset.mjs +0 -84
  613. package/esm2022/form-field/form-field-control.mjs +0 -4
  614. package/esm2022/form-field/form-field.mjs +0 -447
  615. package/esm2022/form-field/form-field.module.mjs +0 -87
  616. package/esm2022/form-field/hint.mjs +0 -36
  617. package/esm2022/form-field/index.mjs +0 -2
  618. package/esm2022/form-field/koobiq-components-form-field.mjs +0 -5
  619. package/esm2022/form-field/label.mjs +0 -19
  620. package/esm2022/form-field/password-hint.mjs +0 -165
  621. package/esm2022/form-field/password-toggle.mjs +0 -129
  622. package/esm2022/form-field/prefix.mjs +0 -19
  623. package/esm2022/form-field/public-api.mjs +0 -16
  624. package/esm2022/form-field/reactive-password-hint.mjs +0 -66
  625. package/esm2022/form-field/stepper.mjs +0 -144
  626. package/esm2022/form-field/suffix.mjs +0 -18
  627. package/esm2022/form-field/validate.directive.mjs +0 -190
  628. package/esm2022/icon/icon-button.component.mjs +0 -64
  629. package/esm2022/icon/icon-item.component.mjs +0 -31
  630. package/esm2022/icon/icon.component.mjs +0 -56
  631. package/esm2022/icon/icon.module.mjs +0 -27
  632. package/esm2022/icon/index.mjs +0 -2
  633. package/esm2022/icon/koobiq-components-icon.mjs +0 -5
  634. package/esm2022/icon/public-api.mjs +0 -5
  635. package/esm2022/index.mjs +0 -2
  636. package/esm2022/inline-edit/index.mjs +0 -3
  637. package/esm2022/inline-edit/inline-edit.mjs +0 -382
  638. package/esm2022/inline-edit/koobiq-components-inline-edit.mjs +0 -5
  639. package/esm2022/inline-edit/module.mjs +0 -25
  640. package/esm2022/input/index.mjs +0 -2
  641. package/esm2022/input/input-errors.mjs +0 -4
  642. package/esm2022/input/input-number-validators.mjs +0 -88
  643. package/esm2022/input/input-number.mjs +0 -386
  644. package/esm2022/input/input-password.mjs +0 -253
  645. package/esm2022/input/input-value-accessor.mjs +0 -3
  646. package/esm2022/input/input.mjs +0 -299
  647. package/esm2022/input/input.module.mjs +0 -58
  648. package/esm2022/input/koobiq-components-input.mjs +0 -5
  649. package/esm2022/input/public-api.mjs +0 -7
  650. package/esm2022/koobiq-components.mjs +0 -5
  651. package/esm2022/link/index.mjs +0 -2
  652. package/esm2022/link/koobiq-components-link.mjs +0 -5
  653. package/esm2022/link/link.component.mjs +0 -143
  654. package/esm2022/link/link.module.mjs +0 -20
  655. package/esm2022/link/public-api.mjs +0 -3
  656. package/esm2022/list/index.mjs +0 -2
  657. package/esm2022/list/koobiq-components-list.mjs +0 -5
  658. package/esm2022/list/list-selection.component.mjs +0 -745
  659. package/esm2022/list/list.component.mjs +0 -43
  660. package/esm2022/list/list.module.mjs +0 -60
  661. package/esm2022/list/public-api.mjs +0 -4
  662. package/esm2022/loader-overlay/index.mjs +0 -2
  663. package/esm2022/loader-overlay/koobiq-components-loader-overlay.mjs +0 -5
  664. package/esm2022/loader-overlay/loader-overlay.component.mjs +0 -110
  665. package/esm2022/loader-overlay/loader-overlay.module.mjs +0 -44
  666. package/esm2022/loader-overlay/public-api.mjs +0 -3
  667. package/esm2022/markdown/index.mjs +0 -2
  668. package/esm2022/markdown/koobiq-components-markdown.mjs +0 -5
  669. package/esm2022/markdown/markdown.component.mjs +0 -67
  670. package/esm2022/markdown/markdown.module.mjs +0 -21
  671. package/esm2022/markdown/markdown.service.mjs +0 -36
  672. package/esm2022/markdown/markdown.values.mjs +0 -35
  673. package/esm2022/markdown/public-api.mjs +0 -5
  674. package/esm2022/modal/css-unit.pipe.mjs +0 -17
  675. package/esm2022/modal/index.mjs +0 -2
  676. package/esm2022/modal/koobiq-components-modal.mjs +0 -5
  677. package/esm2022/modal/modal-control.service.mjs +0 -89
  678. package/esm2022/modal/modal-ref.class.mjs +0 -7
  679. package/esm2022/modal/modal-util.mjs +0 -22
  680. package/esm2022/modal/modal.component.mjs +0 -540
  681. package/esm2022/modal/modal.directive.mjs +0 -94
  682. package/esm2022/modal/modal.module.mjs +0 -78
  683. package/esm2022/modal/modal.service.mjs +0 -135
  684. package/esm2022/modal/modal.type.mjs +0 -7
  685. package/esm2022/modal/public-api.mjs +0 -7
  686. package/esm2022/navbar/index.mjs +0 -2
  687. package/esm2022/navbar/koobiq-components-navbar.mjs +0 -5
  688. package/esm2022/navbar/navbar-brand.component.mjs +0 -105
  689. package/esm2022/navbar/navbar-item.component.mjs +0 -428
  690. package/esm2022/navbar/navbar-toggle.component.mjs +0 -88
  691. package/esm2022/navbar/navbar.component.mjs +0 -251
  692. package/esm2022/navbar/navbar.module.mjs +0 -84
  693. package/esm2022/navbar/public-api.mjs +0 -7
  694. package/esm2022/navbar/vertical-navbar.component.mjs +0 -128
  695. package/esm2022/navbar-ic/index.mjs +0 -2
  696. package/esm2022/navbar-ic/koobiq-components-navbar-ic.mjs +0 -5
  697. package/esm2022/navbar-ic/navbar-ic-header.mjs +0 -74
  698. package/esm2022/navbar-ic/navbar-ic-item.mjs +0 -390
  699. package/esm2022/navbar-ic/navbar-ic.animation.mjs +0 -17
  700. package/esm2022/navbar-ic/navbar-ic.mjs +0 -310
  701. package/esm2022/navbar-ic/navbar-ic.module.mjs +0 -74
  702. package/esm2022/navbar-ic/public-api.mjs +0 -5
  703. package/esm2022/notification-center/index.mjs +0 -2
  704. package/esm2022/notification-center/koobiq-components-notification-center.mjs +0 -5
  705. package/esm2022/notification-center/notification-center-animations.mjs +0 -18
  706. package/esm2022/notification-center/notification-center.mjs +0 -329
  707. package/esm2022/notification-center/notification-center.module.mjs +0 -38
  708. package/esm2022/notification-center/notification-center.service.mjs +0 -127
  709. package/esm2022/notification-center/notification-item.mjs +0 -70
  710. package/esm2022/notification-center/public-api.mjs +0 -5
  711. package/esm2022/overflow-items/index.mjs +0 -3
  712. package/esm2022/overflow-items/koobiq-components-overflow-items.mjs +0 -5
  713. package/esm2022/overflow-items/module.mjs +0 -25
  714. package/esm2022/overflow-items/overflow-items.mjs +0 -290
  715. package/esm2022/popover/index.mjs +0 -2
  716. package/esm2022/popover/koobiq-components-popover.mjs +0 -5
  717. package/esm2022/popover/popover-animations.mjs +0 -16
  718. package/esm2022/popover/popover-confirm.component.mjs +0 -97
  719. package/esm2022/popover/popover.component.mjs +0 -410
  720. package/esm2022/popover/popover.module.mjs +0 -67
  721. package/esm2022/popover/public-api.mjs +0 -5
  722. package/esm2022/progress-bar/index.mjs +0 -2
  723. package/esm2022/progress-bar/koobiq-components-progress-bar.mjs +0 -5
  724. package/esm2022/progress-bar/progress-bar.component.mjs +0 -62
  725. package/esm2022/progress-bar/progress-bar.module.mjs +0 -32
  726. package/esm2022/progress-bar/public-api.mjs +0 -3
  727. package/esm2022/progress-spinner/index.mjs +0 -2
  728. package/esm2022/progress-spinner/koobiq-components-progress-spinner.mjs +0 -5
  729. package/esm2022/progress-spinner/progress-spinner.component.mjs +0 -78
  730. package/esm2022/progress-spinner/progress-spinner.module.mjs +0 -35
  731. package/esm2022/progress-spinner/public-api.mjs +0 -3
  732. package/esm2022/public-api.mjs +0 -2
  733. package/esm2022/radio/index.mjs +0 -2
  734. package/esm2022/radio/koobiq-components-radio.mjs +0 -5
  735. package/esm2022/radio/public-api.mjs +0 -3
  736. package/esm2022/radio/radio.component.mjs +0 -451
  737. package/esm2022/radio/radio.module.mjs +0 -18
  738. package/esm2022/resizer/index.mjs +0 -3
  739. package/esm2022/resizer/koobiq-components-resizer.mjs +0 -5
  740. package/esm2022/resizer/module.mjs +0 -17
  741. package/esm2022/resizer/resizer.mjs +0 -135
  742. package/esm2022/risk-level/index.mjs +0 -2
  743. package/esm2022/risk-level/koobiq-components-risk-level.mjs +0 -5
  744. package/esm2022/risk-level/public-api.mjs +0 -3
  745. package/esm2022/risk-level/risk-level.component.mjs +0 -40
  746. package/esm2022/risk-level/risk-level.module.mjs +0 -24
  747. package/esm2022/scrollbar/index.mjs +0 -2
  748. package/esm2022/scrollbar/koobiq-components-scrollbar.mjs +0 -5
  749. package/esm2022/scrollbar/public-api.mjs +0 -5
  750. package/esm2022/scrollbar/scrollbar.component.mjs +0 -133
  751. package/esm2022/scrollbar/scrollbar.directive.mjs +0 -105
  752. package/esm2022/scrollbar/scrollbar.module.mjs +0 -25
  753. package/esm2022/scrollbar/scrollbar.types.mjs +0 -14
  754. package/esm2022/search-expandable/index.mjs +0 -2
  755. package/esm2022/search-expandable/koobiq-components-search-expandable.mjs +0 -5
  756. package/esm2022/search-expandable/public-api.mjs +0 -3
  757. package/esm2022/search-expandable/search-expandable.mjs +0 -177
  758. package/esm2022/search-expandable/search-expandable.module.mjs +0 -18
  759. package/esm2022/select/index.mjs +0 -2
  760. package/esm2022/select/koobiq-components-select.mjs +0 -5
  761. package/esm2022/select/public-api.mjs +0 -4
  762. package/esm2022/select/select-option.directive.mjs +0 -69
  763. package/esm2022/select/select.component.mjs +0 -1154
  764. package/esm2022/select/select.module.mjs +0 -81
  765. package/esm2022/sidebar/index.mjs +0 -2
  766. package/esm2022/sidebar/koobiq-components-sidebar.mjs +0 -5
  767. package/esm2022/sidebar/public-api.mjs +0 -3
  768. package/esm2022/sidebar/sidebar-animations.mjs +0 -23
  769. package/esm2022/sidebar/sidebar.component.mjs +0 -169
  770. package/esm2022/sidebar/sidebar.module.mjs +0 -30
  771. package/esm2022/sidepanel/index.mjs +0 -2
  772. package/esm2022/sidepanel/koobiq-components-sidepanel.mjs +0 -5
  773. package/esm2022/sidepanel/public-api.mjs +0 -7
  774. package/esm2022/sidepanel/sidepanel-animations.mjs +0 -29
  775. package/esm2022/sidepanel/sidepanel-config.mjs +0 -33
  776. package/esm2022/sidepanel/sidepanel-container.component.mjs +0 -126
  777. package/esm2022/sidepanel/sidepanel-directives.mjs +0 -168
  778. package/esm2022/sidepanel/sidepanel-ref.mjs +0 -60
  779. package/esm2022/sidepanel/sidepanel.module.mjs +0 -73
  780. package/esm2022/sidepanel/sidepanel.service.mjs +0 -167
  781. package/esm2022/split-button/index.mjs +0 -2
  782. package/esm2022/split-button/koobiq-components-split-button.mjs +0 -5
  783. package/esm2022/split-button/public-api.mjs +0 -3
  784. package/esm2022/split-button/split-button.mjs +0 -133
  785. package/esm2022/split-button/split-button.module.mjs +0 -18
  786. package/esm2022/splitter/index.mjs +0 -2
  787. package/esm2022/splitter/koobiq-components-splitter.mjs +0 -5
  788. package/esm2022/splitter/public-api.mjs +0 -3
  789. package/esm2022/splitter/splitter.component.mjs +0 -492
  790. package/esm2022/splitter/splitter.module.mjs +0 -34
  791. package/esm2022/table/index.mjs +0 -2
  792. package/esm2022/table/koobiq-components-table.mjs +0 -5
  793. package/esm2022/table/public-api.mjs +0 -3
  794. package/esm2022/table/table.component.mjs +0 -36
  795. package/esm2022/table/table.module.mjs +0 -32
  796. package/esm2022/tabs/index.mjs +0 -2
  797. package/esm2022/tabs/koobiq-components-tabs.mjs +0 -5
  798. package/esm2022/tabs/paginated-tab-header.mjs +0 -490
  799. package/esm2022/tabs/public-api.mjs +0 -11
  800. package/esm2022/tabs/tab-body.component.mjs +0 -178
  801. package/esm2022/tabs/tab-content.directive.mjs +0 -15
  802. package/esm2022/tabs/tab-group.component.mjs +0 -384
  803. package/esm2022/tabs/tab-header.component.mjs +0 -60
  804. package/esm2022/tabs/tab-label-wrapper.directive.mjs +0 -86
  805. package/esm2022/tabs/tab-label.directive.mjs +0 -17
  806. package/esm2022/tabs/tab-nav-bar.mjs +0 -292
  807. package/esm2022/tabs/tab.component.mjs +0 -145
  808. package/esm2022/tabs/tabs-animations.mjs +0 -24
  809. package/esm2022/tabs/tabs.module.mjs +0 -95
  810. package/esm2022/tags/index.mjs +0 -2
  811. package/esm2022/tags/koobiq-components-tags.mjs +0 -5
  812. package/esm2022/tags/public-api.mjs +0 -6
  813. package/esm2022/tags/tag-default-options.mjs +0 -4
  814. package/esm2022/tags/tag-input.mjs +0 -281
  815. package/esm2022/tags/tag-list.component.mjs +0 -765
  816. package/esm2022/tags/tag-text-control.mjs +0 -2
  817. package/esm2022/tags/tag.component.mjs +0 -647
  818. package/esm2022/tags/tag.module.mjs +0 -67
  819. package/esm2022/textarea/index.mjs +0 -2
  820. package/esm2022/textarea/koobiq-components-textarea.mjs +0 -5
  821. package/esm2022/textarea/public-api.mjs +0 -3
  822. package/esm2022/textarea/textarea.component.mjs +0 -300
  823. package/esm2022/textarea/textarea.module.mjs +0 -20
  824. package/esm2022/time-range/constants.mjs +0 -42
  825. package/esm2022/time-range/index.mjs +0 -8
  826. package/esm2022/time-range/koobiq-components-time-range.mjs +0 -5
  827. package/esm2022/time-range/module.mjs +0 -36
  828. package/esm2022/time-range/time-range-editor.mjs +0 -224
  829. package/esm2022/time-range/time-range-title-as-form-field.mjs +0 -60
  830. package/esm2022/time-range/time-range-title.mjs +0 -112
  831. package/esm2022/time-range/time-range.mjs +0 -234
  832. package/esm2022/time-range/time-range.service.mjs +0 -126
  833. package/esm2022/time-range/types.mjs +0 -2
  834. package/esm2022/timepicker/index.mjs +0 -2
  835. package/esm2022/timepicker/koobiq-components-timepicker.mjs +0 -5
  836. package/esm2022/timepicker/public-api.mjs +0 -4
  837. package/esm2022/timepicker/timepicker.constants.mjs +0 -29
  838. package/esm2022/timepicker/timepicker.directive.mjs +0 -686
  839. package/esm2022/timepicker/timepicker.module.mjs +0 -29
  840. package/esm2022/timezone/cities-by-filter.pipe.mjs +0 -17
  841. package/esm2022/timezone/index.mjs +0 -2
  842. package/esm2022/timezone/koobiq-components-timezone.mjs +0 -5
  843. package/esm2022/timezone/public-api.mjs +0 -7
  844. package/esm2022/timezone/timezone-option.component.mjs +0 -50
  845. package/esm2022/timezone/timezone-option.directive.mjs +0 -54
  846. package/esm2022/timezone/timezone-select.component.mjs +0 -55
  847. package/esm2022/timezone/timezone.models.mjs +0 -2
  848. package/esm2022/timezone/timezone.module.mjs +0 -82
  849. package/esm2022/timezone/timezone.utils.mjs +0 -80
  850. package/esm2022/timezone/utc-offset.pipe.mjs +0 -17
  851. package/esm2022/title/index.mjs +0 -2
  852. package/esm2022/title/koobiq-components-title.mjs +0 -5
  853. package/esm2022/title/public-api.mjs +0 -3
  854. package/esm2022/title/title.directive.mjs +0 -108
  855. package/esm2022/title/title.module.mjs +0 -18
  856. package/esm2022/toast/index.mjs +0 -2
  857. package/esm2022/toast/koobiq-components-toast.mjs +0 -5
  858. package/esm2022/toast/public-api.mjs +0 -6
  859. package/esm2022/toast/toast-animations.mjs +0 -10
  860. package/esm2022/toast/toast-container.component.mjs +0 -57
  861. package/esm2022/toast/toast.component.mjs +0 -125
  862. package/esm2022/toast/toast.module.mjs +0 -26
  863. package/esm2022/toast/toast.service.mjs +0 -197
  864. package/esm2022/toast/toast.type.mjs +0 -39
  865. package/esm2022/toggle/index.mjs +0 -2
  866. package/esm2022/toggle/koobiq-components-toggle.mjs +0 -5
  867. package/esm2022/toggle/public-api.mjs +0 -3
  868. package/esm2022/toggle/toggle.component.mjs +0 -254
  869. package/esm2022/toggle/toggle.module.mjs +0 -18
  870. package/esm2022/tooltip/index.mjs +0 -2
  871. package/esm2022/tooltip/koobiq-components-tooltip.mjs +0 -5
  872. package/esm2022/tooltip/public-api.mjs +0 -3
  873. package/esm2022/tooltip/tooltip.animations.mjs +0 -19
  874. package/esm2022/tooltip/tooltip.component.mjs +0 -400
  875. package/esm2022/tooltip/tooltip.module.mjs +0 -35
  876. package/esm2022/top-bar/index.mjs +0 -2
  877. package/esm2022/top-bar/koobiq-components-top-bar.mjs +0 -5
  878. package/esm2022/top-bar/module.mjs +0 -25
  879. package/esm2022/top-bar/public-api.mjs +0 -3
  880. package/esm2022/top-bar/top-bar.mjs +0 -74
  881. package/esm2022/tree/control/base-tree-control.mjs +0 -59
  882. package/esm2022/tree/control/flat-tree-control.filters.mjs +0 -52
  883. package/esm2022/tree/control/flat-tree-control.mjs +0 -109
  884. package/esm2022/tree/control/nested-tree-control.mjs +0 -40
  885. package/esm2022/tree/control/tree-control.mjs +0 -2
  886. package/esm2022/tree/data-source/flat-data-source.mjs +0 -157
  887. package/esm2022/tree/data-source/nested-data-source.mjs +0 -28
  888. package/esm2022/tree/index.mjs +0 -2
  889. package/esm2022/tree/koobiq-components-tree.mjs +0 -5
  890. package/esm2022/tree/node.mjs +0 -31
  891. package/esm2022/tree/outlet.mjs +0 -15
  892. package/esm2022/tree/padding.directive.mjs +0 -108
  893. package/esm2022/tree/public-api.mjs +0 -17
  894. package/esm2022/tree/toggle.mjs +0 -93
  895. package/esm2022/tree/tree-base.mjs +0 -236
  896. package/esm2022/tree/tree-errors.mjs +0 -36
  897. package/esm2022/tree/tree-option.component.mjs +0 -303
  898. package/esm2022/tree/tree-selection.component.mjs +0 -568
  899. package/esm2022/tree/tree.mjs +0 -19
  900. package/esm2022/tree/tree.module.mjs +0 -64
  901. package/esm2022/tree-select/index.mjs +0 -2
  902. package/esm2022/tree-select/koobiq-components-tree-select.mjs +0 -5
  903. package/esm2022/tree-select/public-api.mjs +0 -3
  904. package/esm2022/tree-select/tree-select.component.mjs +0 -1034
  905. package/esm2022/tree-select/tree-select.module.mjs +0 -71
  906. package/esm2022/username/constants.mjs +0 -25
  907. package/esm2022/username/index.mjs +0 -6
  908. package/esm2022/username/koobiq-components-username.mjs +0 -5
  909. package/esm2022/username/module.mjs +0 -35
  910. package/esm2022/username/types.mjs +0 -32
  911. package/esm2022/username/username.mjs +0 -129
  912. package/esm2022/username/username.pipe.mjs +0 -92
@@ -1,418 +0,0 @@
1
- import { DOCUMENT } from '@angular/common';
2
- import { booleanAttribute, Directive, inject, InjectionToken, Input, numberAttribute, Renderer2, SecurityContext } from '@angular/core';
3
- import { DomSanitizer } from '@angular/platform-browser';
4
- import { KBQ_WINDOW, kbqInjectNativeElement } from '@koobiq/components/core';
5
- import hljs from 'highlight.js';
6
- import * as i0 from "@angular/core";
7
- /**
8
- * Fallback language for code block if language is not supported/specified.
9
- *
10
- * List of supported languages:
11
- * @link https://highlightjs.readthedocs.io/en/stable/supported-languages.html
12
- */
13
- export const KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE = new InjectionToken('KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE', { factory: () => 'plaintext' });
14
- /** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE`. */
15
- export const kbqCodeBlockFallbackFileLanguageProvider = (language) => ({
16
- provide: KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE,
17
- useValue: language
18
- });
19
- /** Directive which applies syntax highlighting to the code block content. */
20
- export class KbqCodeBlockHighlight {
21
- /** The code file. */
22
- set file(file) {
23
- if (!this.window)
24
- return;
25
- let { language } = file;
26
- if (!language || !hljs.getLanguage(language)) {
27
- // eslint-disable-next-line no-console
28
- console.warn(`[KbqCodeBlock] Unknown file language: "${language}". Fall back to "${this.fallbackFileLanguage}".`, file);
29
- language = this.fallbackFileLanguage;
30
- }
31
- const { value: highlightedHTML, language: highlightedLanguage, illegal, relevance } = hljs.highlight(file.content, {
32
- language: language
33
- });
34
- if (illegal) {
35
- // eslint-disable-next-line no-console
36
- console.warn('[KbqCodeBlock] File content contains illegal characters.', file);
37
- }
38
- if (relevance === 0) {
39
- // eslint-disable-next-line no-console
40
- console.warn('[KbqCodeBlock] File content does not match the specified programming language.', file);
41
- }
42
- const safeHTML = this.domSanitizer.sanitize(SecurityContext.HTML, highlightedHTML);
43
- const highlightedHTMLWithLineNumbers = this.window['hljs'].lineNumbersValue(safeHTML, {
44
- startFrom: this.startFrom,
45
- singleLine: this.singleLine
46
- });
47
- this.renderer.setAttribute(this.nativeElement, 'data-language', highlightedLanguage);
48
- this.renderer.setProperty(this.nativeElement, 'innerHTML', highlightedHTMLWithLineNumbers);
49
- }
50
- constructor() {
51
- this.nativeElement = kbqInjectNativeElement();
52
- this.document = inject(DOCUMENT);
53
- this.renderer = inject(Renderer2);
54
- this.domSanitizer = inject(DomSanitizer);
55
- this.fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);
56
- this.window = inject(KBQ_WINDOW);
57
- /** The starting line number. */
58
- this.startFrom = 1;
59
- /** Whether to display line numbers for single line code block. */
60
- this.singleLine = false;
61
- this.initLineNumbersPlugin();
62
- }
63
- /**
64
- * Initialize the HighlightJS line numbers plugin. This method is called once when
65
- * the component is constructed.
66
- */
67
- initLineNumbersPlugin() {
68
- if (!this.window)
69
- return;
70
- this.window['hljs'] = hljs;
71
- this.highlightJSLineNumbersPlugin(this.document, this.window);
72
- }
73
- /**
74
- * This method is not intended for editing.
75
- * Changes may lead to unpredictable behavior.
76
- * Source code: https://github.com/wcoder/highlightjs-line-numbers.js/blob/v2.9.0/src/highlightjs-line-numbers.js
77
- */
78
- highlightJSLineNumbersPlugin(d, w) {
79
- 'use strict';
80
- if (!w)
81
- return;
82
- const TABLE_NAME = 'hljs-ln', LINE_NAME = 'hljs-ln-line', CODE_BLOCK_NAME = 'hljs-ln-code', NUMBERS_BLOCK_NAME = 'hljs-ln-numbers', NUMBER_LINE_NAME = 'hljs-ln-n', DATA_ATTR_NAME = 'data-line-number', BREAK_LINE_REGEXP = /\r\n|\r|\n/g;
83
- if (w['hljs']) {
84
- w['hljs'].initLineNumbersOnLoad = initLineNumbersOnLoad;
85
- w['hljs'].lineNumbersBlock = lineNumbersBlock;
86
- w['hljs'].lineNumbersBlockSync = lineNumbersBlockSync;
87
- w['hljs'].lineNumbersValue = lineNumbersValue;
88
- addStyles();
89
- }
90
- else {
91
- // eslint-disable-next-line no-console
92
- console.error('highlight.js not detected!');
93
- }
94
- function isHljsLnCodeDescendant(domElt) {
95
- let curElt = domElt;
96
- while (curElt) {
97
- if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {
98
- return true;
99
- }
100
- curElt = curElt.parentNode;
101
- }
102
- return false;
103
- }
104
- function getHljsLnTable(hljsLnDomElt) {
105
- let curElt = hljsLnDomElt;
106
- while (curElt.nodeName !== 'TABLE') {
107
- curElt = curElt.parentNode;
108
- }
109
- return curElt;
110
- }
111
- // Function to workaround a copy issue with Microsoft Edge.
112
- // Due to hljs-ln wrapping the lines of code inside a <table> element,
113
- // itself wrapped inside a <pre> element, window.getSelection().toString()
114
- // does not contain any line breaks. So we need to get them back using the
115
- // rendered code in the DOM as reference.
116
- function edgeGetSelectedCodeLines(selection) {
117
- // current selected text without line breaks
118
- const selectionText = selection.toString();
119
- // get the <td> element wrapping the first line of selected code
120
- let tdAnchor = selection.anchorNode;
121
- while (tdAnchor.nodeName !== 'TD') {
122
- tdAnchor = tdAnchor.parentNode;
123
- }
124
- // get the <td> element wrapping the last line of selected code
125
- let tdFocus = selection.focusNode;
126
- while (tdFocus.nodeName !== 'TD') {
127
- tdFocus = tdFocus.parentNode;
128
- }
129
- // extract line numbers
130
- let firstLineNumber = parseInt(tdAnchor.dataset.lineNumber);
131
- let lastLineNumber = parseInt(tdFocus.dataset.lineNumber);
132
- // multi-lines copied case
133
- if (firstLineNumber != lastLineNumber) {
134
- let firstLineText = tdAnchor.textContent;
135
- let lastLineText = tdFocus.textContent;
136
- // if the selection was made backward, swap values
137
- if (firstLineNumber > lastLineNumber) {
138
- let tmp = firstLineNumber;
139
- firstLineNumber = lastLineNumber;
140
- lastLineNumber = tmp;
141
- tmp = firstLineText;
142
- firstLineText = lastLineText;
143
- lastLineText = tmp;
144
- }
145
- // discard not copied characters in first line
146
- while (selectionText.indexOf(firstLineText) !== 0) {
147
- firstLineText = firstLineText.slice(1);
148
- }
149
- // discard not copied characters in last line
150
- while (selectionText.lastIndexOf(lastLineText) === -1) {
151
- lastLineText = lastLineText.slice(0, -1);
152
- }
153
- // reconstruct and return the real copied text
154
- let selectedText = firstLineText;
155
- const hljsLnTable = getHljsLnTable(tdAnchor);
156
- for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {
157
- const codeLineSel = format('.{0}[{1}="{2}"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i]);
158
- const codeLineElt = hljsLnTable.querySelector(codeLineSel);
159
- selectedText += '\n' + codeLineElt.textContent;
160
- }
161
- selectedText += '\n' + lastLineText;
162
- return selectedText;
163
- // single copied line case
164
- }
165
- else {
166
- return selectionText;
167
- }
168
- }
169
- // ensure consistent code copy/paste behavior across all browsers
170
- // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)
171
- d.addEventListener('copy', function (e) {
172
- // get current selection
173
- const selection = w.getSelection();
174
- // override behavior when one wants to copy line of codes
175
- if (isHljsLnCodeDescendant(selection.anchorNode)) {
176
- let selectionText;
177
- // workaround an issue with Microsoft Edge as copied line breaks
178
- // are removed otherwise from the selection string
179
- if (w.navigator.userAgent.indexOf('Edge') !== -1) {
180
- selectionText = edgeGetSelectedCodeLines(selection);
181
- }
182
- else {
183
- // other browsers can directly use the selection string
184
- selectionText = selection.toString();
185
- }
186
- e.clipboardData.setData('text/plain', selectionText);
187
- e.preventDefault();
188
- }
189
- });
190
- function addStyles() {
191
- const css = d.createElement('style');
192
- css.type = 'text/css';
193
- css.innerHTML = format('.{0}{border-collapse:collapse}' + '.{0} td{padding:0}' + '.{1}:before{content:attr({2})}', [
194
- TABLE_NAME,
195
- NUMBER_LINE_NAME,
196
- DATA_ATTR_NAME
197
- ]);
198
- d.getElementsByTagName('head')[0].appendChild(css);
199
- }
200
- function initLineNumbersOnLoad(options) {
201
- if (d.readyState === 'interactive' || d.readyState === 'complete') {
202
- documentReady(options);
203
- }
204
- else {
205
- w.addEventListener('DOMContentLoaded', function () {
206
- documentReady(options);
207
- });
208
- }
209
- }
210
- function documentReady(options) {
211
- try {
212
- const blocks = d.querySelectorAll('code.hljs,code.nohighlight');
213
- for (const i in blocks) {
214
- if (blocks.hasOwnProperty(i)) {
215
- if (!isPluginDisabledForBlock(blocks[i])) {
216
- lineNumbersBlock(blocks[i], options);
217
- }
218
- }
219
- }
220
- }
221
- catch (e) {
222
- // eslint-disable-next-line no-console
223
- console.error('LineNumbers error: ', e);
224
- }
225
- }
226
- function isPluginDisabledForBlock(element) {
227
- return element.classList.contains('nohljsln');
228
- }
229
- function lineNumbersBlock(element, options) {
230
- if (typeof element !== 'object')
231
- return;
232
- async(function () {
233
- element.innerHTML = lineNumbersInternal(element, options);
234
- });
235
- }
236
- function lineNumbersBlockSync(element, options) {
237
- if (typeof element !== 'object')
238
- return;
239
- element.innerHTML = lineNumbersInternal(element, options);
240
- }
241
- function lineNumbersValue(value, options) {
242
- if (typeof value !== 'string')
243
- return;
244
- const element = d.createElement('code');
245
- element.innerHTML = value;
246
- return lineNumbersInternal(element, options);
247
- }
248
- function lineNumbersInternal(element, options) {
249
- const internalOptions = mapOptions(element, options);
250
- duplicateMultilineNodes(element);
251
- return addLineNumbersBlockFor(element.innerHTML, internalOptions);
252
- }
253
- function addLineNumbersBlockFor(inputHtml, options) {
254
- const lines = getLines(inputHtml);
255
- // if last line contains only carriage return remove it
256
- if (lines[lines.length - 1].trim() === '') {
257
- lines.pop();
258
- }
259
- if (lines.length > 1 || options.singleLine) {
260
- let html = '';
261
- for (let i = 0, l = lines.length; i < l; i++) {
262
- html += format('<tr>' +
263
- '<td class="{0} {1}" {3}="{5}">' +
264
- '<div class="{2}" {3}="{5}"></div>' +
265
- '</td>' +
266
- '<td class="{0} {4}" {3}="{5}">' +
267
- '{6}' +
268
- '</td>' +
269
- '</tr>', [
270
- LINE_NAME,
271
- NUMBERS_BLOCK_NAME,
272
- NUMBER_LINE_NAME,
273
- DATA_ATTR_NAME,
274
- CODE_BLOCK_NAME,
275
- i + options.startFrom,
276
- lines[i].length > 0 ? lines[i] : ' '
277
- ]);
278
- }
279
- return format('<table class="{0}">{1}</table>', [TABLE_NAME, html]);
280
- }
281
- return inputHtml;
282
- }
283
- /**
284
- * @param {HTMLElement} element Code block.
285
- * @param {Object} options External API options.
286
- * @returns {Object} Internal API options.
287
- */
288
- function mapOptions(element, options) {
289
- options = options || {};
290
- return {
291
- singleLine: getSingleLineOption(options),
292
- startFrom: getStartFromOption(element, options)
293
- };
294
- }
295
- function getSingleLineOption(options) {
296
- const defaultValue = false;
297
- if (options.singleLine) {
298
- return options.singleLine;
299
- }
300
- return defaultValue;
301
- }
302
- function getStartFromOption(element, options) {
303
- const defaultValue = 1;
304
- let startFrom = defaultValue;
305
- if (isFinite(options.startFrom)) {
306
- startFrom = options.startFrom;
307
- }
308
- // can be overridden because local option is priority
309
- const value = getAttribute(element, 'data-ln-start-from');
310
- if (value !== null) {
311
- startFrom = toNumber(value, defaultValue);
312
- }
313
- return startFrom;
314
- }
315
- /**
316
- * Recursive method for fix multi-line elements implementation in highlight.js
317
- * Doing deep passage on child nodes.
318
- * @param {HTMLElement} element
319
- */
320
- function duplicateMultilineNodes(element) {
321
- const nodes = element.childNodes;
322
- for (const node in nodes) {
323
- if (nodes.hasOwnProperty(node)) {
324
- const child = nodes[node];
325
- if (getLinesCount(child.textContent) > 0) {
326
- if (child.childNodes.length > 0) {
327
- duplicateMultilineNodes(child);
328
- }
329
- else {
330
- duplicateMultilineNode(child.parentNode);
331
- }
332
- }
333
- }
334
- }
335
- }
336
- /**
337
- * Method for fix multi-line elements implementation in highlight.js
338
- * @param {HTMLElement} element
339
- */
340
- function duplicateMultilineNode(element) {
341
- const className = element.className;
342
- if (!/hljs-/.test(className))
343
- return;
344
- const lines = getLines(element.innerHTML);
345
- let result = '';
346
- for (let i = 0; i < lines.length; i++) {
347
- const lineText = lines[i].length > 0 ? lines[i] : ' ';
348
- result += format('<span class="{0}">{1}</span>\n', [className, lineText]);
349
- }
350
- element.innerHTML = result.trim();
351
- }
352
- function getLines(text) {
353
- if (text.length === 0)
354
- return [];
355
- return text.split(BREAK_LINE_REGEXP);
356
- }
357
- function getLinesCount(text) {
358
- return (text.trim().match(BREAK_LINE_REGEXP) || []).length;
359
- }
360
- ///
361
- /// HELPERS
362
- ///
363
- function async(func) {
364
- w.setTimeout(func, 0);
365
- }
366
- /**
367
- * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}
368
- * @param {string} format
369
- * @param {array} args
370
- */
371
- function format(format, args) {
372
- return format.replace(/\{(\d+)\}/g, function (m, n) {
373
- return args[n] !== undefined ? args[n] : m;
374
- });
375
- }
376
- /**
377
- * @param {HTMLElement} element Code block.
378
- * @param {String} attrName Attribute name.
379
- * @returns {String} Attribute value or empty.
380
- */
381
- function getAttribute(element, attrName) {
382
- return element.hasAttribute(attrName) ? element.getAttribute(attrName) : null;
383
- }
384
- /**
385
- * @param {String} str Source string.
386
- * @param {Number} fallback Fallback value.
387
- * @returns Parsed number or fallback value.
388
- */
389
- function toNumber(str, fallback) {
390
- if (!str)
391
- return fallback;
392
- const number = Number(str);
393
- return isFinite(number) ? number : fallback;
394
- }
395
- }
396
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockHighlight, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
397
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.14", type: KbqCodeBlockHighlight, isStandalone: true, selector: "code[kbqCodeBlockHighlight]", inputs: { file: "file", startFrom: ["startFrom", "startFrom", numberAttribute], singleLine: ["singleLine", "singleLine", booleanAttribute] }, host: { classAttribute: "hljs" }, ngImport: i0 }); }
398
- }
399
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockHighlight, decorators: [{
400
- type: Directive,
401
- args: [{
402
- standalone: true,
403
- selector: 'code[kbqCodeBlockHighlight]',
404
- host: {
405
- class: 'hljs'
406
- }
407
- }]
408
- }], ctorParameters: () => [], propDecorators: { file: [{
409
- type: Input,
410
- args: [{ required: true }]
411
- }], startFrom: [{
412
- type: Input,
413
- args: [{ transform: numberAttribute }]
414
- }], singleLine: [{
415
- type: Input,
416
- args: [{ transform: booleanAttribute }]
417
- }] } });
418
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1ibG9jay1oaWdobGlnaHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21wb25lbnRzL2NvZGUtYmxvY2svY29kZS1ibG9jay1oaWdobGlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsU0FBUyxFQUNULE1BQU0sRUFDTixjQUFjLEVBQ2QsS0FBSyxFQUNMLGVBQWUsRUFFZixTQUFTLEVBQ1QsZUFBZSxFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLFVBQVUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzdFLE9BQU8sSUFBSSxNQUFNLGNBQWMsQ0FBQzs7QUFHaEM7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxxQ0FBcUMsR0FBRyxJQUFJLGNBQWMsQ0FDbkUsdUNBQXVDLEVBQ3ZDLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUNqQyxDQUFDO0FBRUYsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLHdDQUF3QyxHQUFHLENBQUMsUUFBZ0IsRUFBWSxFQUFFLENBQUMsQ0FBQztJQUNyRixPQUFPLEVBQUUscUNBQXFDO0lBQzlDLFFBQVEsRUFBRSxRQUFRO0NBQ3JCLENBQUMsQ0FBQztBQUVILDZFQUE2RTtBQVE3RSxNQUFNLE9BQU8scUJBQXFCO0lBUTlCLHFCQUFxQjtJQUNyQixJQUNJLElBQUksQ0FBQyxJQUFzQjtRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBRXpCLElBQUksRUFBRSxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFeEIsSUFBSSxDQUFDLFFBQVEsSUFBSSxD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VUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSw2QkFBNkI7b0JBQ3ZDLElBQUksRUFBRTt3QkFDRixLQUFLLEVBQUUsTUFBTTtxQkFDaEI7aUJBQ0o7d0RBV08sSUFBSTtzQkFEUCxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkE2Q2MsU0FBUztzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUU7Z0JBR0csVUFBVTtzQkFBakQsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBEaXJlY3RpdmUsXG4gICAgaW5qZWN0LFxuICAgIEluamVjdGlvblRva2VuLFxuICAgIElucHV0LFxuICAgIG51bWJlckF0dHJpYnV0ZSxcbiAgICBQcm92aWRlcixcbiAgICBSZW5kZXJlcjIsXG4gICAgU2VjdXJpdHlDb250ZXh0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5pbXBvcnQgeyBLQlFfV0lORE9XLCBrYnFJbmplY3ROYXRpdmVFbGVtZW50IH0gZnJvbSAnQGtvb2JpcS9jb21wb25lbnRzL2NvcmUnO1xuaW1wb3J0IGhsanMgZnJvbSAnaGlnaGxpZ2h0LmpzJztcbmltcG9ydCB7IEticUNvZGVCbG9ja0ZpbGUgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBGYWxsYmFjayBsYW5ndWFnZSBmb3IgY29kZSBibG9jayBpZiBsYW5ndWFnZSBpcyBub3Qgc3VwcG9ydGVkL3NwZWNpZmllZC5cbiAqXG4gKiBMaXN0IG9mIHN1cHBvcnRlZCBsYW5ndWFnZXM6XG4gKiBAbGluayBodHRwczovL2hpZ2hsaWdodGpzLnJlYWR0aGVkb2NzLmlvL2VuL3N0YWJsZS9zdXBwb3J0ZWQtbGFuZ3VhZ2VzLmh0bWxcbiAqL1xuZXhwb3J0IGNvbnN0IEtCUV9DT0RFX0JMT0NLX0ZBTExCQUNLX0ZJTEVfTEFOR1VBR0UgPSBuZXcgSW5qZWN0aW9uVG9rZW48c3RyaW5nPihcbiAgICAnS0JRX0NPREVfQkxPQ0tfRkFMTEJBQ0tfRklMRV9MQU5HVUFHRScsXG4gICAgeyBmYWN0b3J5OiAoKSA9PiAncGxhaW50ZXh0JyB9XG4pO1xuXG4vKiogVXRpbGl0eSBwcm92aWRlciBmb3IgYEtCUV9DT0RFX0JMT0NLX0ZBTExCQUNLX0ZJTEVfTEFOR1VBR0VgLiAqL1xuZXhwb3J0IGNvbnN0IGticUNvZGVCbG9ja0ZhbGxiYWNrRmlsZUxhbmd1YWdlUHJvdmlkZXIgPSAobGFuZ3VhZ2U6IHN0cmluZyk6IFByb3ZpZGVyID0+ICh7XG4gICAgcHJvdmlkZTogS0JRX0NPREVfQkxPQ0tfRkFMTEJBQ0tfRklMRV9MQU5HVUFHRSxcbiAgICB1c2VWYWx1ZTogbGFuZ3VhZ2Vcbn0pO1xuXG4vKiogRGlyZWN0aXZlIHdoaWNoIGFwcGxpZXMgc3ludGF4IGhpZ2hsaWdodGluZyB0byB0aGUgY29kZSBibG9jayBjb250ZW50LiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ2NvZGVba2JxQ29kZUJsb2NrSGlnaGxpZ2h0XScsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2hsanMnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBLYnFDb2RlQmxvY2tIaWdobGlnaHQge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlRWxlbWVudCA9IGticUluamVjdE5hdGl2ZUVsZW1lbnQoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0PERvY3VtZW50PihET0NVTUVOVCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9tU2FuaXRpemVyID0gaW5qZWN0KERvbVNhbml0aXplcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYWxsYmFja0ZpbGVMYW5ndWFnZSA9IGluamVjdChLQlFfQ09ERV9CTE9DS19GQUxMQkFDS19GSUxFX0xBTkdVQUdFKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHdpbmRvdyA9IGluamVjdChLQlFfV0lORE9XKTtcblxuICAgIC8qKiBUaGUgY29kZSBmaWxlLiAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgc2V0IGZpbGUoZmlsZTogS2JxQ29kZUJsb2NrRmlsZSkge1xuICAgICAgICBpZiAoIXRoaXMud2luZG93KSByZXR1cm47XG5cbiAgICAgICAgbGV0IHsgbGFuZ3VhZ2UgfSA9IGZpbGU7XG5cbiAgICAgICAgaWYgKCFsYW5ndWFnZSB8fCAhaGxqcy5nZXRMYW5ndWFnZShsYW5ndWFnZSkpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgYFtLYnFDb2RlQmxvY2tdIFVua25vd24gZmlsZSBsYW5ndWFnZTogXCIke2xhbmd1YWdlfVwiLiBGYWxsIGJhY2sgdG8gXCIke3RoaXMuZmFsbGJhY2tGaWxlTGFuZ3VhZ2V9XCIuYCxcbiAgICAgICAgICAgICAgICBmaWxlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbGFuZ3VhZ2UgPSB0aGlzLmZhbGxiYWNrRmlsZUxhbmd1YWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgdmFsdWU6IGhpZ2hsaWdodGVkSFRNTCxcbiAgICAgICAgICAgIGxhbmd1YWdlOiBoaWdobGlnaHRlZExhbmd1YWdlLFxuICAgICAgICAgICAgaWxsZWdhbCxcbiAgICAgICAgICAgIHJlbGV2YW5jZVxuICAgICAgICB9ID0gaGxqcy5oaWdobGlnaHQoZmlsZS5jb250ZW50LCB7XG4gICAgICAgICAgICBsYW5ndWFnZTogbGFuZ3VhZ2UhXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpbGxlZ2FsKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbS2JxQ29kZUJsb2NrXSBGaWxlIGNvbnRlbnQgY29udGFpbnMgaWxsZWdhbCBjaGFyYWN0ZXJzLicsIGZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbGV2YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignW0ticUNvZGVCbG9ja10gRmlsZSBjb250ZW50IGRvZXMgbm90IG1hdGNoIHRoZSBzcGVjaWZpZWQgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UuJywgZmlsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzYWZlSFRNTCA9IHRoaXMuZG9tU2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5IVE1MLCBoaWdobGlnaHRlZEhUTUwpO1xuICAgICAgICBjb25zdCBoaWdobGlnaHRlZEhUTUxXaXRoTGluZU51bWJlcnMgPSB0aGlzLndpbmRvd1snaGxqcyddLmxpbmVOdW1iZXJzVmFsdWUoc2FmZUhUTUwsIHtcbiAgICAgICAgICAgIHN0YXJ0RnJvbTogdGhpcy5zdGFydEZyb20sXG4gICAgICAgICAgICBzaW5nbGVMaW5lOiB0aGlzLnNpbmdsZUxpbmVcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUodGhpcy5uYXRpdmVFbGVtZW50LCAnZGF0YS1sYW5ndWFnZScsIGhpZ2hsaWdodGVkTGFuZ3VhZ2UhKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wZXJ0eSh0aGlzLm5hdGl2ZUVsZW1lbnQsICdpbm5lckhUTUwnLCBoaWdobGlnaHRlZEhUTUxXaXRoTGluZU51bWJlcnMpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgc3RhcnRpbmcgbGluZSBudW1iZXIuICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBudW1iZXJBdHRyaWJ1dGUgfSkgc3RhcnRGcm9tOiBudW1iZXIgPSAxO1xuXG4gICAgLyoqIFdoZXRoZXIgdG8gZGlzcGxheSBsaW5lIG51bWJlcnMgZm9yIHNpbmdsZSBsaW5lIGNvZGUgYmxvY2suICovXG4gICAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHNpbmdsZUxpbmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRMaW5lTnVtYmVyc1BsdWdpbigpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemUgdGhlIEhpZ2hsaWdodEpTIGxpbmUgbnVtYmVycyBwbHVnaW4uIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvbmNlIHdoZW5cbiAgICAgKiB0aGUgY29tcG9uZW50IGlzIGNvbnN0cnVjdGVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgaW5pdExpbmVOdW1iZXJzUGx1Z2luKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMud2luZG93KSByZXR1cm47XG5cbiAgICAgICAgdGhpcy53aW5kb3dbJ2hsanMnXSA9IGhsanM7XG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0SlNMaW5lTnVtYmVyc1BsdWdpbih0aGlzLmRvY3VtZW50LCB0aGlzLndpbmRvdyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhpcyBtZXRob2QgaXMgbm90IGludGVuZGVkIGZvciBlZGl0aW5nLlxuICAgICAqIENoYW5nZXMgbWF5IGxlYWQgdG8gdW5wcmVkaWN0YWJsZSBiZWhhdmlvci5cbiAgICAgKiBTb3VyY2UgY29kZTogaHR0cHM6Ly9naXRodWIuY29tL3djb2Rlci9oaWdobGlnaHRqcy1saW5lLW51bWJlcnMuanMvYmxvYi92Mi45LjAvc3JjL2hpZ2hsaWdodGpzLWxpbmUtbnVtYmVycy5qc1xuICAgICAqL1xuICAgIHByaXZhdGUgaGlnaGxpZ2h0SlNMaW5lTnVtYmVyc1BsdWdpbihkOiBEb2N1bWVudCwgdzogV2luZG93KTogdm9pZCB7XG4gICAgICAgICd1c2Ugc3RyaWN0JztcblxuICAgICAgICBpZiAoIXcpIHJldHVybjtcblxuICAgICAgICBjb25zdCBUQUJMRV9OQU1FID0gJ2hsanMtbG4nLFxuICAgICAgICAgICAgTElORV9OQU1FID0gJ2hsanMtbG4tbGluZScsXG4gICAgICAgICAgICBDT0RFX0JMT0NLX05BTUUgPSAnaGxqcy1sbi1jb2RlJyxcbiAgICAgICAgICAgIE5VTUJFUlNfQkxPQ0tfTkFNRSA9ICdobGpzLWxuLW51bWJlcnMnLFxuICAgICAgICAgICAgTlVNQkVSX0xJTkVfTkFNRSA9ICdobGpzLWxuLW4nLFxuICAgICAgICAgICAgREFUQV9BVFRSX05BTUUgPSAnZGF0YS1saW5lLW51bWJlcicsXG4gICAgICAgICAgICBCUkVBS19MSU5FX1JFR0VYUCA9IC9cXHJcXG58XFxyfFxcbi9nO1xuXG4gICAgICAgIGlmICh3WydobGpzJ10pIHtcbiAgICAgICAgICAgIHdbJ2hsanMnXS5pbml0TGluZU51bWJlcnNPbkxvYWQgPSBpbml0TGluZU51bWJlcnNPbkxvYWQ7XG4gICAgICAgICAgICB3WydobGpzJ10ubGluZU51bWJlcnNCbG9jayA9IGxpbmVOdW1iZXJzQmxvY2s7XG4gICAgICAgICAgICB3WydobGpzJ10ubGluZU51bWJlcnNCbG9ja1N5bmMgPSBsaW5lTnVtYmVyc0Jsb2NrU3luYztcbiAgICAgICAgICAgIHdbJ2hsanMnXS5saW5lTnVtYmVyc1ZhbHVlID0gbGluZU51bWJlcnNWYWx1ZTtcblxuICAgICAgICAgICAgYWRkU3R5bGVzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignaGlnaGxpZ2h0LmpzIG5vdCBkZXRlY3RlZCEnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGlzSGxqc0xuQ29kZURlc2NlbmRhbnQoZG9tRWx0KSB7XG4gICAgICAgICAgICBsZXQgY3VyRWx0ID0gZG9tRWx0O1xuXG4gICAgICAgICAgICB3aGlsZSAoY3VyRWx0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1ckVsdC5jbGFzc05hbWUgJiYgY3VyRWx0LmNsYXNzTmFtZS5pbmRleE9mKCdobGpzLWxuLWNvZGUnKSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VyRWx0ID0gY3VyRWx0LnBhcmVudE5vZGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldEhsanNMblRhYmxlKGhsanNMbkRvbUVsdCkge1xuICAgICAgICAgICAgbGV0IGN1ckVsdCA9IGhsanNMbkRvbUVsdDtcblxuICAgICAgICAgICAgd2hpbGUgKGN1ckVsdC5ub2RlTmFtZSAhPT0gJ1RBQkxFJykge1xuICAgICAgICAgICAgICAgIGN1ckVsdCA9IGN1ckVsdC5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY3VyRWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRnVuY3Rpb24gdG8gd29ya2Fyb3VuZCBhIGNvcHkgaXNzdWUgd2l0aCBNaWNyb3NvZnQgRWRnZS5cbiAgICAgICAgLy8gRHVlIHRvIGhsanMtbG4gd3JhcHBpbmcgdGhlIGxpbmVzIG9mIGNvZGUgaW5zaWRlIGEgPHRhYmxlPiBlbGVtZW50LFxuICAgICAgICAvLyBpdHNlbGYgd3JhcHBlZCBpbnNpZGUgYSA8cHJlPiBlbGVtZW50LCB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkudG9TdHJpbmcoKVxuICAgICAgICAvLyBkb2VzIG5vdCBjb250YWluIGFueSBsaW5lIGJyZWFrcy4gU28gd2UgbmVlZCB0byBnZXQgdGhlbSBiYWNrIHVzaW5nIHRoZVxuICAgICAgICAvLyByZW5kZXJlZCBjb2RlIGluIHRoZSBET00gYXMgcmVmZXJlbmNlLlxuICAgICAgICBmdW5jdGlvbiBlZGdlR2V0U2VsZWN0ZWRDb2RlTGluZXMoc2VsZWN0aW9uKSB7XG4gICAgICAgICAgICAvLyBjdXJyZW50IHNlbGVjdGVkIHRleHQgd2l0aG91dCBsaW5lIGJyZWFrc1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpO1xuXG4gICAgICAgICAgICAvLyBnZXQgdGhlIDx0ZD4gZWxlbWVudCB3cmFwcGluZyB0aGUgZmlyc3QgbGluZSBvZiBzZWxlY3RlZCBjb2RlXG4gICAgICAgICAgICBsZXQgdGRBbmNob3IgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZTtcblxuICAgICAgICAgICAgd2hpbGUgKHRkQW5jaG9yLm5vZGVOYW1lICE9PSAnVEQnKSB7XG4gICAgICAgICAgICAgICAgdGRBbmNob3IgPSB0ZEFuY2hvci5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBnZXQgdGhlIDx0ZD4gZWxlbWVudCB3cmFwcGluZyB0aGUgbGFzdCBsaW5lIG9mIHNlbGVjdGVkIGNvZGVcbiAgICAgICAgICAgIGxldCB0ZEZvY3VzID0gc2VsZWN0aW9uLmZvY3VzTm9kZTtcblxuICAgICAgICAgICAgd2hpbGUgKHRkRm9jdXMubm9kZU5hbWUgIT09ICdURCcpIHtcbiAgICAgICAgICAgICAgICB0ZEZvY3VzID0gdGRGb2N1cy5wYXJlbnROb2RlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBleHRyYWN0IGxpbmUgbnVtYmVyc1xuICAgICAgICAgICAgbGV0IGZpcnN0TGluZU51bWJlciA9IHBhcnNlSW50KHRkQW5jaG9yLmRhdGFzZXQubGluZU51bWJlcik7XG4gICAgICAgICAgICBsZXQgbGFzdExpbmVOdW1iZXIgPSBwYXJzZUludCh0ZEZvY3VzLmRhdGFzZXQubGluZU51bWJlcik7XG5cbiAgICAgICAgICAgIC8vIG11bHRpLWxpbmVzIGNvcGllZCBjYXNlXG4gICAgICAgICAgICBpZiAoZmlyc3RMaW5lTnVtYmVyICE9IGxhc3RMaW5lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZpcnN0TGluZVRleHQgPSB0ZEFuY2hvci50ZXh0Q29udGVudDtcbiAgICAgICAgICAgICAgICBsZXQgbGFzdExpbmVUZXh0ID0gdGRGb2N1cy50ZXh0Q29udGVudDtcblxuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBzZWxlY3Rpb24gd2FzIG1hZGUgYmFja3dhcmQsIHN3YXAgdmFsdWVzXG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0TGluZU51bWJlciA+IGxhc3RMaW5lTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0bXAgPSBmaXJzdExpbmVOdW1iZXI7XG5cbiAgICAgICAgICAgICAgICAgICAgZmlyc3RMaW5lTnVtYmVyID0gbGFzdExpbmVOdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RMaW5lTnVtYmVyID0gdG1wO1xuICAgICAgICAgICAgICAgICAgICB0bXAgPSBmaXJzdExpbmVUZXh0O1xuICAgICAgICAgICAgICAgICAgICBmaXJzdExpbmVUZXh0ID0gbGFzdExpbmVUZXh0O1xuICAgICAgICAgICAgICAgICAgICBsYXN0TGluZVRleHQgPSB0bXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZGlzY2FyZCBub3QgY29waWVkIGNoYXJhY3RlcnMgaW4gZmlyc3QgbGluZVxuICAgICAgICAgICAgICAgIHdoaWxlIChzZWxlY3Rpb25UZXh0LmluZGV4T2YoZmlyc3RMaW5lVGV4dCkgIT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RMaW5lVGV4dCA9IGZpcnN0TGluZVRleHQuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gZGlzY2FyZCBub3QgY29waWVkIGNoYXJhY3RlcnMgaW4gbGFzdCBsaW5lXG4gICAgICAgICAgICAgICAgd2hpbGUgKHNlbGVjdGlvblRleHQubGFzdEluZGV4T2YobGFzdExpbmVUZXh0KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdExpbmVUZXh0ID0gbGFzdExpbmVUZXh0LnNsaWNlKDAsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyByZWNvbnN0cnVjdCBhbmQgcmV0dXJuIHRoZSByZWFsIGNvcGllZCB0ZXh0XG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkVGV4dCA9IGZpcnN0TGluZVRleHQ7XG4gICAgICAgICAgICAgICAgY29uc3QgaGxqc0xuVGFibGUgPSBnZXRIbGpzTG5UYWJsZSh0ZEFuY2hvcik7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gZmlyc3RMaW5lTnVtYmVyICsgMTsgaSA8IGxhc3RMaW5lTnVtYmVyOyArK2kpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZUxpbmVTZWwgPSBmb3JtYXQoJy57MH1bezF9PVwiezJ9XCJdJywgW0NPREVfQkxPQ0tfTkFNRSwgREFUQV9BVFRSX05BTUUsIGldKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZUxpbmVFbHQgPSBobGpzTG5UYWJsZS5xdWVyeVNlbGVjdG9yKGNvZGVMaW5lU2VsKTtcblxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFRleHQgKz0gJ1xcbicgKyBjb2RlTGluZUVsdC50ZXh0Q29udGVudDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRleHQgKz0gJ1xcbicgKyBsYXN0TGluZVRleHQ7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZWN0ZWRUZXh0O1xuICAgICAgICAgICAgICAgIC8vIHNpbmdsZSBjb3BpZWQgbGluZSBjYXNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxlY3Rpb25UZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZW5zdXJlIGNvbnNpc3RlbnQgY29kZSBjb3B5L3Bhc3RlIGJlaGF2aW9yIGFjcm9zcyBhbGwgYnJvd3NlcnNcbiAgICAgICAgLy8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2NvZGVyL2hpZ2hsaWdodGpzLWxpbmUtbnVtYmVycy5qcy9pc3N1ZXMvNTEpXG4gICAgICAgIGQuYWRkRXZlbnRMaXN0ZW5lcignY29weScsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAvLyBnZXQgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHcuZ2V0U2VsZWN0aW9uKCkhO1xuXG4gICAgICAgICAgICAvLyBvdmVycmlkZSBiZWhhdmlvciB3aGVuIG9uZSB3YW50cyB0byBjb3B5IGxpbmUgb2YgY29kZXNcbiAgICAgICAgICAgIGlmIChpc0hsanNMbkNvZGVEZXNjZW5kYW50KHNlbGVjdGlvbi5hbmNob3JOb2RlKSkge1xuICAgICAgICAgICAgICAgIGxldCBzZWxlY3Rpb25UZXh0O1xuXG4gICAgICAgICAgICAgICAgLy8gd29ya2Fyb3VuZCBhbiBpc3N1ZSB3aXRoIE1pY3Jvc29mdCBFZGdlIGFzIGNvcGllZCBsaW5lIGJyZWFrc1xuICAgICAgICAgICAgICAgIC8vIGFyZSByZW1vdmVkIG90aGVyd2lzZSBmcm9tIHRoZSBzZWxlY3Rpb24gc3RyaW5nXG4gICAgICAgICAgICAgICAgaWYgKHcubmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblRleHQgPSBlZGdlR2V0U2VsZWN0ZWRDb2RlTGluZXMoc2VsZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciBicm93c2VycyBjYW4gZGlyZWN0bHkgdXNlIHRoZSBzZWxlY3Rpb24gc3RyaW5nXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvblRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBlLmNsaXBib2FyZERhdGEhLnNldERhdGEoJ3RleHQvcGxhaW4nLCBzZWxlY3Rpb25UZXh0KTtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZ1bmN0aW9uIGFkZFN0eWxlcygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNzcyA9IGQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcblxuICAgICAgICAgICAgY3NzLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgICAgICAgY3NzLmlubmVySFRNTCA9IGZvcm1hdChcbiAgICAgICAgICAgICAgICAnLnswfXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2V9JyArICcuezB9IHRke3BhZGRpbmc6MH0nICsgJy57MX06YmVmb3Jle2NvbnRlbnQ6YXR0cih7Mn0pfScsXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICBUQUJMRV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICBOVU1CRVJfTElORV9OQU1FLFxuICAgICAgICAgICAgICAgICAgICBEQVRBX0FUVFJfTkFNRVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0uYXBwZW5kQ2hpbGQoY3NzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluaXRMaW5lTnVtYmVyc09uTG9hZChvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoZC5yZWFkeVN0YXRlID09PSAnaW50ZXJhY3RpdmUnIHx8IGQucmVhZHlTdGF0ZSA9PT0gJ2NvbXBsZXRlJykge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50UmVhZHkob3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHcuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnRSZWFkeShvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGRvY3VtZW50UmVhZHkob3B0aW9ucykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCBibG9ja3MgPSBkLnF1ZXJ5U2VsZWN0b3JBbGwoJ2NvZGUuaGxqcyxjb2RlLm5vaGlnaGxpZ2h0Jyk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGkgaW4gYmxvY2tzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9ja3MuaGFzT3duUHJvcGVydHkoaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNQbHVnaW5EaXNhYmxlZEZvckJsb2NrKGJsb2Nrc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lTnVtYmVyc0Jsb2NrKGJsb2Nrc1tpXSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdMaW5lTnVtYmVycyBlcnJvcjogJywgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBpc1BsdWdpbkRpc2FibGVkRm9yQmxvY2soZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdub2hsanNsbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbGluZU51bWJlcnNCbG9jayhlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGVsZW1lbnQgIT09ICdvYmplY3QnKSByZXR1cm47XG5cbiAgICAgICAgICAgIGFzeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IGxpbmVOdW1iZXJzSW50ZXJuYWwoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGxpbmVOdW1iZXJzQmxvY2tTeW5jKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ29iamVjdCcpIHJldHVybjtcblxuICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBsaW5lTnVtYmVyc0ludGVybmFsKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gbGluZU51bWJlcnNWYWx1ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybjtcblxuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGQuY3JlYXRlRWxlbWVudCgnY29kZScpO1xuXG4gICAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9IHZhbHVlO1xuXG4gICAgICAgICAgICByZXR1cm4gbGluZU51bWJlcnNJbnRlcm5hbChlbGVtZW50LCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGxpbmVOdW1iZXJzSW50ZXJuYWwoZWxlbWVudCwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgaW50ZXJuYWxPcHRpb25zID0gbWFwT3B0aW9ucyhlbGVtZW50LCBvcHRpb25zKTtcblxuICAgICAgICAgICAgZHVwbGljYXRlTXVsdGlsaW5lTm9kZXMoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIHJldHVybiBhZGRMaW5lTnVtYmVyc0Jsb2NrRm9yKGVsZW1lbnQuaW5uZXJIVE1MLCBpbnRlcm5hbE9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gYWRkTGluZU51bWJlcnNCbG9ja0ZvcihpbnB1dEh0bWwsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gZ2V0TGluZXMoaW5wdXRIdG1sKTtcblxuICAgICAgICAgICAgLy8gaWYgbGFzdCBsaW5lIGNvbnRhaW5zIG9ubHkgY2FycmlhZ2UgcmV0dXJuIHJlbW92ZSBpdFxuICAgICAgICAgICAgaWYgKGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLnRyaW0oKSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICBsaW5lcy5wb3AoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGxpbmVzLmxlbmd0aCA+IDEgfHwgb3B0aW9ucy5zaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICAgICAgbGV0IGh0bWwgPSAnJztcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gbGluZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gZm9ybWF0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJzx0cj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPHRkIGNsYXNzPVwiezB9IHsxfVwiIHszfT1cIns1fVwiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwiezJ9XCIgezN9PVwiezV9XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvdGQ+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzx0ZCBjbGFzcz1cInswfSB7NH1cIiB7M309XCJ7NX1cIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnezZ9JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvdGQ+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvdHI+JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSU5FX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVNQkVSU19CTE9DS19OQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTUJFUl9MSU5FX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgREFUQV9BVFRSX05BTUUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09ERV9CTE9DS19OQU1FLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgKyBvcHRpb25zLnN0YXJ0RnJvbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lc1tpXS5sZW5ndGggPiAwID8gbGluZXNbaV0gOiAnICdcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0KCc8dGFibGUgY2xhc3M9XCJ7MH1cIj57MX08L3RhYmxlPicsIFtUQUJMRV9OQU1FLCBodG1sXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBpbnB1dEh0bWw7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBDb2RlIGJsb2NrLlxuICAgICAgICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBFeHRlcm5hbCBBUEkgb3B0aW9ucy5cbiAgICAgICAgICogQHJldHVybnMge09iamVjdH0gSW50ZXJuYWwgQVBJIG9wdGlvbnMuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBtYXBPcHRpb25zKGVsZW1lbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHNpbmdsZUxpbmU6IGdldFNpbmdsZUxpbmVPcHRpb24ob3B0aW9ucyksXG4gICAgICAgICAgICAgICAgc3RhcnRGcm9tOiBnZXRTdGFydEZyb21PcHRpb24oZWxlbWVudCwgb3B0aW9ucylcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRTaW5nbGVMaW5lT3B0aW9uKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAob3B0aW9ucy5zaW5nbGVMaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMuc2luZ2xlTGluZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldFN0YXJ0RnJvbU9wdGlvbihlbGVtZW50LCBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSAxO1xuICAgICAgICAgICAgbGV0IHN0YXJ0RnJvbSA9IGRlZmF1bHRWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKGlzRmluaXRlKG9wdGlvbnMuc3RhcnRGcm9tKSkge1xuICAgICAgICAgICAgICAgIHN0YXJ0RnJvbSA9IG9wdGlvbnMuc3RhcnRGcm9tO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjYW4gYmUgb3ZlcnJpZGRlbiBiZWNhdXNlIGxvY2FsIG9wdGlvbiBpcyBwcmlvcml0eVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoZWxlbWVudCwgJ2RhdGEtbG4tc3RhcnQtZnJvbScpO1xuXG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzdGFydEZyb20gPSB0b051bWJlcih2YWx1ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0RnJvbTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWN1cnNpdmUgbWV0aG9kIGZvciBmaXggbXVsdGktbGluZSBlbGVtZW50cyBpbXBsZW1lbnRhdGlvbiBpbiBoaWdobGlnaHQuanNcbiAgICAgICAgICogRG9pbmcgZGVlcCBwYXNzYWdlIG9uIGNoaWxkIG5vZGVzLlxuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkdXBsaWNhdGVNdWx0aWxpbmVOb2RlcyhlbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBub2RlcyA9IGVsZW1lbnQuY2hpbGROb2RlcztcblxuICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIGluIG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVzLmhhc093blByb3BlcnR5KG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZXNbbm9kZV07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGdldExpbmVzQ291bnQoY2hpbGQudGV4dENvbnRlbnQpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cGxpY2F0ZU11bHRpbGluZU5vZGVzKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVwbGljYXRlTXVsdGlsaW5lTm9kZShjaGlsZC5wYXJlbnROb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBNZXRob2QgZm9yIGZpeCBtdWx0aS1saW5lIGVsZW1lbnRzIGltcGxlbWVudGF0aW9uIGluIGhpZ2hsaWdodC5qc1xuICAgICAgICAgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkdXBsaWNhdGVNdWx0aWxpbmVOb2RlKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lO1xuXG4gICAgICAgICAgICBpZiAoIS9obGpzLS8udGVzdChjbGFzc05hbWUpKSByZXR1cm47XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gZ2V0TGluZXMoZWxlbWVudC5pbm5lckhUTUwpO1xuXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lVGV4dCA9IGxpbmVzW2ldLmxlbmd0aCA+IDAgPyBsaW5lc1tpXSA6ICcgJztcblxuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmb3JtYXQoJzxzcGFuIGNsYXNzPVwiezB9XCI+ezF9PC9zcGFuPlxcbicsIFtjbGFzc05hbWUsIGxpbmVUZXh0XSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gcmVzdWx0LnRyaW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldExpbmVzKHRleHQpIHtcbiAgICAgICAgICAgIGlmICh0ZXh0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuXG4gICAgICAgICAgICByZXR1cm4gdGV4dC5zcGxpdChCUkVBS19MSU5FX1JFR0VYUCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRMaW5lc0NvdW50KHRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAodGV4dC50cmltKCkubWF0Y2goQlJFQUtfTElORV9SRUdFWFApIHx8IFtdKS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLy9cbiAgICAgICAgLy8vIEhFTFBFUlNcbiAgICAgICAgLy8vXG5cbiAgICAgICAgZnVuY3Rpb24gYXN5bmMoZnVuYykge1xuICAgICAgICAgICAgdy5zZXRUaW1lb3V0KGZ1bmMsIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIHtAbGluayBodHRwczovL3djb2Rlci5naXRodWIuaW8vbm90ZXMvc3RyaW5nLWZvcm1hdC1mb3Itc3RyaW5nLWZvcm1hdGluZy1pbi1qYXZhc2NyaXB0fVxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0XG4gICAgICAgICAqIEBwYXJhbSB7YXJyYXl9IGFyZ3NcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGZvcm1hdChmb3JtYXQsIGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgvXFx7KFxcZCspXFx9L2csIGZ1bmN0aW9uIChtLCBuKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Nbbl0gIT09IHVuZGVmaW5lZCA/IGFyZ3Nbbl0gOiBtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudCBDb2RlIGJsb2NrLlxuICAgICAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXR0ck5hbWUgQXR0cmlidXRlIG5hbWUuXG4gICAgICAgICAqIEByZXR1cm5zIHtTdHJpbmd9IEF0dHJpYnV0ZSB2YWx1ZSBvciBlbXB0eS5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZShlbGVtZW50LCBhdHRyTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJOYW1lKSA/IGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKSA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQHBhcmFtIHtTdHJpbmd9IHN0ciBTb3VyY2Ugc3RyaW5nLlxuICAgICAgICAgKiBAcGFyYW0ge051bWJlcn0gZmFsbGJhY2sgRmFsbGJhY2sgdmFsdWUuXG4gICAgICAgICAqIEByZXR1cm5zIFBhcnNlZCBudW1iZXIgb3IgZmFsbGJhY2sgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiB0b051bWJlcihzdHIsIGZhbGxiYWNrKSB7XG4gICAgICAgICAgICBpZiAoIXN0cikgcmV0dXJuIGZhbGxiYWNrO1xuICAgICAgICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKHN0cik7XG5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZShudW1iZXIpID8gbnVtYmVyIDogZmFsbGJhY2s7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=