{"version":3,"file":"mathjax-angular.mjs","sources":["../../../projects/mathjax-lib/src/models.ts","../../../projects/mathjax-lib/src/utils.ts","../../../projects/mathjax-lib/src/directive/mathjax.directive.ts","../../../projects/mathjax-lib/src/directive/mathjax.module.ts","../../../projects/mathjax-lib/src/directive/index.ts","../../../projects/mathjax-lib/src/public-api.ts","../../../projects/mathjax-lib/src/mathjax-angular.ts"],"sourcesContent":["/**\n * more complex matjax content wich suppor latex and mathml seperately\n * will be considered for future development\n */\nexport interface MathjaxContent {\n  latex?: string;\n  mathml?: string;\n}\n/**\n * will help to check if expression is valid majax or not\n */\nexport const isMathjaxRegExp = /(?:\\$|\\\\\\(|\\\\\\[|\\\\begin\\{.*?})/;\n//export const isMathJax = /(?:(?:^|[-+_*/])(?:\\s*-?\\d+(\\.\\d+)?(?:[eE][+-]?\\d+)?\\s*))+$/;\n//\nexport const mathjax_url =\n  'https://cdn.jsdelivr.net/npm/mathjax@3.2.2/es5/startup.js';\n\n/**\n * config - http://docs.mathjax.org/en/latest/web/configuration.html#configuring-and-loading-mathjax\n */\nexport const MathjaxDefaultConfig = {\n  loader: {\n    load: ['output/svg', '[tex]/require', '[tex]/ams'],\n  },\n  tex: {\n    inlineMath: [['$', '$']],\n    //displayMath: [['$$', '$$']],\n    packages: ['base', 'require', 'ams'],\n  },\n  svg: { fontCache: 'global' },\n};\n/**\n * config - http://docs.mathjax.org/en/latest/web/configuration.html#configuring-and-loading-mathjax\n * src - cdn url to js\n */\nexport class RootMathjaxConfig {\n  config?: { [name: string]: any };\n  src?: string;\n}\n","//\n\nimport { isMathjaxRegExp, MathjaxContent } from './models';\n\n//\nexport const isMathjax = (expression: string): boolean =>\n  !!expression?.match(isMathjaxRegExp);\n\n//\n/**\n * find and return mathjax string from input\n * @param expressions\n * @returns mathjax string\n */\nexport const getMathjaxContent = (\n  expressions: MathjaxContent | string\n): string => {\n  if (!expressions) return '';\n  else if ('string' === typeof expressions) return expressions as string;\n  else return expressions.latex ?? expressions.mathml ?? '';\n};\n/**\n * used to fix few issues with mathjax string in angular\n * @param  {string} jax mathjax string\n * @returns {string} fixed string\n */\nexport const fixMathjaxBugs = (jax: string): string => {\n  return (\n    jax\n      //line break error\n      .replace(/<br \\/>/gi, '<br/> ')\n      //automatic breakline\n      .replace(/[$]([\\s\\S]+?)[$]/gi, (m, p: string, o, s) => {\n        //return /s/gi.test(p)\n        return p.includes('\\\\\\\\') && !p.includes('\\\\begin')\n          ? `$\\\\begin{align*}${p}\\\\end{align*}$`\n          : `$${p}$`;\n      })\n  );\n};\n","import {\n  Directive,\n  ElementRef,\n  Input,\n  OnChanges,\n  SimpleChanges,\n} from '@angular/core';\nimport { fixMathjaxBugs, getMathjaxContent, isMathjax } from '../utils';\nimport { MathjaxContent } from '../models';\n\n@Directive({\n    selector: 'mathjax,[mathjax]',\n    standalone: false\n})\nexport class MathjaxDirective implements OnChanges {\n  //\n  private mathJaxExpressions?: MathjaxContent | string;\n  //\n  private readonly element: HTMLElement;\n  //\n  @Input('mathjax')\n  set mathjax(val: MathjaxContent | string) {\n    this.mathJaxExpressions = val;\n  }\n  //\n  constructor(private el: ElementRef) {\n    //\n    this.element = el.nativeElement;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const expressions = changes.mathjax;\n    if (\n      !expressions ||\n      expressions.currentValue === expressions.previousValue\n    ) {\n      return;\n    }\n    //\n    const value = getMathjaxContent(expressions.currentValue) + '';\n    //\n    if (isMathjax(value)) {\n      const filteredVal = fixMathjaxBugs(value);\n      this.typeset(() => {\n        this.element.innerHTML = `<div class='jax-process'>${filteredVal}</div>`;\n      });\n    } else {\n      this.element.innerHTML = value;\n    }\n  }\n\n  private typeset(code: () => void): Promise<any> {\n    if (!MathJax?.isReady) {\n      this.element.innerHTML = `<div></div>`;\n      return MathJax.promise.then(() => this.typeset(code));\n    } else {\n      MathJax.startup.promise = MathJax.startup.promise\n        .then(() => MathJax.typesetPromise(code()))\n        .catch((err: any) => console.log('Typeset failed: ' + err.message));\n      return MathJax.startup.promise;\n    }\n  }\n}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MathjaxDirective } from './mathjax.directive';\nimport {\n  MathjaxDefaultConfig,\n  mathjax_url,\n  RootMathjaxConfig,\n} from '../models';\n\n@NgModule({\n  declarations: [MathjaxDirective],\n  exports: [MathjaxDirective],\n})\nexport class MathjaxModule {\n  constructor(private moduleConfig: RootMathjaxConfig) {\n    //\n    this.addConfigToDocument();\n    //\n    this.addMatjaxToDocument();\n  }\n\n  private addConfigToDocument() {\n    const tagId = 'mathjax-config-script';\n    const isScript = document.getElementById(tagId);\n    if (isScript) return;\n    //\n    const providConfig = {\n      ...MathjaxDefaultConfig,\n      ...(this.moduleConfig?.config ?? {}),\n    };\n    const script = document.createElement('script') as HTMLScriptElement;\n    script.id = tagId;\n    script.type = 'text/javascript';\n    script.text = `\n      MathJax = ${JSON.stringify(providConfig)};\n      MathJax.isReady = false;\n      MathJax.promise = new Promise(function (resolve, reject) {\n        MathJax.startup = {\n            ready() {\n              MathJax.isReady = true;\n              MathJax.startup.defaultReady();\n              MathJax.startup.promise.then(() => resolve());\n            }\n        };\n      });\n    `;\n    document.getElementsByTagName('head')[0].appendChild(script);\n  }\n\n  private addMatjaxToDocument() {\n    const tagId = 'mathjax-script';\n    const isScript = document.getElementById(tagId);\n    if (isScript) return;\n    //\n    const script = document.createElement('script') as HTMLScriptElement;\n    script.id = tagId;\n    script.type = 'text/javascript';\n    script.src = this.moduleConfig?.src ?? mathjax_url;\n    script.async = true;\n    document.getElementsByTagName('head')[0].appendChild(script);\n  }\n\n  public static forRoot(\n    config?: RootMathjaxConfig\n  ): ModuleWithProviders<MathjaxModule> {\n    return {\n      ngModule: MathjaxModule,\n      providers: [{ provide: RootMathjaxConfig, useValue: config ?? {} }],\n    };\n  }\n  public static forChild(): ModuleWithProviders<MathjaxModule> {\n    return {\n      ngModule: MathjaxModule,\n    };\n  }\n}\n","//\nimport { MathjaxModule } from './mathjax.module';\n//\nexport * from './mathjax.directive';\nexport * from './mathjax.module';\n//\nexport default MathjaxModule;\n","/*\n * Public API Surface of mathjax-lib\n */\nexport * as MathJaxUtils from './utils';\nexport * from './directive';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.RootMathjaxConfig"],"mappings":"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"}