{"version":3,"file":"kolkov-angular-editor.mjs","sources":["../../../projects/angular-editor/src/lib/angular-editor.service.ts","../../../projects/angular-editor/src/lib/config.ts","../../../projects/angular-editor/src/lib/utils.ts","../../../projects/angular-editor/src/lib/ae-select/ae-select.component.ts","../../../projects/angular-editor/src/lib/ae-select/ae-select.component.html","../../../projects/angular-editor/src/lib/ae-button/ae-button.component.ts","../../../projects/angular-editor/src/lib/ae-button/ae-button.component.html","../../../projects/angular-editor/src/lib/ae-toolbar-set/ae-toolbar-set.component.ts","../../../projects/angular-editor/src/lib/ae-toolbar-set/ae-toolbar-set.component.html","../../../projects/angular-editor/src/lib/ae-toolbar/ae-toolbar.component.ts","../../../projects/angular-editor/src/lib/ae-toolbar/ae-toolbar.component.html","../../../projects/angular-editor/src/lib/editor/angular-editor.component.ts","../../../projects/angular-editor/src/lib/editor/angular-editor.component.html","../../../projects/angular-editor/src/lib/angular-editor.module.ts","../../../projects/angular-editor/src/public-api.ts","../../../projects/angular-editor/src/kolkov-angular-editor.ts"],"sourcesContent":["import {Inject, Injectable, DOCUMENT} from '@angular/core';\nimport {HttpClient, HttpEvent} from '@angular/common/http';\nimport {Observable} from 'rxjs';\n\nimport {CustomClass} from './config';\n\nexport interface UploadResponse {\n  imageUrl: string;\n}\n\n@Injectable()\nexport class AngularEditorService {\n\n  savedSelection: Range | null;\n  selectedText: string;\n  uploadUrl: string;\n  uploadWithCredentials: boolean;\n\n  constructor(\n    private http: HttpClient,\n    @Inject(DOCUMENT) private doc: any\n  ) { }\n\n  /**\n   * Executed command from editor header buttons exclude toggleEditorMode\n   * @param command string from triggerCommand\n   * @param value\n   */\n  executeCommand(command: string, value?: string) {\n    const commands = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre'];\n    if (commands.includes(command)) {\n      this.doc.execCommand('formatBlock', false, command);\n      return;\n    }\n    this.doc.execCommand(command, false, value);\n  }\n\n  /**\n   * Create URL link\n   * @param url string from UI prompt\n   */\n  createLink(url: string) {\n    if (!url.includes('http')) {\n      this.doc.execCommand('createlink', false, url);\n    } else {\n      const newUrl = '<a href=\"' + url + '\" target=\"_blank\">' + this.selectedText + '</a>';\n      this.insertHtml(newUrl);\n    }\n  }\n\n  /**\n   * insert color either font or background\n   *\n   * @param color color to be inserted\n   * @param where where the color has to be inserted either text/background\n   */\n  insertColor(color: string, where: string): void {\n    const restored = this.restoreSelection();\n    if (restored) {\n      if (where === 'textColor') {\n        this.doc.execCommand('foreColor', false, color);\n      } else {\n        this.doc.execCommand('hiliteColor', false, color);\n      }\n    }\n  }\n\n  /**\n   * Set font name\n   * @param fontName string\n   */\n  setFontName(fontName: string) {\n    this.doc.execCommand('fontName', false, fontName);\n  }\n\n  /**\n   * Set font size\n   * @param fontSize string\n   */\n  setFontSize(fontSize: string) {\n    this.doc.execCommand('fontSize', false, fontSize);\n  }\n\n  /**\n   * Create raw HTML\n   * @param html HTML string\n   */\n  insertHtml(html: string): void {\n\n    const isHTMLInserted = this.doc.execCommand('insertHTML', false, html);\n\n    if (!isHTMLInserted) {\n      throw new Error('Unable to perform the operation');\n    }\n  }\n\n  /**\n   * save selection when the editor is focussed out\n   */\n  public saveSelection = (): void => {\n    if (this.doc.getSelection) {\n      const sel = this.doc.getSelection();\n      if (sel.getRangeAt && sel.rangeCount) {\n        this.savedSelection = sel.getRangeAt(0);\n        this.selectedText = sel.toString();\n      }\n    } else if (this.doc.getSelection && this.doc.createRange) {\n      this.savedSelection = document.createRange();\n    } else {\n      this.savedSelection = null;\n    }\n  }\n\n  /**\n   * restore selection when the editor is focused in\n   *\n   * saved selection when the editor is focused out\n   */\n  restoreSelection(): boolean {\n    if (this.savedSelection) {\n      if (this.doc.getSelection) {\n        const sel = this.doc.getSelection();\n        sel.removeAllRanges();\n        sel.addRange(this.savedSelection);\n        return true;\n      } else if (this.doc.getSelection /*&& this.savedSelection.select*/) {\n        // this.savedSelection.select();\n        return true;\n      }\n    } else {\n      return false;\n    }\n  }\n\n  /**\n   * setTimeout used for execute 'saveSelection' method in next event loop iteration\n   */\n  public executeInNextQueueIteration(callbackFn: (...args: any[]) => any, timeout = 1e2): void {\n    setTimeout(callbackFn, timeout);\n  }\n\n  /** check any selection is made or not */\n  private checkSelection(): any {\n\n    const selectedText = this.savedSelection.toString();\n\n    if (selectedText.length === 0) {\n      throw new Error('No Selection Made');\n    }\n    return true;\n  }\n\n  /**\n   * Upload file to uploadUrl\n   * @param file The file\n   */\n  uploadImage(file: File): Observable<HttpEvent<UploadResponse>> {\n\n    const uploadData: FormData = new FormData();\n\n    uploadData.append('file', file, file.name);\n\n    return this.http.post<UploadResponse>(this.uploadUrl, uploadData, {\n      reportProgress: true,\n      observe: 'events',\n      withCredentials: this.uploadWithCredentials,\n    });\n  }\n\n  /**\n   * Insert image with Url\n   * @param imageUrl The imageUrl.\n   */\n  insertImage(imageUrl: string) {\n    this.doc.execCommand('insertImage', false, imageUrl);\n  }\n\n  setDefaultParagraphSeparator(separator: string) {\n    this.doc.execCommand('defaultParagraphSeparator', false, separator);\n  }\n\n  /**\n   * Apply custom class to selection with enterprise-level HTML structure preservation.\n   * Supports three modes:\n   * - 'inline': Wrap selection in a single element (legacy behavior)\n   * - 'block': Apply class to each block element in selection\n   * - 'auto': Smart detection based on selection span (default)\n   *\n   * @param customClass The custom class configuration\n   */\n  createCustomClass(customClass: CustomClass): void {\n    if (!customClass || !this.savedSelection) {\n      return;\n    }\n\n    const mode = customClass.mode || 'auto';\n    const range = this.savedSelection;\n\n    // Restore selection before applying\n    this.restoreSelection();\n\n    if (mode === 'inline') {\n      this.applyClassInline(range, customClass);\n    } else if (mode === 'block') {\n      this.applyClassToBlocks(range, customClass);\n    } else {\n      // Auto mode: detect if selection spans multiple blocks\n      const blocks = this.getBlockElementsInRange(range);\n      if (blocks.length > 1) {\n        this.applyClassToBlocks(range, customClass);\n      } else {\n        this.applyClassInline(range, customClass);\n      }\n    }\n  }\n\n  /**\n   * Apply class inline by wrapping selection in a single element.\n   * Uses extractContents + insertNode pattern for safety.\n   */\n  private applyClassInline(range: Range, customClass: CustomClass): void {\n    const tagName = customClass.tag || 'span';\n\n    try {\n      // Create wrapper element\n      const wrapper = this.doc.createElement(tagName);\n      wrapper.className = customClass.class;\n\n      // Extract contents and wrap (safer than surroundContents)\n      const contents = range.extractContents();\n      wrapper.appendChild(contents);\n      range.insertNode(wrapper);\n\n      // Normalize to merge adjacent text nodes\n      if (wrapper.parentNode) {\n        wrapper.parentNode.normalize();\n      }\n\n      // Update selection to the new wrapper\n      range.selectNodeContents(wrapper);\n      const sel = this.doc.getSelection();\n      sel.removeAllRanges();\n      sel.addRange(range);\n    } catch (e) {\n      // Fallback to legacy method if DOM manipulation fails\n      console.warn('applyClassInline failed, using fallback:', e);\n      this.applyClassInlineFallback(customClass);\n    }\n  }\n\n  /**\n   * Fallback method for inline class application (legacy behavior).\n   */\n  private applyClassInlineFallback(customClass: CustomClass): void {\n    const tagName = customClass.tag || 'span';\n    const newTag = '<' + tagName + ' class=\"' + customClass.class + '\">' + this.selectedText + '</' + tagName + '>';\n    this.insertHtml(newTag);\n  }\n\n  /**\n   * Apply class to each block element in selection.\n   * Preserves HTML structure by adding class to existing elements.\n   */\n  private applyClassToBlocks(range: Range, customClass: CustomClass): void {\n    const blocks = this.getBlockElementsInRange(range);\n\n    if (blocks.length === 0) {\n      // No blocks found, fall back to inline\n      this.applyClassInline(range, customClass);\n      return;\n    }\n\n    // Apply class to each block element\n    blocks.forEach(block => {\n      // Toggle class: remove if present, add if not\n      if (block.classList.contains(customClass.class)) {\n        block.classList.remove(customClass.class);\n      } else {\n        block.classList.add(customClass.class);\n      }\n    });\n\n    // Trigger change detection by moving cursor\n    const sel = this.doc.getSelection();\n    if (sel && blocks.length > 0) {\n      // Reselect the original range\n      sel.removeAllRanges();\n      sel.addRange(range);\n    }\n  }\n\n  /**\n   * Get all block-level elements within a range.\n   * Returns elements that are fully or partially selected.\n   */\n  private getBlockElementsInRange(range: Range): HTMLElement[] {\n    const blockTags = [\n      'P', 'DIV', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6',\n      'LI', 'BLOCKQUOTE', 'PRE', 'ADDRESS', 'ARTICLE',\n      'ASIDE', 'FIGCAPTION', 'FIGURE', 'FOOTER', 'HEADER',\n      'MAIN', 'NAV', 'SECTION'\n    ];\n    const blocks: HTMLElement[] = [];\n    const seen = new Set<HTMLElement>();\n\n    // Get the common ancestor\n    const container = range.commonAncestorContainer;\n    const root = container.nodeType === Node.ELEMENT_NODE\n      ? container as HTMLElement\n      : container.parentElement;\n\n    if (!root) {\n      return blocks;\n    }\n\n    // If root itself is a block element and fully contains the range\n    if (blockTags.includes(root.tagName) && this.isNodeFullyInRange(root, range)) {\n      return [root];\n    }\n\n    // Find all block elements within the range using TreeWalker\n    const walker = this.doc.createTreeWalker(\n      root,\n      NodeFilter.SHOW_ELEMENT,\n      {\n        acceptNode: (node: Element) => {\n          if (!blockTags.includes(node.tagName)) {\n            return NodeFilter.FILTER_SKIP;\n          }\n          // Check if node intersects with selection\n          if (range.intersectsNode(node)) {\n            return NodeFilter.FILTER_ACCEPT;\n          }\n          return NodeFilter.FILTER_SKIP;\n        }\n      }\n    );\n\n    let node: Node | null;\n    while ((node = walker.nextNode())) {\n      const element = node as HTMLElement;\n      // Avoid duplicates and nested blocks\n      if (!seen.has(element) && !this.hasAncestorInSet(element, seen)) {\n        seen.add(element);\n        blocks.push(element);\n      }\n    }\n\n    // If no blocks found, check if we're inside a block\n    if (blocks.length === 0) {\n      let parent = root;\n      while (parent && parent !== this.doc.body) {\n        if (blockTags.includes(parent.tagName)) {\n          blocks.push(parent);\n          break;\n        }\n        parent = parent.parentElement;\n      }\n    }\n\n    return blocks;\n  }\n\n  /**\n   * Check if a node is fully contained within a range.\n   */\n  private isNodeFullyInRange(node: Node, range: Range): boolean {\n    const nodeRange = this.doc.createRange();\n    nodeRange.selectNodeContents(node);\n    return range.compareBoundaryPoints(Range.START_TO_START, nodeRange) <= 0 &&\n           range.compareBoundaryPoints(Range.END_TO_END, nodeRange) >= 0;\n  }\n\n  /**\n   * Check if element has an ancestor in the given set.\n   */\n  private hasAncestorInSet(element: HTMLElement, set: Set<HTMLElement>): boolean {\n    let parent = element.parentElement;\n    while (parent) {\n      if (set.has(parent)) {\n        return true;\n      }\n      parent = parent.parentElement;\n    }\n    return false;\n  }\n\n  insertVideo(videoUrl: string) {\n    if (videoUrl.match('www.youtube.com') || videoUrl.match('youtu.be')) {\n      this.insertYouTubeVideoTag(videoUrl);\n    }\n    if (videoUrl.match('vimeo.com')) {\n      this.insertVimeoVideoTag(videoUrl);\n    }\n  }\n\n  private insertYouTubeVideoTag(videoUrl: string): void {\n    // Support both formats: youtube.com/watch?v=ID and youtu.be/ID\n    let id: string;\n    if (videoUrl.includes('youtu.be/')) {\n      id = videoUrl.split('youtu.be/')[1].split('?')[0];\n    } else {\n      id = videoUrl.split('v=')[1].split('&')[0];\n    }\n    const imageUrl = `https://img.youtube.com/vi/${id}/0.jpg`;\n    const thumbnail = `\n      <div style='position: relative'>\n        <a href='${videoUrl}' target='_blank'>\n          <img src=\"${imageUrl}\" alt=\"click to watch\"/>\n          <img style='position: absolute; left:200px; top:140px'\n          src=\"https://img.icons8.com/color/96/000000/youtube-play.png\"/>\n        </a>\n      </div>`;\n    this.insertHtml(thumbnail);\n  }\n\n  private insertVimeoVideoTag(videoUrl: string): void {\n    const sub = this.http.get<any>(`https://vimeo.com/api/oembed.json?url=${videoUrl}`).subscribe(data => {\n      const imageUrl = data.thumbnail_url_with_play_button;\n      const thumbnail = `<div>\n        <a href='${videoUrl}' target='_blank'>\n          <img src=\"${imageUrl}\" alt=\"${data.title}\"/>\n        </a>\n      </div>`;\n      this.insertHtml(thumbnail);\n      sub.unsubscribe();\n    });\n  }\n\n  nextNode(node) {\n    if (node.hasChildNodes()) {\n      return node.firstChild;\n    } else {\n      while (node && !node.nextSibling) {\n        node = node.parentNode;\n      }\n      if (!node) {\n        return null;\n      }\n      return node.nextSibling;\n    }\n  }\n\n  getRangeSelectedNodes(range, includePartiallySelectedContainers) {\n    let node = range.startContainer;\n    const endNode = range.endContainer;\n    let rangeNodes = [];\n\n    // Special case for a range that is contained within a single node\n    if (node === endNode) {\n      rangeNodes = [node];\n    } else {\n      // Iterate nodes until we hit the end container\n      while (node && node !== endNode) {\n        rangeNodes.push( node = this.nextNode(node) );\n      }\n\n      // Add partially selected nodes at the start of the range\n      node = range.startContainer;\n      while (node && node !== range.commonAncestorContainer) {\n        rangeNodes.unshift(node);\n        node = node.parentNode;\n      }\n    }\n\n    // Add ancestors of the range container, if required\n    if (includePartiallySelectedContainers) {\n      node = range.commonAncestorContainer;\n      while (node) {\n        rangeNodes.push(node);\n        node = node.parentNode;\n      }\n    }\n\n    return rangeNodes;\n  }\n\n  getSelectedNodes() {\n    const nodes = [];\n    if (this.doc.getSelection) {\n      const sel = this.doc.getSelection();\n      for (let i = 0, len = sel.rangeCount; i < len; ++i) {\n        nodes.push.apply(nodes, this.getRangeSelectedNodes(sel.getRangeAt(i), true));\n      }\n    }\n    return nodes;\n  }\n\n  replaceWithOwnChildren(el) {\n    const parent = el.parentNode;\n    while (el.hasChildNodes()) {\n      parent.insertBefore(el.firstChild, el);\n    }\n    parent.removeChild(el);\n  }\n\n  removeSelectedElements(tagNames) {\n    const tagNamesArray = tagNames.toLowerCase().split(',');\n    this.getSelectedNodes().forEach((node) => {\n      if (node.nodeType === 1 &&\n        tagNamesArray.indexOf(node.tagName.toLowerCase()) > -1) {\n        // Remove the node and replace it with its children\n        this.replaceWithOwnChildren(node);\n      }\n    });\n  }\n}\n","import { UploadResponse } from './angular-editor.service';\nimport { HttpEvent } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n/**\n * Custom class configuration for applying styles to selected content.\n *\n * @example\n * // Basic usage (inline span)\n * { name: 'Red Text', class: 'text-red' }\n *\n * // Block-level class (applies to each paragraph)\n * { name: 'Highlight', class: 'highlight', mode: 'block' }\n *\n * // Auto mode (smart detection)\n * { name: 'Quote', class: 'quote', mode: 'auto', tag: 'div' }\n */\nexport interface CustomClass {\n  /** Display name shown in dropdown */\n  name: string;\n  /** CSS class to apply */\n  class: string;\n  /** HTML tag to use for wrapping (default: 'span') */\n  tag?: string;\n  /**\n   * Application mode:\n   * - 'inline': Always wrap selection in a single element (legacy behavior)\n   * - 'block': Apply class to each block element in selection\n   * - 'auto': Smart detection - inline for single block, block for multiple (default)\n   */\n  mode?: 'inline' | 'block' | 'auto';\n}\n\nexport interface Font {\n  name: string;\n  class: string;\n}\n\nexport interface AngularEditorConfig {\n  editable?: boolean;\n  spellcheck?: boolean;\n  height?: 'auto' | string;\n  minHeight?: '0' | string;\n  maxHeight?: 'auto' | string;\n  width?: 'auto' | string;\n  minWidth?: '0' | string;\n  translate?: 'yes' | 'now' | string;\n  enableToolbar?: boolean;\n  showToolbar?: boolean;\n  placeholder?: string;\n  defaultParagraphSeparator?: string;\n  defaultFontName?: string;\n  defaultFontSize?: '1' | '2' | '3' | '4' | '5' | '6' | '7' | string;\n  uploadUrl?: string;\n  upload?: (file: File) => Observable<HttpEvent<UploadResponse>>;\n  uploadWithCredentials?: boolean;\n  fonts?: Font[];\n  customClasses?: CustomClass[];\n  sanitize?: boolean;\n  toolbarPosition?: 'top' | 'bottom';\n  outline?: boolean;\n  toolbarHiddenButtons?: string[][];\n  rawPaste?: boolean;\n  textDirection?: 'ltr' | 'rtl' | 'auto';\n}\n\nexport const angularEditorConfig: AngularEditorConfig = {\n  editable: true,\n  spellcheck: true,\n  height: 'auto',\n  minHeight: '0',\n  maxHeight: 'auto',\n  width: 'auto',\n  minWidth: '0',\n  translate: 'yes',\n  enableToolbar: true,\n  showToolbar: true,\n  placeholder: 'Enter text here...',\n  defaultParagraphSeparator: '',\n  defaultFontName: '',\n  defaultFontSize: '',\n  fonts: [\n    {class: 'arial', name: 'Arial'},\n    {class: 'times-new-roman', name: 'Times New Roman'},\n    {class: 'calibri', name: 'Calibri'},\n    {class: 'comic-sans-ms', name: 'Comic Sans MS'}\n  ],\n  uploadUrl: 'v1/image',\n  uploadWithCredentials: false,\n  sanitize: true,\n  toolbarPosition: 'top',\n  outline: true,\n  /*toolbarHiddenButtons: [\n    ['bold', 'italic', 'underline', 'strikeThrough', 'superscript', 'subscript'],\n    ['heading', 'fontName', 'fontSize', 'color'],\n    ['justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent'],\n    ['cut', 'copy', 'delete', 'removeFormat', 'undo', 'redo'],\n    ['paragraph', 'blockquote', 'removeBlockquote', 'horizontalLine', 'orderedList', 'unorderedList'],\n    ['link', 'unlink', 'image', 'video']\n  ]*/\n};\n","export function isDefined(value: any) {\n  return value !== undefined && value !== null;\n}\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  HostListener,\n  Input,\n  OnInit,\n  Output,\n  Renderer2,\n  ViewChild,\n  ViewEncapsulation\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {isDefined} from '../utils';\n\nexport interface SelectOption {\n  label: string;\n  value: string;\n}\n\n@Component({\n    selector: 'ae-select',\n    templateUrl: './ae-select.component.html',\n    styleUrls: ['./ae-select.component.scss'],\n    //encapsulation: ViewEncapsulation.None,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => AeSelectComponent),\n            multi: true,\n        }\n    ],\n    standalone: false\n})\nexport class AeSelectComponent implements OnInit, ControlValueAccessor {\n  @Input() options: SelectOption[] = [];\n  // eslint-disable-next-line @angular-eslint/no-input-rename\n  @Input('hidden') isHidden: boolean;\n\n  selectedOption: SelectOption;\n  disabled = false;\n  optionId = 0;\n\n  get label(): string {\n    return this.selectedOption && this.selectedOption.hasOwnProperty('label') ? this.selectedOption.label : 'Select';\n  }\n\n  opened = false;\n\n  get value(): string {\n    return this.selectedOption.value;\n  }\n\n  @HostBinding('style.display') hidden = 'inline-block';\n\n  // eslint-disable-next-line @angular-eslint/no-output-native, @angular-eslint/no-output-rename\n  @Output('change') changeEvent = new EventEmitter();\n\n  @ViewChild('labelButton', {static: true}) labelButton: ElementRef;\n\n  constructor(private elRef: ElementRef,\n              private r: Renderer2,\n  ) {\n  }\n\n  ngOnInit() {\n    this.selectedOption = this.options[0];\n    if (isDefined(this.isHidden) && this.isHidden) {\n      this.hide();\n    }\n  }\n\n  hide() {\n    this.hidden = 'none';\n  }\n\n  optionSelect(option: SelectOption, event: MouseEvent) {\n    //console.log(event.button, event.buttons);\n    if (event.buttons !== 1) {\n      return;\n    }\n    event.preventDefault();\n    event.stopPropagation();\n    this.setValue(option.value);\n    this.onChange(this.selectedOption.value);\n    this.changeEvent.emit(this.selectedOption.value);\n    this.onTouched();\n    this.opened = false;\n  }\n\n  toggleOpen(event: MouseEvent) {\n    // event.stopPropagation();\n    if (this.disabled) {\n      return;\n    }\n    this.opened = !this.opened;\n  }\n\n  @HostListener('document:click', ['$event'])\n  onClick($event: MouseEvent) {\n    if (!this.elRef.nativeElement.contains($event.target)) {\n      this.close();\n    }\n  }\n\n  close() {\n    this.opened = false;\n  }\n\n  get isOpen(): boolean {\n    return this.opened;\n  }\n\n  writeValue(value) {\n    if (!value || typeof value !== 'string') {\n      return;\n    }\n    this.setValue(value);\n  }\n\n  setValue(value) {\n    let index = 0;\n    const selectedEl = this.options.find((el, i) => {\n      index = i;\n      return el.value === value;\n    });\n    if (selectedEl) {\n      this.selectedOption = selectedEl;\n      this.optionId = index;\n    }\n  }\n\n  onChange: any = () => {\n  }\n  onTouched: any = () => {\n  }\n\n  registerOnChange(fn) {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn) {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.labelButton.nativeElement.disabled = isDisabled;\n    const div = this.labelButton.nativeElement;\n    const action = isDisabled ? 'addClass' : 'removeClass';\n    this.r[action](div, 'disabled');\n    this.disabled = isDisabled;\n  }\n\n  @HostListener('keydown', ['$event'])\n  handleKeyDown($event: KeyboardEvent) {\n    if (!this.opened) {\n      return;\n    }\n    // console.log($event.key);\n    // if (KeyCode[$event.key]) {\n    switch ($event.key) {\n      case 'ArrowDown':\n        this._handleArrowDown($event);\n        break;\n      case 'ArrowUp':\n        this._handleArrowUp($event);\n        break;\n      case 'Space':\n        this._handleSpace($event);\n        break;\n      case 'Enter':\n        this._handleEnter($event);\n        break;\n      case 'Tab':\n        this._handleTab($event);\n        break;\n      case 'Escape':\n        this.close();\n        $event.preventDefault();\n        break;\n      case 'Backspace':\n        this._handleBackspace();\n        break;\n    }\n    // } else if ($event.key && $event.key.length === 1) {\n    // this._keyPress$.next($event.key.toLocaleLowerCase());\n    // }\n  }\n\n  _handleArrowDown($event) {\n    if (this.optionId < this.options.length - 1) {\n      this.optionId++;\n    }\n  }\n\n  _handleArrowUp($event) {\n    if (this.optionId >= 1) {\n      this.optionId--;\n    }\n  }\n\n  _handleSpace($event) {\n\n  }\n\n  _handleEnter($event) {\n    this.optionSelect(this.options[this.optionId], $event);\n  }\n\n  _handleTab($event) {\n\n  }\n\n  _handleBackspace() {\n\n  }\n}\n","<span class=\"ae-picker\" [ngClass]=\"{'ae-expanded':isOpen}\">\n  <button [tabIndex]=\"-1\" #labelButton tabindex=\"-1\" type=\"button\" role=\"button\" class=\"ae-picker-label\" (click)=\"toggleOpen($event);\">{{label}}\n    <svg>\n      <use [attr.href]=\"'assets/ae-icons/icons.svg#sort'\" [attr.xlink:href]=\"'assets/ae-icons/icons.svg#sort'\"></use>\n    </svg>\n  </button>\n  <span class=\"ae-picker-options\">\n    <span tabindex=\"-1\" type=\"button\" role=\"button\" class=\"ae-picker-item\"\n          *ngFor=\"let item of options; let i = index\"\n          [ngClass]=\"{'selected': item.value === value, 'focused': i === optionId}\"\n          (mousedown)=\"optionSelect(item, $event)\">\n          {{item.label}}\n    </span>\n    <span class=\"dropdown-item\" *ngIf=\"!options.length\">No items for select</span>\n  </span>\n</span>\n","import {Component, Input, ViewEncapsulation} from '@angular/core';\n\n@Component({\n    selector: 'ae-button, button[aeButton]',\n    templateUrl: './ae-button.component.html',\n    styleUrls: ['./ae-button.component.scss'],\n    //encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'angular-editor-button',\n        '[tabIndex]': '-1',\n        '[type]': '\"button\"',\n    },\n    standalone: false\n})\nexport class AeButtonComponent {\n\n  @Input() iconName = '';\n\n  constructor() {\n  }\n\n}\n","<ng-container *ngIf=\"iconName; else contentTemplate\">\n  <svg>\n    <use [attr.href]=\"'assets/ae-icons/icons.svg#' + iconName\" [attr.xlink:href]=\"'assets/ae-icons/icons.svg#' + iconName\"></use>\n  </svg>\n</ng-container>\n<ng-template #contentTemplate>\n  <ng-content></ng-content>\n</ng-template>\n","import {Component, ViewEncapsulation} from '@angular/core';\n\n@Component({\n    selector: 'ae-toolbar-set, [aeToolbarSet]',\n    templateUrl: './ae-toolbar-set.component.html',\n    styleUrls: ['./ae-toolbar-set.component.scss'],\n    //encapsulation: ViewEncapsulation.None,\n    host: {\n        'class': 'angular-editor-toolbar-set'\n    },\n    standalone: false\n})\nexport class AeToolbarSetComponent {\n\n  constructor() {\n  }\n\n}\n","<ng-content></ng-content>\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  Output,\n  Renderer2,\n  ViewChild,\n  ViewEncapsulation,\n  DOCUMENT\n} from '@angular/core';\nimport {AngularEditorService, UploadResponse} from '../angular-editor.service';\nimport {HttpEvent, HttpResponse} from '@angular/common/http';\n\nimport {CustomClass} from '../config';\nimport {SelectOption} from '../ae-select/ae-select.component';\nimport {Observable} from 'rxjs';\n\n@Component({\n    selector: 'angular-editor-toolbar, ae-toolbar, div[aeToolbar]',\n    templateUrl: './ae-toolbar.component.html',\n    styleUrls: ['./ae-toolbar.component.scss'],\n    standalone: false\n})\n\nexport class AeToolbarComponent {\n  htmlMode = false;\n  linkSelected = false;\n  block = 'default';\n  fontName = 'Times New Roman';\n  fontSize = '3';\n  foreColour;\n  backColor;\n\n  headings: SelectOption[] = [\n    {\n      label: 'Heading 1',\n      value: 'h1',\n    },\n    {\n      label: 'Heading 2',\n      value: 'h2',\n    },\n    {\n      label: 'Heading 3',\n      value: 'h3',\n    },\n    {\n      label: 'Heading 4',\n      value: 'h4',\n    },\n    {\n      label: 'Heading 5',\n      value: 'h5',\n    },\n    {\n      label: 'Heading 6',\n      value: 'h6',\n    },\n    {\n      label: 'Paragraph',\n      value: 'p',\n    },\n    {\n      label: 'Predefined',\n      value: 'pre'\n    },\n    {\n      label: 'Standard',\n      value: 'div'\n    },\n    {\n      label: 'default',\n      value: 'default'\n    }\n  ];\n\n  fontSizes: SelectOption[] = [\n    {\n      label: '1',\n      value: '1',\n    },\n    {\n      label: '2',\n      value: '2',\n    },\n    {\n      label: '3',\n      value: '3',\n    },\n    {\n      label: '4',\n      value: '4',\n    },\n    {\n      label: '5',\n      value: '5',\n    },\n    {\n      label: '6',\n      value: '6',\n    },\n    {\n      label: '7',\n      value: '7',\n    }\n  ];\n\n  customClassId = '-1';\n  // eslint-disable-next-line no-underscore-dangle, id-blacklist, id-match\n  _customClasses: CustomClass[];\n  customClassList: SelectOption[] = [{label: '', value: ''}];\n  // uploadUrl: string;\n\n  tagMap = {\n    BLOCKQUOTE: 'indent',\n    A: 'link'\n  };\n\n  select = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P', 'PRE', 'DIV'];\n\n  buttons = ['bold', 'italic', 'underline', 'strikeThrough', 'subscript', 'superscript', 'justifyLeft', 'justifyCenter',\n    'justifyRight', 'justifyFull', 'indent', 'outdent', 'insertUnorderedList', 'insertOrderedList', 'link'];\n\n  @Input() id: string;\n  @Input() uploadUrl: string;\n  @Input() upload: (file: File) => Observable<HttpEvent<UploadResponse>>;\n  @Input() showToolbar: boolean;\n  @Input() fonts: SelectOption[] = [{label: '', value: ''}];\n\n  @Input()\n  set customClasses(classes: CustomClass[]) {\n    if (classes) {\n      this._customClasses = classes;\n      this.customClassList = this._customClasses.map((x, i) => ({label: x.name, value: i.toString()}));\n      this.customClassList.unshift({label: 'Clear Class', value: '-1'});\n    }\n  }\n\n  @Input()\n  set defaultFontName(value: string) {\n    if (value) {\n      this.fontName = value;\n    }\n  }\n\n  @Input()\n  set defaultFontSize(value: string) {\n    if (value) {\n      this.fontSize = value;\n    }\n  }\n\n  @Input() hiddenButtons: string[][];\n\n  @Output() execute: EventEmitter<string> = new EventEmitter<string>();\n\n  @ViewChild('fileInput', {static: true}) myInputFile: ElementRef;\n\n  public get isLinkButtonDisabled(): boolean {\n    return this.htmlMode || !Boolean(this.editorService.selectedText);\n  }\n\n  constructor(\n    private r: Renderer2,\n    private editorService: AngularEditorService,\n    private er: ElementRef,\n    @Inject(DOCUMENT) private doc: any\n  ) {\n  }\n\n  /**\n   * Trigger command from editor header buttons\n   * @param command string from toolbar buttons\n   */\n  triggerCommand(command: string) {\n    this.execute.emit(command);\n  }\n\n  /**\n   * highlight editor buttons when cursor moved or positioning\n   */\n  triggerButtons() {\n    if (!this.showToolbar) {\n      return;\n    }\n    this.buttons.forEach(e => {\n      const result = this.doc.queryCommandState(e);\n      const elementById = this.doc.getElementById(e + '-' + this.id);\n      if (result) {\n        this.r.addClass(elementById, 'active');\n      } else {\n        this.r.removeClass(elementById, 'active');\n      }\n    });\n  }\n\n  /**\n   * trigger highlight editor buttons when cursor moved or positioning in block\n   */\n  triggerBlocks(nodes: Node[]) {\n    if (!this.showToolbar) {\n      return;\n    }\n    this.linkSelected = nodes.findIndex(x => x.nodeName === 'A') > -1;\n    let found = false;\n    this.select.forEach(y => {\n      const node = nodes.find(x => x.nodeName === y);\n      if (node !== undefined && y === node.nodeName) {\n        if (found === false) {\n          this.block = node.nodeName.toLowerCase();\n          found = true;\n        }\n      } else if (found === false) {\n        this.block = 'default';\n      }\n    });\n\n    found = false;\n    if (this._customClasses) {\n      this._customClasses.forEach((y, index) => {\n        const node = nodes.find(x => {\n          if (x instanceof Element) {\n            return x.className === y.class;\n          }\n        });\n        if (node !== undefined) {\n          if (found === false) {\n            this.customClassId = index.toString();\n            found = true;\n          }\n        } else if (found === false) {\n          this.customClassId = '-1';\n        }\n      });\n    }\n\n    Object.keys(this.tagMap).map(e => {\n      const elementById = this.doc.getElementById(this.tagMap[e] + '-' + this.id);\n      const node = nodes.find(x => x.nodeName === e);\n      if (node !== undefined && e === node.nodeName) {\n        this.r.addClass(elementById, 'active');\n      } else {\n        this.r.removeClass(elementById, 'active');\n      }\n    });\n\n    this.foreColour = this.doc.queryCommandValue('ForeColor');\n    this.fontSize = this.doc.queryCommandValue('FontSize');\n    this.fontName = this.doc.queryCommandValue('FontName').replace(/\"/g, '');\n    this.backColor = this.doc.queryCommandValue('backColor');\n  }\n\n  /**\n   * insert URL link\n   */\n  insertUrl() {\n    let url = 'https:\\/\\/';\n    const selection = this.editorService.savedSelection;\n    if (selection && selection.commonAncestorContainer.parentElement.nodeName === 'A') {\n      const parent = selection.commonAncestorContainer.parentElement as HTMLAnchorElement;\n      // Use getAttribute to preserve relative URLs instead of href which returns absolute URL\n      const href = parent.getAttribute('href');\n      if (href !== '' && href !== null) {\n        url = href;\n      }\n    }\n    url = prompt('Insert URL link', url);\n    if (url && url !== '' && url !== 'https://') {\n      this.editorService.createLink(url);\n    }\n  }\n\n  /**\n   * insert Video link\n   */\n  insertVideo() {\n    this.execute.emit('');\n    const url = prompt('Insert Video link', `https://`);\n    if (url && url !== '' && url !== `https://`) {\n      this.editorService.insertVideo(url);\n    }\n  }\n\n  /** insert color */\n  insertColor(color: string, where: string) {\n    this.editorService.insertColor(color, where);\n    this.execute.emit('');\n  }\n\n  /**\n   * set font Name/family\n   * @param foreColor string\n   */\n  setFontName(foreColor: string): void {\n    this.editorService.setFontName(foreColor);\n    this.execute.emit('');\n  }\n\n  /**\n   * set font Size\n   * @param fontSize string\n   */\n  setFontSize(fontSize: string): void {\n    this.editorService.setFontSize(fontSize);\n    this.execute.emit('');\n  }\n\n  /**\n   * toggle editor mode (WYSIWYG or SOURCE)\n   * @param m boolean\n   */\n  setEditorMode(m: boolean) {\n    const toggleEditorModeButton = this.doc.getElementById('toggleEditorMode' + '-' + this.id);\n    if (m) {\n      this.r.addClass(toggleEditorModeButton, 'active');\n    } else {\n      this.r.removeClass(toggleEditorModeButton, 'active');\n    }\n    this.htmlMode = m;\n  }\n\n  /**\n   * Upload image when file is selected.\n   */\n  onFileChanged(event) {\n    const file = event.target.files[0];\n    if (file.type.includes('image/')) {\n      if (this.upload) {\n        this.upload(file).subscribe((response: HttpResponse<UploadResponse>) => this.watchUploadImage(response, event));\n      } else if (this.uploadUrl) {\n        this.editorService.uploadImage(file).subscribe((response: HttpResponse<UploadResponse>) => this.watchUploadImage(response, event));\n      } else {\n        const reader = new FileReader();\n        reader.onload = (e: ProgressEvent) => {\n          const fr = e.currentTarget as FileReader;\n          this.editorService.insertImage(fr.result.toString());\n          // Reset input value to allow re-uploading the same file\n          event.target.value = null;\n        };\n        reader.readAsDataURL(file);\n      }\n    }\n  }\n\n  watchUploadImage(response: HttpResponse<{ imageUrl: string }>, event) {\n    const {imageUrl} = response.body;\n    this.editorService.insertImage(imageUrl);\n    event.srcElement.value = null;\n  }\n\n  /**\n   * Set custom class\n   */\n  setCustomClass(classId: string) {\n    if (classId === '-1') {\n      this.execute.emit('clear');\n    } else {\n      this.editorService.createCustomClass(this._customClasses[+classId]);\n    }\n  }\n\n  isButtonHidden(name: string): boolean {\n    if (!name) {\n      return false;\n    }\n    if (!(this.hiddenButtons instanceof Array)) {\n      return false;\n    }\n    let result: any;\n    for (const arr of this.hiddenButtons) {\n      if (arr instanceof Array) {\n        result = arr.find(item => item === name);\n      }\n      if (result) {\n        break;\n      }\n    }\n    return result !== undefined;\n  }\n\n  focus() {\n    this.execute.emit('focus');\n  }\n}\n","<div class=\"angular-editor-toolbar\" *ngIf=\"showToolbar\">\n  <div aeToolbarSet>\n    <button aeButton title=\"Undo\" iconName=\"undo\" (click)=\"triggerCommand('undo')\" [hidden]=\"isButtonHidden('undo')\">\n    </button>\n    <button aeButton title=\"Redo\" iconName=\"redo\" (click)=\"triggerCommand('redo')\"\n            [hidden]=\"isButtonHidden('redo')\">\n    </button>\n  </div>\n  <div aeToolbarSet>\n    <button [id]=\"'bold-'+id\" aeButton title=\"Bold\" iconName=\"bold\" (click)=\"triggerCommand('bold')\"\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('bold')\">\n    </button>\n    <button [id]=\"'italic-'+id\" aeButton iconName=\"italic\" title=\"Italic\" (click)=\"triggerCommand('italic')\"\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('italic')\">\n    </button>\n    <button [id]=\"'underline-'+id\" aeButton title=\"Underline\" iconName=\"underline\"\n            (click)=\"triggerCommand('underline')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('underline')\">\n    </button>\n    <button [id]=\"'strikeThrough-'+id\" aeButton iconName=\"strikeThrough\" title=\"Strikethrough\"\n            (click)=\"triggerCommand('strikeThrough')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('strikeThrough')\">\n    </button>\n    <button [id]=\"'subscript-'+id\" aeButton title=\"Subscript\" iconName=\"subscript\"\n            (click)=\"triggerCommand('subscript')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('subscript')\">\n    </button>\n    <button [id]=\"'superscript-'+id\" aeButton iconName=\"superscript\" title=\"Superscript\"\n            (click)=\"triggerCommand('superscript')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('superscript')\">\n    </button>\n  </div>\n  <div aeToolbarSet>\n    <button [id]=\"'justifyLeft-'+id\" aeButton iconName=\"justifyLeft\" title=\"Justify Left\"\n            (click)=\"triggerCommand('justifyLeft')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('justifyLeft')\">\n    </button>\n    <button [id]=\"'justifyCenter-'+id\" aeButton iconName=\"justifyCenter\" title=\"Justify Center\"\n            (click)=\"triggerCommand('justifyCenter')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('justifyCenter')\">\n    </button>\n    <button [id]=\"'justifyRight-'+id\" aeButton iconName=\"justifyRight\" title=\"Justify Right\"\n            (click)=\"triggerCommand('justifyRight')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('justifyRight')\">\n    </button>\n    <button [id]=\"'justifyFull-'+id\" aeButton iconName=\"justifyFull\" title=\"Justify Full\"\n            (click)=\"triggerCommand('justifyFull')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('justifyFull')\">\n    </button>\n  </div>\n  <div aeToolbarSet>\n    <button [id]=\"'indent-'+id\" aeButton iconName=\"indent\" title=\"Indent\"\n            (click)=\"triggerCommand('indent')\"\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('indent')\">\n    </button>\n    <button [id]=\"'outdent-'+id\" aeButton iconName=\"outdent\" title=\"Outdent\"\n            (click)=\"triggerCommand('outdent')\"\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('outdent')\">\n    </button>\n  </div>\n  <div aeToolbarSet>\n    <button [id]=\"'insertUnorderedList-'+id\" aeButton iconName=\"unorderedList\" title=\"Unordered List\"\n            (click)=\"triggerCommand('insertUnorderedList')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('insertUnorderedList')\">\n    </button>\n    <button [id]=\"'insertOrderedList-'+id\" aeButton iconName=\"orderedList\" title=\"Ordered List\"\n            (click)=\"triggerCommand('insertOrderedList')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('insertOrderedList')\">\n    </button>\n  </div>\n  <div aeToolbarSet>\n    <ae-select class=\"select-heading\" [options]=\"headings\"\n               [(ngModel)]=\"block\"\n               (change)=\"triggerCommand(block)\"\n               [disabled]=\"htmlMode\"\n               [hidden]=\"isButtonHidden('heading')\"\n               tabindex=\"-1\"></ae-select>\n  </div>\n  <div aeToolbarSet>\n    <ae-select class=\"select-font\" [options]=\"fonts\"\n               [(ngModel)]=\"fontName\"\n               (change)=\"setFontName(fontName)\"\n               [disabled]=\"htmlMode\"\n               [hidden]=\"isButtonHidden('fontName')\"\n               tabindex=\"-1\"></ae-select>\n  </div>\n  <div aeToolbarSet>\n    <ae-select class=\"select-font-size\" [options]=\"fontSizes\"\n               [(ngModel)]=\"fontSize\"\n               (change)=\"setFontSize(fontSize)\"\n               [disabled]=\"htmlMode\"\n               [hidden]=\"isButtonHidden('fontSize')\"\n               tabindex=\"-1\">\n    </ae-select>\n  </div>\n  <div aeToolbarSet>\n    <input\n      style=\"display: none\"\n      type=\"color\" (change)=\"insertColor(fgInput.value, 'textColor')\"\n      #fgInput>\n    <button [id]=\"'foregroundColorPicker-'+id\" aeButton iconName=\"textColor\"\n            (click)=\"focus(); ; fgInput.click()\"\n            title=\"Text Color\"\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('textColor')\">\n    </button>\n    <input\n      style=\"display: none\"\n      type=\"color\" (change)=\"insertColor(bgInput.value, 'backgroundColor')\"\n      #bgInput>\n    <button [id]=\"'backgroundColorPicker-'+id\" aeButton iconName=\"backgroundColor\"\n            (click)=\"focus(); ; bgInput.click()\"\n            title=\"Background Color\"\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('backgroundColor')\">\n    </button>\n  </div>\n  <div *ngIf=\"_customClasses\" aeToolbarSet>\n    <ae-select class=\"select-custom-style\" [options]=\"customClassList\"\n               [(ngModel)]=\"customClassId\"\n               (change)=\"setCustomClass(customClassId)\"\n               [disabled]=\"htmlMode\"\n               [hidden]=\"isButtonHidden('customClasses')\"\n               tabindex=\"-1\"></ae-select>\n  </div>\n  <div aeToolbarSet>\n    <button [id]=\"'link-'+id\" aeButton iconName=\"link\" (click)=\"insertUrl()\"\n            title=\"Insert Link\" [disabled]=\"isLinkButtonDisabled\" [hidden]=\"isButtonHidden('link')\">\n    </button>\n    <button [id]=\"'unlink-'+id\" aeButton iconName=\"unlink\" (click)=\"triggerCommand('unlink')\"\n            title=\"Unlink\" [disabled]=\"htmlMode || !linkSelected\" [hidden]=\"isButtonHidden('unlink')\">\n    </button>\n    <input\n      style=\"display: none\"\n      accept=\"image/*\"\n      type=\"file\" (change)=\"onFileChanged($event)\"\n      #fileInput>\n    <button [id]=\"'insertImage-'+id\" aeButton iconName=\"image\" (click)=\"focus(); fileInput.click()\"\n            title=\"Insert Image\"\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('insertImage')\">\n    </button>\n    <button [id]=\"'insertVideo-'+id\" aeButton iconName=\"video\"\n            (click)=\"insertVideo()\" title=\"Insert Video\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('insertVideo')\">\n    </button>\n    <button [id]=\"'insertHorizontalRule-'+id\" aeButton iconName=\"horizontalLine\" title=\"Horizontal Line\"\n            (click)=\"triggerCommand('insertHorizontalRule')\" [disabled]=\"htmlMode\"\n            [hidden]=\"isButtonHidden('insertHorizontalRule')\">\n    </button>\n  </div>\n  <div aeToolbarSet>\n    <button [id]=\"'clearFormatting-'+id\" aeButton iconName=\"removeFormat\" title=\"Clear Formatting\"\n            class=\"angular-editor-button\"\n            (click)=\"triggerCommand('removeFormat')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('removeFormat')\">\n    </button>\n  </div>\n  <div aeToolbarSet>\n    <button [id]=\"'toggleEditorMode-'+id\" aeButton iconName=\"htmlCode\" title=\"HTML Code\"\n            (click)=\"triggerCommand('toggleEditorMode')\" [hidden]=\"isButtonHidden('toggleEditorMode')\">\n    </button>\n  </div>\n  <ng-content></ng-content>\n</div>\n","\nimport {\n  AfterViewInit,\n  Attribute,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  HostListener,\n  Inject,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  SecurityContext,\n  TemplateRef,\n  ViewChild, ViewEncapsulation,\n  DOCUMENT\n} from '@angular/core';\nimport {ControlValueAccessor, NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {DomSanitizer} from '@angular/platform-browser';\nimport {AeToolbarComponent} from '../ae-toolbar/ae-toolbar.component';\nimport {AngularEditorService} from '../angular-editor.service';\nimport {AngularEditorConfig, angularEditorConfig} from '../config';\nimport {isDefined} from '../utils';\n\n@Component({\n    selector: 'angular-editor',\n    templateUrl: './angular-editor.component.html',\n    styleUrls: ['./angular-editor.component.scss'],\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => AngularEditorComponent),\n            multi: true\n        },\n        AngularEditorService\n    ],\n    standalone: false\n})\nexport class AngularEditorComponent implements OnInit, ControlValueAccessor, AfterViewInit, OnDestroy {\n\n  private onChange: (value: string) => void;\n  private onTouched: () => void;\n\n  modeVisual = true;\n  showPlaceholder = false;\n  disabled = false;\n  focused = false;\n  touched = false;\n  changed = false;\n\n  focusInstance: any;\n  blurInstance: any;\n\n  @Input() id = '';\n  @Input() config: AngularEditorConfig = angularEditorConfig;\n  @Input() placeholder = '';\n  @Input() tabIndex: number | null;\n\n  @Output() html;\n\n  @ViewChild('editor', {static: true}) textArea: ElementRef;\n  @ViewChild('editorWrapper', {static: true}) editorWrapper: ElementRef;\n  @ViewChild('editorToolbar') editorToolbar: AeToolbarComponent;\n  @ContentChild(\"customButtons\") customButtonsTemplateRef?: TemplateRef<any>;\n  executeCommandFn = this.executeCommand.bind(this);\n\n  @Output() viewMode = new EventEmitter<boolean>();\n\n  /** emits `blur` event when focused out from the textarea */\n    // eslint-disable-next-line @angular-eslint/no-output-native, @angular-eslint/no-output-rename\n  @Output('blur') blurEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n  /** emits `focus` event when focused in to the textarea */\n    // eslint-disable-next-line @angular-eslint/no-output-rename, @angular-eslint/no-output-native\n  @Output('focus') focusEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n  @HostBinding('attr.tabindex') tabindex = -1;\n\n  @HostListener('focus')\n  onFocus() {\n    this.focus();\n  }\n\n  constructor(\n    private r: Renderer2,\n    private editorService: AngularEditorService,\n    @Inject(DOCUMENT) private doc: any,\n    private sanitizer: DomSanitizer,\n    private cdRef: ChangeDetectorRef,\n    @Attribute('tabindex') defaultTabIndex: string,\n    @Attribute('autofocus') private autoFocus: any\n  ) {\n    const parsedTabIndex = Number(defaultTabIndex);\n    this.tabIndex = (parsedTabIndex || parsedTabIndex === 0) ? parsedTabIndex : null;\n  }\n\n  ngOnInit() {\n    this.config.toolbarPosition = this.config.toolbarPosition ? this.config.toolbarPosition : angularEditorConfig.toolbarPosition;\n  }\n\n  ngAfterViewInit() {\n    if (isDefined(this.autoFocus)) {\n      this.focus();\n    }\n  }\n\n  onPaste(event: ClipboardEvent) {\n    if (this.config.rawPaste) {\n      event.preventDefault();\n      const text = event.clipboardData.getData('text/plain');\n      document.execCommand('insertHTML', false, text);\n      return text;\n    }\n  }\n\n  /**\n   * Executed command from editor header buttons\n   * @param command string from triggerCommand\n   * @param value\n   */\n  executeCommand(command: string, value?: string) {\n    this.focus();\n    if (command === 'focus') {\n      return;\n    }\n    if (command === 'toggleEditorMode') {\n      this.toggleEditorMode(this.modeVisual);\n    } else if (command !== '') {\n      if (command === 'clear') {\n        this.editorService.removeSelectedElements(this.getCustomTags());\n        this.onContentChange(this.textArea.nativeElement);\n      } else if (command === 'default') {\n        this.editorService.removeSelectedElements('h1,h2,h3,h4,h5,h6,p,pre');\n        this.onContentChange(this.textArea.nativeElement);\n      } else {\n        this.editorService.executeCommand(command, value);\n      }\n      this.exec();\n    }\n  }\n\n  /**\n   * focus event\n   */\n  onTextAreaFocus(event: FocusEvent): void {\n    if (this.focused) {\n      event.stopPropagation();\n      return;\n    }\n    this.focused = true;\n    this.focusEvent.emit(event);\n    if (!this.touched || !this.changed) {\n      this.editorService.executeInNextQueueIteration(() => {\n        this.configure();\n        this.touched = true;\n      });\n    }\n  }\n\n  /**\n   * @description fires when cursor leaves textarea\n   */\n  public onTextAreaMouseOut(event: MouseEvent): void {\n    this.editorService.saveSelection();\n  }\n\n  /**\n   * blur event\n   */\n  onTextAreaBlur(event: FocusEvent) {\n    /**\n     * save selection if focussed out\n     */\n    this.editorService.executeInNextQueueIteration(this.editorService.saveSelection);\n\n    if (typeof this.onTouched === 'function') {\n      this.onTouched();\n    }\n\n    if (event.relatedTarget !== null) {\n      const parent = (event.relatedTarget as HTMLElement).parentElement;\n      if (!parent.classList.contains('angular-editor-toolbar-set') && !parent.classList.contains('ae-picker')) {\n        this.blurEvent.emit(event);\n        this.focused = false;\n      }\n    }\n  }\n\n  /**\n   *  focus the text area when the editor is focused\n   */\n  focus() {\n    if (this.modeVisual) {\n      this.textArea.nativeElement.focus();\n    } else {\n      const sourceText = this.doc.getElementById('sourceText' + this.id);\n      sourceText.focus();\n      this.focused = true;\n    }\n  }\n\n  /**\n   * Executed from the contenteditable section while the input property changes\n   * @param element html element from contenteditable\n   */\n  onContentChange(element: HTMLElement): void {\n    let html = '';\n    if (this.modeVisual) {\n      html = element.innerHTML;\n    } else {\n      html = element.innerText;\n    }\n    if ((!html || html === '<br>')) {\n      html = '';\n    }\n    if (typeof this.onChange === 'function') {\n      this.onChange(this.config.sanitize || this.config.sanitize === undefined ?\n        this.sanitizer.sanitize(SecurityContext.HTML, html) : html);\n      if ((!html) !== this.showPlaceholder) {\n        this.togglePlaceholder(this.showPlaceholder);\n      }\n    }\n    this.changed = true;\n  }\n\n  /**\n   * Set the function to be called\n   * when the control receives a change event.\n   *\n   * @param fn a function\n   */\n  registerOnChange(fn: any): void {\n    this.onChange = e => (e === '<br>' ? fn('') : fn(e));\n  }\n\n  /**\n   * Set the function to be called\n   * when the control receives a touch event.\n   *\n   * @param fn a function\n   */\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  /**\n   * Write a new value to the element.\n   *\n   * @param value value to be executed when there is a change in contenteditable\n   */\n  writeValue(value: any): void {\n\n    if ((!value || value === '<br>' || value === '') !== this.showPlaceholder) {\n      this.togglePlaceholder(this.showPlaceholder);\n    }\n\n    if (value === undefined || value === '' || value === '<br>') {\n      value = null;\n    }\n\n    this.refreshView(value);\n  }\n\n  /**\n   * refresh view/HTML of the editor\n   *\n   * @param value html string from the editor\n   */\n  refreshView(value: string): void {\n    const normalizedValue = value === null ? '' : value;\n    // Apply sanitization to prevent XSS when setting innerHTML\n    const sanitizedValue = this.config.sanitize !== false\n      ? this.sanitizer.sanitize(SecurityContext.HTML, normalizedValue)\n      : normalizedValue;\n    this.r.setProperty(this.textArea.nativeElement, 'innerHTML', sanitizedValue);\n\n    return;\n  }\n\n  /**\n   * toggles placeholder based on input string\n   *\n   * @param value A HTML string from the editor\n   */\n  togglePlaceholder(value: boolean): void {\n    if (!value) {\n      this.r.addClass(this.editorWrapper.nativeElement, 'show-placeholder');\n      this.showPlaceholder = true;\n\n    } else {\n      this.r.removeClass(this.editorWrapper.nativeElement, 'show-placeholder');\n      this.showPlaceholder = false;\n    }\n  }\n\n  /**\n   * Implements disabled state for this element\n   *\n   * @param isDisabled Disabled flag\n   */\n  setDisabledState(isDisabled: boolean): void {\n    const div = this.textArea.nativeElement;\n    const action = isDisabled ? 'addClass' : 'removeClass';\n    this.r[action](div, 'disabled');\n    this.disabled = isDisabled;\n  }\n\n  /**\n   * toggles editor mode based on bToSource bool\n   *\n   * @param bToSource A boolean value from the editor\n   */\n  toggleEditorMode(bToSource: boolean) {\n    let oContent: any;\n    const editableElement = this.textArea.nativeElement;\n\n    if (bToSource) {\n      oContent = this.r.createText(editableElement.innerHTML);\n      this.r.setProperty(editableElement, 'innerHTML', '');\n      this.r.setProperty(editableElement, 'contentEditable', false);\n\n      const oPre = this.r.createElement('pre');\n      this.r.setStyle(oPre, 'margin', '0');\n      this.r.setStyle(oPre, 'outline', 'none');\n\n      const oCode = this.r.createElement('code');\n      this.r.setProperty(oCode, 'id', 'sourceText' + this.id);\n      this.r.setStyle(oCode, 'display', 'block');\n      this.r.setStyle(oCode, 'white-space', 'pre-wrap');\n      this.r.setStyle(oCode, 'word-break', 'keep-all');\n      this.r.setStyle(oCode, 'outline', 'none');\n      this.r.setStyle(oCode, 'margin', '0');\n      this.r.setStyle(oCode, 'background-color', '#fff5b9');\n      this.r.setProperty(oCode, 'contentEditable', true);\n      this.r.appendChild(oCode, oContent);\n      this.focusInstance = this.r.listen(oCode, 'focus', (event) => this.onTextAreaFocus(event));\n      this.blurInstance = this.r.listen(oCode, 'blur', (event) => this.onTextAreaBlur(event));\n      this.r.appendChild(oPre, oCode);\n      this.r.appendChild(editableElement, oPre);\n\n      // ToDo move to service\n      this.doc.execCommand('defaultParagraphSeparator', false, 'div');\n\n      this.modeVisual = false;\n      this.viewMode.emit(false);\n      oCode.focus();\n    } else {\n      if (this.doc.querySelectorAll) {\n        // Apply sanitization to prevent XSS when switching from HTML mode\n        if (this.config.sanitize !== false) {\n          editableElement.innerText = this.sanitizer.sanitize(SecurityContext.HTML, editableElement.innerText);\n        }\n        this.r.setProperty(editableElement, 'innerHTML', editableElement.innerText);\n      } else {\n        oContent = this.doc.createRange();\n        oContent.selectNodeContents(editableElement.firstChild);\n        let oContentString = oContent.toString();\n        // Apply sanitization to prevent XSS when switching from HTML mode\n        if (this.config.sanitize !== false) {\n          oContentString = this.sanitizer.sanitize(SecurityContext.HTML, oContentString);\n        }\n        this.r.setProperty(editableElement, 'innerHTML', oContentString);\n      }\n      this.r.setProperty(editableElement, 'contentEditable', true);\n      this.modeVisual = true;\n      this.viewMode.emit(true);\n      this.onContentChange(editableElement);\n      editableElement.focus();\n    }\n    this.editorToolbar.setEditorMode(!this.modeVisual);\n  }\n\n  /**\n   * toggles editor buttons when cursor moved or positioning\n   *\n   * Send a node array from the contentEditable of the editor\n   */\n  exec() {\n    this.editorToolbar.triggerButtons();\n\n    let userSelection;\n    if (this.doc.getSelection) {\n      userSelection = this.doc.getSelection();\n      this.editorService.executeInNextQueueIteration(this.editorService.saveSelection);\n    }\n\n    let a = userSelection.focusNode;\n    const els = [];\n    while (a && a.id !== 'editor') {\n      els.unshift(a);\n      a = a.parentNode;\n    }\n    this.editorToolbar.triggerBlocks(els);\n  }\n\n  private configure() {\n    this.editorService.uploadUrl = this.config.uploadUrl;\n    this.editorService.uploadWithCredentials = this.config.uploadWithCredentials;\n    if (this.config.defaultParagraphSeparator) {\n      this.editorService.setDefaultParagraphSeparator(this.config.defaultParagraphSeparator);\n    }\n    if (this.config.defaultFontName) {\n      this.editorService.setFontName(this.config.defaultFontName);\n    }\n    if (this.config.defaultFontSize) {\n      this.editorService.setFontSize(this.config.defaultFontSize);\n    }\n  }\n\n  getFonts() {\n    const fonts = this.config.fonts ? this.config.fonts : angularEditorConfig.fonts;\n    return fonts.map(x => {\n      return {label: x.name, value: x.name};\n    });\n  }\n\n  getCustomTags() {\n    const tags = ['span'];\n    this.config.customClasses.forEach(x => {\n      if (x.tag !== undefined) {\n        if (!tags.includes(x.tag)) {\n          tags.push(x.tag);\n        }\n      }\n    });\n    return tags.join(',');\n  }\n\n  ngOnDestroy() {\n    if (this.blurInstance) {\n      this.blurInstance();\n    }\n    if (this.focusInstance) {\n      this.focusInstance();\n    }\n  }\n\n  filterStyles(html: string): string {\n    html = html.replace('position: fixed;', '');\n    return html;\n  }\n}\n","<div\n  class=\"angular-editor\"\n  #angularEditor\n  [style.width]=\"config.width\"\n  [style.minWidth]=\"config.minWidth\"\n  [ngClass]=\"{\n     'bottom': config.toolbarPosition === 'bottom'\n     }\"\n>\n  <angular-editor-toolbar\n    #editorToolbar\n    [id]=\"id\"\n    [uploadUrl]=\"config.uploadUrl\"\n    [upload]=\"config.upload\"\n    [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\n    [fonts]=\"getFonts()\"\n    [customClasses]=\"config.customClasses\"\n    [defaultFontName]=\"config.defaultFontName\"\n    [defaultFontSize]=\"config.defaultFontSize\"\n    [hiddenButtons]=\"config.toolbarHiddenButtons\"\n    (execute)=\"executeCommand($event)\"\n  >\n    <ng-container\n      [ngTemplateOutlet]=\"customButtonsTemplateRef\"\n      [ngTemplateOutletContext]=\"{ executeCommandFn: this.executeCommandFn}\"\n    >\n    </ng-container>\n  </angular-editor-toolbar>\n\n  <div\n    class=\"angular-editor-wrapper\"\n    #editorWrapper\n  >\n    <div\n      #editor\n      class=\"angular-editor-textarea\"\n      [attr.contenteditable]=\"config.editable\"\n      [attr.tabindex]=\"disabled ? -1 : tabIndex\"\n      [attr.translate]=\"config.translate\"\n      [attr.spellcheck]=\"config.spellcheck\"\n      [attr.dir]=\"config.textDirection\"\n      [style.height]=\"config.height\"\n      [style.minHeight]=\"config.minHeight\"\n      [style.maxHeight]=\"config.maxHeight\"\n      [style.outline]=\"config.outline === false ? 'none': undefined\"\n      (input)=\"onContentChange($any($event.target))\"\n      (focus)=\"onTextAreaFocus($event)\"\n      (blur)=\"onTextAreaBlur($event)\"\n      (click)=\"exec()\"\n      (keyup)=\"exec()\"\n      (mouseout)=\"onTextAreaMouseOut($event)\"\n      (paste)=\"onPaste($event)\"\n    >\n    </div>\n    <span class=\"angular-editor-placeholder\">{{ placeholder || config['placeholder'] }}</span>\n  </div>\n</div>\n","import {NgModule} from '@angular/core';\nimport {AngularEditorComponent} from './editor/angular-editor.component';\nimport {AeToolbarComponent} from './ae-toolbar/ae-toolbar.component';\nimport {FormsModule, ReactiveFormsModule} from '@angular/forms';\nimport {CommonModule} from '@angular/common';\nimport { AeSelectComponent } from './ae-select/ae-select.component';\nimport {AeButtonComponent} from \"./ae-button/ae-button.component\";\nimport { AeToolbarSetComponent } from './ae-toolbar-set/ae-toolbar-set.component';\n\n@NgModule({\n  imports: [\n    CommonModule, FormsModule, ReactiveFormsModule\n  ],\n  declarations: [AngularEditorComponent, AeToolbarComponent, AeSelectComponent, AeButtonComponent, AeToolbarSetComponent],\n  exports: [AngularEditorComponent, AeToolbarComponent, AeButtonComponent, AeToolbarSetComponent]\n})\nexport class AngularEditorModule {\n}\n","/*\n * Public API Surface of angular-editor\n */\n\nexport * from './lib/angular-editor.service';\nexport * from './lib/editor/angular-editor.component';\nexport * from './lib/ae-button/ae-button.component';\nexport * from './lib/ae-toolbar-set/ae-toolbar-set.component';\nexport * from './lib/ae-select/ae-select.component';\nexport * from './lib/ae-toolbar/ae-toolbar.component';\nexport * from './lib/angular-editor.module';\nexport { AngularEditorConfig, CustomClass } from './lib/config';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4.AeSelectComponent","i5.AeButtonComponent","i6.AeToolbarSetComponent","i1.AngularEditorService","i3","i4.AeToolbarComponent"],"mappings":"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"}