{"version":3,"file":"geargroup-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/positioning.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/angular-editor-toolbar.component.ts","../../../projects/angular-editor/src/lib/angular-editor-toolbar.component.html","../../../projects/angular-editor/src/lib/angular-editor.component.ts","../../../projects/angular-editor/src/lib/angular-editor.component.html","../../../projects/angular-editor/src/lib/angular-editor.module.ts","../../../projects/angular-editor/src/public-api.ts","../../../projects/angular-editor/src/geargroup-angular-editor.ts"],"sourcesContent":["import { DOCUMENT, KeyValue } from '@angular/common';\nimport { HttpClient, HttpEvent } from '@angular/common/http';\nimport { ElementRef, Inject, Injectable, Renderer2, RendererFactory2 } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { CustomClass } from './config';\n\nexport interface UploadResponse {\n  imageUrl: string;\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AngularEditorService {\n  savedSelection: Range | null;\n  selectedText: string;\n  uploadUrl: string;\n  uploadWithCredentials: boolean;\n  private renderer: Renderer2;\n  textArea?: ElementRef;\n\n  constructor(private http: HttpClient, @Inject(DOCUMENT) private doc: any, rendererFactory: RendererFactory2) {\n    this.renderer = rendererFactory.createRenderer(null, null);\n  }\n\n  setTextArea(textArea: ElementRef) {\n    this.textArea = textArea;\n  }\n\n  /**\n   * Executed command from editor header buttons exclude toggleEditorMode\n   * @param command string from triggerCommand\n   */\n  executeCommand(command: 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, null);\n  }\n\n  insertVariable(variable: KeyValue<string, string>) {\n    const variableSpanElement: Element = this.renderer.createElement('span');\n    this.renderer.setAttribute(variableSpanElement, 'yuz-var', variable.key);\n    this.renderer.addClass(variableSpanElement, 'yuz-var');\n\n    const userSelection = window.getSelection();\n    const selectedTextRange = userSelection.getRangeAt(0);\n    selectedTextRange.surroundContents(variableSpanElement);\n\n    variableSpanElement.innerHTML = variable.value;\n    const preSpan = this.renderer.createElement('span');\n    const postSpan = this.renderer.createElement('span');\n    variableSpanElement.before(preSpan);\n    variableSpanElement.after(postSpan);\n\n    preSpan.innerHTML = '&#8203;';\n    postSpan.innerHTML = '&#8203;';\n\n    var range = document.createRange();\n    range.setStartBefore(preSpan);\n    range.setEndAfter(postSpan);\n\n    userSelection.removeAllRanges();\n    userSelection.addRange(range);\n  }\n\n  selectVariable(variableSpanElement: Node) {\n    var range = document.createRange();\n\n    range.setStartAfter(variableSpanElement.previousSibling);\n    range.setEnd(variableSpanElement.nextSibling, 1);\n\n    // range.setStartAfter(variableSpanElement.previousSibling);\n    // range.setStart(range.startContainer, range.startOffset - 1);\n    // range.setEndBefore(variableSpanElement.nextSibling);\n    // range.setEnd(range.endContainer, range.endOffset + 11);\n\n    const userSelection = window.getSelection();\n    userSelection.removeAllRanges();\n    userSelection.addRange(range);\n\n    variableSpanElement.nextSibling;\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    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  /**\n   * Upload file to uploadUrl\n   * @param file The file\n   */\n  uploadImage(file: File): Observable<HttpEvent<UploadResponse>> {\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  createCustomClass(customClass: CustomClass) {\n    let newTag = this.selectedText;\n    if (customClass) {\n      const tagName = customClass.tag ? customClass.tag : 'span';\n      newTag = '<' + tagName + ' class=\"' + customClass.class + '\">' + this.selectedText + '</' + tagName + '>';\n    }\n    this.insertHtml(newTag);\n  }\n\n  insertVideo(videoUrl: string) {\n    if (videoUrl.match('www.youtube.com')) {\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    const id = videoUrl.split('v=')[1];\n    const imageUrl = `https://img.youtube.com/vi/${id}/0.jpg`;\n    const thumbnail = `\n      <div style='position: relative'>\n        <img style='position: absolute; left:200px; top:140px'\n             src=\"https://img.icons8.com/color/96/000000/youtube-play.png\"/>\n        <a href='${videoUrl}' target='_blank'>\n          <img src=\"${imageUrl}\" alt=\"click to watch\"/>\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 && 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 { IconProp } from '@fortawesome/fontawesome-svg-core';\n\nexport interface CustomClass {\n  name: string;\n  class: string;\n  tag?: string;\n}\n\nexport interface CustomButton {\n  customButtonId: string;\n  faIcon: IconProp; // ex: ['fas', 'search']\n  onClick: () => void;\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  uploadWithCredentials?: boolean;\n  fonts?: Font[];\n  customButtons?: CustomButton[];\n  customClasses?: CustomClass[];\n  sanitize?: boolean;\n  toolbarPosition?: 'top' | 'bottom' | 'floating';\n  outline?: boolean;\n  toolbarHiddenButtons?: string[][];\n  toolbarBgClass?: string;\n  toolbarBtnClass?: string;\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","interface PositioningRect {\n  width: number;\n  height: number;\n  top: number;\n  bottom: number;\n  left: number;\n  right: number;\n}\n\nexport class Positioning {\n  private getAllStyles(element: HTMLElement) {\n    return window.getComputedStyle(element);\n  }\n\n  private getStyle(element: HTMLElement, prop: string): string {\n    return this.getAllStyles(element)[prop];\n  }\n\n  private isStaticPositioned(element: HTMLElement): boolean {\n    return (this.getStyle(element, 'position') || 'static') === 'static';\n  }\n\n  private offsetParent(element: HTMLElement): HTMLElement {\n    let offsetParentEl = <HTMLElement>element.offsetParent || document.documentElement;\n\n    while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {\n      offsetParentEl = <HTMLElement>offsetParentEl.offsetParent;\n    }\n\n    return offsetParentEl || document.documentElement;\n  }\n\n  private position(element: HTMLElement, round = true): PositioningRect {\n    let elPosition: PositioningRect;\n    let parentOffset: PositioningRect = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 };\n\n    if (this.getStyle(element, 'position') === 'fixed') {\n      const boundingRect = element.getBoundingClientRect();\n      elPosition = {\n        top: boundingRect.top,\n        bottom: boundingRect.bottom,\n        left: boundingRect.left,\n        right: boundingRect.right,\n        height: boundingRect.height,\n        width: boundingRect.width,\n      };\n    } else {\n      const offsetParentEl = this.offsetParent(element);\n\n      elPosition = this.offset(element, false);\n\n      if (offsetParentEl !== document.documentElement) {\n        parentOffset = this.offset(offsetParentEl, false);\n      }\n\n      parentOffset.top += offsetParentEl.clientTop;\n      parentOffset.left += offsetParentEl.clientLeft;\n    }\n\n    elPosition.top -= parentOffset.top;\n    elPosition.bottom -= parentOffset.top;\n    elPosition.left -= parentOffset.left;\n    elPosition.right -= parentOffset.left;\n\n    if (round) {\n      elPosition.top = Math.round(elPosition.top);\n      elPosition.bottom = Math.round(elPosition.bottom);\n      elPosition.left = Math.round(elPosition.left);\n      elPosition.right = Math.round(elPosition.right);\n    }\n\n    return elPosition;\n  }\n\n  private offset(element: HTMLElement, round = true): PositioningRect {\n    const elBcr = element.getBoundingClientRect();\n    const viewportOffset = {\n      top: window.pageYOffset - document.documentElement.clientTop,\n      left: window.pageXOffset - document.documentElement.clientLeft,\n    };\n\n    let elOffset = {\n      height: elBcr.height || element.offsetHeight,\n      width: elBcr.width || element.offsetWidth,\n      top: elBcr.top + viewportOffset.top,\n      bottom: elBcr.bottom + viewportOffset.top,\n      left: elBcr.left + viewportOffset.left,\n      right: elBcr.right + viewportOffset.left,\n    };\n\n    if (round) {\n      elOffset.height = Math.round(elOffset.height);\n      elOffset.width = Math.round(elOffset.width);\n      elOffset.top = Math.round(elOffset.top);\n      elOffset.bottom = Math.round(elOffset.bottom);\n      elOffset.left = Math.round(elOffset.left);\n      elOffset.right = Math.round(elOffset.right);\n    }\n\n    return elOffset;\n  }\n\n  /*\n    Return false if the element to position is outside the viewport\n  */\n  positionElements(hostElement: HTMLElement, targetElement: HTMLElement, placement: string, appendToBody?: boolean): boolean {\n    const [placementPrimary = 'top', placementSecondary = 'center'] = placement.split('-');\n\n    const hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);\n    const targetElStyles = this.getAllStyles(targetElement);\n\n    const marginTop = parseFloat(targetElStyles.marginTop);\n    const marginBottom = parseFloat(targetElStyles.marginBottom);\n    const marginLeft = parseFloat(targetElStyles.marginLeft);\n    const marginRight = parseFloat(targetElStyles.marginRight);\n\n    let topPosition = 0;\n    let leftPosition = 0;\n\n    switch (placementPrimary) {\n      case 'top':\n        topPosition = hostElPosition.top - (targetElement.offsetHeight + marginTop + marginBottom);\n        break;\n      case 'bottom':\n        topPosition = hostElPosition.top + hostElPosition.height;\n        break;\n      case 'left':\n        leftPosition = hostElPosition.left - (targetElement.offsetWidth + marginLeft + marginRight);\n        break;\n      case 'right':\n        leftPosition = hostElPosition.left + hostElPosition.width;\n        break;\n    }\n\n    switch (placementSecondary) {\n      case 'top':\n        topPosition = hostElPosition.top;\n        break;\n      case 'bottom':\n        topPosition = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;\n        break;\n      case 'left':\n        leftPosition = hostElPosition.left;\n        break;\n      case 'right':\n        leftPosition = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;\n        break;\n      case 'center':\n        if (placementPrimary === 'top' || placementPrimary === 'bottom') {\n          leftPosition = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2;\n        } else {\n          topPosition = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2;\n        }\n        break;\n    }\n\n    /// The translate3d/gpu acceleration render a blurry text on chrome, the next line is commented until a browser fix\n    // targetElement.style.transform = `translate3d(${Math.round(leftPosition)}px, ${Math.floor(topPosition)}px, 0px)`;\n    targetElement.style.transform = `translate(${Math.round(leftPosition)}px, ${Math.round(topPosition)}px)`;\n\n    // Check if the targetElement is inside the viewport\n    const targetElBCR = targetElement.getBoundingClientRect();\n    const html = document.documentElement;\n    const windowHeight = window.innerHeight || html.clientHeight;\n    const windowWidth = window.innerWidth || html.clientWidth;\n\n    return targetElBCR.left >= 0 && targetElBCR.top >= 0 && targetElBCR.right <= windowWidth && targetElBCR.bottom <= windowHeight;\n  }\n}\n\nconst placementSeparator = /\\s+/;\nexport const positionService = new Positioning();\n\n/*\n * Accept the placement array and applies the appropriate placement dependent on the viewport.\n * Returns the applied placement.\n * In case of auto placement, placements are selected in order\n *   'top', 'bottom', 'left', 'right',\n *   'top-left', 'top-right',\n *   'bottom-left', 'bottom-right',\n *   'left-top', 'left-bottom',\n *   'right-top', 'right-bottom'.\n * */\nexport function positionElements(\n  hostElement: HTMLElement,\n  targetElement: HTMLElement,\n  placement: string | Placement | PlacementArray,\n  appendToBody?: boolean,\n  baseClass?: string\n): Placement | null {\n  let placementVals: Array<Placement> = Array.isArray(placement) ? placement : (placement.split(placementSeparator) as Array<Placement>);\n\n  const allowedPlacements = [\n    'top',\n    'bottom',\n    'left',\n    'right',\n    'top-left',\n    'top-right',\n    'bottom-left',\n    'bottom-right',\n    'left-top',\n    'left-bottom',\n    'right-top',\n    'right-bottom',\n  ];\n\n  const classList = targetElement.classList;\n  const addClassesToTarget = (targetPlacement: Placement): Array<string> => {\n    const [primary, secondary] = targetPlacement.split('-');\n    const classes: string[] = [];\n    if (baseClass) {\n      classes.push(`${baseClass}-${primary}`);\n      if (secondary) {\n        classes.push(`${baseClass}-${primary}-${secondary}`);\n      }\n\n      classes.forEach((classname) => {\n        classList.add(classname);\n      });\n    }\n    return classes;\n  };\n\n  // Remove old placement classes to avoid issues\n  if (baseClass) {\n    allowedPlacements.forEach((placementToRemove) => {\n      classList.remove(`${baseClass}-${placementToRemove}`);\n    });\n  }\n\n  // replace auto placement with other placements\n  let hasAuto = placementVals.findIndex((val) => val === 'auto');\n  if (hasAuto >= 0) {\n    allowedPlacements.forEach(function (obj) {\n      if (placementVals.find((val) => val.search('^' + obj) !== -1) == null) {\n        placementVals.splice(hasAuto++, 1, obj as Placement);\n      }\n    });\n  }\n\n  // coordinates where to position\n\n  // Required for transform:\n  const style = targetElement.style;\n  style.position = 'absolute';\n  style.top = '0';\n  style.left = '0';\n  style['will-change'] = 'transform';\n\n  let testPlacement: Placement | null = null;\n  let isInViewport = false;\n  for (testPlacement of placementVals) {\n    let addedClasses = addClassesToTarget(testPlacement);\n\n    if (positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody)) {\n      isInViewport = true;\n      break;\n    }\n\n    // Remove the baseClasses for further calculation\n    if (baseClass) {\n      addedClasses.forEach((classname) => {\n        classList.remove(classname);\n      });\n    }\n  }\n\n  if (!isInViewport) {\n    // If nothing match, the first placement is the default one\n    testPlacement = placementVals[0];\n    addClassesToTarget(testPlacement);\n    positionService.positionElements(hostElement, targetElement, testPlacement, appendToBody);\n  }\n\n  return testPlacement;\n}\n\nexport type Placement =\n  | 'auto'\n  | 'top'\n  | 'bottom'\n  | 'left'\n  | 'right'\n  | 'top-left'\n  | 'top-right'\n  | 'bottom-left'\n  | 'bottom-right'\n  | 'left-top'\n  | 'left-bottom'\n  | 'right-top'\n  | 'right-bottom';\n\nexport type PlacementArray = Placement | Array<Placement> | string;\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  encapsulation: ViewEncapsulation.None,\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AeSelectComponent),\n      multi: true,\n    },\n  ],\n})\nexport class AeSelectComponent implements OnInit, ControlValueAccessor {\n  @Input() options: SelectOption[] = [];\n  // tslint:disable-next-line:no-input-rename\n  @Input('hidden') isHidden: boolean;\n\n  @Input() selectBtnClass: string;\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  // tslint:disable-next-line:no-output-native no-output-rename\n  @Output('change') changeEvent = new EventEmitter();\n\n  @ViewChild('labelButton', { static: true }) labelButton: ElementRef;\n\n  constructor(private elRef: ElementRef, private r: Renderer2) {}\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    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  onTouched: any = () => {};\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  _handleEnter($event) {\n    this.optionSelect(this.options[this.optionId], $event);\n  }\n\n  _handleTab($event) {}\n\n  _handleBackspace() {}\n}\n","<div ngbDropdown>\n  <button ngbDropdownToggle type=\"button\" role=\"button\" id=\"selectDropDown\" [class]=\"selectBtnClass\">\n    {{label}}\n  </button>\n  <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\">\n    <button ngbDropdownItem type=\"button\" role=\"button\" *ngFor=\"let item of options; let i = index\"\n      (click)=\"optionSelect(item, $event)\"\n      [ngClass]=\"{'selected': item.value === value, 'focused': i === optionId}\">\n      {{item.label}}\n    </button>\n    <div class=\"dropdown-item\" *ngIf=\"!options.length\">No items for select</div>\n  </div>\n</div>","import { DOCUMENT } from '@angular/common';\nimport { HttpResponse } from '@angular/common/http';\nimport { Component, ElementRef, EventEmitter, Inject, Input, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\nimport { SelectOption } from './ae-select/ae-select.component';\nimport { AngularEditorService } from './angular-editor.service';\nimport { CustomButton, CustomClass } from './config';\n\n@Component({\n  selector: 'angular-editor-toolbar',\n  templateUrl: './angular-editor-toolbar.component.html',\n})\nexport class AngularEditorToolbarComponent implements OnInit {\n  nativeElement: HTMLElement;\n\n  textColorToggle = false;\n  textColor: string = '#000';\n  backgroundColorToggle = false;\n  backgroundColor: string = '#000000ff';\n\n  htmlMode = false;\n  linkSelected = false;\n\n  variableName?: string;\n  variableNode?: Node;\n\n  block = 'default';\n  fontName = 'Times New Roman';\n  fontSize = '3';\n  foreColour;\n  backColor;\n\n  variables: SelectOption[] = [\n    {\n      label: 'Family name',\n      value: 'familyName',\n    },\n    {\n      label: 'Given name',\n      value: 'givenName',\n    },\n  ];\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: 'Heading 7',\n      value: 'h7',\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  // tslint:disable-next-line:variable-name\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 = [\n    'bold',\n    'italic',\n    'underline',\n    'strikeThrough',\n    'subscript',\n    'superscript',\n    'justifyLeft',\n    'justifyCenter',\n    'justifyRight',\n    'justifyFull',\n    'indent',\n    'outdent',\n    'insertUnorderedList',\n    'insertOrderedList',\n    'link',\n  ];\n  activeButtons: string[];\n\n  @Input() id: string;\n  @Input() uploadUrl: string;\n  @Input() showToolbar: boolean;\n  @Input() fonts: SelectOption[] = [{ label: '', value: '' }];\n\n  @Input() toolbarBgClass: string;\n  @Input() toolbarBtnClass: string;\n  @Input() customButtons: CustomButton[];\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    @Inject(DOCUMENT) private doc: any,\n    elementRef: ElementRef<HTMLElement>\n  ) {\n    this.nativeElement = elementRef.nativeElement;\n  }\n\n  ngOnInit() {\n    this.activeButtons = this.buttons.filter((it) => !this.isButtonHidden(it));\n    this.toolbarBgClass = this.toolbarBgClass ? this.toolbarBgClass : '';\n    this.toolbarBtnClass = this.toolbarBtnClass ? this.toolbarBtnClass : 'btn btn-light';\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.activeButtons.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\n    this.linkSelected = nodes.findIndex((x) => x.nodeName === 'A') > -1;\n\n    const variableNode = nodes.find((it) => !!(it as Element).attributes?.getNamedItem('yuz-var'));\n    if (variableNode) {\n      this.editorService.selectVariable(variableNode);\n    }\n\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  insertVariable(selectValue: string) {\n    const variable = this.variables.find((it) => it.value === selectValue);\n    if (variable) {\n      this.editorService.insertVariable({\n        key: variable.value,\n        value: variable.label,\n      });\n    }\n    this.execute.emit('contentChange');\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      if (parent.href !== '') {\n        url = parent.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.uploadUrl) {\n        this.editorService.uploadImage(file).subscribe((e) => {\n          if (e instanceof HttpResponse) {\n            this.editorService.insertImage(e.body.imageUrl);\n            event.srcElement.value = null;\n          }\n        });\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        };\n        reader.readAsDataURL(file);\n      }\n    }\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","<div *ngIf=\"showToolbar\" [class]=\"toolbarBgClass\">\n  <div class=\"btn-group m-1\">\n    <button\n      type=\"button\"\n      title=\"Undo\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('undo')\"\n      [hidden]=\"isButtonHidden('undo')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'undo']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      type=\"button\"\n      title=\"Redo\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('redo')\"\n      [hidden]=\"isButtonHidden('redo')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'redo']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n  <div class=\"btn-group m-1\">\n    <button\n      [id]=\"'bold-' + id\"\n      type=\"button\"\n      title=\"Bold\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('bold')\"\n      [disabled]=\"htmlMode\"\n      *ngIf=\"!isButtonHidden('bold')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'bold']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'italic-' + id\"\n      type=\"button\"\n      title=\"Italic\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('italic')\"\n      [disabled]=\"htmlMode\"\n      *ngIf=\"!isButtonHidden('italic')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'italic']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'underline-' + id\"\n      type=\"button\"\n      title=\"Underline\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('underline')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('underline')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'underline']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'strikeThrough-' + id\"\n      type=\"button\"\n      title=\"Strikethrough\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('strikeThrough')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('strikeThrough')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'strikethrough']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'subscript-' + id\"\n      type=\"button\"\n      title=\"Subscript\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('subscript')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('subscript')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'subscript']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'superscript-' + id\"\n      type=\"button\"\n      title=\"Superscript\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('superscript')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('superscript')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'superscript']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n  <div class=\"btn-group m-1\">\n    <button\n      [id]=\"'justifyLeft-' + id\"\n      type=\"button\"\n      title=\"Justify Left\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('justifyLeft')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('justifyLeft')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'align-left']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'justifyCenter-' + id\"\n      type=\"button\"\n      title=\"Justify Center\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('justifyCenter')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('justifyCenter')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'align-center']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'justifyRight-' + id\"\n      type=\"button\"\n      title=\"Justify Right\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('justifyRight')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('justifyRight')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'align-right']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'justifyFull-' + id\"\n      type=\"button\"\n      title=\"Justify Full\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('justifyFull')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('justifyFull')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'align-justify']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n  <div class=\"btn-group m-1\">\n    <button\n      [id]=\"'indent-' + id\"\n      type=\"button\"\n      title=\"Indent\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('indent')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('indent')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'indent']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'outdent-' + id\"\n      type=\"button\"\n      title=\"Outdent\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('outdent')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('outdent')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'outdent']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n  <div class=\"btn-group m-1\">\n    <button\n      [id]=\"'insertUnorderedList-' + id\"\n      type=\"button\"\n      title=\"Unordered List\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('insertUnorderedList')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('insertUnorderedList')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'list-ul']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'insertOrderedList-' + id\"\n      type=\"button\"\n      title=\"Ordered List\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('insertOrderedList')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('insertOrderedList')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'list-ol']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n  <div class=\"btn-group m-1\">\n    <ae-select\n      class=\"select-heading\"\n      [selectBtnClass]=\"toolbarBtnClass\"\n      [options]=\"headings\"\n      [(ngModel)]=\"block\"\n      (change)=\"triggerCommand(block)\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('heading')\"\n      tabindex=\"-1\"\n    ></ae-select>\n  </div>\n  <div class=\"btn-group m-1\">\n    <ae-select\n      class=\"select-font\"\n      [selectBtnClass]=\"toolbarBtnClass\"\n      [options]=\"fonts\"\n      [(ngModel)]=\"fontName\"\n      (change)=\"setFontName(fontName)\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('fontName')\"\n      tabindex=\"-1\"\n    ></ae-select>\n  </div>\n  <div [ngClass]=\"{ 'btn-group m-1': !isButtonHidden('fontSize') }\" [ngStyle]=\"{ display: 'inline-block' }\">\n    <ae-select\n      class=\"select-font-size\"\n      [selectBtnClass]=\"toolbarBtnClass\"\n      [options]=\"fontSizes\"\n      [(ngModel)]=\"fontSize\"\n      (change)=\"setFontSize(fontSize)\"\n      [hidden]=\"isButtonHidden('fontSize')\"\n      tabindex=\"-1\"\n    >\n    </ae-select>\n  </div>\n  <div class=\"btn-group m-1\">\n    <button\n      [id]=\"'foregroundColorPicker-' + id\"\n      type=\"button\"\n      [class]=\"toolbarBtnClass\"\n      [style.color]=\"textColor\"\n      (click)=\"textColorToggle = !textColorToggle\"\n      title=\"Text Color\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('textColor')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'font']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <input\n      #textColorInput\n      class=\"invisible\"\n      style=\"width: 0px !important; padding: 0px !important; border: none !important\"\n      [cpIgnoredElements]=\"[textColorInput]\"\n      [(cpToggle)]=\"textColorToggle\"\n      [(colorPicker)]=\"textColor\"\n      (colorPickerChange)=\"insertColor($event, 'textColor')\"\n    />\n    <button\n      [id]=\"'backgroundColorPicker-' + id\"\n      type=\"button\"\n      [class]=\"toolbarBtnClass\"\n      [style.color]=\"backgroundColor\"\n      (click)=\"backgroundColorToggle = !backgroundColorToggle\"\n      title=\"Background Color\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('backgroundColor')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'highlighter']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n  <!-- Place it after the btn group div so that it does not interfer with rounding. -->\n  <input\n    #backgroundColorInput\n    class=\"invisible\"\n    style=\"width: 0px !important; padding: 0px !important; border: none !important\"\n    [cpIgnoredElements]=\"[backgroundColorInput]\"\n    [(cpToggle)]=\"backgroundColorToggle\"\n    [(colorPicker)]=\"backgroundColor\"\n    (colorPickerChange)=\"insertColor($event, 'backgroundColor')\"\n  />\n  <div *ngIf=\"_customClasses\" class=\"btn-group m-1\">\n    <ae-select\n      class=\"select-custom-style\"\n      [selectBtnClass]=\"toolbarBtnClass\"\n      [options]=\"customClassList\"\n      [(ngModel)]=\"customClassId\"\n      (change)=\"setCustomClass(customClassId)\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('customClasses')\"\n      tabindex=\"-1\"\n    ></ae-select>\n  </div>\n  <div class=\"btn-group m-1\">\n    <ae-select\n      class=\"select-heading\"\n      [selectBtnClass]=\"toolbarBtnClass\"\n      [options]=\"variables\"\n      [(ngModel)]=\"variableName\"\n      (change)=\"insertVariable($event)\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('heading')\"\n      tabindex=\"-1\"\n    ></ae-select>\n  </div>\n  <div class=\"btn-group m-1\">\n    <button\n      [id]=\"'link-' + id\"\n      type=\"button\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"insertUrl()\"\n      title=\"Insert Link\"\n      [disabled]=\"isLinkButtonDisabled\"\n      [hidden]=\"isButtonHidden('link')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'link']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'unlink-' + id\"\n      type=\"button\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('unlink')\"\n      title=\"Unlink\"\n      [disabled]=\"htmlMode || !linkSelected\"\n      [hidden]=\"isButtonHidden('unlink')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'unlink']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <input style=\"display: none\" accept=\"image/*\" type=\"file\" (change)=\"onFileChanged($event)\" #fileInput />\n    <button\n      [id]=\"'insertImage-' + id\"\n      type=\"button\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"fileInput.click()\"\n      title=\"Insert Image\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('insertImage')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'image']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <ng-container *ngIf=\"customButtons\">\n      <button\n        *ngFor=\"let button of customButtons\"\n        [id]=\"button.customButtonId + '-' + id\"\n        type=\"button\"\n        [class]=\"toolbarBtnClass\"\n        (click)=\"button.onClick()\"\n        [disabled]=\"htmlMode\"\n        tabindex=\"-1\"\n      >\n        <fa-icon [icon]=\"button.faIcon\" [fixedWidth]=\"true\"></fa-icon>\n      </button>\n    </ng-container>\n    <button\n      [id]=\"'insertVideo-' + id\"\n      type=\"button\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"insertVideo()\"\n      title=\"Insert Video\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('insertVideo')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'video']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n    <button\n      [id]=\"'insertHorizontalRule-' + id\"\n      type=\"button\"\n      title=\"Horizontal Line\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('insertHorizontalRule')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('insertHorizontalRule')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'minus']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n  <div class=\"btn-group m-1\">\n    <button\n      [id]=\"'clearFormatting-' + id\"\n      type=\"button\"\n      title=\"Clear Formatting\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('removeFormat')\"\n      [disabled]=\"htmlMode\"\n      [hidden]=\"isButtonHidden('removeFormat')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'remove-format']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n  <div class=\"btn-group m-1\">\n    <button\n      [id]=\"'toggleEditorMode-' + id\"\n      type=\"button\"\n      title=\"HTML Code\"\n      [class]=\"toolbarBtnClass\"\n      (click)=\"triggerCommand('toggleEditorMode')\"\n      [hidden]=\"isButtonHidden('toggleEditorMode')\"\n      tabindex=\"-1\"\n    >\n      <fa-icon [icon]=\"['fas', 'code']\" [fixedWidth]=\"true\"></fa-icon>\n    </button>\n  </div>\n</div>\n","import { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit,\n  Attribute,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostBinding,\n  HostListener,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  SecurityContext,\n  ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NgDompurifySanitizer } from '@tinkoff/ng-dompurify';\nimport { Subscription } from 'rxjs';\nimport { AngularEditorToolbarComponent } from './angular-editor-toolbar.component';\nimport { AngularEditorService } from './angular-editor.service';\nimport { AngularEditorConfig, angularEditorConfig } from './config';\nimport { positionElements } from './positioning';\nimport { isDefined } from './utils';\n\n@Component({\n  selector: 'angular-editor',\n  templateUrl: './angular-editor.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => AngularEditorComponent),\n      multi: true,\n    },\n  ],\n})\nexport class AngularEditorComponent implements OnInit, ControlValueAccessor, AfterViewInit, OnDestroy {\n  private zoneSubscription?: Subscription;\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  floating = 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   * A selector specifying the element the dropdown should be appended to.\n   * Currently only supports \"body\".\n   *\n   * @since 4.1.0\n   */\n  @Input() container: null | 'body';\n\n  @Output() html;\n\n  @ViewChild('angularEditor', { static: true }) angularEditor: ElementRef;\n  @ViewChild('editor', { static: true }) textArea: ElementRef;\n  @ViewChild('editorWrapper', { static: true }) editorWrapper: ElementRef;\n  @ViewChild('editorToolbar') editorToolbar: AngularEditorToolbarComponent;\n  private _bodyContainer: HTMLElement | null = null;\n\n  @Output() viewMode = new EventEmitter<boolean>();\n\n  /** emits `blur` event when focused out from the textarea */\n  // tslint:disable-next-line:no-output-native no-output-rename\n  @Output('blur') blurEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n  /** emits `focus` event when focused in to the textarea */\n  // tslint:disable-next-line:no-output-rename 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: NgDompurifySanitizer,\n    private cdRef: ChangeDetectorRef,\n    @Attribute('tabindex') defaultTabIndex: string,\n    @Attribute('autofocus') private autoFocus: any,\n    private elementRef: ElementRef<HTMLElement>,\n    private ngZone: NgZone\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    this.floating = this.config.toolbarPosition === 'floating';\n    if (this.floating) {\n      this.zoneSubscription = this.ngZone.onStable.subscribe(() => {\n        this.positionToolbar();\n      });\n    }\n  }\n\n  ngAfterViewInit() {\n    this.resetContainer();\n    if (isDefined(this.autoFocus)) {\n      this.focus();\n    }\n  }\n\n  /**\n   * Executed command from editor header buttons\n   * @param command string from triggerCommand\n   */\n  executeCommand(command: string) {\n    this.focus();\n\n    switch (command) {\n      case '': // noop\n        return;\n      case 'contentChange':\n        this.onContentChange(this.textArea.nativeElement);\n        break;\n      case 'toggleEditorMode':\n        this.toggleEditorMode(this.modeVisual);\n        break;\n      case 'clear':\n        this.editorService.removeSelectedElements(this.getCustomTags());\n        this.onContentChange(this.textArea.nativeElement);\n        break;\n      case 'default':\n        this.editorService.removeSelectedElements('h1,h2,h3,h4,h5,h6,p,pre');\n        this.onContentChange(this.textArea.nativeElement);\n        break;\n      default:\n        this.editorService.executeCommand(command);\n        break;\n    }\n    this.exec();\n  }\n\n  /**\n   * focus event\n   */\n  onTextAreaFocus(event: FocusEvent): void {\n    if (this.focused) {\n      event.stopPropagation();\n      return;\n    }\n    this.applyContainer(this.container);\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.resetContainer();\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.applyContainer(this.container);\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(\n        this.config.sanitize || this.config.sanitize === undefined ? this.sanitizer.sanitize(SecurityContext.HTML, html) : html\n      );\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    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    this.r.setProperty(this.textArea.nativeElement, 'innerHTML', normalizedValue);\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    } 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        this.r.setProperty(editableElement, 'innerHTML', editableElement.innerText);\n      } else {\n        oContent = this.doc.createRange();\n        oContent.selectNodeContents(editableElement.firstChild);\n        this.r.setProperty(editableElement, 'innerHTML', oContent.toString());\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 !== this.textArea.nativeElement) {\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    this.resetContainer();\n    this.zoneSubscription?.unsubscribe();\n  }\n\n  filterStyles(html: string): string {\n    html = html.replace('position: fixed;', '');\n    return html;\n  }\n\n  private positionToolbar() {\n    const menu = this.editorToolbar;\n    if (this.focused && menu) {\n      positionElements(\n        this.angularEditor.nativeElement,\n        this._bodyContainer || this.editorToolbar.nativeElement,\n        ['top'],\n        this.container === 'body'\n      );\n    }\n  }\n\n  private resetContainer() {\n    const renderer = this.r;\n    if (this.editorToolbar) {\n      const editorElement = this.angularEditor.nativeElement;\n      const toolbarMenuElement = this.editorToolbar.nativeElement;\n\n      if (this.config.toolbarPosition === 'top') {\n        renderer.insertBefore(editorElement, toolbarMenuElement, this.editorWrapper.nativeElement);\n      } else {\n        renderer.appendChild(editorElement, toolbarMenuElement);\n      }\n      renderer.removeStyle(toolbarMenuElement, 'position');\n      renderer.removeStyle(toolbarMenuElement, 'transform');\n    }\n    if (this._bodyContainer) {\n      renderer.removeChild(this.doc.body, this._bodyContainer);\n      this._bodyContainer = null;\n    }\n  }\n\n  private applyContainer(container: null | 'body' = null) {\n    if (!this.floating) {\n      return;\n    }\n    this.resetContainer();\n    if (container === 'body') {\n      const renderer = this.r;\n      const toolbarMenuElement = this.editorToolbar.nativeElement;\n      const bodyContainer = (this._bodyContainer = this._bodyContainer || renderer.createElement('div'));\n\n      // Override some styles to have the positioning working\n      renderer.setStyle(bodyContainer, 'position', 'absolute');\n      renderer.setStyle(toolbarMenuElement, 'position', 'static');\n      renderer.setStyle(bodyContainer, 'z-index', '1050');\n\n      renderer.appendChild(bodyContainer, toolbarMenuElement);\n      renderer.appendChild(this.doc.body, bodyContainer);\n    }\n  }\n}\n","<div class=\"angular-editor\" #angularEditor [style.width]=\"config.width\" [style.minWidth]=\"config.minWidth\" (blur)=\"onTextAreaBlur($event)\">\n  <angular-editor-toolbar\n    #editorToolbar\n    [id]=\"id\"\n    [uploadUrl]=\"config.uploadUrl\"\n    [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\n    [fonts]=\"getFonts()\"\n    [customClasses]=\"config.customClasses\"\n    [customButtons]=\"config.customButtons\"\n    [defaultFontName]=\"config.defaultFontName\"\n    [defaultFontSize]=\"config.defaultFontSize\"\n    [hiddenButtons]=\"config.toolbarHiddenButtons\"\n    [toolbarBgClass]=\"config.toolbarBgClass\"\n    [toolbarBtnClass]=\"config.toolbarBtnClass\"\n    (execute)=\"executeCommand($event)\"\n    [class.d-none]=\"floating && !focused\"\n  ></angular-editor-toolbar>\n  <div class=\"angular-editor-wrapper\" #editorWrapper>\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      [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($event.target)\"\n      (focus)=\"onTextAreaFocus($event)\"\n      (click)=\"exec()\"\n      (keyup)=\"exec()\"\n      (mouseout)=\"onTextAreaMouseOut($event)\"\n    ></div>\n    <span class=\"angular-editor-placeholder\">{{ placeholder || config['placeholder'] }}</span>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { FaIconLibrary, FontAwesomeModule } from '@fortawesome/angular-fontawesome';\nimport { faAlignCenter, faAlignJustify, faAlignLeft, faAlignRight, faBold, faCode, faFont, faHighlighter, faImage, faIndent, faItalic, faLink, faListOl, faListUl, faMinus, faOutdent, faRedo, faRemoveFormat, faStrikethrough, faSubscript, faSuperscript, faUnderline, faUndo, faUnlink, faVideo } from '@fortawesome/free-solid-svg-icons';\nimport { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';\nimport { ColorPickerModule } from 'ngx-color-picker';\nimport { AeSelectComponent } from './ae-select/ae-select.component';\nimport { AngularEditorToolbarComponent } from './angular-editor-toolbar.component';\nimport { AngularEditorComponent } from './angular-editor.component';\n\n@NgModule({\n  imports: [\n    CommonModule, FormsModule, ReactiveFormsModule, FontAwesomeModule, NgbDropdownModule, ColorPickerModule\n  ],\n  declarations: [AngularEditorComponent, AngularEditorToolbarComponent, AeSelectComponent],\n  exports: [AngularEditorComponent, AngularEditorToolbarComponent]\n})\nexport class AngularEditorModule {\n  constructor(library: FaIconLibrary) {\n\n    library.addIcons(\n      faItalic,\n      faBold,\n      faSuperscript,\n      faSubscript,\n      faUnderline,\n      faUndo,\n      faAlignRight,\n      faAlignCenter,\n      faAlignLeft,\n      faAlignJustify,\n      faRedo,\n      faStrikethrough,\n      faIndent,\n      faOutdent,\n      faListUl,\n      faListOl,\n      faFont,\n      faLink,\n      faUnlink,\n      faImage,\n      faVideo,\n      faMinus,\n      faRemoveFormat,\n      faCode,\n      faHighlighter,\n\n    );\n  }\n}\n","/*\n * Public API Surface of angular-editor\n */\n\nexport * from './lib/angular-editor.service';\nexport * from './lib/angular-editor.component';\nexport * from './lib/angular-editor-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","i3.AeSelectComponent","i1.AngularEditorService","i3.AngularEditorToolbarComponent"],"mappings":"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"}