@koobiq/components 18.29.0 → 18.30.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 (78) hide show
  1. package/code-block/_code-block-theme.scss +4 -12
  2. package/code-block/code-block-tokens.scss +3 -2
  3. package/code-block/code-block.scss +41 -10
  4. package/core/formatters/filesize/size.d.ts +19 -3
  5. package/core/forms/validators.d.ts +13 -0
  6. package/core/pop-up/pop-up-trigger.d.ts +3 -4
  7. package/core/pop-up/pop-up.d.ts +2 -1
  8. package/core/select/common.d.ts +3 -3
  9. package/ellipsis-center/ellipsis-center.directive.d.ts +8 -2
  10. package/esm2022/actions-panel/actions-panel-container.mjs +2 -2
  11. package/esm2022/code-block/code-block.mjs +6 -3
  12. package/esm2022/core/formatters/filesize/formatter.mjs +6 -9
  13. package/esm2022/core/formatters/filesize/size.mjs +15 -17
  14. package/esm2022/core/forms/validators.mjs +22 -1
  15. package/esm2022/core/pop-up/pop-up-trigger.mjs +19 -10
  16. package/esm2022/core/pop-up/pop-up.mjs +6 -2
  17. package/esm2022/core/select/common.mjs +6 -4
  18. package/esm2022/core/version.mjs +2 -2
  19. package/esm2022/ellipsis-center/ellipsis-center.directive.mjs +14 -4
  20. package/esm2022/file-upload/file-upload.mjs +2 -1
  21. package/esm2022/file-upload/multiple-file-upload.component.mjs +21 -7
  22. package/esm2022/file-upload/single-file-upload.component.mjs +16 -7
  23. package/esm2022/filter-bar/filter-search.mjs +2 -2
  24. package/esm2022/filter-bar/filters.mjs +2 -2
  25. package/esm2022/filter-bar/pipe-add.mjs +2 -2
  26. package/esm2022/filter-bar/pipes/pipe-button.mjs +1 -1
  27. package/esm2022/filter-bar/pipes/pipe-date.mjs +2 -2
  28. package/esm2022/filter-bar/pipes/pipe-datetime.mjs +2 -2
  29. package/esm2022/filter-bar/pipes/pipe-text.mjs +2 -2
  30. package/esm2022/form-field/form-field.mjs +8 -8
  31. package/esm2022/form-field/stepper.mjs +20 -4
  32. package/esm2022/overflow-items/overflow-items.mjs +43 -70
  33. package/esm2022/popover/popover.component.mjs +10 -4
  34. package/esm2022/select/select.component.mjs +5 -6
  35. package/esm2022/tabs/tab-group.component.mjs +1 -1
  36. package/esm2022/tooltip/tooltip.component.mjs +12 -3
  37. package/esm2022/top-bar/top-bar.mjs +2 -2
  38. package/fesm2022/koobiq-components-actions-panel.mjs +1 -1
  39. package/fesm2022/koobiq-components-actions-panel.mjs.map +1 -1
  40. package/fesm2022/koobiq-components-code-block.mjs +5 -2
  41. package/fesm2022/koobiq-components-code-block.mjs.map +1 -1
  42. package/fesm2022/koobiq-components-core.mjs +68 -37
  43. package/fesm2022/koobiq-components-core.mjs.map +1 -1
  44. package/fesm2022/koobiq-components-ellipsis-center.mjs +13 -3
  45. package/fesm2022/koobiq-components-ellipsis-center.mjs.map +1 -1
  46. package/fesm2022/koobiq-components-file-upload.mjs +32 -10
  47. package/fesm2022/koobiq-components-file-upload.mjs.map +1 -1
  48. package/fesm2022/koobiq-components-filter-bar.mjs +7 -7
  49. package/fesm2022/koobiq-components-filter-bar.mjs.map +1 -1
  50. package/fesm2022/koobiq-components-form-field.mjs +25 -10
  51. package/fesm2022/koobiq-components-form-field.mjs.map +1 -1
  52. package/fesm2022/koobiq-components-overflow-items.mjs +42 -69
  53. package/fesm2022/koobiq-components-overflow-items.mjs.map +1 -1
  54. package/fesm2022/koobiq-components-popover.mjs +9 -3
  55. package/fesm2022/koobiq-components-popover.mjs.map +1 -1
  56. package/fesm2022/koobiq-components-select.mjs +4 -5
  57. package/fesm2022/koobiq-components-select.mjs.map +1 -1
  58. package/fesm2022/koobiq-components-tabs.mjs +1 -1
  59. package/fesm2022/koobiq-components-tabs.mjs.map +1 -1
  60. package/fesm2022/koobiq-components-tooltip.mjs +11 -2
  61. package/fesm2022/koobiq-components-tooltip.mjs.map +1 -1
  62. package/fesm2022/koobiq-components-top-bar.mjs +2 -2
  63. package/fesm2022/koobiq-components-top-bar.mjs.map +1 -1
  64. package/file-upload/_file-upload-theme.scss +38 -22
  65. package/file-upload/file-upload-tokens.scss +37 -14
  66. package/file-upload/file-upload.d.ts +1 -0
  67. package/file-upload/multiple-file-upload.component.d.ts +12 -5
  68. package/file-upload/multiple-file-upload.component.scss +66 -69
  69. package/file-upload/single-file-upload.component.d.ts +7 -1
  70. package/file-upload/single-file-upload.component.scss +8 -0
  71. package/form-field/form-field.d.ts +3 -1
  72. package/form-field/stepper.d.ts +15 -1
  73. package/overflow-items/overflow-items.d.ts +16 -25
  74. package/package.json +4 -4
  75. package/popover/popover.component.d.ts +4 -2
  76. package/schematics/ng-add/index.js +2 -2
  77. package/tooltip/tooltip.component.d.ts +8 -1
  78. package/top-bar/top-bar.scss +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"koobiq-components-code-block.mjs","sources":["../../../packages/components/code-block/code-block-highlight.ts","../../../packages/components/code-block/code-block.ts","../../../packages/components/code-block/code-block.html","../../../packages/components/code-block/code-block.module.ts","../../../packages/components/code-block/koobiq-components-code-block.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n Provider,\n Renderer2,\n SecurityContext\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport hljs from 'highlight.js';\nimport { KbqCodeBlockFile } from './types';\n\n/**\n * Fallback language for code block if language is not supported/specified.\n *\n * List of supported languages:\n * @link https://highlightjs.readthedocs.io/en/stable/supported-languages.html\n */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE = new InjectionToken<string>(\n 'KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE',\n { factory: () => 'plaintext' }\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE`. */\nexport const kbqCodeBlockFallbackFileLanguageProvider = (language: string): Provider => ({\n provide: KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE,\n useValue: language\n});\n\n/** Directive which applies syntax highlighting to the code block content. */\n@Directive({\n standalone: true,\n selector: 'code[kbqCodeBlockHighlight]',\n host: {\n class: 'hljs'\n }\n})\nexport class KbqCodeBlockHighlight {\n private readonly nativeElement = inject(ElementRef).nativeElement;\n private readonly document = inject<Document>(DOCUMENT);\n private readonly renderer = inject(Renderer2);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);\n\n /** The code file. */\n @Input({ required: true })\n set file(file: KbqCodeBlockFile) {\n const window = this.getWindow();\n\n if (!window) return;\n\n let { language } = file;\n\n if (!language || !hljs.getLanguage(language)) {\n console.warn(\n `[KbqCodeBlock] Unknown file language: \"${language}\". Fall back to \"${this.fallbackFileLanguage}\".`,\n file\n );\n language = this.fallbackFileLanguage;\n }\n\n const {\n value: highlightedHTML,\n language: highlightedLanguage,\n illegal,\n relevance\n } = hljs.highlight(file.content, {\n language: language!\n });\n\n if (illegal) {\n console.warn('[KbqCodeBlock] File content contains illegal characters.', file);\n }\n\n if (relevance === 0) {\n console.warn('[KbqCodeBlock] File content does not match the specified programming language.', file);\n }\n\n const safeHTML = this.domSanitizer.sanitize(SecurityContext.HTML, highlightedHTML);\n const highlightedHTMLWithLineNumbers = window['hljs'].lineNumbersValue(safeHTML, {\n startFrom: this.startFrom,\n singleLine: this.singleLine\n });\n\n this.renderer.setAttribute(this.nativeElement, 'data-language', highlightedLanguage!);\n this.renderer.setProperty(this.nativeElement, 'innerHTML', highlightedHTMLWithLineNumbers);\n }\n\n /** The starting line number. */\n @Input({ transform: numberAttribute }) startFrom: number = 1;\n\n /** Whether to display line numbers for single line code block. */\n @Input({ transform: booleanAttribute }) singleLine: boolean = false;\n\n constructor() {\n this.initLineNumbersPlugin();\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private getWindow(): Window {\n return this.document?.defaultView || window;\n }\n\n /**\n * Initialize the HighlightJS line numbers plugin. This method is called once when\n * the component is constructed.\n */\n private initLineNumbersPlugin(): void {\n const window = this.getWindow();\n\n if (!window) return;\n\n window['hljs'] = hljs;\n this.highlightJSLineNumbersPlugin(this.document, window);\n }\n\n /**\n * This method is not intended for editing.\n * Changes may lead to unpredictable behavior.\n * Source code: https://github.com/wcoder/highlightjs-line-numbers.js/blob/v2.9.0/src/highlightjs-line-numbers.js\n */\n private highlightJSLineNumbersPlugin(d: Document, w: Window): void {\n 'use strict';\n\n if (!w) return;\n\n const TABLE_NAME = 'hljs-ln',\n LINE_NAME = 'hljs-ln-line',\n CODE_BLOCK_NAME = 'hljs-ln-code',\n NUMBERS_BLOCK_NAME = 'hljs-ln-numbers',\n NUMBER_LINE_NAME = 'hljs-ln-n',\n DATA_ATTR_NAME = 'data-line-number',\n BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g;\n\n if (w['hljs']) {\n w['hljs'].initLineNumbersOnLoad = initLineNumbersOnLoad;\n w['hljs'].lineNumbersBlock = lineNumbersBlock;\n w['hljs'].lineNumbersBlockSync = lineNumbersBlockSync;\n w['hljs'].lineNumbersValue = lineNumbersValue;\n\n addStyles();\n } else {\n console.error('highlight.js not detected!');\n }\n\n function isHljsLnCodeDescendant(domElt) {\n let curElt = domElt;\n\n while (curElt) {\n if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {\n return true;\n }\n\n curElt = curElt.parentNode;\n }\n\n return false;\n }\n\n function getHljsLnTable(hljsLnDomElt) {\n let curElt = hljsLnDomElt;\n\n while (curElt.nodeName !== 'TABLE') {\n curElt = curElt.parentNode;\n }\n\n return curElt;\n }\n\n // Function to workaround a copy issue with Microsoft Edge.\n // Due to hljs-ln wrapping the lines of code inside a <table> element,\n // itself wrapped inside a <pre> element, window.getSelection().toString()\n // does not contain any line breaks. So we need to get them back using the\n // rendered code in the DOM as reference.\n function edgeGetSelectedCodeLines(selection) {\n // current selected text without line breaks\n const selectionText = selection.toString();\n\n // get the <td> element wrapping the first line of selected code\n let tdAnchor = selection.anchorNode;\n\n while (tdAnchor.nodeName !== 'TD') {\n tdAnchor = tdAnchor.parentNode;\n }\n\n // get the <td> element wrapping the last line of selected code\n let tdFocus = selection.focusNode;\n\n while (tdFocus.nodeName !== 'TD') {\n tdFocus = tdFocus.parentNode;\n }\n\n // extract line numbers\n let firstLineNumber = parseInt(tdAnchor.dataset.lineNumber);\n let lastLineNumber = parseInt(tdFocus.dataset.lineNumber);\n\n // multi-lines copied case\n if (firstLineNumber != lastLineNumber) {\n let firstLineText = tdAnchor.textContent;\n let lastLineText = tdFocus.textContent;\n\n // if the selection was made backward, swap values\n if (firstLineNumber > lastLineNumber) {\n let tmp = firstLineNumber;\n\n firstLineNumber = lastLineNumber;\n lastLineNumber = tmp;\n tmp = firstLineText;\n firstLineText = lastLineText;\n lastLineText = tmp;\n }\n\n // discard not copied characters in first line\n while (selectionText.indexOf(firstLineText) !== 0) {\n firstLineText = firstLineText.slice(1);\n }\n\n // discard not copied characters in last line\n while (selectionText.lastIndexOf(lastLineText) === -1) {\n lastLineText = lastLineText.slice(0, -1);\n }\n\n // reconstruct and return the real copied text\n let selectedText = firstLineText;\n const hljsLnTable = getHljsLnTable(tdAnchor);\n\n for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {\n const codeLineSel = format('.{0}[{1}=\"{2}\"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i]);\n const codeLineElt = hljsLnTable.querySelector(codeLineSel);\n\n selectedText += '\\n' + codeLineElt.textContent;\n }\n\n selectedText += '\\n' + lastLineText;\n\n return selectedText;\n // single copied line case\n } else {\n return selectionText;\n }\n }\n\n // ensure consistent code copy/paste behavior across all browsers\n // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)\n d.addEventListener('copy', function (e) {\n // get current selection\n const selection = w.getSelection()!;\n\n // override behavior when one wants to copy line of codes\n if (isHljsLnCodeDescendant(selection.anchorNode)) {\n let selectionText;\n\n // workaround an issue with Microsoft Edge as copied line breaks\n // are removed otherwise from the selection string\n if (w.navigator.userAgent.indexOf('Edge') !== -1) {\n selectionText = edgeGetSelectedCodeLines(selection);\n } else {\n // other browsers can directly use the selection string\n selectionText = selection.toString();\n }\n\n e.clipboardData!.setData('text/plain', selectionText);\n e.preventDefault();\n }\n });\n\n function addStyles() {\n const css = d.createElement('style');\n\n css.type = 'text/css';\n css.innerHTML = format(\n '.{0}{border-collapse:collapse}' + '.{0} td{padding:0}' + '.{1}:before{content:attr({2})}',\n [\n TABLE_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME\n ]\n );\n d.getElementsByTagName('head')[0].appendChild(css);\n }\n\n function initLineNumbersOnLoad(options) {\n if (d.readyState === 'interactive' || d.readyState === 'complete') {\n documentReady(options);\n } else {\n w.addEventListener('DOMContentLoaded', function () {\n documentReady(options);\n });\n }\n }\n\n function documentReady(options) {\n try {\n const blocks = d.querySelectorAll('code.hljs,code.nohighlight');\n\n for (const i in blocks) {\n if (blocks.hasOwnProperty(i)) {\n if (!isPluginDisabledForBlock(blocks[i])) {\n lineNumbersBlock(blocks[i], options);\n }\n }\n }\n } catch (e) {\n console.error('LineNumbers error: ', e);\n }\n }\n\n function isPluginDisabledForBlock(element) {\n return element.classList.contains('nohljsln');\n }\n\n function lineNumbersBlock(element, options) {\n if (typeof element !== 'object') return;\n\n async(function () {\n element.innerHTML = lineNumbersInternal(element, options);\n });\n }\n\n function lineNumbersBlockSync(element, options) {\n if (typeof element !== 'object') return;\n\n element.innerHTML = lineNumbersInternal(element, options);\n }\n\n function lineNumbersValue(value, options) {\n if (typeof value !== 'string') return;\n\n const element = d.createElement('code');\n\n element.innerHTML = value;\n\n return lineNumbersInternal(element, options);\n }\n\n function lineNumbersInternal(element, options) {\n const internalOptions = mapOptions(element, options);\n\n duplicateMultilineNodes(element);\n\n return addLineNumbersBlockFor(element.innerHTML, internalOptions);\n }\n\n function addLineNumbersBlockFor(inputHtml, options) {\n const lines = getLines(inputHtml);\n\n // if last line contains only carriage return remove it\n if (lines[lines.length - 1].trim() === '') {\n lines.pop();\n }\n\n if (lines.length > 1 || options.singleLine) {\n let html = '';\n\n for (let i = 0, l = lines.length; i < l; i++) {\n html += format(\n '<tr>' +\n '<td class=\"{0} {1}\" {3}=\"{5}\">' +\n '<div class=\"{2}\" {3}=\"{5}\"></div>' +\n '</td>' +\n '<td class=\"{0} {4}\" {3}=\"{5}\">' +\n '{6}' +\n '</td>' +\n '</tr>',\n [\n LINE_NAME,\n NUMBERS_BLOCK_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME,\n CODE_BLOCK_NAME,\n i + options.startFrom,\n lines[i].length > 0 ? lines[i] : ' '\n ]\n );\n }\n\n return format('<table class=\"{0}\">{1}</table>', [TABLE_NAME, html]);\n }\n\n return inputHtml;\n }\n\n /**\n * @param {HTMLElement} element Code block.\n * @param {Object} options External API options.\n * @returns {Object} Internal API options.\n */\n function mapOptions(element, options) {\n options = options || {};\n\n return {\n singleLine: getSingleLineOption(options),\n startFrom: getStartFromOption(element, options)\n };\n }\n\n function getSingleLineOption(options) {\n const defaultValue = false;\n\n if (options.singleLine) {\n return options.singleLine;\n }\n\n return defaultValue;\n }\n\n function getStartFromOption(element, options) {\n const defaultValue = 1;\n let startFrom = defaultValue;\n\n if (isFinite(options.startFrom)) {\n startFrom = options.startFrom;\n }\n\n // can be overridden because local option is priority\n const value = getAttribute(element, 'data-ln-start-from');\n\n if (value !== null) {\n startFrom = toNumber(value, defaultValue);\n }\n\n return startFrom;\n }\n\n /**\n * Recursive method for fix multi-line elements implementation in highlight.js\n * Doing deep passage on child nodes.\n * @param {HTMLElement} element\n */\n function duplicateMultilineNodes(element) {\n const nodes = element.childNodes;\n\n for (const node in nodes) {\n if (nodes.hasOwnProperty(node)) {\n const child = nodes[node];\n\n if (getLinesCount(child.textContent) > 0) {\n if (child.childNodes.length > 0) {\n duplicateMultilineNodes(child);\n } else {\n duplicateMultilineNode(child.parentNode);\n }\n }\n }\n }\n }\n\n /**\n * Method for fix multi-line elements implementation in highlight.js\n * @param {HTMLElement} element\n */\n function duplicateMultilineNode(element) {\n const className = element.className;\n\n if (!/hljs-/.test(className)) return;\n\n const lines = getLines(element.innerHTML);\n\n let result = '';\n\n for (let i = 0; i < lines.length; i++) {\n const lineText = lines[i].length > 0 ? lines[i] : ' ';\n\n result += format('<span class=\"{0}\">{1}</span>\\n', [className, lineText]);\n }\n\n element.innerHTML = result.trim();\n }\n\n function getLines(text) {\n if (text.length === 0) return [];\n\n return text.split(BREAK_LINE_REGEXP);\n }\n\n function getLinesCount(text) {\n return (text.trim().match(BREAK_LINE_REGEXP) || []).length;\n }\n\n ///\n /// HELPERS\n ///\n\n function async(func) {\n w.setTimeout(func, 0);\n }\n\n /**\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\n * @param {string} format\n * @param {array} args\n */\n function format(format, args) {\n return format.replace(/\\{(\\d+)\\}/g, function (m, n) {\n return args[n] !== undefined ? args[n] : m;\n });\n }\n\n /**\n * @param {HTMLElement} element Code block.\n * @param {String} attrName Attribute name.\n * @returns {String} Attribute value or empty.\n */\n function getAttribute(element, attrName) {\n return element.hasAttribute(attrName) ? element.getAttribute(attrName) : null;\n }\n\n /**\n * @param {String} str Source string.\n * @param {Number} fallback Fallback value.\n * @returns Parsed number or fallback value.\n */\n function toNumber(str, fallback) {\n if (!str) return fallback;\n const number = Number(str);\n\n return isFinite(number) ? number : fallback;\n }\n }\n}\n","import { A11yModule, FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { Platform } from '@angular/cdk/platform';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n Output,\n Provider,\n Renderer2,\n SecurityContext,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';\nimport {\n KBQ_LOCALE_SERVICE,\n KbqCodeBlockLocaleConfiguration,\n KbqComponentColors,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTabsModule } from '@koobiq/components/tabs';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { debounceTime, fromEvent, merge } from 'rxjs';\nimport { KbqCodeBlockHighlight } from './code-block-highlight';\nimport { KbqCodeBlockFile } from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_CODE_BLOCK_LOCALE_CONFIGURATION = new InjectionToken<KbqCodeBlockLocaleConfiguration>(\n 'KBQ_CODE_BLOCK_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.codeBlock }\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_LOCALE_CONFIGURATION`. */\nexport const kbqCodeBlockLocaleConfigurationProvider = (configuration: KbqCodeBlockLocaleConfiguration): Provider => ({\n provide: KBQ_CODE_BLOCK_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n/** Fallback file name for code block if file name is not specified. */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_NAME = new InjectionToken<string>('KBQ_CODE_BLOCK_FALLBACK_FILE_NAME', {\n factory: () => 'code'\n});\n\n/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_NAME`. */\nexport const kbqCodeBlockFallbackFileNameProvider = (fileName: string): Provider => ({\n provide: KBQ_CODE_BLOCK_FALLBACK_FILE_NAME,\n useValue: fileName\n});\n\n/**\n * Component which highlights blocks of code.\n */\n@Component({\n standalone: true,\n imports: [\n KbqTabsModule,\n KbqButtonModule,\n KbqCodeBlockHighlight,\n A11yModule,\n CdkScrollableModule,\n KbqToolTipModule,\n KbqIconModule\n ],\n selector: 'kbq-code-block',\n exportAs: 'kbqCodeBlock',\n templateUrl: './code-block.html',\n styleUrls: ['./code-block.scss', './code-block-tokens.scss'],\n host: {\n class: 'kbq-code-block',\n '[class.kbq-code-block_filled]': 'filled',\n '[class.kbq-code-block_outline]': '!filled',\n '[class.kbq-code-block_hide-line-numbers]': '!lineNumbers',\n '[class.kbq-code-block_hide-tabs]': 'hideTabs',\n '[class.kbq-code-block_no-border]': 'noBorder || filled',\n '[class.kbq-code-block_soft-wrap]': 'softWrap',\n '[class.kbq-code-block_view-all]': 'viewAll'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqCodeBlock implements AfterViewInit {\n @ViewChild('copyButtonTooltip') private readonly copyButtonTooltip?: KbqTooltipTrigger;\n @ViewChild(CdkScrollable) readonly scrollableCodeContent: CdkScrollable;\n\n /** Whether to display line numbers. */\n @Input({ transform: booleanAttribute }) lineNumbers = false;\n\n /** Whether the code block should be filled. */\n @Input({ transform: booleanAttribute }) filled: boolean = false;\n\n /** Added soft wrap toggle button. */\n @Input({ transform: booleanAttribute }) canToggleSoftWrap: boolean = false;\n\n /** Whether sequences of whitespace should be preserved. */\n @Input({ transform: booleanAttribute }) softWrap: boolean = false;\n\n /** Event emitted when `softWrap` is changed. */\n @Output() readonly softWrapChange = new EventEmitter<boolean>();\n\n /**\n * Allows to view all the code, otherwise it will be hidden.\n * Works only with `maxHeight` property.\n */\n @Input({ transform: booleanAttribute }) viewAll: boolean = false;\n\n /** Event emitted when `viewAll` is changed. */\n @Output() readonly viewAllChange = new EventEmitter<boolean>();\n\n /**\n * Maximum height of the code block content, other parts will be hidden.\n * Can be toggled by `viewAll` property.\n */\n @Input({ transform: numberAttribute }) maxHeight: number;\n\n protected get calculatedMaxHeight(): number | null {\n return this.maxHeight > 0 && !this.viewAll ? this.maxHeight : null;\n }\n\n /** @deprecated Will be removed in next major release, use `canDownload` instead. */\n @Input({ transform: booleanAttribute })\n set canLoad(value: boolean) {\n this.canDownload = value;\n }\n\n /** Added download code button. */\n @Input({ transform: booleanAttribute }) canDownload: boolean = false;\n\n /** Added copy code button. */\n @Input({ transform: booleanAttribute }) canCopy: boolean = true;\n\n /** @deprecated Will be removed in next major release, use `files` instead. */\n @Input()\n set codeFiles(files: KbqCodeBlockFile[]) {\n this.files = files;\n }\n\n /**\n * @TODO Mark as `required`, after removing `codeFiles`\n *\n * Files to display.\n */\n @Input()\n get files(): KbqCodeBlockFile[] {\n return this._files;\n }\n\n set files(files: KbqCodeBlockFile[]) {\n this._files = files;\n\n if (this._files.length < this.activeFileIndex) {\n this.onSelectedTabChange(0);\n }\n\n if (this._files.length === 1 && !this._files[0].filename) {\n this.hideTabs = true;\n }\n }\n\n private _files: KbqCodeBlockFile[] = [];\n\n /** Defines which file (index) is active. */\n @Input({ transform: numberAttribute }) activeFileIndex = 0;\n\n @Output() readonly activeFileIndexChange = new EventEmitter<number>();\n\n /** Whether to hide border. */\n @Input({ transform: booleanAttribute }) noBorder: boolean = false;\n\n /**\n * Whether to hide header tabs.\n * Always `true` if there is only one file without filename.\n * Makes actionbar floating if tabs are hidden.\n */\n @Input({ transform: booleanAttribute })\n get hideTabs(): boolean {\n return this._hideTabs;\n }\n\n set hideTabs(value: boolean) {\n this._hideTabs = value;\n\n this.setupActionbarDisplay();\n }\n\n private _hideTabs: boolean = false;\n\n /** Component locale configuration. */\n protected get localeConfiguration(): KbqCodeBlockLocaleConfiguration {\n return this._localeConfiguration;\n }\n\n private _localeConfiguration: KbqCodeBlockLocaleConfiguration = inject(KBQ_CODE_BLOCK_LOCALE_CONFIGURATION);\n\n /** Code content tab index. */\n protected get codeContentTabIndex(): number {\n return this.canCodeContentBeFocused ? 0 : -1;\n }\n\n /**\n * Determines whether the code content can be focused.\n *\n * This checks if the scrollable code content element is present,\n * has a scroll, and the calculated maximum height is not set.\n */\n private get canCodeContentBeFocused(): boolean {\n const element = this.scrollableCodeContent?.getElementRef().nativeElement;\n\n return element && this.hasScroll(element) && !this.calculatedMaxHeight;\n }\n\n protected readonly componentColor = KbqComponentColors;\n protected readonly buttonStyle = KbqButtonStyles;\n\n private readonly elementRef = inject(ElementRef);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly renderer = inject(Renderer2);\n private readonly platform = inject(Platform);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly clipboard = inject(Clipboard);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly document = inject<Document>(DOCUMENT);\n protected readonly fallbackFileName = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_NAME);\n\n constructor() {\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n }\n\n ngAfterViewInit(): void {\n this.handleScroll();\n this.handleHover();\n\n // Setup initial actionbar display state\n this.setupActionbarDisplay();\n\n this.copyButtonTooltip?.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isVisible) => {\n if (isVisible) {\n this.copyButtonTooltip!.content = this.localeConfiguration.copyTooltip;\n }\n });\n }\n\n /**\n * Toggles the `viewAll` property.\n *\n * When `viewAll` is set to `true`, the content of the code block will be\n * displayed in its entirety. When set to `false`, the content will be\n * limited to the `maxHeight` property. If the content exceeds the\n * `maxHeight`, it will be scrolled to the top and the `viewAll` button\n * will be displayed.\n */\n toggleViewAll(): void {\n this.viewAll = !this.viewAll;\n\n if (!this.viewAll) {\n this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });\n }\n\n this.viewAllChange.emit(this.viewAll);\n }\n\n /**\n * Toggles `softWrap` property.\n *\n * When `softWrap` is set to `true`, the content of the code block will be\n * wrapped if it exceeds the height of the component. When set to `false`\n * the content will not be wrapped.\n */\n toggleSoftWrap(): void {\n this.softWrap = !this.softWrap;\n this.softWrapChange.emit(this.softWrap);\n }\n\n /**\n * Handles the change of the selected tab by updating the active file index\n * and scrolling to the top of the scrollable content.\n *\n * @param index - The index of the newly selected tab.\n */\n protected onSelectedTabChange(index: number): void {\n if (this.activeFileIndex !== index) {\n this.activeFileIndex = index;\n this.activeFileIndexChange.emit(this.activeFileIndex);\n this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });\n }\n }\n\n /**\n * Handles the hover event on the code block element and updates the actionbar display accordingly.\n */\n private handleHover(): void {\n merge(\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter'),\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseleave')\n )\n .pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.setupActionbarDisplay(event?.type === 'mouseenter');\n });\n }\n\n /**\n * Handles the scroll event on the scrollable code content element and updates the header shadow accordingly.\n */\n private handleScroll(): void {\n this.scrollableCodeContent\n .elementScrolled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.setupHeaderShadow(this.scrollableCodeContent.measureScrollOffset('top') > 0);\n });\n }\n\n /**\n * Adds or removes the shadow class from the code block based on the specified condition.\n *\n * @param shouldShowShadow - A boolean indicating whether to add or remove the shadow class.\n */\n private setupHeaderShadow(shouldShowShadow: boolean): void {\n const className = 'kbq-code-block_header-with-shadow';\n\n if (shouldShowShadow) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, className);\n }\n }\n\n /**\n * Adds or removes the actionbar display class from the code block based on the specified condition.\n *\n * The actionbar is always visible on mobile devices and when the tabs are visible.\n * Otherwise, the actionbar is only visible when the mouse is hovered over the code block.\n *\n * @param shouldShowActionbar - A boolean indicating whether the actionbar should be visible.\n */\n private setupActionbarDisplay(shouldShowActionbar?: boolean): void {\n const className = 'kbq-code-block_show-actionbar';\n\n // Should always show actionbar on Mobile devices\n if (this.platform.IOS || this.platform.ANDROID) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n\n return;\n }\n\n // Should always show actionbar when tabs are visible\n if (!this.hideTabs) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n\n return;\n }\n\n if (typeof shouldShowActionbar === 'undefined') {\n return;\n }\n\n if (shouldShowActionbar) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, className);\n }\n }\n\n /** Whether the element has scroll. */\n private hasScroll({ scrollHeight, scrollWidth, clientHeight, clientWidth }: HTMLElement): boolean {\n return scrollHeight > clientHeight || scrollWidth > clientWidth;\n }\n\n /** Handles the enter keydown event on `viewAll` button. */\n protected onViewAllEnterKeydown(): void {\n this.toggleViewAll();\n\n if (this.canCodeContentBeFocused) {\n this.focusMonitor.focusVia(this.scrollableCodeContent.getElementRef().nativeElement, 'keyboard');\n }\n }\n\n private updateLocaleParams = (): void => {\n this._localeConfiguration = this.localeService?.getParams('codeBlock');\n\n this.changeDetectorRef.markForCheck();\n };\n\n /**\n * Copies the file code to the clipboard.\n *\n * If the copy was successful, the copy button tooltip content is updated\n * to show the \"copied\" message.\n */\n protected copyCode(): void {\n const file = this.files[this.activeFileIndex];\n\n if (this.clipboard.copy(file.content) && this.copyButtonTooltip) {\n this.copyButtonTooltip.content = this.localeConfiguration.copiedTooltip;\n }\n }\n\n /**\n * Opens the file link in a new window.\n */\n protected openLink(): void {\n const window = this.getWindow();\n const file = this.files[this.activeFileIndex];\n const safeURL = this.domSanitizer.sanitize(SecurityContext.URL, file.link!);\n\n if (safeURL) {\n 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 protected downloadCode(): void {\n const file = this.files[this.activeFileIndex];\n const blob = new Blob([file.content], { type: 'text/plain' });\n const url = URL.createObjectURL(blob);\n const link = this.document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', file.filename || this.fallbackFileName);\n link.click();\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private getWindow(): Window | null {\n return this.document?.defaultView || window;\n }\n}\n","@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n @if (!hideTabs) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files; track file; let index = $index) {\n <div\n kbqTabLink\n [active]=\"activeFileIndex === index\"\n [disabled]=\"files.length === 1\"\n (click)=\"onSelectedTabChange(index)\"\n >\n {{ file.filename || fallbackFileName }}\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\n @if (hideTabs) {\n <div class=\"kbq-code-block__actionbar__fade-gradient\"></div>\n }\n\n <div class=\"kbq-code-block__actionbar__button-stack\">\n @if (canToggleSoftWrap) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__soft-wrap-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"\n softWrap ? localeConfiguration.softWrapOffTooltip : localeConfiguration.softWrapOnTooltip\n \"\n (click)=\"toggleSoftWrap()\"\n >\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n </button>\n }\n\n @if (canDownload) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.downloadTooltip\"\n (click)=\"downloadCode()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n @if (canCopy) {\n <div #copyButtonTooltip=\"kbqTooltip\" [kbqTooltip]=\"localeConfiguration.copyTooltip\">\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__copy-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"copyCode()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n </div>\n }\n\n @if (file.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.openExternalSystemTooltip\"\n (click)=\"openLink()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n </div>\n </div>\n</div>\n\n<pre\n #tabPanel=\"kbqTabNavPanel\"\n cdkMonitorElementFocus\n cdkScrollable\n kbqTabNavPanel\n class=\"kbq-code-block__content kbq-scrollbar\"\n [style.max-height.px]=\"calculatedMaxHeight\"\n [tabIndex]=\"codeContentTabIndex\"\n><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n\n@if (maxHeight) {\n <div\n class=\"kbq-code-block__view-all\"\n [class.kbq-code-block__view-all_collapsed]=\"!viewAll\"\n [class.kbq-code-block__view-all_expanded]=\"viewAll\"\n >\n <div class=\"kbq-code-block__view-all__wrapper\">\n <button\n kbq-button\n class=\"kbq-code-block__view-all__button\"\n [color]=\"componentColor.Theme\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"toggleViewAll()\"\n (keydown.enter)=\"onViewAllEnterKeydown()\"\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","import { NgModule } from '@angular/core';\nimport { KbqCodeBlock } from './code-block';\n\nconst COMPONENTS = [\n KbqCodeBlock\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqCodeBlockModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"koobiq-components-code-block.mjs","sources":["../../../packages/components/code-block/code-block-highlight.ts","../../../packages/components/code-block/code-block.ts","../../../packages/components/code-block/code-block.html","../../../packages/components/code-block/code-block.module.ts","../../../packages/components/code-block/koobiq-components-code-block.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport {\n booleanAttribute,\n Directive,\n ElementRef,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n Provider,\n Renderer2,\n SecurityContext\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport hljs from 'highlight.js';\nimport { KbqCodeBlockFile } from './types';\n\n/**\n * Fallback language for code block if language is not supported/specified.\n *\n * List of supported languages:\n * @link https://highlightjs.readthedocs.io/en/stable/supported-languages.html\n */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE = new InjectionToken<string>(\n 'KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE',\n { factory: () => 'plaintext' }\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE`. */\nexport const kbqCodeBlockFallbackFileLanguageProvider = (language: string): Provider => ({\n provide: KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE,\n useValue: language\n});\n\n/** Directive which applies syntax highlighting to the code block content. */\n@Directive({\n standalone: true,\n selector: 'code[kbqCodeBlockHighlight]',\n host: {\n class: 'hljs'\n }\n})\nexport class KbqCodeBlockHighlight {\n private readonly nativeElement = inject(ElementRef).nativeElement;\n private readonly document = inject<Document>(DOCUMENT);\n private readonly renderer = inject(Renderer2);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);\n\n /** The code file. */\n @Input({ required: true })\n set file(file: KbqCodeBlockFile) {\n const window = this.getWindow();\n\n if (!window) return;\n\n let { language } = file;\n\n if (!language || !hljs.getLanguage(language)) {\n console.warn(\n `[KbqCodeBlock] Unknown file language: \"${language}\". Fall back to \"${this.fallbackFileLanguage}\".`,\n file\n );\n language = this.fallbackFileLanguage;\n }\n\n const {\n value: highlightedHTML,\n language: highlightedLanguage,\n illegal,\n relevance\n } = hljs.highlight(file.content, {\n language: language!\n });\n\n if (illegal) {\n console.warn('[KbqCodeBlock] File content contains illegal characters.', file);\n }\n\n if (relevance === 0) {\n console.warn('[KbqCodeBlock] File content does not match the specified programming language.', file);\n }\n\n const safeHTML = this.domSanitizer.sanitize(SecurityContext.HTML, highlightedHTML);\n const highlightedHTMLWithLineNumbers = window['hljs'].lineNumbersValue(safeHTML, {\n startFrom: this.startFrom,\n singleLine: this.singleLine\n });\n\n this.renderer.setAttribute(this.nativeElement, 'data-language', highlightedLanguage!);\n this.renderer.setProperty(this.nativeElement, 'innerHTML', highlightedHTMLWithLineNumbers);\n }\n\n /** The starting line number. */\n @Input({ transform: numberAttribute }) startFrom: number = 1;\n\n /** Whether to display line numbers for single line code block. */\n @Input({ transform: booleanAttribute }) singleLine: boolean = false;\n\n constructor() {\n this.initLineNumbersPlugin();\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private getWindow(): Window {\n return this.document?.defaultView || window;\n }\n\n /**\n * Initialize the HighlightJS line numbers plugin. This method is called once when\n * the component is constructed.\n */\n private initLineNumbersPlugin(): void {\n const window = this.getWindow();\n\n if (!window) return;\n\n window['hljs'] = hljs;\n this.highlightJSLineNumbersPlugin(this.document, window);\n }\n\n /**\n * This method is not intended for editing.\n * Changes may lead to unpredictable behavior.\n * Source code: https://github.com/wcoder/highlightjs-line-numbers.js/blob/v2.9.0/src/highlightjs-line-numbers.js\n */\n private highlightJSLineNumbersPlugin(d: Document, w: Window): void {\n 'use strict';\n\n if (!w) return;\n\n const TABLE_NAME = 'hljs-ln',\n LINE_NAME = 'hljs-ln-line',\n CODE_BLOCK_NAME = 'hljs-ln-code',\n NUMBERS_BLOCK_NAME = 'hljs-ln-numbers',\n NUMBER_LINE_NAME = 'hljs-ln-n',\n DATA_ATTR_NAME = 'data-line-number',\n BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g;\n\n if (w['hljs']) {\n w['hljs'].initLineNumbersOnLoad = initLineNumbersOnLoad;\n w['hljs'].lineNumbersBlock = lineNumbersBlock;\n w['hljs'].lineNumbersBlockSync = lineNumbersBlockSync;\n w['hljs'].lineNumbersValue = lineNumbersValue;\n\n addStyles();\n } else {\n console.error('highlight.js not detected!');\n }\n\n function isHljsLnCodeDescendant(domElt) {\n let curElt = domElt;\n\n while (curElt) {\n if (curElt.className && curElt.className.indexOf('hljs-ln-code') !== -1) {\n return true;\n }\n\n curElt = curElt.parentNode;\n }\n\n return false;\n }\n\n function getHljsLnTable(hljsLnDomElt) {\n let curElt = hljsLnDomElt;\n\n while (curElt.nodeName !== 'TABLE') {\n curElt = curElt.parentNode;\n }\n\n return curElt;\n }\n\n // Function to workaround a copy issue with Microsoft Edge.\n // Due to hljs-ln wrapping the lines of code inside a <table> element,\n // itself wrapped inside a <pre> element, window.getSelection().toString()\n // does not contain any line breaks. So we need to get them back using the\n // rendered code in the DOM as reference.\n function edgeGetSelectedCodeLines(selection) {\n // current selected text without line breaks\n const selectionText = selection.toString();\n\n // get the <td> element wrapping the first line of selected code\n let tdAnchor = selection.anchorNode;\n\n while (tdAnchor.nodeName !== 'TD') {\n tdAnchor = tdAnchor.parentNode;\n }\n\n // get the <td> element wrapping the last line of selected code\n let tdFocus = selection.focusNode;\n\n while (tdFocus.nodeName !== 'TD') {\n tdFocus = tdFocus.parentNode;\n }\n\n // extract line numbers\n let firstLineNumber = parseInt(tdAnchor.dataset.lineNumber);\n let lastLineNumber = parseInt(tdFocus.dataset.lineNumber);\n\n // multi-lines copied case\n if (firstLineNumber != lastLineNumber) {\n let firstLineText = tdAnchor.textContent;\n let lastLineText = tdFocus.textContent;\n\n // if the selection was made backward, swap values\n if (firstLineNumber > lastLineNumber) {\n let tmp = firstLineNumber;\n\n firstLineNumber = lastLineNumber;\n lastLineNumber = tmp;\n tmp = firstLineText;\n firstLineText = lastLineText;\n lastLineText = tmp;\n }\n\n // discard not copied characters in first line\n while (selectionText.indexOf(firstLineText) !== 0) {\n firstLineText = firstLineText.slice(1);\n }\n\n // discard not copied characters in last line\n while (selectionText.lastIndexOf(lastLineText) === -1) {\n lastLineText = lastLineText.slice(0, -1);\n }\n\n // reconstruct and return the real copied text\n let selectedText = firstLineText;\n const hljsLnTable = getHljsLnTable(tdAnchor);\n\n for (let i = firstLineNumber + 1; i < lastLineNumber; ++i) {\n const codeLineSel = format('.{0}[{1}=\"{2}\"]', [CODE_BLOCK_NAME, DATA_ATTR_NAME, i]);\n const codeLineElt = hljsLnTable.querySelector(codeLineSel);\n\n selectedText += '\\n' + codeLineElt.textContent;\n }\n\n selectedText += '\\n' + lastLineText;\n\n return selectedText;\n // single copied line case\n } else {\n return selectionText;\n }\n }\n\n // ensure consistent code copy/paste behavior across all browsers\n // (see https://github.com/wcoder/highlightjs-line-numbers.js/issues/51)\n d.addEventListener('copy', function (e) {\n // get current selection\n const selection = w.getSelection()!;\n\n // override behavior when one wants to copy line of codes\n if (isHljsLnCodeDescendant(selection.anchorNode)) {\n let selectionText;\n\n // workaround an issue with Microsoft Edge as copied line breaks\n // are removed otherwise from the selection string\n if (w.navigator.userAgent.indexOf('Edge') !== -1) {\n selectionText = edgeGetSelectedCodeLines(selection);\n } else {\n // other browsers can directly use the selection string\n selectionText = selection.toString();\n }\n\n e.clipboardData!.setData('text/plain', selectionText);\n e.preventDefault();\n }\n });\n\n function addStyles() {\n const css = d.createElement('style');\n\n css.type = 'text/css';\n css.innerHTML = format(\n '.{0}{border-collapse:collapse}' + '.{0} td{padding:0}' + '.{1}:before{content:attr({2})}',\n [\n TABLE_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME\n ]\n );\n d.getElementsByTagName('head')[0].appendChild(css);\n }\n\n function initLineNumbersOnLoad(options) {\n if (d.readyState === 'interactive' || d.readyState === 'complete') {\n documentReady(options);\n } else {\n w.addEventListener('DOMContentLoaded', function () {\n documentReady(options);\n });\n }\n }\n\n function documentReady(options) {\n try {\n const blocks = d.querySelectorAll('code.hljs,code.nohighlight');\n\n for (const i in blocks) {\n if (blocks.hasOwnProperty(i)) {\n if (!isPluginDisabledForBlock(blocks[i])) {\n lineNumbersBlock(blocks[i], options);\n }\n }\n }\n } catch (e) {\n console.error('LineNumbers error: ', e);\n }\n }\n\n function isPluginDisabledForBlock(element) {\n return element.classList.contains('nohljsln');\n }\n\n function lineNumbersBlock(element, options) {\n if (typeof element !== 'object') return;\n\n async(function () {\n element.innerHTML = lineNumbersInternal(element, options);\n });\n }\n\n function lineNumbersBlockSync(element, options) {\n if (typeof element !== 'object') return;\n\n element.innerHTML = lineNumbersInternal(element, options);\n }\n\n function lineNumbersValue(value, options) {\n if (typeof value !== 'string') return;\n\n const element = d.createElement('code');\n\n element.innerHTML = value;\n\n return lineNumbersInternal(element, options);\n }\n\n function lineNumbersInternal(element, options) {\n const internalOptions = mapOptions(element, options);\n\n duplicateMultilineNodes(element);\n\n return addLineNumbersBlockFor(element.innerHTML, internalOptions);\n }\n\n function addLineNumbersBlockFor(inputHtml, options) {\n const lines = getLines(inputHtml);\n\n // if last line contains only carriage return remove it\n if (lines[lines.length - 1].trim() === '') {\n lines.pop();\n }\n\n if (lines.length > 1 || options.singleLine) {\n let html = '';\n\n for (let i = 0, l = lines.length; i < l; i++) {\n html += format(\n '<tr>' +\n '<td class=\"{0} {1}\" {3}=\"{5}\">' +\n '<div class=\"{2}\" {3}=\"{5}\"></div>' +\n '</td>' +\n '<td class=\"{0} {4}\" {3}=\"{5}\">' +\n '{6}' +\n '</td>' +\n '</tr>',\n [\n LINE_NAME,\n NUMBERS_BLOCK_NAME,\n NUMBER_LINE_NAME,\n DATA_ATTR_NAME,\n CODE_BLOCK_NAME,\n i + options.startFrom,\n lines[i].length > 0 ? lines[i] : ' '\n ]\n );\n }\n\n return format('<table class=\"{0}\">{1}</table>', [TABLE_NAME, html]);\n }\n\n return inputHtml;\n }\n\n /**\n * @param {HTMLElement} element Code block.\n * @param {Object} options External API options.\n * @returns {Object} Internal API options.\n */\n function mapOptions(element, options) {\n options = options || {};\n\n return {\n singleLine: getSingleLineOption(options),\n startFrom: getStartFromOption(element, options)\n };\n }\n\n function getSingleLineOption(options) {\n const defaultValue = false;\n\n if (options.singleLine) {\n return options.singleLine;\n }\n\n return defaultValue;\n }\n\n function getStartFromOption(element, options) {\n const defaultValue = 1;\n let startFrom = defaultValue;\n\n if (isFinite(options.startFrom)) {\n startFrom = options.startFrom;\n }\n\n // can be overridden because local option is priority\n const value = getAttribute(element, 'data-ln-start-from');\n\n if (value !== null) {\n startFrom = toNumber(value, defaultValue);\n }\n\n return startFrom;\n }\n\n /**\n * Recursive method for fix multi-line elements implementation in highlight.js\n * Doing deep passage on child nodes.\n * @param {HTMLElement} element\n */\n function duplicateMultilineNodes(element) {\n const nodes = element.childNodes;\n\n for (const node in nodes) {\n if (nodes.hasOwnProperty(node)) {\n const child = nodes[node];\n\n if (getLinesCount(child.textContent) > 0) {\n if (child.childNodes.length > 0) {\n duplicateMultilineNodes(child);\n } else {\n duplicateMultilineNode(child.parentNode);\n }\n }\n }\n }\n }\n\n /**\n * Method for fix multi-line elements implementation in highlight.js\n * @param {HTMLElement} element\n */\n function duplicateMultilineNode(element) {\n const className = element.className;\n\n if (!/hljs-/.test(className)) return;\n\n const lines = getLines(element.innerHTML);\n\n let result = '';\n\n for (let i = 0; i < lines.length; i++) {\n const lineText = lines[i].length > 0 ? lines[i] : ' ';\n\n result += format('<span class=\"{0}\">{1}</span>\\n', [className, lineText]);\n }\n\n element.innerHTML = result.trim();\n }\n\n function getLines(text) {\n if (text.length === 0) return [];\n\n return text.split(BREAK_LINE_REGEXP);\n }\n\n function getLinesCount(text) {\n return (text.trim().match(BREAK_LINE_REGEXP) || []).length;\n }\n\n ///\n /// HELPERS\n ///\n\n function async(func) {\n w.setTimeout(func, 0);\n }\n\n /**\n * {@link https://wcoder.github.io/notes/string-format-for-string-formating-in-javascript}\n * @param {string} format\n * @param {array} args\n */\n function format(format, args) {\n return format.replace(/\\{(\\d+)\\}/g, function (m, n) {\n return args[n] !== undefined ? args[n] : m;\n });\n }\n\n /**\n * @param {HTMLElement} element Code block.\n * @param {String} attrName Attribute name.\n * @returns {String} Attribute value or empty.\n */\n function getAttribute(element, attrName) {\n return element.hasAttribute(attrName) ? element.getAttribute(attrName) : null;\n }\n\n /**\n * @param {String} str Source string.\n * @param {Number} fallback Fallback value.\n * @returns Parsed number or fallback value.\n */\n function toNumber(str, fallback) {\n if (!str) return fallback;\n const number = Number(str);\n\n return isFinite(number) ? number : fallback;\n }\n }\n}\n","import { A11yModule, FocusMonitor } from '@angular/cdk/a11y';\nimport { Clipboard } from '@angular/cdk/clipboard';\nimport { Platform } from '@angular/cdk/platform';\nimport { CdkScrollable, CdkScrollableModule } from '@angular/cdk/scrolling';\nimport { DOCUMENT } from '@angular/common';\nimport {\n AfterViewInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n EventEmitter,\n inject,\n InjectionToken,\n Input,\n numberAttribute,\n Output,\n Provider,\n Renderer2,\n SecurityContext,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KbqButtonModule, KbqButtonStyles } from '@koobiq/components/button';\nimport {\n KBQ_LOCALE_SERVICE,\n KbqCodeBlockLocaleConfiguration,\n KbqComponentColors,\n ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTabsModule } from '@koobiq/components/tabs';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { debounceTime, fromEvent, merge } from 'rxjs';\nimport { KbqCodeBlockHighlight } from './code-block-highlight';\nimport { KbqCodeBlockFile } from './types';\n\n/** Localization configuration provider. */\nexport const KBQ_CODE_BLOCK_LOCALE_CONFIGURATION = new InjectionToken<KbqCodeBlockLocaleConfiguration>(\n 'KBQ_CODE_BLOCK_LOCALE_CONFIGURATION',\n { factory: () => ruRULocaleData.codeBlock }\n);\n\n/** Utility provider for `KBQ_CODE_BLOCK_LOCALE_CONFIGURATION`. */\nexport const kbqCodeBlockLocaleConfigurationProvider = (configuration: KbqCodeBlockLocaleConfiguration): Provider => ({\n provide: KBQ_CODE_BLOCK_LOCALE_CONFIGURATION,\n useValue: configuration\n});\n\n/** Fallback file name for code block if file name is not specified. */\nexport const KBQ_CODE_BLOCK_FALLBACK_FILE_NAME = new InjectionToken<string>('KBQ_CODE_BLOCK_FALLBACK_FILE_NAME', {\n factory: () => 'code'\n});\n\n/** Utility provider for `KBQ_CODE_BLOCK_FALLBACK_FILE_NAME`. */\nexport const kbqCodeBlockFallbackFileNameProvider = (fileName: string): Provider => ({\n provide: KBQ_CODE_BLOCK_FALLBACK_FILE_NAME,\n useValue: fileName\n});\n\n/**\n * Component which highlights blocks of code.\n */\n@Component({\n standalone: true,\n imports: [\n KbqTabsModule,\n KbqButtonModule,\n KbqCodeBlockHighlight,\n A11yModule,\n CdkScrollableModule,\n KbqToolTipModule,\n KbqIconModule\n ],\n selector: 'kbq-code-block',\n exportAs: 'kbqCodeBlock',\n templateUrl: './code-block.html',\n styleUrls: ['./code-block.scss', './code-block-tokens.scss'],\n host: {\n class: 'kbq-code-block',\n '[class.kbq-code-block_filled]': 'filled',\n '[class.kbq-code-block_outline]': '!filled',\n '[class.kbq-code-block_hide-line-numbers]': '!lineNumbers',\n '[class.kbq-code-block_hide-tabs]': 'hideTabs',\n '[class.kbq-code-block_no-border]': 'noBorder || filled',\n '[class.kbq-code-block_soft-wrap]': 'softWrap',\n '[class.kbq-code-block_view-all]': 'viewAll'\n },\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\n})\nexport class KbqCodeBlock implements AfterViewInit {\n @ViewChild('copyButtonTooltip') private readonly copyButtonTooltip?: KbqTooltipTrigger;\n @ViewChild(CdkScrollable) readonly scrollableCodeContent: CdkScrollable;\n\n /** Whether to display line numbers. */\n @Input({ transform: booleanAttribute }) lineNumbers = false;\n\n /** Whether the code block should be filled. */\n @Input({ transform: booleanAttribute }) filled: boolean = false;\n\n /** Added soft wrap toggle button. */\n @Input({ transform: booleanAttribute }) canToggleSoftWrap: boolean = false;\n\n /** Whether sequences of whitespace should be preserved. */\n @Input({ transform: booleanAttribute }) softWrap: boolean = false;\n\n /** Event emitted when `softWrap` is changed. */\n @Output() readonly softWrapChange = new EventEmitter<boolean>();\n\n /**\n * Allows to view all the code, otherwise it will be hidden.\n * Works only with `maxHeight` property.\n */\n @Input({ transform: booleanAttribute }) viewAll: boolean = false;\n\n /** Event emitted when `viewAll` is changed. */\n @Output() readonly viewAllChange = new EventEmitter<boolean>();\n\n /**\n * Maximum height of the code block content, other parts will be hidden.\n * Can be toggled by `viewAll` property.\n */\n @Input({ transform: numberAttribute }) maxHeight: number;\n\n protected get calculatedMaxHeight(): number | null {\n return this.maxHeight > 0 && !this.viewAll ? this.maxHeight : null;\n }\n\n /** @deprecated Will be removed in next major release, use `canDownload` instead. */\n @Input({ transform: booleanAttribute })\n set canLoad(value: boolean) {\n this.canDownload = value;\n }\n\n /** Added download code button. */\n @Input({ transform: booleanAttribute }) canDownload: boolean = false;\n\n /** Added copy code button. */\n @Input({ transform: booleanAttribute }) canCopy: boolean = true;\n\n /** @deprecated Will be removed in next major release, use `files` instead. */\n @Input()\n set codeFiles(files: KbqCodeBlockFile[]) {\n this.files = files;\n }\n\n /**\n * @TODO Mark as `required`, after removing `codeFiles`\n *\n * Files to display.\n */\n @Input()\n get files(): KbqCodeBlockFile[] {\n return this._files;\n }\n\n set files(files: KbqCodeBlockFile[]) {\n this._files = files;\n\n if (this._files.length < this.activeFileIndex) {\n this.onSelectedTabChange(0);\n }\n\n if (this._files.length === 1 && !this._files[0].filename) {\n this.hideTabs = true;\n }\n }\n\n private _files: KbqCodeBlockFile[] = [];\n\n /** Defines which file (index) is active. */\n @Input({ transform: numberAttribute }) activeFileIndex = 0;\n\n @Output() readonly activeFileIndexChange = new EventEmitter<number>();\n\n /** Whether to hide border. */\n @Input({ transform: booleanAttribute }) noBorder: boolean = false;\n\n /**\n * Whether to hide header tabs.\n * Always `true` if there is only one file without filename.\n * Makes actionbar floating if tabs are hidden.\n */\n @Input({ transform: booleanAttribute })\n get hideTabs(): boolean {\n return this._hideTabs;\n }\n\n set hideTabs(value: boolean) {\n this._hideTabs = value;\n\n this.setupActionbarDisplay();\n }\n\n private _hideTabs: boolean = false;\n\n /** Component locale configuration. */\n protected get localeConfiguration(): KbqCodeBlockLocaleConfiguration {\n return this._localeConfiguration;\n }\n\n private _localeConfiguration: KbqCodeBlockLocaleConfiguration = inject(KBQ_CODE_BLOCK_LOCALE_CONFIGURATION);\n\n /** Code content tab index. */\n protected get codeContentTabIndex(): number {\n return this.canCodeContentBeFocused ? 0 : -1;\n }\n\n /**\n * Determines whether the code content can be focused.\n *\n * This checks if the scrollable code content element is present,\n * has a scroll, and the calculated maximum height is not set.\n */\n private get canCodeContentBeFocused(): boolean {\n const element = this.scrollableCodeContent?.getElementRef().nativeElement;\n\n return element && this.hasScroll(element) && !this.calculatedMaxHeight;\n }\n\n protected readonly componentColor = KbqComponentColors;\n protected readonly buttonStyle = KbqButtonStyles;\n\n private readonly elementRef = inject(ElementRef);\n private readonly changeDetectorRef = inject(ChangeDetectorRef);\n private readonly localeService = inject(KBQ_LOCALE_SERVICE, { optional: true });\n private readonly destroyRef = inject(DestroyRef);\n private readonly renderer = inject(Renderer2);\n private readonly platform = inject(Platform);\n private readonly focusMonitor = inject(FocusMonitor);\n private readonly clipboard = inject(Clipboard);\n private readonly domSanitizer = inject(DomSanitizer);\n private readonly document = inject<Document>(DOCUMENT);\n protected readonly fallbackFileName = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_NAME);\n\n constructor() {\n this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n }\n\n ngAfterViewInit(): void {\n this.handleScroll();\n this.handleHover();\n\n // Setup initial actionbar display state\n this.setupActionbarDisplay();\n\n this.copyButtonTooltip?.visibleChange.pipe(takeUntilDestroyed(this.destroyRef)).subscribe((isVisible) => {\n if (isVisible) {\n this.copyButtonTooltip!.content = this.localeConfiguration.copyTooltip;\n }\n });\n\n // Should call `markForCheck` to ensure the `codeContentTabIndex` is updated after the view is initialized,\n // for correct focus behavior.\n this.changeDetectorRef.markForCheck();\n }\n\n /**\n * Toggles the `viewAll` property.\n *\n * When `viewAll` is set to `true`, the content of the code block will be\n * displayed in its entirety. When set to `false`, the content will be\n * limited to the `maxHeight` property. If the content exceeds the\n * `maxHeight`, it will be scrolled to the top and the `viewAll` button\n * will be displayed.\n */\n toggleViewAll(): void {\n this.viewAll = !this.viewAll;\n\n if (!this.viewAll) {\n this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });\n }\n\n this.viewAllChange.emit(this.viewAll);\n }\n\n /**\n * Toggles `softWrap` property.\n *\n * When `softWrap` is set to `true`, the content of the code block will be\n * wrapped if it exceeds the height of the component. When set to `false`\n * the content will not be wrapped.\n */\n toggleSoftWrap(): void {\n this.softWrap = !this.softWrap;\n this.softWrapChange.emit(this.softWrap);\n }\n\n /**\n * Handles the change of the selected tab by updating the active file index\n * and scrolling to the top of the scrollable content.\n *\n * @param index - The index of the newly selected tab.\n */\n protected onSelectedTabChange(index: number): void {\n if (this.activeFileIndex !== index) {\n this.activeFileIndex = index;\n this.activeFileIndexChange.emit(this.activeFileIndex);\n this.scrollableCodeContent.scrollTo({ top: 0, behavior: 'instant' });\n }\n }\n\n /**\n * Handles the hover event on the code block element and updates the actionbar display accordingly.\n */\n private handleHover(): void {\n merge(\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter'),\n fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseleave')\n )\n .pipe(debounceTime(100), takeUntilDestroyed(this.destroyRef))\n .subscribe((event) => {\n this.setupActionbarDisplay(event?.type === 'mouseenter');\n });\n }\n\n /**\n * Handles the scroll event on the scrollable code content element and updates the header shadow accordingly.\n */\n private handleScroll(): void {\n this.scrollableCodeContent\n .elementScrolled()\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.setupHeaderShadow(this.scrollableCodeContent.measureScrollOffset('top') > 0);\n });\n }\n\n /**\n * Adds or removes the shadow class from the code block based on the specified condition.\n *\n * @param shouldShowShadow - A boolean indicating whether to add or remove the shadow class.\n */\n private setupHeaderShadow(shouldShowShadow: boolean): void {\n const className = 'kbq-code-block_header-with-shadow';\n\n if (shouldShowShadow) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, className);\n }\n }\n\n /**\n * Adds or removes the actionbar display class from the code block based on the specified condition.\n *\n * The actionbar is always visible on mobile devices and when the tabs are visible.\n * Otherwise, the actionbar is only visible when the mouse is hovered over the code block.\n *\n * @param shouldShowActionbar - A boolean indicating whether the actionbar should be visible.\n */\n private setupActionbarDisplay(shouldShowActionbar?: boolean): void {\n const className = 'kbq-code-block_show-actionbar';\n\n // Should always show actionbar on Mobile devices\n if (this.platform.IOS || this.platform.ANDROID) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n\n return;\n }\n\n // Should always show actionbar when tabs are visible\n if (!this.hideTabs) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n\n return;\n }\n\n if (typeof shouldShowActionbar === 'undefined') {\n return;\n }\n\n if (shouldShowActionbar) {\n this.renderer.addClass(this.elementRef.nativeElement, className);\n } else {\n this.renderer.removeClass(this.elementRef.nativeElement, className);\n }\n }\n\n /** Whether the element has scroll. */\n private hasScroll({ scrollHeight, scrollWidth, clientHeight, clientWidth }: HTMLElement): boolean {\n return scrollHeight > clientHeight || scrollWidth > clientWidth;\n }\n\n /** Handles the enter keydown event on `viewAll` button. */\n protected onViewAllEnterKeydown(): void {\n this.toggleViewAll();\n\n if (this.canCodeContentBeFocused) {\n this.focusMonitor.focusVia(this.scrollableCodeContent.getElementRef().nativeElement, 'keyboard');\n }\n }\n\n private updateLocaleParams = (): void => {\n this._localeConfiguration = this.localeService?.getParams('codeBlock');\n\n this.changeDetectorRef.markForCheck();\n };\n\n /**\n * Copies the file code to the clipboard.\n *\n * If the copy was successful, the copy button tooltip content is updated\n * to show the \"copied\" message.\n */\n protected copyCode(): void {\n const file = this.files[this.activeFileIndex];\n\n if (this.clipboard.copy(file.content) && this.copyButtonTooltip) {\n this.copyButtonTooltip.content = this.localeConfiguration.copiedTooltip;\n }\n }\n\n /**\n * Opens the file link in a new window.\n */\n protected openLink(): void {\n const window = this.getWindow();\n const file = this.files[this.activeFileIndex];\n const safeURL = this.domSanitizer.sanitize(SecurityContext.URL, file.link!);\n\n if (safeURL) {\n 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 protected downloadCode(): void {\n const file = this.files[this.activeFileIndex];\n const blob = new Blob([file.content], { type: 'text/plain' });\n const url = URL.createObjectURL(blob);\n const link = this.document.createElement('a');\n\n link.setAttribute('href', url);\n link.setAttribute('download', file.filename || this.fallbackFileName);\n link.click();\n }\n\n /** Use defaultView of injected document if available or fallback to global window reference */\n private getWindow(): Window | null {\n return this.document?.defaultView || window;\n }\n}\n","@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n @if (!hideTabs) {\n <div class=\"kbq-code-block__header-tabs\">\n <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n @for (file of files; track file; let index = $index) {\n <div\n kbqTabLink\n [active]=\"activeFileIndex === index\"\n [disabled]=\"files.length === 1\"\n (click)=\"onSelectedTabChange(index)\"\n >\n {{ file.filename || fallbackFileName }}\n </div>\n }\n </div>\n </div>\n }\n\n <div class=\"kbq-code-block__actionbar\">\n @if (hideTabs) {\n <div class=\"kbq-code-block__actionbar__fade-gradient\"></div>\n }\n\n <div class=\"kbq-code-block__actionbar__button-stack\">\n @if (canToggleSoftWrap) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__soft-wrap-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"\n softWrap ? localeConfiguration.softWrapOffTooltip : localeConfiguration.softWrapOnTooltip\n \"\n (click)=\"toggleSoftWrap()\"\n >\n @if (softWrap) {\n <i kbq-icon=\"kbq-wrap-text-slash_16\"></i>\n } @else {\n <i kbq-icon=\"kbq-wrap-text_16\"></i>\n }\n </button>\n }\n\n @if (canDownload) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__download-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.downloadTooltip\"\n (click)=\"downloadCode()\"\n >\n <i kbq-icon=\"kbq-arrow-down-to-line_16\"></i>\n </button>\n }\n\n @if (canCopy) {\n <div #copyButtonTooltip=\"kbqTooltip\" [kbqTooltip]=\"localeConfiguration.copyTooltip\">\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__copy-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"copyCode()\"\n >\n <i kbq-icon=\"kbq-file-multiple-o_16\"></i>\n </button>\n </div>\n }\n\n @if (file.link) {\n <button\n kbq-button\n class=\"kbq-code-block__actionbar__link-button\"\n [color]=\"componentColor.Contrast\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n [kbqTooltip]=\"localeConfiguration.openExternalSystemTooltip\"\n (click)=\"openLink()\"\n >\n <i kbq-icon=\"kbq-arrow-up-right-from-square_16\"></i>\n </button>\n }\n </div>\n </div>\n</div>\n\n<div\n #tabPanel=\"kbqTabNavPanel\"\n cdkMonitorElementFocus\n cdkScrollable\n kbqTabNavPanel\n class=\"kbq-code-block__main kbq-scrollbar\"\n [style.max-height.px]=\"calculatedMaxHeight\"\n [tabIndex]=\"codeContentTabIndex\"\n>\n <pre\n class=\"kbq-code-block__pre\"\n ><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\"></code></pre>\n\n @if (maxHeight) {\n <div\n class=\"kbq-code-block__view-all\"\n [class.kbq-code-block__view-all_collapsed]=\"!viewAll\"\n [class.kbq-code-block__view-all_expanded]=\"viewAll\"\n >\n <div class=\"kbq-code-block__view-all__wrapper\">\n <button\n kbq-button\n class=\"kbq-code-block__view-all__button\"\n [color]=\"componentColor.Theme\"\n [kbqStyle]=\"buttonStyle.Transparent\"\n (click)=\"toggleViewAll()\"\n (keydown.enter)=\"onViewAllEnterKeydown()\"\n >\n @if (viewAll) {\n <i kbq-icon=\"kbq-chevron-up_16\"></i>\n {{ localeConfiguration.viewLessText }}\n } @else {\n <i kbq-icon=\"kbq-chevron-down_16\"></i>\n {{ localeConfiguration.viewAllText }}\n }\n </button>\n </div>\n </div>\n }\n</div>\n","import { NgModule } from '@angular/core';\nimport { KbqCodeBlock } from './code-block';\n\nconst COMPONENTS = [\n KbqCodeBlock\n];\n\n@NgModule({\n imports: COMPONENTS,\n exports: COMPONENTS\n})\nexport class KbqCodeBlockModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -2280,25 +2280,23 @@ const formatDataSize = (value, precision, system) => {
2280
2280
  unit
2281
2281
  };
2282
2282
  };
2283
- /**
2284
- * Converts a byte value into locale-independent file size parts: numeric value and unit abbreviation.
2285
- *
2286
- * @param value - size in bytes.
2287
- * @param precision - digits after the decimal point (e.g., `2` → "1.02 KB").
2288
- * @param system - unit system defining abbreviations and base scaling (SI/IEC).
2289
- * @returns Object with the formatted size info.
2290
- *
2291
- * @example
2292
- * formatDataSize(1500, 2, 'SI'); // { value: "1.50", unit: "KB" }
2293
- */
2294
- const getFormattedSizeParts = (value, precision, system) => {
2295
- const { result, unit } = getHumanizedBytes(value, system);
2283
+ function getFormattedSizeParts(value, _precision, system) {
2284
+ let resolvedSystem = null;
2285
+ if (arguments.length === 2 && typeof _precision === 'object') {
2286
+ resolvedSystem = _precision;
2287
+ }
2288
+ if (arguments.length === 3 && typeof _precision === 'number' && system) {
2289
+ resolvedSystem = system;
2290
+ }
2291
+ if (!resolvedSystem) {
2292
+ throw new Error('Unexpected arguments size');
2293
+ }
2294
+ const { result, unit } = getHumanizedBytes(value, resolvedSystem);
2296
2295
  return {
2297
- // No precision for bytes (e.g., "512 B")
2298
- value: unit === system.abbreviations[0] ? result.toString() : result.toFixed(precision),
2296
+ value: result.toString(),
2299
2297
  unit
2300
2298
  };
2301
- };
2299
+ }
2302
2300
  /**
2303
2301
  * Converts bytes to Kb, Mb, Gb
2304
2302
  *
@@ -2344,15 +2342,12 @@ class KbqDataSizePipe {
2344
2342
  }
2345
2343
  }
2346
2344
  /** Transforms bytes into localized size string */
2347
- transform(source, precision, unitSystemName, locale) {
2348
- const currentLocale = locale || this.localeService?.id || KBQ_DEFAULT_LOCALE_ID;
2349
- const selectedPrecision = precision ?? this.config.defaultPrecision;
2350
- const resolvedUnitSystems = locale
2351
- ? this.localeService?.locales[locale].sizeUnits.unitSystems
2345
+ transform(source, precision = this.config.defaultPrecision, unitSystemName = this.config.defaultUnitSystem, locale = this.localeService?.id || KBQ_DEFAULT_LOCALE_ID) {
2346
+ const resolvedUnitSystems = this.localeService
2347
+ ? this.localeService.locales[locale].sizeUnits.unitSystems
2352
2348
  : this.config.unitSystems;
2353
- const unitSystem = resolvedUnitSystems[unitSystemName || this.config.defaultUnitSystem];
2354
- const { value, unit } = getFormattedSizeParts(source, selectedPrecision, unitSystem);
2355
- const formattedValue = this.numberPipe?.transform(value, undefined, currentLocale) || value;
2349
+ const { value, unit } = getFormattedSizeParts(source, resolvedUnitSystems[unitSystemName]);
2350
+ const formattedValue = this.numberPipe?.transform(value, `1.0-${precision}`, locale) || value;
2356
2351
  return formattedValue ? `${formattedValue}${this.nonBreakingSpace}${unit}` : '';
2357
2352
  }
2358
2353
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: KbqDataSizePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
@@ -2748,6 +2743,27 @@ class FileValidators {
2748
2743
  return null;
2749
2744
  };
2750
2745
  }
2746
+ /**
2747
+ * Validator that checks whether file's name or MIME type
2748
+ * matches one of the accepted extensions or MIME types.
2749
+ *
2750
+ * @param accept - Array of allowed file extensions or MIME types.
2751
+ * @returns ValidatorFn that returns validation error if file type is not accepted, or null otherwise.
2752
+ */
2753
+ static isCorrectExtension(accept) {
2754
+ return (control) => {
2755
+ if (!accept?.length || !control.value)
2756
+ return null;
2757
+ const { name, type } = control.value.file;
2758
+ for (const acceptedExtensionOrMimeType of accept) {
2759
+ const typeAsRegExp = new RegExp(`${acceptedExtensionOrMimeType}$`);
2760
+ if (!typeAsRegExp.test(name) && !typeAsRegExp.test(type)) {
2761
+ return { fileExtensionMismatch: { expected: accept, actual: name } };
2762
+ }
2763
+ }
2764
+ return null;
2765
+ };
2766
+ }
2751
2767
  }
2752
2768
 
2753
2769
  function escapeRegExp(value) {
@@ -3695,6 +3711,7 @@ class KbqPopUp {
3695
3711
  this.renderer = inject(Renderer2);
3696
3712
  this.elementRef = inject(ElementRef);
3697
3713
  this.changeDetectorRef = inject(ChangeDetectorRef);
3714
+ this.destroyRef = inject(DestroyRef);
3698
3715
  /** Stream that emits when the popup item is hovered. */
3699
3716
  this.hovered = new BehaviorSubject(false);
3700
3717
  this.classMap = {};
@@ -3725,6 +3742,9 @@ class KbqPopUp {
3725
3742
  // Mark for check so if any parent component has set the
3726
3743
  // ChangeDetectionStrategy to OnPush it will be checked anyways
3727
3744
  this.markForCheck();
3745
+ if (this.trigger.triggerName === 'mouseenter') {
3746
+ this.addEventListenerForHide();
3747
+ }
3728
3748
  }, delay);
3729
3749
  }
3730
3750
  /**
@@ -3854,8 +3874,6 @@ const getOffset = ({ originX, overlayX, originY, overlayY }, { width, height })
3854
3874
  }
3855
3875
  return offset;
3856
3876
  };
3857
- /** parameter is used in interval to hide the popup */
3858
- const hidingIntervalForHover = 500;
3859
3877
  class KbqPopUpTrigger {
3860
3878
  constructor() {
3861
3879
  /** Stream that emits when the popupTrigger is hovered. */
@@ -3877,9 +3895,13 @@ class KbqPopUpTrigger {
3877
3895
  this.visible = false;
3878
3896
  this.listeners = new Map();
3879
3897
  this.availablePositions = POSITION_MAP;
3898
+ /** Hide pop-up with timeout. Need if you want to show pop-up after leaving trigger */
3899
+ this.hideWithTimeout = false;
3880
3900
  this.hide = (delay = this.leaveDelay) => {
3881
- this.hidingIntervalSubscription?.unsubscribe();
3882
- this.ngZone.run(() => this.instance?.hide(delay));
3901
+ if ((this.instance && this.triggerName !== 'mouseleave') ||
3902
+ (this.triggerName === 'mouseleave' && !this.instance?.hovered.getValue())) {
3903
+ this.ngZone.run(() => this.instance?.hide(delay));
3904
+ }
3883
3905
  };
3884
3906
  this.detach = () => {
3885
3907
  if (this.overlayRef?.hasAttached()) {
@@ -3921,7 +3943,6 @@ class KbqPopUpTrigger {
3921
3943
  this.overlayRef?.dispose();
3922
3944
  this.listeners.forEach(this.removeEventListener);
3923
3945
  this.listeners.clear();
3924
- this.hidingIntervalSubscription?.unsubscribe();
3925
3946
  }
3926
3947
  updatePlacement(value) {
3927
3948
  if (POSITION_TO_CSS_MAP[value]) {
@@ -3986,10 +4007,10 @@ class KbqPopUpTrigger {
3986
4007
  });
3987
4008
  this.updatePosition();
3988
4009
  this.instance.show(delay);
3989
- if (this.trigger.includes(PopUpTriggers.Hover)) {
4010
+ if (this.hideWithTimeout && this.trigger.includes(PopUpTriggers.Hover)) {
3990
4011
  this.ngZone.runOutsideAngular(() => {
3991
- this.hidingIntervalSubscription = interval(hidingIntervalForHover, this.scheduler)
3992
- .pipe(filter(() => this.trigger.includes(PopUpTriggers.Hover)), filter(() => !this.hovered.getValue() && !this.instance?.hovered.getValue()))
4012
+ interval(this.leaveDelay, this.scheduler)
4013
+ .pipe(filter(() => this.trigger.includes(PopUpTriggers.Hover)), filter(() => !this.hovered.getValue() && !this.instance?.hovered.getValue()), takeUntilDestroyed(this.instance?.destroyRef))
3993
4014
  .subscribe(this.hide);
3994
4015
  });
3995
4016
  }
@@ -4028,7 +4049,9 @@ class KbqPopUpTrigger {
4028
4049
  this.listeners.set(...this.createListener('click', this.show));
4029
4050
  }
4030
4051
  if (this.trigger.includes(PopUpTriggers.Hover)) {
4031
- this.listeners.set(...this.createListener('mouseenter', this.show));
4052
+ this.listeners
4053
+ .set(...this.createListener('mouseenter', this.show))
4054
+ .set(...this.createListener('mouseleave', this.getMouseLeaveListener()));
4032
4055
  }
4033
4056
  if (this.trigger.includes(PopUpTriggers.Focus)) {
4034
4057
  this.listeners
@@ -4044,6 +4067,12 @@ class KbqPopUpTrigger {
4044
4067
  }
4045
4068
  this.listeners.forEach(this.addEventListener);
4046
4069
  }
4070
+ getMouseLeaveListener() {
4071
+ if (this.hideWithTimeout) {
4072
+ return () => setTimeout(this.hide, this.leaveDelay);
4073
+ }
4074
+ return this.hide;
4075
+ }
4047
4076
  /** Updates the position of the current popover. */
4048
4077
  updatePosition(reapplyPosition = false) {
4049
4078
  this.overlayRef = this.createOverlay();
@@ -4198,8 +4227,9 @@ class KbqSelectSearch {
4198
4227
  }
4199
4228
  constructor(formField) {
4200
4229
  this.formField = formField;
4201
- this.searchChangesSubscription = new Subscription();
4230
+ this.changes = new EventEmitter();
4202
4231
  this.isSearchChanged = false;
4232
+ this.searchChangesSubscription = new Subscription();
4203
4233
  formField.canCleanerClearByEsc = false;
4204
4234
  }
4205
4235
  setPlaceholder(value) {
@@ -4225,8 +4255,9 @@ class KbqSelectSearch {
4225
4255
  throw Error('KbqSelectSearch does not work without ngControl');
4226
4256
  }
4227
4257
  Promise.resolve().then(() => {
4228
- this.searchChangesSubscription = this.ngControl.valueChanges.subscribe(() => {
4258
+ this.searchChangesSubscription = this.ngControl.valueChanges.subscribe((value) => {
4229
4259
  this.isSearchChanged = true;
4260
+ this.changes.next(value);
4230
4261
  });
4231
4262
  });
4232
4263
  }
@@ -4509,11 +4540,11 @@ const KBQ_VALIDATION = new InjectionToken('KbqUseValidation', {
4509
4540
  factory: () => ({ useValidation: true })
4510
4541
  });
4511
4542
 
4512
- const VERSION = new Version('18.29.0+sha-1384c48');
4543
+ const VERSION = new Version('18.30.0+sha-ba059d7');
4513
4544
 
4514
4545
  /**
4515
4546
  * Generated bundle index. Do not edit.
4516
4547
  */
4517
4548
 
4518
- export { ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT, AbsoluteDateFormatterImpurePipe, AbsoluteDateFormatterPipe, AbsoluteDateShortFormatterImpurePipe, AbsoluteDateShortFormatterPipe, AbsoluteDateTimeFormatterImpurePipe, AbsoluteDateTimeFormatterPipe, AbsoluteShortDateTimeFormatterImpurePipe, AbsoluteShortDateTimeFormatterPipe, AnimationCurves, BOTTOM_LEFT_POSITION_PRIORITY, BOTTOM_POSITION_PRIORITY, BOTTOM_RIGHT_POSITION_PRIORITY, BaseFormatterPipe, DateAdapter, DateFormatter, EXTENDED_OVERLAY_POSITIONS, EmptyFocusTrapStrategy, ErrorStateMatcher, FileValidators, KBQ_CUSTOM_SCROLL_STRATEGY_PROVIDER, KBQ_DATE_FORMATS, KBQ_DATE_LOCALE, KBQ_DATE_LOCALE_FACTORY, KBQ_DEFAULT_LOCALE_DATA_FACTORY, KBQ_DEFAULT_LOCALE_ID, KBQ_FORM_FIELD_REF, KBQ_INVALID_VALUE_ERROR, KBQ_LOCALE_DATA, KBQ_LOCALE_ID, KBQ_LOCALE_SERVICE, KBQ_LOCALE_SERVICE_LANG_ATTR_NAME, KBQ_NUMBER_FORMATTER_DEFAULT_OPTIONS, KBQ_NUMBER_FORMATTER_OPTIONS, KBQ_OPTION_ACTION_PARENT, KBQ_OPTION_PARENT_COMPONENT, KBQ_PARENT_ANIMATION_COMPONENT, KBQ_PARENT_POPUP, KBQ_SANITY_CHECKS, KBQ_SELECT_SCROLL_STRATEGY, KBQ_SELECT_SCROLL_STRATEGY_PROVIDER, KBQ_SIZE_UNITS_CONFIG, KBQ_SIZE_UNITS_DEFAULT_CONFIG, KBQ_TITLE_TEXT_REF, KBQ_VALIDATION, KbqAbstractSelect, KbqAnimationCurves, KbqAnimationDurations, KbqColorDirective, KbqCommonModule, KbqComponentColors, KbqDataSizePipe, KbqDecimalPipe, KbqDefaultThemes, KbqForm, KbqFormElement, KbqFormattersModule, KbqFormsModule, KbqHighlightModule, KbqHighlightPipe, KbqLine, KbqLineModule, KbqLineSetter, KbqLocaleService, KbqLocaleServiceModule, KbqMeasureScrollbarService, KbqMeasurementSystem, KbqNormalizeWhitespace, KbqOptgroup, KbqOption, KbqOptionActionComponent, KbqOptionBase, KbqOptionModule, KbqOptionSelectionChange, KbqPopUp, KbqPopUpTrigger, KbqPseudoCheckbox, KbqPseudoCheckboxModule, KbqRoundDecimalPipe, KbqSelectFooter, KbqSelectMatcher, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqSelectTrigger, KbqTableNumberPipe, KbqThemeSelector, KbqVirtualOption, LEFT_BOTTOM_POSITION_PRIORITY, LEFT_POSITION_PRIORITY, LEFT_TOP_POSITION_PRIORITY, MeasurementSystem, MultipleMode, NUMBER_FORMAT_REGEXP, POSITION_MAP, POSITION_PRIORITY_STRATEGY, POSITION_TO_CSS_MAP, PasswordValidators, PopUpPlacements, PopUpSizes, PopUpTriggers, PopUpVisibility, RIGHT_BOTTOM_POSITION_PRIORITY, RIGHT_POSITION_PRIORITY, RIGHT_TOP_POSITION_PRIORITY, RangeDateFormatterImpurePipe, RangeDateFormatterPipe, RangeDateTimeFormatterImpurePipe, RangeDateTimeFormatterPipe, RangeMiddleDateTimeFormatterImpurePipe, RangeMiddleDateTimeFormatterPipe, RangeShortDateFormatterImpurePipe, RangeShortDateFormatterPipe, RangeShortDateTimeFormatterImpurePipe, RangeShortDateTimeFormatterPipe, RelativeDateFormatterImpurePipe, RelativeDateFormatterPipe, RelativeDateTimeFormatterImpurePipe, RelativeDateTimeFormatterPipe, RelativeShortDateFormatterImpurePipe, RelativeShortDateFormatterPipe, RelativeShortDateTimeFormatterImpurePipe, RelativeShortDateTimeFormatterPipe, SELECT_PANEL_VIEWPORT_PADDING, ShowOnControlDirtyErrorStateMatcher, ShowOnFormSubmitErrorStateMatcher, TOP_LEFT_POSITION_PRIORITY, TOP_POSITION_PRIORITY, TOP_RIGHT_POSITION_PRIORITY, ThemePalette, ThemeService, VERSION, applyPopupMargins, checkAndNormalizeLocalizedNumber, countGroupLabelsBeforeOption, defaultOffsetY, enUSFormattersData, enUSLocaleData, esLAFormattersData, esLALocaleData, escapeRegExp, faIRFormattersData, faIRLocaleData, fadeAnimation, formatDataSize, formatNumberWithLocale, getFormattedSizeParts, getHumanizedBytes, getKbqSelectDynamicMultipleError, getKbqSelectNonArrayValueError, getKbqSelectNonFunctionValueError, getNodesWithoutComments, getOptionScrollPosition, hidingIntervalForHover, isBoolean, isMac, isWithin, kbqErrorStateMatcherProvider, kbqFilesizeFormatterConfigurationProvider, kbqLocaleServiceLangAttrNameProvider, kbqSelectAnimations, kbqSelectScrollStrategyProviderFactory, leftIconClassName, mixinColor, mixinDisabled, mixinErrorState, mixinTabIndex, normalizeNumber, numberByParts, ptBRFormattersData, ptBRLocaleData, rightIconClassName, ruRUFormattersData, ruRULocaleData, selectEvents, tkTMFormattersData, tkTMLocaleData, toBoolean, validationTooltipHideDelay, validationTooltipShowDelay, zhCNFormattersData, zhCNLocaleData };
4549
+ export { ARROW_BOTTOM_MARGIN_AND_HALF_HEIGHT, AbsoluteDateFormatterImpurePipe, AbsoluteDateFormatterPipe, AbsoluteDateShortFormatterImpurePipe, AbsoluteDateShortFormatterPipe, AbsoluteDateTimeFormatterImpurePipe, AbsoluteDateTimeFormatterPipe, AbsoluteShortDateTimeFormatterImpurePipe, AbsoluteShortDateTimeFormatterPipe, AnimationCurves, BOTTOM_LEFT_POSITION_PRIORITY, BOTTOM_POSITION_PRIORITY, BOTTOM_RIGHT_POSITION_PRIORITY, BaseFormatterPipe, DateAdapter, DateFormatter, EXTENDED_OVERLAY_POSITIONS, EmptyFocusTrapStrategy, ErrorStateMatcher, FileValidators, KBQ_CUSTOM_SCROLL_STRATEGY_PROVIDER, KBQ_DATE_FORMATS, KBQ_DATE_LOCALE, KBQ_DATE_LOCALE_FACTORY, KBQ_DEFAULT_LOCALE_DATA_FACTORY, KBQ_DEFAULT_LOCALE_ID, KBQ_FORM_FIELD_REF, KBQ_INVALID_VALUE_ERROR, KBQ_LOCALE_DATA, KBQ_LOCALE_ID, KBQ_LOCALE_SERVICE, KBQ_LOCALE_SERVICE_LANG_ATTR_NAME, KBQ_NUMBER_FORMATTER_DEFAULT_OPTIONS, KBQ_NUMBER_FORMATTER_OPTIONS, KBQ_OPTION_ACTION_PARENT, KBQ_OPTION_PARENT_COMPONENT, KBQ_PARENT_ANIMATION_COMPONENT, KBQ_PARENT_POPUP, KBQ_SANITY_CHECKS, KBQ_SELECT_SCROLL_STRATEGY, KBQ_SELECT_SCROLL_STRATEGY_PROVIDER, KBQ_SIZE_UNITS_CONFIG, KBQ_SIZE_UNITS_DEFAULT_CONFIG, KBQ_TITLE_TEXT_REF, KBQ_VALIDATION, KbqAbstractSelect, KbqAnimationCurves, KbqAnimationDurations, KbqColorDirective, KbqCommonModule, KbqComponentColors, KbqDataSizePipe, KbqDecimalPipe, KbqDefaultThemes, KbqForm, KbqFormElement, KbqFormattersModule, KbqFormsModule, KbqHighlightModule, KbqHighlightPipe, KbqLine, KbqLineModule, KbqLineSetter, KbqLocaleService, KbqLocaleServiceModule, KbqMeasureScrollbarService, KbqMeasurementSystem, KbqNormalizeWhitespace, KbqOptgroup, KbqOption, KbqOptionActionComponent, KbqOptionBase, KbqOptionModule, KbqOptionSelectionChange, KbqPopUp, KbqPopUpTrigger, KbqPseudoCheckbox, KbqPseudoCheckboxModule, KbqRoundDecimalPipe, KbqSelectFooter, KbqSelectMatcher, KbqSelectSearch, KbqSelectSearchEmptyResult, KbqSelectTrigger, KbqTableNumberPipe, KbqThemeSelector, KbqVirtualOption, LEFT_BOTTOM_POSITION_PRIORITY, LEFT_POSITION_PRIORITY, LEFT_TOP_POSITION_PRIORITY, MeasurementSystem, MultipleMode, NUMBER_FORMAT_REGEXP, POSITION_MAP, POSITION_PRIORITY_STRATEGY, POSITION_TO_CSS_MAP, PasswordValidators, PopUpPlacements, PopUpSizes, PopUpTriggers, PopUpVisibility, RIGHT_BOTTOM_POSITION_PRIORITY, RIGHT_POSITION_PRIORITY, RIGHT_TOP_POSITION_PRIORITY, RangeDateFormatterImpurePipe, RangeDateFormatterPipe, RangeDateTimeFormatterImpurePipe, RangeDateTimeFormatterPipe, RangeMiddleDateTimeFormatterImpurePipe, RangeMiddleDateTimeFormatterPipe, RangeShortDateFormatterImpurePipe, RangeShortDateFormatterPipe, RangeShortDateTimeFormatterImpurePipe, RangeShortDateTimeFormatterPipe, RelativeDateFormatterImpurePipe, RelativeDateFormatterPipe, RelativeDateTimeFormatterImpurePipe, RelativeDateTimeFormatterPipe, RelativeShortDateFormatterImpurePipe, RelativeShortDateFormatterPipe, RelativeShortDateTimeFormatterImpurePipe, RelativeShortDateTimeFormatterPipe, SELECT_PANEL_VIEWPORT_PADDING, ShowOnControlDirtyErrorStateMatcher, ShowOnFormSubmitErrorStateMatcher, TOP_LEFT_POSITION_PRIORITY, TOP_POSITION_PRIORITY, TOP_RIGHT_POSITION_PRIORITY, ThemePalette, ThemeService, VERSION, applyPopupMargins, checkAndNormalizeLocalizedNumber, countGroupLabelsBeforeOption, defaultOffsetY, enUSFormattersData, enUSLocaleData, esLAFormattersData, esLALocaleData, escapeRegExp, faIRFormattersData, faIRLocaleData, fadeAnimation, formatDataSize, formatNumberWithLocale, getFormattedSizeParts, getHumanizedBytes, getKbqSelectDynamicMultipleError, getKbqSelectNonArrayValueError, getKbqSelectNonFunctionValueError, getNodesWithoutComments, getOptionScrollPosition, isBoolean, isMac, isWithin, kbqErrorStateMatcherProvider, kbqFilesizeFormatterConfigurationProvider, kbqLocaleServiceLangAttrNameProvider, kbqSelectAnimations, kbqSelectScrollStrategyProviderFactory, leftIconClassName, mixinColor, mixinDisabled, mixinErrorState, mixinTabIndex, normalizeNumber, numberByParts, ptBRFormattersData, ptBRLocaleData, rightIconClassName, ruRUFormattersData, ruRULocaleData, selectEvents, tkTMFormattersData, tkTMLocaleData, toBoolean, validationTooltipHideDelay, validationTooltipShowDelay, zhCNFormattersData, zhCNLocaleData };
4519
4550
  //# sourceMappingURL=koobiq-components-core.mjs.map