{"version":3,"file":"koobiq-components-code-block.mjs","sources":["../../../packages/components/code-block/code-block-highlight.ts","../../../packages/components/code-block/code-block.ts","../../../packages/components/code-block/code-block.html","../../../packages/components/code-block/code-block.module.ts","../../../packages/components/code-block/koobiq-components-code-block.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport {\n    booleanAttribute,\n    Directive,\n    inject,\n    InjectionToken,\n    Input,\n    isDevMode,\n    numberAttribute,\n    Provider,\n    Renderer2,\n    SecurityContext,\n    signal\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { KBQ_WINDOW, kbqInjectNativeElement } from '@koobiq/components/core';\nimport type { HLJSApi, LanguageFn } from 'highlight.js';\nimport { KbqCodeBlockFile } from './types';\n\nconst defaultHljsLoader = (): Promise<{ default: HLJSApi }> => import('highlight.js');\n\n/** `highlight.js` configuration */\nexport type KbqCodeBlockHighlightJsConfig = Partial<{\n    /** Lazy loader for highlight.js core (no bundled languages). When omitted, the full bundle is loaded. */\n    core: () => Promise<{ default: HLJSApi }>;\n    /** Map of language name to lazy loader for that language's LanguageFn. */\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 *     core: () => import('highlight.js/lib/core'),\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.\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/**\n * Directive which applies syntax highlighting to the code block content.\n *\n * @docs-private\n */\n@Directive({\n    selector: 'code[kbqCodeBlockHighlight]',\n    exportAs: 'kbqCodeBlockHighlight',\n    host: {\n        class: 'hljs'\n    }\n})\nexport class KbqCodeBlockHighlight {\n    private readonly nativeElement = kbqInjectNativeElement();\n    private readonly document = inject<Document>(DOCUMENT);\n    private readonly renderer = inject(Renderer2);\n    private readonly domSanitizer = inject(DomSanitizer);\n    private readonly fallbackFileLanguage = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_LANGUAGE);\n    private readonly window = inject(KBQ_WINDOW);\n    private readonly config = inject(KBQ_CODE_BLOCK_HIGHLIGHT_JS_CONFIG, { optional: true });\n    private hljs: HLJSApi | null = null;\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    @Input({ required: true })\n    set file(file: KbqCodeBlockFile) {\n        if (!this.window) return;\n\n        if (!this.hljs) {\n            this.load(this.config ?? {}).then(() => this.highlight(file));\n        } else {\n            this.highlight(file);\n        }\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    private async load({ core, languages }: KbqCodeBlockHighlightJsConfig): Promise<void> {\n        this._pending.set(true);\n\n        const loader = core ?? defaultHljsLoader;\n        const { default: instance } = await loader();\n\n        if (languages) {\n            await Promise.all(\n                Object.entries(languages).map(async ([name, loader]) => {\n                    const { default: language } = await loader();\n\n                    instance.registerLanguage(name, language);\n                })\n            );\n        }\n\n        this.hljs = instance;\n        this.initLineNumbersPlugin(instance);\n    }\n\n    private highlight(file: KbqCodeBlockFile): void {\n        this._pending.set(true);\n\n        let { language } = file;\n\n        if (!language || !this.hljs!.getLanguage(language)) {\n            this.warn(\n                `[KbqCodeBlock] Unknown file language: \"${language}\". Fall back to \"${this.fallbackFileLanguage}\".`,\n                file\n            );\n\n            language = this.fallbackFileLanguage;\n        }\n\n        const {\n            value: highlightedHTML,\n            language: highlightedLanguage,\n            illegal,\n            relevance\n        } = this.hljs!.highlight(file.content, { language });\n\n        if (illegal) {\n            this.warn('[KbqCodeBlock] File content contains illegal characters.', file);\n        }\n\n        if (relevance === 0) {\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.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        this._pending.set(false);\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    /** Initialize the HighlightJS line numbers plugin after the hljs instance is available. */\n    private initLineNumbersPlugin(instance: HLJSApi): void {\n        if (!this.window) return;\n\n        this.window['hljs'] = instance;\n        this.highlightJSLineNumbersPlugin(this.document, this.window);\n    }\n\n    /**\n     * This method is not intended for editing.\n     * Changes may lead to unpredictable behavior.\n     * Source code: https://github.com/wcoder/highlightjs-line-numbers.js/blob/v2.9.0/src/highlightjs-line-numbers.js\n     */\n    private highlightJSLineNumbersPlugin(d: Document, w: Window): void {\n        'use strict';\n\n        if (!w) return;\n\n        const TABLE_NAME = 'hljs-ln',\n            LINE_NAME = 'hljs-ln-line',\n            CODE_BLOCK_NAME = 'hljs-ln-code',\n            NUMBERS_BLOCK_NAME = 'hljs-ln-numbers',\n            NUMBER_LINE_NAME = 'hljs-ln-n',\n            DATA_ATTR_NAME = 'data-line-number',\n            BREAK_LINE_REGEXP = /\\r\\n|\\r|\\n/g;\n\n        if (w['hljs']) {\n            w['hljs'].initLineNumbersOnLoad = initLineNumbersOnLoad;\n            w['hljs'].lineNumbersBlock = lineNumbersBlock;\n            w['hljs'].lineNumbersBlockSync = lineNumbersBlockSync;\n            w['hljs'].lineNumbersValue = lineNumbersValue;\n\n            addStyles();\n        } else {\n            // 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}\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 { CdkScrollable, CdkScrollableModule, ExtendedScrollToOptions } from '@angular/cdk/scrolling';\nimport { DOCUMENT, NgTemplateOutlet } from '@angular/common';\nimport {\n    AfterViewInit,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    inject,\n    InjectionToken,\n    Injector,\n    Input,\n    numberAttribute,\n    Output,\n    Provider,\n    Renderer2,\n    SecurityContext,\n    signal,\n    TemplateRef,\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_LOCALE_SERVICE,\n    KBQ_WINDOW,\n    KbqCodeBlockLocaleConfiguration,\n    KbqComponentColors,\n    ruRULocaleData\n} from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqTabsModule } from '@koobiq/components/tabs';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { debounceTime, EMPTY, filter, fromEvent, merge, startWith, switchMap, take } 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    '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/** 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        CdkScrollableModule,\n        KbqToolTipModule,\n        KbqIconModule,\n        NgTemplateOutlet\n    ],\n    templateUrl: './code-block.html',\n    styleUrls: ['./code-block.scss', './code-block-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqCodeBlock',\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})\nexport class KbqCodeBlock implements AfterViewInit {\n    @ViewChild('copyButtonTooltip') private readonly copyButtonTooltip?: KbqTooltipTrigger;\n    /**\n     * Reference to the scrollable code content.\n     *\n     * @deprecated Use `scrollTo` method instead, will be removed from public API (mark as private) in the next major release.\n     *\n     * @docs-private\n     */\n    @ViewChild(CdkScrollable) readonly scrollableCodeContent: CdkScrollable;\n\n    @ViewChild(KbqCodeBlockHighlight) private readonly highlight!: KbqCodeBlockHighlight;\n\n    @ViewChild('codeBlockPre') private readonly preElementRef!: ElementRef<HTMLElement>;\n\n    /** @docs-private */\n    protected readonly contentExceedsMaxHeight = signal(false);\n\n    /** @docs-private */\n    @ContentChild(KbqCodeBlockTabLinkContent, { read: TemplateRef })\n    protected readonly tabLinkTemplate: TemplateRef<KbqTabLinkTemplateContext>;\n\n    /** Whether to display line numbers. */\n    @Input({ transform: booleanAttribute }) lineNumbers = false;\n\n    /** Whether the code block should be filled. */\n    @Input({ transform: booleanAttribute }) filled: boolean = false;\n\n    /** Added soft wrap toggle button.  */\n    @Input({ transform: booleanAttribute }) canToggleSoftWrap: boolean = false;\n\n    /** Whether sequences of whitespace should be preserved. */\n    @Input({ transform: booleanAttribute }) softWrap: boolean = false;\n\n    /**\n     * Output to support two-way binding on `[(softWrap)]` property.\n     */\n    @Output() readonly softWrapChange = new EventEmitter<boolean>();\n\n    /**\n     * Allows to view all the code, otherwise it will be hidden.\n     * Works only with `maxHeight` property.\n     */\n    @Input({ transform: booleanAttribute }) viewAll: boolean = false;\n\n    /**\n     * Output to support two-way binding on `[(viewAll)]` property.\n     */\n    @Output() readonly viewAllChange = new EventEmitter<boolean>();\n\n    /**\n     * Maximum height of the code block content, other parts will be hidden.\n     * Can be toggled by `viewAll` property.\n     */\n    @Input({ transform: numberAttribute }) maxHeight: number;\n\n    /**\n     * @docs-private\n     */\n    protected get calculatedMaxHeight(): number | null {\n        return this.maxHeight > 0 && !this.viewAll ? this.maxHeight : null;\n    }\n\n    /**\n     * @deprecated Will be removed in next major release, use `canDownload` instead.\n     *\n     * @docs-private\n     */\n    @Input({ transform: booleanAttribute })\n    set canLoad(value: boolean) {\n        this.canDownload = value;\n    }\n\n    /** Added download code button. */\n    @Input({ transform: booleanAttribute }) canDownload: boolean = false;\n\n    /** Added copy code button. */\n    @Input({ transform: booleanAttribute }) canCopy: boolean = true;\n\n    /**\n     * @deprecated Will be removed in next major release, use `files` instead.\n     */\n    @Input()\n    set codeFiles(files: KbqCodeBlockFile[]) {\n        this.files = files;\n    }\n\n    /**\n     * @TODO Mark as `required`, after removing `codeFiles`\n     *\n     * Files to display.\n     */\n    @Input()\n    get files(): KbqCodeBlockFile[] {\n        return this._files;\n    }\n\n    set files(files: KbqCodeBlockFile[]) {\n        this._files = files;\n\n        if (this._files.length < this.activeFileIndex) {\n            this.onSelectedTabChange(0);\n        }\n\n        if (this._files.length === 1 && !this._files[0].filename) {\n            this.hideTabs = true;\n        }\n    }\n\n    private _files: KbqCodeBlockFile[] = [];\n\n    /** Defines which file (index) is active. */\n    @Input({ transform: numberAttribute }) activeFileIndex = 0;\n\n    /**\n     * Output to support two-way binding on `[(activeFileIndex)]` property.\n     */\n    @Output() readonly activeFileIndexChange = new EventEmitter<number>();\n\n    /** Whether to hide border. */\n    @Input({ transform: booleanAttribute }) noBorder: boolean = false;\n\n    /**\n     * Whether to hide header tabs.\n     * Always `true` if there is only one file without filename.\n     * Makes actionbar floating if tabs are hidden.\n     */\n    @Input({ transform: booleanAttribute })\n    get hideTabs(): boolean {\n        return this._hideTabs;\n    }\n\n    set hideTabs(value: boolean) {\n        this._hideTabs = value;\n        this.hideTabsChange.emit(value);\n        this.setupActionbarDisplay();\n    }\n\n    private _hideTabs: boolean = false;\n\n    /**\n     * Output to support two-way binding on `[(hideTabs)]` property.\n     */\n    @Output() readonly hideTabsChange = new EventEmitter<boolean>();\n\n    /**\n     * Component locale configuration.\n     *\n     * @docs-private\n     */\n    protected get localeConfiguration(): KbqCodeBlockLocaleConfiguration {\n        return this._localeConfiguration;\n    }\n\n    private _localeConfiguration: KbqCodeBlockLocaleConfiguration = inject(KBQ_CODE_BLOCK_LOCALE_CONFIGURATION);\n\n    /**\n     * Code content tab index.\n     *\n     * @docs-private\n     */\n    protected get codeContentTabIndex(): number {\n        return this.canCodeContentBeFocused ? 0 : -1;\n    }\n\n    /**\n     * Determines whether the code content can be focused.\n     *\n     * This checks if the scrollable code content element is present,\n     * has a scroll, and the calculated maximum height is not set.\n     */\n    private get canCodeContentBeFocused(): boolean {\n        const element = this.scrollableCodeContent?.getElementRef().nativeElement;\n\n        return element && this.hasScroll(element) && !this.calculatedMaxHeight;\n    }\n\n    /**\n     * @docs-private\n     */\n    protected readonly componentColor = KbqComponentColors;\n    /**\n     * @docs-private\n     */\n    protected readonly buttonStyle = KbqButtonStyles;\n\n    private readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n    private readonly injector = inject(Injector);\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    private readonly sharedResizeObserver = inject(SharedResizeObserver);\n    /**\n     * @docs-private\n     */\n    protected readonly fallbackFileName = inject(KBQ_CODE_BLOCK_FALLBACK_FILE_NAME);\n    private readonly window = inject(KBQ_WINDOW);\n\n    constructor() {\n        this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n    }\n\n    ngAfterViewInit(): void {\n        this.handleScroll();\n        this.trackHoverState();\n        this.setupContentOverflowDetection();\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.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: ExtendedScrollToOptions): void {\n        const scroll = () => this.scrollableCodeContent.scrollTo(options);\n\n        if (this.highlight?.pending()) {\n            toObservable(this.highlight.pending, { injector: this.injector })\n                .pipe(\n                    filter((pending) => !pending),\n                    take(1)\n                )\n                .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 = !this.softWrap;\n        this.softWrapChange.emit(this.softWrap);\n    }\n\n    /**\n     * Handles the change of the selected tab by updating the active file index\n     * and scrolling to the top of the scrollable content.\n     *\n     * @param index - The index of the newly selected tab.\n     *\n     * @docs-private\n     */\n    protected onSelectedTabChange(index: number): void {\n        if (this.activeFileIndex !== index) {\n            this.activeFileIndex = index;\n            this.activeFileIndexChange.emit(this.activeFileIndex);\n            this.scrollTo({ top: 0, behavior: 'instant' });\n        }\n    }\n\n    /**\n     * Tracks hover events to show/hide the actionbar when `hideTabs` is `true`.\n     * Reacts to `hideTabs` changes dynamically.\n     */\n    private trackHoverState(): void {\n        this.hideTabsChange\n            .asObservable()\n            .pipe(\n                startWith(this._hideTabs),\n                switchMap((hideTabs) => {\n                    if (!hideTabs) return EMPTY;\n\n                    return merge(\n                        fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseenter'),\n                        fromEvent<MouseEvent>(this.elementRef.nativeElement, 'mouseleave')\n                    ).pipe(debounceTime(100));\n                }),\n                takeUntilDestroyed(this.destroyRef)\n            )\n            .subscribe((event) => {\n                this.setupActionbarDisplay(event?.type === 'mouseenter');\n            });\n    }\n\n    private setupContentOverflowDetection(): void {\n        if (!this.maxHeight) return;\n\n        const checkOverflow = () => {\n            this.contentExceedsMaxHeight.set(this.preElementRef.nativeElement.offsetHeight > this.maxHeight);\n        };\n\n        checkOverflow();\n\n        if (this.highlight?.pending()) {\n            toObservable(this.highlight.pending, { injector: this.injector })\n                .pipe(\n                    filter((pending) => !pending),\n                    take(1)\n                )\n                .subscribe(checkOverflow);\n        }\n\n        this.sharedResizeObserver\n            .observe(this.preElementRef.nativeElement)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(checkOverflow);\n    }\n\n    /**\n     * Handles the scroll event on the scrollable code content element and updates the header shadow accordingly.\n     */\n    private handleScroll(): void {\n        this.scrollableCodeContent\n            .elementScrolled()\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => {\n                this.setupHeaderShadow(this.scrollableCodeContent.measureScrollOffset('top') > 0);\n            });\n    }\n\n    /**\n     * Adds or removes the shadow class from the code block based on the specified condition.\n     *\n     * @param shouldShowShadow - A boolean indicating whether to add or remove the shadow class.\n     */\n    private setupHeaderShadow(shouldShowShadow: boolean): void {\n        const className = 'kbq-code-block_header-with-shadow';\n\n        if (shouldShowShadow) {\n            this.renderer.addClass(this.elementRef.nativeElement, className);\n        } else {\n            this.renderer.removeClass(this.elementRef.nativeElement, className);\n        }\n    }\n\n    /**\n     * Adds or removes the actionbar display class from the code block based on the specified condition.\n     *\n     * The actionbar is always visible on mobile devices and when the tabs are visible.\n     * Otherwise, the actionbar is only visible when the mouse is hovered over the code block.\n     *\n     * @param shouldShowActionbar - A boolean indicating whether the actionbar should be visible.\n     */\n    private setupActionbarDisplay(shouldShowActionbar?: boolean): void {\n        const className = 'kbq-code-block_show-actionbar';\n\n        // Should always show actionbar on Mobile devices\n        if (this.platform.IOS || this.platform.ANDROID) {\n            this.renderer.addClass(this.elementRef.nativeElement, className);\n\n            return;\n        }\n\n        // Should always show actionbar when tabs are visible\n        if (!this.hideTabs) {\n            this.renderer.addClass(this.elementRef.nativeElement, className);\n\n            return;\n        }\n\n        if (typeof shouldShowActionbar === 'undefined') {\n            return;\n        }\n\n        if (shouldShowActionbar) {\n            this.renderer.addClass(this.elementRef.nativeElement, className);\n        } else {\n            this.renderer.removeClass(this.elementRef.nativeElement, className);\n        }\n    }\n\n    /** Whether the element has scroll. */\n    private hasScroll({ scrollHeight, scrollWidth, clientHeight, clientWidth }: HTMLElement): boolean {\n        return scrollHeight > clientHeight || scrollWidth > clientWidth;\n    }\n\n    /**\n     * Handles the enter keydown event on `viewAll` button.\n     *\n     * @docs-private\n     */\n    protected onViewAllEnterKeydown(event: Event): void {\n        event.preventDefault();\n\n        this.toggleViewAll();\n\n        if (this.canCodeContentBeFocused) {\n            this.focusMonitor.focusVia(this.scrollableCodeContent.getElementRef().nativeElement, 'keyboard');\n        }\n    }\n\n    private updateLocaleParams = (): void => {\n        this._localeConfiguration = this.localeService?.getParams('codeBlock');\n\n        this.changeDetectorRef.markForCheck();\n    };\n\n    /**\n     * Copies the file code to the clipboard.\n     *\n     * If the copy was successful, the copy button tooltip content is updated\n     * to show the \"copied\" message.\n     *\n     * @docs-private\n     */\n    protected copyCode(): void {\n        const file = this.files[this.activeFileIndex];\n\n        if (this.clipboard.copy(file.content) && this.copyButtonTooltip) {\n            this.copyButtonTooltip.content = this.localeConfiguration.copiedTooltip;\n        }\n    }\n\n    /**\n     * Opens the file link in a new window.\n     *\n     * @docs-private\n     */\n    protected openLink(): void {\n        const file = this.files[this.activeFileIndex];\n        const safeURL = this.domSanitizer.sanitize(SecurityContext.URL, file.link!);\n\n        if (safeURL) {\n            this.window.open(safeURL.toString(), '_blank');\n        }\n    }\n\n    /**\n     * Downloads the file as a blob.\n     *\n     * Creates a link with a blob as href and the file name as download attribute.\n     * Then simulates a click event on the link to initiate the download.\n     *\n     * @docs-private\n     */\n    protected downloadCode(): void {\n        const file = this.files[this.activeFileIndex];\n        const blob = new Blob([file.content], { type: 'text/plain' });\n        const url = URL.createObjectURL(blob);\n        const link = this.document.createElement('a');\n\n        link.setAttribute('href', url);\n        link.setAttribute('download', file.filename || this.fallbackFileName);\n        link.click();\n    }\n}\n","@let file = files[activeFileIndex];\n\n<div class=\"kbq-code-block__header\">\n    @if (!hideTabs) {\n        <div class=\"kbq-code-block__header-tabs\">\n            <div kbqTabNavBar transparent [tabNavPanel]=\"tabPanel\">\n                @for (file of files; track file) {\n                    <!-- Mark tab-link as readonly if only single file present -->\n                    <div\n                        kbqTabLink\n                        [active]=\"$count > 1 && activeFileIndex === $index\"\n                        [style.pointer-events]=\"$count === 1 ? 'none' : null\"\n                        (click)=\"onSelectedTabChange($index)\"\n                    >\n                        @if (tabLinkTemplate) {\n                            <ng-container\n                                *ngTemplateOutlet=\"tabLinkTemplate; 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                    [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                    [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        #codeBlockPre\n        class=\"kbq-code-block__pre\"\n    ><code kbqCodeBlockHighlight class=\"kbq-code-block__code\" [file]=\"file\">{{ file.content }}</code></pre>\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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"}