ngx-tiptap-editor
Version:
[](https://github.com/HuiiBuh/ngx-tiptap-editor/actions/workflows/publish.yml) [
{"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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"}