{"version":3,"file":"novo-elements-elements-quick-note.mjs","sources":["../../../projects/novo-elements/src/elements/quick-note/extras/quick-note-results/QuickNoteResults.ts","../../../projects/novo-elements/src/elements/quick-note/QuickNote.ts","../../../projects/novo-elements/src/elements/quick-note/QuickNote.module.ts","../../../projects/novo-elements/src/elements/quick-note/novo-elements-elements-quick-note.ts"],"sourcesContent":["// NG2\nimport { ChangeDetectorRef, Component, ElementRef } from '@angular/core';\n// Vendor\nimport { from, Observable } from 'rxjs';\n// APP\nimport { NovoLabelService } from 'novo-elements/services';\nimport { Helpers } from 'novo-elements/utils';\nimport { PickerResults } from 'novo-elements/elements/picker';\n\n@Component({\n    selector: 'quick-note-results',\n    host: {\n        class: 'active',\n    },\n    template: `\n    <novo-loading theme=\"line\" *ngIf=\"isLoading && !matches.length\"></novo-loading>\n    <novo-list *ngIf=\"matches.length > 0\">\n      <novo-list-item\n        *ngFor=\"let match of matches\"\n        (click)=\"selectMatch($event)\"\n        [class.active]=\"match === activeMatch\"\n        (mouseenter)=\"selectActive(match)\"\n      >\n        <item-content>\n          <p [innerHtml]=\"match.label | highlight:term\"></p>\n        </item-content>\n      </novo-list-item>\n    </novo-list>\n    <p class=\"picker-error\" *ngIf=\"hasError\">{{ labels.quickNoteError }}</p>\n    <p class=\"picker-null\" *ngIf=\"!isLoading && !matches.length && !hasError\">{{ labels.quickNoteEmpty }}</p>\n  `,\n    styleUrls: ['./QuickNoteResults.scss'],\n    standalone: false,\n})\nexport class QuickNoteResults extends PickerResults {\n  // Mode that the quick note is in for tagging\n  taggingMode: string = '';\n\n  constructor(element: ElementRef, public labels: NovoLabelService, ref: ChangeDetectorRef) {\n    super(element, labels, ref);\n  }\n\n  get term() {\n    return this._term;\n  }\n\n  set term(value: any) {\n    this._term = value.searchTerm;\n    this.taggingMode = value.taggingMode;\n    this.hasError = false;\n    this.isLoading = true;\n    this.search(value, this.taggingMode).subscribe(\n      (results) => {\n        this.matches = this.isStatic ? this.filterData(results) : results;\n        this.isLoading = false;\n      },\n      () => {\n        this.hasError = true;\n        this.isLoading = false;\n      },\n    );\n  }\n\n  search(term: string, taggingMode): Observable<any> {\n    const searchCall = this.config.options[taggingMode];\n    return from(\n      new Promise((resolve, reject) => {\n        // Check if there is match data\n        if (searchCall) {\n          // Resolve the data\n          if (Array.isArray(searchCall)) {\n            this.isStatic = true;\n            // Arrays are returned immediately\n            resolve(this.structureArray(searchCall));\n          } else if (\n            (searchCall.hasOwnProperty('reject') && searchCall.hasOwnProperty('resolve')) ||\n            Object.getPrototypeOf(searchCall).hasOwnProperty('then')\n          ) {\n            this.isStatic = false;\n            // Promises (ES6 or Deferred) are resolved whenever they resolve\n            searchCall.then(this.structureArray.bind(this)).then(resolve, reject);\n          } else if (typeof searchCall === 'function') {\n            this.isStatic = false;\n            // Promises (ES6 or Deferred) are resolved whenever they resolve\n            searchCall(term).then(this.structureArray.bind(this)).then(resolve, reject);\n          } else {\n            // All other kinds of data are rejected\n            reject('The data provided is not an array or a promise');\n            throw new Error('The data provided is not an array or a promise');\n          }\n        } else {\n          // No data gets rejected\n          reject('error');\n        }\n      }),\n    );\n  }\n\n  /**\n   * @name structureArray\n   * @param collection - the data once getData resolves it\n   *\n   * @description This function structures an array of nodes into an array of objects with a\n   * 'name' field by default.\n   */\n  structureArray(collection: Array<any>) {\n    if (collection && (typeof collection[0] === 'string' || typeof collection[0] === 'number')) {\n      return collection.map((item) => {\n        return {\n          value: item,\n          label: item,\n        };\n      });\n    }\n    return collection.map((data) => {\n      const value = this.config.field ? data[this.config.field[this.taggingMode]] : data.value || data;\n      const label = this.config.format ? Helpers.interpolate(this.config.format[this.taggingMode], data) : data.label || String(value);\n      return { value, label, data };\n    });\n  }\n\n  /**\n   * @name selectMatch\n   * @param event\n   *\n   * @description\n   */\n  selectMatch(event: KeyboardEvent) {\n    if (event) {\n      event.stopPropagation();\n      event.preventDefault();\n    }\n\n    const selected = this.activeMatch;\n    if (selected) {\n      this.parent.onSelected(this.taggingMode, selected);\n      this.parent.hideResults();\n    }\n    return false;\n  }\n}\n","// NG2\nimport {\n  AfterViewInit,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  ViewChild,\n  ViewContainerRef,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ComponentUtils } from 'novo-elements/services';\nimport { Key, OutsideClick } from 'novo-elements/utils';\n// APP\nimport { QuickNoteResults } from './extras/quick-note-results/QuickNoteResults';\n\n// Value accessor for the component (supports ngModel)\nconst QUICK_NOTE_VALUE_ACCESSOR = {\n  provide: NG_VALUE_ACCESSOR,\n  useExisting: forwardRef(() => QuickNoteElement),\n  multi: true,\n};\n\ndeclare const CKEDITOR: any;\n\n@Component({\n    selector: 'novo-quick-note',\n    providers: [QUICK_NOTE_VALUE_ACCESSOR],\n    template: ' <div class=\"quick-note-wrapper\" #wrapper><textarea #host></textarea> <span #results></span></div> ',\n    styleUrls: ['./QuickNote.scss'],\n    standalone: false,\n})\nexport class QuickNoteElement extends OutsideClick implements OnInit, OnDestroy, AfterViewInit {\n  @ViewChild('wrapper', { static: true })\n  public wrapper: ElementRef;\n  @ViewChild('host', { static: true })\n  public host: ElementRef;\n  @ViewChild('results', { read: ViewContainerRef, static: true })\n  results: ViewContainerRef;\n\n  @Input()\n  config: any;\n  @Input()\n  startupFocus: boolean = false;\n  @Input()\n  placeholder: string;\n\n  // Emitter for selects\n  @Output()\n  focus: EventEmitter<any> = new EventEmitter();\n  @Output()\n  blur: EventEmitter<any> = new EventEmitter();\n  @Output()\n  change: EventEmitter<any> = new EventEmitter();\n\n  // The characters that the user enters in order to search for a person/thing to tag\n  private resultsComponent: any;\n  private quickNoteResults: any;\n  private isTagging: boolean;\n  private taggingMode: string;\n  private model: any;\n  private ckeInstance: any;\n  private debounceTimeout: any;\n  private placeholderVisible: boolean = false;\n  private _placeholderElement: any = null;\n\n  private static TOOLBAR_HEIGHT = 40; // in pixels - configured by stylesheet\n\n  private onModelChange: Function = () => {};\n  private onModelTouched: Function = () => {};\n\n  constructor(private zone: NgZone, element: ElementRef, private componentUtils: ComponentUtils) {\n    super(element);\n    // Bind to the active change event from the OutsideClick\n    this.onActiveChange.subscribe((active) => {\n      if (!active) {\n        setTimeout(() => {\n          this.hideResults();\n        });\n      }\n    });\n  }\n\n  public ngOnInit(): void {\n    // Make sure we have a proper config\n    if (!this.config) {\n      throw new Error('No config set for QuickNote!');\n    }\n    // Make sure that we have triggers\n    if (!this.config.triggers) {\n      throw new Error('QuickNote config must supply triggers!');\n    }\n    // Make sure that we have options\n    if (!this.config.options) {\n      throw new Error('QuickNote config must supply options!');\n    }\n    // Allow for callers to use a custom results template class in the config\n    this.resultsComponent = this.config.resultsTemplate || QuickNoteResults;\n  }\n\n  public ngOnDestroy(): void {\n    // Tear down the CKEditor instance\n    if (this.ckeInstance) {\n      this.ckeInstance.focusManager.blur(true); // Remove focus from editor\n      setTimeout(() => {\n        this.ckeInstance.removeAllListeners();\n        CKEDITOR.instances[this.ckeInstance.name].destroy();\n        this.ckeInstance.destroy();\n        this.ckeInstance = null;\n      });\n    }\n  }\n\n  /**\n   * Connect to key/mouse events from CKEditor after the editor has been initialized\n   */\n  public ngAfterViewInit(): void {\n    if (!CKEDITOR) {\n      console.error('Make sure to include CKEditor sources in your dependencies!');\n      return;\n    }\n\n    // Replace the textarea with an instance of CKEditor\n    this.ckeInstance = CKEDITOR.replace(this.host.nativeElement, this.getCKEditorConfig());\n\n    // Set initial value of the note in the editor\n    this.writeValue(this.model);\n\n    // Connect to the key event in CKEditor for showing results dropdown\n    this.ckeInstance.on('key', (event: any) => {\n      if (!this.onKey(event.data.domEvent.$)) {\n        event.cancel();\n      }\n    });\n\n    // Connect to the change event in CKEditor for debouncing user modifications\n    this.ckeInstance.on('change', () => {\n      // Debounce update\n      if (this.debounceTimeout) {\n        clearTimeout(this.debounceTimeout);\n      }\n      this.debounceTimeout = setTimeout(() => {\n        // Run within the context of this angular element since we don't need to cancel event\n        this.zone.run(() => {\n          this.onValueChange();\n        });\n        this.debounceTimeout = null;\n      }, 250);\n    });\n\n    // Propagate blur events from CKEditor to the Element's listeners\n    this.ckeInstance.on('blur', (event: any) => {\n      this.showPlaceholder();\n      this.blur.emit(event);\n    });\n\n    // Propagate blur events from CKEditor to the Element's listeners\n    this.ckeInstance.on('focus', (event: any) => {\n      this.hidePlaceholder();\n      this.focus.emit(event);\n    });\n\n    // Show placeholder if the note is empty, after the editor is instantiated\n    this.ckeInstance.on('instanceReady', (event: any) => {\n      this.showPlaceholder();\n      // Set editor to readOnly\n      if (this.config.readOnly) {\n        this.ckeInstance.setReadOnly(this.config.readOnly);\n      }\n    });\n  }\n\n  // Set touched on blur\n  public onTouched(event?: any) {\n    this.onModelTouched();\n  }\n\n  /**\n   * Handles setting the model and the view from the outside caller or the user's typing\n   *\n   * @param model A model that has a note (html content) and references (array of objects)\n   */\n  public writeValue(model: any): void {\n    // Set value of the model\n    if (model && (model.references || model.note)) {\n      this.model = {\n        note: model.note || '',\n        references: model.references || {},\n      };\n    } else {\n      this.model = {\n        note: model,\n        references: {},\n      };\n    }\n\n    // Set the note html value in the editor\n    if (this.ckeInstance) {\n      this.ckeInstance.setData(this.model.note);\n    }\n  }\n\n  public registerOnChange(fn: Function): void {\n    this.onModelChange = fn;\n  }\n\n  public registerOnTouched(fn: Function): void {\n    this.onModelTouched = fn;\n  }\n\n  /**\n   * If a renderer is not provided, the QuickNote will default to using this one, an anchor tag with no href\n   */\n  private static defaultRenderer(symbol: string, item: any): string {\n    return `<a>${symbol}${item.label}</a>`;\n  }\n\n  /**\n   * Returns the renderer for a given tagging mode if it exists in the config, otherwise the default.\n   */\n  private getRenderer(taggingMode: string): any {\n    return this.config.renderer ? this.config.renderer[taggingMode] : QuickNoteElement.defaultRenderer;\n  }\n\n  /**\n   * Called every time a keystroke is made in the editor. Listens for particular keys (e.g. UP arrow, ESC, etc.)\n   * to handle certain behaviors of the picker.\n   *\n   * Runs within the context of the CKEditor, so actions that affect the view have to be run back inside of the\n   * Angular zone of this class.\n   *\n   * @param event The key press event\n   * @return true to allow the event to occur, false to cancel the event\n   */\n  private onKey(event: KeyboardEvent): boolean {\n    if (event.key) {\n      if (this.quickNoteResults) {\n        // Hide results on escape key\n        if (event.key === Key.Escape) {\n          this.zone.run(() => {\n            this.hideResults();\n          });\n          return false;\n        }\n\n        // Navigation inside the results\n        if (event.key === Key.ArrowUp) {\n          this.zone.run(() => {\n            this.quickNoteResults.instance.prevActiveMatch();\n          });\n          return false;\n        }\n\n        if (event.key === Key.ArrowDown) {\n          this.zone.run(() => {\n            this.quickNoteResults.instance.nextActiveMatch();\n          });\n          return false;\n        }\n\n        if (event.key === Key.Enter) {\n          this.zone.run(() => {\n            this.quickNoteResults.instance.selectActiveMatch();\n          });\n          return false;\n        }\n      } else {\n        // Loop through all triggers and turn on tagging mode if the user just pressed a trigger character\n        const triggers = this.config.triggers || {};\n        Object.keys(triggers).forEach((key) => {\n          const trigger = triggers[key] || {};\n          if (event.key === trigger) {\n            this.isTagging = true;\n            this.taggingMode = key;\n          }\n        });\n      }\n    }\n    return true;\n  }\n\n  /**\n   * Debounced method that is run in the proper Angular context when the user has modified the CKEditor.\n   * After the value has been updated in CKEditor, this will propagate that change to the model and listeners.\n   */\n  private onValueChange(): void {\n    // Get the html text in CKEditor\n    let value = this.ckeInstance.getData();\n\n    // Remove empty 'ZERO WIDTH SPACE' characters that can get added erroneously by the editor\n    const regex = new RegExp(String.fromCharCode(8203), 'g');\n    value = value.replace(regex, '');\n\n    // Make sure that any references in the model are still valid\n    this.validateReferences();\n\n    // Possibly show results if the user has entered a search term\n    this.showResults();\n\n    // Propagate change to ngModel for form validation, and send null if the note is empty\n    let newModel = null;\n    if (value) {\n      newModel = {\n        note: value,\n        references: this.model.references,\n      };\n    }\n\n    // Inform listeners to the ngModel change event that something has changed\n    this.onModelChange(newModel);\n\n    // Inform listeners of the `@Output() change` event that the model has been updated\n    this.change.emit(newModel);\n\n    // Inform listeners to the ngModel touched event that something has changed\n    this.onTouched();\n  }\n\n  /**\n   * Creates an instance of the results (called popup) and adds all the bindings to that instance.\n   */\n  private showResults(): void {\n    if (this.isTagging) {\n      const searchTerm = this.getSearchTerm();\n      if (searchTerm.length) {\n        // Update Matches\n        if (this.quickNoteResults) {\n          // Update existing list\n          this.quickNoteResults.instance.term = {\n            searchTerm,\n            taggingMode: this.taggingMode,\n          };\n        } else {\n          // Create the results DOM element\n          this.quickNoteResults = this.componentUtils.append(this.resultsComponent, this.results);\n          this.quickNoteResults.instance.parent = this;\n          this.quickNoteResults.instance.config = this.config;\n          this.quickNoteResults.instance.term = {\n            searchTerm,\n            taggingMode: this.taggingMode,\n          };\n          this.positionResultsDropdown();\n        }\n      } else if (this.quickNoteResults) {\n        this.quickNoteResults.destroy();\n        this.quickNoteResults = null;\n      }\n\n      // Tell the OutsideClick base class to start listening for an outside clicks\n      this.toggleActive(null, true);\n    }\n  }\n\n  /**\n   * Deletes the picker results from the DOM.\n   */\n  private hideResults(): void {\n    this.isTagging = false;\n    if (this.quickNoteResults) {\n      this.quickNoteResults.destroy();\n      this.quickNoteResults = null;\n    }\n  }\n\n  /**\n   * Handles the selection from the QuickNoteResults Component. Called by the QuickNoteResults component on it's\n   * parent (this element).\n   *\n   * @param taggingMode - type of tags we are looking for\n   * @param selected - selected object from the picker that has a label and value\n   */\n  private onSelected(taggingMode: string, selected: any): void {\n    // Turn off tagging\n    this.isTagging = false;\n\n    // Replace searchTerm with link\n    const symbol = this.config.triggers[taggingMode];\n    const renderer = this.getRenderer(taggingMode);\n    const renderedText = renderer(symbol, selected);\n\n    this.replaceWordAtCursor(renderedText);\n\n    // Add the new reference, if it doesn't already exist\n    this.model.references = this.model.references || {};\n    this.model.references[taggingMode] = this.model.references[taggingMode] || [];\n    const matchingItems = this.model.references[taggingMode].filter((item) => JSON.stringify(item) === JSON.stringify(selected));\n    if (matchingItems.length === 0) {\n      this.model.references[taggingMode].push(selected);\n    }\n\n    // Update the quick note with the changes due to the user's selection of an item in the dropdown\n    this.onValueChange();\n  }\n\n  /**\n   * Convenience method that gets the current word that the cursor is on, minus the tag.\n   * Also, trims any whitespace before/after the term to aid in searching.\n   */\n  private getSearchTerm(): string {\n    let word = this.getWordAtCursor().trim();\n    if (this.isTagging) {\n      const symbol = this.config.triggers[this.taggingMode];\n      if (!word.includes(symbol)) {\n        this.hideResults();\n        return '';\n      }\n      word = word.slice(word.indexOf(symbol) + symbol.length);\n    }\n    return word;\n  }\n\n  /**\n   * Gets the current word that the cursor is on CKEditor. Current word starts at the beginning of the line or a\n   * tag character if we are in tagging mode. Current word ends at the end of the line or an empty space.\n   *\n   * @returns plain text string (removes all html formatting)\n   */\n  private getWordAtCursor(): string {\n    const range = this.ckeInstance.getSelection().getRanges()[0];\n    const start = range.startContainer;\n\n    if (start.type === CKEDITOR.NODE_TEXT && range.startOffset) {\n      const text = start.getText();\n      const symbol = this.config.triggers[this.taggingMode];\n      let wordStart = text.lastIndexOf(symbol, range.startOffset - 1);\n\n      if (wordStart > 0) {\n        const beforeSymbol: string = text.charAt(wordStart - 1);\n        // We don't want to trigger the lookup call unless the symbol was preceded by whitespace\n        if (beforeSymbol !== '\\u200B' && /\\S/.test(beforeSymbol)) {\n          return '';\n        }\n      } else if (start.hasPrevious() && /\\S$/.test(start.getPrevious().getText())) {\n        // When wordStart is <= 0, we need to check the previous node's text to see if it ended with whitespace or not\n        return '';\n      }\n\n      let wordEnd = text.indexOf(' ', range.startOffset + 1);\n      if (wordStart === -1) {\n        wordStart = 0;\n      }\n      if (wordEnd === -1) {\n        wordEnd = text.length;\n      }\n\n      return text.substring(wordStart, wordEnd);\n    }\n\n    // Selection starts at the 0 index of the text node or there's no previous text node in contents\n    return '';\n  }\n\n  /**\n   * Replaces the word that the user is on with the given html.\n   *\n   * CKEditor gives us access to the current line of html in the editor, so we replace the content of\n   * the line, replacing only the current word.\n   */\n  private replaceWordAtCursor(newWord: string): void {\n    const originalWord = this.getWordAtCursor().trim();\n    const range = this.ckeInstance.getSelection().getRanges()[0];\n    const start = range.startContainer;\n    const parentNode = start.getParent();\n\n    if (start.type === CKEDITOR.NODE_TEXT && parentNode) {\n      const line = parentNode.getHtml();\n      const index = line.lastIndexOf(originalWord);\n\n      if (index >= 0) {\n        // Add a space after the replaced word so that multiple references can be added back to back\n        const newLine = line.substring(0, index) + newWord + ' ' + line.substring(index + originalWord.length);\n        parentNode.setHtml(newLine);\n\n        // Place selection at the end of the line\n        range.moveToPosition(parentNode, CKEDITOR.POSITION_BEFORE_END);\n        this.ckeInstance.getSelection().selectRanges([range]);\n      }\n    }\n  }\n\n  /**\n   * Returns current references, minus any from the model that have been removed from the editor.\n   */\n  private validateReferences(): void {\n    let html = this.ckeInstance.document.getBody().getHtml();\n\n    // CKEditor stopped supporting the config.forceSimpleAmpersand setting, so we have to convert '&amp;' to '&'\n    // when we pull html from the editor - see: https://dev.ckeditor.com/ticket/13723\n    const ampRegex = new RegExp('&amp;', 'g');\n    html = html.replace(ampRegex, '&');\n\n    Object.keys(this.model.references).forEach((taggingMode) => {\n      const array = this.model.references[taggingMode] || [];\n      const symbol = this.config.triggers[taggingMode];\n      const renderer = this.getRenderer(taggingMode);\n\n      this.model.references[taggingMode] = array.filter((item) => {\n        const renderedText = renderer(symbol, item);\n        return html.includes(renderedText);\n      });\n\n      // If no references, then delete the key\n      if (this.model.references[taggingMode].length === 0) {\n        delete this.model.references[taggingMode];\n      }\n    });\n  }\n\n  /**\n   * Configures the CKEditor for QuickNote functionality.\n   *\n   * Sets the height of the CKEditor dynamically to the height of the wrapper upon initialization.\n   * Removes the toolbar on the bottom and configures a slimmed down version of the toolbar.\n   * Removes plugins and turns off setting to allow browser based spell checking.\n   */\n  private getCKEditorConfig(): any {\n    // Use the height of the wrapper element to set the initial height of the editor, then\n    // set it to 100% to allow the editor to resize using the grippy.\n    const editorHeight = this.wrapper.nativeElement.clientHeight - QuickNoteElement.TOOLBAR_HEIGHT;\n    this.wrapper.nativeElement.style.setProperty('height', '100%');\n\n    return {\n      enterMode: CKEDITOR.ENTER_BR,\n      shiftEnterMode: CKEDITOR.ENTER_P,\n      disableNativeSpellChecker: false,\n      height: editorHeight,\n      startupFocus: this.startupFocus,\n      removePlugins: 'liststyle,tabletools,contextmenu,tableselection', // allows browser based spell checking\n      toolbar: [\n        {\n          name: 'basicstyles',\n          items: [\n            'Styles',\n            'FontSize',\n            'Bold',\n            'Italic',\n            'Underline',\n            'TextColor',\n            '-',\n            'NumberedList',\n            'BulletedList',\n            'Outdent',\n            'Indent',\n            'Link',\n          ],\n        },\n      ],\n    };\n  }\n\n  /**\n   * Returns the current screen position of the cursor in CKEditor, accounting for any scrolling in the editor.\n   */\n  private getCursorPosition(): any {\n    const range = this.ckeInstance.getSelection().getRanges()[0];\n    const parentElement = range.startContainer.$.parentElement;\n    const editorElement = this.ckeInstance.editable().$;\n\n    // Since the editor is a text node in the DOM that does not know about it's position, a temporary element has to\n    // be inserted in order to locate the cursor position.\n    const cursorElement = document.createElement('img');\n    cursorElement.setAttribute('src', 'null');\n    cursorElement.setAttribute('width', '0');\n    cursorElement.setAttribute('height', '0');\n\n    parentElement.appendChild(cursorElement);\n    const cursorPosition = {\n      top: cursorElement.offsetTop - editorElement.scrollTop,\n      left: cursorElement.offsetLeft - editorElement.scrollLeft,\n    };\n    cursorElement.remove();\n\n    return cursorPosition;\n  }\n\n  /**\n   * Positions the results dropdown based on the location of the cursor in the text field\n   */\n  private positionResultsDropdown(): void {\n    const MIN_MARGIN_TOP: number = QuickNoteElement.TOOLBAR_HEIGHT * 2;\n    const MAX_MARGIN_TOP: number = this.getContentHeight() + QuickNoteElement.TOOLBAR_HEIGHT;\n\n    const cursorPosition = this.getCursorPosition();\n    let marginTop: number = cursorPosition.top + QuickNoteElement.TOOLBAR_HEIGHT;\n\n    // Check that the margin is within the visible bounds\n    marginTop = Math.max(marginTop, MIN_MARGIN_TOP);\n    marginTop = Math.min(marginTop, MAX_MARGIN_TOP);\n\n    // Set the margin-top of the dropdown\n    this.quickNoteResults.instance.element.nativeElement.style.setProperty('margin-top', marginTop + 'px');\n  }\n\n  /**\n   * Returns the height in pixels of the content area - the text that the user has entered.\n   */\n  private getContentHeight(): number {\n    let contentHeight: number = 0;\n    if (\n      this.ckeInstance.ui &&\n      this.ckeInstance.ui.contentsElement &&\n      this.ckeInstance.ui.contentsElement.$ &&\n      this.ckeInstance.ui.contentsElement.$.style\n    ) {\n      const cssText: string = this.ckeInstance.ui.contentsElement.$.style.cssText;\n      if (cssText.indexOf('height: ') !== -1) {\n        let height: string = cssText.split('height: ')[1];\n        height = height.split('px')[0];\n        contentHeight = parseInt(height, 10);\n      }\n    }\n    return contentHeight;\n  }\n\n  /**\n   * Show the placeholder text if the editor is empty\n   */\n  private showPlaceholder(): void {\n    if (!this.ckeInstance.getData() && !this.startupFocus) {\n      this.ckeInstance.editable().getParent().$.appendChild(this.placeholderElement);\n      this.placeholderVisible = true;\n    }\n  }\n\n  /**\n   * Hide the placeholder text by removing the placeholder element from the DOM\n   */\n  private hidePlaceholder(): void {\n    if (this.placeholderVisible) {\n      this.ckeInstance.editable().getParent().$.removeChild(this.placeholderElement);\n      this.placeholderVisible = false;\n    }\n  }\n\n  /**\n   * Get or create the single placeholder object that is constructed only when needed.\n   */\n  private get placeholderElement(): any {\n    if (!this._placeholderElement) {\n      this._placeholderElement = document.createElement('div');\n      this._placeholderElement.className = 'placeholder';\n      this._placeholderElement.style.cssText =\n        'margin: 20px; color: #AAAAAA; font-family: sans-serif; font-size: 13px; line-height: 20px; position: absolute; top: 0; pointer-events: none';\n      this._placeholderElement.textContent = this.placeholder;\n    }\n    return this._placeholderElement;\n  }\n}\n","// NG2\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n// APP\nimport { NovoListModule } from 'novo-elements/elements/list';\nimport { NovoPipesModule } from 'novo-elements/pipes';\nimport { NovoLoadingModule } from 'novo-elements/elements/loading';\nimport { QuickNoteResults } from './extras/quick-note-results/QuickNoteResults';\nimport { QuickNoteElement } from './QuickNote';\n\n@NgModule({\n  imports: [CommonModule, FormsModule, NovoLoadingModule, NovoListModule, NovoPipesModule],\n  declarations: [QuickNoteElement, QuickNoteResults],\n  exports: [QuickNoteElement, QuickNoteResults],\n})\nexport class NovoQuickNoteModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}