UNPKG

ngx-tiptap-editor

Version:

[![Build and Publish](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml/badge.svg)](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml) [![Deploy to Github Pages](https://github.com/HuiiBuh/ngx-tiptap-edito

1 lines 178 kB
{"version":3,"file":"ngx-tiptap-editor.mjs","sources":["../../../projects/ngx-tiptap-editor/src/lib/helpers.ts","../../../projects/ngx-tiptap-editor/src/lib/animations.ts","../../../projects/ngx-tiptap-editor/src/lib/components/select/select.animations.ts","../../../projects/ngx-tiptap-editor/src/lib/components/select/select.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/select/select.component.html","../../../projects/ngx-tiptap-editor/src/lib/components/controls/base-control.ts","../../../projects/ngx-tiptap-editor/src/lib/services/tiptap-event.service.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-bold.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-bullet-list.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-code-block.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-code.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-format.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-hr.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-italic.component.ts","../../../projects/ngx-tiptap-editor/src/lib/services/tiptap-extension.service.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-link.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-mention.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-number-list.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-strike.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-tasklist.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-text-align.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/control-underline.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/controls/display-character-count.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/dialog/dialog.animations.ts","../../../projects/ngx-tiptap-editor/src/lib/components/dialog/dialog.helpers.ts","../../../projects/ngx-tiptap-editor/src/lib/components/dialog/dialog.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/dialog/popover.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/editor-body/editor-body.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/editor-footer/editor-footer.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/editor-header/editor-header.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/editor-preview/editor-preview.component.ts","../../../projects/ngx-tiptap-editor/src/lib/providers.ts","../../../projects/ngx-tiptap-editor/src/lib/components/editor/editor.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/link/preview.component.ts","../../../projects/ngx-tiptap-editor/src/lib/directives/autofocus.directive.ts","../../../projects/ngx-tiptap-editor/src/lib/components/link/selection.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/side-by-side/side-by-side.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/utils/util-break-line.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/utils/util-horizontal-divider.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/utils/util-padding.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/utils/util-spacer.component.ts","../../../projects/ngx-tiptap-editor/src/lib/components/utils/util-vertical-divider.component.ts","../../../projects/ngx-tiptap-editor/src/lib/extensions/custom/mention/mention-preview.component.ts","../../../projects/ngx-tiptap-editor/src/lib/ngx-tiptap-editor.module.ts","../../../projects/ngx-tiptap-editor/src/lib/extensions/tip-base-extension.ts","../../../projects/ngx-tiptap-editor/src/lib/services/dialog.service.ts","../../../projects/ngx-tiptap-editor/src/lib/extensions/custom/mention/ngx-mention.ts","../../../projects/ngx-tiptap-editor/src/lib/extensions/custom/ngx-link.ts","../../../projects/ngx-tiptap-editor/src/index.ts","../../../projects/ngx-tiptap-editor/src/ngx-tiptap-editor.ts"],"sourcesContent":["import type { Editor } from '@tiptap/core';\nimport { from as rxFrom, MonoTypeOperatorFunction, Observable, pipe } from 'rxjs';\nimport { concatMap, filter, map } from 'rxjs/operators';\nimport { EditorEvent, EditorEventReturn, HeadingsExtension } from './models/types';\n\n\nconst findExtension = (editor: Editor, name: string) => {\n  return editor.extensionManager.extensions.find(e => e.name === name);\n};\n\nexport const getHeadingsExtension = (editor: Editor): HeadingsExtension => {\n  return findExtension(editor, 'heading') as HeadingsExtension;\n};\n\nexport const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms));\n\nexport const fromEditorEvent = <T extends EditorEvent>(editor: Editor, event: T, once = false): Observable<EditorEventReturn[T]> => {\n  return new Observable<any>((observer) => {\n    const callback = (...params: any[]) => {\n      observer.next(...params);\n      if (once) editor.off(event, callback);\n    };\n    editor.on(event, callback);\n\n    return () => {\n      editor.off(event, callback);\n    };\n  });\n};\n\nexport const asyncFilter = <T>(predicate: (value: T, index: number) => Promise<boolean>): MonoTypeOperatorFunction<T> => {\n  let count = 0;\n  return pipe(\n    // Convert the predicate Promise<boolean> to an observable (which resolves the promise,\n    // Then combine the boolean result of the promise with the input data to a container object\n    concatMap((data: T) => {\n      return rxFrom(predicate(data, count++))\n        .pipe(map((isValid) => ({filterResult: isValid, entry: data})));\n    }),\n    // Filter the container object synchronously for the value in each data container object\n    filter(data => data.filterResult),\n    // remove the data container object from the observable chain\n    map(data => data.entry)\n  );\n};\n\nexport const getSelectedTextPosition = (): null | DOMRect => {\n  const selection = document.getSelection();\n  if (!selection) return null;\n  const range = selection.getRangeAt(0);\n  return range.getBoundingClientRect();\n};\n\n\nexport const getLinkFromCursorPosition = (editor: Editor) => {\n  const link = editor.getAttributes('link');\n  return link && link.href ? link.href : null;\n};\n\n\nexport const getLinkDOMFromCursorPosition = ({\n                                               state: {selection: {from}},\n                                               view\n                                             }: Editor,\n                                             link: null | string = null) => {\n  const dom = view.domAtPos(from);\n  let selector = 'a';\n  if (link) selector = `a[href=\"${link}\"]`;\n  return dom.node.parentElement!.closest<HTMLAnchorElement>(selector);\n};\n\n\nexport const getSelectedEditorTextPosition = ({state, view}: Editor) => {\n  const {from, to} = state.selection;\n  const start = view.coordsAtPos(from);\n  const end = view.coordsAtPos(to);\n  return {\n    start, end,\n    topCenter: {\n      y: start.top,\n      x: start.left + (end.left - start.left) / 2\n    }\n  };\n};\n\nexport const topCenterOfRect = (rect: DOMRect): { x: number; y: number } => {\n  return {\n    y: rect.y,\n    x: rect.x + rect.width / 2\n  };\n};\n\nexport const getDuplicates = <T>(list: T[], getKey: (item: T) => string): { [key: string]: T[] } | null => {\n  const hashMap: Record<string, T[]> = {};\n  for (const item of list) {\n    const key = getKey(item);\n    if (!(key in hashMap)) hashMap[key] = [];\n    hashMap[key].push(item);\n  }\n\n  const duplicates: Record<string, T[]> = {};\n  for (const hashKey of Object.keys(hashMap)) {\n    if (hashMap[hashKey].length > 1) duplicates[hashKey] = hashMap[hashKey];\n  }\n\n  return Object.keys(duplicates).length > 0 ? duplicates : null;\n};\n\nexport const isObject = (o: any): boolean => typeof o === 'object' && !Array.isArray(o);\n\nexport const deepMerge = <T extends Record<string | number, any>>(target: T, source: Record<any, any>): T => {\n  const targetCopy: Record<string | number, any> = {...target};\n  for (const key of Object.keys(source)) {\n\n    if (isObject(source[key])) {\n      const newTarget = isObject(target[key]) ? target[key] : {};\n      targetCopy[key] = deepMerge(newTarget, source[key]);\n    } else {\n      targetCopy[key] = source[key];\n    }\n  }\n  return targetCopy as T;\n};\n","import { animate, style, transition, trigger } from '@angular/animations';\n\nexport const FadeInAnimation = trigger('fadeIn', [\n  transition(':enter', [\n    style({opacity: 0}),\n    animate('150ms cubic-bezier(.13,1.14,1,.92)', style({opacity: 1})),\n  ]),\n  transition(':leave', [\n    animate('150ms cubic-bezier(.13,1.14,1,.92)', style({opacity: 0}))\n  ])\n]);\n","import { animate, style, transition, trigger } from '@angular/animations';\n\nexport const ExpandHeight = trigger('expandHeight', [\n  transition(':enter', [\n    style({height: '0'}),\n    animate('100ms cubic-bezier(.13,1.14,1,.92)', style({height: '*'})),\n  ]),\n  transition(':leave',\n    animate('100ms cubic-bezier(.13,1.14,1,.92)', style({height: '0'}))\n  )\n]);\n\n","import { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChildren,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Input,\n  NgZone,\n  OnDestroy,\n  OnInit,\n  Output,\n  QueryList,\n  Renderer2,\n  SecurityContext,\n  ViewChild\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { fromEvent, merge, Subject } from 'rxjs';\nimport { filter, startWith, switchMap, takeUntil } from 'rxjs/operators';\nimport { FadeInAnimation } from '../../animations';\nimport { ExpandHeight } from './select.animations';\n\n@Component({\n  selector: 'tip-option[value]',\n  template: `\n    <button type=\"button\" (click)=\"emit($event)\" (keydown.enter)=\"emit($event)\"\n            class=\"select-option select-overflow-wrapper\" #option>\n      <ng-content></ng-content>\n    </button>`,\n  styleUrls: ['select.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class OptionComponent {\n  public onSelect = new EventEmitter<OptionComponent>();\n  @Input() value: any;\n  @Input() enforceHeight = false;\n  @Input() useHtml = false;\n  public _disabled = false;\n  @ViewChild('option') private option: ElementRef<HTMLDivElement> | undefined;\n\n  constructor(private element: ElementRef) {\n  }\n\n  @Input() set disabled(value: boolean) {\n    if (this.option && value) {\n      this.option.nativeElement.setAttribute('disabled', 'true');\n    } else {\n      this.option && this.option.nativeElement.removeAttribute('disabled');\n    }\n    this._disabled = false;\n  }\n\n  public setSelected(value: boolean): void {\n    this.addOrRemoveClass(value, 'active');\n  }\n\n  public emit($event: MouseEvent | Event): void {\n    $event.preventDefault();\n    this.onSelect.emit(this);\n  }\n\n  public getContent(): string {\n    return this.useHtml ? this.element.nativeElement.innerHTML : this.element.nativeElement.textContent;\n  }\n\n  private addOrRemoveClass(add: boolean, className: string): void {\n    const operation = add ? 'add' : 'remove';\n    this.option && this.option.nativeElement.classList[operation](className);\n  }\n\n}\n\n// @dynamic\n@Component({\n  selector: 'tip-select',\n  templateUrl: './select.component.html',\n  animations: [FadeInAnimation, ExpandHeight],\n  styleUrls: ['./select.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class SelectComponent implements AfterViewInit, OnDestroy, OnInit {\n\n  @Input() public width = '150px';\n  @Input() public placeholder = '';\n  @Input() public defaultValue = '';\n  @Input() public showIcon = true;\n  @Input() public disablePreviewSanitation = false;\n  // tslint:disable-next-line:no-output-native\n  @Output() public change = new EventEmitter<any>();\n  // Is the dropdown visible\n  public visible = false;\n  @ContentChildren(OptionComponent, {descendants: true}) private optionList!: QueryList<OptionComponent>;\n  @ViewChild('selectPreview') private selectPreview: ElementRef<HTMLDivElement> | undefined;\n  @ViewChild('toggleElement') private toggleElement: ElementRef<HTMLDivElement> | undefined;\n  private destroy$ = new Subject();\n  private _value: any;\n\n  constructor(\n    private cd: ChangeDetectorRef,\n    private element: ElementRef,\n    private ngZone: NgZone,\n    private renderer2: Renderer2,\n    private sanitizer: DomSanitizer,\n    @Inject(DOCUMENT) private document: Document\n  ) {\n  }\n\n  get value(): any {\n    return this._value;\n  }\n\n  @Input()\n  set value(value: any) {\n    // Nothing changed\n    if (value === this._value) return;\n\n    this._value = value;\n    this.updateComponent(false);\n  }\n\n  public ngOnInit(): void {\n    this.ngZone.runOutsideAngular(() => {\n      fromEvent<KeyboardEvent>(this.document, 'keyup').pipe(\n        filter(e => e.key === 'Escape'),\n        filter(() => this.visible),\n        takeUntil(this.destroy$)\n      ).subscribe(() => {\n        this.ngZone.run(() => {\n          this.visible = false;\n          this.cd.markForCheck();\n        });\n      });\n      fromEvent<KeyboardEvent>(this.document, 'click').pipe(\n        filter(e => !this.element.nativeElement.contains(e.target as Node) && this.visible),\n        filter(e => (\n          // Dont trigger close if the event comes from the own toggle button, or its children\n          (e.target as HTMLElement) === this.toggleElement?.nativeElement ||\n          !!this.selectPreview && !this.selectPreview.nativeElement.contains((e.target as HTMLElement)))\n        ),\n        takeUntil(this.destroy$)\n      ).subscribe(() => {\n        this.ngZone.run(() => {\n          this.visible = false;\n          this.cd.markForCheck();\n        });\n      });\n    });\n  }\n\n  public ngAfterViewInit(): void {\n    // Subscribe to click events on the options\n    const options = this.optionList;\n    this.optionList.changes.pipe(\n      startWith(...options),\n      switchMap(() => merge(...options.map(o => o.onSelect))),\n      takeUntil(this.destroy$),\n    ).subscribe(component => {\n      // Nothing changed\n      if (this._value === component.value) return;\n      this._value = component.value;\n      this.visible = false;\n      this.updateComponent(true);\n    });\n    // Update the selected value for the initial select\n    this.updateComponent(false);\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  public toggle(): void {\n    this.visible = !this.visible;\n  }\n\n  /**\n   * Select the current component depending on the selected value\n   * @param emitUpdate Should the change be propagated\n   */\n  private updateComponent(emitUpdate: boolean): void {\n    // No options => no update\n    if (!this.optionList) return;\n\n    // If no value is provided use the default value\n    if (!this.value && this.defaultValue) {\n      this._value = this.defaultValue;\n    }\n\n    // Deselect all\n    this.optionList.forEach(o => o.setSelected(false));\n\n    // Select right one\n    const selectedComponent = this.optionList.find(o => o.value === this._value);\n\n    let previewText = this.placeholder;\n    // A component is selected, so select the component\n    if (selectedComponent) {\n      selectedComponent.setSelected(true);\n      previewText = selectedComponent.getContent();\n\n      emitUpdate && this.change.emit(selectedComponent.value);\n    }\n\n    let sanitizedHtml = previewText;\n    if (!this.disablePreviewSanitation) {\n      sanitizedHtml = this.sanitizer.sanitize(SecurityContext.HTML, previewText)!;\n    }\n\n    // Dont update if ou don't have to updaet\n    if (this.selectPreview?.nativeElement.innerHTML === sanitizedHtml) return;\n    this.selectPreview && this.renderer2.setProperty(this.selectPreview?.nativeElement, 'innerHTML', sanitizedHtml);\n  }\n}\n","<div [ngStyle]=\"{width: width}\" class=\"select-wrapper\">\n  <div (click)=\"toggle()\" (keydown.enter)=\"toggle()\" [class.icon-placeholder]=\"showIcon\"\n       class=\"select-preview\"\n       tabindex=\"0\" #toggleElement>\n    <div #selectPreview\n         class=\"select-overflow-wrapper select-preview-content\">\n    </div>\n    <i *ngIf=\"showIcon\" [class.rotate180]=\"visible\" class=\"select-icon\">\n      <svg focusable=\"false\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\">\n        <path d=\"M7 10l5 5 5-5z\"/>\n      </svg>\n    </i>\n  </div>\n  <div *ngIf=\"visible\" class=\"select-options-overlay\" @expandHeight>\n    <ng-content></ng-content>\n  </div>\n</div>\n\n","import {\n  AfterViewInit,\n  Directive,\n  ElementRef,\n  isDevMode,\n  OnDestroy,\n  OnInit,\n  QueryList,\n  ViewChild,\n  ViewChildren\n} from '@angular/core';\nimport type { Editor } from '@tiptap/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { fromEditorEvent } from '../../helpers';\nimport { EditorEvent } from '../../models/types';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { OptionComponent, SelectComponent } from '../select/select.component';\n\nexport interface BaseControl {\n  onEditorReady?(editor: Editor): void;\n\n  onEditorDestroy?(): void;\n}\n\nexport abstract class BaseControl {\n  private _editor: Editor | null = null;\n\n  public get editor(): Editor | null {\n    return this._editor;\n  }\n\n  public setEditor(editor: Editor): void {\n    this._editor = editor;\n    this.onEditorReady && this.onEditorReady(editor);\n  }\n}\n\n\n@Directive()\n// tslint:disable-next-line:directive-class-suffix\nexport abstract class ExtendedBaseControl extends BaseControl implements OnDestroy {\n  protected destroy$ = new Subject<boolean>();\n\n  public ngOnDestroy(): void {\n    this.destroy$.next(true);\n    this.destroy$.complete();\n  }\n\n  public setEditor(editor: Editor): void {\n    super.setEditor(editor);\n    fromEditorEvent(editor, 'destroy', true).pipe(takeUntil(this.destroy$))\n      .subscribe(() => this.onEditorDestroy && this.onEditorDestroy());\n  }\n\n  protected isEditable(): boolean {\n    return !!this.editor?.isEditable;\n  }\n}\n\n@Directive()\n// tslint:disable-next-line:directive-class-suffix\nexport abstract class ButtonBaseControl extends ExtendedBaseControl implements OnDestroy, AfterViewInit {\n  @ViewChild('button') protected button: ElementRef<HTMLElement> | undefined;\n\n  protected abstract eventService: TiptapEventService;\n  protected updateEvent: EditorEvent = 'transaction';\n\n  public ngAfterViewInit(): void {\n    if (!this.button && isDevMode()) {\n      console.warn(`The button element in your control could not be found in ${this.constructor.name}\\nPlease add #button to your control button element`);\n    }\n  }\n\n  public setEditor(editor: Editor): void {\n    super.setEditor(editor);\n    fromEditorEvent(editor, this.updateEvent).pipe(takeUntil(this.destroy$))\n      .subscribe(() => this.updateButton());\n    this.updateButton();\n  }\n\n  protected abstract isActive(...args: any): boolean | Promise<boolean>;\n\n  protected abstract can(...args: any): boolean | Promise<boolean>;\n\n  private async updateButton(): Promise<void> {\n    if (!this.button) return;\n\n    const activeAction = (await this.isActive()) ? 'add' : 'remove';\n    this.button.nativeElement.classList[activeAction]('tip-active');\n\n    if (await this.can() && this.isEditable()) {\n      this.button.nativeElement.removeAttribute('disabled');\n    } else {\n      this.button.nativeElement.setAttribute('disabled', 'true');\n    }\n  }\n}\n\n@Directive()\n// tslint:disable-next-line:directive-class-suffix\nexport abstract class SelectBaseControl extends ExtendedBaseControl implements OnInit, OnDestroy, AfterViewInit {\n  protected abstract eventService: TiptapEventService;\n  protected abstract canStyleParams: any[];\n\n  @ViewChild(SelectComponent) protected select!: SelectComponent;\n  @ViewChildren(OptionComponent) protected options!: QueryList<OptionComponent>;\n\n  public ngOnInit(): void {\n    this.eventService.update$.pipe(\n      takeUntil(this.destroy$)\n    ).subscribe(() => {\n      this.updateSelectValue();\n      this.updateDisabledValue();\n    });\n  }\n\n  public ngAfterViewInit(): void {\n    if (!isDevMode() && !this.select) {\n      console.warn(`The select element in your control could not be found in ${this.constructor.name}\\nPlease make sure you have a tip-select in your component`);\n    }\n  }\n\n  public setEditor(editor: Editor): void {\n    super.setEditor(editor);\n    this.updateSelectValue();\n    this.updateDisabledValue();\n  }\n\n  protected abstract canStyle(...args: any[]): boolean | Promise<boolean>;\n\n  protected abstract currentActive(): any | Promise<any>;\n\n  private async updateSelectValue(): Promise<void> {\n    this.select.value = await this.currentActive();\n  }\n\n  private async updateDisabledValue(): Promise<void> {\n    const optionsList = this.options.toArray();\n    for (const [index, param] of this.canStyleParams.entries()) {\n      const option = optionsList[index];\n      if (!option) continue;\n\n      option.disabled = !(await this.canStyle(param) && this.isEditable());\n    }\n  }\n}\n","import { Injectable, NgZone } from '@angular/core';\nimport { fromEvent, merge, Observable, Subject, Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\n\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TiptapEventService {\n\n  private clickSubject = new Subject<MouseEvent>();\n  private keyboardSubject = new Subject<KeyboardEvent>();\n  private clickSubscription: Subscription | null = null;\n  private keyboardSubscription: Subscription | null = null;\n\n  /* tslint:disable */\n  public update$ = merge(this.clickSubject, this.keyboardSubject);\n  public onClick$ = this.clickSubject.asObservable();\n  public onKeyboard$ = this.keyboardSubject.asObservable();\n\n  /* tslint:enable */\n\n  constructor(\n    private ngZone: NgZone\n  ) {\n  }\n\n  public registerShortcut(shortcut: string): Observable<KeyboardEvent> {\n    const parts = shortcut.split('-');\n    let key = parts[parts.length - 1];\n    if (key === 'Space') key = ' ';\n    const keyCodeSmall = key.toUpperCase().charCodeAt(0);\n    const keyCodeLarge = key.toLowerCase().charCodeAt(0);\n\n    const hasAlt = parts.includes('Alt');\n    const hasShift = parts.includes('Shift');\n\n    const hasMod = parts.includes('Mod');\n    const hasCtrl = parts.includes('Ctrl');\n    const hasCmd = parts.includes('Cmd');\n\n    return this.onKeyboard$.pipe(\n      filter(e => (\n        // Check the keycode against the large and small letter (I hate you apple)\n        (e.keyCode === keyCodeSmall || e.keyCode === keyCodeLarge) &&\n        e.altKey === hasAlt &&\n        e.shiftKey === hasShift &&\n        // Check if the meta key was pressed, or the combined mod is allowed  (I really, really, hate you apple)\n        (\n          // Both ctrl and command key\n          hasMod && (e.ctrlKey && !e.metaKey || !e.ctrlKey && e.metaKey)\n          // Only ctrl or command key\n          || e.ctrlKey === hasCtrl && e.metaKey === hasCmd && !hasMod\n        )\n      ))\n    );\n  }\n\n  public setElement(element: HTMLDivElement): void {\n    this.ngZone.runOutsideAngular(() => {\n      this.clickSubscription?.unsubscribe();\n      this.keyboardSubscription?.unsubscribe();\n      this.clickSubscription = fromEvent<MouseEvent>(element, 'click').subscribe(e => this.clickSubject.next(e));\n      this.keyboardSubscription = fromEvent<KeyboardEvent>(element, 'keydown').subscribe(e => this.keyboardSubject.next(e));\n    });\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef, OnDestroy } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n\n@Component({\n  selector: 'tip-control-bold',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleBold()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">format_bold</i>\n    </button>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlBoldComponent)}],\n})\nexport class ControlBoldComponent extends ButtonBaseControl implements OnDestroy {\n  constructor(\n    protected eventService: TiptapEventService,\n  ) {\n    super();\n  }\n\n  public toggleBold(): void {\n    this.editor && this.editor.chain().focus().toggleBold().run();\n  }\n\n  protected isActive(): boolean {\n    return !!this.editor?.isActive('bold');\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().toggleBold();\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: '' +\n    'tip-bullet-list-control',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleList()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">format_list_bulleted</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlBulletListComponent)}],\n})\nexport class ControlBulletListComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public toggleList(): void {\n    this.editor && this.editor.chain().focus().toggleBulletList().run();\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can()?.toggleBulletList();\n  }\n\n  protected isActive(...args: any): boolean {\n    return !!this.editor?.isActive('bulletList');\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-code-block-control',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleCodeBlock()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">integration_instructions</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlCodeBlockComponent)}],\n})\nexport class ControlCodeBlockComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public toggleCodeBlock(): void {\n    this.editor && this.editor.chain().focus().toggleCodeBlock().run();\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().toggleCodeBlock();\n  }\n\n  protected isActive(...args: any): boolean {\n    return !!this.editor?.isActive('codeBlock');\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-control-code',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleCode()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">code</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlCodeComponent)}],\n})\nexport class ControlCodeComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public toggleCode(): void {\n    this.editor && this.editor.chain().focus().toggleCode().run();\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().toggleCode();\n  }\n\n  protected isActive(...args: any): boolean {\n    return !!this.editor?.isActive('code');\n  }\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, forwardRef, Input } from '@angular/core';\nimport type { Editor } from '@tiptap/core';\nimport { getHeadingsExtension } from '../../helpers';\nimport { HeadingLevel } from '../../models/types';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, SelectBaseControl } from './base-control';\n\nconst isHeading = (level: number | string): level is HeadingLevel => typeof level === 'number';\n\n@Component({\n  selector: 'tip-format-control',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <tip-select (change)=\"selectTextLevel($event)\" defaultValue=\"paragraph\"\n                [disablePreviewSanitation]=\"disableSanitation\">\n      <tip-option *ngFor=\"let level of levels\" [value]=\"level\">\n        <div [innerHTML]=\"headingHtml[level]\"></div>\n      </tip-option>\n      <tip-option value=\"paragraph\">\n        <div>\n          <p class=\"no-margin light-font\">Paragraph</p>\n        </div>\n      </tip-option>\n    </tip-select>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlFormatComponent)}],\n})\nexport class ControlFormatComponent extends SelectBaseControl {\n  @Input() public disableSanitation = false;\n  public levels: HeadingLevel[] = [];\n  public headingHtml: Record<number, string> = {};\n  protected canStyleParams: (number | string)[] = [];\n\n  constructor(\n    protected eventService: TiptapEventService,\n    private cd: ChangeDetectorRef\n  ) {\n    super();\n  }\n\n  public setEditor(editor: Editor): void {\n    super.setEditor(editor);\n    this.levels = getHeadingsExtension(editor).options.levels;\n    this.canStyleParams = [...this.levels, 'paragraph'];\n    this.headingHtml = [...this.levels].reduce((previousValue, currentValue) => {\n      previousValue[currentValue] = `<h${currentValue} class=\"no-margin light-font\">Heading ${currentValue}</h${currentValue}>`;\n      return previousValue;\n    }, {} as Record<string, string>);\n    this.cd.detectChanges();\n  }\n\n  public selectTextLevel(format: number | string): void {\n    if (isHeading(format)) {\n      this.setHeading(format);\n    } else {\n      this.setParagraph();\n    }\n  }\n\n  protected canStyle(format: number | string): boolean {\n    if (!this.editor) return false;\n    if (isHeading(format)) {\n      return this.editor.can().chain().setHeading({level: format}).run();\n    } else {\n      return this.editor.can().chain().setParagraph().run();\n    }\n  }\n\n  protected currentActive(): string | number | null {\n    if (this.editor) {\n      const headingAttributes = this.editor.getAttributes('heading');\n      if (headingAttributes.level) return headingAttributes.level;\n      if (this.editor.isActive('paragraph')) return 'paragraph';\n    }\n    return null;\n  }\n\n  private setParagraph(): void {\n    this.editor && this.editor.chain().setParagraph().run();\n  }\n\n  private setHeading(headingLevel: HeadingLevel): void {\n    this.editor && this.editor.chain().focus().setHeading({level: headingLevel}).focus().run();\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-control-hr',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"addHorizontalRule()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">horizontal_rule</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => HorizontalRuleControlComponent)}],\n})\nexport class HorizontalRuleControlComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public addHorizontalRule(): void {\n    this.editor && this.editor.chain().focus().setHorizontalRule().run();\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().setHorizontalRule();\n  }\n\n  protected isActive(...args: any): boolean {\n    return false;\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-control-italic',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleItalic()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">format_italic</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlItalicComponent)}],\n})\nexport class ControlItalicComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public toggleItalic(): void {\n    this.editor && this.editor.chain().focus().toggleItalic().run();\n  }\n\n  protected isActive(): boolean {\n    return !!this.editor?.isActive('italic');\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().toggleItalic();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { AnyExtension } from '@tiptap/core';\nimport { TipBaseExtension } from '../extensions/tip-base-extension';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class TiptapExtensionService {\n  private _nativeExtensions: Record<string, AnyExtension> = {};\n  private _angularExtensions: Record<string, TipBaseExtension<any>> = {};\n\n  public get angularExtensions(): Record<string, TipBaseExtension<any>> {\n    return this._angularExtensions;\n  }\n\n  public setAngularExtensions(value: TipBaseExtension<any>[]): void {\n    this._angularExtensions = value.reduce((previousValue, currentValue) => {\n      previousValue[currentValue.nativeExtension.name] = currentValue;\n      return previousValue;\n    }, {} as Record<string, TipBaseExtension<any>>);\n  }\n\n  public get nativeExtensions(): Record<string, AnyExtension> {\n    return this._nativeExtensions;\n  }\n\n  public setNativeExtensions(value: AnyExtension[]): void {\n    this._nativeExtensions = value.reduce((previousValue, currentValue) => {\n      previousValue[currentValue.name] = currentValue;\n      return previousValue;\n    }, {} as Record<string, AnyExtension>);\n  }\n\n  getExtension<T extends AnyExtension | TipBaseExtension<any>>(extensionName: string): AnyExtension | TipBaseExtension<any> | null {\n    if (extensionName in this._angularExtensions) {\n      return this._angularExtensions[extensionName];\n    }\n    if (extensionName in this._nativeExtensions) {\n      return this._nativeExtensions[extensionName];\n    }\n    return null;\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef, OnDestroy } from '@angular/core';\nimport { Editor } from '@tiptap/core';\nimport { NgxLink } from '../../extensions/custom/ngx-link';\nimport { EditorEvent } from '../../models/types';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { TiptapExtensionService } from '../../services/tiptap-extension.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n// @dynamic\n@Component({\n  selector: 'tip-control-link',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"openLinkDialog()\" disabled #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">link</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlLinkComponent)}],\n})\nexport class ControlLinkComponent extends ButtonBaseControl implements OnDestroy {\n  protected updateEvent = 'selectionUpdate' as EditorEvent;\n  private linkExtension!: NgxLink;\n\n  constructor(\n    protected eventService: TiptapEventService,\n    private extensionService: TiptapExtensionService,\n  ) {\n    super();\n  }\n\n  public onEditorReady(editor: Editor): void {\n    this.linkExtension = this.extensionService.getExtension('link') as unknown as NgxLink;\n  }\n\n  public async can(): Promise<boolean> {\n    return this.linkExtension.can();\n  }\n\n  public async openLinkDialog(): Promise<void> {\n    return this.linkExtension.openCreateLinkDialog();\n  }\n\n  protected isActive(): boolean {\n    return this.linkExtension.isActive();\n  }\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, OnDestroy, Output } from '@angular/core';\nimport { Editor } from '@tiptap/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { MentionData, NgxMention } from '../../extensions/custom/mention/ngx-mention';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { TiptapExtensionService } from '../../services/tiptap-extension.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\nexport type MentionCallback = (props: MentionData) => void;\n\n@Component({\n  selector: 'tip-control-mention',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"updateMention()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">person_add</i>\n    </button>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlMentionComponent)}],\n})\nexport class ControlMentionComponent extends ButtonBaseControl implements OnDestroy {\n\n  @Output() createMention = new EventEmitter<MentionCallback>();\n  @Output() mentionClicked = new EventEmitter<MentionData>();\n\n  private mentionExtension!: NgxMention;\n\n  constructor(\n    protected eventService: TiptapEventService,\n    private extensionService: TiptapExtensionService\n  ) {\n    super();\n  }\n\n  public onEditorReady(editor: Editor): void {\n    this.mentionExtension = this.extensionService.getExtension('mention') as unknown as NgxMention;\n    this.mentionExtension.onClick$.pipe(takeUntil(this.destroy$)).subscribe(e => this.mentionClicked.emit(e));\n  }\n\n  public updateMention(): void {\n    this.createMention.emit((props) => this.editor?.chain().focus().setMention({props}).run());\n  }\n\n  protected isActive(): boolean {\n    return false;\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().setMention({props: {id: ''}});\n  }\n\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-control-number-list',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleList()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">format_list_numbered</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlNumberListComponent)}],\n})\nexport class ControlNumberListComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public toggleList(): void {\n    this.editor && this.editor.chain().focus().toggleOrderedList().run();\n  }\n\n  protected can(...args: any): boolean {\n    return !!this.editor?.can().toggleOrderedList();\n  }\n\n  protected isActive(...args: any): boolean {\n    return !!this.editor?.isActive('orderedList');\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-control-strike',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleList()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">format_strikethrough</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlStrikeComponent)}],\n})\nexport class ControlStrikeComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public toggleList(): void {\n    this.editor && this.editor.chain().focus().toggleStrike().run();\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().toggleStrike();\n  }\n\n  protected isActive(...args: any): boolean {\n    return !!this.editor?.isActive('strike');\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-control-task',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleTask()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">checklist</i>\n    </button>`,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlTasklistComponent)}],\n})\nexport class ControlTasklistComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public toggleTask(): void {\n    this.editor && this.editor.chain().focus().toggleTaskList().run();\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().toggleTaskList();\n  }\n\n  protected isActive(...args: any): boolean {\n    return !!this.editor?.isActive('taskList');\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef, Input } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, SelectBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-control-text-align',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <tip-select defaultValue=\"left\" width=\"auto\" [showIcon]=\"false\"\n                (change)=\"setAlign($event)\" [disablePreviewSanitation]=\"disableSanitation\">\n      <tip-option value=\"left\" [useHtml]=\"true\" [enforceHeight]=\"true\">\n        <div class=\"content-wrapper\" #left>\n          <ng-content select=\"[data-left]\"></ng-content>\n        </div>\n        <i *ngIf=\"left.childNodes.length === 0\" class=\"material-icons\">format_align_left</i>\n      </tip-option>\n      <tip-option value=\"right\" [useHtml]=\"true\" [enforceHeight]=\"true\">\n        <div class=\"content-wrapper\" #right>\n          <ng-content select=\"[data-right]\"></ng-content>\n        </div>\n        <i *ngIf=\"right.childNodes.length === 0\" class=\"material-icons\">format_align_right</i>\n      </tip-option>\n      <tip-option value=\"center\" [useHtml]=\"true\" [enforceHeight]=\"true\">\n        <div class=\"content-wrapper\" #center>\n          <ng-content select=\"[data-center]\"></ng-content>\n        </div>\n        <i *ngIf=\"center.childNodes.length === 0\" class=\"material-icons\">format_align_center</i>\n      </tip-option>\n      <tip-option value=\"justify\" [useHtml]=\"true\" [enforceHeight]=\"true\">\n        <div class=\"content-wrapper\" #justify>\n          <ng-content select=\"[data-justify]\"></ng-content>\n        </div>\n        <i *ngIf=\"justify.childNodes.length === 0\" class=\"material-icons\">format_align_justify</i>\n      </tip-option>\n    </tip-select>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlTextAlignComponent)}],\n})\nexport class ControlTextAlignComponent extends SelectBaseControl {\n  @Input() public disableSanitation = false;\n\n  protected canStyleParams = ['left', 'right', 'center', 'justify'];\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public setAlign(alignment: 'justify' | 'left' | 'center' | 'right'): void {\n    this.editor && this.editor.chain().focus().setTextAlign(alignment).run();\n  }\n\n  protected canStyle(alignment: 'justify' | 'left' | 'center' | 'right'): boolean {\n    if (!this.editor) return false;\n    return this.editor.can().setTextAlign(alignment);\n  }\n\n  protected currentActive(): 'left' | 'right' | 'center' | 'justify' | null {\n    if (this.editor) {\n      if (this.editor.isActive({textAlign: 'left'})) return 'left';\n      if (this.editor.isActive({textAlign: 'right'})) return 'right';\n      if (this.editor.isActive({textAlign: 'center'})) return 'center';\n      if (this.editor.isActive({textAlign: 'justify'})) return 'justify';\n    }\n    return null;\n  }\n}\n","import { ChangeDetectionStrategy, Component, forwardRef } from '@angular/core';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { BaseControl, ButtonBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-control-underline',\n  styleUrls: ['../../../../_controls.scss'],\n  template: `\n    <button class=\"tip-control-button\" type=\"button\" (click)=\"toggleUnderline()\" #button>\n      <div class=\"content-wrapper\" #ref>\n        <ng-content></ng-content>\n      </div>\n      <i *ngIf=\"ref.childNodes.length === 0\" class=\"material-icons\">format_underline</i>\n    </button>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => ControlUnderlineComponent)}],\n})\nexport class ControlUnderlineComponent extends ButtonBaseControl {\n\n  constructor(\n    protected eventService: TiptapEventService\n  ) {\n    super();\n  }\n\n  public toggleUnderline(): void {\n    this.editor && this.editor.chain().focus().toggleUnderline().run();\n  }\n\n  protected can(): boolean {\n    return !!this.editor?.can().toggleUnderline();\n  }\n\n  protected isActive(): boolean {\n    return !!this.editor?.isActive('underline');\n  }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, forwardRef, Input, OnInit, ViewChild } from '@angular/core';\nimport { Editor, Extension } from '@tiptap/core';\nimport { CharacterCountOptions, CharacterCountStorage } from '@tiptap/extension-character-count';\nimport { CharacterCount } from '@tiptap/extension-character-count/src/character-count';\nimport { delay, takeUntil } from 'rxjs/operators';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { TiptapExtensionService } from '../../services/tiptap-extension.service';\nimport { BaseControl, ExtendedBaseControl } from './base-control';\n\n@Component({\n  selector: 'tip-character-count-display',\n  styles: [`\n    :host-context {\n      color: var(--tip-light-text-color)\n    }\n  `],\n  template: `\n    <span *ngIf=\"displayCharacter\" #character></span><br/>\n    <span *ngIf=\"displayWordCount\" #worldCount></span>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  providers: [{provide: BaseControl, useExisting: forwardRef(() => DisplayCharacterCountComponent)}],\n})\nexport class DisplayCharacterCountComponent extends ExtendedBaseControl implements OnInit {\n  @Input() public displayLimit = true;\n  @Input() public displayCharacter = true;\n  @Input() public displayWordCount = true;\n  @Input() public worldString = 'worlds';\n  @Input() public characterString = 'characters';\n\n  @ViewChild('character') private characterElement: ElementRef<HTMLElement> | undefined;\n  @ViewChild('worldCount') private wordCountElement: ElementRef<HTMLElement> | undefined;\n  private characterCountExtension: Extension<CharacterCountOptions, CharacterCountStorage> | undefined;\n\n  constructor(\n    protected eventService: TiptapEventService,\n    private tiptapExtensionService: TiptapExtensionService\n  ) {\n    super();\n  }\n\n  public ngOnInit(): void {\n    this.eventService.update$.pipe(takeUntil(this.destroy$), delay(100)).subscribe(() => {\n      this.updateCharacterCountHtml();\n    });\n  }\n\n  public onEditorReady(editor: Editor): void {\n    this.characterCountExtension = this.tiptapExtensionService.getExtension('characterCount') as typeof CharacterCount;\n    this.updateCharacterCountHtml();\n\n  }\n\n  private updateCharacterCountHtml(): void {\n    if (!this.editor) return;\n    const characters = this.editor.storage.characterCount.characters();\n    const words = this.editor.storage.characterCount.words();\n    if (this.characterElement) {\n      let characterString = `${characters}`;\n      if (this.displayLimit && this.characterCountExtension && this.characterCountExtension.options.limit) {\n        characterString += `/${this.characterCountExtension.options.limit}`;\n      }\n      characterString += ` ${this.characterString}`;\n      this.characterElement.nativeElement.innerText = characterString;\n    }\n    if (this.wordCountElement) {\n      this.wordCountElement.nativeElement.innerText = `${words} ${this.worldString}`;\n    }\n  }\n}\n","import { animate, query, style, transition, trigger } from '@angular/animations';\n\nexport const PopOverPopUpAnimation = trigger('popUp', [\n  transition(':enter', [\n    query('.popover-wrapper', [\n      style({opacity: 0, transform: 'translate(-50%, -50%)'}),\n      animate('150ms cubic-bezier(.13,1.14,1,.92)', style({opacity: 1, transform: '*'})),\n    ])\n  ]),\n  transition(':leave',\n    query('.popover-wrapper', [\n      animate('150ms cubic-bezier(.13,1.14,1,.92)', style({opacity: 0, transform: 'translate(-50%, -50%)'})),\n    ])),\n]);\n\n\nexport const OverlayPopUpAnimation = trigger('popUp', [\n  transition(':enter', [\n    query('.dialog-wrapper', [\n      style({transform: 'translate(-50%, -30%)'}),\n      animate('150ms cubic-bezier(.13,1.14,1,.92)', style({transform: '*'})),\n    ])\n  ]),\n  transition(':leave',\n    query('.dialog-wrapper', [\n      animate('150ms cubic-bezier(.13,1.14,1,.92)', style({transform: 'translate(-50%, -30%)'})),\n    ])),\n]);\n\n","import { ApplicationRef, ComponentRef, Directive, InjectionToken, NgZone, OnDestroy, OnInit } from '@angular/core';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\n\nexport const TIP_DIALOG_DATA = new InjectionToken<DialogData<any>>('DIALOG_DATA');\n\nexport interface OverlayData<D> {\n  data?: D;\n  autoClose: boolean;\n  maxWidth: string;\n  width: string;\n  backdropColor: string;\n}\n\nexport interface DialogData<D> extends OverlayData<D> {\n  type: 'dialog';\n  position: 'top' | 'center';\n}\n\nexport interface PopoverData<D> extends OverlayData<D> {\n  type: 'popover';\n  position: {\n    x: number,\n    y: number,\n  };\n}\n\nexport interface ResultData<D> {\n  data: ResultData<D>['status'] extends 'canceled' ? null : D;\n  status: 'success' | 'canceled';\n}\n\nexport class DialogRef<RESULT, CONFIG_DATA, COMPONENT> {\n  /* tslint:disable member-ordering*/\n  private subject$ = new Subject<ResultData<RESULT | null>>();\n  public result$ = this.subject$.asObservable();\n  private _done = false;\n\n  /* tslint:enable */\n\n  constructor(\n    private _component: COMPONENT,\n    private appRef: ApplicationRef,\n    private dialogWrapperComponentRef: { component?: ComponentRef<DialogBaseClass> },\n    private config: DialogData<CONFIG_DATA> | PopoverData<CONFIG_DATA>\n  ) {\n  }\n\n  public get component(): COMPONENT {\n    return this._component;\n  }\n\n  public get done(): boolean {\n    return this._done;\n  }\n\n  public get dialogConfig(): Omit<DialogData<CONFIG_DATA>, 'data'> | Omit<PopoverData<CONFIG_DATA>, 'data'> {\n    const copy = {...this.config};\n    delete copy.data;\n    return copy;\n  }\n\n  private get dialogWrapperComponent(): ComponentRef<DialogBaseClass> {\n    return this.dialogWrapperComponentRef.component!;\n  }\n\n  public submit(data: RESULT): void {\n    this.sendResult(data, 'success');\n  }\n\n  public cancel(): void {\n    this.sendResult(null, 'canceled');\n  }\n\n  private sendResult(data: RESULT | null, status: ResultData<RESULT>['status']): void {\n    if (this.done) return;\n\n    this.appRef.detachView(this.dialogWrapperComponent.hostView);\n    this.dialogWrapperComponent.destroy();\n    this._done = true;\n    this.subject$.next({data, status});\n    this.subject$.complete();\n  }\n}\n\n@Directive()\n// tslint:disable-next-line:directive-class-suffix\nexport abstract class DialogBaseClass implements OnInit, OnDestroy {\n  protected abstract ngZone: NgZone;\n  protected abstract document: Document;\n  protected abstract dialogRef: DialogRef<any, any, any>;\n  protected destroy$ = new Subject<boolean>();\n\n  public ngOnInit(): void {\n    this.ngZone.runOutsideAngular(() => {\n      fromEvent<KeyboardEvent>(this.document, 'keydown').pipe(\n        filter(e => e.key === 'Escape'),\n        takeUntil(this.destroy$)\n      ).subscribe(() => this.ngZone.run(() => this.closeDialog()));\n    });\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next(true);\n    this.destroy$.complete();\n  }\n\n  public closeDialog(): void {\n    if (!this.dialogRef.dialogConfig.autoClose) return;\n    this.dialogRef.cancel();\n  }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, HostBinding, Inject, NgZone } from '@angular/core';\nimport { FadeInAnimation } from '../../animations';\nimport { OverlayPopUpAnimation } from './dialog.animations';\nimport { TIP_DIALOG_DATA, DialogBaseClass, DialogData, DialogRef } from './dialog.helpers';\n\n\n// @dynamic\n@Component({\n  selector: 'tip-dialog',\n  template: `\n    <div class=\"overlay\" (click)=\"closeDialog()\" [ngStyle]=\"{backgroundColor: dialogRef.dialogConfig.backdropColor}\"></div>\n    <div class=\"dialog-wrapper\" [ngStyle]=\"position\">\n      <ng-container *ngIf=\"dialogRef.component\" [ngComponentOutlet]=\"dialogRef.component\"></ng-container>\n    </div>\n  `,\n  animations: [FadeInAnimation, OverlayPopUpAnimation],\n  styles: [`\n    .overlay {\n      position: fixed;\n      top: 0;\n      bottom: 0;\n      right: 0;\n      left: 0;\n      z-index: 2000;\n    }\n\n    .dialog-wrapper {\n      left: 50%;\n      position: absolute;\n      transform: translate(-50%, -50%);\n      border-radius: 5px;\n      padding: 10px;\n      z-index: 2000;\n      background-color: var(--tip-background-color);\n    }\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DialogComponent extends DialogBaseClass {\n  public position: Record<string, any> = {};\n\n  constructor(\n    @Inject(TIP_DIALOG_DATA) private data: any,\n    @Inject(DOCUMENT) protected document: Document,\n    public dialogRef: DialogRef<any, any, any>,\n    protected ngZone: NgZone\n  ) {\n    super();\n    this.position = this.calculateStyle();\n  }\n\n  @HostBinding('@fadeIn')\n  @HostBinding('@popUp')\n  private calculateStyle(): Record<string, any> {\n    const config = this.dialogRef.dialogConfig as DialogData<any>;\n\n    return {\n      width: config.width,\n      maxWidth: config.maxWidth,\n      top: config.position === 'top' ? '20%' : '50%',\n    };\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  HostBinding,\n  Inject,\n  NgZone,\n  OnInit,\n  ViewChild\n} from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { sleep } from '../../helpers';\nimport { PopOverPopUpAnimation } from './dialog.animations';\nimport { DialogBaseClass, DialogRef, PopoverData, TIP_DIALOG_DATA } from './dialog.helpers';\n\n// @dynamic\n@Component({\n  selector: 'tip-popover',\n  template: `\n    <div class=\"popover-wrapper\" [ngStyle]=\"style\" #popover>\n      <ng-container *ngIf=\"dialogRef.component\" [ngComponentOutlet]=\"dialogRef.component\"></ng-container>\n      <div class=\"hide-arrow\"></div>\n      <div class=\"arrow\"></div>\n    </div>\n  `,\n  animations: [PopOverPopUpAnimation],\n  styles: [`\n    .popover-wrapper {\n      border-radius: 5px;\n      background-color: var(--tip-background-color);\n      position: fixed;\n      transform: translate(-50%, -100%);\n      box-shadow: 0 1px 3px 1px rgba(60, 64, 67, .15);\n      padding: 11px;\n      z-index: 2000;\n    }\n\n    .hide-arrow {\n      position: absolute;\n      width: 30px;\n      height: 10px;\n      transform: translate(-50%, -100%);\n      top: 100%;\n      left: 50%;\n      background-color: var(--tip-background-color);\n      z-index: 1;\n    }\n\n    .arrow {\n      position: absolute;\n      top: 100%;\n      left: 50%;\n      width: 0;\n      height: 0;\n      box-shadow: 1px 1px 3px 1px rgba(60, 64, 67, .15);\n      border: 7px solid var(--tip-background-color);\n      transform: rotate(45deg) translate(-50%, -50%);\n      transform-origin: 0 0;\n      z-index: 0;\n    }\n\n  `],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class PopoverComponent extends DialogBaseClass implements AfterViewInit, OnInit {\n  public style: Record<string, string> = {};\n  @ViewChild('popover') private popover!: ElementRef<HTMLDivElement>;\n\n  constructor(\n    @Inject(TIP_DIALOG_DATA) private data: any,\n    @Inject(DOCUMENT) protected document: Document,\n    public dialogRef: DialogRef<any, any, any>,\n    protected ngZone: NgZone,\n    private cd: ChangeDetectorRef,\n    private element: ElementRef\n  ) {\n    super();\n    this.style = this.calculateStyle();\n  }\n\n  public ngOnInit(): void {\n    super.ngOnInit();\n    this.ngZone.runOutsideAngular(async () => {\n      await sleep(1000);\n      fromEvent<MouseEvent>(this.document, 'click')\n        .pipe(\n          takeUntil(this.destroy$),\n          filter(e => !this.element.nativeElement.contains(e.target))\n        )\n        .subscribe(() => this.ngZone.run(() => this.dialogRef.cancel()));\n    });\n  }\n\n  @HostBinding('@popUp')\n  public ngAfterViewInit(): void {\n    const position = this.popover.nativeElement.getBoundingClientRect();\n    const window = this.document.defaultView;\n    if (!window) return;\n\n    const windowWidth = window.innerWidth;\n    const overflowRight = (position.x + position.width) - windowWidth;\n\n    const updateStyles: Record<string, string> = {};\n\n    if (position.x < 0) {\n      updateStyles.transform = `translate(calc(-50% + ${Math.abs(position.x - 5)}px), -100%)`;\n    } else if (overflowRight > 0) {\n      updateStyles.transform = `translate(calc(-50% - ${overflowRight + 5}px), -100%)`;\n    }\n\n    if (Object.keys(updateStyles).length > 0) {\n      this.style = {\n        ...this.style,\n        ...updateStyles\n      };\n\n      this.cd.detectChanges();\n    }\n  }\n\n  private calculateStyle(): Record<string, any> {\n    const config = this.dialogRef.dialogConfig as PopoverData<any>;\n    return {\n      'top.px': config.position.y - 10,\n      'left.px': config.position.x,\n    };\n  }\n}\n","import { ChangeDetectionStrategy, Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport type { Editor } from '@tiptap/core';\n\n@Component({\n  selector: 'tip-editor-body, tip-editor-body[minHeight][maxHeight]',\n  template: `\n    <div class=\"editor-body\" [ngStyle]=\"{minHeight: minHeight, maxHeight: maxHeight}\"\n         #bodyWrapper\n    >\n      <div class=\"tiptap-view\" #editorBody></div>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrls: ['./editor-body.component.scss']\n})\nexport class EditorBodyComponent {\n  @Input() public minHeight = '';\n  @Input() public maxHeight = '';\n  private _displayTopCurves = true;\n  private _displayBottomCurves = true;\n  private editor: Editor | null = null;\n  @ViewChild('editorBody') private _editorElement: ElementRef<HTMLDivElement> | null = null;\n  @ViewChild('bodyWrapper') private _bodyWrapper: ElementRef<HTMLDivElement> | null = null;\n\n  public set displayTopCurves(value: boolean) {\n    this._displayTopCurves = value;\n    this.applyBorderClasses();\n  }\n\n  public set displayBottomCurves(value: boolean) {\n    this._displayBottomCurves = value;\n    this.applyBorderClasses();\n\n  }\n\n  get editorElement(): HTMLDivElement | null {\n    return this._editorElement ? this._editorElement.nativeElement : null;\n  }\n\n  public get height(): string {\n    if (this.minHeight && !this.maxHeight) {\n\n      return this.minHeight;\n    }\n\n    if (this.minHeight && !this.maxHeight || this.maxHeight && !this.minHeight) {\n      console.warn('You have to set minHeight and maxHeight of the tip-editor-body for it to work properly.\\n' +\n        'The values however can be the same');\n      return '';\n    } else if (!this.minHeight && !this.maxHeight) {\n      return '';\n    }\n\n    return '200vh';\n  }\n\n  public setEditor(tiptapEditor: Editor): void {\n    this.editor = tiptapEditor;\n  }\n\n  private applyBorderClasses(): void {\n    if (!this._bodyWrapper) return;\n    const wrapperElement = this._bodyWrapper.nativeElement;\n    if (this._displayBottomCurves) {\n      wrapperElement.classList.add('curve-bottom');\n    } else {\n      wrapperElement.classList.remove('curve-bottom');\n    }\n    if (this._displayTopCurves) {\n      wrapperElement.classList.add('curve-top');\n    } else {\n      wrapperElement.classList.remove('curve-top');\n    }\n  }\n\n}\n","import { ChangeDetectionStrategy, Component, ContentChildren, QueryList } from '@angular/core';\nimport { Editor } from '@tiptap/core';\nimport { BaseControl } from '../controls/base-control';\n\n@Component({\n  selector: 'tip-editor-footer',\n  template: `\n    <div class=\"controls-row\">\n      <ng-content></ng-content>\n    </div>\n  `,\n  styleUrls: ['./editor-footer.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EditorFooterComponent {\n  public editor: Editor | null = null;\n\n  @ContentChildren(BaseControl) children: QueryList<BaseControl> | null = null;\n\n  public setEditor(tiptapEditor: Editor): void {\n    this.editor = tiptapEditor;\n    this.passEditorToControls();\n  }\n\n  public passEditorToControls(): void {\n    this.children && this.children.forEach(control => this.editor && control.setEditor(this.editor));\n  }\n\n}\n","import { ChangeDetectionStrategy, Component, ContentChildren, QueryList } from '@angular/core';\nimport type { Editor } from '@tiptap/core';\nimport { BaseControl } from '../controls/base-control';\n\n@Component({\n  selector: 'tip-editor-header',\n  template: `\n    <div class=\"controls-row\">\n      <ng-content></ng-content>\n    </div>\n  `,\n  styleUrls: ['./editor-header.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EditorHeaderComponent {\n  public editor: Editor | null = null;\n\n  @ContentChildren(BaseControl) children: QueryList<BaseControl> | null = null;\n\n  public setEditor(tiptapEditor: Editor): void {\n    this.editor = tiptapEditor;\n    this.passEditorToControls();\n  }\n\n  public passEditorToControls(): void {\n    this.children && this.children.forEach(control => this.editor && control.setEditor(this.editor));\n  }\n\n}\n","import {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  ElementRef,\n  Injector,\n  Input,\n  isDevMode,\n  NgZone,\n  OnChanges,\n  Renderer2,\n  SecurityContext,\n  SimpleChanges,\n  Type,\n  ViewChild\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport type { Extensions } from '@tiptap/core';\nimport { generateHTML } from '@tiptap/core';\nimport { ExtensionBuilder } from '../../extensions/base-extension.model';\nimport { TipBaseExtension } from '../../extensions/tip-base-extension';\n\n@Component({\n  selector: 'tip-editor-preview',\n  template: `\n    <div #contentOutlet></div>\n  `,\n  styleUrls: ['./editor-preview.component.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class EditorPreviewComponent implements AfterViewInit, OnChanges {\n\n  @Input() public extensions: Extensions = [];\n  @Input() public angularExtensions: ExtensionBuilder<any, Type<TipBaseExtension<any>>>[] = [];\n  @Input() public sanitizeHtml = true;\n  @ViewChild('contentOutlet') private contentOutlet: ElementRef<HTMLDivElement> | undefined;\n  private _content: object | string | null = null;\n  private builtExtensions: Extensions = [];\n\n  constructor(\n    private domSanitizer: DomSanitizer,\n    private renderer: Renderer2,\n    private injector: Injector,\n    private ngZone: NgZone\n  ) {\n  }\n\n  @Input()\n  public set content(value: object | string | null) {\n    this._content = value;\n    this.renderOutput();\n  }\n\n  public ngOnChanges(_: SimpleChanges): void {\n    const builtAngularExtensions = this.angularExtensions.map(builder => this.ngZone.run(() => builder.build(this.injector)));\n    this.builtExtensions = [\n      ...this.extensions,\n      ...builtAngularExtensions.map(e => e.nativeExtension)\n    ];\n\n  }\n\n  public ngAfterViewInit(): void {\n    return this.renderOutput();\n  }\n\n  public renderOutput(content: object | string | null = this._content): void {\n    if (!this.contentOutlet) return;\n\n    let html = '';\n    if (typeof content === 'string') {\n      html = content;\n    } else if (content) {\n      // Hopefully fixes the github build, which seems to break for some reason\n      html = generateHTML(content as any, this.builtExtensions);\n    }\n\n    if (this.sanitizeHtml) {\n      html = this.domSanitizer.sanitize(SecurityContext.HTML, html)!;\n\n      if (isDevMode()) {\n        console.warn('The editor preview is sanetizing your HTML. This may lead to missing HTML.');\n      }\n    }\n\n    this.renderer.setProperty(this.contentOutlet.nativeElement, 'innerHTML', html);\n  }\n\n\n}\n","import { InjectionToken } from '@angular/core';\nimport { Extensions } from '@tiptap/core';\nimport { ExtensionBuilder } from './extensions/base-extension.model';\n\nexport const GLOBAL_EXTENSIONS = new InjectionToken<Extensions>('GLOBAL_EXTENSIONS');\nexport const GLOBAL_ANGULAR_EXTENSIONS =\n  new InjectionToken<ExtensionBuilder<any, any>[]>('GLOBAL_ANGULAR_EXTENSIONS');\n","import { isPlatformBrowser } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ContentChild,\n  ElementRef,\n  EventEmitter,\n  Inject,\n  Injector,\n  Input,\n  isDevMode,\n  NgZone,\n  OnDestroy,\n  Optional,\n  Output,\n  PLATFORM_ID,\n  Type\n} from '@angular/core';\nimport type { Content, EditorOptions, Extensions } from '@tiptap/core';\nimport { Editor } from '@tiptap/core';\nimport type { ParseOptions } from 'prosemirror-model';\nimport { Observable, Subject } from 'rxjs';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { ExtensionBuilder } from '../../extensions/base-extension.model';\nimport { TipBaseExtension } from '../../extensions/tip-base-extension';\nimport { fromEditorEvent, getDuplicates } from '../../helpers';\nimport { EditorEventReturn } from '../../models/types';\nimport { GLOBAL_ANGULAR_EXTENSIONS, GLOBAL_EXTENSIONS } from '../../providers';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { TiptapExtensionService } from '../../services/tiptap-extension.service';\nimport { EditorBodyComponent } from '../editor-body/editor-body.component';\nimport { EditorFooterComponent } from '../editor-footer/editor-footer.component';\nimport { EditorHeaderComponent } from '../editor-header/editor-header.component';\n\n// tslint:disable:no-output-native\n@Component({\n  selector: 'tip-editor',\n  template: `\n    <ng-content select=\"tip-editor-header\"></ng-content>\n    <ng-content select=\"tip-editor-body\"></ng-content>\n    <ng-content select=\"tip-editor-footer\"></ng-content>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  styleUrls: ['./editor.component.scss'],\n  providers: [TiptapEventService, TiptapExtensionService]\n})\nexport class EditorComponent implements AfterViewInit, OnDestroy {\n\n  // Content change\n  @Output() public jsonChange = new EventEmitter<Record<string, any>>();\n  @Output() public htmlChange = new EventEmitter<string>();\n\n  // Editor set\n  @Output() public created = new EventEmitter<Editor>();\n\n  // Editor events\n  @Output() public beforeCreate = new EventEmitter<EditorEventReturn['beforeCreate']>();\n  @Output() public create = new EventEmitter<EditorEventReturn['create']>();\n  @Output() public update = new EventEmitter<EditorEventReturn['update']>();\n  @Output() public selectionUpdate = new EventEmitter<EditorEventReturn['selectionUpdate']>();\n  @Output() public transaction = new EventEmitter<EditorEventReturn['transaction']>();\n  @Output() public focus = new EventEmitter<EditorEventReturn['focus']>();\n  @Output() public blur = new EventEmitter<EditorEventReturn['blur']>();\n  @Output() public destroy = new EventEmitter<EditorEventReturn['destroy']>();\n\n  // Editor input params\n  @Input() public content: object | string | null = null;\n  @Input() public injectCSS = true;\n  @Input() public autofocus = true;\n  @Input() public editable = true;\n  @Input() public editorProps: EditorOptions['editorProps'] = {};\n  @Input() public parseOptions: ParseOptions = {};\n  @Input() public enableInputRules = true;\n  @Input() public enablePasteRules = true;\n  @Input() public extensions: Extensions = [];\n  @Input() public angularExtensions: ExtensionBuilder<any, Type<TipBaseExtension<any>>>[] = [];\n  @Input() public runEventsOutsideAngular = true;\n\n  // Load children\n  @ContentChild(EditorBodyComponent) private editorComponent: EditorBodyComponent | undefined;\n  @ContentChild(EditorHeaderComponent) private headerComponent: EditorHeaderComponent | undefined;\n  @ContentChild(EditorFooterComponent) private footerComponent: EditorFooterComponent | undefined;\n  private tiptap: Editor | undefined;\n  private destroy$ = new Subject<boolean>();\n  private builtExtensions: TipBaseExtension<any>[] = [];\n\n  constructor(\n    private ngZone: NgZone,\n    private injector: Injector,\n    private cd: ChangeDetectorRef,\n    private tiptapExtensionService: TiptapExtensionService,\n    @Inject(PLATFORM_ID) private platformId: any,\n    @Optional() @Inject(GLOBAL_EXTENSIONS) private globalExtensions: Extensions | null,\n    @Optional() @Inject(GLOBAL_ANGULAR_EXTENSIONS) private globalAngularExtensions: ExtensionBuilder<any, any>[] | null,\n    eventService: TiptapEventService,\n    element: ElementRef,\n  ) {\n    eventService.setElement(element.nativeElement);\n  }\n\n  public get editor(): Editor | null {\n    return this.tiptap ? this.tiptap : null;\n  }\n\n\n  public async ngAfterViewInit(): Promise<void> {\n    // On the serve you don't need an editor\n    if (!isPlatformBrowser(this.platformId)) return;\n\n    if (!this.editorComponent) {\n      throw new Error('You have to pass the tip-editor-body as a child of the tip-editor. Otherwise you cannot see anything');\n    }\n\n    // Attach the editor to the editor element\n    this.tiptap = this.ngZone.runOutsideAngular(() => new Editor({\n      ...this.buildEditorOptions(),\n      element: this.editorComponent!.editorElement!,\n    }));\n\n    this.setEditorInAngularExtension();\n\n    // Emit the event which indicates that the tiptap editor was created\n    this.created.emit(this.tiptap);\n\n    // Pass the editor the the editorBody component\n    this.editorComponent.setEditor(this.tiptap);\n\n    // Check if the header component was passed and if not disable it\n    if (this.headerComponent) {\n      this.headerComponent.setEditor(this.tiptap);\n      this.editorComponent.displayTopCurves = false;\n    } else {\n      this.editorComponent.displayTopCurves = true;\n    }\n    if (this.footerComponent) {\n      this.footerComponent.setEditor(this.tiptap);\n      this.editorComponent.displayBottomCurves = false;\n    } else {\n      this.editorComponent.displayBottomCurves = true;\n    }\n    this.registerEvents();\n  }\n\n  public ngOnDestroy(): void {\n    this.tiptap && this.tiptap.destroy();\n    this.destroy$.next(true);\n    this.destroy.complete();\n  }\n\n  private registerEvents(): void {\n    if (!this.tiptap) return;\n\n    this.pipeTo(\n      fromEditorEvent(this.tiptap!, 'update').pipe(map(({editor}) => editor.getJSON())),\n      this.jsonChange\n    );\n    this.pipeTo(\n      fromEditorEvent(this.tiptap!, 'update').pipe(map(({editor}) => editor.getHTML())),\n      this.htmlChange\n    );\n    this.pipeTo(fromEditorEvent(this.tiptap!, 'beforeCreate'), this.beforeCreate);\n    this.pipeTo(fromEditorEvent(this.tiptap!, 'create'), this.create);\n    this.pipeTo(fromEditorEvent(this.tiptap!, 'update'), this.update);\n    this.pipeTo(fromEditorEvent(this.tiptap!, 'selectionUpdate'), this.selectionUpdate);\n    this.pipeTo(fromEditorEvent(this.tiptap!, 'transaction'), this.transaction);\n    this.pipeTo(fromEditorEvent(this.tiptap!, 'focus'), this.focus);\n    this.pipeTo(fromEditorEvent(this.tiptap!, 'blur'), this.blur);\n    this.pipeTo(fromEditorEvent(this.tiptap!, 'destroy'), this.destroy);\n  }\n\n  private buildEditorOptions(): Partial<EditorOptions> {\n    return {\n      content: this.content as unknown as Content,\n      autofocus: this.autofocus,\n      injectCSS: this.injectCSS,\n      editable: this.editable,\n      editorProps: this.editorProps,\n      parseOptions: this.parseOptions,\n      enableInputRules: this.enableInputRules,\n      enablePasteRules: this.enablePasteRules,\n      extensions: this.mergeNativeAndAngularExtensions()\n    };\n  }\n\n  private mergeNativeAndAngularExtensions(): Extensions {\n    // Set collection of native extensions in the extension service\n    const nativeExtensions: Extensions = [...this.extensions];\n    if (this.globalExtensions) nativeExtensions.push(...this.globalExtensions);\n    const nativeDuplicates = getDuplicates(nativeExtensions, item => item.name);\n    if (nativeDuplicates && isDevMode()) {\n      throw new Error(`Duplicate tiptap extensions found ${JSON.stringify(Object.keys(nativeDuplicates))}`);\n    }\n    this.tiptapExtensionService.setNativeExtensions(nativeExtensions);\n\n    // Build the angular extensions and set them in the extension service\n    const angularExtensions: ExtensionBuilder<any, any>[] = [...this.angularExtensions];\n    if (this.globalAngularExtensions) angularExtensions.push(...this.globalAngularExtensions);\n    this.builtExtensions = angularExtensions.map(extension => this.ngZone.run(() => extension.build(this.injector)));\n    const ngDuplicates = getDuplicates(this.builtExtensions, item => item.constructor.name);\n    if (ngDuplicates && isDevMode()) {\n      throw new Error(`Duplicate angular-tiptap extensions found (Key is class name): ${JSON.stringify(Object.keys(ngDuplicates))}`);\n    }\n    this.tiptapExtensionService.setAngularExtensions(this.builtExtensions);\n    return [\n      ...this.extensions,\n      ...this.builtExtensions.map(e => e.nativeExtension)\n    ];\n  }\n\n  private pipeTo<T>(observable: Observable<T>, eventEmitter: EventEmitter<T>): void {\n    observable\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(e => {\n        if (this.runEventsOutsideAngular) {\n          this.ngZone.runOutsideAngular(() => eventEmitter.next(e));\n        } else {\n          this.ngZone.run(() => eventEmitter.next(e));\n        }\n      });\n  }\n\n  private setEditorInAngularExtension(): void {\n    for (const angularExtension of this.builtExtensions) {\n      angularExtension.editor = this.tiptap!;\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { DialogRef, TIP_DIALOG_DATA } from '../dialog/dialog.helpers';\n\n@Component({\n  selector: 'tip-link-preview',\n  template: `\n    <div class=\"flex\">\n      <a class=\"v-center link-text\" target=\"_blank\" [href]=\"link\">\n        {{link}}\n      </a>\n      <i style=\"padding: 0 .25rem\" class=\"material-icons pointer\" tabindex=\"0\" (click)=\"deleteLink()\"\n         (keyup.enter)=\"deleteLink()\">link_off</i>\n      <i style=\"padding: 0 .25rem\" class=\"material-icons pointer\" tabindex=\"0\" (click)=\"copyLink()\"\n         (keyup.enter)=\"copyLink()\">content_copy</i>\n      <i style=\"padding: 0 .25rem\" class=\"material-icons pointer\" tabindex=\"0\" (click)=\"editLink()\"\n         (keyup.enter)=\"editLink()\">edit</i>\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class LinkPreviewComponent {\n  constructor(\n    private dialogRef: DialogRef<string, string, LinkPreviewComponent>,\n    @Inject(TIP_DIALOG_DATA) public link: string\n  ) {\n  }\n\n  public deleteLink(): void {\n    this.dialogRef.submit('delete');\n  }\n\n  public editLink(): void {\n    this.dialogRef.submit('edit');\n  }\n\n  public async copyLink(): Promise<void> {\n    await navigator.clipboard.writeText(this.link);\n    this.dialogRef.cancel();\n  }\n}\n","import { AfterViewInit, Directive, ElementRef, Input, NgZone } from '@angular/core';\n\n@Directive({\n  selector: '[tipAutofocus]'\n})\nexport class AutofocusDirective implements AfterViewInit {\n  @Input('tipAutofocus') enable: boolean | string = true;\n\n  constructor(\n    private element: ElementRef,\n    private ngZone: NgZone\n  ) {\n  }\n\n  public ngAfterViewInit(): void {\n    if (typeof this.enable === 'string' || this.enable) {\n      this.ngZone.runOutsideAngular(() => setTimeout(() => this.element.nativeElement.focus()));\n    }\n  }\n}\n","import { ChangeDetectionStrategy, Component, Inject } from '@angular/core';\nimport { DialogRef, TIP_DIALOG_DATA } from '../dialog/dialog.helpers';\nimport { ControlLinkComponent } from '../controls/control-link.component';\n\n\nexport interface LinkSelectionProps {\n  link?: string;\n  inputPlaceholder: string;\n}\n\n// @dynamic\n@Component({\n  selector: 'tip-link-select',\n  template: `\n    <div class=\"flex\">\n      <input class=\"tip-input\" [placeholder]=\"data?.inputPlaceholder\" tipAutofocus type=\"text\" #input\n             [value]=\"data.link\"\n             (keyup.enter)=\"submit(input.value, $event)\">\n      <button type=\"button\" (click)=\"submit(input.value)\" (keyup.enter)=\"submit(input.value)\"\n              class=\"tip-button margin-left-s\">Apply\n      </button>\n    </div>\n    <small style=\"color: var(--tip-warn-color)\" *ngIf=\"error\">{{error}}</small>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LinkSelectComponent {\n  public error: string | null = null;\n  private urlRegex = new RegExp('^(https?:\\\\/\\\\/)?' + // protocol\n    '((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|' + // domain name\n    '((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))' + // OR ip (v4) address\n    '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*' + // port and path\n    '(\\\\?[;&a-z\\\\d%_.~+=-]*)?' + // query string\n    '(\\\\#[-a-z\\\\d_]*)?$', 'i');\n\n  constructor(\n    private dialogRef: DialogRef<string, string, ControlLinkComponent>,\n    @Inject(TIP_DIALOG_DATA) public data: { link: string, popupText: string, inputPlaceholder: string },\n  ) {\n  }\n\n  public submit(value: string, event?: Event): void {\n    // Stop selected text being replaced by the enter\n    event && event.preventDefault();\n\n    if (!/^(https?:\\/\\/).*/.test(value)) value = `https://${value}`;\n\n    if (this.urlRegex.test(value)) {\n      this.dialogRef.submit(value);\n    } else {\n      this.error = 'Invalid URL';\n    }\n  }\n}\n","import { AfterViewInit, ChangeDetectionStrategy, Component, ContentChild, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { EditorPreviewComponent } from '../editor-preview/editor-preview.component';\nimport { EditorComponent } from '../editor/editor.component';\n\n@Component({\n  selector: 'tip-side-by-side',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    <ng-content select=\"tip-editor\"></ng-content>\n    <div class=\"preview-wrapper\">\n      <div class=\"preview-heading v-center h-center\">\n        <h2 class=\"no-margin\">Preview</h2>\n      </div>\n      <ng-content select=\"tip-editor-preview\"></ng-content>\n    </div>\n  `,\n  styles: [`\n    :host-context {\n      display: flex;\n      width: 100%;\n    }\n\n    .preview-heading {\n      border-bottom: solid 1px var(--tip-border-color);\n      padding: var(--tip-header-padding);\n      height: var(--tip-header-height);\n      box-sizing: border-box;\n    }\n\n    .preview-wrapper {\n      border: solid 1px var(--tip-border-color);\n      border-left: none;\n      width: 50%;\n    }\n\n    ::ng-deep tip-side-by-side > tip-editor {\n      width: 50%;\n    }\n  `]\n})\nexport class SideBySideComponent implements AfterViewInit, OnDestroy {\n  @ContentChild(EditorComponent) private editor!: EditorComponent;\n  @ContentChild(EditorPreviewComponent) private preview!: EditorPreviewComponent;\n\n  private destroy$ = new Subject<boolean>();\n\n  public ngAfterViewInit(): void {\n    this.editor.jsonChange\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((content) => {\n        this.preview.renderOutput(content);\n      });\n  }\n\n  public ngOnDestroy(): void {\n    this.destroy$.next(true);\n    this.destroy$.complete();\n  }\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'tip-util-br',\n  template: ``,\n  styles: [`:host-context {\n    flex-basis: 100%;\n  }`],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UtilBreakLineComponent {\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'tip-util-hr',\n  template: `\n    <hr>`,\n  styles: [`\n    :host-context {\n      display: contents;\n    }\n\n    hr {\n      flex-basis: calc(100% + var(--tip-header-padding) * 2);\n      margin: var(--tip-header-padding) calc(var(--tip-header-padding) * -1);\n      border: none;\n      border-top: solid 1px var(--tip-border-color);\n    }`],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UtilHorizontalDividerComponent {\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'tip-util-padding',\n  template: ``,\n  styles: [`:host-context {\n    width: calc(var(--tip-header-padding) / 2);\n  }`],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UtilPaddingComponent {\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'tip-util-spacer',\n  template: ``,\n  styles: [`:host-context {\n    flex-grow: 1;\n  }`],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UtilSpacerComponent {\n}\n","import { ChangeDetectionStrategy, Component } from '@angular/core';\n\n@Component({\n  selector: 'tip-util-vr',\n  template: ``,\n  styles: [`:host-context {\n    width: 1px;\n    border-left: solid 1px var(--tip-border-color);\n    height: var(--tip-header-height);\n    margin-top: calc(var(--tip-header-padding) * -1);\n    margin-bottom: calc(var(--tip-header-padding) * -1);\n  }`],\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class UtilVerticalDividerComponent {\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject, InjectionToken } from '@angular/core';\nimport { Editor } from '@tiptap/core';\nimport { SuggestionProps } from '@tiptap/suggestion';\nimport { MentionData } from './ngx-mention';\n\nexport const MENTION_FETCH = new InjectionToken<MentionFetchFunction>('MENTION_FETCH');\nexport type MentionFetchFunction = (query: string) => MentionData[] | Promise<MentionData[]>;\n\nexport interface MentionPreviewInterface {\n  handleKeyPress(event: KeyboardEvent): boolean;\n\n  updateProps(props: SuggestionProps): void;\n}\n\n// @dynamic\n@Component({\n  selector: 'tip-mention-select',\n  template: `\n    <button *ngFor=\"let item of queryResult\" (click)=\"setMention(item)\" (keyup.enter)=\"setMention(item)\">\n      {{item.id}}\n    </button>\n    <div *ngIf=\"queryResult.length === 0\">\n      No result was found\n    </div>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class MentionPreviewComponent implements MentionPreviewInterface {\n  public queryResult: { id: string }[] = [];\n  private mentionProps!: SuggestionProps;\n\n  constructor(\n    private ngZone: ChangeDetectorRef,\n    private cd: ChangeDetectorRef,\n    private editor: Editor,\n    @Inject(MENTION_FETCH) private fetchFunction: MentionFetchFunction\n  ) {\n  }\n\n  handleKeyPress(event: KeyboardEvent): boolean {\n    return false;\n  }\n\n  public async updateProps(props: SuggestionProps): Promise<void> {\n    this.mentionProps = props;\n    this.queryResult = await this.fetchFunction(props.query);\n    this.cd.detectChanges();\n  }\n\n  public setMention(mention: { id: string }): void {\n    this.mentionProps.command(mention);\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ControlBoldComponent } from './components/controls/control-bold.component';\nimport { ControlBulletListComponent } from './components/controls/control-bullet-list.component';\nimport { ControlCodeBlockComponent } from './components/controls/control-code-block.component';\nimport { ControlCodeComponent } from './components/controls/control-code.component';\nimport { ControlFormatComponent } from './components/controls/control-format.component';\nimport { HorizontalRuleControlComponent } from './components/controls/control-hr.component';\nimport { ControlItalicComponent } from './components/controls/control-italic.component';\nimport { ControlLinkComponent } from './components/controls/control-link.component';\nimport { ControlMentionComponent } from './components/controls/control-mention.component';\nimport { ControlNumberListComponent } from './components/controls/control-number-list.component';\nimport { ControlStrikeComponent } from './components/controls/control-strike.component';\nimport { ControlTasklistComponent } from './components/controls/control-tasklist.component';\nimport { ControlTextAlignComponent } from './components/controls/control-text-align.component';\nimport { ControlUnderlineComponent } from './components/controls/control-underline.component';\nimport { DisplayCharacterCountComponent } from './components/controls/display-character-count.component';\nimport { DialogComponent } from './components/dialog/dialog.component';\nimport { PopoverComponent } from './components/dialog/popover.component';\nimport { EditorBodyComponent } from './components/editor-body/editor-body.component';\nimport { EditorFooterComponent } from './components/editor-footer/editor-footer.component';\nimport { EditorHeaderComponent } from './components/editor-header/editor-header.component';\nimport { EditorPreviewComponent } from './components/editor-preview/editor-preview.component';\nimport { EditorComponent } from './components/editor/editor.component';\nimport { LinkPreviewComponent } from './components/link/preview.component';\nimport { LinkSelectComponent } from './components/link/selection.component';\nimport { OptionComponent, SelectComponent } from './components/select/select.component';\nimport { SideBySideComponent } from './components/side-by-side/side-by-side.component';\nimport { UtilBreakLineComponent } from './components/utils/util-break-line.component';\nimport { UtilHorizontalDividerComponent } from './components/utils/util-horizontal-divider.component';\nimport { UtilPaddingComponent } from './components/utils/util-padding.component';\nimport { UtilSpacerComponent } from './components/utils/util-spacer.component';\nimport { UtilVerticalDividerComponent } from './components/utils/util-vertical-divider.component';\nimport { AutofocusDirective } from './directives/autofocus.directive';\nimport { MentionPreviewComponent } from './extensions/custom/mention/mention-preview.component';\n\n\n@NgModule({\n  declarations: [\n    // Editor\n    EditorComponent,\n    EditorBodyComponent,\n    EditorHeaderComponent,\n    EditorFooterComponent,\n    // Preview\n    EditorPreviewComponent,\n    SideBySideComponent,\n    // Control alignment\n    UtilBreakLineComponent,\n    UtilHorizontalDividerComponent,\n    UtilPaddingComponent,\n    UtilSpacerComponent,\n    UtilVerticalDividerComponent,\n    // Controls\n    ControlBoldComponent,\n    ControlBulletListComponent,\n    ControlCodeBlockComponent,\n    ControlCodeComponent,\n    ControlFormatComponent,\n    HorizontalRuleControlComponent,\n    ControlItalicComponent,\n    ControlMentionComponent,\n    ControlNumberListComponent,\n    ControlStrikeComponent,\n    ControlTasklistComponent,\n    ControlTextAlignComponent,\n    ControlUnderlineComponent,\n    ControlLinkComponent,\n    // Display\n    DisplayCharacterCountComponent,\n    // Common\n    OptionComponent,\n    SelectComponent,\n    DialogComponent,\n    // Private\n    LinkSelectComponent,\n    AutofocusDirective,\n    LinkPreviewComponent,\n    PopoverComponent,\n    MentionPreviewComponent,\n  ],\n  imports: [\n    CommonModule,\n    BrowserAnimationsModule,\n  ],\n  exports: [\n    // Editor\n    EditorComponent,\n    EditorBodyComponent,\n    EditorHeaderComponent,\n    EditorFooterComponent,\n    // Preview\n    EditorPreviewComponent,\n    SideBySideComponent,\n    // Control alignment\n    UtilBreakLineComponent,\n    UtilHorizontalDividerComponent,\n    UtilPaddingComponent,\n    UtilSpacerComponent,\n    UtilVerticalDividerComponent,\n    // Controls\n    ControlBoldComponent,\n    ControlBulletListComponent,\n    ControlCodeBlockComponent,\n    ControlCodeComponent,\n    ControlFormatComponent,\n    HorizontalRuleControlComponent,\n    ControlItalicComponent,\n    ControlMentionComponent,\n    ControlNumberListComponent,\n    ControlStrikeComponent,\n    ControlTasklistComponent,\n    ControlTextAlignComponent,\n    ControlUnderlineComponent,\n    ControlLinkComponent,\n    // Display\n    DisplayCharacterCountComponent,\n    // Common\n    OptionComponent,\n    SelectComponent,\n  ],\n  providers: []\n})\nexport class NgxTipTapEditorModule {\n}\n","import {\n  ApplicationRef,\n  ComponentFactoryResolver,\n  ComponentRef,\n  EmbeddedViewRef,\n  Injector,\n  NgZone,\n  StaticProvider,\n  Type\n} from '@angular/core';\nimport { AnyExtension, Editor } from '@tiptap/core';\nimport { Subject } from 'rxjs';\nimport { deepMerge } from '../helpers';\nimport { C, ObjectProp } from '../models/utility-types';\nimport { Constructor, ExtensionBuilder } from './base-extension.model';\n\nexport interface TipBaseExtension<T> {\n  defaultOptions: Partial<T>;\n\n  onEditorReady(): void | Promise<void>;\n\n  onEditorDestroy(): void | Promise<void>;\n}\n\nexport abstract class TipBaseExtension<T extends object> {\n  protected destroy$ = new Subject<boolean>();\n  private _nativeExtension!: AnyExtension;\n  private _options!: T;\n  private _editor!: Editor;\n\n  public static create<EXTENSION extends Constructor, OPTIONS extends Partial<ObjectProp<C.Instance<EXTENSION>, 'options'>>>(\n    extension: EXTENSION,\n    extensionOptions: OPTIONS,\n  ): ExtensionBuilder<OPTIONS, EXTENSION> {\n    return {\n      options: extensionOptions,\n      angularExtension: extension,\n      build(parentInjector: Injector): C.Instance<EXTENSION> {\n\n        const injector = Injector.create({\n          providers: [{provide: this.angularExtension}],\n          parent: parentInjector\n        });\n\n        const injectedExtension = injector.get(this.angularExtension);\n        injectedExtension.options = this.options;\n        injectedExtension.nativeExtension = injectedExtension.createExtension(injectedExtension.options);\n        return injectedExtension;\n      }\n    };\n  }\n\n  public abstract createExtension(extensionOptions: Required<T>): AnyExtension;\n\n  public set options(value: T) {\n    if (this._options) throw new Error(`${this.constructor.name} already has the options set. Don't try to set it twice.`);\n    this._options = this.defaultOptions ? deepMerge(this.defaultOptions, value) as T : value;\n  }\n\n  public get options(): T {\n    return this._options;\n  }\n\n  public set editor(value: Editor) {\n    if (this._editor) throw new Error(`${this.constructor.name} already has the editor set. Don't try to set it twice.`);\n    this._editor = value;\n    this._editor.on('destroy', () => {\n      this.onEditorDestroy && this.onEditorDestroy();\n      this.destroy$.next(true);\n      this.destroy$.complete();\n    });\n    this.onEditorReady && this.onEditorReady();\n  }\n\n  public get editor(): Editor {\n    return this._editor;\n  }\n\n  public set nativeExtension(value: AnyExtension) {\n    if (this._nativeExtension) throw new Error(`${this.constructor.name} already has a nativeExtension assigned to it. Don't try to assign it twice`);\n    this._nativeExtension = value;\n  }\n\n  public get nativeExtension(): AnyExtension {\n    return this._nativeExtension;\n  }\n}\n\nexport abstract class AdvancedBaseExtension<T extends object> extends TipBaseExtension<T> {\n  protected abstract injector: Injector;\n\n  /**\n   * Inject the provided component at any position in the dom\n   * @param component The component which should be injected\n   * @param injectionPoint The point you want to inject the component into (this.document.body for example)\n   */\n  protected createAndInsertIntoDom<COMP>(component: Type<COMP>, injectionPoint: HTMLElement): { remove: () => void } {\n    const componentRef = this.createComponent(component);\n    return this.insertComponent(componentRef, injectionPoint);\n  }\n\n  protected insertComponent(componentRef: ComponentRef<any>, injectionPoint: HTMLElement): { remove: () => void } {\n    const appRef = this.injector.get(ApplicationRef);\n    appRef.attachView(componentRef.hostView);\n    const domElement = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n    injectionPoint.appendChild(domElement);\n\n    const ngZone = this.injector.get(NgZone);\n    return {\n      remove: () => {\n        ngZone.run(() => {\n          appRef.detachView(componentRef.hostView);\n          componentRef.destroy();\n        });\n      }\n    };\n  }\n\n  protected createComponent<COMP>(component: Type<COMP>, additionalProviders: StaticProvider[] = []): ComponentRef<COMP> {\n    const componentFactoryResolver = this.injector.get(ComponentFactoryResolver);\n    const componentFactory = componentFactoryResolver.resolveComponentFactory(component);\n\n    const injector = Injector.create({\n      providers: additionalProviders,\n      parent: this.injector\n    });\n\n    return componentFactory.create(injector);\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ApplicationRef, ComponentFactoryResolver, ComponentRef, EmbeddedViewRef, Inject, Injectable, Injector, Type } from '@angular/core';\nimport { DialogComponent } from '../components/dialog/dialog.component';\nimport { DialogBaseClass, DialogData, DialogRef, PopoverData, TIP_DIALOG_DATA } from '../components/dialog/dialog.helpers';\nimport { PopoverComponent } from '../components/dialog/popover.component';\n\n// @dynamic\n@Injectable({providedIn: 'root'})\nexport class TipDialogService {\n\n  constructor(\n    private componentFactoryResolver: ComponentFactoryResolver,\n    private appRef: ApplicationRef,\n    private injector: Injector,\n    @Inject(DOCUMENT) private document: Document\n  ) {\n  }\n\n  public openDialog<RETURN, DATA = any, COMPONENT = any>(\n    component: Type<COMPONENT>,\n    config: Partial<DialogData<DATA>> = {}\n  ): DialogRef<RETURN, DATA, Type<COMPONENT>> {\n    // Fill with default values\n    const newConfig: DialogData<DATA> = {\n      ...{\n        type: 'dialog',\n        autoClose: true,\n        maxWidth: '1000px',\n        width: '50%',\n        backdropColor: 'var(--tip-overlay-color)',\n        position: 'center'\n      }, ...config\n    };\n\n    return this.createAndAttachComponent(component, newConfig, DialogComponent);\n  }\n\n  public openPopover<RETURN, DATA = any, COMPONENT extends Type<any> = any>(\n    component: COMPONENT,\n    config: Partial<PopoverData<DATA>> & { position: PopoverData<any>['position'] }\n  ): DialogRef<RETURN, DATA, COMPONENT> {\n\n    const newConfig: PopoverData<DATA> = {\n      ...{\n        type: 'popover',\n        autoClose: true,\n        maxWidth: 'auto',\n        width: 'auto',\n        backdropColor: 'transparent',\n      },\n      ...config\n    };\n\n    return this.createAndAttachComponent(component, newConfig, PopoverComponent);\n  }\n\n  /**\n   * @param component The component which will be displayed\n   * @param config The config of the dialog\n   * @param wrapperComponent The wrapper component which will encapsulate the user component\n   */\n  private createAndAttachComponent(\n    component: Type<any>,\n    config: DialogData<any> | PopoverData<any>,\n    wrapperComponent: Type<PopoverComponent | DialogComponent>\n  ): DialogRef<any, any, any> {\n\n\n    const dialogReference: { component?: ComponentRef<DialogBaseClass> } = {};\n    const dialogRef = new DialogRef<any, any, any>(component, this.appRef, dialogReference, config);\n    const componentInjector = Injector.create({\n      providers: [\n        {provide: TIP_DIALOG_DATA, useValue: config.data},\n        {provide: DialogRef, useValue: dialogRef}\n      ],\n      parent: this.injector\n    });\n\n    // Create the component wrapper which in turn will attach the user component to the view\n    const componentFactory = this.componentFactoryResolver.resolveComponentFactory(wrapperComponent);\n    const componentRef = componentFactory.create(componentInjector);\n    dialogReference.component = componentRef;\n    this.appRef.attachView(componentRef.hostView);\n\n    // Attach the component wrapper\n    const domElement = (componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n    this.document.body.appendChild(domElement);\n\n    return dialogRef;\n  }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ComponentRef, Inject, Injectable, Injector, NgZone, Type } from '@angular/core';\nimport { AnyExtension, Editor, mergeAttributes, Node, Range, RawCommands } from '@tiptap/core';\nimport { Mention, MentionOptions } from '@tiptap/extension-mention';\nimport { Node as ProseMirrorNode } from 'prosemirror-model';\nimport { fromEvent, Subject, Subscription } from 'rxjs';\nimport { TipDialogService } from '../../../services/dialog.service';\nimport { AdvancedBaseExtension } from '../../tip-base-extension';\nimport {\n  MENTION_FETCH,\n  MentionFetchFunction,\n  MentionPreviewComponent,\n  MentionPreviewInterface\n} from './mention-preview.component';\n\nexport type MentionData = { id: string, label?: string } | { id: string, label: null; };\n\ndeclare module '@tiptap/core' {\n  interface Commands<ReturnType> {\n    mention: {\n      setMention: (attributes: { range?: Range | number, props: MentionData }) => ReturnType,\n    };\n  }\n}\n\ninterface NgxMentionOptions {\n  previewComponent: Type<MentionPreviewInterface>;\n  HTMLAttributes: Record<string, any>;\n  renderLabel: (props: {\n    options: MentionOptions,\n    node: ProseMirrorNode,\n  }) => string;\n  mentionFetchFunction?: MentionFetchFunction;\n}\n\n// @dynamic\n@Injectable()\nexport class NgxMention extends AdvancedBaseExtension<NgxMentionOptions> {\n\n  // tslint:disable:member-ordering\n  private _onClick$ = new Subject<MentionData>();\n  public onClick$ = this._onClick$.asObservable();\n\n  public defaultOptions = {\n    HTMLAttributes: {class: 'mention'},\n    previewComponent: MentionPreviewComponent\n  };\n\n  // tslint:enable:member-ordering\n\n  constructor(\n    protected injector: Injector,\n    private ngZone: NgZone,\n    @Inject(DOCUMENT) private document: Document,\n    private dialogService: TipDialogService\n  ) {\n    super();\n  }\n\n  public createExtension(extensionOptions: Required<NgxMentionOptions>): AnyExtension {\n    const extendedMention = this.extendMention();\n    const mentionOptions = this.configureMention(extensionOptions);\n    return extendedMention.configure(mentionOptions);\n  }\n\n  private extendMention(): Node<MentionOptions> {\n    const listeners: Subscription[] = [];\n    const self = this;\n\n    return Mention.extend({\n      // Remove listeners\n      onDestroy: () => listeners.forEach(l => l.unsubscribe()),\n      renderHTML({node, HTMLAttributes}): any {\n\n        const span = document.createElement('span');\n        span.textContent = this.options.renderLabel({options: this.options, node});\n        // Subscribe to click events and pass them to the onClick Subject\n        const subscription = fromEvent(span, 'click').subscribe(() => self._onClick$.next(node.attrs as any));\n        listeners.push(subscription);\n\n        const attributes = mergeAttributes({'data-mention': ''}, this.options.HTMLAttributes, HTMLAttributes);\n        Object.keys(attributes).forEach(key => span.setAttribute(key, attributes[key]));\n\n        return span;\n      },\n      addCommands(): Partial<RawCommands> {\n        return {\n          setMention: ({range, props}) => ({commands, state}) => {\n\n            // If range was not provided just insert at the current position\n            if (!range) range = state.selection;\n\n            return commands.insertContentAt(range, [\n              {\n                type: 'mention',\n                attrs: props,\n              },\n              {\n                type: 'text',\n                text: ' ',\n              },\n            ]);\n          }\n        };\n      },\n    });\n  }\n\n  private configureMention({...mentionOptions}: Partial<MentionOptions> & NgxMentionOptions): NgxMentionOptions {\n\n    // Check if the fetch function is provided and if not don't register events for it\n    if (mentionOptions.mentionFetchFunction) {\n      mentionOptions.suggestion = {\n        render: () => {\n          let component: ComponentRef<MentionPreviewInterface>;\n          let remove: { remove: () => void; };\n          return this.ngZone.run(() => ({\n            onStart: props => {\n              component = this.createComponent(mentionOptions.previewComponent, [{\n                provide: Editor,\n                useValue: props.editor\n              }, {\n                provide: MENTION_FETCH,\n                useValue: mentionOptions.mentionFetchFunction\n              }]);\n              component.instance.updateProps(props);\n              remove = this.insertComponent(component, this.document.body);\n            },\n            onKeyDown: (props) => component.instance.handleKeyPress(props.event),\n            onUpdate: props => component.instance.updateProps(props),\n            onExit: () => remove.remove(),\n          }));\n        },\n        ...mentionOptions.suggestion\n      };\n    }\n\n    return mentionOptions;\n  }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable, NgZone } from '@angular/core';\nimport { AnyExtension, Editor } from '@tiptap/core';\nimport { Link, LinkOptions } from '@tiptap/extension-link';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { DialogRef, ResultData } from '../../components/dialog/dialog.helpers';\nimport { LinkPreviewComponent } from '../../components/link/preview.component';\nimport { LinkSelectComponent, LinkSelectionProps } from '../../components/link/selection.component';\nimport {\n  fromEditorEvent,\n  getLinkDOMFromCursorPosition,\n  getLinkFromCursorPosition,\n  getSelectedEditorTextPosition\n} from '../../helpers';\nimport { TipDialogService } from '../../services/dialog.service';\nimport { TiptapEventService } from '../../services/tiptap-event.service';\nimport { TipBaseExtension } from '../tip-base-extension';\n\nexport interface NgxLinkOptions {\n  native: Partial<LinkOptions>;\n  ng: Partial<{\n    inputPlaceholder: string;\n  }>;\n}\n\n// @dynamic\n@Injectable()\nexport class NgxLink extends TipBaseExtension<NgxLinkOptions> {\n\n  public defaultOptions: Partial<NgxLinkOptions> = {\n    ng: {\n      inputPlaceholder: 'Input a link',\n    }\n  };\n  private createDialog: DialogRef<any, any, any> | null = null;\n  private previewDialog: DialogRef<any, any, any> | null = null;\n  private linkElement: HTMLAnchorElement | null = null;\n\n  constructor(\n    private dialogService: TipDialogService,\n    protected eventService: TiptapEventService,\n    private ngZone: NgZone,\n    @Inject(DOCUMENT) private document: Document\n  ) {\n    super();\n  }\n\n  public onEditorDestroy(): void {\n    this.closeLinkPreview();\n    this.createDialog?.cancel();\n  }\n\n  public onEditorReady(): void {\n    this.eventService.registerShortcut('Mod-k')\n      .pipe(\n        tap((e) => e.preventDefault()),\n        filter(() => this.can()),\n        takeUntil(this.destroy$),\n      ).subscribe(() => this.openCreateLinkDialog());\n\n    fromEditorEvent(this.editor, 'transaction').pipe(\n      takeUntil(this.destroy$),\n      filter(e => !e.transaction.getMeta('blur')),\n    ).subscribe(({editor: e}) => this.toggleLinkPreview(e));\n  }\n\n  public createExtension(extensionOptions: NgxLinkOptions): AnyExtension {\n    return Link.configure(extensionOptions.native);\n  }\n\n  public async openCreateLinkDialog(): Promise<void> {\n    if (!this.editor) return;\n\n    const link = getLinkFromCursorPosition(this.editor);\n    const position = getSelectedEditorTextPosition(this.editor);\n    if (!position) return;\n\n    this.createDialog = this.ngZone.run(() => this.dialogService.openPopover<string, LinkSelectionProps>(LinkSelectComponent, {\n      width: 'auto',\n      position: position.topCenter,\n      autoClose: true,\n      data: {\n        link,\n        inputPlaceholder: this.options.ng.inputPlaceholder as string\n      }\n    }));\n\n    const result: ResultData<string> = await this.createDialog.result$.toPromise();\n    this.createDialog = null;\n    if (result.status === 'canceled') {\n      this.editor.commands.focus();\n      return;\n    }\n\n    const {from, to} = this.editor.state.selection;\n    this.editor.chain().focus()\n      .extendMarkRange('link')\n      .unsetLink()\n      .setLink({href: result.data!})\n      .setTextSelection({from, to})\n      .run();\n  }\n\n  public can(): boolean {\n    if (!this.editor) return false;\n\n    const active = this.isActive();\n    const {from, to} = this.editor.state.selection;\n    return !!this.editor?.can().setLink({href: ''}) && from !== to || from === to && active;\n  }\n\n  public isActive(): boolean {\n    return !!this.editor && 'href' in this.editor.getAttributes('link');\n  }\n\n  private async toggleLinkPreview(editor: Editor): Promise<void> {\n    if (\n      // Link creation dialog is open\n      this.createDialog ||\n      // Not active\n      !this.isActive() ||\n      // Some text selected\n      editor.view.state.selection.from !== editor.view.state.selection.to\n    ) {\n      return this.closeLinkPreview();\n    }\n\n    // Get the link and the anchor element\n    const link = getLinkFromCursorPosition(this.editor);\n    const linkElement = getLinkDOMFromCursorPosition(this.editor, link);\n    // Not a link element\n    if (!linkElement) {\n      return this.closeLinkPreview();\n    }\n\n    // Already open and no different link element selected\n    if (this.previewDialog && linkElement === this.linkElement) return;\n\n    // Different link element, so close the preview and create a new dialog\n    this.closeLinkPreview();\n    this.linkElement = linkElement;\n    const position = linkElement.getBoundingClientRect();\n    const previewDialog = this.ngZone.run(() => this.dialogService.openPopover<'delete' | 'edit'>(LinkPreviewComponent, {\n      position: {\n        x: position.x + position.width / 2,\n        y: position.y\n      },\n      data: link\n    }));\n    // Prevent race conditions from overwriting the preview dialog\n    this.previewDialog = previewDialog;\n\n    // Get result of dialog\n    const result = await previewDialog.result$.toPromise();\n    // Fixes race condition\n    if (this.previewDialog === previewDialog) {\n      this.closeLinkPreview();\n    }\n\n    if (result.data === 'delete') {\n      this.editor.chain().focus().unsetLink().run();\n    } else if (result.data === 'edit') {\n      this.editor.commands.focus();\n      await this.openCreateLinkDialog();\n    }\n  }\n\n  private closeLinkPreview(): void {\n    this.linkElement = null;\n    if (this.previewDialog) {\n      this.ngZone.run(() => this.previewDialog!.cancel());\n      this.previewDialog = null;\n    }\n  }\n}\n","/*\n * Public API Surface of ngx-tiptap-editor\n */\n\n// Module\nexport { NgxTipTapEditorModule } from './lib/ngx-tiptap-editor.module';\n\n// Editor\nexport { EditorComponent } from './lib/components/editor/editor.component';\nexport { EditorBodyComponent } from './lib/components/editor-body/editor-body.component';\nexport { EditorFooterComponent } from './lib/components/editor-footer/editor-footer.component';\nexport { EditorHeaderComponent } from './lib/components/editor-header/editor-header.component';\n\n// Preview\nexport { EditorPreviewComponent } from './lib/components/editor-preview/editor-preview.component';\nexport { SideBySideComponent } from './lib/components/side-by-side/side-by-side.component';\n\n// Control alignment\nexport { UtilBreakLineComponent } from './lib/components/utils/util-break-line.component';\nexport {\n  UtilHorizontalDividerComponent\n} from './lib/components/utils/util-horizontal-divider.component';\nexport { UtilPaddingComponent } from './lib/components/utils/util-padding.component';\nexport { UtilSpacerComponent } from './lib/components/utils/util-spacer.component';\nexport {\n  UtilVerticalDividerComponent\n} from './lib/components/utils/util-vertical-divider.component';\n\n\n// Controls\nexport {\n  BaseControl, ButtonBaseControl, ExtendedBaseControl, SelectBaseControl\n} from './lib/components/controls/base-control';\nexport { ControlBoldComponent } from './lib/components/controls/control-bold.component';\nexport { ControlBulletListComponent } from './lib/components/controls/control-bullet-list.component';\nexport { ControlCodeBlockComponent } from './lib/components/controls/control-code-block.component';\nexport { ControlCodeComponent } from './lib/components/controls/control-code.component';\nexport { ControlFormatComponent } from './lib/components/controls/control-format.component';\nexport { HorizontalRuleControlComponent } from './lib/components/controls/control-hr.component';\nexport { ControlItalicComponent } from './lib/components/controls/control-italic.component';\nexport { ControlLinkComponent } from './lib/components/controls/control-link.component';\nexport {\n  ControlMentionComponent, MentionCallback\n} from './lib/components/controls/control-mention.component';\nexport { ControlNumberListComponent } from './lib/components/controls/control-number-list.component';\nexport { ControlStrikeComponent } from './lib/components/controls/control-strike.component';\nexport { ControlTasklistComponent } from './lib/components/controls/control-tasklist.component';\nexport { ControlTextAlignComponent } from './lib/components/controls/control-text-align.component';\nexport { ControlUnderlineComponent } from './lib/components/controls/control-underline.component';\nexport { DisplayCharacterCountComponent } from './lib/components/controls/display-character-count.component';\n\n// Common\nexport { SelectComponent, OptionComponent } from './lib/components/select/select.component';\n\n// Services\nexport { TiptapEventService } from './lib/services/tiptap-event.service';\nexport { TiptapExtensionService } from './lib/services/tiptap-extension.service';\nexport { GLOBAL_ANGULAR_EXTENSIONS, GLOBAL_EXTENSIONS } from './lib/providers';\n\n// Extensions\nexport { NgxMention, MentionData } from './lib/extensions/custom/mention/ngx-mention';\nexport {\n  MentionPreviewInterface, MentionFetchFunction\n} from './lib/extensions/custom/mention/mention-preview.component';\nexport { NgxLink, NgxLinkOptions } from './lib/extensions/custom/ngx-link';\nexport { TipBaseExtension, AdvancedBaseExtension } from './lib/extensions/tip-base-extension';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["rxFrom"],"mappings":"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"}