{"version":3,"file":"fundamental-ngx-core-formatted-text.mjs","sources":["../../../../libs/core/formatted-text/utils/html-sanitizer.ts","../../../../libs/core/formatted-text/formatted-text.component.ts","../../../../libs/core/formatted-text/formatted-text.module.ts","../../../../libs/core/formatted-text/fundamental-ngx-core-formatted-text.ts"],"sourcesContent":["interface StringKey<T> {\n    [key: string]: T;\n}\n\ninterface SanitizeWrapper {\n    iframe: HTMLIFrameElement | null;\n    iframeDoc: Document | null;\n}\n\nexport class HtmlSanitizer {\n    /** @hidden */\n    tagWhitelist: StringKey<boolean> = {};\n    /** @hidden */\n    attributeWhitelist: StringKey<string | boolean> = {};\n\n    /** @hidden */\n    private _schemaWhiteList: string[] = ['http', 'https', 'ftp', 'mailto'];\n\n    /** @hidden */\n    private _uriAttributes: StringKey<boolean> = {\n        href: true\n    };\n\n    /** @hidden */\n    private _safeWrapper: SanitizeWrapper | null = {\n        iframe: null,\n        iframeDoc: null\n    };\n\n    /** @hidden */\n    constructor() {\n        this.extendTags();\n    }\n\n    /** @hidden */\n    get defTagWhitelist(): StringKey<boolean> {\n        return {\n            A: true,\n            ABBR: true,\n            BLOCKQUOTE: true,\n            BR: true,\n            CITE: true,\n            CODE: true,\n            DL: true,\n            DT: true,\n            DD: true,\n            EM: true,\n            H1: true,\n            H2: true,\n            H3: true,\n            H4: true,\n            H5: true,\n            H6: true,\n            P: true,\n            PRE: true,\n            STRONG: true,\n            SPAN: true,\n            U: true,\n            UL: true,\n            OL: true,\n            LI: true\n        };\n    }\n\n    /** @hidden */\n    get defAttributeWhitelist(): StringKey<string | boolean> {\n        return {\n            class: true,\n            style: true,\n            href: true,\n            target: '_blank',\n            download: true,\n            hreflang: true,\n            rel: true,\n            type: true,\n            title: true\n        };\n    }\n\n    /** @hidden */\n    extendTags(customTags?: StringKey<boolean | string>): void {\n        this.tagWhitelist = { ...this.defTagWhitelist, ...customTags, BODY: true };\n    }\n\n    /** @hidden */\n    extendAttrs(customAttrs?: StringKey<boolean | string>): void {\n        this.attributeWhitelist = { ...this.defAttributeWhitelist, ...customAttrs };\n    }\n\n    /** @hidden */\n    sanitizeHtml(input: string): string {\n        input = input.trim();\n        if (input.length === 0) {\n            return '';\n        }\n\n        this._safeWrapper = this._getSafeWrapper();\n        if (!this._safeWrapper?.iframeDoc) {\n            return '';\n        }\n\n        this._safeWrapper.iframeDoc.body.innerHTML = input;\n\n        const resultElement = this._makeSanitizedCopy(this._safeWrapper.iframeDoc.body);\n        this._removeSafeWrapper();\n\n        return resultElement.innerHTML;\n    }\n\n    /** @hidden */\n    private _makeSanitizedCopy(node: Node): HTMLElement {\n        let newNode = node;\n        if (node.nodeType === Node.TEXT_NODE) {\n            newNode = node.cloneNode(true) as HTMLElement;\n        } else if (node.nodeType === Node.ELEMENT_NODE && this.tagWhitelist[(node as HTMLElement).tagName]) {\n            newNode = this._extendLinkTarget(this._implementTag(node as HTMLElement));\n        } else {\n            newNode = document.createDocumentFragment();\n        }\n\n        return newNode as HTMLElement;\n    }\n\n    /** @hidden */\n    private _implementTag(node: HTMLElement): HTMLElement {\n        const newNode = this._safeWrapper?.iframeDoc?.createElement(node.tagName);\n\n        if (!newNode) {\n            throw new Error('Failed to create node');\n        }\n\n        for (const key in this.attributeWhitelist) {\n            if (this.attributeWhitelist[key]) {\n                const allowed = this.attributeWhitelist[key];\n                const origin = node.getAttribute(key);\n\n                if (key in node || key === 'class') {\n                    if (this._uriAttributes[key] && this._validateBySchema(origin)) {\n                        continue;\n                    }\n                    switch (typeof allowed) {\n                        case 'string':\n                            newNode.setAttribute(key, allowed);\n                            break;\n                        default:\n                            if (allowed && origin) {\n                                newNode.setAttribute(key, origin);\n                            }\n                    }\n                }\n            }\n        }\n\n        for (const child of Array.from(node.childNodes)) {\n            const subCopy = this._makeSanitizedCopy(child);\n            if (subCopy) {\n                newNode.appendChild(subCopy);\n            }\n        }\n\n        return newNode;\n    }\n\n    /** @hidden */\n    private _extendLinkTarget(node: HTMLElement): HTMLElement {\n        if (node.tagName === 'A') {\n            const hrefAttr = node.getAttribute('href');\n            if (!hrefAttr || /^#/.test(hrefAttr)) {\n                node.removeAttribute('target');\n            } else {\n                const defTarget = this.attributeWhitelist['target'] || '_blank';\n                node.setAttribute('target', defTarget.toString());\n            }\n        }\n\n        return node;\n    }\n\n    /** @hidden */\n    private _getSafeWrapper(): SanitizeWrapper | null {\n        const iframe = document.createElement('iframe');\n        if (iframe.sandbox === undefined) {\n            console.warn('Your browser does not support sandboxed iframes. Please upgrade to a modern browser.');\n            return null;\n        }\n        iframe.setAttribute('sandbox', 'allow-same-origin');\n        iframe.style.setProperty('display', 'none');\n        document.body.appendChild(iframe);\n        const iframeDoc = iframe.contentDocument || iframe.contentWindow?.document;\n\n        if (!iframeDoc) {\n            console.warn('Could not resolve document from the provided iframe');\n            return null;\n        }\n        if (!iframeDoc?.body) {\n            // Instead of using the deprecated .write method, we directly create and append a body element.\n            const body = iframeDoc.createElement('body');\n            iframeDoc.appendChild(body);\n        }\n\n        return { iframe, iframeDoc };\n    }\n\n    /** @hidden */\n    private _removeSafeWrapper(): void {\n        if (this._safeWrapper?.iframe) {\n            document.body.removeChild(this._safeWrapper.iframe);\n        }\n    }\n\n    /** @hidden */\n    private _validateBySchema(value: string | null): boolean {\n        return !!value && value.indexOf(':') > -1 && !this._startsWithAny(value, this._schemaWhiteList);\n    }\n\n    /** @hidden */\n    private _startsWithAny(str: string, substrings: string[]): boolean {\n        return !!str && substrings.some((value) => str.indexOf(value) === 0);\n    }\n}\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, inject, input } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\nimport { HtmlSanitizer } from './utils/html-sanitizer';\n\nexport type LinkTargetType = '' | '_blank' | '_self' | '_top' | '_parent' | '_search';\n\n/**\n * Formatted-text component renders sanitized HTML content with configurable link behavior.\n *\n * This component accepts HTML text input and renders it after sanitization.\n * Only safe HTML tags are preserved; potentially dangerous content is stripped.\n *\n * @example\n * ```html\n * <fd-formatted-text\n *   [htmlText]=\"'<p>Hello <a href=\\'#\\'>World</a></p>'\"\n *   [convertedLinksDefaultTarget]=\"'_blank'\"\n *   [height]=\"'200px'\">\n * </fd-formatted-text>\n * ```\n *\n * @selector fd-formatted-text\n * @exportAs fd-formatted-text\n */\n@Component({\n    selector: 'fd-formatted-text',\n    exportAs: 'fd-formatted-text',\n    template: ``,\n    host: {\n        '[class.fd-formatted-text-with-height]': 'height()',\n        '[class.fd-formatted-text-with-width]': 'width()',\n        '[style.height]': 'height()',\n        '[style.width]': 'width()',\n        '[innerHTML]': 'formattedText()'\n    },\n    styles: [\n        `\n            fd-formatted-text {\n                display: block;\n            }\n            fd-formatted-text.fd-formatted-text-with-height {\n                overflow-y: auto;\n            }\n            fd-formatted-text.fd-formatted-text-with-width {\n                overflow-x: auto;\n            }\n        `\n    ],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FormattedTextComponent {\n    /**\n     * HTML text content to be formatted and rendered.\n     */\n    readonly htmlText = input<string>();\n\n    /**\n     * Target attribute for anchor tags in the formatted content.\n     * @default '_blank'\n     */\n    readonly convertedLinksDefaultTarget = input<LinkTargetType>('_blank');\n\n    /**\n     * Height style for component.\n     */\n    readonly height = input<string>();\n\n    /**\n     * Width style for component.\n     */\n    readonly width = input<string>();\n\n    /**\n     * Computed formatted and sanitized HTML content.\n     * Automatically updates when htmlText or convertedLinksDefaultTarget changes.\n     * @hidden\n     */\n    protected readonly formattedText = computed<SafeHtml>(() => {\n        const rawText = this.htmlText();\n\n        // Early return for empty content\n        if (!rawText || !rawText.trim()) {\n            return '';\n        }\n\n        this._htmlSanitizer.extendAttrs({\n            target: this.convertedLinksDefaultTarget()\n        });\n        const text = this._htmlSanitizer.sanitizeHtml(rawText);\n        return this._domSanitizer.bypassSecurityTrustHtml(text.trim());\n    });\n\n    /** @hidden */\n    private readonly _htmlSanitizer = new HtmlSanitizer();\n\n    /** @hidden */\n    private readonly _domSanitizer = inject(DomSanitizer);\n}\n","import { NgModule } from '@angular/core';\n\nimport { FormattedTextComponent } from './formatted-text.component';\n\n/**\n * @deprecated\n * Import `FormattedTextComponent` directly as a standalone component.\n * This module will be removed in a future version.\n */\n@NgModule({\n    exports: [FormattedTextComponent],\n    imports: [FormattedTextComponent]\n})\nexport class FormattedTextModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}