{"version":3,"file":"ngl-markdown.mjs","sources":["../../../lib/src/katex-options.ts","../../../lib/src/language.pipe.ts","../../../lib/src/prism-plugin.ts","../../../lib/src/marked-options.ts","../../../lib/src/markdown.service.ts","../../../lib/src/markdown.component.ts","../../../lib/src/markdown.pipe.ts","../../../lib/src/markdown.module.ts","../../../lib/ngl-markdown.ts"],"sourcesContent":["/* eslint-disable */\nexport class KatexOptions {\n    /**\n     * If `true`, math will be rendered in display mode\n     * (math in display style and center math on page)\n     *\n     * If `false`, math will be rendered in inline mode\n     * @default false\n     */\n    displayMode?: boolean;\n    /**\n     * If `true`, KaTeX will throw a `ParseError` when\n     * it encounters an unsupported command or invalid LaTex\n     *\n     * If `false`, KaTeX will render unsupported commands as\n     * text, and render invalid LaTeX as its source code with\n     * hover text giving the error, in color given by errorColor\n     * @default true\n     */\n    throwOnError?: boolean;\n    /**\n     * A Color string given in format `#XXX` or `#XXXXXX`\n     */\n    errorColor?: string;\n    /**\n     * A collection of custom macros.\n     *\n     * See `src/macros.js` for its usage\n     */\n    macros?: any;\n    /**\n     * If `true`, `\\color` will work like LaTeX's `\\textcolor`\n     * and takes 2 arguments\n     *\n     * If `false`, `\\color` will work like LaTeX's `\\color`\n     * and takes 1 argument\n     *\n     * In both cases, `\\textcolor` works as in LaTeX\n     *\n     * @default false\n     */\n    colorIsTextColor?: boolean;\n    /**\n     * All user-specified sizes will be caped to `maxSize` ems\n     *\n     * If set to Infinity, users can make elements and space\n     * arbitrarily large\n     *\n     * @default Infinity\n     */\n    maxSize?: number;\n    /**\n     * Limit the number of macro expansions to specified number\n     *\n     * If set to `Infinity`, marco expander will try to fully expand\n     * as in LaTex\n     *\n     * @default 1000\n     */\n    maxExpand?: number;\n    /**\n     * Allowed protocols in `\\href`\n     *\n     * Use `_relative` to allow relative urls\n     *\n     * Use `*` to allow all protocols\n     */\n    allowedProtocols?: string[];\n    /**\n     * If `false` or `\"ignore\"`, allow features that make\n     * writing in LaTex convenient but not supported by LaTex\n     *\n     * If `true` or `\"error\"`, throw an error for such transgressions\n     *\n     * If `\"warn\"`, warn about behavior via `console.warn`\n     *\n     * @default \"warn\"\n     */\n    strict?: boolean | string | Function;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n  name: 'language',\n})\nexport class LanguagePipe implements PipeTransform {\n\n  transform(value: string, language: string): string {\n    if (value == null) {\n      value = '';\n    }\n    if (language == null) {\n      language = '';\n    }\n    if (typeof value !== 'string') {\n      console.error(`LanguagePipe has been invoked with an invalid value type [${typeof value}]`);\n      return value;\n    }\n    if (typeof language !== 'string') {\n      console.error(`LanguagePipe has been invoked with an invalid parameter [${typeof language}]`);\n      return value;\n    }\n    return '```' + language + '\\n' +  value + '\\n```';\n  }\n}\n","export enum PrismPlugin {\n  CommandLine = 'command-line',\n  LineHighlight = 'line-highlight',\n  LineNumbers = 'line-numbers',\n}\n","/* eslint-disable */\nimport { MarkedRenderer } from './marked-renderer';\n\nexport class MarkedOptions {\n  /**\n   * A prefix URL for any relative link.\n   */\n  baseUrl?: string;\n\n  /**\n   * Enable GFM line breaks. This option requires the gfm option to be true.\n   */\n  breaks?: boolean;\n\n  /**\n   * Enable GitHub flavored markdown.\n   */\n  gfm?: boolean;\n\n  /**\n   * Include an id attribute when emitting headings.\n   */\n  headerIds?: boolean;\n\n  /**\n   * Set the prefix for header tag ids.\n   */\n  headerPrefix?: string;\n\n  /**\n   * Set the prefix for code block classes.\n   */\n  langPrefix?: string;\n\n  /**\n   * Mangle autolinks (<email@domain.com>).\n   */\n  mangle?: boolean;\n\n  /**\n   * Conform to obscure parts of markdown.pl as much as possible. Don't fix any of the original markdown bugs or poor behavior.\n   */\n  pedantic?: boolean;\n\n  /**\n   * Type: object Default: new Renderer()\n   *\n   * An object containing functions to render tokens to HTML.\n   */\n  renderer?: MarkedRenderer;\n\n  /**\n   * Shows an HTML error message when rendering fails.\n   */\n  silent?: boolean;\n\n  /**\n   * Use smarter list behavior than the original markdown. May eventually be default with the old behavior moved into pedantic.\n   */\n  smartLists?: boolean;\n\n  /**\n   * Use \"smart\" typograhic punctuation for things like quotes and dashes.\n   */\n  smartypants?: boolean;\n\n  /**\n   * Generate closing slash for self-closing tags (<br/> instead of <br>)\n   */\n  xhtml?: boolean;\n\n  /**\n   * A function to highlight code blocks. The function takes three arguments: code, lang, and callback.\n   */\n  highlight?(code: string, lang: string, callback?: (error: any | undefined, code: string) => void): string;\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable, InjectionToken, Optional, PLATFORM_ID, SecurityContext } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { marked } from 'marked';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nimport { KatexOptions } from './katex-options';\nimport { MarkedOptions } from './marked-options';\nimport { MarkedRenderer } from './marked-renderer';\n\ndeclare let joypixels: {\n  shortnameToUnicode(input: string): string;\n};\n\ndeclare let katex: {\n  renderToString(tex: string, options?: KatexOptions): string;\n};\n\ndeclare let Prism: {\n  highlightAllUnder: (element: Element | Document) => void;\n};\n\n/* eslint-disable max-len */\nexport const errorJoyPixelsNotLoaded = '[ngx-markdown] When using the `emoji` attribute you *have to* include Emoji-Toolkit files to `angular.json` or use imports. See README for more information';\nexport const errorKatexNotLoaded = '[ngx-markdown] When using the `katex` attribute you *have to* include KaTeX files to `angular.json` or use imports. See README for more information';\nexport const errorSrcWithoutHttpClient = '[ngx-markdown] When using the `src` attribute you *have to* pass the `HttpClient` as a parameter of the `forRoot` method. See README for more information';\n/* eslint-enable max-len */\n\nexport const SECURITY_CONTEXT = new InjectionToken<SecurityContext>('SECURITY_CONTEXT');\n\n@Injectable()\nexport class MarkdownService {\n\n  private readonly initialMarkedOptions: MarkedOptions = {\n    renderer: new MarkedRenderer(),\n  };\n\n  private _options: MarkedOptions | undefined;\n\n  get options(): MarkedOptions { return this._options!; }\n  set options(value: MarkedOptions) {\n    this._options = { ...this.initialMarkedOptions, ...value };\n  }\n\n  get renderer(): MarkedRenderer { return this.options.renderer!; }\n  set renderer(value: MarkedRenderer) {\n    this.options.renderer = value;\n  }\n\n  constructor(\n    @Inject(PLATFORM_ID) private platform: Object,\n    @Inject(SECURITY_CONTEXT) private securityContext: SecurityContext,\n    @Optional() private http: HttpClient,\n    @Optional() options: MarkedOptions,\n    private sanitizer: DomSanitizer,\n  ) {\n    this.options = options;\n  }\n\n  compile(markdown: string, decodeHtml = false, emojify = false,  markedOptions = this.options): string {\n    const trimmed = this.trimIndentation(markdown);\n    const decoded = decodeHtml ? this.decodeHtml(trimmed) : trimmed;\n    const emojified = emojify ? this.renderEmoji(decoded) : decoded;\n    const compiled = marked(emojified, markedOptions);\n    return this.sanitizer.sanitize(this.securityContext, compiled) || '';\n  }\n\n  getSource(src: string): Observable<string> {\n    if (!this.http) {\n      throw new Error(errorSrcWithoutHttpClient);\n    }\n    return this.http\n      .get(src, { responseType: 'text' })\n      .pipe(map(markdown => this.handleExtension(src, markdown)));\n  }\n\n  highlight(element?: Element | Document): void {\n    if (!isPlatformBrowser(this.platform)) {\n      return;\n    }\n    if (typeof Prism !== 'undefined') {\n      if (!element) {\n        element = document;\n      }\n      const noLanguageElements = element.querySelectorAll('pre code:not([class*=\"language-\"])');\n      Array.prototype.forEach.call(noLanguageElements, (x: Element) => x.classList.add('language-none'));\n      Prism.highlightAllUnder(element);\n    }\n  }\n\n  renderKatex(html: string, options?: KatexOptions): string {\n    if (!isPlatformBrowser(this.platform)) {\n      return html;\n    }\n    if (typeof katex === 'undefined' || typeof katex.renderToString === 'undefined') {\n      throw new Error(errorKatexNotLoaded);\n    }\n    return html.replace(/\\$([^\\s][^$]*?[^\\s])\\$/gm, (_, tex) => katex.renderToString(tex, options));\n  }\n\n  private decodeHtml(html: string): string {\n    if (!isPlatformBrowser(this.platform)) {\n      return html;\n    }\n    const textarea = document.createElement('textarea');\n    textarea.innerHTML = html;\n    return textarea.value;\n  }\n\n  private handleExtension(src: string, markdown: string): string {\n    const extension = src\n      ? src.split('?')[0].split('.').splice(-1).join()\n      : '';\n    return extension !== 'md'\n      ? '```' + extension + '\\n' + markdown + '\\n```'\n      : markdown;\n  }\n\n  private renderEmoji(html: string): string {\n    if (!isPlatformBrowser(this.platform)) {\n      return html;\n    }\n    if (typeof joypixels === 'undefined' || typeof joypixels.shortnameToUnicode === 'undefined') {\n      throw new Error(errorJoyPixelsNotLoaded);\n    }\n    return joypixels.shortnameToUnicode(html);\n  }\n\n  private trimIndentation(markdown: string): string {\n    if (!markdown) {\n      return '';\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)\n            ? line.search(/\\S|$/)\n            : Math.min(line.search(/\\S|$/), lineIdentStart);\n        }\n        if (isNaN(indentStart)) {\n          indentStart = lineIdentStart;\n        }\n        return lineIdentStart\n          ? line.substring(lineIdentStart)\n          : line;\n      }).join('\\n');\n  }\n}\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, Output } from '@angular/core';\n\nimport { KatexOptions } from './katex-options';\nimport { MarkdownService } from './markdown.service';\nimport { PrismPlugin } from './prism-plugin';\n\n@Component({\n  // eslint-disable-next-line @angular-eslint/component-selector\n  selector: 'markdown, [markdown]',\n  template: '<ng-content></ng-content>',\n})\nexport class MarkdownComponent implements OnChanges, AfterViewInit {\n\n  protected static ngAcceptInputType_emoji: boolean | '';\n  protected static ngAcceptInputType_katex: boolean | '';\n  protected static ngAcceptInputType_lineHighlight: boolean | '';\n  protected static ngAcceptInputType_lineNumbers: boolean | '';\n  protected static ngAcceptInputType_commandLine: boolean | '';\n\n  @Input() data: string | undefined;\n  @Input() src: string | undefined;\n\n  // Plugin - emoji\n  @Input()\n  get emoji(): boolean { return this._emoji; }\n  set emoji(value: boolean) { this._emoji = this.coerceBooleanProperty(value); }\n\n  // Plugin - katex\n  @Input()\n  get katex(): boolean { return this._katex; }\n  set katex(value: boolean) { this._katex = this.coerceBooleanProperty(value); }\n  @Input() katexOptions: KatexOptions | undefined;\n\n  // Plugin - lineHighlight\n  @Input()\n  get lineHighlight(): boolean { return this._lineHighlight; }\n  set lineHighlight(value: boolean) { this._lineHighlight = this.coerceBooleanProperty(value); }\n  @Input() line: string | string[] | undefined;\n  @Input() lineOffset: number | undefined;\n\n  // Plugin - lineNumbers\n  @Input()\n  get lineNumbers(): boolean { return this._lineNumbers; }\n  set lineNumbers(value: boolean) { this._lineNumbers = this.coerceBooleanProperty(value); }\n  @Input() start: number | undefined;\n\n  // Plugin - commandLine\n  @Input()\n  get commandLine(): boolean { return this._commandLine; }\n  set commandLine(value: boolean) { this._commandLine = this.coerceBooleanProperty(value); }\n  @Input() filterOutput: string | undefined;\n  @Input() host: string | undefined;\n  @Input() prompt: string | undefined;\n  @Input() output: string | undefined;\n  @Input() user: string | undefined;\n\n  // Event emitters\n  @Output() error = new EventEmitter<string>();\n  @Output() load = new EventEmitter<string>();\n  @Output() ready = new EventEmitter<void>();\n\n  private _commandLine = false;\n  private _emoji = false;\n  private _katex = false;\n  private _lineHighlight = false;\n  private _lineNumbers = false;\n\n  constructor(\n    public element: ElementRef<HTMLElement>,\n    public markdownService: MarkdownService,\n  ) { }\n\n  ngOnChanges(): void {\n    if (this.data != null) {\n      this.handleData();\n      return;\n    }\n    if (this.src != null) {\n      this.handleSrc();\n      return;\n    }\n  }\n\n  ngAfterViewInit(): void {\n    if (!this.data && !this.src) {\n      this.handleTransclusion();\n    }\n  }\n\n  render(markdown: string, decodeHtml = false): void {\n    let compiled = this.markdownService.compile(markdown, decodeHtml, this.emoji);\n    compiled = this.katex ? this.markdownService.renderKatex(compiled, this.katexOptions) : compiled;\n    this.element.nativeElement.innerHTML = compiled;\n    this.handlePlugins();\n    this.markdownService.highlight(this.element.nativeElement);\n    this.ready.emit();\n  }\n\n  private coerceBooleanProperty(value: boolean | ''): boolean {\n    return value != null && `${String(value)}` !== 'false';\n  }\n\n  private handleData(): void {\n    this.render(this.data!);\n  }\n\n  private handleSrc(): void {\n    this.markdownService\n      .getSource(this.src!)\n      .subscribe(\n        markdown => {\n          this.render(markdown);\n          this.load.emit(markdown);\n        },\n        error => this.error.emit(error),\n      );\n  }\n\n  private handleTransclusion(): void {\n    this.render(this.element.nativeElement.innerHTML, true);\n  }\n\n  private handlePlugins(): void {\n    if (this.commandLine) {\n      this.setPluginClass(this.element.nativeElement, PrismPlugin.CommandLine);\n      this.setPluginOptions(this.element.nativeElement, {\n        dataFilterOutput: this.filterOutput,\n        dataHost: this.host,\n        dataPrompt: this.prompt,\n        dataOutput: this.output,\n        dataUser: this.user,\n      });\n    }\n    if (this.lineHighlight) {\n      this.setPluginOptions(this.element.nativeElement, { dataLine: this.line, dataLineOffset: this.lineOffset });\n    }\n    if (this.lineNumbers) {\n      this.setPluginClass(this.element.nativeElement, PrismPlugin.LineNumbers);\n      this.setPluginOptions(this.element.nativeElement, { dataStart: this.start });\n    }\n  }\n\n  private setPluginClass(element: HTMLElement, plugin: string | string[]): void {\n    const preElements = element.querySelectorAll('pre');\n    for (let i = 0; i < preElements.length; i++) {\n      const classes = plugin instanceof Array ? plugin : [plugin];\n      preElements.item(i).classList.add(...classes);\n    }\n  }\n\n  private setPluginOptions(element: HTMLElement, options: { [key: string]: number | string | string[] | undefined }): void {\n    const preElements = element.querySelectorAll('pre');\n    for (let i = 0; i < preElements.length; i++) {\n      Object.keys(options).forEach(option => {\n        const attributeValue = options[option];\n        if (attributeValue) {\n          const attributeName = this.toLispCase(option);\n          preElements.item(i).setAttribute(attributeName, attributeValue.toString());\n        }\n      });\n    }\n  }\n\n  private toLispCase(value: string): string {\n    const upperChars = value.match(/([A-Z])/g);\n    if (!upperChars) {\n      return value;\n    }\n    let str = value.toString();\n    for (let i = 0, n = upperChars.length; i < n; i++) {\n      str = str.replace(new RegExp(upperChars[i]), '-' + upperChars[i].toLowerCase());\n    }\n    if (str.slice(0, 1) === '-') {\n      str = str.slice(1);\n    }\n    return str;\n  }\n}\n","import { ElementRef, NgZone, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { first } from 'rxjs/operators';\n\nimport { MarkdownService } from './markdown.service';\n\n@Pipe({\n  name: 'markdown',\n})\nexport class MarkdownPipe implements PipeTransform {\n\n  constructor(\n    private domSanitizer: DomSanitizer,\n    private elementRef: ElementRef<HTMLElement>,\n    private markdownService: MarkdownService,\n    private zone: NgZone,\n  ) { }\n\n  transform(value: string): SafeHtml {\n    if (value == null) {\n      return '';\n    }\n\n    if (typeof value !== 'string') {\n      console.error(`MarkdownPipe has been invoked with an invalid value type [${typeof value}]`);\n      return value;\n    }\n\n    const markdown = this.markdownService.compile(value);\n\n    this.zone.onStable\n      .pipe(first())\n      .subscribe(() => this.markdownService.highlight(this.elementRef.nativeElement));\n\n    return this.domSanitizer.bypassSecurityTrustHtml(markdown);\n  }\n}\n","import { ModuleWithProviders, NgModule, Provider, SecurityContext } from '@angular/core';\n\nimport { LanguagePipe } from './language.pipe';\nimport { MarkdownComponent } from './markdown.component';\nimport { MarkdownPipe } from './markdown.pipe';\nimport { MarkdownService, SECURITY_CONTEXT } from './markdown.service';\n\n// having a dependency on `HttpClientModule` within a library\n// breaks all the interceptors from the app consuming the library\n// here, we explicitely ask the user to pass a provider with\n// their own instance of `HttpClientModule`\nexport interface MarkdownModuleConfig {\n  loader?: Provider;\n  markedOptions?: Provider;\n  sanitize?: SecurityContext;\n}\n\nconst sharedDeclarations = [\n  LanguagePipe,\n  MarkdownComponent,\n  MarkdownPipe,\n];\n\n@NgModule({\n  exports: sharedDeclarations,\n  declarations: sharedDeclarations,\n})\nexport class MarkdownModule {\n  static forRoot(markdownModuleConfig?: MarkdownModuleConfig): ModuleWithProviders<MarkdownModule> {\n    return {\n      ngModule: MarkdownModule,\n      providers: [\n        MarkdownService,\n        markdownModuleConfig && markdownModuleConfig.loader || [],\n        markdownModuleConfig && markdownModuleConfig.markedOptions || [],\n        {\n          provide: SECURITY_CONTEXT,\n          useValue: markdownModuleConfig && markdownModuleConfig.sanitize != null\n            ? markdownModuleConfig.sanitize\n            : SecurityContext.HTML,\n        },\n      ],\n    };\n  }\n\n  static forChild(): ModuleWithProviders<MarkdownModule> {\n    return {\n      ngModule: MarkdownModule,\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["MarkedRenderer"],"mappings":"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"}