@cisstech/nge
Version:
NG Essentials is a collection of libraries for Angular developers.
1 lines • 84.4 kB
Source Map (JSON)
{"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 /** <code></code> 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 '<': '<',\n '>': '>',\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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"}