{"version":3,"file":"ngx-codejar.mjs","sources":["../../../../libs/ngx-codejar/src/lib/ngx-code-jar.component.ts","../../../../libs/ngx-codejar/src/index.ts","../../../../libs/ngx-codejar/src/ngx-codejar.ts"],"sourcesContent":["import {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  Renderer2,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport {CodeJar, Position} from 'codejar';\nimport {CodeJarContainer, CodeJarOptions} from './codejar.typings';\nimport {withLineNumbers} from 'codejar-linenumbers';\nimport {CommonModule} from '@angular/common';\n\n@Component({\n  standalone: true,\n  imports: [CommonModule],\n  selector: 'ngx-codejar',\n  template: `\n    <div class=\"ngx-codejar-wrap ngx-codejar-flex\" #wrapper>\n        <pre #editor class=\"editor\" [ngClass]=\"{\n                'hljs': highlighter === 'hljs',\n                'language-typescript': highlighter === 'prism',\n                'ngx-codejar-editor': highlighter !== undefined\n             }\" style=\"padding-bottom:0px;\">\n        </pre>\n    </div>`,\n  styles: [`\n    :host {\n      display: block;\n    }\n\n    .ngx-codejar-editor {\n      border-radius: 6px;\n      box-shadow: 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12), 0 3px 1px -2px rgba(0, 0, 0, 0.2);\n      font-family: \"Source Code Pro\", monospace;\n      font-size: 14px;\n      font-weight: 400;\n      letter-spacing: normal;\n      line-height: 20px;\n      padding: 10px;\n      tab-size: 4;\n      margin: 0;\n      height: 100%;\n    }\n\n    .ngx-codejar-wrap {\n      height: 100%;\n    }\n\n    .ngx-codejar-flex {\n      display: flex !important;\n      flex-direction: column !important;\n      flex: auto !important;\n      height: 100% !important;\n    }\n  `]\n})\nexport class NgxCodeJarComponent implements AfterViewInit, OnChanges, OnDestroy {\n  constructor(private el: ElementRef, private renderer: Renderer2) {\n    this.update = new EventEmitter<string>();\n  }\n\n  @ViewChild('editor') editor?: ElementRef;\n  @ViewChild('wrapper') wrapper?: ElementRef;\n\n  private codeJar?: CodeJar;\n  private _code = '';\n\n  public height?: number = undefined;\n\n  @Input() set code(value: string) {\n    if (this._code !== value) {\n      this._code = value;\n      this.updateCode(value);\n    }\n  }\n\n  @Input() showLineNumbers = false;\n  @Output() codeChange = new EventEmitter<string>();\n\n  @Input() highlighter: 'prism' | 'hljs' = 'hljs';\n  @Input() options: CodeJarOptions = {};\n  @Input() readonly = false;\n\n  // Events\n  /**\n   * is triggered after highlighting\n   */\n  @Output() update: EventEmitter<string>;\n  @Input() highlightMethod: (editor: CodeJarContainer, pos?: Position) => void = () => {\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes['options']?.currentValue && changes['options'].currentValue !== changes['options']) {\n      if (this.codeJar) {\n        this.codeJar.updateOptions(changes['options']?.currentValue);\n        this.applyAdditionalOptions();\n        this.checkReadonly();\n      }\n    }\n\n    if (changes['readonly']) {\n      this.checkReadonly();\n    }\n  }\n\n  private checkReadonly() {\n    if (this.editor?.nativeElement) {\n      if (this.readonly) {\n        this.renderer.setAttribute(this.editor?.nativeElement, 'contenteditable', 'false');\n      } else {\n        if(/Firefox/.test(navigator.userAgent)){\n          this.renderer.setAttribute(this.editor?.nativeElement, 'contenteditable', 'true');\n        } else {\n          this.renderer.setAttribute(this.editor?.nativeElement, 'contenteditable', 'plaintext-only');\n        }\n      }\n    }\n  }\n\n  ngAfterViewInit() {\n    this.init();\n  }\n\n  private init() {\n    if (this.editor !== undefined) {\n      const highlightMethod = (this.showLineNumbers) ? withLineNumbers(this.highlightMethod) : this.highlightMethod;\n\n      this.codeJar = CodeJar(this.editor.nativeElement, highlightMethod, this.options);\n      this.applyCustomizations();\n      this.applyAdditionalOptions();\n\n      this.codeJar.onUpdate((newCode: string) => {\n        this._code = newCode;\n        this.codeChange.emit(newCode);\n        this.update.emit(newCode);\n      });\n      this.updateCode(this._code);\n      this.update.emit(this._code);\n      this.editor.nativeElement.addEventListener('keydown', this.onKeyDown);\n      this.checkReadonly();\n    }\n  }\n\n  applyAdditionalOptions() {\n    if (this.editor) {\n      if (this.options.tabSize) {\n        this.renderer.setStyle(this.editor.nativeElement, 'tab-size', this.options.tabSize);\n      }\n    }\n  }\n\n  /***\n   * updates the code and preserves the position\n   * @param newCode new code\n   */\n  public updateCode(newCode: string) {\n    if (this.codeJar) {\n      this.codeJar.updateCode(newCode);\n    }\n  }\n\n  /***\n   * updates the options.\n   * @param options new options\n   */\n  public updateOptions(options: CodeJarOptions) {\n    if (this.codeJar) {\n      this.options = options;\n      this.codeJar.updateOptions(options);\n    }\n  }\n\n  /***\n   * saves current cursor position.\n   */\n  public save(): Position | undefined {\n    if (this.codeJar) {\n      return this.codeJar.save();\n    }\n    return undefined;\n  }\n\n  /***\n   * restore cursor position.\n   * @param pos cursor position\n   */\n  public restore(pos: Position): void {\n    if (this.codeJar) {\n      this.codeJar.restore(pos);\n    }\n  }\n\n  /***\n   * saves current editor state to history.\n   */\n  public recordHistory(pos: Position): void {\n    if (this.codeJar) {\n      this.codeJar.recordHistory();\n    }\n  }\n\n  /***\n   * removes all event listeners. It's automatically called when component is destroyed.\n   */\n  public destroy(): void {\n    if (this.codeJar) {\n      this.codeJar.destroy();\n    }\n  }\n\n  ngOnDestroy() {\n    this.destroy();\n  }\n\n  private applyCustomizations() {\n    if (this.wrapper && this.editor && this.el?.nativeElement) {\n      const codejarWrap = (this.wrapper.nativeElement as HTMLElement).firstElementChild;\n      const lineNumbers = this.el.nativeElement.getElementsByClassName('codejar-linenumbers')[0];\n\n      if (codejarWrap) {\n        this.renderer.setStyle(codejarWrap, 'height', '100%');\n      }\n\n      if (lineNumbers) {\n        if (this.el.nativeElement.style?.height) {\n          this.renderer.setStyle(lineNumbers, 'height', '100%');\n        }\n      }\n    }\n  }\n\n  onKeyDown = (event: KeyboardEvent) => {\n    if (this.readonly) {\n      event.stopPropagation();\n      event.preventDefault();\n    }\n  }\n}\n","/*\n * Public API Surface of ngx-codejar\n */\n\nexport * from './lib/ngx-code-jar.component';\nexport * from './lib/codejar.typings';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}