@koobiq/components 21.0.1 → 21.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/badge/_badge-theme.scss +31 -0
  2. package/breadcrumbs/breadcrumbs.scss +5 -1
  3. package/checkbox/_checkbox-theme.scss +0 -17
  4. package/checkbox/checkbox-tokens.scss +0 -4
  5. package/code-block/_code-block-theme.scss +7 -6
  6. package/code-block/code-block-tokens.scss +8 -4
  7. package/code-block/code-block.scss +54 -32
  8. package/content-panel/content-panel-header.scss +2 -3
  9. package/content-panel/content-panel.scss +3 -0
  10. package/core/selection/pseudo-checkbox/pseudo-checkbox-tokens.scss +0 -2
  11. package/fesm2022/koobiq-components-accordion.mjs +4 -4
  12. package/fesm2022/koobiq-components-accordion.mjs.map +1 -1
  13. package/fesm2022/koobiq-components-actions-panel.mjs +10 -2
  14. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  15. package/fesm2022/koobiq-components-app-switcher.mjs +1 -1
  16. package/fesm2022/koobiq-components-app-switcher.mjs.map +1 -1
  17. package/fesm2022/koobiq-components-badge.mjs +2 -2
  18. package/fesm2022/koobiq-components-badge.mjs.map +1 -1
  19. package/fesm2022/koobiq-components-breadcrumbs.mjs +2 -2
  20. package/fesm2022/koobiq-components-breadcrumbs.mjs.map +1 -1
  21. package/fesm2022/koobiq-components-button-toggle.mjs +1 -1
  22. package/fesm2022/koobiq-components-button-toggle.mjs.map +1 -1
  23. package/fesm2022/koobiq-components-checkbox.mjs +18 -8
  24. package/fesm2022/koobiq-components-checkbox.mjs.map +1 -1
  25. package/fesm2022/koobiq-components-clamped-text.mjs +78 -10
  26. package/fesm2022/koobiq-components-clamped-text.mjs.map +1 -1
  27. package/fesm2022/koobiq-components-code-block.mjs +63 -379
  28. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  29. package/fesm2022/koobiq-components-content-panel.mjs +4 -4
  30. package/fesm2022/koobiq-components-content-panel.mjs.map +1 -1
  31. package/fesm2022/koobiq-components-core.mjs +300 -37
  32. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  33. package/fesm2022/koobiq-components-datepicker.mjs +151 -60
  34. package/fesm2022/koobiq-components-datepicker.mjs.map +1 -1
  35. package/fesm2022/koobiq-components-divider.mjs +3 -3
  36. package/fesm2022/koobiq-components-divider.mjs.map +1 -1
  37. package/fesm2022/koobiq-components-dropdown.mjs +3 -3
  38. package/fesm2022/koobiq-components-dropdown.mjs.map +1 -1
  39. package/fesm2022/koobiq-components-file-upload.mjs +17 -8
  40. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  41. package/fesm2022/koobiq-components-filter-bar.mjs +115 -36
  42. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  43. package/fesm2022/koobiq-components-flag.mjs +3 -3
  44. package/fesm2022/koobiq-components-flag.mjs.map +1 -1
  45. package/fesm2022/koobiq-components-form-field.mjs +90 -27
  46. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  47. package/fesm2022/koobiq-components-icon.mjs +2 -2
  48. package/fesm2022/koobiq-components-icon.mjs.map +1 -1
  49. package/fesm2022/koobiq-components-inline-edit.mjs +19 -2
  50. package/fesm2022/koobiq-components-inline-edit.mjs.map +1 -1
  51. package/fesm2022/koobiq-components-input.mjs +76 -17
  52. package/fesm2022/koobiq-components-input.mjs.map +1 -1
  53. package/fesm2022/koobiq-components-list.mjs +1 -1
  54. package/fesm2022/koobiq-components-list.mjs.map +1 -1
  55. package/fesm2022/koobiq-components-modal.mjs +3 -3
  56. package/fesm2022/koobiq-components-modal.mjs.map +1 -1
  57. package/fesm2022/koobiq-components-navbar.mjs +86 -25
  58. package/fesm2022/koobiq-components-navbar.mjs.map +1 -1
  59. package/fesm2022/koobiq-components-notification-center.mjs +4 -4
  60. package/fesm2022/koobiq-components-notification-center.mjs.map +1 -1
  61. package/fesm2022/koobiq-components-overflow-items.mjs +116 -38
  62. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  63. package/fesm2022/koobiq-components-popover.mjs +86 -7
  64. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  65. package/fesm2022/koobiq-components-radio.mjs +41 -19
  66. package/fesm2022/koobiq-components-radio.mjs.map +1 -1
  67. package/fesm2022/koobiq-components-search-expandable.mjs +29 -17
  68. package/fesm2022/koobiq-components-search-expandable.mjs.map +1 -1
  69. package/fesm2022/koobiq-components-select.mjs +49 -12
  70. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  71. package/fesm2022/koobiq-components-sidepanel.mjs +198 -186
  72. package/fesm2022/koobiq-components-sidepanel.mjs.map +1 -1
  73. package/fesm2022/koobiq-components-splitter.mjs +49 -25
  74. package/fesm2022/koobiq-components-splitter.mjs.map +1 -1
  75. package/fesm2022/koobiq-components-tabs.mjs +30 -11
  76. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  77. package/fesm2022/koobiq-components-tags.mjs +1 -1
  78. package/fesm2022/koobiq-components-tags.mjs.map +1 -1
  79. package/fesm2022/koobiq-components-textarea.mjs +28 -11
  80. package/fesm2022/koobiq-components-textarea.mjs.map +1 -1
  81. package/fesm2022/koobiq-components-time-range.mjs +2 -2
  82. package/fesm2022/koobiq-components-time-range.mjs.map +1 -1
  83. package/fesm2022/koobiq-components-timepicker.mjs +71 -16
  84. package/fesm2022/koobiq-components-timepicker.mjs.map +1 -1
  85. package/fesm2022/koobiq-components-timezone.mjs +2 -2
  86. package/fesm2022/koobiq-components-timezone.mjs.map +1 -1
  87. package/fesm2022/koobiq-components-toast.mjs +2 -2
  88. package/fesm2022/koobiq-components-toast.mjs.map +1 -1
  89. package/fesm2022/koobiq-components-toggle.mjs +25 -9
  90. package/fesm2022/koobiq-components-toggle.mjs.map +1 -1
  91. package/fesm2022/koobiq-components-tooltip.mjs +90 -17
  92. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  93. package/fesm2022/koobiq-components-top-bar.mjs +27 -7
  94. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  95. package/fesm2022/koobiq-components-tree-select.mjs +4 -4
  96. package/fesm2022/koobiq-components-tree-select.mjs.map +1 -1
  97. package/fesm2022/koobiq-components-tree.mjs +71 -27
  98. package/fesm2022/koobiq-components-tree.mjs.map +1 -1
  99. package/file-upload/_file-upload-theme.scss +0 -12
  100. package/file-upload/file-upload-tokens.scss +0 -1
  101. package/file-upload/file-upload.scss +0 -1
  102. package/filter-bar/_filter-bar-theme.scss +7 -8
  103. package/filter-bar/filter-bar.scss +0 -1
  104. package/filter-bar/pipes/base-pipe.scss +36 -2
  105. package/filter-bar/pipes/pipe-multi-tree-select.scss +27 -0
  106. package/form-field/_fieldset-theme.scss +2 -7
  107. package/form-field/_form-field-theme.scss +9 -22
  108. package/form-field/_hint-theme.scss +20 -0
  109. package/form-field/fieldset-tokens.scss +0 -1
  110. package/form-field/fieldset.scss +0 -3
  111. package/form-field/form-field-tokens.scss +1 -1
  112. package/form-field/form-field.scss +9 -0
  113. package/form-field/hint-tokens.scss +3 -0
  114. package/modal/modal.scss +2 -0
  115. package/navbar/_navbar-item_vertical.scss +48 -2
  116. package/navbar/_navbar-theme.scss +11 -3
  117. package/navbar/navbar-item.scss +17 -0
  118. package/navbar/navbar-tokens.scss +3 -0
  119. package/package.json +4 -4
  120. package/popover/popover.scss +1 -1
  121. package/radio/_radio-theme.scss +0 -30
  122. package/radio/radio-tokens.scss +0 -2
  123. package/schematics/migrations/deprecated-icons/README.md +21 -5
  124. package/schematics/migrations/deprecated-icons/index.cjs +8 -22
  125. package/schematics/migrations/deprecated-icons/schema.json +1 -1
  126. package/schematics/migrations/icons-replacement/README.md +16 -2
  127. package/schematics/migrations/icons-replacement/index.cjs +18 -16
  128. package/schematics/migrations/icons-replacement/schema.json +12 -3
  129. package/schematics/migrations/new-icons-pack/README.md +37 -25
  130. package/schematics/migrations/new-icons-pack/index.cjs +22 -32
  131. package/schematics/migrations/new-icons-pack/replacement.json +2 -14
  132. package/schematics/migrations/new-icons-pack/schema.json +3 -3
  133. package/schematics/ng-add/index.cjs +4 -4
  134. package/schematics/utils/custom-data.cjs +64 -0
  135. package/schematics/utils/icon-migration.cjs +9 -3
  136. package/schematics/utils/messages.cjs +4 -0
  137. package/schematics/utils/package-config.cjs +19 -0
  138. package/select/select.scss +7 -0
  139. package/tabs/_tabs-common.scss +23 -0
  140. package/textarea/textarea-tokens.scss +4 -1
  141. package/toast/toast.component.scss +1 -0
  142. package/toggle/_toggle-theme.scss +0 -17
  143. package/tooltip/tooltip.scss +1 -1
  144. package/top-bar/top-bar-tokens.scss +1 -0
  145. package/top-bar/top-bar.scss +10 -0
  146. package/types/koobiq-components-accordion.d.ts +25 -0
  147. package/types/koobiq-components-button-toggle.d.ts +6 -0
  148. package/types/koobiq-components-checkbox.d.ts +30 -0
  149. package/types/koobiq-components-clamped-text.d.ts +16 -3
  150. package/types/koobiq-components-code-block.d.ts +17 -3
  151. package/types/koobiq-components-core.d.ts +226 -13
  152. package/types/koobiq-components-datepicker.d.ts +28 -1
  153. package/types/koobiq-components-divider.d.ts +28 -10
  154. package/types/koobiq-components-dropdown.d.ts +19 -0
  155. package/types/koobiq-components-filter-bar.d.ts +77 -4
  156. package/types/koobiq-components-flag.d.ts +18 -0
  157. package/types/koobiq-components-form-field.d.ts +87 -6
  158. package/types/koobiq-components-icon.d.ts +15 -0
  159. package/types/koobiq-components-inline-edit.d.ts +8 -1
  160. package/types/koobiq-components-input.d.ts +22 -3
  161. package/types/koobiq-components-list.d.ts +6 -0
  162. package/types/koobiq-components-modal.d.ts +7 -0
  163. package/types/koobiq-components-navbar.d.ts +71 -7
  164. package/types/koobiq-components-notification-center.d.ts +13 -0
  165. package/types/koobiq-components-overflow-items.d.ts +26 -2
  166. package/types/koobiq-components-popover.d.ts +38 -3
  167. package/types/koobiq-components-radio.d.ts +30 -0
  168. package/types/koobiq-components-search-expandable.d.ts +10 -0
  169. package/types/koobiq-components-select.d.ts +36 -4
  170. package/types/koobiq-components-sidepanel.d.ts +52 -1
  171. package/types/koobiq-components-splitter.d.ts +13 -4
  172. package/types/koobiq-components-tabs.d.ts +4 -0
  173. package/types/koobiq-components-tags.d.ts +6 -0
  174. package/types/koobiq-components-textarea.d.ts +9 -2
  175. package/types/koobiq-components-timepicker.d.ts +15 -0
  176. package/types/koobiq-components-toggle.d.ts +30 -0
  177. package/types/koobiq-components-tooltip.d.ts +55 -10
  178. package/types/koobiq-components-top-bar.d.ts +11 -3
  179. package/types/koobiq-components-tree-select.d.ts +12 -0
  180. package/types/koobiq-components-tree.d.ts +37 -2
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-code-block.mjs","sources":["../../../packages/components/code-block/highlightjs-line-numbers.ts","../../../packages/components/code-block/code-block-highlight-js-loader.ts","../../../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":["/**\n * The highlight.js line numbers plugin, kept apart from the code that calls it until code blocks number their lines\n * on their own.\n *\n * This function 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 * @internal\n */\nexport function 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 // eslint-disable-next-line no-console\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 // eslint-disable-next-line no-console\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","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable, isDevMode } from '@angular/core';\nimport { KBQ_WINDOW } from '@koobiq/components/core';\nimport type { HLJSApi } from 'highlight.js';\nimport plaintext from 'highlight.js/lib/languages/plaintext';\nimport type { KbqCodeBlockHighlightJsConfig } from './code-block-highlight';\nimport { highlightJSLineNumbersPlugin } from './highlightjs-line-numbers';\n\n// The core and not the full bundle: a bundler emits a chunk for every `import()` it finds, called or not, so the\n// full bundle has to be imported by the application that asks for it. An instance of its own, as the module is one\n// object for the whole process, the full bundle included: the languages one configuration registers on it would reach\n// every other, and every later server render.\nconst defaultHljsLoader = async (): Promise<{ default: HLJSApi }> => ({\n default: (await import('highlight.js/lib/core')).default.newInstance()\n});\n\n// The key of the default configuration: `config ?? {}` would make a new key on every call.\nconst DEFAULT_CONFIG: KbqCodeBlockHighlightJsConfig = {};\n\n/**\n * Language the loader registers on every instance, the fallback of a file the code block cannot highlight otherwise.\n *\n * @internal\n */\nexport const PLAIN_TEXT_LANGUAGE = 'plaintext';\n\n/**\n * Options of the line numbers table.\n *\n * @internal\n */\nexport type KbqCodeBlockLineNumbersOptions = { startFrom: number; singleLine: boolean };\n\n/** The part of the API the line numbers plugin attaches to its host that the code block calls. */\ntype LineNumbersApi = {\n lineNumbersValue(value: string, options: KbqCodeBlockLineNumbersOptions): string;\n};\n\n/**\n * Loads highlight.js once per configuration and installs its line numbers plugin once per application.\n *\n * The configuration is passed in rather than injected: `KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG` may be provided by a\n * component or a route, where a root service would not see it. Loads are shared by the identity of the configuration,\n * so the code blocks under one provider share one load.\n *\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqCodeBlockHighlightJsLoader {\n private readonly document = inject<Document>(DOCUMENT);\n private readonly window = inject(KBQ_WINDOW);\n // Weak, so that a configuration made for one component instance goes away with it.\n private readonly loads = new WeakMap<KbqCodeBlockHighlightJsConfig, Promise<HLJSApi | null>>();\n private readonly instances = new WeakMap<KbqCodeBlockHighlightJsConfig, HLJSApi>();\n private lineNumbers: LineNumbersApi | null = null;\n\n /** The instance loaded for `config`, or `null` until it is. */\n loaded(config: KbqCodeBlockHighlightJsConfig | null): HLJSApi | null {\n return this.instances.get(config ?? DEFAULT_CONFIG) ?? null;\n }\n\n /**\n * Loads highlight.js for `config`, sharing the load in flight. A failure resolves to `null` rather than rejecting,\n * since the callers have nowhere to send a rejection, and is forgotten, so that the next file change tries again.\n */\n load(config: KbqCodeBlockHighlightJsConfig | null): Promise<HLJSApi | null> {\n const key = config ?? DEFAULT_CONFIG;\n let loading = this.loads.get(key);\n\n if (!loading) {\n loading = this.importInstance(key).then(\n (instance) => {\n this.instances.set(key, instance);\n\n return instance;\n },\n (error: unknown) => {\n this.loads.delete(key);\n\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn('[KbqCodeBlock] Failed to load highlight.js.', error);\n }\n\n return null;\n }\n );\n this.loads.set(key, loading);\n }\n\n return loading;\n }\n\n /** Wraps highlighted markup in the line numbers table. */\n addLineNumbers(html: string, options: KbqCodeBlockLineNumbersOptions): string {\n // The plugin cannot take empty markup: it reads the last of no lines.\n return html ? this.lineNumbersPlugin().lineNumbersValue(html, options) : html;\n }\n\n private async importInstance({ core, languages = {} }: KbqCodeBlockHighlightJsConfig): Promise<HLJSApi> {\n const entries = Object.entries(languages);\n // The languages do not need the core to load, so they load alongside it.\n const [{ default: instance }, loaded] = await Promise.all([\n (core ?? defaultHljsLoader)(),\n Promise.all(entries.map(([, loader]) => loader()))\n ]);\n\n entries.forEach(([name], index) => instance.registerLanguage(name, loaded[index].default));\n\n // The directive falls back to plain text, and highlight.js throws on a language it has not registered, as the\n // core has none.\n if (!instance.getLanguage(PLAIN_TEXT_LANGUAGE)) instance.registerLanguage(PLAIN_TEXT_LANGUAGE, plaintext);\n\n return instance;\n }\n\n /**\n * The plugin appends a `<style>` to `<head>` and registers a document `copy` listener, and removes neither, so it\n * is installed once, for the lifetime of the application.\n */\n private lineNumbersPlugin(): LineNumbersApi {\n if (!this.lineNumbers) {\n const window = this.window;\n // The plugin attaches its API to `w.hljs` and reads nothing else from `w` but the selection and the user\n // agent. A host of its own keeps the plugin off the highlight.js module, which every server render in the\n // process shares, and off the global `window.hljs`.\n const host = {\n hljs: {},\n getSelection: () => window.getSelection(),\n get navigator() {\n return window.navigator;\n }\n };\n\n highlightJSLineNumbersPlugin(this.document, host as unknown as Window);\n this.lineNumbers = host.hljs as LineNumbersApi;\n }\n\n return this.lineNumbers;\n }\n}\n","import {\n booleanAttribute,\n Directive,\n effect,\n inject,\n InjectionToken,\n input,\n isDevMode,\n numberAttribute,\n PendingTasks,\n Provider,\n Renderer2,\n SecurityContext,\n signal\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { kbqInjectNativeElement } from '@koobiq/components/core';\nimport type { HLJSApi, LanguageFn } from 'highlight.js';\nimport {\n KbqCodeBlockHighlightJsLoader,\n KbqCodeBlockLineNumbersOptions,\n PLAIN_TEXT_LANGUAGE\n} from './code-block-highlight-js-loader';\nimport { KbqCodeBlockFile } from './types';\n\n/**\n * Configuration of highlight.js, which highlights the code of a code block: how to load it and which languages to\n * register. Without a configuration, the code block loads the highlight.js core, which has no languages, and shows the\n * code as plain text. Provide it with `kbqCodeBlockHighlightJsConfigProvider`.\n */\nexport type KbqCodeBlockHighlightJsConfig = Partial<{\n /**\n * Lazy loader for the highlight.js instance. The core has no languages: register the ones the files use in\n * `languages`, or load all of them with `() => import('highlight.js')`, the full bundle of about 1 MB.\n * Defaults to `() => import('highlight.js/lib/core')`.\n */\n core: () => Promise<{ default: HLJSApi }>;\n\n /**\n * Map of language name to lazy loader for that language's LanguageFn. A language of highlight.js loads from\n * `highlight.js/lib/languages/<name>`, where `<name>` is the name of its file in\n * [src/languages](https://github.com/highlightjs/highlight.js/tree/11-stable/src/languages). Plain text needs no\n * entry: the code block registers it as the fallback language.\n */\n languages: Record<string, () => Promise<{ default: LanguageFn }>>;\n}>;\n\n/**\n * Injection token for configuring `KbqCodeBlockHighlightJsConfig`.\n */\nexport const KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG = new InjectionToken<KbqCodeBlockHighlightJsConfig>(\n 'KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG'\n);\n\n/**\n * Utility provider for `KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG`.\n *\n * @example\n * ```ts\n * providers: [\n * kbqCodeBlockHighlightJsConfigProvider({\n * languages: {\n * typescript: () => import('highlight.js/lib/languages/typescript'),\n * css: () => import('highlight.js/lib/languages/css'),\n * html: () => import('highlight.js/lib/languages/xml')\n * }\n * })\n * ]\n * ```\n */\nexport const kbqCodeBlockHighlightJsConfigProvider = (options: KbqCodeBlockHighlightJsConfig): Provider => ({\n provide: KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG,\n useValue: options\n});\n\n/**\n * Fallback language for code block if language is not supported/specified. It has to be registered in `languages` of\n * `KbqCodeBlockHighlightJsConfig`, unless it is plain text or the full bundle of highlight.js is loaded, or the code\n * block falls back to `plaintext`.\n *\n * See the [list of supported languages](https://github.com/highlightjs/highlight.js/blob/11-stable/SUPPORTED_LANGUAGES.md).\n */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE = new InjectionToken<string>(\n 'KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE',\n { factory: () => PLAIN_TEXT_LANGUAGE }\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/**\n * Marks the markup the directive has highlighted. Found while highlight.js has yet to load, it can only have come\n * from the server: once the browser has highlighted a file, highlight.js stays loaded. Not `data-highlighted`, which\n * highlight.js sets on the elements it highlights itself.\n */\nconst HIGHLIGHTED_MARKUP_ATTRIBUTE = 'data-highlighted-markup';\n\n/**\n * Directive which applies syntax highlighting to the code block content.\n *\n * @docs-private\n */\n@Directive({\n selector: 'code[kbqCodeBlockHighlight]',\n host: {\n class: 'hljs'\n },\n exportAs: 'kbqCodeBlockHighlight'\n})\nexport class KbqCodeBlockHighlight {\n private readonly nativeElement = kbqInjectNativeElement();\n private readonly renderer = inject(Renderer2);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly pendingTasks = inject(PendingTasks);\n private readonly loader = inject(KbqCodeBlockHighlightJsLoader);\n private readonly fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);\n // Read here and handed to the loader: a component or a route may provide a configuration of its own.\n private readonly config = inject(KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG, { optional: true });\n private readonly _pending = signal(false);\n\n /**\n * Whether syntax highlighting is pending.\n *\n * @docs-private\n */\n readonly pending = this._pending.asReadonly();\n\n /** The code file. */\n readonly file = input.required<KbqCodeBlockFile>();\n\n constructor() {\n effect((onCleanup) => {\n const file = this.file();\n // Captured here rather than read inside `highlight()`: on the load path that read happens in a\n // microtask, where nothing is tracked, so the effect's dependencies would otherwise depend on\n // which branch had run before.\n const lineNumbers = { startFrom: this.startFrom(), singleLine: this.singleLine() };\n const hljs = this.loader.loaded(this.config);\n\n if (hljs) {\n this.highlight(hljs, file, lineNumbers);\n\n return;\n }\n\n // The template leaves `<code>` empty, so that hydration does not look for a text node the highlighted\n // markup has replaced. The plain content stands in until highlighting lands, and for good if it fails.\n const keepsServerMarkup = this.nativeElement.hasAttribute(HIGHLIGHTED_MARKUP_ATTRIBUTE);\n\n if (keepsServerMarkup) {\n // Markup from the server stays instead, rather than flash plain text over code that arrived\n // highlighted. Once: the file of a later run is not the one it was rendered for.\n this.renderer.removeAttribute(this.nativeElement, HIGHLIGHTED_MARKUP_ATTRIBUTE);\n } else {\n this.renderer.setProperty(this.nativeElement, 'textContent', file.content);\n this.renderer.removeAttribute(this.nativeElement, 'data-language');\n }\n\n // A `file` that arrives while highlight.js is still loading must not be overwritten by the previous\n // one, and nothing may be highlighted through a directive that has gone away in the meantime.\n let cancelled = false;\n\n onCleanup(() => (cancelled = true));\n\n // `pending` holds the code block until the load settles, failed or not. A block with nothing highlighted to\n // show holds the application as well, so that server rendering and tests wait for the highlighted markup.\n // Markup kept from the server needs no task: it would keep a hydrated page unstable, and Angular replays\n // what a reader did before hydration only once the page is stable.\n this._pending.set(true);\n const removeTask = keepsServerMarkup ? null : this.pendingTasks.add();\n\n this.loader\n .load(this.config)\n .then((loaded) => {\n if (loaded && !cancelled) this.highlight(loaded, file, lineNumbers);\n })\n .finally(() => {\n // A run cancelled by a newer file leaves `pending` to that one.\n if (!cancelled) this._pending.set(false);\n\n removeTask?.();\n });\n });\n }\n\n /** The starting line number. */\n readonly startFrom = input<number, unknown>(1, { transform: numberAttribute });\n\n /** Whether to display line numbers for single line code block. */\n readonly singleLine = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n private highlight(hljs: HLJSApi, file: KbqCodeBlockFile, lineNumbers: KbqCodeBlockLineNumbersOptions): void {\n this._pending.set(true);\n\n let { language } = file;\n const isKnownLanguage = !!language && !!hljs.getLanguage(language);\n\n if (!language || !isKnownLanguage) {\n const fallbackLanguage = this.fallbackLanguage(hljs);\n\n // A file without a language is plain text by design; only a language the core lacks is a mistake.\n if (language) {\n this.warn(\n `[KbqCodeBlock] Unknown file language: \"${language}\". Fall back to \"${fallbackLanguage}\".`,\n file\n );\n }\n\n language = fallbackLanguage;\n }\n\n const {\n value: highlightedHTML,\n language: highlightedLanguage,\n illegal,\n relevance\n } = hljs.highlight(file.content, { language });\n\n if (illegal) {\n this.warn('[KbqCodeBlock] File content contains illegal characters.', file);\n }\n\n // Plain text and an empty file have no syntax to score, so their relevance is always 0. Plain text is compared by\n // definition: highlight.js returns the name the file gives, which may be an alias such as `text`.\n const isPlainText = hljs.getLanguage(language) === hljs.getLanguage(PLAIN_TEXT_LANGUAGE);\n\n if (relevance === 0 && isKnownLanguage && !isPlainText && file.content.trim()) {\n this.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.loader.addLineNumbers(safeHTML, lineNumbers);\n\n this.renderer.setAttribute(this.nativeElement, 'data-language', highlightedLanguage!);\n this.renderer.setProperty(this.nativeElement, 'innerHTML', highlightedHTMLWithLineNumbers);\n this.renderer.setAttribute(this.nativeElement, HIGHLIGHTED_MARKUP_ATTRIBUTE, '');\n\n this._pending.set(false);\n }\n\n /** The fallback language, or plain text, which the loader registers on every instance, if it is unknown too. */\n private fallbackLanguage(hljs: HLJSApi): string {\n if (hljs.getLanguage(this.fallbackFileLanguage)) return this.fallbackFileLanguage;\n\n this.warn(\n `[KbqCodeBlock] Unknown fallback language: \"${this.fallbackFileLanguage}\". Fall back to \"${PLAIN_TEXT_LANGUAGE}\".`\n );\n\n return PLAIN_TEXT_LANGUAGE;\n }\n\n private warn(...messages: unknown[]): void {\n if (!isDevMode()) return;\n\n // eslint-disable-next-line no-console\n console.warn(...messages);\n }\n}\n","import { A11yModule, FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n afterEveryRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n Injector,\n input,\n linkedSignal,\n numberAttribute,\n output,\n Provider,\n SecurityContext,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';\nimport {\n KBQ_WINDOW,\n KbqCodeBlockLocaleConfiguration,\n KbqComponentColors,\n KbqDeepPartial,\n kbqLocaleConfigurationOverrideProvider,\n KbqLocaleOverridesDirective,\n kbqOptionalNumberAttribute,\n KbqOverflowShadowContainer,\n KbqOverflowShadowTop,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqScrollbarViewport, type KbqScrollbarScrollToOptions } from '@koobiq/components/scrollbar';\nimport { KbqTabsModule } from '@koobiq/components/tabs';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { debounceTime, filter, fromEvent, map, merge, take, type Observable } from 'rxjs';\nimport { KbqCodeBlockHighlight } from './code-block-highlight';\nimport { KbqCodeBlockFile, KbqTabLinkTemplateContext } from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_CODE_BLOCK_LOCALE_CONFIGURATION = new InjectionToken<KbqCodeBlockLocaleConfiguration>(\n 'KbqCodeBlockLocaleConfiguration',\n { factory: () => ruRULocaleData.codeBlock }\n);\n\n/**\n * Utility provider for `KBQ_CODE_BLOCK_LOCALE_CONFIGURATION`. Only the strings you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqCodeBlockLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqCodeBlockLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('codeBlock', configuration);\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/** Default options for `kbq-code-block`. */\nexport type KbqCodeBlockDefaultOptions = Partial<{\n /** Whether the actionbar should remain visible when tabs are hidden. */\n alwaysShowActionbar: boolean;\n}>;\n\n/** Injection token used to configure the default options for all `kbq-code-block` components. */\nexport const KBQ_CODE_BLOCK_DEFAULT_OPTIONS = new InjectionToken<KbqCodeBlockDefaultOptions>(\n 'KBQ_CODE_BLOCK_DEFAULT_OPTIONS'\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_DEFAULT_OPTIONS`. */\nexport const kbqCodeBlockDefaultOptionsProvider = (options: KbqCodeBlockDefaultOptions): Provider => ({\n provide: KBQ_CODE_BLOCK_DEFAULT_OPTIONS,\n useValue: options\n});\n\n/** Marks a template as a custom tab link. */\n@Directive({\n selector: 'ng-template[kbqCodeBlockTabLinkContent]',\n exportAs: 'kbqCodeBlockTabLinkContent'\n})\nexport class KbqCodeBlockTabLinkContent {}\n\n/**\n * Component which highlights blocks of code.\n */\n@Component({\n selector: 'kbq-code-block',\n imports: [\n KbqTabsModule,\n KbqButtonModule,\n KbqCodeBlockHighlight,\n A11yModule,\n KbqToolTipModule,\n KbqIconModule,\n KbqScrollbarViewport,\n NgTemplateOutlet,\n KbqOverflowShadowContainer,\n KbqOverflowShadowTop\n ],\n templateUrl: './code-block.html',\n styleUrls: ['./code-block.scss', './code-block-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\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]': 'tabsHidden()',\n '[class.kbq-code-block_no-border]': 'noBorder() || filled()',\n '[class.kbq-code-block_show-actionbar]': 'actionbarVisible()',\n '[class.kbq-code-block_soft-wrap]': 'softWrap()',\n '[class.kbq-code-block_view-all]': 'viewAll()'\n },\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ],\n exportAs: 'kbqCodeBlock'\n})\nexport class KbqCodeBlock implements AfterViewInit {\n private readonly copyButtonTooltip = viewChild<KbqTooltipTrigger>('copyButtonTooltip');\n private readonly defaultOptions = inject(KBQ_CODE_BLOCK_DEFAULT_OPTIONS, { optional: true });\n\n private readonly highlight = viewChild(KbqCodeBlockHighlight);\n\n private readonly scrollbarViewport = viewChild.required(KbqScrollbarViewport);\n\n /** Memoized so every waiter shares one `toObservable` effect instead of installing one each. */\n private highlightPending?: Observable<boolean>;\n\n private readonly preElementRef = viewChild<ElementRef<HTMLElement>>('codeBlockPre');\n\n private readonly codeElementRef = viewChild<ElementRef<HTMLElement>>('codeBlockCode');\n\n /**\n * Whether the code runs past `maxHeight`, or `undefined` until the browser has measured it. The server\n * never measures, and its markup keeps the limit so that a block hydrated later holds its height.\n *\n * @docs-private\n */\n protected readonly contentExceedsMaxHeight = signal<boolean | undefined>(undefined);\n\n /** @docs-private */\n protected readonly tabLinkTemplate = contentChild<\n KbqCodeBlockTabLinkContent,\n TemplateRef<KbqTabLinkTemplateContext>\n >(KbqCodeBlockTabLinkContent, { read: TemplateRef });\n\n /** Whether to display line numbers. */\n readonly lineNumbers = input(false, { transform: booleanAttribute });\n\n /** Whether the code block should be filled. */\n readonly filled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Added soft wrap toggle button. */\n readonly canToggleSoftWrap = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Backing input of `softWrap`. Bind through the `softWrap` attribute; read and write the signal.\n *\n * `model()` cannot carry the `booleanAttribute` transform a valueless attribute needs, and an input\n * is read-only while `toggleSoftWrap()` writes this as well as the binding - hence the pair.\n *\n * @docs-private\n */\n readonly softWrapInput = input(false, { alias: 'softWrap', transform: booleanAttribute });\n\n /** Whether sequences of whitespace should be preserved. */\n readonly softWrap = linkedSignal(() => this.softWrapInput());\n\n /**\n * Output to support two-way binding on `[(softWrap)]` property.\n */\n readonly softWrapChange = output<boolean>();\n\n /**\n * Backing input of `viewAll`, in the same shape as `softWrapInput`.\n *\n * @docs-private\n */\n readonly viewAllInput = input(false, { alias: 'viewAll', transform: booleanAttribute });\n\n /**\n * Allows to view all the code, otherwise it will be hidden.\n * Works only with `maxHeight` property.\n */\n readonly viewAll = linkedSignal(() => this.viewAllInput());\n\n /**\n * Output to support two-way binding on `[(viewAll)]` property.\n */\n readonly viewAllChange = output<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 readonly maxHeight = input<number | undefined, unknown>(undefined, {\n transform: kbqOptionalNumberAttribute\n });\n\n /**\n * @docs-private\n */\n protected readonly calculatedMaxHeight = computed<number | null>(() => {\n const maxHeight = this.maxHeight();\n\n // Code that fits is left at its natural height: clipped at the limit it would scroll by its own\n // bottom padding, with nothing hidden to reveal and no \"view all\" button to reveal it.\n return maxHeight && maxHeight > 0 && !this.viewAll() && this.contentExceedsMaxHeight() !== false\n ? maxHeight\n : null;\n });\n\n /**\n * Backing input of `canDownload`.\n *\n * @docs-private\n */\n readonly canDownloadInput = input(false, { alias: 'canDownload', transform: booleanAttribute });\n\n /** Added download code button. */\n readonly canDownload = linkedSignal(() => this.canDownloadInput());\n\n /** Added copy code button. */\n readonly canCopy = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether the actionbar should remain visible when tabs are hidden. */\n readonly alwaysShowActionbar = input<boolean, unknown>(this.defaultOptions?.alwaysShowActionbar ?? false, {\n transform: booleanAttribute\n });\n\n /**\n * Backing input of `files`.\n *\n * @docs-private\n */\n readonly filesInput = input<KbqCodeBlockFile[]>([], { alias: 'files' });\n\n /** Files to display. */\n // TODO: mark as `required`.\n readonly files = linkedSignal(() => this.filesInput());\n\n /**\n * Backing input of `activeFileIndex`. `numberAttribute` yields NaN for anything not cleanly numeric,\n * and an unbound `index?: number` reaches it as `undefined`, so the transform floors both at 0 rather\n * than letting NaN through a signal typed `number`.\n *\n * @docs-private\n */\n readonly activeFileIndexInput = input(0, {\n alias: 'activeFileIndex',\n transform: (value: unknown) => {\n const index = numberAttribute(value);\n\n return Number.isInteger(index) && index >= 0 ? index : 0;\n }\n });\n\n /** Defines which file (index) is active. */\n readonly activeFileIndex = linkedSignal(() => this.activeFileIndexInput());\n\n /**\n * Index of the file actually rendered. `files` and `activeFileIndex` are written one after the other,\n * so either order leaves the pair briefly inconsistent: the render falls back to the first file rather\n * than resetting the input, which would write back into a `[(activeFileIndex)]` mid-update.\n *\n * @docs-private\n */\n protected readonly renderedFileIndex = computed(() => {\n const index = this.activeFileIndex();\n\n return index < this.files().length ? index : 0;\n });\n\n /**\n * The file being rendered, or `undefined` while `files` is empty.\n *\n * @docs-private\n */\n protected readonly activeFile = computed<KbqCodeBlockFile | undefined>(\n () => this.files()[this.renderedFileIndex()]\n );\n\n /**\n * Output to support two-way binding on `[(activeFileIndex)]` property.\n */\n readonly activeFileIndexChange = output<number>();\n\n /** Whether to hide border. */\n readonly noBorder = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Backing input of `hideTabs`.\n *\n * @docs-private\n */\n readonly hideTabsInput = input(false, { alias: 'hideTabs', transform: booleanAttribute });\n\n /**\n * Whether to hide header tabs. A single file without a filename hides them regardless - read\n * `tabsHidden` for what the header actually does.\n * Makes actionbar floating if tabs are hidden.\n */\n readonly hideTabs = linkedSignal(() => this.hideTabsInput());\n\n /**\n * A lone file with no filename has nothing to label a tab with, so the bar is hidden whatever was\n * bound. Derived rather than written into `hideTabs`: the write latched the bar off for the life of\n * the component, so naming the files later never brought it back, and it re-emitted `hideTabsChange`\n * on every `files` assignment.\n *\n * @docs-private\n */\n readonly tabsHidden = computed(() => {\n const files = this.files();\n\n return this.hideTabs() || (files.length === 1 && !files[0].filename);\n });\n private readonly actionbarHovered = signal(false);\n\n /**\n * Output to support two-way binding on `[(hideTabs)]` property.\n */\n readonly hideTabsChange = output<boolean>();\n\n /**\n * Component locale configuration.\n *\n * @docs-private\n */\n protected readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'codeBlock',\n KBQ_CODE_BLOCK_LOCALE_CONFIGURATION\n );\n\n /**\n * Whether the code content scrolls while nothing collapses it, which leaves keyboard users a way to scroll it.\n * Collapsed under `maxHeight` it is clipped instead, and the \"view all\" button is the way in.\n */\n private get canCodeContentBeFocused(): boolean {\n return !this.calculatedMaxHeight() && this.hasScroll(this.scrollbarViewport().getNativeElement());\n }\n\n /**\n * @docs-private\n */\n protected readonly componentColor = KbqComponentColors;\n\n /**\n * @docs-private\n */\n protected readonly buttonStyle = KbqButtonStyles;\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\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 private readonly sharedResizeObserver = inject(SharedResizeObserver);\n\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 /** @docs-private */\n protected readonly actionbarVisible = computed(\n () =>\n this.alwaysShowActionbar() ||\n this.platform.IOS ||\n this.platform.ANDROID ||\n !this.tabsHidden() ||\n this.actionbarHovered()\n );\n\n constructor() {\n this.trackHoverState();\n\n // The template leaves the code content focusable, as the server renders it: the server cannot measure, and a\n // block that stays dehydrated under a `@defer` hydrate trigger would otherwise keep an overflow that no keyboard\n // can scroll. The browser measures in the phases of every render, so that blocks rendered together read in one\n // layout, and writes to the element directly: a binding would only catch up a round of change detection later,\n // after the hooks still to run in this render.\n if (this.platform.isBrowser) {\n afterEveryRender({\n earlyRead: () => (this.canCodeContentBeFocused ? 0 : -1),\n write: (tabIndex) => {\n const element = this.scrollbarViewport().getNativeElement();\n\n if (element.tabIndex !== tabIndex) element.tabIndex = tabIndex;\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n this.setupContentOverflowDetection();\n this.revealScrollbarOnHighlight();\n\n this.copyButtonTooltip()\n ?.visibleChange.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((isVisible) => {\n if (isVisible) {\n this.copyButtonTooltip()!.content = this.localeConfiguration().copyTooltip;\n }\n });\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.set(!this.viewAll());\n\n if (!this.viewAll()) {\n this.scrollTo({ top: 0, behavior: 'instant' });\n }\n\n this.viewAllChange.emit(this.viewAll());\n }\n\n /** Scrolls the code content to the specified position. */\n scrollTo(options: KbqScrollbarScrollToOptions): void {\n const scroll = () => this.scrollbarViewport().scrollTo(options);\n\n if (this.highlight()?.pending()) {\n this.highlightSettled().pipe(take(1)).subscribe(scroll);\n } else {\n scroll();\n }\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.set(!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 // Compared against the bound index rather than the rendered one: with an out-of-range binding the\n // two differ, and clicking the tab that is already on screen has to bring the input back in range.\n if (this.activeFileIndex() !== index) {\n this.activeFileIndex.set(index);\n this.activeFileIndexChange.emit(index);\n this.scrollTo({ top: 0, behavior: 'instant' });\n }\n }\n\n /** Tracks hover when tabs are hidden and `alwaysShowActionbar` is disabled. */\n private trackHoverState(): void {\n effect(\n (onCleanup) => {\n const hideTabs = this.tabsHidden();\n const alwaysShowActionbar = this.alwaysShowActionbar();\n\n this.actionbarHovered.set(false);\n\n if (!hideTabs || alwaysShowActionbar || this.platform.IOS || this.platform.ANDROID) return;\n\n // A block that comes to life under the pointer, as one hydrated on hover does, gets no `mouseenter`\n // until the pointer has left it.\n this.actionbarHovered.set(this.platform.isBrowser && this.elementRef.nativeElement.matches(':hover'));\n\n const subscription = merge(\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter').pipe(map(() => true)),\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseleave').pipe(map(() => false))\n )\n .pipe(debounceTime(100))\n .subscribe((isHovered) => {\n this.actionbarHovered.set(isHovered);\n });\n\n onCleanup(() => subscription.unsubscribe());\n },\n { injector: this.injector }\n );\n }\n\n /**\n * Briefly reveals the scrollbar once highlighting settles, so whether the code scrolls is answered\n * on arrival rather than only after the pointer enters the block. Switching files needs nothing of\n * its own: `onSelectedTabChange` scrolls the content back to the top, and that scroll reveals the\n * track by itself.\n *\n * A viewport with nothing to scroll paints no track, so this stays silent for code that fits.\n */\n private revealScrollbarOnHighlight(): void {\n if (!this.platform.isBrowser) return;\n\n this.highlightSettled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.scrollbarViewport().flashScrollIndicators());\n }\n\n /**\n * Emits every time highlighting finishes. Built once and reused: `toObservable` installs an Angular\n * effect that lives as long as the injector, so creating one per call — as `scrollTo` did on every\n * tab click while a file was still highlighting — left an effect behind each time.\n */\n private highlightSettled(): Observable<boolean> {\n // Read through the query: the highlighted element lives inside `@if (activeFile())`, and a block\n // with no file has nothing to wait for.\n this.highlightPending ??= toObservable(\n computed(() => this.highlight()?.pending() ?? false),\n {\n injector: this.injector\n }\n );\n\n return this.highlightPending.pipe(filter((pending) => !pending));\n }\n\n private setupContentOverflowDetection(): void {\n if (!this.platform.isBrowser) return;\n\n // `maxHeight` is a signal, so the gate has to follow it: bound after init it used to leave the\n // content clipped with neither the \"view all\" button nor a way in from the keyboard.\n effect(\n (onCleanup) => {\n const preElement = this.preElementRef()?.nativeElement;\n\n this.measureContentOverflow();\n\n if (!this.maxHeight() || !preElement) return;\n\n const subscription = this.sharedResizeObserver\n .observe(preElement)\n .subscribe(() => this.measureContentOverflow());\n\n onCleanup(() => subscription.unsubscribe());\n },\n { injector: this.injector }\n );\n\n // Half-rendered content answers for the wrong height, so the measurement is retaken once\n // highlighting settles. Kept apart from the subscription above, which would otherwise be torn\n // down and re-created on both edges of every `pending` flip.\n effect(\n () => {\n this.highlight()?.pending();\n\n untracked(() => this.measureContentOverflow());\n },\n { injector: this.injector }\n );\n }\n\n private measureContentOverflow(): void {\n const maxHeight = this.maxHeight();\n const preElement = this.preElementRef()?.nativeElement;\n const codeElement = this.codeElementRef()?.nativeElement;\n\n if (!maxHeight || !preElement || !codeElement) {\n this.contentExceedsMaxHeight.set(false);\n\n return;\n }\n\n // The limit is checked against the end of the last line, not of the element: the bottom padding is\n // what gets clipped first, and clipped padding hides no code. Read from the computed style because\n // the \"view all\" button, once shown, deepens that padding, and measuring it would keep the button.\n const paddingBottom = parseFloat(this.window.getComputedStyle(codeElement).paddingBottom) || 0;\n\n this.contentExceedsMaxHeight.set(preElement.offsetHeight - paddingBottom > maxHeight);\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.scrollbarViewport().getNativeElement(), 'keyboard');\n }\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.activeFile();\n\n if (!file) return;\n\n const copyButtonTooltip = this.copyButtonTooltip();\n\n if (this.clipboard.copy(file.content) && copyButtonTooltip) {\n 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.activeFile();\n\n if (!file?.link) return;\n\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.activeFile();\n\n if (!file) return;\n\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","<div class=\"kbq-code-block__header\" [kbqOverflowShadowTop]=\"codeBlockContent\">\n @if (!tabsHidden()) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files(); track file) {\n <!-- Mark tab-link as readonly if only single file present -->\n <div\n kbqTabLink\n [active]=\"$count > 1 && renderedFileIndex() === $index\"\n [style.pointer-events]=\"$count === 1 ? 'none' : null\"\n (click)=\"onSelectedTabChange($index)\"\n >\n @if (tabLinkTemplate(); as linkTemplate) {\n <ng-container\n *ngTemplateOutlet=\"linkTemplate; context: { $implicit: file, fallbackFileName }\"\n />\n } @else {\n {{ file.filename || fallbackFileName }}\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\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 [attr.aria-label]=\"\n softWrap() ? localeConfiguration().softWrapOffTooltip : localeConfiguration().softWrapOnTooltip\n \"\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-text-overflow_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-text-wrap_16\"></i>\n }\n </button>\n }\n\n @if (canDownload()) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [attr.aria-label]=\"localeConfiguration().downloadTooltip\"\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 [attr.aria-label]=\"localeConfiguration().copyTooltip\"\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 (activeFile()?.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [attr.aria-label]=\"localeConfiguration().openExternalSystemTooltip\"\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 #codeBlockContent=\"kbqOverflowShadowContainer\"\n cdkMonitorElementFocus\n kbqOverflowShadowContainer\n kbqScrollbarViewport\n kbqTabNavPanel\n class=\"kbq-code-block__main\"\n tabindex=\"0\"\n [style.max-height.px]=\"calculatedMaxHeight()\"\n>\n @if (activeFile(); as file) {\n <pre\n #codeBlockPre\n class=\"kbq-code-block__pre\"\n ><code #codeBlockCode kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n }\n\n @if (contentExceedsMaxHeight()) {\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, KbqCodeBlockTabLinkContent } from './code-block';\n\nconst COMPONENTS = [\n KbqCodeBlock,\n KbqCodeBlockTabLinkContent\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-js-loader.ts","../../../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 { Injectable, isDevMode } from '@angular/core';\nimport type { HLJSApi } from 'highlight.js';\nimport plaintext from 'highlight.js/lib/languages/plaintext';\nimport type { KbqCodeBlockHighlightJsConfig } from './code-block-highlight';\n\n// The core and not the full bundle: a bundler emits a chunk for every `import()` it finds, called or not, so the\n// full bundle has to be imported by the application that asks for it. An instance of its own, as the module is one\n// object for the whole process, the full bundle included: the languages one configuration registers on it would reach\n// every other, and every later server render.\nconst defaultHljsLoader = async (): Promise<{ default: HLJSApi }> => ({\n default: (await import('highlight.js/lib/core')).default.newInstance()\n});\n\n// The key of the default configuration: `config ?? {}` would make a new key on every call.\nconst DEFAULT_CONFIG: KbqCodeBlockHighlightJsConfig = {};\n\n/**\n * Language the loader registers on every instance, the fallback of a file the code block cannot highlight otherwise.\n *\n * @internal\n */\nexport const PLAIN_TEXT_LANGUAGE = 'plaintext';\n\n/**\n * Loads highlight.js once per configuration.\n *\n * The configuration is passed in rather than injected: `KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG` may be provided by a\n * component or a route, where a root service would not see it. Loads are shared by the identity of the configuration,\n * so the code blocks under one provider share one load.\n *\n * @internal\n */\n@Injectable({ providedIn: 'root' })\nexport class KbqCodeBlockHighlightJsLoader {\n // Weak, so that a configuration made for one component instance goes away with it.\n private readonly loads = new WeakMap<KbqCodeBlockHighlightJsConfig, Promise<HLJSApi | null>>();\n private readonly instances = new WeakMap<KbqCodeBlockHighlightJsConfig, HLJSApi>();\n\n /** The instance loaded for `config`, or `null` until it is. */\n loaded(config: KbqCodeBlockHighlightJsConfig | null): HLJSApi | null {\n return this.instances.get(config ?? DEFAULT_CONFIG) ?? null;\n }\n\n /**\n * Loads highlight.js for `config`, sharing the load in flight. A failure resolves to `null` rather than rejecting,\n * since the callers have nowhere to send a rejection, and is forgotten, so that the next file change tries again.\n */\n load(config: KbqCodeBlockHighlightJsConfig | null): Promise<HLJSApi | null> {\n const key = config ?? DEFAULT_CONFIG;\n let loading = this.loads.get(key);\n\n if (!loading) {\n loading = this.importInstance(key).then(\n (instance) => {\n this.instances.set(key, instance);\n\n return instance;\n },\n (error: unknown) => {\n this.loads.delete(key);\n\n if (isDevMode()) {\n // eslint-disable-next-line no-console\n console.warn('[KbqCodeBlock] Failed to load highlight.js.', error);\n }\n\n return null;\n }\n );\n this.loads.set(key, loading);\n }\n\n return loading;\n }\n\n private async importInstance({ core, languages = {} }: KbqCodeBlockHighlightJsConfig): Promise<HLJSApi> {\n const entries = Object.entries(languages);\n // The languages do not need the core to load, so they load alongside it.\n const [{ default: instance }, loaded] = await Promise.all([\n (core ?? defaultHljsLoader)(),\n Promise.all(entries.map(([, loader]) => loader()))\n ]);\n\n entries.forEach(([name], index) => instance.registerLanguage(name, loaded[index].default));\n\n // The directive falls back to plain text, and highlight.js throws on a language it has not registered, as the\n // core has none.\n if (!instance.getLanguage(PLAIN_TEXT_LANGUAGE)) instance.registerLanguage(PLAIN_TEXT_LANGUAGE, plaintext);\n\n return instance;\n }\n}\n","import {\n booleanAttribute,\n computed,\n Directive,\n effect,\n inject,\n InjectionToken,\n input,\n isDevMode,\n numberAttribute,\n PendingTasks,\n Provider,\n Renderer2,\n SecurityContext,\n signal\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { kbqInjectNativeElement } from '@koobiq/components/core';\nimport type { HLJSApi, LanguageFn } from 'highlight.js';\nimport { KbqCodeBlockHighlightJsLoader, PLAIN_TEXT_LANGUAGE } from './code-block-highlight-js-loader';\nimport { KbqCodeBlockFile } from './types';\n\n/**\n * Configuration of highlight.js, which highlights the code of a code block: how to load it and which languages to\n * register. Without a configuration, the code block loads the highlight.js core, which has no languages, and shows the\n * code as plain text. Provide it with `kbqCodeBlockHighlightJsConfigProvider`.\n */\nexport type KbqCodeBlockHighlightJsConfig = Partial<{\n /**\n * Lazy loader for the highlight.js instance. The core has no languages: register the ones the files use in\n * `languages`, or load all of them with `() => import('highlight.js')`, the full bundle of about 1 MB.\n * Defaults to `() => import('highlight.js/lib/core')`.\n */\n core: () => Promise<{ default: HLJSApi }>;\n\n /**\n * Map of language name to lazy loader for that language's LanguageFn. A language of highlight.js loads from\n * `highlight.js/lib/languages/<name>`, where `<name>` is the name of its file in\n * [src/languages](https://github.com/highlightjs/highlight.js/tree/11-stable/src/languages). Plain text needs no\n * entry: the code block registers it as the fallback language.\n */\n languages: Record<string, () => Promise<{ default: LanguageFn }>>;\n}>;\n\n/**\n * Injection token for configuring `KbqCodeBlockHighlightJsConfig`.\n */\nexport const KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG = new InjectionToken<KbqCodeBlockHighlightJsConfig>(\n 'KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG'\n);\n\n/**\n * Utility provider for `KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG`.\n *\n * @example\n * ```ts\n * providers: [\n * kbqCodeBlockHighlightJsConfigProvider({\n * languages: {\n * typescript: () => import('highlight.js/lib/languages/typescript'),\n * css: () => import('highlight.js/lib/languages/css'),\n * html: () => import('highlight.js/lib/languages/xml')\n * }\n * })\n * ]\n * ```\n */\nexport const kbqCodeBlockHighlightJsConfigProvider = (options: KbqCodeBlockHighlightJsConfig): Provider => ({\n provide: KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG,\n useValue: options\n});\n\n/**\n * Fallback language for code block if language is not supported/specified. It has to be registered in `languages` of\n * `KbqCodeBlockHighlightJsConfig`, unless it is plain text or the full bundle of highlight.js is loaded, or the code\n * block falls back to `plaintext`.\n *\n * See the [list of supported languages](https://github.com/highlightjs/highlight.js/blob/11-stable/SUPPORTED_LANGUAGES.md).\n */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE = new InjectionToken<string>(\n 'KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE',\n { factory: () => PLAIN_TEXT_LANGUAGE }\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/**\n * Marks the markup the directive has highlighted. Found while highlight.js has yet to load, it can only have come\n * from the server: once the browser has highlighted a file, highlight.js stays loaded. Not `data-highlighted`, which\n * highlight.js sets on the elements it highlights itself.\n */\nconst HIGHLIGHTED_MARKUP_ATTRIBUTE = 'data-highlighted-markup';\n\nconst LINE_BREAK = /\\r\\n|\\r|\\n/;\n\n/**\n * Directive which applies syntax highlighting to the code block content.\n *\n * @docs-private\n */\n@Directive({\n selector: 'code[kbqCodeBlockHighlight]',\n host: {\n class: 'hljs',\n // Bound to the file rather than to the highlighted markup, so that markup kept from the server is numbered\n // before highlight.js loads again.\n '[class.kbq-code-block__code_line-numbers]': 'lineCount() > 1 || singleLine()',\n '[style.--kbq-code-block-line-numbers-start]': 'startFrom() - 1',\n '[style.--kbq-code-block-line-numbers-digits]': 'lineNumberDigits()'\n },\n exportAs: 'kbqCodeBlockHighlight'\n})\nexport class KbqCodeBlockHighlight {\n private readonly nativeElement = kbqInjectNativeElement();\n private readonly renderer = inject(Renderer2);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly pendingTasks = inject(PendingTasks);\n private readonly loader = inject(KbqCodeBlockHighlightJsLoader);\n private readonly fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);\n // Read here and handed to the loader: a component or a route may provide a configuration of its own.\n private readonly config = inject(KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG, { optional: true });\n private readonly _pending = signal(false);\n\n /**\n * Whether syntax highlighting is pending.\n *\n * @docs-private\n */\n readonly pending = this._pending.asReadonly();\n\n /** The code file. */\n readonly file = input.required<KbqCodeBlockFile>();\n\n constructor() {\n effect((onCleanup) => {\n const file = this.file();\n const hljs = this.loader.loaded(this.config);\n\n if (hljs) {\n this.highlight(hljs, file);\n\n return;\n }\n\n // The template leaves `<code>` empty, so that hydration does not look for a text node the highlighted\n // markup has replaced. The plain content stands in until highlighting lands, and for good if it fails.\n const keepsServerMarkup = this.nativeElement.hasAttribute(HIGHLIGHTED_MARKUP_ATTRIBUTE);\n\n if (keepsServerMarkup) {\n // Markup from the server stays instead, rather than flash plain text over code that arrived\n // highlighted. Once: the file of a later run is not the one it was rendered for.\n this.renderer.removeAttribute(this.nativeElement, HIGHLIGHTED_MARKUP_ATTRIBUTE);\n } else {\n this.renderer.setProperty(this.nativeElement, 'textContent', file.content);\n this.renderer.removeAttribute(this.nativeElement, 'data-language');\n }\n\n // A `file` that arrives while highlight.js is still loading must not be overwritten by the previous\n // one, and nothing may be highlighted through a directive that has gone away in the meantime.\n let cancelled = false;\n\n onCleanup(() => (cancelled = true));\n\n // `pending` holds the code block until the load settles, failed or not. A block with nothing highlighted to\n // show holds the application as well, so that server rendering and tests wait for the highlighted markup.\n // Markup kept from the server needs no task: it would keep a hydrated page unstable, and Angular replays\n // what a reader did before hydration only once the page is stable.\n this._pending.set(true);\n const removeTask = keepsServerMarkup ? null : this.pendingTasks.add();\n\n this.loader\n .load(this.config)\n .then((loaded) => {\n if (loaded && !cancelled) this.highlight(loaded, file);\n })\n .finally(() => {\n // A run cancelled by a newer file leaves `pending` to that one.\n if (!cancelled) this._pending.set(false);\n\n removeTask?.();\n });\n });\n }\n\n /** The starting line number. */\n readonly startFrom = input<number, unknown>(1, { transform: (value: unknown) => numberAttribute(value, 1) });\n\n /** Whether to display line numbers for single line code block. */\n readonly singleLine = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Number of lines of the file, a line break at its end not counted, as it starts no line. */\n protected readonly lineCount = computed(() => {\n const lines = this.file().content.split(LINE_BREAK);\n\n return lines.length > 1 && !lines[lines.length - 1] ? lines.length - 1 : lines.length;\n });\n\n /** Width of the line numbers column, in digits of its largest number. */\n protected readonly lineNumberDigits = computed(() => String(this.startFrom() + this.lineCount() - 1).length);\n\n private highlight(hljs: HLJSApi, file: KbqCodeBlockFile): void {\n this._pending.set(true);\n\n let { language } = file;\n const isKnownLanguage = !!language && !!hljs.getLanguage(language);\n\n if (!language || !isKnownLanguage) {\n const fallbackLanguage = this.fallbackLanguage(hljs);\n\n // A file without a language is plain text by design; only a language the core lacks is a mistake.\n if (language) {\n this.warn(\n `[KbqCodeBlock] Unknown file language: \"${language}\". Fall back to \"${fallbackLanguage}\".`,\n file\n );\n }\n\n language = fallbackLanguage;\n }\n\n const {\n value: highlightedHTML,\n language: highlightedLanguage,\n illegal,\n relevance\n } = hljs.highlight(file.content, { language });\n\n if (illegal) {\n this.warn('[KbqCodeBlock] File content contains illegal characters.', file);\n }\n\n // Plain text and an empty file have no syntax to score, so their relevance is always 0. Plain text is compared by\n // definition: highlight.js returns the name the file gives, which may be an alias such as `text`.\n const isPlainText = hljs.getLanguage(language) === hljs.getLanguage(PLAIN_TEXT_LANGUAGE);\n\n if (relevance === 0 && isKnownLanguage && !isPlainText && file.content.trim()) {\n this.warn('[KbqCodeBlock] File content does not match the specified programming language.', file);\n }\n\n const safeHTML = this.domSanitizer.sanitize(SecurityContext.HTML, this.splitIntoLines(highlightedHTML)) ?? '';\n\n this.renderer.setAttribute(this.nativeElement, 'data-language', highlightedLanguage!);\n this.renderer.setProperty(this.nativeElement, 'innerHTML', safeHTML);\n this.renderer.setAttribute(this.nativeElement, HIGHLIGHTED_MARKUP_ATTRIBUTE, '');\n\n this._pending.set(false);\n }\n\n /**\n * Wraps every line of the highlighted markup in an element of its own, for the line numbers to count. The spans a\n * line break crosses are closed at the end of its line and opened again on the next one. The line break stays\n * inside its line, so that an empty line keeps its height and the text of the code is the text of the file.\n */\n private splitIntoLines(html: string): string {\n const lines: string[] = [];\n const openSpans: string[] = [];\n let line = '';\n let lineHasText = false;\n\n // highlight.js emits spans and escaped text. A tag of another kind, which a plugin of highlight.js may add,\n // passes through as it is.\n for (const [token, lineBreak] of html.matchAll(/(\\r\\n|\\r|\\n)|<span[^>]*>|<\\/span>|<[^>]*>|[^<\\r\\n]+/g)) {\n if (lineBreak) {\n lines.push(`${line}${'</span>'.repeat(openSpans.length)}\\n`);\n line = openSpans.join('');\n lineHasText = false;\n\n continue;\n }\n\n if (token === '</span>') {\n openSpans.pop();\n } else if (token.startsWith('<span')) {\n openSpans.push(token);\n } else if (!token.startsWith('<')) {\n lineHasText = true;\n }\n\n line += token;\n }\n\n // A line break at the end of the file starts no line, though the spans it crosses close after it.\n if (lineHasText) lines.push(line);\n\n return lines.map((content) => `<span class=\"kbq-code-block__line\">${content}</span>`).join('');\n }\n\n /** The fallback language, or plain text, which the loader registers on every instance, if it is unknown too. */\n private fallbackLanguage(hljs: HLJSApi): string {\n if (hljs.getLanguage(this.fallbackFileLanguage)) return this.fallbackFileLanguage;\n\n this.warn(\n `[KbqCodeBlock] Unknown fallback language: \"${this.fallbackFileLanguage}\". Fall back to \"${PLAIN_TEXT_LANGUAGE}\".`\n );\n\n return PLAIN_TEXT_LANGUAGE;\n }\n\n private warn(...messages: unknown[]): void {\n if (!isDevMode()) return;\n\n // eslint-disable-next-line no-console\n console.warn(...messages);\n }\n}\n","import { A11yModule, FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { SharedResizeObserver } from '@angular/cdk/observers/private';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n afterEveryRender,\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n DestroyRef,\n Directive,\n effect,\n ElementRef,\n inject,\n InjectionToken,\n Injector,\n input,\n linkedSignal,\n numberAttribute,\n output,\n Provider,\n SecurityContext,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';\nimport {\n KBQ_WINDOW,\n KbqCodeBlockLocaleConfiguration,\n KbqComponentColors,\n KbqDeepPartial,\n kbqLocaleConfigurationOverrideProvider,\n KbqLocaleOverridesDirective,\n kbqOptionalNumberAttribute,\n KbqOverflowShadowContainer,\n KbqOverflowShadowTop,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqScrollbarViewport, type KbqScrollbarScrollToOptions } from '@koobiq/components/scrollbar';\nimport { KbqTabsModule } from '@koobiq/components/tabs';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { debounceTime, filter, fromEvent, map, merge, take, type Observable } from 'rxjs';\nimport { KbqCodeBlockHighlight } from './code-block-highlight';\nimport { KbqCodeBlockFile, KbqTabLinkTemplateContext } from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_CODE_BLOCK_LOCALE_CONFIGURATION = new InjectionToken<KbqCodeBlockLocaleConfiguration>(\n 'KbqCodeBlockLocaleConfiguration',\n { factory: () => ruRULocaleData.codeBlock }\n);\n\n/**\n * Utility provider for `KBQ_CODE_BLOCK_LOCALE_CONFIGURATION`. Only the strings you pass are overridden;\n * the rest keep following the active locale.\n */\nexport const kbqCodeBlockLocaleConfigurationProvider = (\n configuration: KbqDeepPartial<KbqCodeBlockLocaleConfiguration>\n): Provider => kbqLocaleConfigurationOverrideProvider('codeBlock', configuration);\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/** Default options for `kbq-code-block`. */\nexport type KbqCodeBlockDefaultOptions = Partial<{\n /** Whether the actionbar should remain visible when tabs are hidden. Defaults to `false`. */\n alwaysShowActionbar: boolean;\n\n /** Whether to display line numbers. Defaults to `false`. */\n lineNumbers: boolean;\n}>;\n\n/** Injection token used to configure the default options for all `kbq-code-block` components. */\nexport const KBQ_CODE_BLOCK_DEFAULT_OPTIONS = new InjectionToken<KbqCodeBlockDefaultOptions>(\n 'KBQ_CODE_BLOCK_DEFAULT_OPTIONS'\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_DEFAULT_OPTIONS`. */\nexport const kbqCodeBlockDefaultOptionsProvider = (options: KbqCodeBlockDefaultOptions): Provider => ({\n provide: KBQ_CODE_BLOCK_DEFAULT_OPTIONS,\n useValue: options\n});\n\n/** Marks a template as a custom tab link. */\n@Directive({\n selector: 'ng-template[kbqCodeBlockTabLinkContent]',\n exportAs: 'kbqCodeBlockTabLinkContent'\n})\nexport class KbqCodeBlockTabLinkContent {}\n\n/**\n * Component which highlights blocks of code.\n */\n@Component({\n selector: 'kbq-code-block',\n imports: [\n KbqTabsModule,\n KbqButtonModule,\n KbqCodeBlockHighlight,\n A11yModule,\n KbqToolTipModule,\n KbqIconModule,\n KbqScrollbarViewport,\n NgTemplateOutlet,\n KbqOverflowShadowContainer,\n KbqOverflowShadowTop\n ],\n templateUrl: './code-block.html',\n styleUrls: ['./code-block.scss', './code-block-tokens.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\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]': 'tabsHidden()',\n '[class.kbq-code-block_no-border]': 'noBorder() || filled()',\n '[class.kbq-code-block_show-actionbar]': 'actionbarVisible()',\n '[class.kbq-code-block_soft-wrap]': 'softWrap()',\n '[class.kbq-code-block_view-all]': 'viewAll()'\n },\n hostDirectives: [\n { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }\n ],\n exportAs: 'kbqCodeBlock'\n})\nexport class KbqCodeBlock implements AfterViewInit {\n private readonly copyButtonTooltip = viewChild<KbqTooltipTrigger>('copyButtonTooltip');\n private readonly defaultOptions = inject(KBQ_CODE_BLOCK_DEFAULT_OPTIONS, { optional: true });\n\n private readonly highlight = viewChild(KbqCodeBlockHighlight);\n\n private readonly scrollbarViewport = viewChild.required(KbqScrollbarViewport);\n\n /** Memoized so every waiter shares one `toObservable` effect instead of installing one each. */\n private highlightPending?: Observable<boolean>;\n\n private readonly preElementRef = viewChild<ElementRef<HTMLElement>>('codeBlockPre');\n\n private readonly codeElementRef = viewChild<ElementRef<HTMLElement>>('codeBlockCode');\n\n /**\n * Whether the code runs past `maxHeight`, or `undefined` until the browser has measured it. The server\n * never measures, and its markup keeps the limit so that a block hydrated later holds its height.\n *\n * @docs-private\n */\n protected readonly contentExceedsMaxHeight = signal<boolean | undefined>(undefined);\n\n /** @docs-private */\n protected readonly tabLinkTemplate = contentChild<\n KbqCodeBlockTabLinkContent,\n TemplateRef<KbqTabLinkTemplateContext>\n >(KbqCodeBlockTabLinkContent, { read: TemplateRef });\n\n /** Whether to display line numbers. Defaults to `lineNumbers` of `KBQ_CODE_BLOCK_DEFAULT_OPTIONS`, or `false`. */\n readonly lineNumbers = input(this.defaultOptions?.lineNumbers ?? false, { transform: booleanAttribute });\n\n /** Whether the code block should be filled. */\n readonly filled = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Added soft wrap toggle button. */\n readonly canToggleSoftWrap = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Backing input of `softWrap`. Bind through the `softWrap` attribute; read and write the signal.\n *\n * `model()` cannot carry the `booleanAttribute` transform a valueless attribute needs, and an input\n * is read-only while `toggleSoftWrap()` writes this as well as the binding - hence the pair.\n *\n * @docs-private\n */\n readonly softWrapInput = input(false, { alias: 'softWrap', transform: booleanAttribute });\n\n /** Whether sequences of whitespace should be preserved. */\n readonly softWrap = linkedSignal(() => this.softWrapInput());\n\n /**\n * Output to support two-way binding on `[(softWrap)]` property.\n */\n readonly softWrapChange = output<boolean>();\n\n /**\n * Backing input of `viewAll`, in the same shape as `softWrapInput`.\n *\n * @docs-private\n */\n readonly viewAllInput = input(false, { alias: 'viewAll', transform: booleanAttribute });\n\n /**\n * Allows to view all the code, otherwise it will be hidden.\n * Works only with `maxHeight` property.\n */\n readonly viewAll = linkedSignal(() => this.viewAllInput());\n\n /**\n * Output to support two-way binding on `[(viewAll)]` property.\n */\n readonly viewAllChange = output<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 readonly maxHeight = input<number | undefined, unknown>(undefined, {\n transform: kbqOptionalNumberAttribute\n });\n\n /**\n * @docs-private\n */\n protected readonly calculatedMaxHeight = computed<number | null>(() => {\n const maxHeight = this.maxHeight();\n\n // Code that fits is left at its natural height: clipped at the limit it would scroll by its own\n // bottom padding, with nothing hidden to reveal and no \"view all\" button to reveal it.\n return maxHeight && maxHeight > 0 && !this.viewAll() && this.contentExceedsMaxHeight() !== false\n ? maxHeight\n : null;\n });\n\n /**\n * Backing input of `canDownload`.\n *\n * @docs-private\n */\n readonly canDownloadInput = input(false, { alias: 'canDownload', transform: booleanAttribute });\n\n /** Added download code button. */\n readonly canDownload = linkedSignal(() => this.canDownloadInput());\n\n /** Added copy code button. */\n readonly canCopy = input<boolean, unknown>(true, { transform: booleanAttribute });\n\n /** Whether the actionbar should remain visible when tabs are hidden. */\n readonly alwaysShowActionbar = input<boolean, unknown>(this.defaultOptions?.alwaysShowActionbar ?? false, {\n transform: booleanAttribute\n });\n\n /**\n * Backing input of `files`.\n *\n * @docs-private\n */\n readonly filesInput = input<KbqCodeBlockFile[]>([], { alias: 'files' });\n\n /** Files to display. */\n // TODO: mark as `required`.\n readonly files = linkedSignal(() => this.filesInput());\n\n /**\n * Backing input of `activeFileIndex`. `numberAttribute` yields NaN for anything not cleanly numeric,\n * and an unbound `index?: number` reaches it as `undefined`, so the transform floors both at 0 rather\n * than letting NaN through a signal typed `number`.\n *\n * @docs-private\n */\n readonly activeFileIndexInput = input(0, {\n alias: 'activeFileIndex',\n transform: (value: unknown) => {\n const index = numberAttribute(value);\n\n return Number.isInteger(index) && index >= 0 ? index : 0;\n }\n });\n\n /** Defines which file (index) is active. */\n readonly activeFileIndex = linkedSignal(() => this.activeFileIndexInput());\n\n /**\n * Index of the file actually rendered. `files` and `activeFileIndex` are written one after the other,\n * so either order leaves the pair briefly inconsistent: the render falls back to the first file rather\n * than resetting the input, which would write back into a `[(activeFileIndex)]` mid-update.\n *\n * @docs-private\n */\n protected readonly renderedFileIndex = computed(() => {\n const index = this.activeFileIndex();\n\n return index < this.files().length ? index : 0;\n });\n\n /**\n * The file being rendered, or `undefined` while `files` is empty.\n *\n * @docs-private\n */\n protected readonly activeFile = computed<KbqCodeBlockFile | undefined>(\n () => this.files()[this.renderedFileIndex()]\n );\n\n /**\n * Output to support two-way binding on `[(activeFileIndex)]` property.\n */\n readonly activeFileIndexChange = output<number>();\n\n /** Whether to hide border. */\n readonly noBorder = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /**\n * Backing input of `hideTabs`.\n *\n * @docs-private\n */\n readonly hideTabsInput = input(false, { alias: 'hideTabs', transform: booleanAttribute });\n\n /**\n * Whether to hide header tabs. A single file without a filename hides them regardless - read\n * `tabsHidden` for what the header actually does.\n * Makes actionbar floating if tabs are hidden.\n */\n readonly hideTabs = linkedSignal(() => this.hideTabsInput());\n\n /**\n * A lone file with no filename has nothing to label a tab with, so the bar is hidden whatever was\n * bound. Derived rather than written into `hideTabs`: the write latched the bar off for the life of\n * the component, so naming the files later never brought it back, and it re-emitted `hideTabsChange`\n * on every `files` assignment.\n *\n * @docs-private\n */\n readonly tabsHidden = computed(() => {\n const files = this.files();\n\n return this.hideTabs() || (files.length === 1 && !files[0].filename);\n });\n private readonly actionbarHovered = signal(false);\n\n /**\n * Output to support two-way binding on `[(hideTabs)]` property.\n */\n readonly hideTabsChange = output<boolean>();\n\n /**\n * Component locale configuration.\n *\n * @docs-private\n */\n protected readonly localeConfiguration = inject(KbqLocaleOverridesDirective, { self: true }).read(\n 'codeBlock',\n KBQ_CODE_BLOCK_LOCALE_CONFIGURATION\n );\n\n /**\n * Whether the code content scrolls while nothing collapses it, which leaves keyboard users a way to scroll it.\n * Collapsed under `maxHeight` it is clipped instead, and the \"view all\" button is the way in.\n */\n private get canCodeContentBeFocused(): boolean {\n return !this.calculatedMaxHeight() && this.hasScroll(this.scrollbarViewport().getNativeElement());\n }\n\n /**\n * @docs-private\n */\n protected readonly componentColor = KbqComponentColors;\n\n /**\n * @docs-private\n */\n protected readonly buttonStyle = KbqButtonStyles;\n\n private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly destroyRef = inject(DestroyRef);\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 private readonly sharedResizeObserver = inject(SharedResizeObserver);\n\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 /** @docs-private */\n protected readonly actionbarVisible = computed(\n () =>\n this.alwaysShowActionbar() ||\n this.platform.IOS ||\n this.platform.ANDROID ||\n !this.tabsHidden() ||\n this.actionbarHovered()\n );\n\n constructor() {\n this.trackHoverState();\n\n // The template leaves the code content focusable, as the server renders it: the server cannot measure, and a\n // block that stays dehydrated under a `@defer` hydrate trigger would otherwise keep an overflow that no keyboard\n // can scroll. The browser measures in the phases of every render, so that blocks rendered together read in one\n // layout, and writes to the element directly: a binding would only catch up a round of change detection later,\n // after the hooks still to run in this render.\n if (this.platform.isBrowser) {\n afterEveryRender({\n earlyRead: () => (this.canCodeContentBeFocused ? 0 : -1),\n write: (tabIndex) => {\n const element = this.scrollbarViewport().getNativeElement();\n\n if (element.tabIndex !== tabIndex) element.tabIndex = tabIndex;\n }\n });\n }\n }\n\n ngAfterViewInit(): void {\n this.setupContentOverflowDetection();\n this.revealScrollbarOnHighlight();\n\n this.copyButtonTooltip()\n ?.visibleChange.pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((isVisible) => {\n if (isVisible) {\n this.copyButtonTooltip()!.content = this.localeConfiguration().copyTooltip;\n }\n });\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.set(!this.viewAll());\n\n if (!this.viewAll()) {\n this.scrollTo({ top: 0, behavior: 'instant' });\n }\n\n this.viewAllChange.emit(this.viewAll());\n }\n\n /** Scrolls the code content to the specified position. */\n scrollTo(options: KbqScrollbarScrollToOptions): void {\n const scroll = () => this.scrollbarViewport().scrollTo(options);\n\n if (this.highlight()?.pending()) {\n this.highlightSettled().pipe(take(1)).subscribe(scroll);\n } else {\n scroll();\n }\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.set(!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 // Compared against the bound index rather than the rendered one: with an out-of-range binding the\n // two differ, and clicking the tab that is already on screen has to bring the input back in range.\n if (this.activeFileIndex() !== index) {\n this.activeFileIndex.set(index);\n this.activeFileIndexChange.emit(index);\n this.scrollTo({ top: 0, behavior: 'instant' });\n }\n }\n\n /** Tracks hover when tabs are hidden and `alwaysShowActionbar` is disabled. */\n private trackHoverState(): void {\n effect(\n (onCleanup) => {\n const hideTabs = this.tabsHidden();\n const alwaysShowActionbar = this.alwaysShowActionbar();\n\n this.actionbarHovered.set(false);\n\n if (!hideTabs || alwaysShowActionbar || this.platform.IOS || this.platform.ANDROID) return;\n\n // A block that comes to life under the pointer, as one hydrated on hover does, gets no `mouseenter`\n // until the pointer has left it.\n this.actionbarHovered.set(this.platform.isBrowser && this.elementRef.nativeElement.matches(':hover'));\n\n const subscription = merge(\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter').pipe(map(() => true)),\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseleave').pipe(map(() => false))\n )\n .pipe(debounceTime(100))\n .subscribe((isHovered) => {\n this.actionbarHovered.set(isHovered);\n });\n\n onCleanup(() => subscription.unsubscribe());\n },\n { injector: this.injector }\n );\n }\n\n /**\n * Briefly reveals the scrollbar once highlighting settles, so whether the code scrolls is answered\n * on arrival rather than only after the pointer enters the block. Switching files needs nothing of\n * its own: `onSelectedTabChange` scrolls the content back to the top, and that scroll reveals the\n * track by itself.\n *\n * A viewport with nothing to scroll paints no track, so this stays silent for code that fits.\n */\n private revealScrollbarOnHighlight(): void {\n if (!this.platform.isBrowser) return;\n\n this.highlightSettled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => this.scrollbarViewport().flashScrollIndicators());\n }\n\n /**\n * Emits every time highlighting finishes. Built once and reused: `toObservable` installs an Angular\n * effect that lives as long as the injector, so creating one per call — as `scrollTo` did on every\n * tab click while a file was still highlighting — left an effect behind each time.\n */\n private highlightSettled(): Observable<boolean> {\n // Read through the query: the highlighted element lives inside `@if (activeFile())`, and a block\n // with no file has nothing to wait for.\n this.highlightPending ??= toObservable(\n computed(() => this.highlight()?.pending() ?? false),\n {\n injector: this.injector\n }\n );\n\n return this.highlightPending.pipe(filter((pending) => !pending));\n }\n\n private setupContentOverflowDetection(): void {\n if (!this.platform.isBrowser) return;\n\n // `maxHeight` is a signal, so the gate has to follow it: bound after init it used to leave the\n // content clipped with neither the \"view all\" button nor a way in from the keyboard.\n effect(\n (onCleanup) => {\n const preElement = this.preElementRef()?.nativeElement;\n\n this.measureContentOverflow();\n\n if (!this.maxHeight() || !preElement) return;\n\n const subscription = this.sharedResizeObserver\n .observe(preElement)\n .subscribe(() => this.measureContentOverflow());\n\n onCleanup(() => subscription.unsubscribe());\n },\n { injector: this.injector }\n );\n\n // Half-rendered content answers for the wrong height, so the measurement is retaken once\n // highlighting settles. Kept apart from the subscription above, which would otherwise be torn\n // down and re-created on both edges of every `pending` flip.\n effect(\n () => {\n this.highlight()?.pending();\n\n untracked(() => this.measureContentOverflow());\n },\n { injector: this.injector }\n );\n }\n\n private measureContentOverflow(): void {\n const maxHeight = this.maxHeight();\n const preElement = this.preElementRef()?.nativeElement;\n const codeElement = this.codeElementRef()?.nativeElement;\n\n if (!maxHeight || !preElement || !codeElement) {\n this.contentExceedsMaxHeight.set(false);\n\n return;\n }\n\n // The limit is checked against the end of the last line, not of the element: the bottom padding is\n // what gets clipped first, and clipped padding hides no code. Read from the computed style because\n // the \"view all\" button, once shown, deepens that padding, and measuring it would keep the button.\n const paddingBottom = parseFloat(this.window.getComputedStyle(codeElement).paddingBottom) || 0;\n\n this.contentExceedsMaxHeight.set(preElement.offsetHeight - paddingBottom > maxHeight);\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.scrollbarViewport().getNativeElement(), 'keyboard');\n }\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.activeFile();\n\n if (!file) return;\n\n const copyButtonTooltip = this.copyButtonTooltip();\n\n if (this.clipboard.copy(file.content) && copyButtonTooltip) {\n 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.activeFile();\n\n if (!file?.link) return;\n\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.activeFile();\n\n if (!file) return;\n\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","<div class=\"kbq-code-block__header\" [kbqOverflowShadowTop]=\"codeBlockContent\">\n @if (!tabsHidden()) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files(); track file) {\n <!-- Mark tab-link as readonly if only single file present -->\n <div\n kbqTabLink\n [active]=\"$count > 1 && renderedFileIndex() === $index\"\n [style.pointer-events]=\"$count === 1 ? 'none' : null\"\n (click)=\"onSelectedTabChange($index)\"\n >\n @if (tabLinkTemplate(); as linkTemplate) {\n <ng-container\n *ngTemplateOutlet=\"linkTemplate; context: { $implicit: file, fallbackFileName }\"\n />\n } @else {\n {{ file.filename || fallbackFileName }}\n }\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\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 [attr.aria-label]=\"\n softWrap() ? localeConfiguration().softWrapOffTooltip : localeConfiguration().softWrapOnTooltip\n \"\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-text-overflow_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-text-wrap_16\"></i>\n }\n </button>\n }\n\n @if (canDownload()) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [attr.aria-label]=\"localeConfiguration().downloadTooltip\"\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 [attr.aria-label]=\"localeConfiguration().copyTooltip\"\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 (activeFile()?.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [attr.aria-label]=\"localeConfiguration().openExternalSystemTooltip\"\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 #codeBlockContent=\"kbqOverflowShadowContainer\"\n cdkMonitorElementFocus\n kbqOverflowShadowContainer\n kbqScrollbarViewport\n kbqTabNavPanel\n class=\"kbq-code-block__main\"\n tabindex=\"0\"\n [style.max-height.px]=\"calculatedMaxHeight()\"\n>\n @if (activeFile(); as file) {\n <pre\n #codeBlockPre\n class=\"kbq-code-block__pre\"\n ><code #codeBlockCode kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n }\n\n @if (contentExceedsMaxHeight()) {\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, KbqCodeBlockTabLinkContent } from './code-block';\n\nconst COMPONENTS = [\n KbqCodeBlock,\n KbqCodeBlockTabLinkContent\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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"}
@@ -96,7 +96,7 @@ class KbqContentPanelHeader {
96
96
  </div>
97
97
  </div>
98
98
  <ng-content />
99
- `, isInline: true, styles: [".kbq-content-panel-header{display:flex;flex-direction:column;padding:var(--kbq-size-l) var(--kbq-content-panel-vertical-padding)}.kbq-content-panel-header .kbq-content-panel-header__wrapper{display:flex;justify-content:space-between}.kbq-content-panel-header .kbq-content-panel-header__actions{display:flex;justify-content:flex-end}.kbq-content-panel-header .kbq-content-panel-header__close-button{margin-left:var(--kbq-size-m)}.kbq-content-panel-header .kbq-content-panel-header-title{font-size:var(--kbq-typography-title-font-size);font-style:var(--kbq-typography-title-font-style);font-weight:var(--kbq-typography-title-font-weight);line-height:var(--kbq-typography-title-line-height);font-family:var(--kbq-typography-title-font-family);text-transform:var(--kbq-typography-title-text-transform);font-feature-settings:var(--kbq-typography-title-font-feature-settings);letter-spacing:var(--kbq-typography-title-letter-spacing)}.kbq-content-panel-header .kbq-content-panel-header-actions{display:flex;gap:var(--kbq-size-s)}\n"], dependencies: [{ 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: "ngmodule", type: KbqIconModule }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
99
+ `, isInline: true, styles: [".kbq-content-panel-header{display:flex;flex-direction:column;padding:var(--kbq-size-l) var(--kbq-content-panel-vertical-padding)}.kbq-content-panel-header .kbq-content-panel-header__wrapper{display:flex}.kbq-content-panel-header .kbq-content-panel-header__actions{display:flex;margin-inline-start:auto}.kbq-content-panel-header .kbq-content-panel-header__close-button{margin-inline-start:var(--kbq-size-m)}.kbq-content-panel-header .kbq-content-panel-header-title{font-size:var(--kbq-typography-title-font-size);font-style:var(--kbq-typography-title-font-style);font-weight:var(--kbq-typography-title-font-weight);line-height:var(--kbq-typography-title-line-height);font-family:var(--kbq-typography-title-font-family);text-transform:var(--kbq-typography-title-text-transform);font-feature-settings:var(--kbq-typography-title-font-feature-settings);letter-spacing:var(--kbq-typography-title-letter-spacing)}.kbq-content-panel-header .kbq-content-panel-header-actions{display:flex;gap:var(--kbq-size-s)}\n"], dependencies: [{ 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: "ngmodule", type: KbqIconModule }, { kind: "component", type: i3.KbqIcon, selector: "[kbq-icon]", inputs: ["aria-hidden", "iconSize", "autoColor", "kbq-icon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
100
100
  }
101
101
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqContentPanelHeader, decorators: [{
102
102
  type: Component,
@@ -126,7 +126,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
126
126
  '[style.box-shadow]': 'contentPanel.bodyOverflow().top ? "var(--kbq-content-panel-header-overflow-box-shadow)" : null'
127
127
  }, hostDirectives: [
128
128
  { directive: KbqLocaleOverridesDirective, inputs: ['kbqLocaleOverrides: localeOverrides'] }
129
- ], styles: [".kbq-content-panel-header{display:flex;flex-direction:column;padding:var(--kbq-size-l) var(--kbq-content-panel-vertical-padding)}.kbq-content-panel-header .kbq-content-panel-header__wrapper{display:flex;justify-content:space-between}.kbq-content-panel-header .kbq-content-panel-header__actions{display:flex;justify-content:flex-end}.kbq-content-panel-header .kbq-content-panel-header__close-button{margin-left:var(--kbq-size-m)}.kbq-content-panel-header .kbq-content-panel-header-title{font-size:var(--kbq-typography-title-font-size);font-style:var(--kbq-typography-title-font-style);font-weight:var(--kbq-typography-title-font-weight);line-height:var(--kbq-typography-title-line-height);font-family:var(--kbq-typography-title-font-family);text-transform:var(--kbq-typography-title-text-transform);font-feature-settings:var(--kbq-typography-title-font-feature-settings);letter-spacing:var(--kbq-typography-title-letter-spacing)}.kbq-content-panel-header .kbq-content-panel-header-actions{display:flex;gap:var(--kbq-size-s)}\n"] }]
129
+ ], styles: [".kbq-content-panel-header{display:flex;flex-direction:column;padding:var(--kbq-size-l) var(--kbq-content-panel-vertical-padding)}.kbq-content-panel-header .kbq-content-panel-header__wrapper{display:flex}.kbq-content-panel-header .kbq-content-panel-header__actions{display:flex;margin-inline-start:auto}.kbq-content-panel-header .kbq-content-panel-header__close-button{margin-inline-start:var(--kbq-size-m)}.kbq-content-panel-header .kbq-content-panel-header-title{font-size:var(--kbq-typography-title-font-size);font-style:var(--kbq-typography-title-font-style);font-weight:var(--kbq-typography-title-font-weight);line-height:var(--kbq-typography-title-line-height);font-family:var(--kbq-typography-title-font-family);text-transform:var(--kbq-typography-title-text-transform);font-feature-settings:var(--kbq-typography-title-font-feature-settings);letter-spacing:var(--kbq-typography-title-letter-spacing)}.kbq-content-panel-header .kbq-content-panel-header-actions{display:flex;gap:var(--kbq-size-s)}\n"] }]
130
130
  }] });
131
131
  class KbqContentPanelBody {
132
132
  constructor() {
@@ -193,7 +193,7 @@ class KbqContentPanel {
193
193
  <ng-content select="kbq-content-panel-body" />
194
194
  <ng-content select="kbq-content-panel-footer" />
195
195
  </div>
196
- `, isInline: true, styles: [".kbq-content-panel-container{--kbq-content-panel-resizer-width: var(--kbq-size-l);--kbq-content-panel-border-radius: var(--kbq-size-l);--kbq-content-panel-background-color: var(--kbq-background-card);--kbq-content-panel-border: var(--kbq-size-border-width) solid var(--kbq-line-contrast-less);--kbq-content-panel-header-overflow-box-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-content-panel-footer-overflow-box-shadow: var(--kbq-shadow-overflow-normal-top);--kbq-content-panel-vertical-padding: var(--kbq-size-xxl)}\n", ".kbq-content-panel{display:flex;border-radius:var(--kbq-content-panel-border-radius)}@supports (corner-shape: squircle){.kbq-content-panel{corner-shape:squircle;border-radius:clamp(var(--kbq-content-panel-border-radius) * 1.85,var(--kbq-content-panel-border-radius) * 2.3 - 3.6px,var(--kbq-content-panel-border-radius) * 2)}}.kbq-content-panel{background-color:var(--kbq-content-panel-background-color);border:var(--kbq-content-panel-border);height:100%;box-sizing:border-box;position:relative}.kbq-content-panel .kbq-content-panel__content{display:flex;flex:1;flex-direction:column;border-top-right-radius:inherit;border-bottom-right-radius:inherit;corner-shape:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
196
+ `, isInline: true, styles: [".kbq-content-panel-container{--kbq-content-panel-resizer-width: var(--kbq-size-l);--kbq-content-panel-border-radius: var(--kbq-size-l);--kbq-content-panel-background-color: var(--kbq-background-card);--kbq-content-panel-border: var(--kbq-size-border-width) solid var(--kbq-line-contrast-less);--kbq-content-panel-header-overflow-box-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-content-panel-footer-overflow-box-shadow: var(--kbq-shadow-overflow-normal-top);--kbq-content-panel-vertical-padding: var(--kbq-size-xxl)}\n", ".kbq-content-panel{display:flex;flex-grow:1;min-width:0;border-radius:var(--kbq-content-panel-border-radius)}@supports (corner-shape: squircle){.kbq-content-panel{corner-shape:squircle;border-radius:clamp(var(--kbq-content-panel-border-radius) * 1.85,var(--kbq-content-panel-border-radius) * 2.3 - 3.6px,var(--kbq-content-panel-border-radius) * 2)}}.kbq-content-panel{background-color:var(--kbq-content-panel-background-color);border:var(--kbq-content-panel-border);height:100%;box-sizing:border-box;position:relative}.kbq-content-panel .kbq-content-panel__content{display:flex;flex:1;flex-direction:column;min-width:0;border-top-right-radius:inherit;border-bottom-right-radius:inherit;corner-shape:inherit}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
197
197
  }
198
198
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImport: i0, type: KbqContentPanel, decorators: [{
199
199
  type: Component,
@@ -206,7 +206,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.25", ngImpo
206
206
  </div>
207
207
  `, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
208
208
  class: 'kbq-content-panel'
209
- }, styles: [".kbq-content-panel-container{--kbq-content-panel-resizer-width: var(--kbq-size-l);--kbq-content-panel-border-radius: var(--kbq-size-l);--kbq-content-panel-background-color: var(--kbq-background-card);--kbq-content-panel-border: var(--kbq-size-border-width) solid var(--kbq-line-contrast-less);--kbq-content-panel-header-overflow-box-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-content-panel-footer-overflow-box-shadow: var(--kbq-shadow-overflow-normal-top);--kbq-content-panel-vertical-padding: var(--kbq-size-xxl)}\n", ".kbq-content-panel{display:flex;border-radius:var(--kbq-content-panel-border-radius)}@supports (corner-shape: squircle){.kbq-content-panel{corner-shape:squircle;border-radius:clamp(var(--kbq-content-panel-border-radius) * 1.85,var(--kbq-content-panel-border-radius) * 2.3 - 3.6px,var(--kbq-content-panel-border-radius) * 2)}}.kbq-content-panel{background-color:var(--kbq-content-panel-background-color);border:var(--kbq-content-panel-border);height:100%;box-sizing:border-box;position:relative}.kbq-content-panel .kbq-content-panel__content{display:flex;flex:1;flex-direction:column;border-top-right-radius:inherit;border-bottom-right-radius:inherit;corner-shape:inherit}\n"] }]
209
+ }, styles: [".kbq-content-panel-container{--kbq-content-panel-resizer-width: var(--kbq-size-l);--kbq-content-panel-border-radius: var(--kbq-size-l);--kbq-content-panel-background-color: var(--kbq-background-card);--kbq-content-panel-border: var(--kbq-size-border-width) solid var(--kbq-line-contrast-less);--kbq-content-panel-header-overflow-box-shadow: var(--kbq-shadow-overflow-normal-bottom);--kbq-content-panel-footer-overflow-box-shadow: var(--kbq-shadow-overflow-normal-top);--kbq-content-panel-vertical-padding: var(--kbq-size-xxl)}\n", ".kbq-content-panel{display:flex;flex-grow:1;min-width:0;border-radius:var(--kbq-content-panel-border-radius)}@supports (corner-shape: squircle){.kbq-content-panel{corner-shape:squircle;border-radius:clamp(var(--kbq-content-panel-border-radius) * 1.85,var(--kbq-content-panel-border-radius) * 2.3 - 3.6px,var(--kbq-content-panel-border-radius) * 2)}}.kbq-content-panel{background-color:var(--kbq-content-panel-background-color);border:var(--kbq-content-panel-border);height:100%;box-sizing:border-box;position:relative}.kbq-content-panel .kbq-content-panel__content{display:flex;flex:1;flex-direction:column;min-width:0;border-top-right-radius:inherit;border-bottom-right-radius:inherit;corner-shape:inherit}\n"] }]
210
210
  }], propDecorators: { contentPanelBody: [{ type: i0.ContentChild, args: [i0.forwardRef(() => KbqContentPanelBody), { isSignal: true }] }] } });
211
211
  /** How long a resize has to settle before the width is written. */
212
212
  const resizeWriteDebounce = 300;