{"version":3,"file":"ngx-highlight-js.mjs","sources":["../../lib/src/highlight-js.config.ts","../../lib/src/highlight-js.directive.ts","../../lib/src/highlight-js.module.ts","../../lib/ngx-highlight-js.ts"],"sourcesContent":["import { EnvironmentProviders, InjectionToken, makeEnvironmentProviders, Provider } from '@angular/core';\nimport type { HLJSOptions } from 'highlight.js';\n\nexport interface HighlightJsConfig {\n  /**\n   * Specify rendering mode\n   * - `default` Will render each `<pre><code>`\n   * - `simple` Render all content according to `lang` language\n   */\n  mode?: 'default' | 'simple';\n  /**\n   * Uses language detection by default but you can specify the language\n   */\n  lang?: string;\n  /**\n   * Equar [configure(options)](https://highlightjs.readthedocs.io/en/latest/api.html#configure)\n   */\n  options?: Partial<HLJSOptions>;\n}\n\nexport const HIGHLIGHTJS_CONFIG = new InjectionToken<HighlightJsConfig>('HighlightJs-Config');\n\nexport function provideHighlightJsConfig(options: Partial<HighlightJsConfig>): EnvironmentProviders {\n  const provides: (Provider | EnvironmentProviders)[] = [\n    {\n      provide: HIGHLIGHTJS_CONFIG,\n      useValue: {\n        lang: 'html',\n        ...options,\n      } as HighlightJsConfig,\n    },\n  ];\n  return makeEnvironmentProviders(provides);\n}\n","import { Directive, ElementRef, OnDestroy, AfterViewInit, NgZone, input, model, inject } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { NgModel } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { HIGHLIGHTJS_CONFIG } from './highlight-js.config';\nimport type { HLJSApi, HLJSOptions } from 'highlight.js';\n\ndeclare const ngDevMode: boolean;\n\n@Directive({\n  selector: '[highlight-js]',\n  host: {\n    '[style.display]': `mode() === 'simple' ? 'none' : null`,\n  },\n  exportAs: 'highlightJs',\n})\nexport class HighlightJsDirective implements AfterViewInit, OnDestroy {\n  private cog = inject(HIGHLIGHTJS_CONFIG, { optional: true });\n  readonly options = input<Partial<HLJSOptions>>(this.cog?.options ?? {});\n  readonly lang = input<string>(this.cog?.lang ?? 'html');\n  readonly code = model<string>();\n  readonly mode = input<'default' | 'simple'>(this.cog?.mode ?? 'simple');\n\n  protected codeEl?: HTMLElement;\n  protected parentEl?: HTMLElement;\n  private modelValue$?: Subscription;\n  private observer?: MutationObserver;\n  private el = inject<ElementRef<HTMLElement>>(ElementRef);\n  private ngModel = inject<NgModel>(NgModel, { optional: true });\n  private doc = inject(DOCUMENT);\n  private ngZone = inject(NgZone);\n\n  private escapeHTML(str: string): string {\n    return (str || '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, '&apos;');\n  }\n\n  private init(): void {\n    this.ngZone.runOutsideAngular(() => {\n      this.destroy();\n      const el = this.el.nativeElement;\n      const code = this.code() ?? '' + el.innerHTML.trim();\n      const doc = this.doc as Document;\n      this.codeEl = doc.createElement(this.mode() === 'default' ? 'div' : 'pre') as HTMLElement;\n      if (this.codeEl == null) return;\n\n      const isSimple = this.mode() === 'simple';\n      if (isSimple) {\n        const lang = this.lang();\n        if (lang) {\n          this.codeEl.className = lang;\n        }\n        this.parentEl = el.parentNode as HTMLElement;\n        this.parentEl.insertBefore(this.codeEl, el.nextSibling);\n      } else {\n        this.parentEl = el;\n        this.parentEl.innerHTML = ``;\n        this.parentEl.appendChild(this.codeEl);\n      }\n      this.codeEl.innerHTML = code;\n      const hljs: HLJSApi = (doc.defaultView as any).hljs;\n      if (hljs == null) {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          console.warn(`Can't find hljs under window`);\n        }\n        return;\n      }\n\n      hljs.configure({ ...this.options() });\n\n      if (isSimple) {\n        hljs.highlightElement(this.codeEl);\n      } else {\n        this.codeEl.querySelectorAll<HTMLElement>('pre code').forEach((block) => {\n          hljs.highlightElement(block);\n        });\n      }\n    });\n  }\n\n  private destroy(): void {\n    if (this.codeEl && this.parentEl) {\n      this.parentEl.removeChild(this.codeEl);\n      this.codeEl = undefined;\n    }\n  }\n\n  ngAfterViewInit(): void {\n    this.init();\n    if (this.ngModel) {\n      this.modelValue$ = this.ngModel.valueChanges?.subscribe((res) => {\n        this.code.set(this.escapeHTML(res));\n        this.init();\n      });\n    } else {\n      this.initMutation();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy();\n    this.observer?.disconnect();\n    this.modelValue$?.unsubscribe();\n  }\n\n  private initMutation(): void {\n    if (typeof MutationObserver === 'undefined') {\n      return;\n    }\n    this.ngZone.runOutsideAngular(() => {\n      this.observer = new MutationObserver(this.init.bind(this));\n      this.observer.observe(this.el.nativeElement, {\n        characterData: true,\n        childList: true,\n        subtree: true,\n      });\n    });\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { HighlightJsDirective } from './highlight-js.directive';\n\nconst DIRECTIVES = [HighlightJsDirective];\n\n@NgModule({\n  imports: [FormsModule, ...DIRECTIVES],\n  exports: DIRECTIVES,\n})\nexport class HighlightJsModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}