@koobiq/components 18.35.0 → 18.36.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 (546) hide show
  1. package/accordion/accordion.component.d.ts +1 -1
  2. package/app-switcher/_app-switcher-theme.scss +34 -0
  3. package/app-switcher/app-switcher-animations.d.ts +5 -0
  4. package/app-switcher/app-switcher-dropdown-app.d.ts +11 -0
  5. package/app-switcher/app-switcher-dropdown-app.scss +85 -0
  6. package/app-switcher/app-switcher-dropdown-site.d.ts +9 -0
  7. package/app-switcher/app-switcher-dropdown-site.scss +53 -0
  8. package/app-switcher/app-switcher.d.ts +191 -0
  9. package/app-switcher/app-switcher.module.d.ts +10 -0
  10. package/app-switcher/app-switcher.scss +64 -0
  11. package/app-switcher/index.d.ts +1 -0
  12. package/app-switcher/kbq-app-switcher-list-item.d.ts +16 -0
  13. package/app-switcher/kbq-app-switcher-list-item.scss +180 -0
  14. package/app-switcher/public-api.d.ts +6 -0
  15. package/badge/badge.component.d.ts +1 -1
  16. package/badge/badge.component.scss +2 -0
  17. package/breadcrumbs/breadcrumbs.scss +4 -0
  18. package/button/button.component.d.ts +2 -2
  19. package/core/common-behaviors/clipboard.d.ts +1 -1
  20. package/core/common-behaviors/color.d.ts +5 -5
  21. package/core/common-behaviors/focus-monitor.d.ts +19 -0
  22. package/core/common-behaviors/hovered.d.ts +13 -0
  23. package/core/common-behaviors/index.d.ts +4 -0
  24. package/core/common-behaviors/orientation.d.ts +4 -0
  25. package/core/common-behaviors/read-state.d.ts +12 -0
  26. package/core/locales/en-US.d.ts +62 -0
  27. package/core/locales/es-LA.d.ts +62 -0
  28. package/core/locales/fa-IR.d.ts +62 -0
  29. package/core/locales/locale-service.d.ts +434 -0
  30. package/core/locales/pt-BR.d.ts +62 -0
  31. package/core/locales/ru-RU.d.ts +62 -0
  32. package/core/locales/tk-TM.d.ts +62 -0
  33. package/core/locales/types.d.ts +22 -0
  34. package/core/locales/zh-CN.d.ts +62 -0
  35. package/core/navbar/rectangle-item.d.ts +1 -1
  36. package/core/option/action.d.ts +1 -1
  37. package/core/option/option.d.ts +1 -1
  38. package/core/pop-up/constants.d.ts +2 -1
  39. package/core/pop-up/pop-up-trigger.d.ts +3 -3
  40. package/core/pop-up/pop-up.d.ts +2 -1
  41. package/core/select/common.d.ts +3 -0
  42. package/core/select/constants.d.ts +5 -0
  43. package/core/styles/common/_select.scss +5 -0
  44. package/core/utils/dom.d.ts +1 -6
  45. package/divider/divider.scss +1 -0
  46. package/dropdown/dropdown.component.d.ts +5 -1
  47. package/dropdown/dropdown.module.d.ts +1 -1
  48. package/esm2022/accordion/accordion-content.mjs +3 -3
  49. package/esm2022/accordion/accordion-header.mjs +3 -3
  50. package/esm2022/accordion/accordion-item.mjs +3 -3
  51. package/esm2022/accordion/accordion-trigger.component.mjs +3 -3
  52. package/esm2022/accordion/accordion.component.mjs +5 -5
  53. package/esm2022/accordion/accordion.module.mjs +4 -4
  54. package/esm2022/actions-panel/actions-panel-container.mjs +3 -3
  55. package/esm2022/actions-panel/actions-panel.mjs +3 -3
  56. package/esm2022/actions-panel/module.mjs +4 -4
  57. package/esm2022/alert/alert.component.mjs +12 -12
  58. package/esm2022/alert/alert.module.mjs +4 -4
  59. package/esm2022/app-switcher/app-switcher-animations.mjs +18 -0
  60. package/esm2022/app-switcher/app-switcher-dropdown-app.mjs +75 -0
  61. package/esm2022/app-switcher/app-switcher-dropdown-site.mjs +60 -0
  62. package/esm2022/app-switcher/app-switcher.mjs +446 -0
  63. package/esm2022/app-switcher/app-switcher.module.mjs +45 -0
  64. package/esm2022/app-switcher/index.mjs +2 -0
  65. package/esm2022/app-switcher/kbq-app-switcher-list-item.mjs +84 -0
  66. package/esm2022/app-switcher/koobiq-components-app-switcher.mjs +5 -0
  67. package/esm2022/app-switcher/public-api.mjs +7 -0
  68. package/esm2022/autocomplete/autocomplete-origin.directive.mjs +3 -3
  69. package/esm2022/autocomplete/autocomplete-trigger.directive.mjs +3 -3
  70. package/esm2022/autocomplete/autocomplete.component.mjs +3 -3
  71. package/esm2022/autocomplete/autocomplete.module.mjs +4 -4
  72. package/esm2022/badge/badge.component.mjs +11 -11
  73. package/esm2022/badge/badge.module.mjs +4 -4
  74. package/esm2022/breadcrumbs/breadcrumbs.mjs +17 -17
  75. package/esm2022/breadcrumbs/breadcrumbs.module.mjs +4 -4
  76. package/esm2022/button/button.component.mjs +7 -7
  77. package/esm2022/button/button.dropdown-trigger.directive.mjs +3 -3
  78. package/esm2022/button/button.module.mjs +4 -4
  79. package/esm2022/button-toggle/button-toggle.component.mjs +6 -6
  80. package/esm2022/button-toggle/button-toggle.module.mjs +4 -4
  81. package/esm2022/checkbox/checkbox-module.mjs +4 -4
  82. package/esm2022/checkbox/checkbox-required-validator.mjs +3 -3
  83. package/esm2022/checkbox/checkbox.mjs +3 -3
  84. package/esm2022/clamped-text/clamped-text.mjs +3 -3
  85. package/esm2022/clamped-text/module.mjs +4 -4
  86. package/esm2022/code-block/code-block-highlight.mjs +7 -7
  87. package/esm2022/code-block/code-block.mjs +4 -4
  88. package/esm2022/code-block/code-block.module.mjs +4 -4
  89. package/esm2022/content-panel/content-panel.mjs +24 -24
  90. package/esm2022/content-panel/module.mjs +4 -4
  91. package/esm2022/content-panel/resizable.mjs +6 -6
  92. package/esm2022/core/common-behaviors/clipboard.mjs +4 -4
  93. package/esm2022/core/common-behaviors/color.mjs +6 -7
  94. package/esm2022/core/common-behaviors/common-module.mjs +4 -4
  95. package/esm2022/core/common-behaviors/focus-monitor.mjs +37 -0
  96. package/esm2022/core/common-behaviors/hovered.mjs +31 -0
  97. package/esm2022/core/common-behaviors/index.mjs +5 -1
  98. package/esm2022/core/common-behaviors/orientation.mjs +2 -0
  99. package/esm2022/core/common-behaviors/read-state.mjs +33 -0
  100. package/esm2022/core/error/error-state-matcher.mjs +9 -9
  101. package/esm2022/core/form-field/field-sizing-content.mjs +3 -3
  102. package/esm2022/core/formatters/date/formatter.mjs +3 -3
  103. package/esm2022/core/formatters/date/formatter.pipe.mjs +78 -78
  104. package/esm2022/core/formatters/filesize/formatter.mjs +3 -3
  105. package/esm2022/core/formatters/index.mjs +4 -4
  106. package/esm2022/core/formatters/number/formatter.mjs +12 -12
  107. package/esm2022/core/forms/forms-module.mjs +4 -4
  108. package/esm2022/core/forms/forms.directive.mjs +6 -6
  109. package/esm2022/core/highlight/highlight.pipe.mjs +3 -3
  110. package/esm2022/core/highlight/index.mjs +4 -4
  111. package/esm2022/core/line/line.mjs +7 -7
  112. package/esm2022/core/locales/en-US.mjs +105 -1
  113. package/esm2022/core/locales/es-LA.mjs +105 -1
  114. package/esm2022/core/locales/fa-IR.mjs +75 -1
  115. package/esm2022/core/locales/locale-service.mjs +3 -3
  116. package/esm2022/core/locales/locale-service.module.mjs +4 -4
  117. package/esm2022/core/locales/pt-BR.mjs +105 -1
  118. package/esm2022/core/locales/ru-RU.mjs +119 -1
  119. package/esm2022/core/locales/tk-TM.mjs +105 -1
  120. package/esm2022/core/locales/types.mjs +1 -1
  121. package/esm2022/core/locales/zh-CN.mjs +63 -1
  122. package/esm2022/core/navbar/rectangle-item.mjs +7 -6
  123. package/esm2022/core/option/action-container.mjs +3 -3
  124. package/esm2022/core/option/action.mjs +4 -4
  125. package/esm2022/core/option/optgroup.mjs +3 -3
  126. package/esm2022/core/option/option-module.mjs +4 -4
  127. package/esm2022/core/option/option.mjs +4 -4
  128. package/esm2022/core/pop-up/constants.mjs +2 -1
  129. package/esm2022/core/pop-up/pop-up-trigger.mjs +6 -6
  130. package/esm2022/core/pop-up/pop-up.mjs +4 -4
  131. package/esm2022/core/select/common.mjs +27 -17
  132. package/esm2022/core/select/constants.mjs +6 -1
  133. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.mjs +3 -3
  134. package/esm2022/core/selection/pseudo-checkbox/pseudo-checkbox.module.mjs +4 -4
  135. package/esm2022/core/services/measure-scrollbar.service.mjs +3 -3
  136. package/esm2022/core/services/theme.service.mjs +3 -3
  137. package/esm2022/core/utils/dom.mjs +2 -8
  138. package/esm2022/core/version.mjs +2 -2
  139. package/esm2022/datepicker/calendar-body.component.mjs +3 -3
  140. package/esm2022/datepicker/calendar-header.component.mjs +3 -3
  141. package/esm2022/datepicker/calendar.component.mjs +3 -3
  142. package/esm2022/datepicker/datepicker-input.directive.mjs +6 -6
  143. package/esm2022/datepicker/datepicker-intl.mjs +3 -3
  144. package/esm2022/datepicker/datepicker-module.mjs +4 -4
  145. package/esm2022/datepicker/datepicker-toggle.component.mjs +9 -9
  146. package/esm2022/datepicker/datepicker.component.mjs +6 -6
  147. package/esm2022/datepicker/month-view.component.mjs +3 -3
  148. package/esm2022/divider/divider.component.mjs +4 -4
  149. package/esm2022/divider/divider.module.mjs +4 -4
  150. package/esm2022/dl/dl.component.mjs +9 -9
  151. package/esm2022/dl/dl.module.mjs +4 -4
  152. package/esm2022/dropdown/dropdown-content.directive.mjs +3 -3
  153. package/esm2022/dropdown/dropdown-item.component.mjs +3 -3
  154. package/esm2022/dropdown/dropdown-trigger.directive.mjs +5 -5
  155. package/esm2022/dropdown/dropdown.component.mjs +18 -8
  156. package/esm2022/dropdown/dropdown.module.mjs +14 -10
  157. package/esm2022/dynamic-translation/dynamic-translation.mjs +9 -9
  158. package/esm2022/dynamic-translation/module.mjs +4 -4
  159. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +7 -7
  160. package/esm2022/empty-state/empty-state.component.mjs +15 -15
  161. package/esm2022/empty-state/empty-state.module.mjs +4 -4
  162. package/esm2022/file-upload/file-drop.mjs +3 -3
  163. package/esm2022/file-upload/file-upload.mjs +1 -1
  164. package/esm2022/file-upload/file-upload.module.mjs +4 -4
  165. package/esm2022/file-upload/multiple-file-upload.component.mjs +19 -8
  166. package/esm2022/file-upload/single-file-upload.component.mjs +13 -5
  167. package/esm2022/filter-bar/filter-bar-button.mjs +3 -3
  168. package/esm2022/filter-bar/filter-bar.mjs +3 -3
  169. package/esm2022/filter-bar/filter-bar.module.mjs +4 -4
  170. package/esm2022/filter-bar/filter-refresher.mjs +3 -3
  171. package/esm2022/filter-bar/filter-reset.mjs +3 -3
  172. package/esm2022/filter-bar/filter-search.mjs +3 -3
  173. package/esm2022/filter-bar/filters.mjs +4 -4
  174. package/esm2022/filter-bar/pipe-add.mjs +5 -5
  175. package/esm2022/filter-bar/pipe.directive.mjs +3 -3
  176. package/esm2022/filter-bar/pipes/base-pipe.mjs +7 -7
  177. package/esm2022/filter-bar/pipes/pipe-button.mjs +3 -3
  178. package/esm2022/filter-bar/pipes/pipe-date.mjs +6 -6
  179. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +6 -6
  180. package/esm2022/filter-bar/pipes/pipe-multi-select.mjs +12 -7
  181. package/esm2022/filter-bar/pipes/pipe-multi-tree-select.mjs +12 -7
  182. package/esm2022/filter-bar/pipes/pipe-readonly.mjs +6 -6
  183. package/esm2022/filter-bar/pipes/pipe-select.mjs +6 -6
  184. package/esm2022/filter-bar/pipes/pipe-state.mjs +3 -3
  185. package/esm2022/filter-bar/pipes/pipe-text.mjs +6 -6
  186. package/esm2022/filter-bar/pipes/pipe-title.mjs +3 -3
  187. package/esm2022/filter-bar/pipes/pipe-tree-select.mjs +6 -6
  188. package/esm2022/form-field/cleaner.mjs +3 -3
  189. package/esm2022/form-field/error.mjs +3 -3
  190. package/esm2022/form-field/fieldset.mjs +11 -11
  191. package/esm2022/form-field/form-field.mjs +11 -11
  192. package/esm2022/form-field/form-field.module.mjs +4 -4
  193. package/esm2022/form-field/hint.mjs +3 -3
  194. package/esm2022/form-field/label.mjs +3 -3
  195. package/esm2022/form-field/password-hint.mjs +3 -3
  196. package/esm2022/form-field/password-toggle.mjs +7 -7
  197. package/esm2022/form-field/prefix.mjs +3 -3
  198. package/esm2022/form-field/reactive-password-hint.mjs +3 -3
  199. package/esm2022/form-field/stepper.mjs +3 -3
  200. package/esm2022/form-field/suffix.mjs +3 -3
  201. package/esm2022/form-field/validate.directive.mjs +3 -3
  202. package/esm2022/icon/icon-button.component.mjs +3 -3
  203. package/esm2022/icon/icon-item.component.mjs +3 -3
  204. package/esm2022/icon/icon.component.mjs +4 -4
  205. package/esm2022/icon/icon.module.mjs +4 -4
  206. package/esm2022/inline-edit/index.mjs +3 -0
  207. package/esm2022/inline-edit/inline-edit.mjs +378 -0
  208. package/esm2022/inline-edit/koobiq-components-inline-edit.mjs +5 -0
  209. package/esm2022/inline-edit/module.mjs +25 -0
  210. package/esm2022/input/input-number-validators.mjs +6 -6
  211. package/esm2022/input/input-number.mjs +4 -4
  212. package/esm2022/input/input-password.mjs +4 -4
  213. package/esm2022/input/input.mjs +7 -7
  214. package/esm2022/input/input.module.mjs +4 -4
  215. package/esm2022/link/link.component.mjs +6 -6
  216. package/esm2022/link/link.module.mjs +4 -4
  217. package/esm2022/list/list-selection.component.mjs +10 -10
  218. package/esm2022/list/list.component.mjs +6 -6
  219. package/esm2022/list/list.module.mjs +4 -4
  220. package/esm2022/loader-overlay/loader-overlay.component.mjs +13 -13
  221. package/esm2022/loader-overlay/loader-overlay.module.mjs +4 -4
  222. package/esm2022/markdown/markdown.component.mjs +5 -5
  223. package/esm2022/markdown/markdown.module.mjs +4 -4
  224. package/esm2022/markdown/markdown.service.mjs +3 -3
  225. package/esm2022/modal/css-unit.pipe.mjs +3 -3
  226. package/esm2022/modal/modal-control.service.mjs +3 -3
  227. package/esm2022/modal/modal.component.mjs +4 -4
  228. package/esm2022/modal/modal.directive.mjs +12 -12
  229. package/esm2022/modal/modal.module.mjs +4 -4
  230. package/esm2022/modal/modal.service.mjs +3 -3
  231. package/esm2022/navbar/navbar-item.component.mjs +49 -38
  232. package/esm2022/navbar/navbar.component.mjs +10 -10
  233. package/esm2022/navbar/navbar.module.mjs +4 -4
  234. package/esm2022/navbar/vertical-navbar.component.mjs +4 -4
  235. package/esm2022/navbar-ic/navbar-ic-header.mjs +7 -7
  236. package/esm2022/navbar-ic/navbar-ic-item.mjs +30 -38
  237. package/esm2022/navbar-ic/navbar-ic.mjs +18 -13
  238. package/esm2022/navbar-ic/navbar-ic.module.mjs +4 -4
  239. package/esm2022/notification-center/index.mjs +2 -0
  240. package/esm2022/notification-center/koobiq-components-notification-center.mjs +5 -0
  241. package/esm2022/notification-center/notification-center-animations.mjs +18 -0
  242. package/esm2022/notification-center/notification-center.mjs +353 -0
  243. package/esm2022/notification-center/notification-center.module.mjs +38 -0
  244. package/esm2022/notification-center/notification-center.service.mjs +127 -0
  245. package/esm2022/notification-center/notification-item.mjs +70 -0
  246. package/esm2022/notification-center/public-api.mjs +5 -0
  247. package/esm2022/overflow-items/module.mjs +4 -4
  248. package/esm2022/overflow-items/overflow-items.mjs +95 -41
  249. package/esm2022/popover/popover-confirm.component.mjs +10 -10
  250. package/esm2022/popover/popover.component.mjs +18 -13
  251. package/esm2022/popover/popover.module.mjs +4 -4
  252. package/esm2022/progress-bar/progress-bar.component.mjs +9 -9
  253. package/esm2022/progress-bar/progress-bar.module.mjs +4 -4
  254. package/esm2022/progress-spinner/progress-spinner.component.mjs +9 -9
  255. package/esm2022/progress-spinner/progress-spinner.module.mjs +4 -4
  256. package/esm2022/radio/radio.component.mjs +6 -6
  257. package/esm2022/radio/radio.module.mjs +4 -4
  258. package/esm2022/risk-level/risk-level.component.mjs +3 -3
  259. package/esm2022/risk-level/risk-level.module.mjs +4 -4
  260. package/esm2022/scrollbar/scrollbar.component.mjs +3 -3
  261. package/esm2022/scrollbar/scrollbar.directive.mjs +3 -3
  262. package/esm2022/scrollbar/scrollbar.module.mjs +4 -4
  263. package/esm2022/search-expandable/index.mjs +2 -0
  264. package/esm2022/search-expandable/koobiq-components-search-expandable.mjs +5 -0
  265. package/esm2022/search-expandable/public-api.mjs +3 -0
  266. package/esm2022/search-expandable/search-expandable.mjs +177 -0
  267. package/esm2022/search-expandable/search-expandable.module.mjs +18 -0
  268. package/esm2022/select/select-option.directive.mjs +3 -3
  269. package/esm2022/select/select.component.mjs +37 -10
  270. package/esm2022/select/select.module.mjs +4 -4
  271. package/esm2022/sidebar/sidebar.component.mjs +9 -9
  272. package/esm2022/sidebar/sidebar.module.mjs +4 -4
  273. package/esm2022/sidepanel/sidepanel-container.component.mjs +3 -3
  274. package/esm2022/sidepanel/sidepanel-directives.mjs +15 -15
  275. package/esm2022/sidepanel/sidepanel.module.mjs +4 -4
  276. package/esm2022/sidepanel/sidepanel.service.mjs +3 -3
  277. package/esm2022/split-button/index.mjs +2 -0
  278. package/esm2022/split-button/koobiq-components-split-button.mjs +5 -0
  279. package/esm2022/split-button/public-api.mjs +3 -0
  280. package/esm2022/split-button/split-button.mjs +92 -0
  281. package/esm2022/split-button/split-button.module.mjs +18 -0
  282. package/esm2022/splitter/splitter.component.mjs +13 -13
  283. package/esm2022/splitter/splitter.module.mjs +4 -4
  284. package/esm2022/table/table.component.mjs +6 -6
  285. package/esm2022/table/table.module.mjs +4 -4
  286. package/esm2022/tabs/paginated-tab-header.mjs +4 -4
  287. package/esm2022/tabs/tab-body.component.mjs +6 -6
  288. package/esm2022/tabs/tab-content.directive.mjs +3 -3
  289. package/esm2022/tabs/tab-group.component.mjs +15 -15
  290. package/esm2022/tabs/tab-header.component.mjs +4 -4
  291. package/esm2022/tabs/tab-label-wrapper.directive.mjs +4 -4
  292. package/esm2022/tabs/tab-label.directive.mjs +3 -3
  293. package/esm2022/tabs/tab-nav-bar.mjs +10 -10
  294. package/esm2022/tabs/tab.component.mjs +3 -3
  295. package/esm2022/tabs/tabs.module.mjs +4 -4
  296. package/esm2022/tags/tag-input.mjs +17 -11
  297. package/esm2022/tags/tag-list.component.mjs +236 -194
  298. package/esm2022/tags/tag.component.mjs +209 -138
  299. package/esm2022/tags/tag.module.mjs +4 -4
  300. package/esm2022/textarea/textarea.component.mjs +5 -5
  301. package/esm2022/textarea/textarea.module.mjs +4 -4
  302. package/esm2022/time-range/constants.mjs +21 -0
  303. package/esm2022/time-range/index.mjs +8 -0
  304. package/esm2022/time-range/koobiq-components-time-range.mjs +5 -0
  305. package/esm2022/time-range/module.mjs +36 -0
  306. package/esm2022/time-range/time-range-editor.mjs +219 -0
  307. package/esm2022/time-range/time-range-title-as-form-field.mjs +59 -0
  308. package/esm2022/time-range/time-range-title.mjs +112 -0
  309. package/esm2022/time-range/time-range.mjs +229 -0
  310. package/esm2022/time-range/time-range.service.mjs +189 -0
  311. package/esm2022/time-range/types.mjs +2 -0
  312. package/esm2022/timepicker/timepicker.directive.mjs +4 -4
  313. package/esm2022/timepicker/timepicker.module.mjs +4 -4
  314. package/esm2022/timezone/cities-by-filter.pipe.mjs +3 -3
  315. package/esm2022/timezone/timezone-option.component.mjs +3 -3
  316. package/esm2022/timezone/timezone-option.directive.mjs +3 -3
  317. package/esm2022/timezone/timezone-select.component.mjs +9 -9
  318. package/esm2022/timezone/timezone.module.mjs +4 -4
  319. package/esm2022/timezone/utc-offset.pipe.mjs +3 -3
  320. package/esm2022/title/title.directive.mjs +3 -3
  321. package/esm2022/title/title.module.mjs +4 -4
  322. package/esm2022/toast/toast-container.component.mjs +3 -3
  323. package/esm2022/toast/toast.component.mjs +20 -14
  324. package/esm2022/toast/toast.module.mjs +4 -4
  325. package/esm2022/toast/toast.service.mjs +5 -4
  326. package/esm2022/toast/toast.type.mjs +1 -1
  327. package/esm2022/toggle/toggle.component.mjs +3 -3
  328. package/esm2022/toggle/toggle.module.mjs +4 -4
  329. package/esm2022/tooltip/tooltip.component.mjs +19 -19
  330. package/esm2022/tooltip/tooltip.module.mjs +4 -4
  331. package/esm2022/top-bar/module.mjs +4 -4
  332. package/esm2022/top-bar/top-bar.mjs +9 -9
  333. package/esm2022/tree/node.mjs +3 -3
  334. package/esm2022/tree/outlet.mjs +3 -3
  335. package/esm2022/tree/padding.directive.mjs +3 -3
  336. package/esm2022/tree/toggle.mjs +16 -12
  337. package/esm2022/tree/tree-base.mjs +7 -7
  338. package/esm2022/tree/tree-option.component.mjs +5 -9
  339. package/esm2022/tree/tree-selection.component.mjs +4 -4
  340. package/esm2022/tree/tree.mjs +3 -3
  341. package/esm2022/tree/tree.module.mjs +4 -4
  342. package/esm2022/tree-select/tree-select.component.mjs +54 -14
  343. package/esm2022/tree-select/tree-select.module.mjs +4 -4
  344. package/esm2022/username/module.mjs +4 -4
  345. package/esm2022/username/username.mjs +15 -15
  346. package/esm2022/username/username.pipe.mjs +8 -8
  347. package/fesm2022/koobiq-components-accordion.mjs +20 -20
  348. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  349. package/fesm2022/koobiq-components-actions-panel.mjs +10 -10
  350. package/fesm2022/koobiq-components-alert.mjs +16 -16
  351. package/fesm2022/koobiq-components-app-switcher.mjs +704 -0
  352. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -0
  353. package/fesm2022/koobiq-components-autocomplete.mjs +13 -13
  354. package/fesm2022/koobiq-components-badge.mjs +14 -14
  355. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  356. package/fesm2022/koobiq-components-breadcrumbs.mjs +20 -20
  357. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  358. package/fesm2022/koobiq-components-button-toggle.mjs +10 -10
  359. package/fesm2022/koobiq-components-button.mjs +13 -13
  360. package/fesm2022/koobiq-components-button.mjs.map +1 -1
  361. package/fesm2022/koobiq-components-checkbox.mjs +10 -10
  362. package/fesm2022/koobiq-components-clamped-text.mjs +7 -7
  363. package/fesm2022/koobiq-components-code-block.mjs +13 -13
  364. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  365. package/fesm2022/koobiq-components-content-panel.mjs +34 -34
  366. package/fesm2022/koobiq-components-core.mjs +1032 -263
  367. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  368. package/fesm2022/koobiq-components-datepicker.mjs +40 -40
  369. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  370. package/fesm2022/koobiq-components-divider.mjs +8 -8
  371. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  372. package/fesm2022/koobiq-components-dl.mjs +13 -13
  373. package/fesm2022/koobiq-components-dropdown.mjs +39 -25
  374. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  375. package/fesm2022/koobiq-components-dynamic-translation.mjs +13 -13
  376. package/fesm2022/koobiq-components-ellipsis-center.mjs +7 -7
  377. package/fesm2022/koobiq-components-empty-state.mjs +19 -19
  378. package/fesm2022/koobiq-components-file-upload.mjs +36 -18
  379. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  380. package/fesm2022/koobiq-components-filter-bar.mjs +96 -86
  381. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  382. package/fesm2022/koobiq-components-form-field.mjs +60 -60
  383. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  384. package/fesm2022/koobiq-components-icon.mjs +13 -13
  385. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  386. package/fesm2022/koobiq-components-inline-edit.mjs +407 -0
  387. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -0
  388. package/fesm2022/koobiq-components-input.mjs +22 -22
  389. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  390. package/fesm2022/koobiq-components-link.mjs +10 -10
  391. package/fesm2022/koobiq-components-link.mjs.map +1 -1
  392. package/fesm2022/koobiq-components-list.mjs +19 -19
  393. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  394. package/fesm2022/koobiq-components-loader-overlay.mjs +16 -16
  395. package/fesm2022/koobiq-components-loader-overlay.mjs.map +1 -1
  396. package/fesm2022/koobiq-components-markdown.mjs +12 -12
  397. package/fesm2022/koobiq-components-markdown.mjs.map +1 -1
  398. package/fesm2022/koobiq-components-modal.mjs +28 -28
  399. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  400. package/fesm2022/koobiq-components-navbar-ic.mjs +53 -56
  401. package/fesm2022/koobiq-components-navbar-ic.mjs.map +1 -1
  402. package/fesm2022/koobiq-components-navbar.mjs +65 -54
  403. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  404. package/fesm2022/koobiq-components-notification-center.mjs +586 -0
  405. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -0
  406. package/fesm2022/koobiq-components-overflow-items.mjs +98 -44
  407. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  408. package/fesm2022/koobiq-components-popover.mjs +30 -25
  409. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  410. package/fesm2022/koobiq-components-progress-bar.mjs +13 -13
  411. package/fesm2022/koobiq-components-progress-spinner.mjs +13 -13
  412. package/fesm2022/koobiq-components-radio.mjs +10 -10
  413. package/fesm2022/koobiq-components-risk-level.mjs +7 -7
  414. package/fesm2022/koobiq-components-scrollbar.mjs +10 -10
  415. package/fesm2022/koobiq-components-search-expandable.mjs +199 -0
  416. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -0
  417. package/fesm2022/koobiq-components-select.mjs +43 -16
  418. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  419. package/fesm2022/koobiq-components-sidebar.mjs +13 -13
  420. package/fesm2022/koobiq-components-sidepanel.mjs +25 -25
  421. package/fesm2022/koobiq-components-split-button.mjs +114 -0
  422. package/fesm2022/koobiq-components-split-button.mjs.map +1 -0
  423. package/fesm2022/koobiq-components-splitter.mjs +16 -16
  424. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  425. package/fesm2022/koobiq-components-table.mjs +10 -10
  426. package/fesm2022/koobiq-components-tabs.mjs +52 -52
  427. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  428. package/fesm2022/koobiq-components-tags.mjs +461 -346
  429. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  430. package/fesm2022/koobiq-components-textarea.mjs +8 -8
  431. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  432. package/fesm2022/koobiq-components-time-range.mjs +840 -0
  433. package/fesm2022/koobiq-components-time-range.mjs.map +1 -0
  434. package/fesm2022/koobiq-components-timepicker.mjs +7 -7
  435. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  436. package/fesm2022/koobiq-components-timezone.mjs +24 -24
  437. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  438. package/fesm2022/koobiq-components-title.mjs +7 -7
  439. package/fesm2022/koobiq-components-toast.mjs +28 -21
  440. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  441. package/fesm2022/koobiq-components-toggle.mjs +7 -7
  442. package/fesm2022/koobiq-components-tooltip.mjs +22 -22
  443. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  444. package/fesm2022/koobiq-components-top-bar.mjs +13 -13
  445. package/fesm2022/koobiq-components-tree-select.mjs +57 -17
  446. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  447. package/fesm2022/koobiq-components-tree.mjs +44 -44
  448. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  449. package/fesm2022/koobiq-components-username.mjs +27 -27
  450. package/file-upload/_file-upload-theme.scss +1 -1
  451. package/file-upload/file-upload.d.ts +1 -1
  452. package/file-upload/multiple-file-upload.component.d.ts +1 -0
  453. package/file-upload/single-file-upload.component.d.ts +1 -0
  454. package/filter-bar/pipes/base-pipe.d.ts +1 -1
  455. package/filter-bar/pipes/base-pipe.scss +3 -3
  456. package/filter-bar/pipes/pipe-date.scss +1 -0
  457. package/form-field/fieldset-tokens.scss +1 -1
  458. package/form-field/form-field-tokens.scss +1 -1
  459. package/form-field/form-field.d.ts +1 -1
  460. package/form-field/form-field.scss +1 -9
  461. package/form-field/password-toggle.d.ts +1 -1
  462. package/icon/icon.component.d.ts +2 -2
  463. package/inline-edit/index.d.ts +2 -0
  464. package/inline-edit/inline-edit-tokens.scss +8 -0
  465. package/inline-edit/inline-edit.d.ts +136 -0
  466. package/inline-edit/inline-edit.scss +208 -0
  467. package/inline-edit/module.d.ts +7 -0
  468. package/input/input-number.d.ts +1 -1
  469. package/input/input-password.d.ts +2 -2
  470. package/input/input.d.ts +2 -2
  471. package/link/link.component.d.ts +3 -3
  472. package/list/list-selection.component.d.ts +1 -1
  473. package/loader-overlay/loader-overlay.component.d.ts +1 -1
  474. package/markdown/_markdown-theme.scss +1 -1
  475. package/markdown/markdown-tokens.scss +1 -0
  476. package/markdown/markdown.scss +8 -0
  477. package/modal/modal.component.d.ts +1 -1
  478. package/navbar/navbar-item.component.d.ts +3 -2
  479. package/navbar/navbar.component.d.ts +4 -4
  480. package/navbar/vertical-navbar.component.d.ts +2 -2
  481. package/navbar-ic/navbar-ic-header.d.ts +1 -1
  482. package/navbar-ic/navbar-ic-item.d.ts +2 -2
  483. package/navbar-ic/navbar-ic.d.ts +4 -2
  484. package/notification-center/_notification-center-theme.scss +27 -0
  485. package/notification-center/index.d.ts +1 -0
  486. package/notification-center/notification-center-animations.d.ts +5 -0
  487. package/notification-center/notification-center.d.ts +153 -0
  488. package/notification-center/notification-center.module.d.ts +7 -0
  489. package/notification-center/notification-center.scss +126 -0
  490. package/notification-center/notification-center.service.d.ts +72 -0
  491. package/notification-center/notification-item.d.ts +27 -0
  492. package/notification-center/notification-item.scss +157 -0
  493. package/notification-center/public-api.d.ts +4 -0
  494. package/overflow-items/overflow-items.d.ts +23 -9
  495. package/package.json +46 -10
  496. package/popover/popover.component.d.ts +5 -1
  497. package/popover/popover.scss +15 -7
  498. package/prebuilt-themes/dark-theme.css +1 -1
  499. package/prebuilt-themes/light-theme.css +1 -1
  500. package/prebuilt-themes/theme.css +1 -1
  501. package/schematics/ng-add/index.js +5 -5
  502. package/search-expandable/index.d.ts +1 -0
  503. package/search-expandable/public-api.d.ts +2 -0
  504. package/search-expandable/search-expandable.d.ts +70 -0
  505. package/search-expandable/search-expandable.module.d.ts +7 -0
  506. package/search-expandable/search-expandable.scss +21 -0
  507. package/select/select.component.d.ts +38 -3
  508. package/split-button/_split-button-theme.scss +59 -0
  509. package/split-button/index.d.ts +1 -0
  510. package/split-button/public-api.d.ts +2 -0
  511. package/split-button/split-button.d.ts +31 -0
  512. package/split-button/split-button.module.d.ts +7 -0
  513. package/split-button/split-button.scss +83 -0
  514. package/splitter/splitter.component.d.ts +5 -5
  515. package/tabs/paginated-tab-header.d.ts +1 -1
  516. package/tabs/tab-header.component.d.ts +2 -2
  517. package/tabs/tab-label-wrapper.directive.d.ts +2 -2
  518. package/tabs/tab-nav-bar.d.ts +3 -3
  519. package/tags/_tag-theme.scss +21 -15
  520. package/tags/tag-input.d.ts +2 -0
  521. package/tags/tag-list.component.d.ts +133 -45
  522. package/tags/tag-list.scss +11 -0
  523. package/tags/tag-tokens.scss +17 -1
  524. package/tags/tag.component.d.ts +79 -20
  525. package/tags/tag.scss +9 -0
  526. package/textarea/textarea.component.d.ts +2 -2
  527. package/time-range/constants.d.ts +8 -0
  528. package/time-range/index.d.ts +7 -0
  529. package/time-range/module.d.ts +10 -0
  530. package/time-range/time-range-editor.d.ts +67 -0
  531. package/time-range/time-range-title-as-form-field.d.ts +40 -0
  532. package/time-range/time-range-title.d.ts +18 -0
  533. package/time-range/time-range.d.ts +75 -0
  534. package/time-range/time-range.scss +66 -0
  535. package/time-range/time-range.service.d.ts +29 -0
  536. package/time-range/types.d.ts +43 -0
  537. package/timepicker/timepicker.directive.d.ts +2 -2
  538. package/toast/toast.component.d.ts +6 -4
  539. package/toast/toast.component.scss +11 -1
  540. package/toast/toast.service.d.ts +1 -0
  541. package/toast/toast.type.d.ts +1 -0
  542. package/tree/toggle.d.ts +1 -1
  543. package/tree/tree-base.d.ts +2 -2
  544. package/tree/tree-option.component.d.ts +1 -1
  545. package/tree/tree-selection.component.d.ts +1 -1
  546. package/tree-select/tree-select.component.d.ts +44 -3
@@ -6,12 +6,12 @@ import * as i4 from '@angular/cdk/scrolling';
6
6
  import { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';
7
7
  import { DOCUMENT } from '@angular/common';
8
8
  import * as i0 from '@angular/core';
9
- import { InjectionToken, SecurityContext, inject, ElementRef, Renderer2, numberAttribute, booleanAttribute, Directive, Input, EventEmitter, ChangeDetectorRef, DestroyRef, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, Output, NgModule } from '@angular/core';
9
+ import { InjectionToken, SecurityContext, inject, Renderer2, numberAttribute, booleanAttribute, Directive, Input, EventEmitter, ElementRef, ChangeDetectorRef, DestroyRef, Component, ChangeDetectionStrategy, ViewEncapsulation, ViewChild, Output, NgModule } from '@angular/core';
10
10
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
11
11
  import { DomSanitizer } from '@angular/platform-browser';
12
12
  import * as i2 from '@koobiq/components/button';
13
13
  import { KbqButtonStyles, KbqButtonModule } from '@koobiq/components/button';
14
- import { KBQ_WINDOW, ruRULocaleData, KbqComponentColors, KBQ_LOCALE_SERVICE } from '@koobiq/components/core';
14
+ import { kbqInjectNativeElement, KBQ_WINDOW, ruRULocaleData, KbqComponentColors, KBQ_LOCALE_SERVICE } from '@koobiq/components/core';
15
15
  import * as i6 from '@koobiq/components/icon';
16
16
  import { KbqIconModule } from '@koobiq/components/icon';
17
17
  import * as i1 from '@koobiq/components/tabs';
@@ -62,7 +62,7 @@ class KbqCodeBlockHighlight {
62
62
  this.renderer.setProperty(this.nativeElement, 'innerHTML', highlightedHTMLWithLineNumbers);
63
63
  }
64
64
  constructor() {
65
- this.nativeElement = inject(ElementRef).nativeElement;
65
+ this.nativeElement = kbqInjectNativeElement();
66
66
  this.document = inject(DOCUMENT);
67
67
  this.renderer = inject(Renderer2);
68
68
  this.domSanitizer = inject(DomSanitizer);
@@ -405,10 +405,10 @@ class KbqCodeBlockHighlight {
405
405
  return isFinite(number) ? number : fallback;
406
406
  }
407
407
  }
408
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqCodeBlockHighlight, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
409
- /** @nocollapse */ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "16.1.0", version: "18.2.13", type: KbqCodeBlockHighlight, isStandalone: true, selector: "code[kbqCodeBlockHighlight]", inputs: { file: "file", startFrom: ["startFrom", "startFrom", numberAttribute], singleLine: ["singleLine", "singleLine", booleanAttribute] }, host: { classAttribute: "hljs" }, ngImport: i0 }); }
408
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockHighlight, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
409
+ /** @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 }); }
410
410
  }
411
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqCodeBlockHighlight, decorators: [{
411
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockHighlight, decorators: [{
412
412
  type: Directive,
413
413
  args: [{
414
414
  standalone: true,
@@ -769,10 +769,10 @@ class KbqCodeBlock {
769
769
  link.setAttribute('download', file.filename || this.fallbackFileName);
770
770
  link.click();
771
771
  }
772
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
773
- /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: KbqCodeBlock, isStandalone: true, selector: "kbq-code-block", inputs: { lineNumbers: ["lineNumbers", "lineNumbers", booleanAttribute], filled: ["filled", "filled", booleanAttribute], canToggleSoftWrap: ["canToggleSoftWrap", "canToggleSoftWrap", booleanAttribute], softWrap: ["softWrap", "softWrap", booleanAttribute], viewAll: ["viewAll", "viewAll", booleanAttribute], maxHeight: ["maxHeight", "maxHeight", numberAttribute], canLoad: ["canLoad", "canLoad", booleanAttribute], canDownload: ["canDownload", "canDownload", booleanAttribute], canCopy: ["canCopy", "canCopy", booleanAttribute], codeFiles: "codeFiles", files: "files", activeFileIndex: ["activeFileIndex", "activeFileIndex", numberAttribute], noBorder: ["noBorder", "noBorder", booleanAttribute], hideTabs: ["hideTabs", "hideTabs", booleanAttribute] }, outputs: { softWrapChange: "softWrapChange", viewAllChange: "viewAllChange", activeFileIndexChange: "activeFileIndexChange" }, host: { properties: { "class.kbq-code-block_filled": "filled", "class.kbq-code-block_outline": "!filled", "class.kbq-code-block_hide-line-numbers": "!lineNumbers", "class.kbq-code-block_hide-tabs": "hideTabs", "class.kbq-code-block_no-border": "noBorder || filled", "class.kbq-code-block_soft-wrap": "softWrap", "class.kbq-code-block_view-all": "viewAll" }, classAttribute: "kbq-code-block" }, viewQueries: [{ propertyName: "copyButtonTooltip", first: true, predicate: ["copyButtonTooltip"], descendants: true }, { propertyName: "scrollableCodeContent", first: true, predicate: CdkScrollable, descendants: true }], exportAs: ["kbqCodeBlock"], ngImport: i0, template: "@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n @if (!hideTabs) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files; track file; let index = $index) {\n <div\n kbqTabLink\n [active]=\"activeFileIndex === index\"\n [disabled]=\"files.length === 1\"\n (click)=\"onSelectedTabChange(index)\"\n >\n {{ file.filename || fallbackFileName }}\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\n @if (hideTabs) {\n <div class=\"kbq-code-block__actionbar__fade-gradient\"></div>\n }\n\n <div class=\"kbq-code-block__actionbar__button-stack\">\n @if (canToggleSoftWrap) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__soft-wrap-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"\n softWrap ? localeConfiguration.softWrapOffTooltip : localeConfiguration.softWrapOnTooltip\n \"\n (click)=\"toggleSoftWrap()\"\n >\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n </button>\n }\n\n @if (canDownload) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.downloadTooltip\"\n (click)=\"downloadCode()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n @if (canCopy) {\n <div #copyButtonTooltip=\"kbqTooltip\" [kbqTooltip]=\"localeConfiguration.copyTooltip\">\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__copy-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"copyCode()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n </div>\n }\n\n @if (file.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.openExternalSystemTooltip\"\n (click)=\"openLink()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n </div>\n </div>\n</div>\n\n<div\n #tabPanel=\"kbqTabNavPanel\"\n cdkMonitorElementFocus\n cdkScrollable\n kbqTabNavPanel\n class=\"kbq-code-block__main kbq-scrollbar\"\n [style.max-height.px]=\"calculatedMaxHeight\"\n [tabIndex]=\"codeContentTabIndex\"\n>\n <pre\n class=\"kbq-code-block__pre\"\n ><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n\n @if (maxHeight) {\n <div\n class=\"kbq-code-block__view-all\"\n [class.kbq-code-block__view-all_collapsed]=\"!viewAll\"\n [class.kbq-code-block__view-all_expanded]=\"viewAll\"\n >\n <div class=\"kbq-code-block__view-all__wrapper\">\n <button\n kbq-button\n class=\"kbq-code-block__view-all__button\"\n [color]=\"componentColor.Theme\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"toggleViewAll()\"\n (keydown.enter)=\"onViewAllEnterKeydown($event)\"\n >\n @if (viewAll) {\n <i kbq-icon=\"kbq-chevron-up_16\"></i>\n {{ localeConfiguration.viewLessText }}\n } @else {\n <i kbq-icon=\"kbq-chevron-down_16\"></i>\n {{ localeConfiguration.viewAllText }}\n }\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [".kbq-code-block{display:flex;flex-direction:column;position:relative;border-width:var(--kbq-code-block-size-container-border-width);border-style:solid;border-radius:var(--kbq-code-block-size-container-border-radius);box-sizing:border-box;hyphens:none;-ms-hyphens:none;-moz-hyphens:none;-webkit-hyphens:none}.kbq-code-block .kbq-code-block__header{display:flex;align-items:center;padding:var(--kbq-size-s) var(--kbq-size-m)}.kbq-code-block .kbq-code-block__header .kbq-code-block__header-tabs{overflow:hidden;flex-grow:1}.kbq-code-block .kbq-code-block__actionbar{display:flex;justify-content:right;align-items:center;z-index:1}.kbq-code-block .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{display:flex;gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{align-self:stretch;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block:has(.kbq-code-block__view-all) .kbq-code-block__main .kbq-code-block__code{padding-bottom:var(--kbq-size-3xl)!important}.kbq-code-block .kbq-code-block__main{flex-grow:1;flex-direction:column;border-radius:var(--kbq-code-block-size-container-border-radius)}.kbq-code-block .kbq-code-block__main.cdk-keyboard-focused{outline-style:solid;outline-width:var(--kbq-code-block-size-container-border-width-focused);outline-offset:-1px}.kbq-code-block .kbq-code-block__main .kbq-code-block__pre{margin:0;flex-grow:1}.kbq-code-block .kbq-code-block__main .kbq-code-block__code{tab-size:var(--kbq-code-block-tab-size);padding:var(--kbq-code-block-size-with-header-content-padding-top) var(--kbq-code-block-size-with-header-content-padding-horizontal) var(--kbq-code-block-size-with-header-content-padding-bottom) var(--kbq-code-block-size-with-header-content-padding-horizontal)}.kbq-code-block .kbq-code-block__main .kbq-code-block__code:focus-visible{outline:none}.kbq-code-block .kbq-code-block__main .hljs{display:block}.kbq-code-block .kbq-code-block__main .hljs-ln-numbers{padding-right:var(--kbq-code-block-size-with-header-content-content-gap-horizontal);vertical-align:baseline;text-align:right}.kbq-code-block .kbq-code-block__main .hljs-ln{border-collapse:unset}.kbq-code-block .kbq-code-block__main .hljs-ln .hljs{padding:0}.kbq-code-block .kbq-code-block__main .hljs-ln-n:before{white-space:nowrap}.kbq-code-block.kbq-code-block_hide-line-numbers .hljs-ln-line.hljs-ln-numbers{display:none}.kbq-code-block.kbq-code-block_soft-wrap .kbq-code-block__code{white-space:pre-wrap}.kbq-code-block.kbq-code-block_view-all .kbq-code-block__main{max-height:unset;overflow:auto}.kbq-code-block:not(.kbq-code-block_view-all) .kbq-code-block__main{overflow:hidden}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__header{padding:0}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__actionbar{display:none;position:absolute;top:0;right:0;padding:var(--kbq-size-s) var(--kbq-size-m)}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__main{position:relative}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__main .kbq-code-block__code{padding:var(--kbq-code-block-size-no-header-content-padding-vertical) var(--kbq-code-block-size-no-header-content-padding-horizontal)}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__main .hljs-ln-numbers{padding-right:var(--kbq-code-block-size-no-header-content-content-gap-horizontal)}.kbq-code-block:not(.kbq-code-block_hide-tabs) .kbq-code-block__header{border-radius:var(--kbq-code-block-size-container-border-radius) var(--kbq-code-block-size-container-border-radius) 0 0}.kbq-code-block:not(.kbq-code-block_hide-tabs) .kbq-code-block__main{border-radius:0 0 var(--kbq-code-block-size-container-border-radius) var(--kbq-code-block-size-container-border-radius)}.kbq-code-block.kbq-code-block_show-actionbar .kbq-code-block__actionbar{display:flex}.kbq-code-block:not(:has(.kbq-code-block__view-all)) .kbq-code-block__main{overflow:auto}.kbq-code-block .kbq-code-block__view-all{display:flex;justify-content:center;width:100%;position:absolute;bottom:calc(var(--kbq-code-block-size-container-border-width) * -1);border-radius:var(--kbq-code-block-size-container-border-radius)}.kbq-code-block .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{border-radius:var(--kbq-size-border-radius)}.kbq-code-block .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{padding-top:var(--kbq-code-block-size-collapse-collapsed-padding-top);padding-bottom:var(--kbq-code-block-size-collapse-collapsed-padding-bottom)}.kbq-code-block .kbq-code-block__view-all.kbq-code-block__view-all_expanded{padding-top:var(--kbq-code-block-size-collapse-expanded-padding-top);margin-bottom:var(--kbq-code-block-size-collapse-expanded-padding-bottom)}.kbq-code-block.kbq-code-block_no-border{border-color:transparent!important}.kbq-code-block .hljs-addition{background-color:var(--kbq-code-block-hljs-addition-background);color:var(--kbq-code-block-hljs-addition-color)}.kbq-code-block .hljs-attr{background-color:var(--kbq-code-block-hljs-attr-background);color:var(--kbq-code-block-hljs-attr-color)}.kbq-code-block .hljs-attribute{background-color:var(--kbq-code-block-hljs-attribute-background);color:var(--kbq-code-block-hljs-attribute-color)}.kbq-code-block .hljs-built_in{background-color:var(--kbq-code-block-hljs-built-in-background);color:var(--kbq-code-block-hljs-built-in-color)}.kbq-code-block .hljs-bullet{background-color:var(--kbq-code-block-hljs-bullet-background);color:var(--kbq-code-block-hljs-bullet-color)}.kbq-code-block .hljs-char-escape{background-color:var(--kbq-code-block-hljs-char-escape-background);color:var(--kbq-code-block-hljs-char-escape-color)}.kbq-code-block .hljs-class{background-color:var(--kbq-code-block-hljs-class-background);color:var(--kbq-code-block-hljs-class-color)}.kbq-code-block .hljs-code{background-color:var(--kbq-code-block-hljs-code-background);color:var(--kbq-code-block-hljs-code-color)}.kbq-code-block .hljs-comment{background-color:var(--kbq-code-block-hljs-comment-background);color:var(--kbq-code-block-hljs-comment-color)}.kbq-code-block .hljs-deletion{background-color:var(--kbq-code-block-hljs-deletion-background);color:var(--kbq-code-block-hljs-deletion-color)}.kbq-code-block .hljs-doctag{background-color:var(--kbq-code-block-hljs-doctag-background);color:var(--kbq-code-block-hljs-doctag-color)}.kbq-code-block .hljs-emphasis{background-color:var(--kbq-code-block-hljs-emphasis-background);color:var(--kbq-code-block-hljs-emphasis-color)}.kbq-code-block .hljs-formula{background-color:var(--kbq-code-block-hljs-formula-background);color:var(--kbq-code-block-hljs-formula-color)}.kbq-code-block .hljs-function{background-color:var(--kbq-code-block-hljs-function-background);color:var(--kbq-code-block-hljs-function-color)}.kbq-code-block .hljs-keyword{background-color:var(--kbq-code-block-hljs-keyword-background);color:var(--kbq-code-block-hljs-keyword-color)}.kbq-code-block .hljs-link{background-color:var(--kbq-code-block-hljs-link-background);color:var(--kbq-code-block-hljs-link-color)}.kbq-code-block .hljs-literal{background-color:var(--kbq-code-block-hljs-literal-background);color:var(--kbq-code-block-hljs-literal-color)}.kbq-code-block .hljs-meta{background-color:var(--kbq-code-block-hljs-meta-background);color:var(--kbq-code-block-hljs-meta-color)}.kbq-code-block .hljs-meta-keyword{background-color:var(--kbq-code-block-hljs-meta-keyword-background);color:var(--kbq-code-block-hljs-meta-keyword-color)}.kbq-code-block .hljs-meta-string{background-color:var(--kbq-code-block-hljs-meta-string-background);color:var(--kbq-code-block-hljs-meta-string-color)}.kbq-code-block .hljs-meta-prompt{background-color:var(--kbq-code-block-hljs-meta-prompt-background);color:var(--kbq-code-block-hljs-meta-prompt-color)}.kbq-code-block .hljs-name{background-color:var(--kbq-code-block-hljs-name-background);color:var(--kbq-code-block-hljs-name-color)}.kbq-code-block .hljs-number{background-color:var(--kbq-code-block-hljs-number-background);color:var(--kbq-code-block-hljs-number-color)}.kbq-code-block .hljs-operator{background-color:var(--kbq-code-block-hljs-operator-background);color:var(--kbq-code-block-hljs-operator-color)}.kbq-code-block .hljs-params{background-color:var(--kbq-code-block-hljs-params-background);color:var(--kbq-code-block-hljs-params-color)}.kbq-code-block .hljs-property{background-color:var(--kbq-code-block-hljs-property-background);color:var(--kbq-code-block-hljs-property-color)}.kbq-code-block .hljs-punctuation{background-color:var(--kbq-code-block-hljs-punctuation-background);color:var(--kbq-code-block-hljs-punctuation-color)}.kbq-code-block .hljs-quote{background-color:var(--kbq-code-block-hljs-quote-background);color:var(--kbq-code-block-hljs-quote-color)}.kbq-code-block .hljs-regexp{background-color:var(--kbq-code-block-hljs-regexp-background);color:var(--kbq-code-block-hljs-regexp-color)}.kbq-code-block .hljs-section{background-color:var(--kbq-code-block-hljs-section-background);color:var(--kbq-code-block-hljs-section-color)}.kbq-code-block .hljs-selector-attr{background-color:var(--kbq-code-block-hljs-selector-attr-background);color:var(--kbq-code-block-hljs-selector-attr-color)}.kbq-code-block .hljs-selector-class{background-color:var(--kbq-code-block-hljs-selector-class-background);color:var(--kbq-code-block-hljs-selector-class-color)}.kbq-code-block .hljs-selector-id{background-color:var(--kbq-code-block-hljs-selector-id-background);color:var(--kbq-code-block-hljs-selector-id-color)}.kbq-code-block .hljs-selector-pseudo{background-color:var(--kbq-code-block-hljs-selector-pseudo-background);color:var(--kbq-code-block-hljs-selector-pseudo-color)}.kbq-code-block .hljs-selector-tag{background-color:var(--kbq-code-block-hljs-selector-tag-background);color:var(--kbq-code-block-hljs-selector-tag-color)}.kbq-code-block .hljs-string{background-color:var(--kbq-code-block-hljs-string-background);color:var(--kbq-code-block-hljs-string-color)}.kbq-code-block .hljs-strong{background-color:var(--kbq-code-block-hljs-strong-background);color:var(--kbq-code-block-hljs-strong-color)}.kbq-code-block .hljs-subst{background-color:var(--kbq-code-block-hljs-subst-background);color:var(--kbq-code-block-hljs-subst-color)}.kbq-code-block .hljs-symbol{background-color:var(--kbq-code-block-hljs-symbol-background);color:var(--kbq-code-block-hljs-symbol-color)}.kbq-code-block .hljs-tag{background-color:var(--kbq-code-block-hljs-tag-background);color:var(--kbq-code-block-hljs-tag-color)}.kbq-code-block .hljs-template-tag{background-color:var(--kbq-code-block-hljs-template-tag-background);color:var(--kbq-code-block-hljs-template-tag-color)}.kbq-code-block .hljs-template-variable{background-color:var(--kbq-code-block-hljs-template-variable-background);color:var(--kbq-code-block-hljs-template-variable-color)}.kbq-code-block .hljs-title{background-color:var(--kbq-code-block-hljs-title-background);color:var(--kbq-code-block-hljs-title-color)}.kbq-code-block .hljs-title-class{background-color:var(--kbq-code-block-hljs-title-class-background);color:var(--kbq-code-block-hljs-title-class-color)}.kbq-code-block .hljs-title-class-inherited{background-color:var(--kbq-code-block-hljs-title-class-inherited-background);color:var(--kbq-code-block-hljs-title-class-inherited-color)}.kbq-code-block .hljs-title-function{background-color:var(--kbq-code-block-hljs-title-function-background);color:var(--kbq-code-block-hljs-title-function-color)}.kbq-code-block .hljs-title-function-invoke{background-color:var(--kbq-code-block-hljs-title-function-invoke-background);color:var(--kbq-code-block-hljs-title-function-invoke-color)}.kbq-code-block .hljs-type{background-color:var(--kbq-code-block-hljs-type-background);color:var(--kbq-code-block-hljs-type-color)}.kbq-code-block .hljs-variable{background-color:var(--kbq-code-block-hljs-variable-background);color:var(--kbq-code-block-hljs-variable-color)}.kbq-code-block .hljs-variable-constant{background-color:var(--kbq-code-block-hljs-variable-constant-background);color:var(--kbq-code-block-hljs-variable-constant-color)}.kbq-code-block .hljs-variable-language{background-color:var(--kbq-code-block-hljs-variable-language-background);color:var(--kbq-code-block-hljs-variable-language-color)}.kbq-code-block .hljs-ln-n{color:var(--kbq-code-block-hljs-line-numbers-color)}.kbq-code-block.kbq-code-block_outline{background:var(--kbq-code-block-outline-container-background);border-color:var(--kbq-code-block-outline-container-border-color)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__header{background:var(--kbq-code-block-outline-header-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__actionbar{background:var(--kbq-code-block-outline-actionbar-background)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_header-with-shadow .kbq-code-block__header{box-shadow:var(--kbq-code-block-outline-header-scroll-shadow)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar{background:transparent}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{background:var(--kbq-code-block-outline-actionbar-fade-gradient)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{background:var(--kbq-code-block-outline-actionbar-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{background:var(--kbq-code-block-outline-collapse-button-expand-background);opacity:90%}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all.kbq-code-block__view-all_expanded{background:var(--kbq-code-block-outline-collapse-expanded-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{background:var(--kbq-code-block-outline-collapse-collapsed-background)}.kbq-code-block.kbq-code-block_filled{background:var(--kbq-code-block-filled-container-background);border-color:var(--kbq-code-block-filled-container-border-color)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__header{background:var(--kbq-code-block-filled-header-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__actionbar{background:var(--kbq-code-block-filled-actionbar-background)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_header-with-shadow .kbq-code-block__header{box-shadow:var(--kbq-code-block-filled-header-scroll-shadow)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar{background:transparent}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{background:var(--kbq-code-block-filled-actionbar-fade-gradient)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{background:var(--kbq-code-block-filled-actionbar-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{background:var(--kbq-code-block-filled-collapse-button-expand-background);opacity:90%}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all.kbq-code-block__view-all_expanded{background:var(--kbq-code-block-filled-collapse-expanded-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{background:var(--kbq-code-block-filled-collapse-collapsed-background)}.kbq-code-block .kbq-code-block__main.cdk-keyboard-focused{outline-color:var(--kbq-states-line-focus-theme)}.kbq-code-block{font-size:var(--kbq-typography-mono-codeblock-font-size);font-style:var(--kbq-typography-mono-codeblock-font-style);font-weight:var(--kbq-typography-mono-codeblock-font-weight);line-height:var(--kbq-typography-mono-codeblock-line-height);font-family:var(--kbq-typography-mono-codeblock-font-family);text-transform:var(--kbq-typography-mono-codeblock-text-transform);font-feature-settings:var(--kbq-typography-mono-codeblock-font-feature-settings);letter-spacing:var(--kbq-typography-mono-codeblock-letter-spacing)}.kbq-code-block .kbq-code-block__pre,.kbq-code-block .kbq-code-block__code{font:inherit}\n", ".kbq-code-block{--kbq-code-block-size-container-border-width: var(--kbq-size-border-width);--kbq-code-block-size-container-border-width-focused: 2px;--kbq-code-block-size-container-border-radius: var(--kbq-size-border-radius);--kbq-code-block-size-with-header-content-padding-top: var(--kbq-size-xxs);--kbq-code-block-size-with-header-content-padding-bottom: var(--kbq-size-l);--kbq-code-block-size-with-header-content-padding-horizontal: var(--kbq-size-xl);--kbq-code-block-size-with-header-content-content-gap-horizontal: var(--kbq-size-m);--kbq-code-block-size-no-header-content-padding-vertical: 14px;--kbq-code-block-size-no-header-content-padding-horizontal: var(--kbq-size-xl);--kbq-code-block-size-no-header-content-content-gap-horizontal: var(--kbq-size-m);--kbq-code-block-size-header-content-gap-horizontal: var(--kbq-size-l);--kbq-code-block-size-actionbar-content-gap-horizontal: var(--kbq-size-3xs);--kbq-code-block-size-actionbar-fade-gradient-width: var(--kbq-size-3xl);--kbq-code-block-size-collapse-expanded-padding-top: 0;--kbq-code-block-size-collapse-expanded-padding-bottom: var(--kbq-size-l);--kbq-code-block-size-collapse-collapsed-padding-top: var(--kbq-size-3xl);--kbq-code-block-size-collapse-collapsed-padding-bottom: var(--kbq-size-l);--kbq-code-block-font-hljs-addition-font-style: null;--kbq-code-block-font-hljs-addition-font-weight: null;--kbq-code-block-font-hljs-attr-font-style: null;--kbq-code-block-font-hljs-attr-font-weight: null;--kbq-code-block-font-hljs-attribute-font-style: null;--kbq-code-block-font-hljs-attribute-font-weight: null;--kbq-code-block-font-hljs-built-in-font-style: null;--kbq-code-block-font-hljs-built-in-font-weight: null;--kbq-code-block-font-hljs-bullet-font-style: null;--kbq-code-block-font-hljs-bullet-font-weight: null;--kbq-code-block-font-hljs-char-escape-font-style: null;--kbq-code-block-font-hljs-char-escape-font-weight: null;--kbq-code-block-font-hljs-class-font-style: null;--kbq-code-block-font-hljs-class-font-weight: null;--kbq-code-block-font-hljs-code-font-style: null;--kbq-code-block-font-hljs-code-font-weight: null;--kbq-code-block-font-hljs-comment-font-style: null;--kbq-code-block-font-hljs-comment-font-weight: null;--kbq-code-block-font-hljs-deletion-font-style: null;--kbq-code-block-font-hljs-deletion-font-weight: null;--kbq-code-block-font-hljs-doctag-font-style: null;--kbq-code-block-font-hljs-doctag-font-weight: null;--kbq-code-block-font-hljs-emphasis-font-style: null;--kbq-code-block-font-hljs-emphasis-font-weight: null;--kbq-code-block-font-hljs-formula-font-style: null;--kbq-code-block-font-hljs-formula-font-weight: null;--kbq-code-block-font-hljs-function-font-style: null;--kbq-code-block-font-hljs-function-font-weight: null;--kbq-code-block-font-hljs-keyword-font-style: null;--kbq-code-block-font-hljs-keyword-font-weight: null;--kbq-code-block-font-hljs-link-font-style: null;--kbq-code-block-font-hljs-link-font-weight: null;--kbq-code-block-font-hljs-literal-font-style: null;--kbq-code-block-font-hljs-literal-font-weight: null;--kbq-code-block-font-hljs-meta-font-style: null;--kbq-code-block-font-hljs-meta-font-weight: null;--kbq-code-block-font-hljs-meta-keyword-font-style: null;--kbq-code-block-font-hljs-meta-keyword-font-weight: null;--kbq-code-block-font-hljs-meta-string-font-style: null;--kbq-code-block-font-hljs-meta-string-font-weight: null;--kbq-code-block-font-hljs-meta-prompt-font-style: null;--kbq-code-block-font-hljs-meta-prompt-font-weight: null;--kbq-code-block-font-hljs-name-font-style: null;--kbq-code-block-font-hljs-name-font-weight: null;--kbq-code-block-font-hljs-number-font-style: null;--kbq-code-block-font-hljs-number-font-weight: null;--kbq-code-block-font-hljs-operator-font-style: null;--kbq-code-block-font-hljs-operator-font-weight: null;--kbq-code-block-font-hljs-params-font-style: null;--kbq-code-block-font-hljs-params-font-weight: null;--kbq-code-block-font-hljs-property-font-style: null;--kbq-code-block-font-hljs-property-font-weight: null;--kbq-code-block-font-hljs-punctuation-font-style: null;--kbq-code-block-font-hljs-punctuation-font-weight: null;--kbq-code-block-font-hljs-quote-font-style: null;--kbq-code-block-font-hljs-quote-font-weight: null;--kbq-code-block-font-hljs-regexp-font-style: null;--kbq-code-block-font-hljs-regexp-font-weight: null;--kbq-code-block-font-hljs-section-font-style: null;--kbq-code-block-font-hljs-section-font-weight: null;--kbq-code-block-font-hljs-selector-attr-font-style: null;--kbq-code-block-font-hljs-selector-attr-font-weight: null;--kbq-code-block-font-hljs-selector-class-font-style: null;--kbq-code-block-font-hljs-selector-class-font-weight: null;--kbq-code-block-font-hljs-selector-id-font-style: null;--kbq-code-block-font-hljs-selector-id-font-weight: null;--kbq-code-block-font-hljs-selector-pseudo-font-style: null;--kbq-code-block-font-hljs-selector-pseudo-font-weight: null;--kbq-code-block-font-hljs-selector-tag-font-style: null;--kbq-code-block-font-hljs-selector-tag-font-weight: null;--kbq-code-block-font-hljs-string-font-style: null;--kbq-code-block-font-hljs-string-font-weight: null;--kbq-code-block-font-hljs-strong-font-style: null;--kbq-code-block-font-hljs-strong-font-weight: null;--kbq-code-block-font-hljs-subst-font-style: null;--kbq-code-block-font-hljs-subst-font-weight: null;--kbq-code-block-font-hljs-symbol-font-style: null;--kbq-code-block-font-hljs-symbol-font-weight: null;--kbq-code-block-font-hljs-tag-font-style: null;--kbq-code-block-font-hljs-tag-font-weight: null;--kbq-code-block-font-hljs-template-tag-font-style: null;--kbq-code-block-font-hljs-template-tag-font-weight: null;--kbq-code-block-font-hljs-template-variable-font-style: null;--kbq-code-block-font-hljs-template-variable-font-weight: null;--kbq-code-block-font-hljs-title-font-style: null;--kbq-code-block-font-hljs-title-font-weight: null;--kbq-code-block-font-hljs-title-class-font-style: normal;--kbq-code-block-font-hljs-title-class-font-weight: 500;--kbq-code-block-font-hljs-title-class-inherited-font-style: null;--kbq-code-block-font-hljs-title-class-inherited-font-weight: null;--kbq-code-block-font-hljs-title-function-font-style: null;--kbq-code-block-font-hljs-title-function-font-weight: null;--kbq-code-block-font-hljs-title-function-invoke-font-style: null;--kbq-code-block-font-hljs-title-function-invoke-font-weight: null;--kbq-code-block-font-hljs-type-font-style: null;--kbq-code-block-font-hljs-type-font-weight: null;--kbq-code-block-font-hljs-variable-font-style: null;--kbq-code-block-font-hljs-variable-font-weight: null;--kbq-code-block-font-hljs-variable-constant-font-style: null;--kbq-code-block-font-hljs-variable-constant-font-weight: null;--kbq-code-block-font-hljs-variable-language-font-style: null;--kbq-code-block-font-hljs-variable-language-font-weight: null;--kbq-code-block-filled-container-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-container-border-color: transparent;--kbq-code-block-filled-header-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-header-scroll-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-code-block-filled-actionbar-fade-gradient: linear-gradient( 90deg, transparent, var(--kbq-background-bg-secondary) );--kbq-code-block-filled-actionbar-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-collapse-expanded-background: transparent;--kbq-code-block-filled-collapse-collapsed-background: linear-gradient( 180deg, transparent, var(--kbq-background-bg-secondary) 100% );--kbq-code-block-filled-collapse-button-expand-background: var(--kbq-background-bg-secondary);--kbq-code-block-outline-container-background: var(--kbq-background-card);--kbq-code-block-outline-container-border-color: var(--kbq-divider-color, var(--kbq-line-contrast-less));--kbq-code-block-outline-header-background: var(--kbq-background-card);--kbq-code-block-outline-header-scroll-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-code-block-outline-actionbar-fade-gradient: linear-gradient(90deg, transparent, var(--kbq-background-card));--kbq-code-block-outline-actionbar-background: var(--kbq-background-card);--kbq-code-block-outline-collapse-expanded-background: transparent;--kbq-code-block-outline-collapse-collapsed-background: linear-gradient( 180deg, transparent, var(--kbq-background-bg) 100% );--kbq-code-block-outline-collapse-button-expand-background: var(--kbq-background-card);--kbq-code-block-hljs-addition-background: var(--kbq-palette-green-95);--kbq-code-block-hljs-addition-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-attr-background: null;--kbq-code-block-hljs-attr-color: null;--kbq-code-block-hljs-attribute-background: null;--kbq-code-block-hljs-attribute-color: null;--kbq-code-block-hljs-built-in-background: null;--kbq-code-block-hljs-built-in-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-bullet-background: null;--kbq-code-block-hljs-bullet-color: null;--kbq-code-block-hljs-char-escape-background: null;--kbq-code-block-hljs-char-escape-color: null;--kbq-code-block-hljs-class-background: null;--kbq-code-block-hljs-class-color: null;--kbq-code-block-hljs-code-background: null;--kbq-code-block-hljs-code-color: null;--kbq-code-block-hljs-comment-background: null;--kbq-code-block-hljs-comment-color: var(--kbq-palette-grey-60);--kbq-code-block-hljs-deletion-background: var(--kbq-palette-red-95);--kbq-code-block-hljs-deletion-color: var(--kbq-palette-red-35);--kbq-code-block-hljs-doctag-background: null;--kbq-code-block-hljs-doctag-color: null;--kbq-code-block-hljs-emphasis-background: null;--kbq-code-block-hljs-emphasis-color: null;--kbq-code-block-hljs-formula-background: null;--kbq-code-block-hljs-formula-color: null;--kbq-code-block-hljs-function-background: null;--kbq-code-block-hljs-function-color: null;--kbq-code-block-hljs-keyword-background: null;--kbq-code-block-hljs-keyword-color: null;--kbq-code-block-hljs-line-numbers-color: var(--kbq-foreground-contrast-secondary);--kbq-code-block-hljs-link-background: null;--kbq-code-block-hljs-link-color: null;--kbq-code-block-hljs-literal-background: null;--kbq-code-block-hljs-literal-color: var(--kbq-palette-purple-30);--kbq-code-block-hljs-meta-background: null;--kbq-code-block-hljs-meta-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-meta-keyword-background: null;--kbq-code-block-hljs-meta-keyword-color: null;--kbq-code-block-hljs-meta-string-background: null;--kbq-code-block-hljs-meta-string-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-meta-prompt-background: null;--kbq-code-block-hljs-meta-prompt-color: null;--kbq-code-block-hljs-name-background: null;--kbq-code-block-hljs-name-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-number-background: null;--kbq-code-block-hljs-number-color: var(--kbq-palette-purple-30);--kbq-code-block-hljs-operator-background: null;--kbq-code-block-hljs-operator-color: null;--kbq-code-block-hljs-params-background: null;--kbq-code-block-hljs-params-color: null;--kbq-code-block-hljs-property-background: null;--kbq-code-block-hljs-property-color: null;--kbq-code-block-hljs-punctuation-background: null;--kbq-code-block-hljs-punctuation-color: null;--kbq-code-block-hljs-quote-background: null;--kbq-code-block-hljs-quote-color: null;--kbq-code-block-hljs-regexp-background: null;--kbq-code-block-hljs-regexp-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-section-background: null;--kbq-code-block-hljs-section-color: null;--kbq-code-block-hljs-selector-attr-background: null;--kbq-code-block-hljs-selector-attr-color: null;--kbq-code-block-hljs-selector-class-background: null;--kbq-code-block-hljs-selector-class-color: null;--kbq-code-block-hljs-selector-id-background: null;--kbq-code-block-hljs-selector-id-color: null;--kbq-code-block-hljs-selector-pseudo-background: null;--kbq-code-block-hljs-selector-pseudo-color: null;--kbq-code-block-hljs-selector-tag-background: null;--kbq-code-block-hljs-selector-tag-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-string-background: null;--kbq-code-block-hljs-string-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-strong-background: null;--kbq-code-block-hljs-strong-color: null;--kbq-code-block-hljs-subst-background: null;--kbq-code-block-hljs-subst-color: null;--kbq-code-block-hljs-symbol-background: null;--kbq-code-block-hljs-symbol-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-tag-background: null;--kbq-code-block-hljs-tag-color: null;--kbq-code-block-hljs-template-tag-background: null;--kbq-code-block-hljs-template-tag-color: null;--kbq-code-block-hljs-template-variable-background: null;--kbq-code-block-hljs-template-variable-color: null;--kbq-code-block-hljs-title-background: null;--kbq-code-block-hljs-title-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-title-class-background: null;--kbq-code-block-hljs-title-class-color: null;--kbq-code-block-hljs-title-class-inherited-background: null;--kbq-code-block-hljs-title-class-inherited-color: null;--kbq-code-block-hljs-title-function-background: null;--kbq-code-block-hljs-title-function-color: null;--kbq-code-block-hljs-title-function-invoke-background: null;--kbq-code-block-hljs-title-function-invoke-color: null;--kbq-code-block-hljs-type-background: null;--kbq-code-block-hljs-type-color: null;--kbq-code-block-hljs-variable-background: null;--kbq-code-block-hljs-variable-color: null;--kbq-code-block-hljs-variable-constant-background: null;--kbq-code-block-hljs-variable-constant-color: null;--kbq-code-block-hljs-variable-language-background: null;--kbq-code-block-hljs-variable-language-color: null;--kbq-code-block-tab-size: 4}\n"], dependencies: [{ kind: "ngmodule", type: KbqTabsModule }, { kind: "component", type: i1.KbqTabNavBar, selector: "[kbqTabNavBar], [kbq-tab-nav-bar]", inputs: ["transparent", "onSurface", "underlined", "tabNavPanel"], exportAs: ["kbqTabNavBar"] }, { kind: "directive", type: i1.KbqTabLink, selector: "[kbqTabLink], [kbq-tab-link]", inputs: ["id", "active", "disabled", "tabIndex"], exportAs: ["kbqTabLink"] }, { kind: "directive", type: i1.KbqTabNavPanel, selector: "[kbqTabNavPanel]", inputs: ["id"], exportAs: ["kbqTabNavPanel"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "directive", type: KbqCodeBlockHighlight, selector: "code[kbqCodeBlockHighlight]", inputs: ["file", "startFrom", "singleLine"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "ngmodule", type: CdkScrollableModule }, { kind: "directive", type: i4.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "ngmodule", type: KbqToolTipModule }, { kind: "directive", type: i5.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["hideWithTimeout", "kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i6.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
772
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlock, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
773
+ /** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: KbqCodeBlock, isStandalone: true, selector: "kbq-code-block", inputs: { lineNumbers: ["lineNumbers", "lineNumbers", booleanAttribute], filled: ["filled", "filled", booleanAttribute], canToggleSoftWrap: ["canToggleSoftWrap", "canToggleSoftWrap", booleanAttribute], softWrap: ["softWrap", "softWrap", booleanAttribute], viewAll: ["viewAll", "viewAll", booleanAttribute], maxHeight: ["maxHeight", "maxHeight", numberAttribute], canLoad: ["canLoad", "canLoad", booleanAttribute], canDownload: ["canDownload", "canDownload", booleanAttribute], canCopy: ["canCopy", "canCopy", booleanAttribute], codeFiles: "codeFiles", files: "files", activeFileIndex: ["activeFileIndex", "activeFileIndex", numberAttribute], noBorder: ["noBorder", "noBorder", booleanAttribute], hideTabs: ["hideTabs", "hideTabs", booleanAttribute] }, outputs: { softWrapChange: "softWrapChange", viewAllChange: "viewAllChange", activeFileIndexChange: "activeFileIndexChange" }, host: { properties: { "class.kbq-code-block_filled": "filled", "class.kbq-code-block_outline": "!filled", "class.kbq-code-block_hide-line-numbers": "!lineNumbers", "class.kbq-code-block_hide-tabs": "hideTabs", "class.kbq-code-block_no-border": "noBorder || filled", "class.kbq-code-block_soft-wrap": "softWrap", "class.kbq-code-block_view-all": "viewAll" }, classAttribute: "kbq-code-block" }, viewQueries: [{ propertyName: "copyButtonTooltip", first: true, predicate: ["copyButtonTooltip"], descendants: true }, { propertyName: "scrollableCodeContent", first: true, predicate: CdkScrollable, descendants: true }], exportAs: ["kbqCodeBlock"], ngImport: i0, template: "@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n @if (!hideTabs) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files; track file; let index = $index) {\n <div\n kbqTabLink\n [active]=\"activeFileIndex === index\"\n [disabled]=\"files.length === 1\"\n (click)=\"onSelectedTabChange(index)\"\n >\n {{ file.filename || fallbackFileName }}\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\n @if (hideTabs) {\n <div class=\"kbq-code-block__actionbar__fade-gradient\"></div>\n }\n\n <div class=\"kbq-code-block__actionbar__button-stack\">\n @if (canToggleSoftWrap) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__soft-wrap-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"\n softWrap ? localeConfiguration.softWrapOffTooltip : localeConfiguration.softWrapOnTooltip\n \"\n (click)=\"toggleSoftWrap()\"\n >\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n </button>\n }\n\n @if (canDownload) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.downloadTooltip\"\n (click)=\"downloadCode()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n @if (canCopy) {\n <div #copyButtonTooltip=\"kbqTooltip\" [kbqTooltip]=\"localeConfiguration.copyTooltip\">\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__copy-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"copyCode()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n </div>\n }\n\n @if (file.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.openExternalSystemTooltip\"\n (click)=\"openLink()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n </div>\n </div>\n</div>\n\n<div\n #tabPanel=\"kbqTabNavPanel\"\n cdkMonitorElementFocus\n cdkScrollable\n kbqTabNavPanel\n class=\"kbq-code-block__main kbq-scrollbar\"\n [style.max-height.px]=\"calculatedMaxHeight\"\n [tabIndex]=\"codeContentTabIndex\"\n>\n <pre\n class=\"kbq-code-block__pre\"\n ><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n\n @if (maxHeight) {\n <div\n class=\"kbq-code-block__view-all\"\n [class.kbq-code-block__view-all_collapsed]=\"!viewAll\"\n [class.kbq-code-block__view-all_expanded]=\"viewAll\"\n >\n <div class=\"kbq-code-block__view-all__wrapper\">\n <button\n kbq-button\n class=\"kbq-code-block__view-all__button\"\n [color]=\"componentColor.Theme\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"toggleViewAll()\"\n (keydown.enter)=\"onViewAllEnterKeydown($event)\"\n >\n @if (viewAll) {\n <i kbq-icon=\"kbq-chevron-up_16\"></i>\n {{ localeConfiguration.viewLessText }}\n } @else {\n <i kbq-icon=\"kbq-chevron-down_16\"></i>\n {{ localeConfiguration.viewAllText }}\n }\n </button>\n </div>\n </div>\n }\n</div>\n", styles: [".kbq-code-block{display:flex;flex-direction:column;position:relative;border-width:var(--kbq-code-block-size-container-border-width);border-style:solid;border-radius:var(--kbq-code-block-size-container-border-radius);box-sizing:border-box;hyphens:none;-ms-hyphens:none;-moz-hyphens:none;-webkit-hyphens:none}.kbq-code-block .kbq-code-block__header{display:flex;align-items:center;padding:var(--kbq-size-s) var(--kbq-size-m)}.kbq-code-block .kbq-code-block__header .kbq-code-block__header-tabs{overflow:hidden;flex-grow:1}.kbq-code-block .kbq-code-block__actionbar{display:flex;justify-content:right;align-items:center;z-index:1}.kbq-code-block .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{display:flex;gap:var(--kbq-code-block-size-actionbar-content-gap-horizontal)}.kbq-code-block .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{align-self:stretch;width:var(--kbq-code-block-size-actionbar-fade-gradient-width)}.kbq-code-block:has(.kbq-code-block__view-all) .kbq-code-block__main .kbq-code-block__code{padding-bottom:var(--kbq-size-3xl)!important}.kbq-code-block .kbq-code-block__main{flex-grow:1;flex-direction:column;border-radius:var(--kbq-code-block-size-container-border-radius)}.kbq-code-block .kbq-code-block__main.cdk-keyboard-focused{outline-style:solid;outline-width:var(--kbq-code-block-size-container-border-width-focused);outline-offset:-1px}.kbq-code-block .kbq-code-block__main .kbq-code-block__pre{margin:0;flex-grow:1}.kbq-code-block .kbq-code-block__main .kbq-code-block__code{tab-size:var(--kbq-code-block-tab-size);padding:var(--kbq-code-block-size-with-header-content-padding-top) var(--kbq-code-block-size-with-header-content-padding-horizontal) var(--kbq-code-block-size-with-header-content-padding-bottom) var(--kbq-code-block-size-with-header-content-padding-horizontal)}.kbq-code-block .kbq-code-block__main .kbq-code-block__code:focus-visible{outline:none}.kbq-code-block .kbq-code-block__main .hljs{display:block}.kbq-code-block .kbq-code-block__main .hljs-ln-numbers{padding-right:var(--kbq-code-block-size-with-header-content-content-gap-horizontal);vertical-align:baseline;text-align:right}.kbq-code-block .kbq-code-block__main .hljs-ln{border-collapse:unset}.kbq-code-block .kbq-code-block__main .hljs-ln .hljs{padding:0}.kbq-code-block .kbq-code-block__main .hljs-ln-n:before{white-space:nowrap}.kbq-code-block.kbq-code-block_hide-line-numbers .hljs-ln-line.hljs-ln-numbers{display:none}.kbq-code-block.kbq-code-block_soft-wrap .kbq-code-block__code{white-space:pre-wrap}.kbq-code-block.kbq-code-block_view-all .kbq-code-block__main{max-height:unset;overflow:auto}.kbq-code-block:not(.kbq-code-block_view-all) .kbq-code-block__main{overflow:hidden}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__header{padding:0}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__actionbar{display:none;position:absolute;top:0;right:0;padding:var(--kbq-size-s) var(--kbq-size-m)}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__main{position:relative}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__main .kbq-code-block__code{padding:var(--kbq-code-block-size-no-header-content-padding-vertical) var(--kbq-code-block-size-no-header-content-padding-horizontal)}.kbq-code-block.kbq-code-block_hide-tabs .kbq-code-block__main .hljs-ln-numbers{padding-right:var(--kbq-code-block-size-no-header-content-content-gap-horizontal)}.kbq-code-block:not(.kbq-code-block_hide-tabs) .kbq-code-block__header{border-radius:var(--kbq-code-block-size-container-border-radius) var(--kbq-code-block-size-container-border-radius) 0 0}.kbq-code-block:not(.kbq-code-block_hide-tabs) .kbq-code-block__main{border-radius:0 0 var(--kbq-code-block-size-container-border-radius) var(--kbq-code-block-size-container-border-radius)}.kbq-code-block.kbq-code-block_show-actionbar .kbq-code-block__actionbar{display:flex}.kbq-code-block:not(:has(.kbq-code-block__view-all)) .kbq-code-block__main{overflow:auto}.kbq-code-block .kbq-code-block__view-all{display:flex;justify-content:center;width:100%;position:absolute;bottom:calc(var(--kbq-code-block-size-container-border-width) * -1);border-radius:var(--kbq-code-block-size-container-border-radius)}.kbq-code-block .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{border-radius:var(--kbq-size-border-radius)}.kbq-code-block .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{padding-top:var(--kbq-code-block-size-collapse-collapsed-padding-top);padding-bottom:var(--kbq-code-block-size-collapse-collapsed-padding-bottom)}.kbq-code-block .kbq-code-block__view-all.kbq-code-block__view-all_expanded{padding-top:var(--kbq-code-block-size-collapse-expanded-padding-top);margin-bottom:var(--kbq-code-block-size-collapse-expanded-padding-bottom)}.kbq-code-block.kbq-code-block_no-border{border-color:transparent!important}.kbq-code-block .hljs-addition{background-color:var(--kbq-code-block-hljs-addition-background);color:var(--kbq-code-block-hljs-addition-color)}.kbq-code-block .hljs-attr{background-color:var(--kbq-code-block-hljs-attr-background);color:var(--kbq-code-block-hljs-attr-color)}.kbq-code-block .hljs-attribute{background-color:var(--kbq-code-block-hljs-attribute-background);color:var(--kbq-code-block-hljs-attribute-color)}.kbq-code-block .hljs-built_in{background-color:var(--kbq-code-block-hljs-built-in-background);color:var(--kbq-code-block-hljs-built-in-color)}.kbq-code-block .hljs-bullet{background-color:var(--kbq-code-block-hljs-bullet-background);color:var(--kbq-code-block-hljs-bullet-color)}.kbq-code-block .hljs-char-escape{background-color:var(--kbq-code-block-hljs-char-escape-background);color:var(--kbq-code-block-hljs-char-escape-color)}.kbq-code-block .hljs-class{background-color:var(--kbq-code-block-hljs-class-background);color:var(--kbq-code-block-hljs-class-color)}.kbq-code-block .hljs-code{background-color:var(--kbq-code-block-hljs-code-background);color:var(--kbq-code-block-hljs-code-color)}.kbq-code-block .hljs-comment{background-color:var(--kbq-code-block-hljs-comment-background);color:var(--kbq-code-block-hljs-comment-color)}.kbq-code-block .hljs-deletion{background-color:var(--kbq-code-block-hljs-deletion-background);color:var(--kbq-code-block-hljs-deletion-color)}.kbq-code-block .hljs-doctag{background-color:var(--kbq-code-block-hljs-doctag-background);color:var(--kbq-code-block-hljs-doctag-color)}.kbq-code-block .hljs-emphasis{background-color:var(--kbq-code-block-hljs-emphasis-background);color:var(--kbq-code-block-hljs-emphasis-color)}.kbq-code-block .hljs-formula{background-color:var(--kbq-code-block-hljs-formula-background);color:var(--kbq-code-block-hljs-formula-color)}.kbq-code-block .hljs-function{background-color:var(--kbq-code-block-hljs-function-background);color:var(--kbq-code-block-hljs-function-color)}.kbq-code-block .hljs-keyword{background-color:var(--kbq-code-block-hljs-keyword-background);color:var(--kbq-code-block-hljs-keyword-color)}.kbq-code-block .hljs-link{background-color:var(--kbq-code-block-hljs-link-background);color:var(--kbq-code-block-hljs-link-color)}.kbq-code-block .hljs-literal{background-color:var(--kbq-code-block-hljs-literal-background);color:var(--kbq-code-block-hljs-literal-color)}.kbq-code-block .hljs-meta{background-color:var(--kbq-code-block-hljs-meta-background);color:var(--kbq-code-block-hljs-meta-color)}.kbq-code-block .hljs-meta-keyword{background-color:var(--kbq-code-block-hljs-meta-keyword-background);color:var(--kbq-code-block-hljs-meta-keyword-color)}.kbq-code-block .hljs-meta-string{background-color:var(--kbq-code-block-hljs-meta-string-background);color:var(--kbq-code-block-hljs-meta-string-color)}.kbq-code-block .hljs-meta-prompt{background-color:var(--kbq-code-block-hljs-meta-prompt-background);color:var(--kbq-code-block-hljs-meta-prompt-color)}.kbq-code-block .hljs-name{background-color:var(--kbq-code-block-hljs-name-background);color:var(--kbq-code-block-hljs-name-color)}.kbq-code-block .hljs-number{background-color:var(--kbq-code-block-hljs-number-background);color:var(--kbq-code-block-hljs-number-color)}.kbq-code-block .hljs-operator{background-color:var(--kbq-code-block-hljs-operator-background);color:var(--kbq-code-block-hljs-operator-color)}.kbq-code-block .hljs-params{background-color:var(--kbq-code-block-hljs-params-background);color:var(--kbq-code-block-hljs-params-color)}.kbq-code-block .hljs-property{background-color:var(--kbq-code-block-hljs-property-background);color:var(--kbq-code-block-hljs-property-color)}.kbq-code-block .hljs-punctuation{background-color:var(--kbq-code-block-hljs-punctuation-background);color:var(--kbq-code-block-hljs-punctuation-color)}.kbq-code-block .hljs-quote{background-color:var(--kbq-code-block-hljs-quote-background);color:var(--kbq-code-block-hljs-quote-color)}.kbq-code-block .hljs-regexp{background-color:var(--kbq-code-block-hljs-regexp-background);color:var(--kbq-code-block-hljs-regexp-color)}.kbq-code-block .hljs-section{background-color:var(--kbq-code-block-hljs-section-background);color:var(--kbq-code-block-hljs-section-color)}.kbq-code-block .hljs-selector-attr{background-color:var(--kbq-code-block-hljs-selector-attr-background);color:var(--kbq-code-block-hljs-selector-attr-color)}.kbq-code-block .hljs-selector-class{background-color:var(--kbq-code-block-hljs-selector-class-background);color:var(--kbq-code-block-hljs-selector-class-color)}.kbq-code-block .hljs-selector-id{background-color:var(--kbq-code-block-hljs-selector-id-background);color:var(--kbq-code-block-hljs-selector-id-color)}.kbq-code-block .hljs-selector-pseudo{background-color:var(--kbq-code-block-hljs-selector-pseudo-background);color:var(--kbq-code-block-hljs-selector-pseudo-color)}.kbq-code-block .hljs-selector-tag{background-color:var(--kbq-code-block-hljs-selector-tag-background);color:var(--kbq-code-block-hljs-selector-tag-color)}.kbq-code-block .hljs-string{background-color:var(--kbq-code-block-hljs-string-background);color:var(--kbq-code-block-hljs-string-color)}.kbq-code-block .hljs-strong{background-color:var(--kbq-code-block-hljs-strong-background);color:var(--kbq-code-block-hljs-strong-color)}.kbq-code-block .hljs-subst{background-color:var(--kbq-code-block-hljs-subst-background);color:var(--kbq-code-block-hljs-subst-color)}.kbq-code-block .hljs-symbol{background-color:var(--kbq-code-block-hljs-symbol-background);color:var(--kbq-code-block-hljs-symbol-color)}.kbq-code-block .hljs-tag{background-color:var(--kbq-code-block-hljs-tag-background);color:var(--kbq-code-block-hljs-tag-color)}.kbq-code-block .hljs-template-tag{background-color:var(--kbq-code-block-hljs-template-tag-background);color:var(--kbq-code-block-hljs-template-tag-color)}.kbq-code-block .hljs-template-variable{background-color:var(--kbq-code-block-hljs-template-variable-background);color:var(--kbq-code-block-hljs-template-variable-color)}.kbq-code-block .hljs-title{background-color:var(--kbq-code-block-hljs-title-background);color:var(--kbq-code-block-hljs-title-color)}.kbq-code-block .hljs-title-class{background-color:var(--kbq-code-block-hljs-title-class-background);color:var(--kbq-code-block-hljs-title-class-color)}.kbq-code-block .hljs-title-class-inherited{background-color:var(--kbq-code-block-hljs-title-class-inherited-background);color:var(--kbq-code-block-hljs-title-class-inherited-color)}.kbq-code-block .hljs-title-function{background-color:var(--kbq-code-block-hljs-title-function-background);color:var(--kbq-code-block-hljs-title-function-color)}.kbq-code-block .hljs-title-function-invoke{background-color:var(--kbq-code-block-hljs-title-function-invoke-background);color:var(--kbq-code-block-hljs-title-function-invoke-color)}.kbq-code-block .hljs-type{background-color:var(--kbq-code-block-hljs-type-background);color:var(--kbq-code-block-hljs-type-color)}.kbq-code-block .hljs-variable{background-color:var(--kbq-code-block-hljs-variable-background);color:var(--kbq-code-block-hljs-variable-color)}.kbq-code-block .hljs-variable-constant{background-color:var(--kbq-code-block-hljs-variable-constant-background);color:var(--kbq-code-block-hljs-variable-constant-color)}.kbq-code-block .hljs-variable-language{background-color:var(--kbq-code-block-hljs-variable-language-background);color:var(--kbq-code-block-hljs-variable-language-color)}.kbq-code-block .hljs-ln-n{color:var(--kbq-code-block-hljs-line-numbers-color)}.kbq-code-block.kbq-code-block_outline{background:var(--kbq-code-block-outline-container-background);border-color:var(--kbq-code-block-outline-container-border-color)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__header{background:var(--kbq-code-block-outline-header-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__actionbar{background:var(--kbq-code-block-outline-actionbar-background)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_header-with-shadow .kbq-code-block__header{box-shadow:var(--kbq-code-block-outline-header-scroll-shadow)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar{background:transparent}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{background:var(--kbq-code-block-outline-actionbar-fade-gradient)}.kbq-code-block.kbq-code-block_outline.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{background:var(--kbq-code-block-outline-actionbar-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{background:var(--kbq-code-block-outline-collapse-button-expand-background);opacity:90%}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all.kbq-code-block__view-all_expanded{background:var(--kbq-code-block-outline-collapse-expanded-background)}.kbq-code-block.kbq-code-block_outline .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{background:var(--kbq-code-block-outline-collapse-collapsed-background)}.kbq-code-block.kbq-code-block_filled{background:var(--kbq-code-block-filled-container-background);border-color:var(--kbq-code-block-filled-container-border-color)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__header{background:var(--kbq-code-block-filled-header-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__actionbar{background:var(--kbq-code-block-filled-actionbar-background)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_header-with-shadow .kbq-code-block__header{box-shadow:var(--kbq-code-block-filled-header-scroll-shadow)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar{background:transparent}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__fade-gradient{background:var(--kbq-code-block-filled-actionbar-fade-gradient)}.kbq-code-block.kbq-code-block_filled.kbq-code-block_hide-tabs .kbq-code-block__actionbar .kbq-code-block__actionbar__button-stack{background:var(--kbq-code-block-filled-actionbar-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all .kbq-code-block__view-all__wrapper{background:var(--kbq-code-block-filled-collapse-button-expand-background);opacity:90%}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all.kbq-code-block__view-all_expanded{background:var(--kbq-code-block-filled-collapse-expanded-background)}.kbq-code-block.kbq-code-block_filled .kbq-code-block__view-all.kbq-code-block__view-all_collapsed{background:var(--kbq-code-block-filled-collapse-collapsed-background)}.kbq-code-block .kbq-code-block__main.cdk-keyboard-focused{outline-color:var(--kbq-states-line-focus-theme)}.kbq-code-block{font-size:var(--kbq-typography-mono-codeblock-font-size);font-style:var(--kbq-typography-mono-codeblock-font-style);font-weight:var(--kbq-typography-mono-codeblock-font-weight);line-height:var(--kbq-typography-mono-codeblock-line-height);font-family:var(--kbq-typography-mono-codeblock-font-family);text-transform:var(--kbq-typography-mono-codeblock-text-transform);font-feature-settings:var(--kbq-typography-mono-codeblock-font-feature-settings);letter-spacing:var(--kbq-typography-mono-codeblock-letter-spacing)}.kbq-code-block .kbq-code-block__pre,.kbq-code-block .kbq-code-block__code{font:inherit}\n", ".kbq-code-block{--kbq-code-block-size-container-border-width: var(--kbq-size-border-width);--kbq-code-block-size-container-border-width-focused: 2px;--kbq-code-block-size-container-border-radius: var(--kbq-size-border-radius);--kbq-code-block-size-with-header-content-padding-top: var(--kbq-size-xxs);--kbq-code-block-size-with-header-content-padding-bottom: var(--kbq-size-l);--kbq-code-block-size-with-header-content-padding-horizontal: var(--kbq-size-xl);--kbq-code-block-size-with-header-content-content-gap-horizontal: var(--kbq-size-m);--kbq-code-block-size-no-header-content-padding-vertical: 14px;--kbq-code-block-size-no-header-content-padding-horizontal: var(--kbq-size-xl);--kbq-code-block-size-no-header-content-content-gap-horizontal: var(--kbq-size-m);--kbq-code-block-size-header-content-gap-horizontal: var(--kbq-size-l);--kbq-code-block-size-actionbar-content-gap-horizontal: var(--kbq-size-3xs);--kbq-code-block-size-actionbar-fade-gradient-width: var(--kbq-size-3xl);--kbq-code-block-size-collapse-expanded-padding-top: 0;--kbq-code-block-size-collapse-expanded-padding-bottom: var(--kbq-size-l);--kbq-code-block-size-collapse-collapsed-padding-top: var(--kbq-size-3xl);--kbq-code-block-size-collapse-collapsed-padding-bottom: var(--kbq-size-l);--kbq-code-block-font-hljs-addition-font-style: null;--kbq-code-block-font-hljs-addition-font-weight: null;--kbq-code-block-font-hljs-attr-font-style: null;--kbq-code-block-font-hljs-attr-font-weight: null;--kbq-code-block-font-hljs-attribute-font-style: null;--kbq-code-block-font-hljs-attribute-font-weight: null;--kbq-code-block-font-hljs-built-in-font-style: null;--kbq-code-block-font-hljs-built-in-font-weight: null;--kbq-code-block-font-hljs-bullet-font-style: null;--kbq-code-block-font-hljs-bullet-font-weight: null;--kbq-code-block-font-hljs-char-escape-font-style: null;--kbq-code-block-font-hljs-char-escape-font-weight: null;--kbq-code-block-font-hljs-class-font-style: null;--kbq-code-block-font-hljs-class-font-weight: null;--kbq-code-block-font-hljs-code-font-style: null;--kbq-code-block-font-hljs-code-font-weight: null;--kbq-code-block-font-hljs-comment-font-style: null;--kbq-code-block-font-hljs-comment-font-weight: null;--kbq-code-block-font-hljs-deletion-font-style: null;--kbq-code-block-font-hljs-deletion-font-weight: null;--kbq-code-block-font-hljs-doctag-font-style: null;--kbq-code-block-font-hljs-doctag-font-weight: null;--kbq-code-block-font-hljs-emphasis-font-style: null;--kbq-code-block-font-hljs-emphasis-font-weight: null;--kbq-code-block-font-hljs-formula-font-style: null;--kbq-code-block-font-hljs-formula-font-weight: null;--kbq-code-block-font-hljs-function-font-style: null;--kbq-code-block-font-hljs-function-font-weight: null;--kbq-code-block-font-hljs-keyword-font-style: null;--kbq-code-block-font-hljs-keyword-font-weight: null;--kbq-code-block-font-hljs-link-font-style: null;--kbq-code-block-font-hljs-link-font-weight: null;--kbq-code-block-font-hljs-literal-font-style: null;--kbq-code-block-font-hljs-literal-font-weight: null;--kbq-code-block-font-hljs-meta-font-style: null;--kbq-code-block-font-hljs-meta-font-weight: null;--kbq-code-block-font-hljs-meta-keyword-font-style: null;--kbq-code-block-font-hljs-meta-keyword-font-weight: null;--kbq-code-block-font-hljs-meta-string-font-style: null;--kbq-code-block-font-hljs-meta-string-font-weight: null;--kbq-code-block-font-hljs-meta-prompt-font-style: null;--kbq-code-block-font-hljs-meta-prompt-font-weight: null;--kbq-code-block-font-hljs-name-font-style: null;--kbq-code-block-font-hljs-name-font-weight: null;--kbq-code-block-font-hljs-number-font-style: null;--kbq-code-block-font-hljs-number-font-weight: null;--kbq-code-block-font-hljs-operator-font-style: null;--kbq-code-block-font-hljs-operator-font-weight: null;--kbq-code-block-font-hljs-params-font-style: null;--kbq-code-block-font-hljs-params-font-weight: null;--kbq-code-block-font-hljs-property-font-style: null;--kbq-code-block-font-hljs-property-font-weight: null;--kbq-code-block-font-hljs-punctuation-font-style: null;--kbq-code-block-font-hljs-punctuation-font-weight: null;--kbq-code-block-font-hljs-quote-font-style: null;--kbq-code-block-font-hljs-quote-font-weight: null;--kbq-code-block-font-hljs-regexp-font-style: null;--kbq-code-block-font-hljs-regexp-font-weight: null;--kbq-code-block-font-hljs-section-font-style: null;--kbq-code-block-font-hljs-section-font-weight: null;--kbq-code-block-font-hljs-selector-attr-font-style: null;--kbq-code-block-font-hljs-selector-attr-font-weight: null;--kbq-code-block-font-hljs-selector-class-font-style: null;--kbq-code-block-font-hljs-selector-class-font-weight: null;--kbq-code-block-font-hljs-selector-id-font-style: null;--kbq-code-block-font-hljs-selector-id-font-weight: null;--kbq-code-block-font-hljs-selector-pseudo-font-style: null;--kbq-code-block-font-hljs-selector-pseudo-font-weight: null;--kbq-code-block-font-hljs-selector-tag-font-style: null;--kbq-code-block-font-hljs-selector-tag-font-weight: null;--kbq-code-block-font-hljs-string-font-style: null;--kbq-code-block-font-hljs-string-font-weight: null;--kbq-code-block-font-hljs-strong-font-style: null;--kbq-code-block-font-hljs-strong-font-weight: null;--kbq-code-block-font-hljs-subst-font-style: null;--kbq-code-block-font-hljs-subst-font-weight: null;--kbq-code-block-font-hljs-symbol-font-style: null;--kbq-code-block-font-hljs-symbol-font-weight: null;--kbq-code-block-font-hljs-tag-font-style: null;--kbq-code-block-font-hljs-tag-font-weight: null;--kbq-code-block-font-hljs-template-tag-font-style: null;--kbq-code-block-font-hljs-template-tag-font-weight: null;--kbq-code-block-font-hljs-template-variable-font-style: null;--kbq-code-block-font-hljs-template-variable-font-weight: null;--kbq-code-block-font-hljs-title-font-style: null;--kbq-code-block-font-hljs-title-font-weight: null;--kbq-code-block-font-hljs-title-class-font-style: normal;--kbq-code-block-font-hljs-title-class-font-weight: 500;--kbq-code-block-font-hljs-title-class-inherited-font-style: null;--kbq-code-block-font-hljs-title-class-inherited-font-weight: null;--kbq-code-block-font-hljs-title-function-font-style: null;--kbq-code-block-font-hljs-title-function-font-weight: null;--kbq-code-block-font-hljs-title-function-invoke-font-style: null;--kbq-code-block-font-hljs-title-function-invoke-font-weight: null;--kbq-code-block-font-hljs-type-font-style: null;--kbq-code-block-font-hljs-type-font-weight: null;--kbq-code-block-font-hljs-variable-font-style: null;--kbq-code-block-font-hljs-variable-font-weight: null;--kbq-code-block-font-hljs-variable-constant-font-style: null;--kbq-code-block-font-hljs-variable-constant-font-weight: null;--kbq-code-block-font-hljs-variable-language-font-style: null;--kbq-code-block-font-hljs-variable-language-font-weight: null;--kbq-code-block-filled-container-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-container-border-color: transparent;--kbq-code-block-filled-header-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-header-scroll-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-code-block-filled-actionbar-fade-gradient: linear-gradient( 90deg, transparent, var(--kbq-background-bg-secondary) );--kbq-code-block-filled-actionbar-background: var(--kbq-background-bg-secondary);--kbq-code-block-filled-collapse-expanded-background: transparent;--kbq-code-block-filled-collapse-collapsed-background: linear-gradient( 180deg, transparent, var(--kbq-background-bg-secondary) 100% );--kbq-code-block-filled-collapse-button-expand-background: var(--kbq-background-bg-secondary);--kbq-code-block-outline-container-background: var(--kbq-background-card);--kbq-code-block-outline-container-border-color: var(--kbq-divider-color, var(--kbq-line-contrast-less));--kbq-code-block-outline-header-background: var(--kbq-background-card);--kbq-code-block-outline-header-scroll-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-code-block-outline-actionbar-fade-gradient: linear-gradient(90deg, transparent, var(--kbq-background-card));--kbq-code-block-outline-actionbar-background: var(--kbq-background-card);--kbq-code-block-outline-collapse-expanded-background: transparent;--kbq-code-block-outline-collapse-collapsed-background: linear-gradient( 180deg, transparent, var(--kbq-background-bg) 100% );--kbq-code-block-outline-collapse-button-expand-background: var(--kbq-background-card);--kbq-code-block-hljs-addition-background: var(--kbq-palette-green-95);--kbq-code-block-hljs-addition-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-attr-background: null;--kbq-code-block-hljs-attr-color: null;--kbq-code-block-hljs-attribute-background: null;--kbq-code-block-hljs-attribute-color: null;--kbq-code-block-hljs-built-in-background: null;--kbq-code-block-hljs-built-in-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-bullet-background: null;--kbq-code-block-hljs-bullet-color: null;--kbq-code-block-hljs-char-escape-background: null;--kbq-code-block-hljs-char-escape-color: null;--kbq-code-block-hljs-class-background: null;--kbq-code-block-hljs-class-color: null;--kbq-code-block-hljs-code-background: null;--kbq-code-block-hljs-code-color: null;--kbq-code-block-hljs-comment-background: null;--kbq-code-block-hljs-comment-color: var(--kbq-palette-grey-60);--kbq-code-block-hljs-deletion-background: var(--kbq-palette-red-95);--kbq-code-block-hljs-deletion-color: var(--kbq-palette-red-35);--kbq-code-block-hljs-doctag-background: null;--kbq-code-block-hljs-doctag-color: null;--kbq-code-block-hljs-emphasis-background: null;--kbq-code-block-hljs-emphasis-color: null;--kbq-code-block-hljs-formula-background: null;--kbq-code-block-hljs-formula-color: null;--kbq-code-block-hljs-function-background: null;--kbq-code-block-hljs-function-color: null;--kbq-code-block-hljs-keyword-background: null;--kbq-code-block-hljs-keyword-color: null;--kbq-code-block-hljs-line-numbers-color: var(--kbq-foreground-contrast-secondary);--kbq-code-block-hljs-link-background: null;--kbq-code-block-hljs-link-color: null;--kbq-code-block-hljs-literal-background: null;--kbq-code-block-hljs-literal-color: var(--kbq-palette-purple-30);--kbq-code-block-hljs-meta-background: null;--kbq-code-block-hljs-meta-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-meta-keyword-background: null;--kbq-code-block-hljs-meta-keyword-color: null;--kbq-code-block-hljs-meta-string-background: null;--kbq-code-block-hljs-meta-string-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-meta-prompt-background: null;--kbq-code-block-hljs-meta-prompt-color: null;--kbq-code-block-hljs-name-background: null;--kbq-code-block-hljs-name-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-number-background: null;--kbq-code-block-hljs-number-color: var(--kbq-palette-purple-30);--kbq-code-block-hljs-operator-background: null;--kbq-code-block-hljs-operator-color: null;--kbq-code-block-hljs-params-background: null;--kbq-code-block-hljs-params-color: null;--kbq-code-block-hljs-property-background: null;--kbq-code-block-hljs-property-color: null;--kbq-code-block-hljs-punctuation-background: null;--kbq-code-block-hljs-punctuation-color: null;--kbq-code-block-hljs-quote-background: null;--kbq-code-block-hljs-quote-color: null;--kbq-code-block-hljs-regexp-background: null;--kbq-code-block-hljs-regexp-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-section-background: null;--kbq-code-block-hljs-section-color: null;--kbq-code-block-hljs-selector-attr-background: null;--kbq-code-block-hljs-selector-attr-color: null;--kbq-code-block-hljs-selector-class-background: null;--kbq-code-block-hljs-selector-class-color: null;--kbq-code-block-hljs-selector-id-background: null;--kbq-code-block-hljs-selector-id-color: null;--kbq-code-block-hljs-selector-pseudo-background: null;--kbq-code-block-hljs-selector-pseudo-color: null;--kbq-code-block-hljs-selector-tag-background: null;--kbq-code-block-hljs-selector-tag-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-string-background: null;--kbq-code-block-hljs-string-color: var(--kbq-palette-green-25);--kbq-code-block-hljs-strong-background: null;--kbq-code-block-hljs-strong-color: null;--kbq-code-block-hljs-subst-background: null;--kbq-code-block-hljs-subst-color: null;--kbq-code-block-hljs-symbol-background: null;--kbq-code-block-hljs-symbol-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-tag-background: null;--kbq-code-block-hljs-tag-color: null;--kbq-code-block-hljs-template-tag-background: null;--kbq-code-block-hljs-template-tag-color: null;--kbq-code-block-hljs-template-variable-background: null;--kbq-code-block-hljs-template-variable-color: null;--kbq-code-block-hljs-title-background: null;--kbq-code-block-hljs-title-color: var(--kbq-palette-blue-35);--kbq-code-block-hljs-title-class-background: null;--kbq-code-block-hljs-title-class-color: null;--kbq-code-block-hljs-title-class-inherited-background: null;--kbq-code-block-hljs-title-class-inherited-color: null;--kbq-code-block-hljs-title-function-background: null;--kbq-code-block-hljs-title-function-color: null;--kbq-code-block-hljs-title-function-invoke-background: null;--kbq-code-block-hljs-title-function-invoke-color: null;--kbq-code-block-hljs-type-background: null;--kbq-code-block-hljs-type-color: null;--kbq-code-block-hljs-variable-background: null;--kbq-code-block-hljs-variable-color: null;--kbq-code-block-hljs-variable-constant-background: null;--kbq-code-block-hljs-variable-constant-color: null;--kbq-code-block-hljs-variable-language-background: null;--kbq-code-block-hljs-variable-language-color: null;--kbq-code-block-tab-size: 4}\n"], dependencies: [{ kind: "ngmodule", type: KbqTabsModule }, { kind: "component", type: i1.KbqTabNavBar, selector: "[kbqTabNavBar], [kbq-tab-nav-bar]", inputs: ["transparent", "onSurface", "underlined", "tabNavPanel"], exportAs: ["kbqTabNavBar"] }, { kind: "directive", type: i1.KbqTabLink, selector: "[kbqTabLink], [kbq-tab-link]", inputs: ["id", "active", "disabled", "tabIndex"], exportAs: ["kbqTabLink"] }, { kind: "directive", type: i1.KbqTabNavPanel, selector: "[kbqTabNavPanel]", inputs: ["id"], exportAs: ["kbqTabNavPanel"] }, { kind: "ngmodule", type: KbqButtonModule }, { kind: "component", type: i2.KbqButton, selector: "[kbq-button]", inputs: ["kbqStyle", "disabled", "tabIndex"] }, { kind: "directive", type: i2.KbqButtonCssStyler, selector: "[kbq-button]" }, { kind: "directive", type: KbqCodeBlockHighlight, selector: "code[kbqCodeBlockHighlight]", inputs: ["file", "startFrom", "singleLine"] }, { kind: "ngmodule", type: A11yModule }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "ngmodule", type: CdkScrollableModule }, { kind: "directive", type: i4.CdkScrollable, selector: "[cdk-scrollable], [cdkScrollable]" }, { kind: "ngmodule", type: KbqToolTipModule }, { kind: "directive", type: i5.KbqTooltipTrigger, selector: "[kbqTooltip]", inputs: ["hideWithTimeout", "kbqVisible", "kbqPlacement", "kbqRelativeToPointer", "kbqPlacementPriority", "kbqTooltip", "kbqTooltipDisabled", "kbqEnterDelay", "kbqLeaveDelay", "kbqTrigger", "kbqTooltipClass", "kbqTooltipContext", "kbqTooltipColor", "kbqTooltipArrow", "kbqTooltipOffset"], outputs: ["kbqPlacementChange", "kbqVisibleChange"], exportAs: ["kbqTooltip"] }, { kind: "ngmodule", type: KbqIconModule }, { kind: "component", type: i6.KbqIcon, selector: "[kbq-icon]", inputs: ["small", "autoColor", "kbq-icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
774
774
  }
775
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqCodeBlock, decorators: [{
775
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlock, decorators: [{
776
776
  type: Component,
777
777
  args: [{ standalone: true, imports: [
778
778
  KbqTabsModule,
@@ -850,11 +850,11 @@ const COMPONENTS = [
850
850
  KbqCodeBlock
851
851
  ];
852
852
  class KbqCodeBlockModule {
853
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqCodeBlockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
854
- /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: KbqCodeBlockModule, imports: [KbqCodeBlock], exports: [KbqCodeBlock] }); }
855
- /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqCodeBlockModule, imports: [COMPONENTS] }); }
853
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
854
+ /** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockModule, imports: [KbqCodeBlock], exports: [KbqCodeBlock] }); }
855
+ /** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockModule, imports: [COMPONENTS] }); }
856
856
  }
857
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqCodeBlockModule, decorators: [{
857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: KbqCodeBlockModule, decorators: [{
858
858
  type: NgModule,
859
859
  args: [{
860
860
  imports: COMPONENTS,
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-code-block.mjs","sources":["../../../packages/components/code-block/code-block-highlight.ts","../../../packages/components/code-block/code-block.ts","../../../packages/components/code-block/code-block.html","../../../packages/components/code-block/code-block.module.ts","../../../packages/components/code-block/koobiq-components-code-block.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n Provider,\n Renderer2,\n SecurityContext\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KBQ_WINDOW } from '@koobiq/components/core';\nimport hljs from 'highlight.js';\nimport { KbqCodeBlockFile } from './types';\n\n/**\n * Fallback language for code block if language is not supported/specified.\n *\n * List of supported languages:\n * @link https://highlightjs.readthedocs.io/en/stable/supported-languages.html\n */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE = new InjectionToken<string>(\n 'KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE',\n { factory: () => 'plaintext' }\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE`. */\nexport const kbqCodeBlockFallbackFileLanguageProvider = (language: string): Provider => ({\n provide: KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE,\n useValue: language\n});\n\n/** Directive which applies syntax highlighting to the code block content. */\n@Directive({\n standalone: true,\n selector: 'code[kbqCodeBlockHighlight]',\n host: {\n class: 'hljs'\n }\n})\nexport class KbqCodeBlockHighlight {\n private readonly nativeElement = inject(ElementRef).nativeElement;\n private readonly document = inject<Document>(DOCUMENT);\n private readonly renderer = inject(Renderer2);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);\n private readonly window = inject(KBQ_WINDOW);\n\n /** The code file. */\n @Input({ required: true })\n set file(file: KbqCodeBlockFile) {\n if (!this.window) return;\n\n let { language } = file;\n\n if (!language || !hljs.getLanguage(language)) {\n console.warn(\n `[KbqCodeBlock] Unknown file language: \"${language}\". Fall back to \"${this.fallbackFileLanguage}\".`,\n file\n );\n language = this.fallbackFileLanguage;\n }\n\n const {\n value: highlightedHTML,\n language: highlightedLanguage,\n illegal,\n relevance\n } = hljs.highlight(file.content, {\n language: language!\n });\n\n if (illegal) {\n console.warn('[KbqCodeBlock] File content contains illegal characters.', file);\n }\n\n if (relevance === 0) {\n console.warn('[KbqCodeBlock] File content does not match the specified programming language.', file);\n }\n\n const safeHTML = this.domSanitizer.sanitize(SecurityContext.HTML, highlightedHTML);\n const highlightedHTMLWithLineNumbers = this.window['hljs'].lineNumbersValue(safeHTML, {\n startFrom: this.startFrom,\n singleLine: this.singleLine\n });\n\n this.renderer.setAttribute(this.nativeElement, 'data-language', highlightedLanguage!);\n this.renderer.setProperty(this.nativeElement, 'innerHTML', highlightedHTMLWithLineNumbers);\n }\n\n /** The starting line number. */\n @Input({ transform: numberAttribute }) startFrom: number = 1;\n\n /** Whether to display line numbers for single line code block. */\n @Input({ transform: booleanAttribute }) singleLine: boolean = false;\n\n constructor() {\n this.initLineNumbersPlugin();\n }\n\n /**\n * Initialize the HighlightJS line numbers plugin. This method is called once when\n * the component is constructed.\n */\n private initLineNumbersPlugin(): void {\n if (!this.window) return;\n\n this.window['hljs'] = hljs;\n this.highlightJSLineNumbersPlugin(this.document, this.window);\n }\n\n /**\n * This method is not intended for editing.\n * Changes may lead to unpredictable behavior.\n * Source code: https://github.com/wcoder/highlightjs-line-numbers.js/blob/v2.9.0/src/highlightjs-line-numbers.js\n */\n private highlightJSLineNumbersPlugin(d: Document, w: Window): void {\n 'use strict';\n\n if (!w) return;\n\n const TABLE_NAME = 'hljs-ln',\n LINE_NAME = 'hljs-ln-line',\n CODE_BLOCK_NAME = 'hljs-ln-code',\n NUMBERS_BLOCK_NAME = 'hljs-ln-numbers',\n NUMBER_LINE_NAME = 'hljs-ln-n',\n DATA_ATTR_NAME = 'data-line-number',\n BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g;\n\n if (w['hljs']) {\n w['hljs'].initLineNumbersOnLoad = initLineNumbersOnLoad;\n w['hljs'].lineNumbersBlock = lineNumbersBlock;\n w['hljs'].lineNumbersBlockSync = lineNumbersBlockSync;\n w['hljs'].lineNumbersValue = lineNumbersValue;\n\n addStyles();\n } else {\n console.error('highlight.js not detected!');\n }\n\n function isHljsLnCodeDescendant(domElt) {\n let curElt = domElt;\n\n while (curElt) {\n if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {\n return true;\n }\n\n curElt = curElt.parentNode;\n }\n\n return false;\n }\n\n function getHljsLnTable(hljsLnDomElt) {\n let curElt = hljsLnDomElt;\n\n while (curElt.nodeName !== 'TABLE') {\n curElt = curElt.parentNode;\n }\n\n return curElt;\n }\n\n // Function to workaround a copy issue with Microsoft Edge.\n // Due to hljs-ln wrapping the lines of code inside a <table> element,\n // itself wrapped inside a <pre> element, window.getSelection().toString()\n // does not contain any line breaks. So we need to get them back using the\n // rendered code in the DOM as reference.\n function edgeGetSelectedCodeLines(selection) {\n // current selected text without line breaks\n const selectionText = selection.toString();\n\n // get the <td> element wrapping the first line of selected code\n let tdAnchor = selection.anchorNode;\n\n while (tdAnchor.nodeName !== 'TD') {\n tdAnchor = tdAnchor.parentNode;\n }\n\n // get the <td> element wrapping the last line of selected code\n let tdFocus = selection.focusNode;\n\n while (tdFocus.nodeName !== 'TD') {\n tdFocus = tdFocus.parentNode;\n }\n\n // extract line numbers\n let firstLineNumber = parseInt(tdAnchor.dataset.lineNumber);\n let lastLineNumber = parseInt(tdFocus.dataset.lineNumber);\n\n // multi-lines copied case\n if (firstLineNumber != lastLineNumber) {\n let firstLineText = tdAnchor.textContent;\n let lastLineText = tdFocus.textContent;\n\n // if the selection was made backward, swap values\n if (firstLineNumber > lastLineNumber) {\n let tmp = firstLineNumber;\n\n firstLineNumber = lastLineNumber;\n lastLineNumber = tmp;\n tmp = firstLineText;\n firstLineText = lastLineText;\n lastLineText = tmp;\n }\n\n // discard not copied characters in first line\n while (selectionText.indexOf(firstLineText) !== 0) {\n firstLineText = firstLineText.slice(1);\n }\n\n // discard not copied characters in last line\n while (selectionText.lastIndexOf(lastLineText) === -1) {\n lastLineText = lastLineText.slice(0, -1);\n }\n\n // reconstruct and return the real copied text\n let selectedText = firstLineText;\n const hljsLnTable = getHljsLnTable(tdAnchor);\n\n for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {\n const codeLineSel = format('.{0}[{1}=\"{2}\"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i]);\n const codeLineElt = hljsLnTable.querySelector(codeLineSel);\n\n selectedText += '\\n' + codeLineElt.textContent;\n }\n\n selectedText += '\\n' + lastLineText;\n\n return selectedText;\n // single copied line case\n } else {\n return selectionText;\n }\n }\n\n // ensure consistent code copy/paste behavior across all browsers\n // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)\n d.addEventListener('copy', function (e) {\n // get current selection\n const selection = w.getSelection()!;\n\n // override behavior when one wants to copy line of codes\n if (isHljsLnCodeDescendant(selection.anchorNode)) {\n let selectionText;\n\n // workaround an issue with Microsoft Edge as copied line breaks\n // are removed otherwise from the selection string\n if (w.navigator.userAgent.indexOf('Edge') !== -1) {\n selectionText = edgeGetSelectedCodeLines(selection);\n } else {\n // other browsers can directly use the selection string\n selectionText = selection.toString();\n }\n\n e.clipboardData!.setData('text/plain', selectionText);\n e.preventDefault();\n }\n });\n\n function addStyles() {\n const css = d.createElement('style');\n\n css.type = 'text/css';\n css.innerHTML = format(\n '.{0}{border-collapse:collapse}' + '.{0} td{padding:0}' + '.{1}:before{content:attr({2})}',\n [\n TABLE_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME\n ]\n );\n d.getElementsByTagName('head')[0].appendChild(css);\n }\n\n function initLineNumbersOnLoad(options) {\n if (d.readyState === 'interactive' || d.readyState === 'complete') {\n documentReady(options);\n } else {\n w.addEventListener('DOMContentLoaded', function () {\n documentReady(options);\n });\n }\n }\n\n function documentReady(options) {\n try {\n const blocks = d.querySelectorAll('code.hljs,code.nohighlight');\n\n for (const i in blocks) {\n if (blocks.hasOwnProperty(i)) {\n if (!isPluginDisabledForBlock(blocks[i])) {\n lineNumbersBlock(blocks[i], options);\n }\n }\n }\n } catch (e) {\n console.error('LineNumbers error: ', e);\n }\n }\n\n function isPluginDisabledForBlock(element) {\n return element.classList.contains('nohljsln');\n }\n\n function lineNumbersBlock(element, options) {\n if (typeof element !== 'object') return;\n\n async(function () {\n element.innerHTML = lineNumbersInternal(element, options);\n });\n }\n\n function lineNumbersBlockSync(element, options) {\n if (typeof element !== 'object') return;\n\n element.innerHTML = lineNumbersInternal(element, options);\n }\n\n function lineNumbersValue(value, options) {\n if (typeof value !== 'string') return;\n\n const element = d.createElement('code');\n\n element.innerHTML = value;\n\n return lineNumbersInternal(element, options);\n }\n\n function lineNumbersInternal(element, options) {\n const internalOptions = mapOptions(element, options);\n\n duplicateMultilineNodes(element);\n\n return addLineNumbersBlockFor(element.innerHTML, internalOptions);\n }\n\n function addLineNumbersBlockFor(inputHtml, options) {\n const lines = getLines(inputHtml);\n\n // if last line contains only carriage return remove it\n if (lines[lines.length - 1].trim() === '') {\n lines.pop();\n }\n\n if (lines.length > 1 || options.singleLine) {\n let html = '';\n\n for (let i = 0, l = lines.length; i < l; i++) {\n html += format(\n '<tr>' +\n '<td class=\"{0} {1}\" {3}=\"{5}\">' +\n '<div class=\"{2}\" {3}=\"{5}\"></div>' +\n '</td>' +\n '<td class=\"{0} {4}\" {3}=\"{5}\">' +\n '{6}' +\n '</td>' +\n '</tr>',\n [\n LINE_NAME,\n NUMBERS_BLOCK_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME,\n CODE_BLOCK_NAME,\n i + options.startFrom,\n lines[i].length > 0 ? lines[i] : ' '\n ]\n );\n }\n\n return format('<table class=\"{0}\">{1}</table>', [TABLE_NAME, html]);\n }\n\n return inputHtml;\n }\n\n /**\n * @param {HTMLElement} element Code block.\n * @param {Object} options External API options.\n * @returns {Object} Internal API options.\n */\n function mapOptions(element, options) {\n options = options || {};\n\n return {\n singleLine: getSingleLineOption(options),\n startFrom: getStartFromOption(element, options)\n };\n }\n\n function getSingleLineOption(options) {\n const defaultValue = false;\n\n if (options.singleLine) {\n return options.singleLine;\n }\n\n return defaultValue;\n }\n\n function getStartFromOption(element, options) {\n const defaultValue = 1;\n let startFrom = defaultValue;\n\n if (isFinite(options.startFrom)) {\n startFrom = options.startFrom;\n }\n\n // can be overridden because local option is priority\n const value = getAttribute(element, 'data-ln-start-from');\n\n if (value !== null) {\n startFrom = toNumber(value, defaultValue);\n }\n\n return startFrom;\n }\n\n /**\n * Recursive method for fix multi-line elements implementation in highlight.js\n * Doing deep passage on child nodes.\n * @param {HTMLElement} element\n */\n function duplicateMultilineNodes(element) {\n const nodes = element.childNodes;\n\n for (const node in nodes) {\n if (nodes.hasOwnProperty(node)) {\n const child = nodes[node];\n\n if (getLinesCount(child.textContent) > 0) {\n if (child.childNodes.length > 0) {\n duplicateMultilineNodes(child);\n } else {\n duplicateMultilineNode(child.parentNode);\n }\n }\n }\n }\n }\n\n /**\n * Method for fix multi-line elements implementation in highlight.js\n * @param {HTMLElement} element\n */\n function duplicateMultilineNode(element) {\n const className = element.className;\n\n if (!/hljs-/.test(className)) return;\n\n const lines = getLines(element.innerHTML);\n\n let result = '';\n\n for (let i = 0; i < lines.length; i++) {\n const lineText = lines[i].length > 0 ? lines[i] : ' ';\n\n result += format('<span class=\"{0}\">{1}</span>\\n', [className, lineText]);\n }\n\n element.innerHTML = result.trim();\n }\n\n function getLines(text) {\n if (text.length === 0) return [];\n\n return text.split(BREAK_LINE_REGEXP);\n }\n\n function getLinesCount(text) {\n return (text.trim().match(BREAK_LINE_REGEXP) || []).length;\n }\n\n ///\n /// HELPERS\n ///\n\n function async(func) {\n w.setTimeout(func, 0);\n }\n\n /**\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\n * @param {string} format\n * @param {array} args\n */\n function format(format, args) {\n return format.replace(/\\{(\\d+)\\}/g, function (m, n) {\n return args[n] !== undefined ? args[n] : m;\n });\n }\n\n /**\n * @param {HTMLElement} element Code block.\n * @param {String} attrName Attribute name.\n * @returns {String} Attribute value or empty.\n */\n function getAttribute(element, attrName) {\n return element.hasAttribute(attrName) ? element.getAttribute(attrName) : null;\n }\n\n /**\n * @param {String} str Source string.\n * @param {Number} fallback Fallback value.\n * @returns Parsed number or fallback value.\n */\n function toNumber(str, fallback) {\n if (!str) return fallback;\n const number = Number(str);\n\n return isFinite(number) ? number : fallback;\n }\n }\n}\n","import { A11yModule, FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { Platform } from '@angular/cdk/platform';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n Output,\n Provider,\n Renderer2,\n SecurityContext,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';\nimport {\n KBQ_LOCALE_SERVICE,\n KBQ_WINDOW,\n KbqCodeBlockLocaleConfiguration,\n KbqComponentColors,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTabsModule } from '@koobiq/components/tabs';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { debounceTime, fromEvent, merge } from 'rxjs';\nimport { KbqCodeBlockHighlight } from './code-block-highlight';\nimport { KbqCodeBlockFile } from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_CODE_BLOCK_LOCALE_CONFIGURATION = new InjectionToken<KbqCodeBlockLocaleConfiguration>(\n 'KBQ_CODE_BLOCK_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.codeBlock }\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_LOCALE_CONFIGURATION`. */\nexport const kbqCodeBlockLocaleConfigurationProvider = (configuration: KbqCodeBlockLocaleConfiguration): Provider => ({\n provide: KBQ_CODE_BLOCK_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n/** Fallback file name for code block if file name is not specified. */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_NAME = new InjectionToken<string>('KBQ_CODE_BLOCK_FALLBACK_FILE_NAME', {\n factory: () => 'code'\n});\n\n/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_NAME`. */\nexport const kbqCodeBlockFallbackFileNameProvider = (fileName: string): Provider => ({\n provide: KBQ_CODE_BLOCK_FALLBACK_FILE_NAME,\n useValue: fileName\n});\n\n/**\n * Component which highlights blocks of code.\n */\n@Component({\n standalone: true,\n imports: [\n KbqTabsModule,\n KbqButtonModule,\n KbqCodeBlockHighlight,\n A11yModule,\n CdkScrollableModule,\n KbqToolTipModule,\n KbqIconModule\n ],\n selector: 'kbq-code-block',\n exportAs: 'kbqCodeBlock',\n templateUrl: './code-block.html',\n styleUrls: ['./code-block.scss', './code-block-tokens.scss'],\n host: {\n class: 'kbq-code-block',\n '[class.kbq-code-block_filled]': 'filled',\n '[class.kbq-code-block_outline]': '!filled',\n '[class.kbq-code-block_hide-line-numbers]': '!lineNumbers',\n '[class.kbq-code-block_hide-tabs]': 'hideTabs',\n '[class.kbq-code-block_no-border]': 'noBorder || filled',\n '[class.kbq-code-block_soft-wrap]': 'softWrap',\n '[class.kbq-code-block_view-all]': 'viewAll'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqCodeBlock implements AfterViewInit {\n @ViewChild('copyButtonTooltip') private readonly copyButtonTooltip?: KbqTooltipTrigger;\n /**\n * Reference to the scrollable code content.\n */\n @ViewChild(CdkScrollable) readonly scrollableCodeContent: CdkScrollable;\n\n /** Whether to display line numbers. */\n @Input({ transform: booleanAttribute }) lineNumbers = false;\n\n /** Whether the code block should be filled. */\n @Input({ transform: booleanAttribute }) filled: boolean = false;\n\n /** Added soft wrap toggle button. */\n @Input({ transform: booleanAttribute }) canToggleSoftWrap: boolean = false;\n\n /** Whether sequences of whitespace should be preserved. */\n @Input({ transform: booleanAttribute }) softWrap: boolean = false;\n\n /**\n * Output to support two-way binding on `[(softWrap)]` property.\n */\n @Output() readonly softWrapChange = new EventEmitter<boolean>();\n\n /**\n * Allows to view all the code, otherwise it will be hidden.\n * Works only with `maxHeight` property.\n */\n @Input({ transform: booleanAttribute }) viewAll: boolean = false;\n\n /**\n * Output to support two-way binding on `[(viewAll)]` property.\n */\n @Output() readonly viewAllChange = new EventEmitter<boolean>();\n\n /**\n * Maximum height of the code block content, other parts will be hidden.\n * Can be toggled by `viewAll` property.\n */\n @Input({ transform: numberAttribute }) maxHeight: number;\n\n /**\n * @docs-private\n */\n protected get calculatedMaxHeight(): number | null {\n return this.maxHeight > 0 && !this.viewAll ? this.maxHeight : null;\n }\n\n /**\n * @deprecated Will be removed in next major release, use `canDownload` instead.\n *\n * @docs-private\n */\n @Input({ transform: booleanAttribute })\n set canLoad(value: boolean) {\n this.canDownload = value;\n }\n\n /** Added download code button. */\n @Input({ transform: booleanAttribute }) canDownload: boolean = false;\n\n /** Added copy code button. */\n @Input({ transform: booleanAttribute }) canCopy: boolean = true;\n\n /**\n * @deprecated Will be removed in next major release, use `files` instead.\n */\n @Input()\n set codeFiles(files: KbqCodeBlockFile[]) {\n this.files = files;\n }\n\n /**\n * @TODO Mark as `required`, after removing `codeFiles`\n *\n * Files to display.\n */\n @Input()\n get files(): KbqCodeBlockFile[] {\n return this._files;\n }\n\n set files(files: KbqCodeBlockFile[]) {\n this._files = files;\n\n if (this._files.length < this.activeFileIndex) {\n this.onSelectedTabChange(0);\n }\n\n if (this._files.length === 1 && !this._files[0].filename) {\n this.hideTabs = true;\n }\n }\n\n private _files: KbqCodeBlockFile[] = [];\n\n /** Defines which file (index) is active. */\n @Input({ transform: numberAttribute }) activeFileIndex = 0;\n\n /**\n * Output to support two-way binding on `[(activeFileIndex)]` property.\n */\n @Output() readonly activeFileIndexChange = new EventEmitter<number>();\n\n /** Whether to hide border. */\n @Input({ transform: booleanAttribute }) noBorder: boolean = false;\n\n /**\n * Whether to hide header tabs.\n * Always `true` if there is only one file without filename.\n * Makes actionbar floating if tabs are hidden.\n */\n @Input({ transform: booleanAttribute })\n get hideTabs(): boolean {\n return this._hideTabs;\n }\n\n set hideTabs(value: boolean) {\n this._hideTabs = value;\n\n this.setupActionbarDisplay();\n }\n\n private _hideTabs: boolean = false;\n\n /**\n * Component locale configuration.\n *\n * @docs-private\n */\n protected get localeConfiguration(): KbqCodeBlockLocaleConfiguration {\n return this._localeConfiguration;\n }\n\n private _localeConfiguration: KbqCodeBlockLocaleConfiguration = inject(KBQ_CODE_BLOCK_LOCALE_CONFIGURATION);\n\n /**\n * Code content tab index.\n *\n * @docs-private\n */\n protected get codeContentTabIndex(): number {\n return this.canCodeContentBeFocused ? 0 : -1;\n }\n\n /**\n * Determines whether the code content can be focused.\n *\n * This checks if the scrollable code content element is present,\n * has a scroll, and the calculated maximum height is not set.\n */\n private get canCodeContentBeFocused(): boolean {\n const element = this.scrollableCodeContent?.getElementRef().nativeElement;\n\n return element && this.hasScroll(element) && !this.calculatedMaxHeight;\n }\n\n /**\n * @docs-private\n */\n protected readonly componentColor = KbqComponentColors;\n /**\n * @docs-private\n */\n protected readonly buttonStyle = KbqButtonStyles;\n\n private readonly elementRef = inject(ElementRef);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly renderer = inject(Renderer2);\n private readonly platform = inject(Platform);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly clipboard = inject(Clipboard);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly document = inject<Document>(DOCUMENT);\n /**\n * @docs-private\n */\n protected readonly fallbackFileName = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_NAME);\n private readonly window = inject(KBQ_WINDOW);\n\n constructor() {\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n }\n\n ngAfterViewInit(): void {\n this.handleScroll();\n this.handleHover();\n\n // Setup initial actionbar display state\n this.setupActionbarDisplay();\n\n this.copyButtonTooltip?.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isVisible) => {\n if (isVisible) {\n this.copyButtonTooltip!.content = this.localeConfiguration.copyTooltip;\n }\n });\n\n // Should call `markForCheck` to ensure the `codeContentTabIndex` is updated after the view is initialized,\n // for correct focus behavior.\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Toggles the `viewAll` property.\n *\n * When `viewAll` is set to `true`, the content of the code block will be\n * displayed in its entirety. When set to `false`, the content will be\n * limited to the `maxHeight` property. If the content exceeds the\n * `maxHeight`, it will be scrolled to the top and the `viewAll` button\n * will be displayed.\n */\n toggleViewAll(): void {\n this.viewAll = !this.viewAll;\n\n if (!this.viewAll) {\n this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });\n }\n\n this.viewAllChange.emit(this.viewAll);\n }\n\n /**\n * Toggles `softWrap` property.\n *\n * When `softWrap` is set to `true`, the content of the code block will be\n * wrapped if it exceeds the height of the component. When set to `false`\n * the content will not be wrapped.\n */\n toggleSoftWrap(): void {\n this.softWrap = !this.softWrap;\n this.softWrapChange.emit(this.softWrap);\n }\n\n /**\n * Handles the change of the selected tab by updating the active file index\n * and scrolling to the top of the scrollable content.\n *\n * @param index - The index of the newly selected tab.\n *\n * @docs-private\n */\n protected onSelectedTabChange(index: number): void {\n if (this.activeFileIndex !== index) {\n this.activeFileIndex = index;\n this.activeFileIndexChange.emit(this.activeFileIndex);\n this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });\n }\n }\n\n /**\n * Handles the hover event on the code block element and updates the actionbar display accordingly.\n */\n private handleHover(): void {\n merge(\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter'),\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseleave')\n )\n .pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.setupActionbarDisplay(event?.type === 'mouseenter');\n });\n }\n\n /**\n * Handles the scroll event on the scrollable code content element and updates the header shadow accordingly.\n */\n private handleScroll(): void {\n this.scrollableCodeContent\n .elementScrolled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.setupHeaderShadow(this.scrollableCodeContent.measureScrollOffset('top') > 0);\n });\n }\n\n /**\n * Adds or removes the shadow class from the code block based on the specified condition.\n *\n * @param shouldShowShadow - A boolean indicating whether to add or remove the shadow class.\n */\n private setupHeaderShadow(shouldShowShadow: boolean): void {\n const className = 'kbq-code-block_header-with-shadow';\n\n if (shouldShowShadow) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, className);\n }\n }\n\n /**\n * Adds or removes the actionbar display class from the code block based on the specified condition.\n *\n * The actionbar is always visible on mobile devices and when the tabs are visible.\n * Otherwise, the actionbar is only visible when the mouse is hovered over the code block.\n *\n * @param shouldShowActionbar - A boolean indicating whether the actionbar should be visible.\n */\n private setupActionbarDisplay(shouldShowActionbar?: boolean): void {\n const className = 'kbq-code-block_show-actionbar';\n\n // Should always show actionbar on Mobile devices\n if (this.platform.IOS || this.platform.ANDROID) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n\n return;\n }\n\n // Should always show actionbar when tabs are visible\n if (!this.hideTabs) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n\n return;\n }\n\n if (typeof shouldShowActionbar === 'undefined') {\n return;\n }\n\n if (shouldShowActionbar) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, className);\n }\n }\n\n /** Whether the element has scroll. */\n private hasScroll({ scrollHeight, scrollWidth, clientHeight, clientWidth }: HTMLElement): boolean {\n return scrollHeight > clientHeight || scrollWidth > clientWidth;\n }\n\n /**\n * Handles the enter keydown event on `viewAll` button.\n *\n * @docs-private\n */\n protected onViewAllEnterKeydown(event: Event): void {\n event.preventDefault();\n\n this.toggleViewAll();\n\n if (this.canCodeContentBeFocused) {\n this.focusMonitor.focusVia(this.scrollableCodeContent.getElementRef().nativeElement, 'keyboard');\n }\n }\n\n private updateLocaleParams = (): void => {\n this._localeConfiguration = this.localeService?.getParams('codeBlock');\n\n this.changeDetectorRef.markForCheck();\n };\n\n /**\n * Copies the file code to the clipboard.\n *\n * If the copy was successful, the copy button tooltip content is updated\n * to show the \"copied\" message.\n *\n * @docs-private\n */\n protected copyCode(): void {\n const file = this.files[this.activeFileIndex];\n\n if (this.clipboard.copy(file.content) && this.copyButtonTooltip) {\n this.copyButtonTooltip.content = this.localeConfiguration.copiedTooltip;\n }\n }\n\n /**\n * Opens the file link in a new window.\n *\n * @docs-private\n */\n protected openLink(): void {\n const file = this.files[this.activeFileIndex];\n const safeURL = this.domSanitizer.sanitize(SecurityContext.URL, file.link!);\n\n if (safeURL) {\n this.window.open(safeURL.toString(), '_blank');\n }\n }\n\n /**\n * Downloads the file as a blob.\n *\n * Creates a link with a blob as href and the file name as download attribute.\n * Then simulates a click event on the link to initiate the download.\n *\n * @docs-private\n */\n protected downloadCode(): void {\n const file = this.files[this.activeFileIndex];\n const blob = new Blob([file.content], { type: 'text/plain' });\n const url = URL.createObjectURL(blob);\n const link = this.document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', file.filename || this.fallbackFileName);\n link.click();\n }\n}\n","@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n @if (!hideTabs) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files; track file; let index = $index) {\n <div\n kbqTabLink\n [active]=\"activeFileIndex === index\"\n [disabled]=\"files.length === 1\"\n (click)=\"onSelectedTabChange(index)\"\n >\n {{ file.filename || fallbackFileName }}\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\n @if (hideTabs) {\n <div class=\"kbq-code-block__actionbar__fade-gradient\"></div>\n }\n\n <div class=\"kbq-code-block__actionbar__button-stack\">\n @if (canToggleSoftWrap) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__soft-wrap-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"\n softWrap ? localeConfiguration.softWrapOffTooltip : localeConfiguration.softWrapOnTooltip\n \"\n (click)=\"toggleSoftWrap()\"\n >\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n </button>\n }\n\n @if (canDownload) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.downloadTooltip\"\n (click)=\"downloadCode()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n @if (canCopy) {\n <div #copyButtonTooltip=\"kbqTooltip\" [kbqTooltip]=\"localeConfiguration.copyTooltip\">\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__copy-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"copyCode()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n </div>\n }\n\n @if (file.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.openExternalSystemTooltip\"\n (click)=\"openLink()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n </div>\n </div>\n</div>\n\n<div\n #tabPanel=\"kbqTabNavPanel\"\n cdkMonitorElementFocus\n cdkScrollable\n kbqTabNavPanel\n class=\"kbq-code-block__main kbq-scrollbar\"\n [style.max-height.px]=\"calculatedMaxHeight\"\n [tabIndex]=\"codeContentTabIndex\"\n>\n <pre\n class=\"kbq-code-block__pre\"\n ><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n\n @if (maxHeight) {\n <div\n class=\"kbq-code-block__view-all\"\n [class.kbq-code-block__view-all_collapsed]=\"!viewAll\"\n [class.kbq-code-block__view-all_expanded]=\"viewAll\"\n >\n <div class=\"kbq-code-block__view-all__wrapper\">\n <button\n kbq-button\n class=\"kbq-code-block__view-all__button\"\n [color]=\"componentColor.Theme\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"toggleViewAll()\"\n (keydown.enter)=\"onViewAllEnterKeydown($event)\"\n >\n @if (viewAll) {\n <i kbq-icon=\"kbq-chevron-up_16\"></i>\n {{ localeConfiguration.viewLessText }}\n } @else {\n <i kbq-icon=\"kbq-chevron-down_16\"></i>\n {{ localeConfiguration.viewAllText }}\n }\n </button>\n </div>\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { KbqCodeBlock } from './code-block';\n\nconst COMPONENTS = [\n KbqCodeBlock\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqCodeBlockModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-code-block.mjs","sources":["../../../packages/components/code-block/code-block-highlight.ts","../../../packages/components/code-block/code-block.ts","../../../packages/components/code-block/code-block.html","../../../packages/components/code-block/code-block.module.ts","../../../packages/components/code-block/koobiq-components-code-block.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n Directive,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n Provider,\n Renderer2,\n SecurityContext\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KBQ_WINDOW, kbqInjectNativeElement } from '@koobiq/components/core';\nimport hljs from 'highlight.js';\nimport { KbqCodeBlockFile } from './types';\n\n/**\n * Fallback language for code block if language is not supported/specified.\n *\n * List of supported languages:\n * @link https://highlightjs.readthedocs.io/en/stable/supported-languages.html\n */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE = new InjectionToken<string>(\n 'KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE',\n { factory: () => 'plaintext' }\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE`. */\nexport const kbqCodeBlockFallbackFileLanguageProvider = (language: string): Provider => ({\n provide: KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE,\n useValue: language\n});\n\n/** Directive which applies syntax highlighting to the code block content. */\n@Directive({\n standalone: true,\n selector: 'code[kbqCodeBlockHighlight]',\n host: {\n class: 'hljs'\n }\n})\nexport class KbqCodeBlockHighlight {\n private readonly nativeElement = kbqInjectNativeElement();\n private readonly document = inject<Document>(DOCUMENT);\n private readonly renderer = inject(Renderer2);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);\n private readonly window = inject(KBQ_WINDOW);\n\n /** The code file. */\n @Input({ required: true })\n set file(file: KbqCodeBlockFile) {\n if (!this.window) return;\n\n let { language } = file;\n\n if (!language || !hljs.getLanguage(language)) {\n console.warn(\n `[KbqCodeBlock] Unknown file language: \"${language}\". Fall back to \"${this.fallbackFileLanguage}\".`,\n file\n );\n language = this.fallbackFileLanguage;\n }\n\n const {\n value: highlightedHTML,\n language: highlightedLanguage,\n illegal,\n relevance\n } = hljs.highlight(file.content, {\n language: language!\n });\n\n if (illegal) {\n console.warn('[KbqCodeBlock] File content contains illegal characters.', file);\n }\n\n if (relevance === 0) {\n console.warn('[KbqCodeBlock] File content does not match the specified programming language.', file);\n }\n\n const safeHTML = this.domSanitizer.sanitize(SecurityContext.HTML, highlightedHTML);\n const highlightedHTMLWithLineNumbers = this.window['hljs'].lineNumbersValue(safeHTML, {\n startFrom: this.startFrom,\n singleLine: this.singleLine\n });\n\n this.renderer.setAttribute(this.nativeElement, 'data-language', highlightedLanguage!);\n this.renderer.setProperty(this.nativeElement, 'innerHTML', highlightedHTMLWithLineNumbers);\n }\n\n /** The starting line number. */\n @Input({ transform: numberAttribute }) startFrom: number = 1;\n\n /** Whether to display line numbers for single line code block. */\n @Input({ transform: booleanAttribute }) singleLine: boolean = false;\n\n constructor() {\n this.initLineNumbersPlugin();\n }\n\n /**\n * Initialize the HighlightJS line numbers plugin. This method is called once when\n * the component is constructed.\n */\n private initLineNumbersPlugin(): void {\n if (!this.window) return;\n\n this.window['hljs'] = hljs;\n this.highlightJSLineNumbersPlugin(this.document, this.window);\n }\n\n /**\n * This method is not intended for editing.\n * Changes may lead to unpredictable behavior.\n * Source code: https://github.com/wcoder/highlightjs-line-numbers.js/blob/v2.9.0/src/highlightjs-line-numbers.js\n */\n private highlightJSLineNumbersPlugin(d: Document, w: Window): void {\n 'use strict';\n\n if (!w) return;\n\n const TABLE_NAME = 'hljs-ln',\n LINE_NAME = 'hljs-ln-line',\n CODE_BLOCK_NAME = 'hljs-ln-code',\n NUMBERS_BLOCK_NAME = 'hljs-ln-numbers',\n NUMBER_LINE_NAME = 'hljs-ln-n',\n DATA_ATTR_NAME = 'data-line-number',\n BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g;\n\n if (w['hljs']) {\n w['hljs'].initLineNumbersOnLoad = initLineNumbersOnLoad;\n w['hljs'].lineNumbersBlock = lineNumbersBlock;\n w['hljs'].lineNumbersBlockSync = lineNumbersBlockSync;\n w['hljs'].lineNumbersValue = lineNumbersValue;\n\n addStyles();\n } else {\n console.error('highlight.js not detected!');\n }\n\n function isHljsLnCodeDescendant(domElt) {\n let curElt = domElt;\n\n while (curElt) {\n if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {\n return true;\n }\n\n curElt = curElt.parentNode;\n }\n\n return false;\n }\n\n function getHljsLnTable(hljsLnDomElt) {\n let curElt = hljsLnDomElt;\n\n while (curElt.nodeName !== 'TABLE') {\n curElt = curElt.parentNode;\n }\n\n return curElt;\n }\n\n // Function to workaround a copy issue with Microsoft Edge.\n // Due to hljs-ln wrapping the lines of code inside a <table> element,\n // itself wrapped inside a <pre> element, window.getSelection().toString()\n // does not contain any line breaks. So we need to get them back using the\n // rendered code in the DOM as reference.\n function edgeGetSelectedCodeLines(selection) {\n // current selected text without line breaks\n const selectionText = selection.toString();\n\n // get the <td> element wrapping the first line of selected code\n let tdAnchor = selection.anchorNode;\n\n while (tdAnchor.nodeName !== 'TD') {\n tdAnchor = tdAnchor.parentNode;\n }\n\n // get the <td> element wrapping the last line of selected code\n let tdFocus = selection.focusNode;\n\n while (tdFocus.nodeName !== 'TD') {\n tdFocus = tdFocus.parentNode;\n }\n\n // extract line numbers\n let firstLineNumber = parseInt(tdAnchor.dataset.lineNumber);\n let lastLineNumber = parseInt(tdFocus.dataset.lineNumber);\n\n // multi-lines copied case\n if (firstLineNumber != lastLineNumber) {\n let firstLineText = tdAnchor.textContent;\n let lastLineText = tdFocus.textContent;\n\n // if the selection was made backward, swap values\n if (firstLineNumber > lastLineNumber) {\n let tmp = firstLineNumber;\n\n firstLineNumber = lastLineNumber;\n lastLineNumber = tmp;\n tmp = firstLineText;\n firstLineText = lastLineText;\n lastLineText = tmp;\n }\n\n // discard not copied characters in first line\n while (selectionText.indexOf(firstLineText) !== 0) {\n firstLineText = firstLineText.slice(1);\n }\n\n // discard not copied characters in last line\n while (selectionText.lastIndexOf(lastLineText) === -1) {\n lastLineText = lastLineText.slice(0, -1);\n }\n\n // reconstruct and return the real copied text\n let selectedText = firstLineText;\n const hljsLnTable = getHljsLnTable(tdAnchor);\n\n for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {\n const codeLineSel = format('.{0}[{1}=\"{2}\"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i]);\n const codeLineElt = hljsLnTable.querySelector(codeLineSel);\n\n selectedText += '\\n' + codeLineElt.textContent;\n }\n\n selectedText += '\\n' + lastLineText;\n\n return selectedText;\n // single copied line case\n } else {\n return selectionText;\n }\n }\n\n // ensure consistent code copy/paste behavior across all browsers\n // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)\n d.addEventListener('copy', function (e) {\n // get current selection\n const selection = w.getSelection()!;\n\n // override behavior when one wants to copy line of codes\n if (isHljsLnCodeDescendant(selection.anchorNode)) {\n let selectionText;\n\n // workaround an issue with Microsoft Edge as copied line breaks\n // are removed otherwise from the selection string\n if (w.navigator.userAgent.indexOf('Edge') !== -1) {\n selectionText = edgeGetSelectedCodeLines(selection);\n } else {\n // other browsers can directly use the selection string\n selectionText = selection.toString();\n }\n\n e.clipboardData!.setData('text/plain', selectionText);\n e.preventDefault();\n }\n });\n\n function addStyles() {\n const css = d.createElement('style');\n\n css.type = 'text/css';\n css.innerHTML = format(\n '.{0}{border-collapse:collapse}' + '.{0} td{padding:0}' + '.{1}:before{content:attr({2})}',\n [\n TABLE_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME\n ]\n );\n d.getElementsByTagName('head')[0].appendChild(css);\n }\n\n function initLineNumbersOnLoad(options) {\n if (d.readyState === 'interactive' || d.readyState === 'complete') {\n documentReady(options);\n } else {\n w.addEventListener('DOMContentLoaded', function () {\n documentReady(options);\n });\n }\n }\n\n function documentReady(options) {\n try {\n const blocks = d.querySelectorAll('code.hljs,code.nohighlight');\n\n for (const i in blocks) {\n if (blocks.hasOwnProperty(i)) {\n if (!isPluginDisabledForBlock(blocks[i])) {\n lineNumbersBlock(blocks[i], options);\n }\n }\n }\n } catch (e) {\n console.error('LineNumbers error: ', e);\n }\n }\n\n function isPluginDisabledForBlock(element) {\n return element.classList.contains('nohljsln');\n }\n\n function lineNumbersBlock(element, options) {\n if (typeof element !== 'object') return;\n\n async(function () {\n element.innerHTML = lineNumbersInternal(element, options);\n });\n }\n\n function lineNumbersBlockSync(element, options) {\n if (typeof element !== 'object') return;\n\n element.innerHTML = lineNumbersInternal(element, options);\n }\n\n function lineNumbersValue(value, options) {\n if (typeof value !== 'string') return;\n\n const element = d.createElement('code');\n\n element.innerHTML = value;\n\n return lineNumbersInternal(element, options);\n }\n\n function lineNumbersInternal(element, options) {\n const internalOptions = mapOptions(element, options);\n\n duplicateMultilineNodes(element);\n\n return addLineNumbersBlockFor(element.innerHTML, internalOptions);\n }\n\n function addLineNumbersBlockFor(inputHtml, options) {\n const lines = getLines(inputHtml);\n\n // if last line contains only carriage return remove it\n if (lines[lines.length - 1].trim() === '') {\n lines.pop();\n }\n\n if (lines.length > 1 || options.singleLine) {\n let html = '';\n\n for (let i = 0, l = lines.length; i < l; i++) {\n html += format(\n '<tr>' +\n '<td class=\"{0} {1}\" {3}=\"{5}\">' +\n '<div class=\"{2}\" {3}=\"{5}\"></div>' +\n '</td>' +\n '<td class=\"{0} {4}\" {3}=\"{5}\">' +\n '{6}' +\n '</td>' +\n '</tr>',\n [\n LINE_NAME,\n NUMBERS_BLOCK_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME,\n CODE_BLOCK_NAME,\n i + options.startFrom,\n lines[i].length > 0 ? lines[i] : ' '\n ]\n );\n }\n\n return format('<table class=\"{0}\">{1}</table>', [TABLE_NAME, html]);\n }\n\n return inputHtml;\n }\n\n /**\n * @param {HTMLElement} element Code block.\n * @param {Object} options External API options.\n * @returns {Object} Internal API options.\n */\n function mapOptions(element, options) {\n options = options || {};\n\n return {\n singleLine: getSingleLineOption(options),\n startFrom: getStartFromOption(element, options)\n };\n }\n\n function getSingleLineOption(options) {\n const defaultValue = false;\n\n if (options.singleLine) {\n return options.singleLine;\n }\n\n return defaultValue;\n }\n\n function getStartFromOption(element, options) {\n const defaultValue = 1;\n let startFrom = defaultValue;\n\n if (isFinite(options.startFrom)) {\n startFrom = options.startFrom;\n }\n\n // can be overridden because local option is priority\n const value = getAttribute(element, 'data-ln-start-from');\n\n if (value !== null) {\n startFrom = toNumber(value, defaultValue);\n }\n\n return startFrom;\n }\n\n /**\n * Recursive method for fix multi-line elements implementation in highlight.js\n * Doing deep passage on child nodes.\n * @param {HTMLElement} element\n */\n function duplicateMultilineNodes(element) {\n const nodes = element.childNodes;\n\n for (const node in nodes) {\n if (nodes.hasOwnProperty(node)) {\n const child = nodes[node];\n\n if (getLinesCount(child.textContent) > 0) {\n if (child.childNodes.length > 0) {\n duplicateMultilineNodes(child);\n } else {\n duplicateMultilineNode(child.parentNode);\n }\n }\n }\n }\n }\n\n /**\n * Method for fix multi-line elements implementation in highlight.js\n * @param {HTMLElement} element\n */\n function duplicateMultilineNode(element) {\n const className = element.className;\n\n if (!/hljs-/.test(className)) return;\n\n const lines = getLines(element.innerHTML);\n\n let result = '';\n\n for (let i = 0; i < lines.length; i++) {\n const lineText = lines[i].length > 0 ? lines[i] : ' ';\n\n result += format('<span class=\"{0}\">{1}</span>\\n', [className, lineText]);\n }\n\n element.innerHTML = result.trim();\n }\n\n function getLines(text) {\n if (text.length === 0) return [];\n\n return text.split(BREAK_LINE_REGEXP);\n }\n\n function getLinesCount(text) {\n return (text.trim().match(BREAK_LINE_REGEXP) || []).length;\n }\n\n ///\n /// HELPERS\n ///\n\n function async(func) {\n w.setTimeout(func, 0);\n }\n\n /**\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\n * @param {string} format\n * @param {array} args\n */\n function format(format, args) {\n return format.replace(/\\{(\\d+)\\}/g, function (m, n) {\n return args[n] !== undefined ? args[n] : m;\n });\n }\n\n /**\n * @param {HTMLElement} element Code block.\n * @param {String} attrName Attribute name.\n * @returns {String} Attribute value or empty.\n */\n function getAttribute(element, attrName) {\n return element.hasAttribute(attrName) ? element.getAttribute(attrName) : null;\n }\n\n /**\n * @param {String} str Source string.\n * @param {Number} fallback Fallback value.\n * @returns Parsed number or fallback value.\n */\n function toNumber(str, fallback) {\n if (!str) return fallback;\n const number = Number(str);\n\n return isFinite(number) ? number : fallback;\n }\n }\n}\n","import { A11yModule, FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { Platform } from '@angular/cdk/platform';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n Output,\n Provider,\n Renderer2,\n SecurityContext,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';\nimport {\n KBQ_LOCALE_SERVICE,\n KBQ_WINDOW,\n KbqCodeBlockLocaleConfiguration,\n KbqComponentColors,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTabsModule } from '@koobiq/components/tabs';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { debounceTime, fromEvent, merge } from 'rxjs';\nimport { KbqCodeBlockHighlight } from './code-block-highlight';\nimport { KbqCodeBlockFile } from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_CODE_BLOCK_LOCALE_CONFIGURATION = new InjectionToken<KbqCodeBlockLocaleConfiguration>(\n 'KBQ_CODE_BLOCK_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.codeBlock }\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_LOCALE_CONFIGURATION`. */\nexport const kbqCodeBlockLocaleConfigurationProvider = (configuration: KbqCodeBlockLocaleConfiguration): Provider => ({\n provide: KBQ_CODE_BLOCK_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n/** Fallback file name for code block if file name is not specified. */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_NAME = new InjectionToken<string>('KBQ_CODE_BLOCK_FALLBACK_FILE_NAME', {\n factory: () => 'code'\n});\n\n/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_NAME`. */\nexport const kbqCodeBlockFallbackFileNameProvider = (fileName: string): Provider => ({\n provide: KBQ_CODE_BLOCK_FALLBACK_FILE_NAME,\n useValue: fileName\n});\n\n/**\n * Component which highlights blocks of code.\n */\n@Component({\n standalone: true,\n imports: [\n KbqTabsModule,\n KbqButtonModule,\n KbqCodeBlockHighlight,\n A11yModule,\n CdkScrollableModule,\n KbqToolTipModule,\n KbqIconModule\n ],\n selector: 'kbq-code-block',\n exportAs: 'kbqCodeBlock',\n templateUrl: './code-block.html',\n styleUrls: ['./code-block.scss', './code-block-tokens.scss'],\n host: {\n class: 'kbq-code-block',\n '[class.kbq-code-block_filled]': 'filled',\n '[class.kbq-code-block_outline]': '!filled',\n '[class.kbq-code-block_hide-line-numbers]': '!lineNumbers',\n '[class.kbq-code-block_hide-tabs]': 'hideTabs',\n '[class.kbq-code-block_no-border]': 'noBorder || filled',\n '[class.kbq-code-block_soft-wrap]': 'softWrap',\n '[class.kbq-code-block_view-all]': 'viewAll'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqCodeBlock implements AfterViewInit {\n @ViewChild('copyButtonTooltip') private readonly copyButtonTooltip?: KbqTooltipTrigger;\n /**\n * Reference to the scrollable code content.\n */\n @ViewChild(CdkScrollable) readonly scrollableCodeContent: CdkScrollable;\n\n /** Whether to display line numbers. */\n @Input({ transform: booleanAttribute }) lineNumbers = false;\n\n /** Whether the code block should be filled. */\n @Input({ transform: booleanAttribute }) filled: boolean = false;\n\n /** Added soft wrap toggle button. */\n @Input({ transform: booleanAttribute }) canToggleSoftWrap: boolean = false;\n\n /** Whether sequences of whitespace should be preserved. */\n @Input({ transform: booleanAttribute }) softWrap: boolean = false;\n\n /**\n * Output to support two-way binding on `[(softWrap)]` property.\n */\n @Output() readonly softWrapChange = new EventEmitter<boolean>();\n\n /**\n * Allows to view all the code, otherwise it will be hidden.\n * Works only with `maxHeight` property.\n */\n @Input({ transform: booleanAttribute }) viewAll: boolean = false;\n\n /**\n * Output to support two-way binding on `[(viewAll)]` property.\n */\n @Output() readonly viewAllChange = new EventEmitter<boolean>();\n\n /**\n * Maximum height of the code block content, other parts will be hidden.\n * Can be toggled by `viewAll` property.\n */\n @Input({ transform: numberAttribute }) maxHeight: number;\n\n /**\n * @docs-private\n */\n protected get calculatedMaxHeight(): number | null {\n return this.maxHeight > 0 && !this.viewAll ? this.maxHeight : null;\n }\n\n /**\n * @deprecated Will be removed in next major release, use `canDownload` instead.\n *\n * @docs-private\n */\n @Input({ transform: booleanAttribute })\n set canLoad(value: boolean) {\n this.canDownload = value;\n }\n\n /** Added download code button. */\n @Input({ transform: booleanAttribute }) canDownload: boolean = false;\n\n /** Added copy code button. */\n @Input({ transform: booleanAttribute }) canCopy: boolean = true;\n\n /**\n * @deprecated Will be removed in next major release, use `files` instead.\n */\n @Input()\n set codeFiles(files: KbqCodeBlockFile[]) {\n this.files = files;\n }\n\n /**\n * @TODO Mark as `required`, after removing `codeFiles`\n *\n * Files to display.\n */\n @Input()\n get files(): KbqCodeBlockFile[] {\n return this._files;\n }\n\n set files(files: KbqCodeBlockFile[]) {\n this._files = files;\n\n if (this._files.length < this.activeFileIndex) {\n this.onSelectedTabChange(0);\n }\n\n if (this._files.length === 1 && !this._files[0].filename) {\n this.hideTabs = true;\n }\n }\n\n private _files: KbqCodeBlockFile[] = [];\n\n /** Defines which file (index) is active. */\n @Input({ transform: numberAttribute }) activeFileIndex = 0;\n\n /**\n * Output to support two-way binding on `[(activeFileIndex)]` property.\n */\n @Output() readonly activeFileIndexChange = new EventEmitter<number>();\n\n /** Whether to hide border. */\n @Input({ transform: booleanAttribute }) noBorder: boolean = false;\n\n /**\n * Whether to hide header tabs.\n * Always `true` if there is only one file without filename.\n * Makes actionbar floating if tabs are hidden.\n */\n @Input({ transform: booleanAttribute })\n get hideTabs(): boolean {\n return this._hideTabs;\n }\n\n set hideTabs(value: boolean) {\n this._hideTabs = value;\n\n this.setupActionbarDisplay();\n }\n\n private _hideTabs: boolean = false;\n\n /**\n * Component locale configuration.\n *\n * @docs-private\n */\n protected get localeConfiguration(): KbqCodeBlockLocaleConfiguration {\n return this._localeConfiguration;\n }\n\n private _localeConfiguration: KbqCodeBlockLocaleConfiguration = inject(KBQ_CODE_BLOCK_LOCALE_CONFIGURATION);\n\n /**\n * Code content tab index.\n *\n * @docs-private\n */\n protected get codeContentTabIndex(): number {\n return this.canCodeContentBeFocused ? 0 : -1;\n }\n\n /**\n * Determines whether the code content can be focused.\n *\n * This checks if the scrollable code content element is present,\n * has a scroll, and the calculated maximum height is not set.\n */\n private get canCodeContentBeFocused(): boolean {\n const element = this.scrollableCodeContent?.getElementRef().nativeElement;\n\n return element && this.hasScroll(element) && !this.calculatedMaxHeight;\n }\n\n /**\n * @docs-private\n */\n protected readonly componentColor = KbqComponentColors;\n /**\n * @docs-private\n */\n protected readonly buttonStyle = KbqButtonStyles;\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly renderer = inject(Renderer2);\n private readonly platform = inject(Platform);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly clipboard = inject(Clipboard);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly document = inject<Document>(DOCUMENT);\n /**\n * @docs-private\n */\n protected readonly fallbackFileName = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_NAME);\n private readonly window = inject(KBQ_WINDOW);\n\n constructor() {\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n }\n\n ngAfterViewInit(): void {\n this.handleScroll();\n this.handleHover();\n\n // Setup initial actionbar display state\n this.setupActionbarDisplay();\n\n this.copyButtonTooltip?.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isVisible) => {\n if (isVisible) {\n this.copyButtonTooltip!.content = this.localeConfiguration.copyTooltip;\n }\n });\n\n // Should call `markForCheck` to ensure the `codeContentTabIndex` is updated after the view is initialized,\n // for correct focus behavior.\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Toggles the `viewAll` property.\n *\n * When `viewAll` is set to `true`, the content of the code block will be\n * displayed in its entirety. When set to `false`, the content will be\n * limited to the `maxHeight` property. If the content exceeds the\n * `maxHeight`, it will be scrolled to the top and the `viewAll` button\n * will be displayed.\n */\n toggleViewAll(): void {\n this.viewAll = !this.viewAll;\n\n if (!this.viewAll) {\n this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });\n }\n\n this.viewAllChange.emit(this.viewAll);\n }\n\n /**\n * Toggles `softWrap` property.\n *\n * When `softWrap` is set to `true`, the content of the code block will be\n * wrapped if it exceeds the height of the component. When set to `false`\n * the content will not be wrapped.\n */\n toggleSoftWrap(): void {\n this.softWrap = !this.softWrap;\n this.softWrapChange.emit(this.softWrap);\n }\n\n /**\n * Handles the change of the selected tab by updating the active file index\n * and scrolling to the top of the scrollable content.\n *\n * @param index - The index of the newly selected tab.\n *\n * @docs-private\n */\n protected onSelectedTabChange(index: number): void {\n if (this.activeFileIndex !== index) {\n this.activeFileIndex = index;\n this.activeFileIndexChange.emit(this.activeFileIndex);\n this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });\n }\n }\n\n /**\n * Handles the hover event on the code block element and updates the actionbar display accordingly.\n */\n private handleHover(): void {\n merge(\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter'),\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseleave')\n )\n .pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.setupActionbarDisplay(event?.type === 'mouseenter');\n });\n }\n\n /**\n * Handles the scroll event on the scrollable code content element and updates the header shadow accordingly.\n */\n private handleScroll(): void {\n this.scrollableCodeContent\n .elementScrolled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.setupHeaderShadow(this.scrollableCodeContent.measureScrollOffset('top') > 0);\n });\n }\n\n /**\n * Adds or removes the shadow class from the code block based on the specified condition.\n *\n * @param shouldShowShadow - A boolean indicating whether to add or remove the shadow class.\n */\n private setupHeaderShadow(shouldShowShadow: boolean): void {\n const className = 'kbq-code-block_header-with-shadow';\n\n if (shouldShowShadow) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, className);\n }\n }\n\n /**\n * Adds or removes the actionbar display class from the code block based on the specified condition.\n *\n * The actionbar is always visible on mobile devices and when the tabs are visible.\n * Otherwise, the actionbar is only visible when the mouse is hovered over the code block.\n *\n * @param shouldShowActionbar - A boolean indicating whether the actionbar should be visible.\n */\n private setupActionbarDisplay(shouldShowActionbar?: boolean): void {\n const className = 'kbq-code-block_show-actionbar';\n\n // Should always show actionbar on Mobile devices\n if (this.platform.IOS || this.platform.ANDROID) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n\n return;\n }\n\n // Should always show actionbar when tabs are visible\n if (!this.hideTabs) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n\n return;\n }\n\n if (typeof shouldShowActionbar === 'undefined') {\n return;\n }\n\n if (shouldShowActionbar) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, className);\n }\n }\n\n /** Whether the element has scroll. */\n private hasScroll({ scrollHeight, scrollWidth, clientHeight, clientWidth }: HTMLElement): boolean {\n return scrollHeight > clientHeight || scrollWidth > clientWidth;\n }\n\n /**\n * Handles the enter keydown event on `viewAll` button.\n *\n * @docs-private\n */\n protected onViewAllEnterKeydown(event: Event): void {\n event.preventDefault();\n\n this.toggleViewAll();\n\n if (this.canCodeContentBeFocused) {\n this.focusMonitor.focusVia(this.scrollableCodeContent.getElementRef().nativeElement, 'keyboard');\n }\n }\n\n private updateLocaleParams = (): void => {\n this._localeConfiguration = this.localeService?.getParams('codeBlock');\n\n this.changeDetectorRef.markForCheck();\n };\n\n /**\n * Copies the file code to the clipboard.\n *\n * If the copy was successful, the copy button tooltip content is updated\n * to show the \"copied\" message.\n *\n * @docs-private\n */\n protected copyCode(): void {\n const file = this.files[this.activeFileIndex];\n\n if (this.clipboard.copy(file.content) && this.copyButtonTooltip) {\n this.copyButtonTooltip.content = this.localeConfiguration.copiedTooltip;\n }\n }\n\n /**\n * Opens the file link in a new window.\n *\n * @docs-private\n */\n protected openLink(): void {\n const file = this.files[this.activeFileIndex];\n const safeURL = this.domSanitizer.sanitize(SecurityContext.URL, file.link!);\n\n if (safeURL) {\n this.window.open(safeURL.toString(), '_blank');\n }\n }\n\n /**\n * Downloads the file as a blob.\n *\n * Creates a link with a blob as href and the file name as download attribute.\n * Then simulates a click event on the link to initiate the download.\n *\n * @docs-private\n */\n protected downloadCode(): void {\n const file = this.files[this.activeFileIndex];\n const blob = new Blob([file.content], { type: 'text/plain' });\n const url = URL.createObjectURL(blob);\n const link = this.document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', file.filename || this.fallbackFileName);\n link.click();\n }\n}\n","@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n @if (!hideTabs) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files; track file; let index = $index) {\n <div\n kbqTabLink\n [active]=\"activeFileIndex === index\"\n [disabled]=\"files.length === 1\"\n (click)=\"onSelectedTabChange(index)\"\n >\n {{ file.filename || fallbackFileName }}\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\n @if (hideTabs) {\n <div class=\"kbq-code-block__actionbar__fade-gradient\"></div>\n }\n\n <div class=\"kbq-code-block__actionbar__button-stack\">\n @if (canToggleSoftWrap) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__soft-wrap-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"\n softWrap ? localeConfiguration.softWrapOffTooltip : localeConfiguration.softWrapOnTooltip\n \"\n (click)=\"toggleSoftWrap()\"\n >\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n </button>\n }\n\n @if (canDownload) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.downloadTooltip\"\n (click)=\"downloadCode()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n @if (canCopy) {\n <div #copyButtonTooltip=\"kbqTooltip\" [kbqTooltip]=\"localeConfiguration.copyTooltip\">\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__copy-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"copyCode()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n </div>\n }\n\n @if (file.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.openExternalSystemTooltip\"\n (click)=\"openLink()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n </div>\n </div>\n</div>\n\n<div\n #tabPanel=\"kbqTabNavPanel\"\n cdkMonitorElementFocus\n cdkScrollable\n kbqTabNavPanel\n class=\"kbq-code-block__main kbq-scrollbar\"\n [style.max-height.px]=\"calculatedMaxHeight\"\n [tabIndex]=\"codeContentTabIndex\"\n>\n <pre\n class=\"kbq-code-block__pre\"\n ><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n\n @if (maxHeight) {\n <div\n class=\"kbq-code-block__view-all\"\n [class.kbq-code-block__view-all_collapsed]=\"!viewAll\"\n [class.kbq-code-block__view-all_expanded]=\"viewAll\"\n >\n <div class=\"kbq-code-block__view-all__wrapper\">\n <button\n kbq-button\n class=\"kbq-code-block__view-all__button\"\n [color]=\"componentColor.Theme\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"toggleViewAll()\"\n (keydown.enter)=\"onViewAllEnterKeydown($event)\"\n >\n @if (viewAll) {\n <i kbq-icon=\"kbq-chevron-up_16\"></i>\n {{ localeConfiguration.viewLessText }}\n } @else {\n <i kbq-icon=\"kbq-chevron-down_16\"></i>\n {{ localeConfiguration.viewAllText }}\n }\n </button>\n </div>\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { KbqCodeBlock } from './code-block';\n\nconst COMPONENTS = [\n KbqCodeBlock\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqCodeBlockModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}