{"version":3,"file":"cisstech-nge-markdown.mjs","sources":["../../../projects/nge/markdown/src/nge-markdown-contribution.ts","../../../projects/nge/markdown/src/contributions/nge-markdown-admonitions.ts","../../../projects/nge/markdown/src/contributions/nge-markdown-emoji.ts","../../../projects/nge/markdown/src/contributions/nge-markdown-highlighter.ts","../../../projects/nge/markdown/src/contributions/nge-markdown-icons.ts","../../../projects/nge/markdown/src/contributions/nge-markdown-katex.ts","../../../projects/nge/markdown/src/contributions/nge-markdown-link-anchor.ts","../../../projects/nge/markdown/src/contributions/nge-markdown-tabbed-set.ts","../../../projects/nge/markdown/src/nge-markdown-transformer.ts","../../../projects/nge/markdown/src/nge-markdown-config.ts","../../../projects/nge/markdown/src/nge-markdown.service.ts","../../../projects/nge/markdown/src/nge-markdown.component.ts","../../../projects/nge/markdown/src/nge-markdown.component.html","../../../projects/nge/markdown/src/nge-markdown.module.ts","../../../projects/nge/markdown/cisstech-nge-markdown.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core'\nimport { NgeMarkdownTransformer } from './nge-markdown-transformer'\n\n/**\n * Implements this interface to contribute to nge-markdown.\n */\nexport interface NgeMarkdownContribution {\n  /**\n   * List of scripts and styles dependencies to loads\n   * before calling the `transform` methods.\n   *\n   * The dependencies are to be loaded only once.\n   */\n  dependencies?(): ['style' | 'script', string][]\n\n  /**\n   * Contributes to nge-markdown api.\n   * @param api nge-markdown api.\n   */\n  contribute(api: NgeMarkdownTransformer): void\n}\n\n/** Inject this token to get the list of contributions to nge-markdown api.  */\nexport const NGE_MARKDOWN_CONTRIBUTION = new InjectionToken<NgeMarkdownContribution>('NGE_MARKDOWN_CONTRIBUTION')\n","import { Injectable, Provider } from '@angular/core'\nimport { NgeMarkdownTransformer } from '../nge-markdown-transformer'\nimport { NgeMarkdownContribution, NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'\n\nconst OPEN = /^:::(\\+?)\\s+(\\w+)(\\s+.+)?/\nconst CLOSE = /^:::\\s*$/\n\n/**\n * Contribution to add collapsible styled block to markdown syntax.\n */\n@Injectable()\nexport class NgeMarkdownAdmonitions implements NgeMarkdownContribution {\n  contribute(transformer: NgeMarkdownTransformer) {\n    this.addStyles()\n    this.autoFixAdmonitionsSyntax(transformer)\n    this.createAdmonitions(transformer)\n  }\n\n  private addStyles() {\n    const head = document.head\n    if (head.querySelector('[nge-markdown-admonitions]')) {\n      return\n    }\n\n    const admonitions: Record<string, { border: string; bg: string }> = {\n      note: {\n        bg: 'rgba(68, 138, 255, 0.1)',\n        border: '#448aff',\n      },\n      abstract: {\n        bg: 'rgba(0, 176, 255, 0.1)',\n        border: '#00b0ff',\n      },\n      info: {\n        bg: 'rgba(0, 184, 212, 0.1)',\n        border: '#00b8d4',\n      },\n      tip: {\n        bg: 'rgba(0, 191, 165, 0.1)',\n        border: '#00bfa5',\n      },\n      success: {\n        bg: 'rgba(0, 200, 83, 0.1)',\n        border: '#00c853',\n      },\n      question: {\n        bg: 'rgba(100, 221, 23, 0.1)',\n        border: '#64dd17',\n      },\n      warning: {\n        bg: 'rgba(255, 145, 0, 0.1)',\n        border: '#ff9100',\n      },\n      failure: {\n        bg: 'rgba(255, 82, 82, 0.1)',\n        border: '#ff5252',\n      },\n      danger: {\n        bg: 'rgba(255, 23, 68, 0.1)',\n        border: '#ff1744',\n      },\n      bug: {\n        bg: 'rgba(245, 0, 87, 0.1)',\n        border: '#f50057',\n      },\n      example: {\n        bg: 'rgba(101, 31, 255, 0.1)',\n        border: '#651fff',\n      },\n      quote: {\n        bg: 'rgba(158, 158, 158, 0.1)',\n        border: '#9e9e9e',\n      },\n    }\n\n    const stylesheet = [\n      `\n            /* CONTAINER */\n            .nge-md-admonition {\n                margin: 1.5625em 0;\n                overflow: hidden;\n                font-size: 0.84rem;\n                page-break-inside: avoid;\n                border-radius: 0.1rem;\n                box-shadow: 0 0.2rem 0.5rem rgba(0, 0, 0, 0.05), 0 0 0.05rem rgba(0, 0, 0, 0.1);\n\n                --admonition--note: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M20.71 7.04c.39-.39.39-1.04 0-1.41l-2.34-2.34c-.37-.39-1.02-.39-1.41 0l-1.84 1.83 3.75 3.75M3 17.25V21h3.75L17.81 9.93l-3.75-3.75L3 17.25z\"/></svg>');\n                --admonition--abstract: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 5h16v2H4V5m0 4h16v2H4V9m0 4h16v2H4v-2m0 4h10v2H4v-2z\"/></svg>');\n                --admonition--info: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 9h-2V7h2m0 10h-2v-6h2m-1-9A10 10 0 002 12a10 10 0 0010 10 10 10 0 0010-10A10 10 0 0012 2z\"/></svg>');\n                --admonition--tip: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M17.55 11.2c-.23-.3-.5-.56-.76-.82-.65-.6-1.4-1.03-2.03-1.66C13.3 7.26 13 4.85 13.91 3c-.91.23-1.75.75-2.45 1.32-2.54 2.08-3.54 5.75-2.34 8.9.04.1.08.2.08.33 0 .22-.15.42-.35.5-.22.1-.46.04-.64-.12a.83.83 0 01-.15-.17c-1.1-1.43-1.28-3.48-.53-5.12C5.89 10 5 12.3 5.14 14.47c.04.5.1 1 .27 1.5.14.6.4 1.2.72 1.73 1.04 1.73 2.87 2.97 4.84 3.22 2.1.27 4.35-.12 5.96-1.6 1.8-1.66 2.45-4.32 1.5-6.6l-.13-.26c-.2-.46-.47-.87-.8-1.25l.05-.01m-3.1 6.3c-.28.24-.73.5-1.08.6-1.1.4-2.2-.16-2.87-.82 1.19-.28 1.89-1.16 2.09-2.05.17-.8-.14-1.46-.27-2.23-.12-.74-.1-1.37.18-2.06.17.38.37.76.6 1.06.76 1 1.95 1.44 2.2 2.8.04.14.06.28.06.43.03.82-.32 1.72-.92 2.27h.01z\"/></svg>');\n                --admonition--success: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10 10-4.5 10-10S17.5 2 12 2m-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/></svg>');\n                --admonition--question: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M15.07 11.25l-.9.92C13.45 12.89 13 13.5 13 15h-2v-.5c0-1.11.45-2.11 1.17-2.83l1.24-1.26c.37-.36.59-.86.59-1.41a2 2 0 00-2-2 2 2 0 00-2 2H8a4 4 0 014-4 4 4 0 014 4 3.2 3.2 0 01-.93 2.25M13 19h-2v-2h2M12 2A10 10 0 002 12a10 10 0 0010 10 10 10 0 0010-10c0-5.53-4.5-10-10-10z\"/></svg>');\n                --admonition--warning: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 14h-2v-4h2m0 8h-2v-2h2M1 21h22L12 2 1 21z\"/></svg>');\n                --admonition--failure: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M12 2c5.53 0 10 4.47 10 10s-4.47 10-10 10S2 17.53 2 12 6.47 2 12 2m3.59 5L12 10.59 8.41 7 7 8.41 10.59 12 7 15.59 8.41 17 12 13.41 15.59 17 17 15.59 13.41 12 17 8.41 15.59 7z\"/></svg>');\n                --admonition--danger: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M11.5 20l4.86-9.73H13V4l-5 9.73h3.5V20M12 2c2.75 0 5.1 1 7.05 2.95C21 6.9 22 9.25 22 12s-1 5.1-2.95 7.05C17.1 21 14.75 22 12 22s-5.1-1-7.05-2.95C3 17.1 2 14.75 2 12s1-5.1 2.95-7.05C6.9 3 9.25 2 12 2z\"/></svg>');\n                --admonition--bug: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 12h-4v-2h4m0 6h-4v-2h4m6-6h-2.81a5.985 5.985 0 00-1.82-1.96L17 4.41 15.59 3l-2.17 2.17a6.002 6.002 0 00-2.83 0L8.41 3 7 4.41l1.62 1.63C7.88 6.55 7.26 7.22 6.81 8H4v2h2.09c-.05.33-.09.66-.09 1v1H4v2h2v1c0 .34.04.67.09 1H4v2h2.81c1.04 1.79 2.97 3 5.19 3s4.15-1.21 5.19-3H20v-2h-2.09c.05-.33.09-.66.09-1v-1h2v-2h-2v-1c0-.34-.04-.67-.09-1H20V8z\"/></svg>');\n                --admonition--example: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M7 13v-2h14v2H7m0 6v-2h14v2H7M7 7V5h14v2H7M3 8V5H2V4h2v4H3m-1 9v-1h3v4H2v-1h2v-.5H3v-1h1V17H2m2.25-7a.75.75 0 01.75.75c0 .2-.08.39-.21.52L3.12 13H5v1H2v-.92L4 11H2v-1h2.25z\"/></svg>');\n                --admonition--quote: url('data:image/svg+xml;charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M14 17h3l2-4V7h-6v6h3M6 17h3l2-4V7H5v6h3l-2 4z\"/></svg>');\n                --admonition--chevron-right: url('data:image/svg+xml;:charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill-rule=\"evenodd\" d=\"M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z\"/></svg>');\n                --admonition--chevron-down: url('data:image/svg+xml;:charset=utf-8,<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 16 16\"><path fill-rule=\"evenodd\" d=\"M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z\"/></svg>');\n            }\n\n            /* TITLE */\n            .nge-md-admonition-title {\n                min-height: 24px;\n                box-sizing: border-box;\n                position: relative;\n                display: flex;\n                align-items: center;\n                margin-top: 0 !important;\n                margin-bottom: 0 !important;\n                padding: 0.4rem 0.6rem 0.4rem 2rem;\n                font-weight: 700;\n                /*REMOVE DETAILS MARKER IN FIREFOX*/\n                list-style-type: none;\n            }\n            .nge-md-admonition-title:focus {\n                outline: none;\n            }\n\n            /* DETAILS MARKER */\n            .nge-md-admonition-title::marker,\n            .nge-md-admonition-title::-webkit-details-marker {\n                display: none;\n            }\n\n            /* TITLE COLLAPSIBLE */\n\n            details .nge-md-admonition-title {\n                cursor: pointer;\n            }\n            details .nge-md-admonition-title:after {\n                position: absolute;\n                right: 0.6rem;\n                width: 1rem;\n                height: 1rem;\n                -o-mask-image: var(--admonition--chevron-right);\n                -webkit-mask-image: var(--admonition--chevron-right);\n                mask-image: var(--admonition--chevron-right);\n                content: \"\";\n            }\n            details[open] .nge-md-admonition-title:after {\n                -o-mask-image: var(--admonition--chevron-down);\n                -webkit-mask-image: var(--admonition--chevron-down);\n                mask-image: var(--admonition--chevron-down);\n            }\n\n            /* CONTENT */\n            .nge-md-admonition-content {\n                padding: 0 0.6rem;\n            }\n        `,\n    ]\n\n    Object.keys(admonitions).forEach((type) => {\n      const map = admonitions[type]\n      stylesheet.push(`\n                .nge-md-admonition--${type} {\n                    border-left: 0.2rem solid ${map.border};\n                }\n                .nge-md-admonition-title--${type} {\n                    background-color: ${map.bg};\n                }\n                .nge-md-admonition-title--${type}:before,\n                .nge-md-admonition-title--${type}:after {\n                    background-color: ${map.border};\n                }\n                .nge-md-admonition-title--${type}:before {\n                    position: absolute;\n                    left: 0.6rem;\n                    width: 1rem;\n                    height: 1rem;\n                    -o-mask-image: var(--admonition--${type});\n                    -webkit-mask-image: var(--admonition--${type});\n                    mask-image: var(--admonition--${type});\n                    content: \"\";\n                }\n            `)\n    })\n    const style = document.createElement('style')\n    style.setAttribute('nge-markdown-admonitions', '')\n    style.innerHTML = stylesheet.join('\\n')\n\n    head.appendChild(style)\n  }\n\n  private createAdmonitions(transformer: NgeMarkdownTransformer) {\n    transformer.addHtmlTransformer((element) => {\n      const paragraphs = element.querySelectorAll('p')\n      paragraphs.forEach((p) => {\n        const text = p.innerHTML\n        const match = text.match(OPEN)\n        if (match) {\n          const opener = match[1]\n          const type = match[2]\n          const title = (match[3] || '').trim()\n\n          const admonition = document.createElement('details')\n          if (opener.endsWith('+')) {\n            admonition.open = true\n          }\n          admonition.className = 'nge-md-admonition nge-md-admonition--' + type\n\n          const summary = document.createElement('summary')\n          summary.className = 'nge-md-admonition-title nge-md-admonition-title--' + type\n          summary.innerHTML = title\n\n          const content: HTMLElement[] = []\n          admonition.appendChild(summary)\n\n          let node = p.nextElementSibling\n          let opened = 1\n          while (node) {\n            const innerHTML = node.innerHTML.trim()\n            if (innerHTML.match(OPEN)) {\n              opened++\n            } else if (innerHTML.match(CLOSE)) {\n              opened--\n              if (opened === 0) {\n                node.remove()\n                break\n              }\n            }\n            content.push(node as HTMLElement)\n            node = node.nextElementSibling\n          }\n\n          const div = document.createElement('div')\n          div.className = 'nge-md-admonition-content'\n          content.forEach((e) => div.appendChild(e))\n          admonition.appendChild(div)\n\n          p.parentElement?.insertBefore(admonition, p)\n          p.remove()\n        }\n      })\n    })\n  }\n\n  private autoFixAdmonitionsSyntax(transformer: NgeMarkdownTransformer) {\n    transformer.addMarkdownTransformer((markdown) => {\n      const lines = markdown.split('\\n')\n      const length = lines.length\n      let insideCodeBlock = false\n      for (let i = 0; i < length; i++) {\n        const curr = lines[i]\n        if (curr.startsWith('```')) {\n          insideCodeBlock = !insideCodeBlock\n        }\n        if (insideCodeBlock) {\n          continue\n        }\n        const prev = i > 0 ? lines[i - 1] : undefined\n        const next = i < length - 1 ? lines[i + 1] : undefined\n        if (curr.match(OPEN)) {\n          if (next?.trim()) {\n            lines[i] = curr + '\\n'\n          }\n        } else if (curr.match(CLOSE)) {\n          if (prev?.trim()) {\n            lines[i] = '\\n' + curr\n          }\n        }\n      }\n      return lines.join('\\n')\n    })\n  }\n}\n\n/**\n * Injection token to register `NgeMarkdownAdmonitions` contribution.\n */\nexport const NgeMarkdownAdmonitionsProvider: Provider = {\n  provide: NGE_MARKDOWN_CONTRIBUTION,\n  multi: true,\n  useClass: NgeMarkdownAdmonitions,\n}\n","import { Inject, Injectable, InjectionToken, Optional, Provider } from '@angular/core'\nimport { NgeMarkdownTransformer } from '../nge-markdown-transformer'\nimport { NgeMarkdownContribution, NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'\n\n/** Options to pass to `NgeMarkdownEmoji` contribution. */\nexport interface NgeMarkdownEmojiOptions {\n  /** URL to load joypixels script (default https://cdn.jsdelivr.net/npm/emoji-toolkit@6.0.1/lib/js/joypixels.min.js). */\n  url: string\n}\n\n/** Injection token to pass custom options to `NgeMarkdownEmoji` contribution. */\nexport const NGE_MARKDOWN_EMOJI_OPTIONS = new InjectionToken<NgeMarkdownEmojiOptions>('NGE_MARKDOWN_EMOJI_OPTIONS')\n\n/**\n * Contribution to use emoji in markdown using [emoji-toolkit](https://github.com/joypixels/emoji-toolkit) library.\n */\n@Injectable()\nexport class NgeMarkdownEmoji implements NgeMarkdownContribution {\n  constructor(\n    @Optional()\n    @Inject(NGE_MARKDOWN_EMOJI_OPTIONS)\n    private readonly options: NgeMarkdownEmojiOptions\n  ) {\n    this.options = options || {}\n    this.options.url = this.options.url || 'https://cdn.jsdelivr.net/npm/emoji-toolkit@8.0.0/lib/js/joypixels.min.js'\n  }\n\n  dependencies() {\n    const deps: any[] = []\n    if (!('joypixels' in window)) {\n      deps.push(['script', this.options.url])\n    }\n    return deps\n  }\n\n  contribute(transformer: NgeMarkdownTransformer) {\n    transformer.addMarkdownTransformer((markdown) => {\n      const { joypixels } = window as any\n      const lines = markdown.split('\\n')\n      const length = lines.length\n      let insideCodeBlock = false\n      for (let i = 0; i < length; i++) {\n        const curr = lines[i]\n        if (curr.startsWith('```')) {\n          insideCodeBlock = !insideCodeBlock\n        }\n        if (insideCodeBlock) {\n          continue\n        }\n        if (lines[i].match(/:[a-z0-9_+-]+:/g)) {\n          lines[i] = joypixels.shortnameToUnicode(lines[i])\n        }\n      }\n      return lines.join('\\n')\n    })\n  }\n}\n\n/**\n * Provider to register `NgeMarkdownEmoji` contribution.\n */\nexport const NgeMarkdownEmojiProvider: Provider = {\n  provide: NGE_MARKDOWN_CONTRIBUTION,\n  multi: true,\n  useClass: NgeMarkdownEmoji,\n}\n\n/**\n * Provider to pass options to `NgeMarkdownEmoji` contribution.\n * @param options `NgeMarkdownEmoji` options.\n */\nexport function NgeMarkdownEmojiOptionsProvider(options: NgeMarkdownEmojiOptions): Provider {\n  return {\n    provide: NGE_MARKDOWN_EMOJI_OPTIONS,\n    useValue: options,\n  }\n}\n","import { Injector, InjectionToken, Injectable, Provider, Inject, Optional, Type } from '@angular/core'\nimport { NgeMarkdownTransformer } from '../nge-markdown-transformer'\nimport { NgeMarkdownContribution, NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'\n\nconst DATA_LINES = 'data-nge-md-hl-lines'\nconst DATA_LANGUAGE = 'data-nge-md-hl-language'\nconst DATA_HIGHLIGHTS = 'data-nge-md-hl-highlights'\nconst DATA_FILENAME = 'data-nge-md-hl-filename'\n\n/**\n * Highlight options.\n */\nexport interface NgeMarkdownHighlightOptions {\n  /** &lt;code&gt;&lt;/code&gt; element to colorize. */\n  element: HTMLElement\n\n  /** Target language (default plaintext) */\n  language?: string\n\n  /**\n   * Start line number or a space separated list of line numbers to show.\n   *\n   * Example:\n   *\n   * *Show all line numbers starting 1*\n   *\n   * `\"1\"`\n   *\n   * *Show all line numbers from 1 to 4*\n   *\n   * `\"1-4\"`\n   *\n   * *Show lines 2 4 5 6 7 9*\n   *\n   * `\"2 4-7 9\"`\n   *\n   */\n  lines?: string\n\n  /**\n   * A space separated list of line numbers to highlight.\n   *\n   * Example:\n   *\n   * *Highlight line 1*\n   *\n   * `\"1\"`\n   *\n   * *Highlight all lines from 1 to 4*\n   *\n   * `\"1-4\"`\n   *\n   * *Highlightw lines 2 4 5 6 7 9*\n   *\n   * `\"2 4-7 9\"`\n   */\n  highlights?: string\n\n  /** Filename to display */\n  filename?: string\n}\n\n/**\n * Highlighter service representation.\n */\nexport interface NgeMarkdownHighlighterService {\n  /**\n   * Function called to hightlight an HTMLElement code.\n   * @param injector Injector reference to use Angular dependency injection.\n   * @param options Highlight options.\n   */\n  highligtht?(injector: Injector, options: NgeMarkdownHighlightOptions): void | Promise<void>\n}\n\n/**\n * Injection token to register a highlighter service.\n */\nexport const NGE_MARKDOWN_HIGHLIGHTER_SERVICE = new InjectionToken<NgeMarkdownHighlighterService>(\n  'NGE_MARKDOWN_HIGHLIGHTER_SERVICE'\n)\n\n/**\n * Contribution to add an abstract syntax highlighter.\n */\n@Injectable()\nexport class NgeMarkdownHighlighter implements NgeMarkdownContribution {\n  constructor(\n    private readonly injector: Injector,\n    @Optional()\n    @Inject(NGE_MARKDOWN_HIGHLIGHTER_SERVICE)\n    private readonly options: NgeMarkdownHighlighterService\n  ) {}\n\n  contribute(transformer: NgeMarkdownTransformer) {\n    this.createAttributes(transformer)\n    this.colorizeCodes(transformer)\n  }\n\n  private createAttributes(transformer: NgeMarkdownTransformer) {\n    transformer.addRendererTransformer((renderer) => {\n      renderer.code = (code, args) => {\n        args = args || ''\n        const attributes = new Map<string, string>()\n\n        // LANGUAGE\n        const language = args.split(' ').slice(0, 1).pop() || 'plaintext'\n        attributes.set(DATA_LANGUAGE, language)\n\n        // LINE NUMBERING\n        let match = args.match(/lines=\"(.+?)\"/)\n        if (match) {\n          attributes.set(DATA_LINES, match[1])\n        }\n\n        // LINE HIGHLIGHTING\n        match = args.match(/highlights=\"(.+?)\"/)\n        if (match) {\n          attributes.set(DATA_HIGHLIGHTS, match[1])\n        }\n\n        // FILENAME\n        match = args.match(/filename=\"(.+?)\"/)\n        if (match) {\n          attributes.set(DATA_FILENAME, match[1])\n        }\n\n        const attribs = Array.from(attributes.entries())\n          .map(([attributeName, attributeValue]) => {\n            return `${attributeName}=\"${attributeValue}\"`\n          })\n          .join(' ')\n          console.log(attribs)\n        return `<pre ${attribs}><code>${this.escapeHtml(code)}</code></pre>`\n      }\n      return renderer\n    })\n  }\n\n  private colorizeCodes(transformer: NgeMarkdownTransformer) {\n    if (!this.options?.highligtht) {\n      return\n    }\n    const highlight = this.options.highligtht\n    transformer.addHtmlTransformer(async (element) => {\n      const preElements = Array.from(element.querySelectorAll(`pre[${DATA_LANGUAGE}]`))\n      for (const pre of preElements) {\n        highlight(this.injector, {\n          lines: pre.getAttribute(DATA_LINES) || '',\n          element: pre.querySelector('code') as HTMLElement,\n          language: pre.getAttribute(DATA_LANGUAGE) || 'plaintext',\n          highlights: pre.getAttribute(DATA_HIGHLIGHTS) || '',\n          filename: pre.getAttribute(DATA_FILENAME) || '',\n        })\n      }\n    })\n  }\n\n  private escapeHtml(input: string) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const map: any = {\n      '<': '&lt;',\n      '>': '&gt;',\n    }\n    return input.replace(/[<>]/g, (tag) => map[tag] || tag)\n  }\n}\n\n/**\n * Injection token to register `NgeMarkdownHighlighter` contribution.\n */\nexport const NgeMarkdownHighlighterProvider: Provider = {\n  provide: NGE_MARKDOWN_CONTRIBUTION,\n  multi: true,\n  useClass: NgeMarkdownHighlighter,\n}\n\n/**\n * Provider to register `NgeMonacoColorizerService` as the syntax highlighter.\n * @param type A reference to NgeMonacoColorizerService type.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function NgeMarkdownHighlighterMonacoProvider(type: Type<any>) {\n  return {\n    provide: NGE_MARKDOWN_HIGHLIGHTER_SERVICE,\n    useValue: {\n      highligtht: (injector, options) => {\n        const colorizer = injector.get(type, null)\n        const code = options.element\n        const pre = code.parentElement as HTMLElement\n        pre.style.margin = '0.5em 0'\n        pre.style.overflow = 'auto'\n        pre.style.border = '1px solid #F2F2F2'\n        colorizer?.colorizeElement({\n          element: code,\n          language: options.language,\n          code: code.textContent,\n          lines: options.lines,\n          filename: options.filename,\n          highlights: options.highlights,\n        })\n      },\n    } as NgeMarkdownHighlighterService,\n  }\n}\n","import { Injectable, Provider } from '@angular/core'\nimport { NgeMarkdownTransformer } from '../nge-markdown-transformer'\nimport { NgeMarkdownContribution, NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'\n\n/**\n * Contribution to use icons in markdown library using https://icongr.am/.\n */\n@Injectable()\nexport class NgeMarkdownIcons implements NgeMarkdownContribution {\n  contribute(transformer: NgeMarkdownTransformer) {\n    transformer.addMarkdownTransformer((markdown) => {\n      const pattern = /@(\\w+)\\s+([\\w-]+)((\\s+(?:color|size)=[^\\s]+)*?)?@/gm\n      const lines = markdown.split('\\n')\n      const length = lines.length\n      let insideCodeBlock = false\n      for (let i = 0; i < length; i++) {\n        const curr = lines[i]\n        if (curr.startsWith('```')) {\n          insideCodeBlock = !insideCodeBlock\n        }\n        if (insideCodeBlock) {\n          continue\n        }\n        lines[i] = lines[i].replace(pattern, (_: string, type: string, name: string, params?: string) => {\n          params = (params ?? '')\n            .trim()\n            .split(' ')\n            .filter((e) => e.trim())\n            .join('&')\n          params = params ? '?' + params : ''\n          return `<img src=\"https://icongr.am/${type.trim()}/${name.trim()}.svg${params}\"/>`\n        })\n      }\n      return lines.join('\\n')\n    })\n  }\n}\n\n/**\n * Injection token to register `NgeMarkdownIcons` contribution.\n */\nexport const NgeMarkdownIconsProvider: Provider = {\n  provide: NGE_MARKDOWN_CONTRIBUTION,\n  multi: true,\n  useClass: NgeMarkdownIcons,\n}\n","import { Inject, Injectable, InjectionToken, Optional, Provider } from '@angular/core'\nimport { NgeMarkdownTransformer } from '../nge-markdown-transformer'\nimport { NgeMarkdownContribution, NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'\n\n/** Custom options to pass to NgeMarkdownKatex contribution. */\nexport interface NgeMarkdownKatexOptions {\n  /** Base url to load katex scripts and styles. (default https://cdn.jsdelivr.net/npm/katex@0.15.1/dist) */\n  baseUrl?: string\n  /** Options to pass to katex render function. https://katex.org/docs/options.html */\n  options?: Record<string, any>\n  /** Katex extensions to include. https://katex.org/docs/libs.html  */\n  extensions?: {\n    /** https://github.com/Khan/KaTeX/tree/master/contrib/mhchem (default to `true`) */\n    mhchem?: boolean\n    /** https://github.com/Khan/KaTeX/tree/master/contrib/copy-tex (default to `true`) */\n    copyTex?: boolean\n  }\n}\n\n/** Custom options to pass to NgeMarkdownKatex contribution. */\nexport const NGE_MARKDOWN_KATEX_OPTIONS = new InjectionToken<NgeMarkdownKatexOptions>('NGE_MARKDOWN_KATEX_OPTIONS')\n\n/**\n * Contribution to render math expressions in markdown using [Katex](https://katex.org) library.\n */\n@Injectable()\nexport class NgeMarkdownKatex implements NgeMarkdownContribution {\n  constructor(\n    @Optional()\n    @Inject(NGE_MARKDOWN_KATEX_OPTIONS)\n    private readonly options: NgeMarkdownKatexOptions\n  ) {\n    this.options = options || {\n      extensions: {\n        mhchem: true,\n        copyTex: true,\n      },\n    }\n    this.options.extensions = this.options.extensions || {}\n    this.options.extensions.mhchem = this.options.extensions.mhchem ?? true\n    this.options.extensions.copyTex = this.options.extensions.copyTex ?? true\n  }\n\n  dependencies() {\n    if ('katex' in window) {\n      return []\n    }\n\n    let baseUrl = this.options?.baseUrl || 'https://cdn.jsdelivr.net/npm/katex@0.16.4/dist/'\n    if (!baseUrl.endsWith('/')) {\n      baseUrl += '/'\n    }\n\n    const deps = [\n      ['style', `${baseUrl}katex.min.css`],\n      ['script', `${baseUrl}katex.js`],\n      ['script', `${baseUrl}contrib/auto-render.js`],\n    ]\n\n    if (this.options.extensions?.copyTex) {\n      deps.push(['script', `${baseUrl}contrib/copy-tex.min.js`])\n    }\n\n    if (this.options.extensions?.mhchem) {\n      deps.push(['script', `${baseUrl}contrib/mhchem.js`])\n    }\n\n    return deps as any\n  }\n\n  contribute(transformer: NgeMarkdownTransformer) {\n    // pattern to search multiline latex between $$...$$ or inline latex between $...$\n    // const pattern = /(\\$\\$\\n((.|\\s|\\n)+?)\\n\\$\\$)|(\\$([^\\s][^$\\n]+?[^\\s])\\$)/gm;\n    transformer.addHtmlTransformer((element) => {\n      const { renderMathInElement } = window as any\n      try {\n        renderMathInElement(\n          element,\n          this.options.options || {\n            delimiters: [\n              { left: '$$', right: '$$', display: false },\n              { left: '$', right: '$', display: false },\n              { left: '\\\\(', right: '\\\\)', display: false },\n              { left: '\\\\[', right: '\\\\]', display: false },\n            ],\n          }\n        )\n      } catch (error) {\n        console.error(error)\n      }\n    })\n  }\n}\n\n/**\n * Provider to render math expressions in markdown using [Katex](https://katex.org) library.\n */\nexport const NgeMarkdownKatexProvider: Provider = {\n  provide: NGE_MARKDOWN_CONTRIBUTION,\n  multi: true,\n  useClass: NgeMarkdownKatex,\n}\n\n/**\n * Provider to pass options to `NgeMarkdownKatex` contribution.\n * @param options `NgeMarkdownKatex` options.\n */\nexport function NgeMarkdownKatexOptionsProvider(options: NgeMarkdownKatexOptions): Provider {\n  return {\n    provide: NGE_MARKDOWN_KATEX_OPTIONS,\n    useValue: options,\n  }\n}\n","import { Location } from '@angular/common'\nimport { Injectable, Provider } from '@angular/core'\nimport { Router } from '@angular/router'\nimport { NgeMarkdownTransformer } from '../nge-markdown-transformer'\nimport { NgeMarkdownContribution, NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'\n\n/**\n * Contribution to handle fragment navigation in anchor elements.\n */\n@Injectable()\nexport class NgeMarkdownLinkAnchor implements NgeMarkdownContribution {\n  constructor(\n    private readonly router: Router,\n    private readonly location: Location\n  ) {}\n\n  contribute(transformer: NgeMarkdownTransformer) {\n    transformer.addRendererTransformer((renderer) => {\n      renderer.link = (href: string, _: string, text: string) => {\n        const attributes = new Map<string, string>()\n        if (href.startsWith('#')) {\n          href = this.location.path() + href\n        }\n        attributes.set('href', href)\n\n        // open in new tab if its a link external to the application\n        const routes = (this.router.config || []).map((config) => {\n          if (!config.path?.startsWith('/')) {\n            return '/' + config.path\n          }\n          return config.path\n        })\n        if (!routes.find((route) => href.startsWith(route))) {\n          attributes.set('target', '_blank')\n        }\n\n        return `<a ${Array.from(attributes.entries())\n          .map((entry) => {\n            return entry[0] + '=' + entry[1]\n          })\n          .join(' ')}>${text}</a>`\n      }\n      return renderer\n    })\n  }\n}\n\n/**\n * Injection token to register `NgeMarkdownLinkAnchor` contribution.\n */\nexport const NgeMarkdownLinkAnchorProvider: Provider = {\n  provide: NGE_MARKDOWN_CONTRIBUTION,\n  multi: true,\n  useClass: NgeMarkdownLinkAnchor,\n}\n","import { Injectable, Provider } from '@angular/core'\nimport { NgeMarkdownTransformer } from '../nge-markdown-transformer'\nimport { NgeMarkdownContribution, NGE_MARKDOWN_CONTRIBUTION } from '../nge-markdown-contribution'\n\nlet TABSET_COUNTER = 0\n\ninterface Tab {\n  title: string\n  content: Element[]\n}\n\n/**\n * Contribution to render tabs inside markdown files.\n */\n@Injectable()\nexport class NgeMarkdownTabbedSet implements NgeMarkdownContribution {\n  contribute(transformer: NgeMarkdownTransformer) {\n    this.addStyles()\n    transformer.addHtmlTransformer((el) => {\n      const open = /^===\\s*(.+)/\n      const close = /^===\\s*$/\n      const processed: Element[] = []\n      const toRemoves: Element[] = []\n      el.querySelectorAll('p').forEach((paragraph) => {\n        if (processed.indexOf(paragraph) !== -1) {\n          return\n        }\n\n        const match = paragraph.innerHTML.match(open)\n        if (match) {\n          const tabs: Tab[] = []\n          let tab: Tab = {\n            title: match[1],\n            content: [],\n          }\n\n          let node = paragraph.nextElementSibling\n          while (node) {\n            let push = true\n            const innerHTML = node.innerHTML.trim()\n            if (innerHTML.match(open)) {\n              tabs.push(tab)\n              tab = {\n                title: innerHTML.replace('===', '').trim(),\n                content: [],\n              }\n              push = false\n              toRemoves.push(node)\n            } else if (innerHTML.match(close)) {\n              tabs.push(tab)\n              toRemoves.push(node)\n              break\n            }\n\n            if (push) {\n              tab.content.push(node)\n            }\n\n            processed.push(node)\n            node = node.nextElementSibling\n          }\n\n          paragraph.parentElement?.replaceChild(this.createTabs(tabs), paragraph)\n\n          paragraph.remove()\n          toRemoves.forEach((e) => e.remove())\n        }\n      })\n    })\n  }\n\n  private createTabs(tabs: Tab[]) {\n    const tabset = document.createElement('div')\n    tabset.className = 'nge-md-tabbed-set'\n\n    let i = 0\n    TABSET_COUNTER++\n    tabs.forEach((e) => {\n      const checkbox = document.createElement('input')\n      checkbox.type = 'radio'\n      checkbox.id = 'nge-md-tabbed-' + TABSET_COUNTER + '-' + i\n      checkbox.name = 'nge-md-tabbed-' + TABSET_COUNTER\n      if (i === 0) {\n        checkbox.setAttribute('checked', 'checked')\n      }\n\n      const label = document.createElement('label')\n      label.setAttribute('for', checkbox.id)\n      label.innerHTML = e.title\n\n      const content = document.createElement('div')\n      content.className = 'nge-md-tabbed-content'\n      e.content.forEach((c) => content.appendChild(c))\n\n      tabset.append(checkbox, label, content)\n      i++\n    })\n    return tabset\n  }\n\n  private addStyles() {\n    const head = document.head\n    if (head.querySelector('[nge-markdown-tabbed-set]')) {\n      return\n    }\n\n    const style = document.createElement('style')\n    style.setAttribute('nge-markdown-tabbed-set', '')\n    style.innerHTML = `\n            /*  TAB SET */\n            .nge-md-tabbed-set {\n                display: flex;\n                position: relative;\n                flex-wrap: wrap;\n                margin: 1em 0;\n                border-radius: .1rem;\n            }\n\n            .nge-md-tabbed-set .highlight {\n                background: #ddd;\n            }\n\n            .nge-md-tabbed-set .nge-md-tabbed-content {\n                display: none;\n                order: 99;\n                width: 100%;\n            }\n            .nge-md-tabbed-set .nge-md-tabbed-content :first-child {\n                margin: 0;\n            }\n\n            .nge-md-tabbed-set label {\n                width: auto;\n                /*padding: 0.25em;*/\n                padding: .9375em 1.25em .78125em;\n                font-weight: 700;\n                font-size: .84rem;\n                cursor: pointer;\n            }\n\n            .nge-md-tabbed-set input {\n                position: absolute;\n                opacity: 0;\n            }\n\n            .nge-md-tabbed-set input:nth-child(n+1) {\n                color: #333333;\n            }\n\n            .nge-md-tabbed-set input:nth-child(n+1):checked + label {\n                color: #ff5252;\n                transition: all 0.3s;\n                /* background-color: rgba(255, 82, 82, 0.1);*/\n                border-bottom: .1rem solid;\n            }\n\n            .nge-md-tabbed-set input:nth-child(n+1):checked + label + .nge-md-tabbed-content {\n                display: block;\n                border-top: 1px solid #F5F5F5;\n            }\n        `\n\n    head.appendChild(style)\n  }\n}\n\n/**  * Injection token to register `NgeMarkdownTabbedSet` contribution. */\nexport const NgeMarkdownTabbedSetProvider: Provider = {\n  provide: NGE_MARKDOWN_CONTRIBUTION,\n  multi: true,\n  useClass: NgeMarkdownTabbedSet,\n}\n","import type { Renderer, Tokenizer, TokensList, marked } from 'marked'\nimport { NgeMarkdownConfig } from './nge-markdown-config'\n\ndeclare type AstTransformer = (tokens: TokensList) => TokensList\ndeclare type HtmlTransformer = (element: HTMLElement) => void\ndeclare type MarkdownTransformer = (markdown: string) => string\ndeclare type RendererTransformer = (renderer: Renderer) => Renderer\ndeclare type TokenizerTransformer = (tokenizer: Tokenizer) => Tokenizer\n\n/**\n * Nge markdown transformer used by the contributions.\n */\nexport class NgeMarkdownTransformer {\n  private readonly astTransformers: AstTransformer[] = []\n  private readonly htmlTransformers: HtmlTransformer[] = []\n  private readonly markdownTransformers: MarkdownTransformer[] = []\n  private readonly rendererTransformers: RendererTransformer[] = []\n  private readonly tokenizerTransformers: TokenizerTransformer[] = []\n\n  constructor(\n    /** Configuration option */\n    readonly config: NgeMarkdownConfig\n  ) {}\n\n  /**\n   * Registers a function to call to update the ast generated by the markdown compiler.\n   * @param transform the function to call.\n   */\n  addAstTransformer(transform: AstTransformer) {\n    if (transform == null) {\n      throw new ReferenceError('argument \"transform\" is required')\n    }\n\n    this.astTransformers.push(transform)\n  }\n\n  /**\n   * Registers a function to call to transform the html generated by the markdown compiler.\n   * @param transformer the function to call.\n   */\n  addHtmlTransformer(transformer: HtmlTransformer) {\n    if (transformer == null) {\n      throw new ReferenceError('argument \"transform\" is required')\n    }\n\n    this.htmlTransformers.push(transformer)\n  }\n\n  /**\n   * Registers a function to call to transform the markdown before it's parsed by the markdown compiler.\n   * @param transform the function to call.\n   */\n  addMarkdownTransformer(transform: MarkdownTransformer) {\n    if (transform == null) {\n      throw new ReferenceError('argument \"transform\" is required')\n    }\n\n    this.markdownTransformers.push(transform)\n  }\n\n  /**\n   * Registers a function to call to update marked library renderer.\n   * @param transform the function to call.\n   */\n  addRendererTransformer(transform: RendererTransformer) {\n    if (transform == null) {\n      throw new ReferenceError('argument \"transform\" is required')\n    }\n\n    this.rendererTransformers.push(transform)\n  }\n\n  /**\n   * Registers a function to call to update marked library tokenizer.\n   * @param transform the function to call.\n   */\n  addTokenizerTransformer(transform: TokenizerTransformer) {\n    if (transform == null) {\n      throw new ReferenceError('argument \"transform\" is required')\n    }\n\n    this.tokenizerTransformers.push(transform)\n  }\n\n  /**\n   * Apply the registered ast transformer functions to the given ast.\n   * @param ast the ast to transform.\n   * @returns the transformed ast.\n   */\n  transformAst(ast: TokensList): TokensList {\n    if (ast == null) {\n      throw new ReferenceError('argument \"ast\" is required')\n    }\n\n    for (const fn of this.astTransformers) {\n      ast = fn(ast)\n    }\n\n    return ast\n  }\n\n  /**\n   * Apply the registered html transformer functions to the given html.\n   * @param element the html element to transform.\n   * @returns the transformed html.\n   */\n  transformHTML(element: HTMLElement) {\n    if (element == null) {\n      throw new ReferenceError('argument \"html\" is required')\n    }\n\n    for (const fn of this.htmlTransformers) {\n      fn(element)\n    }\n\n    return element\n  }\n\n  /**\n   * Apply the registered markdown transformer functions to the given markdown.\n   * @param markdown the markdown to transform.\n   * @returns the transformed markdown.\n   */\n  transformMarkdown(markdown: string): string {\n    if (markdown == null) {\n      throw new ReferenceError('argument \"markdown\" is required')\n    }\n\n    for (const fn of this.markdownTransformers) {\n      markdown = fn(markdown)\n    }\n\n    return markdown\n  }\n\n  /**\n   * Apply the registered renderer transformer functions to the given renderer.\n   * @param renderer the renderer to transform.\n   * @returns the transformed renderer.\n   */\n  transformRenderer(renderer: Renderer): Renderer {\n    if (renderer == null) {\n      throw new ReferenceError('argument \"renderer\" is required')\n    }\n\n    for (const fn of this.rendererTransformers) {\n      renderer = fn(renderer)\n    }\n\n    return renderer\n  }\n\n  /**\n   * Apply the registered tokenizer transformer functions to the given tokenizer.\n   * @param tokenizer the tokenizer to transform.\n   * @returns the transformed tokenizer.\n   */\n  transformTokenizer(tokenizer: Tokenizer): Tokenizer {\n    if (tokenizer == null) {\n      throw new ReferenceError('argument \"tokenizer\" is required')\n    }\n\n    for (const fn of this.tokenizerTransformers) {\n      tokenizer = fn(tokenizer)\n    }\n\n    return tokenizer\n  }\n\n  /**\n   * Add new stylesheet element to the document.\n   * @param url url to the stylesheet.\n   * @returns A promise that resolves once the element is loaded.\n   */\n  addStyle(url: string) {\n    const link = document.createElement('link')\n    link.rel = 'stylesheet'\n    link.href = url\n    document.body.appendChild(link)\n    return new Promise<any>((resolve, reject) => {\n      link.onload = resolve\n      link.onerror = reject\n    })\n  }\n\n  /**\n   * Add new script element to the document.\n   * @param url url to the script.\n   * @returns A promise that resolves once the element is loaded.\n   */\n  addScript(url: string) {\n    const script = document.createElement('script')\n    script.type = 'text/javascript'\n    script.src = url\n    script.defer = true\n    document.body.appendChild(script)\n    return new Promise<any>((resolve, reject) => {\n      script.onload = resolve\n      script.onerror = reject\n    })\n  }\n}\n","import { InjectionToken, Provider } from '@angular/core'\nimport { MarkedOptions } from 'marked'\n\n/**\n * Global configuration of NgeMarkdownModule\n */\nexport declare type NgeMarkdownConfig = MarkedOptions & {\n  /**\n   * Class name indicating that the page is currently in dark mode\n   */\n  darkThemeClassName?: string\n}\n\n/**\n * Theme configuration of NgeMarkdownModule\n */\nexport interface NgeMarkdownTheme {\n  /**\n   * Name of the theme (the @Input() theme property of NgeMarkdownComponent)\n   */\n  name: string\n\n  /**\n   * Style URL for the theme\n   */\n  styleUrl: string\n}\n\nexport const NGE_MARKDOWN_CONFIG = new InjectionToken<NgeMarkdownConfig>('NGE_MARKDOWN_CONFIG')\n\nexport const NGE_MARKDOWN_THEMES = new InjectionToken<NgeMarkdownTheme>('NGE_MARKDOWN_THEMES')\n\nexport const NgeMarkdownConfigProvider = (config: NgeMarkdownConfig | (() => NgeMarkdownConfig)): Provider =>\n  typeof config === 'function'\n    ? {\n        provide: NGE_MARKDOWN_CONFIG,\n\n        useFactory: config,\n      }\n    : {\n        provide: NGE_MARKDOWN_CONFIG,\n\n        useValue: config,\n      }\n\n//  darkThemeClassName: 'dark-theme',\n\nexport const NgeMarkdownThemeProvider = (...themes: NgeMarkdownTheme[]): Provider[] =>\n  themes.map((theme) => ({\n    provide: NGE_MARKDOWN_THEMES,\n    useValue: theme,\n    multi: true,\n  }))\n","import { Inject, Injectable, Optional } from '@angular/core'\nimport { MarkedOptions, marked } from 'marked'\nimport { NgeMarkdownContribution } from './nge-markdown-contribution'\nimport { NgeMarkdownConfig, NGE_MARKDOWN_CONFIG } from './nge-markdown-config'\nimport { NgeMarkdownTransformer } from './nge-markdown-transformer'\nimport { ResourceLoaderService } from '@cisstech/nge/services'\nimport { lastValueFrom } from 'rxjs'\n\nconst WINDOW = window as any\n\n/**\n * Markdown compiler service.\n */\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgeMarkdownService {\n  constructor(\n    @Optional()\n    @Inject(NGE_MARKDOWN_CONFIG)\n    readonly config: NgeMarkdownConfig,\n    private readonly resourceLoader: ResourceLoaderService\n  ) {\n    this.config = config || {}\n  }\n\n  /**\n   * Compiles a markdown string to an html string.\n   * @param options compilation options.\n   * @returns A promise that resolve with the AST of the compiled markdown\n   * (with the modifications of the contributions).\n   */\n  async compile(options: NgeMarkdownCompileOptions) {\n    let markdown = this.trimIndent(options.markdown)\n    if (options.isHtmlString) {\n      markdown = this.decodeHtml(markdown)\n    }\n\n    const transformer = await this.createTransformer(options)\n    const renderer = this.renderer(transformer)\n    const tokenizer = this.tokenizer(transformer)\n\n    const markedOptions: MarkedOptions = {\n      gfm: true,\n      ...this.config,\n      renderer,\n      tokenizer,\n    }\n\n    markdown = transformer.transformMarkdown(markdown)\n\n    const tokens = transformer.transformAst(marked.lexer(markdown, markedOptions))\n\n    options.target.innerHTML = marked.parser(tokens, markedOptions)\n\n    transformer.transformHTML(options.target)\n\n    return tokens\n  }\n\n  private async createTransformer(options: NgeMarkdownCompileOptions) {\n    const contributions = [...(options.contributions || [])]\n    const transformer = new NgeMarkdownTransformer(this.config)\n    const dependencies: any[] = []\n    for (const contrib of contributions) {\n      if (contrib.dependencies) {\n        dependencies.push(...contrib.dependencies())\n      }\n      contrib.contribute(transformer)\n    }\n\n    // Try to fix the issues described here by loading monaco editor\n    // after all the other scripts.\n    // https://stackoverflow.com/a/33635881\n    // https://github.com/microsoft/monaco-editor/issues/662\n    // https://github.com/microsoft/monaco-editor/issues/1249\n    const define = WINDOW.define\n    WINDOW.define = undefined\n    await lastValueFrom(this.resourceLoader.loadAllSync(dependencies))\n    WINDOW.define = define\n    return transformer\n  }\n\n  private renderer(transformer: NgeMarkdownTransformer) {\n    const renderer = transformer.transformRenderer(this.config?.renderer || new marked.Renderer())\n    return renderer\n  }\n\n  private tokenizer(transformer: NgeMarkdownTransformer) {\n    return transformer.transformTokenizer(this.config?.tokenizer || new marked.Tokenizer())\n  }\n\n  private decodeHtml(html: string): string {\n    const textarea = document.createElement('textarea')\n    textarea.innerHTML = html\n    return textarea.value\n  }\n\n  private trimIndent(markdown: string): string {\n    if (!markdown) {\n      return ''\n    }\n\n    let indentStart: number\n    return markdown\n      .split('\\n')\n      .map((line) => {\n        let lineIdentStart = indentStart\n        if (line.length > 0) {\n          lineIdentStart = isNaN(lineIdentStart) ? line.search(/\\S|$/) : Math.min(line.search(/\\S|$/), lineIdentStart)\n        }\n        if (isNaN(indentStart)) {\n          indentStart = lineIdentStart\n        }\n        return !!lineIdentStart ? line.substring(lineIdentStart) : line\n      })\n      .join('\\n')\n  }\n}\n\n/**\n * Parameters of NgeMarkdownService `compile` method.\n */\ninterface NgeMarkdownCompileOptions {\n  /** Markdown string to compile. */\n  markdown: string\n  /** HTMLElement on which to render the compiled markdown.  */\n  target: HTMLElement\n  /** Is the markdown contains html code? */\n  isHtmlString?: boolean\n  /** List of contribution to use during the compilation. */\n  contributions?: NgeMarkdownContribution[]\n}\n","import { HttpClient } from '@angular/common/http'\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  inject,\n} from '@angular/core'\nimport { ResourceLoaderService } from '@cisstech/nge/services'\nimport type { TokensList } from 'marked'\nimport { firstValueFrom } from 'rxjs'\nimport { NGE_MARKDOWN_THEMES, NgeMarkdownTheme } from './nge-markdown-config'\nimport { NGE_MARKDOWN_CONTRIBUTION, NgeMarkdownContribution } from './nge-markdown-contribution'\nimport { NgeMarkdownService } from './nge-markdown.service'\n\n@Component({\n  selector: 'nge-markdown, [nge-markdown]',\n  templateUrl: 'nge-markdown.component.html',\n  styleUrls: ['nge-markdown.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class NgeMarkdownComponent implements OnInit, OnChanges, AfterViewInit {\n  private readonly el: ElementRef<HTMLElement> = inject(ElementRef)\n  private readonly http = inject(HttpClient, { optional: true })\n  private readonly markdownService = inject(NgeMarkdownService)\n  private readonly resourceLoader = inject(ResourceLoaderService)\n  private readonly changeDetectorRef = inject(ChangeDetectorRef)\n  private readonly themes = inject(NGE_MARKDOWN_THEMES, { optional: true }) as unknown as NgeMarkdownTheme[]\n  private readonly contributions = inject(NGE_MARKDOWN_CONTRIBUTION, {\n    optional: true,\n  }) as unknown as NgeMarkdownContribution[]\n\n  private isDark = false\n\n  /** Link to a markdown file to render. */\n  @Input() file?: string\n\n  /** Markdown string to render. */\n  @Input() data?: string\n\n  /** Theme to apply to the markdown content. */\n  @Input() theme?: string | null = 'github'\n\n  @HostBinding('class')\n  get klass() {\n    if (!this.theme) return ''\n    const classeNames = [`nge-markdown-theme--${this.theme}`]\n    if (this.isDark) {\n      classeNames.push(`nge-markdown-theme--${this.theme}--dark`)\n    }\n    return classeNames.join(' ')\n  }\n\n  /**\n   * An event that emit after each rendering pass\n   * with the list of tokens parsed from the input markdown.\n   */\n  @Output() render = new EventEmitter<TokensList>()\n\n  constructor() {\n    this.themes = this.themes || []\n  }\n\n  ngOnInit(): void {\n    this.el.nativeElement.style.opacity = '0'\n  }\n\n  async ngOnChanges(): Promise<void> {\n    await this.checkTheme()\n    this.file ? await this.renderFromFile(this.file) : await this.renderFromString(this.data || '')\n    this.el.nativeElement.style.opacity = '1'\n  }\n\n  async ngAfterViewInit(): Promise<void> {\n    await this.checkTheme()\n    if (!this.file && !this.data) {\n      await this.renderFromString(this.el.nativeElement.innerHTML, true)\n    }\n    this.el.nativeElement.style.opacity = '1'\n  }\n\n  private async renderFromFile(file: string): Promise<void> {\n    if (!this.http) {\n      throw new Error(\n        '[nge-markdown] When using the `file` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information'\n      )\n    }\n    const markdown = await firstValueFrom(this.http.get(file, { responseType: 'text' }))\n    await this.renderFromString(markdown)\n  }\n\n  private async renderFromString(markdown: string, isHtmlString = false) {\n    const tokens = await this.markdownService.compile({\n      target: this.el.nativeElement,\n      markdown,\n      isHtmlString,\n      contributions: this.contributions,\n    })\n    this.render.emit(tokens)\n    this.changeDetectorRef.markForCheck()\n  }\n\n  private async checkTheme(): Promise<void> {\n    if (this.theme) {\n      const themeInfo = this.themes?.find((theme) => theme.name === this.theme)\n      if (themeInfo) {\n        await firstValueFrom(this.resourceLoader.loadAllSync([['style', themeInfo.styleUrl]])).catch()\n      }\n    }\n\n    const { darkThemeClassName } = this.markdownService.config\n    if (darkThemeClassName) {\n      // TODO: support angular universal\n      this.isDark =\n        document.querySelector(darkThemeClassName.startsWith('.') ? darkThemeClassName : `.${darkThemeClassName}`) !=\n        null\n    }\n  }\n}\n","<ng-content></ng-content>\n","import { NgModule } from '@angular/core'\nimport { NgeMarkdownComponent } from './nge-markdown.component'\nimport { RouterModule } from '@angular/router'\n\n@NgModule({\n  imports: [RouterModule],\n  declarations: [NgeMarkdownComponent],\n  exports: [NgeMarkdownComponent],\n})\nexport class NgeMarkdownModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}