{"version":3,"file":"ngx-editor.mjs","sources":["../../../projects/ngx-editor/src/lib/stringUtil.ts","../../../projects/ngx-editor/src/lib/trustedTypesUtil.ts","../../../projects/ngx-editor/src/lib/parsers.ts","../../../projects/ngx-editor/src/lib/plugins/editable.ts","../../../projects/ngx-editor/src/lib/plugins/placeholder.ts","../../../projects/ngx-editor/src/lib/plugins/attributes.ts","../../../projects/ngx-editor/src/lib/plugins/focus.ts","../../../projects/ngx-editor/src/lib/plugins/blur.ts","../../../projects/ngx-editor/src/lib/components/image-view/image-view.component.ts","../../../projects/ngx-editor/src/lib/components/image-view/image-view.component.html","../../../projects/ngx-editor/src/lib/plugins/image-resize.ts","../../../projects/ngx-editor/src/lib/plugins/link.ts","../../../projects/ngx-editor/src/lib/editor.component.ts","../../../projects/ngx-editor/src/lib/editor.component.html","../../../projects/ngx-editor/src/lib/pipes/sanitize/sanitize-html.pipe.ts","../../../projects/ngx-editor/src/lib/commands/Mark.ts","../../../projects/ngx-editor/src/lib/commands/Blockquote.ts","../../../projects/ngx-editor/src/lib/commands/HorizontalRule.ts","../../../projects/ngx-editor/src/lib/commands/ListItem.ts","../../../projects/ngx-editor/src/lib/commands/Heading.ts","../../../projects/ngx-editor/src/lib/commands/TextAlign.ts","../../../projects/ngx-editor/src/lib/commands/Link.ts","../../../projects/ngx-editor/src/lib/commands/Image.ts","../../../projects/ngx-editor/src/lib/commands/TextColor.ts","../../../projects/ngx-editor/src/lib/commands/FormatClear.ts","../../../projects/ngx-editor/src/lib/commands/Indent.ts","../../../projects/ngx-editor/src/lib/commands/History.ts","../../../projects/ngx-editor/src/lib/commands/index.ts","../../../projects/ngx-editor/src/lib/modules/menu/MenuCommands.ts","../../../projects/ngx-editor/src/lib/modules/menu/menu.service.ts","../../../projects/ngx-editor/src/lib/Locals.ts","../../../projects/ngx-editor/src/lib/icons/bold.ts","../../../projects/ngx-editor/src/lib/icons/italic.ts","../../../projects/ngx-editor/src/lib/icons/code.ts","../../../projects/ngx-editor/src/lib/icons/underline.ts","../../../projects/ngx-editor/src/lib/icons/strike.ts","../../../projects/ngx-editor/src/lib/icons/ordered_list.ts","../../../projects/ngx-editor/src/lib/icons/bullet_list.ts","../../../projects/ngx-editor/src/lib/icons/quote.ts","../../../projects/ngx-editor/src/lib/icons/link.ts","../../../projects/ngx-editor/src/lib/icons/unlink.ts","../../../projects/ngx-editor/src/lib/icons/image.ts","../../../projects/ngx-editor/src/lib/icons/align_left.ts","../../../projects/ngx-editor/src/lib/icons/align_center.ts","../../../projects/ngx-editor/src/lib/icons/align_right.ts","../../../projects/ngx-editor/src/lib/icons/align_justify.ts","../../../projects/ngx-editor/src/lib/icons/text_color.ts","../../../projects/ngx-editor/src/lib/icons/color_fill.ts","../../../projects/ngx-editor/src/lib/icons/horizontal_rule.ts","../../../projects/ngx-editor/src/lib/icons/format_clear.ts","../../../projects/ngx-editor/src/lib/icons/indent.ts","../../../projects/ngx-editor/src/lib/icons/outdent.ts","../../../projects/ngx-editor/src/lib/icons/superscript.ts","../../../projects/ngx-editor/src/lib/icons/subscript.ts","../../../projects/ngx-editor/src/lib/icons/undo.ts","../../../projects/ngx-editor/src/lib/icons/redo.ts","../../../projects/ngx-editor/src/lib/icons/index.ts","../../../projects/ngx-editor/src/lib/editor-config.service.ts","../../../projects/ngx-editor/src/lib/editor.service.ts","../../../projects/ngx-editor/src/lib/modules/menu/color-picker/color-picker.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/color-picker/color-picker.component.html","../../../projects/ngx-editor/src/lib/modules/menu/dropdown/dropdown.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/dropdown/dropdown.component.html","../../../projects/ngx-editor/src/lib/modules/menu/image/image.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/image/image.component.html","../../../projects/ngx-editor/src/lib/modules/menu/insert-command/insert-command.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/insert-command/insert-command.component.html","../../../projects/ngx-editor/src/lib/modules/menu/link/link.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/link/link.component.html","../../../projects/ngx-editor/src/lib/modules/menu/toggle-command/toggle-command.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/toggle-command/toggle-command.component.html","../../../projects/ngx-editor/src/lib/modules/menu/menu.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/menu.component.html","../../../projects/ngx-editor/src/lib/modules/menu/bubble/bubble.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/bubble/bubble.component.html","../../../projects/ngx-editor/src/lib/modules/menu/floating-menu/floating-menu.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/floating-menu/floating-menu.component.html","../../../projects/ngx-editor/src/lib/modules/menu/menu.module.ts","../../../projects/ngx-editor/src/lib/editor.module.ts","../../../projects/ngx-editor/src/lib/validators.ts","../../../projects/ngx-editor/src/lib/EditorCommands.ts","../../../projects/ngx-editor/src/lib/defaultPlugins.ts","../../../projects/ngx-editor/src/lib/Editor.ts","../../../projects/ngx-editor/src/public_api.ts","../../../projects/ngx-editor/src/ngx-editor.ts"],"sourcesContent":["export const isString = (value: unknown): value is string => {\n  return typeof value === 'string';\n};\n","import type { TrustedTypePolicyFactory, TrustedTypesWindow, TrustedHTML } from 'trusted-types/lib';\nimport { isString } from './stringUtil';\n\nexport const getTrustedTypes = (): TrustedTypePolicyFactory | undefined => {\n  if (typeof window === 'undefined') {\n    return undefined;\n  }\n\n  return (window as unknown as TrustedTypesWindow).trustedTypes;\n};\n\nexport const isTrustedHtml = (value: unknown): boolean => {\n  return getTrustedTypes()?.isHTML(value) ?? false;\n};\n\nexport const isHtml = (value: unknown): boolean => {\n  return isString(value) || isTrustedHtml(value);\n};\n\nexport type HTML = string | TrustedHTML;\n","import { DOMSerializer, Schema, DOMParser, Node as ProseMirrorNode, ParseOptions } from 'prosemirror-model';\n\nimport defaultSchema from './schema';\nimport { HTML, isHtml } from './trustedTypesUtil';\n\nexport const emptyDoc = {\n  type: 'doc',\n  content: [\n    {\n      type: 'paragraph',\n    },\n  ],\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment\nexport const toHTML = (json: Record<string, unknown>, inputSchema?: Schema): string => {\n  const schema = inputSchema ?? defaultSchema;\n\n  const contentNode = schema.nodeFromJSON(json);\n  const html = DOMSerializer.fromSchema(schema).serializeFragment(contentNode.content);\n\n  const div = document.createElement('div');\n  div.appendChild(html);\n  return div.innerHTML;\n};\n\nexport const toDoc = (html: HTML, inputSchema?: Schema, options?:ParseOptions): Record<string, unknown> => {\n  const schema = inputSchema ?? defaultSchema;\n\n  const el = document.createElement('div');\n  el.innerHTML = html as string;\n\n  return DOMParser.fromSchema(schema).parse(el, options).toJSON();\n};\n\nexport const parseContent = (\n  value: HTML | Record<string, unknown> | null,\n  schema: Schema,\n  options?: ParseOptions,\n): ProseMirrorNode => {\n  if (!value) {\n    return schema.nodeFromJSON(emptyDoc);\n  }\n\n  if (!isHtml(value)) {\n    return schema.nodeFromJSON(value);\n  }\n\n  const docJson = toDoc(value as HTML, schema, options);\n  return schema.nodeFromJSON(docJson);\n};\n","import { EditorState, Plugin, PluginKey, Transaction } from 'prosemirror-state';\n\nconst editablePlugin = (editable = true): Plugin => {\n  return new Plugin({\n    key: new PluginKey('editable'),\n    state: {\n      init(): boolean {\n        return editable;\n      },\n      apply(tr: Transaction, previousVal: boolean): boolean {\n        return tr.getMeta('UPDATE_EDITABLE') ?? previousVal;\n      },\n    },\n    props: {\n      editable(state: EditorState): boolean {\n        return this.getState(state);\n      },\n      attributes(state: EditorState): Record<string, string> | null {\n        const isEnabled = this.getState(state);\n\n        if (isEnabled) {\n          return null;\n        }\n\n        return {\n          class: 'NgxEditor__Content--Disabled',\n        };\n      },\n    },\n  });\n};\n\nexport default editablePlugin;\n","import { Plugin, EditorState, PluginKey, Transaction } from 'prosemirror-state';\nimport { DecorationSet, Decoration } from 'prosemirror-view';\nimport { Node as ProseMirrorNode } from 'prosemirror-model';\n\nconst PLACEHOLDER_CLASSNAME = 'NgxEditor__Placeholder';\n\nconst placeholderPlugin = (text?: string): Plugin => {\n  return new Plugin({\n    key: new PluginKey('placeholder'),\n    state: {\n      init(): string {\n        return text ?? '';\n      },\n      apply(tr: Transaction, previousVal: string): string {\n        const placeholder = tr.getMeta('UPDATE_PLACEHOLDER') ?? previousVal;\n        return placeholder;\n      },\n    },\n    props: {\n      decorations(state: EditorState): DecorationSet {\n        const { doc } = state;\n        const { textContent, childCount } = doc;\n\n        const placeholder = this.getState(state);\n\n        if (!placeholder || childCount > 1) {\n          return DecorationSet.empty;\n        }\n\n        const decorations: Decoration[] = [];\n\n        const decorate = (node: ProseMirrorNode, pos: number) => {\n          if (node.type.isBlock && node.childCount === 0 && textContent.length === 0) {\n            const from = pos;\n            const to = pos + node.nodeSize;\n\n            const placeholderNode = Decoration.node(from, to, {\n              'class': PLACEHOLDER_CLASSNAME,\n              'data-placeholder': placeholder,\n              'data-align': node.attrs['align'] ?? null,\n            });\n\n            decorations.push(placeholderNode);\n          }\n\n          return false;\n        };\n\n        doc.descendants(decorate);\n        return DecorationSet.create(doc, decorations);\n      },\n    },\n  });\n};\n\nexport default placeholderPlugin;\n","import { Plugin, PluginKey } from 'prosemirror-state';\n\nconst attributesPlugin = (attributes = {}): Plugin => {\n  return new Plugin({\n    key: new PluginKey('attributes'),\n    props: {\n      attributes,\n    },\n  });\n};\n\nexport default attributesPlugin;\n","import { Plugin, PluginKey } from 'prosemirror-state';\n\nconst focusPlugin = (cb: () => void): Plugin => {\n  return new Plugin({\n    key: new PluginKey('focus'),\n    props: {\n      handleDOMEvents: {\n        focus: () => {\n          cb();\n          return false;\n        },\n      },\n    },\n  });\n};\n\nexport default focusPlugin;\n","import { Plugin, PluginKey } from 'prosemirror-state';\n\nconst blurPlugin = (cb: () => void):Plugin => {\n  return new Plugin({\n    key: new PluginKey('blur'),\n    props: {\n      handleDOMEvents: {\n        blur: () => {\n          cb();\n          return false;\n        },\n      },\n    },\n  });\n};\n\nexport default blurPlugin;\n","import { CommonModule } from '@angular/common';\nimport {\n  Component, ElementRef, EventEmitter, Input, Output, ViewChild,\n} from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\n\n@Component({\n  selector: 'ngx-image-view',\n  templateUrl: './image-view.component.html',\n  styleUrls: ['./image-view.component.scss'],\n  imports: [CommonModule],\n})\nexport class ImageViewComponent {\n  @Input() src: string;\n  @Input() alt = '';\n  @Input() title = '';\n  @Input() outerWidth = '';\n  @Input() selected = false;\n  @Input() view: EditorView;\n\n  @Output() imageResize = new EventEmitter();\n\n  @ViewChild('imgEl', { static: true }) imgEl: ElementRef;\n\n  startResizing(e: MouseEvent, direction: string): void {\n    e.preventDefault();\n    this.resizeImage(e, direction);\n  }\n\n  resizeImage(evt: MouseEvent, direction: string): void {\n    const startX = evt.pageX;\n    const startWidth = this.imgEl.nativeElement.clientWidth;\n\n    const isLeftResize = direction === 'left';\n\n    const { width } = window.getComputedStyle(this.view.dom);\n    const editorWidth = parseInt(width, 10);\n\n    const onMouseMove = (e: MouseEvent) => {\n      const currentX = e.pageX;\n      const diffInPx = currentX - startX;\n      const computedWidth = isLeftResize ? startWidth - diffInPx : startWidth + diffInPx;\n\n      // prevent image overflow the editor\n      // prevent resizng below 20px\n      if (computedWidth > editorWidth || computedWidth < 20) {\n        return;\n      }\n\n      this.outerWidth = `${computedWidth}px`;\n    };\n\n    const onMouseUp = (e: MouseEvent) => {\n      e.preventDefault();\n\n      document.removeEventListener('mousemove', onMouseMove);\n      document.removeEventListener('mouseup', onMouseUp);\n\n      this.imageResize.emit();\n    };\n\n    document.addEventListener('mousemove', onMouseMove);\n    document.addEventListener('mouseup', onMouseUp);\n  }\n}\n","<span class=\"NgxEditor__ImageWrapper\" [ngClass]=\"{ 'NgxEditor__Resizer--Active': selected }\" [style.width]=\"outerWidth\">\n  <span class=\"NgxEditor__ResizeHandle\" *ngIf=\"selected\">\n    <span class=\"NgxEditor__ResizeHandle--TL\" (mousedown)=\"startResizing($event, 'left')\"></span>\n    <span class=\"NgxEditor__ResizeHandle--TR\" (mousedown)=\"startResizing($event, 'right')\"></span>\n    <span class=\"NgxEditor__ResizeHandle--BL\" (mousedown)=\"startResizing($event, 'left')\"></span>\n    <span class=\"NgxEditor__ResizeHandle--BR\" (mousedown)=\"startResizing($event, 'right')\"></span>\n  </span>\n  <img [src]=\"src\" [alt]=\"alt\" [title]=\"title\" #imgEl />\n</span>\n","import { ApplicationRef, ComponentRef, createComponent, Injector } from '@angular/core';\nimport { Node as ProseMirrorNode } from 'prosemirror-model';\nimport { NodeSelection, Plugin, PluginKey } from 'prosemirror-state';\nimport { EditorView, NodeView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport { ImageViewComponent } from '../components/image-view/image-view.component';\n\nclass ImageRezieView implements NodeView {\n  dom: HTMLElement;\n  view: EditorView;\n  getPos: () => number;\n\n  applicationRef: ApplicationRef;\n  imageComponentRef: ComponentRef<ImageViewComponent>;\n  resizeSubscription: Subscription;\n\n  node: ProseMirrorNode;\n  updating = false;\n\n  constructor(node: ProseMirrorNode, view: EditorView, getPos: () => number, injector: Injector) {\n    this.applicationRef = injector.get(ApplicationRef);\n\n    // create component ref\n    this.imageComponentRef = createComponent(ImageViewComponent, {\n      environmentInjector: this.applicationRef.injector,\n    });\n\n    // Attach to the view so that the change detector knows to run\n    this.applicationRef.attachView(this.imageComponentRef.hostView);\n\n    this.setNodeAttributes(node.attrs);\n    this.imageComponentRef.instance.view = view;\n\n    this.dom = this.imageComponentRef.location.nativeElement;\n    this.view = view;\n    this.node = node;\n    this.getPos = getPos;\n\n    this.resizeSubscription = this.imageComponentRef.instance.imageResize.subscribe(() => {\n      this.handleResize();\n    });\n  }\n\n  private computeChanges(prevAttrs: Record<string, unknown>, newAttrs: Record<string, unknown>): boolean {\n    return JSON.stringify(prevAttrs) === JSON.stringify(newAttrs);\n  }\n\n  private setNodeAttributes(attrs: Record<string, string>): void {\n    this.imageComponentRef.instance.src = attrs['src'];\n    this.imageComponentRef.instance.alt = attrs['alt'];\n    this.imageComponentRef.instance.title = attrs['title'];\n    this.imageComponentRef.instance.outerWidth = attrs['width'];\n  }\n\n  handleResize = (): void => {\n    if (this.updating) {\n      return;\n    }\n\n    const { state, dispatch } = this.view;\n    const { tr } = state;\n\n    const transaction = tr.setNodeMarkup(this.getPos(), undefined, {\n      ...this.node.attrs,\n      width: this.imageComponentRef.instance.outerWidth,\n    });\n\n    const resolvedPos = transaction.doc.resolve(this.getPos());\n    const newSelection = new NodeSelection(resolvedPos);\n\n    transaction.setSelection(newSelection);\n    dispatch(transaction);\n  };\n\n  update(node: ProseMirrorNode): boolean {\n    if (node.type !== this.node.type) {\n      return false;\n    }\n\n    this.node = node;\n\n    const changed = this.computeChanges(this.node.attrs, node.attrs);\n    if (changed) {\n      this.updating = true;\n      this.setNodeAttributes(node.attrs);\n      this.updating = false;\n    }\n    return true;\n  }\n\n  ignoreMutation(): boolean {\n    return true;\n  }\n\n  selectNode(): void {\n    this.imageComponentRef.instance.selected = true;\n  }\n\n  deselectNode(): void {\n    this.imageComponentRef.instance.selected = false;\n  }\n\n  destroy(): void {\n    this.resizeSubscription.unsubscribe();\n    this.applicationRef.detachView(this.imageComponentRef.hostView);\n  }\n}\n\nconst imageResizePlugin = (injector: Injector): Plugin => {\n  return new Plugin({\n    key: new PluginKey('image-resize'),\n    props: {\n      nodeViews: {\n        image: (node: ProseMirrorNode, view: EditorView, getPos: () => number) => {\n          return new ImageRezieView(node, view, getPos, injector);\n        },\n      },\n    },\n  });\n};\n\nexport default imageResizePlugin;\n","import { Fragment, Slice, Node as ProseMirrorNode } from 'prosemirror-model';\nimport { Plugin, PluginKey } from 'prosemirror-state';\n\nconst HTTP_LINK_REGEX = /(?:https?:\\/\\/)?[\\w-]+(?:\\.[\\w-]+)+\\.?(?:\\d+)?(?:\\/\\S*)?$/;\n\nconst linkify = (fragment: Fragment): Fragment => {\n  const linkified: ProseMirrorNode[] = [];\n\n  fragment.forEach((child: ProseMirrorNode) => {\n    if (child.isText) {\n      const text = child.text as string;\n      let pos = 0;\n\n      const match: RegExpMatchArray | null = HTTP_LINK_REGEX.exec(text);\n\n      if (match) {\n        const start = match.index;\n        const end = start + match[0].length;\n        const { link } = child.type.schema.marks;\n\n        if (start > 0) {\n          linkified.push(child.cut(pos, start));\n        }\n\n        const urlText = text.slice(start, end);\n        linkified.push(\n          child.cut(start, end).mark(link.create({ href: urlText }).addToSet(child.marks)),\n        );\n        pos = end;\n      }\n\n      if (pos < text.length) {\n        linkified.push(child.cut(pos));\n      }\n    } else {\n      linkified.push(child.copy(linkify(child.content)));\n    }\n  });\n\n  return Fragment.fromArray(linkified);\n};\n\nconst linkifyPlugin = ():Plugin => {\n  return new Plugin({\n    key: new PluginKey('linkify'),\n    props: {\n      transformPasted: (slice: Slice) => {\n        return new Slice(linkify(slice.content), slice.openStart, slice.openEnd);\n      },\n    },\n  });\n};\n\nexport default linkifyPlugin;\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  Injector,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  Renderer2,\n  SimpleChanges,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\n\nimport { NgxEditorError } from 'ngx-editor/utils';\nimport Editor from './Editor';\nimport { emptyDoc, toHTML } from './parsers';\nimport * as plugins from './plugins';\nimport { HTML, isHtml } from './trustedTypesUtil';\n\n@Component({\n  selector: 'ngx-editor',\n  templateUrl: './editor.component.html',\n  styleUrls: ['./editor.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => NgxEditorComponent),\n      multi: true,\n    },\n  ],\n  encapsulation: ViewEncapsulation.None,\n})\nexport class NgxEditorComponent implements ControlValueAccessor, OnInit, OnChanges, OnDestroy {\n  constructor(\n    private renderer: Renderer2,\n    private injector: Injector,\n    private elementRef: ElementRef<HTMLElement>,\n  ) { }\n\n  @ViewChild('ngxEditor', { static: true }) private ngxEditor: ElementRef;\n\n  @Input() editor: Editor;\n  @Input() outputFormat: 'doc' | 'html';\n  @Input() placeholder = 'Type Here...';\n\n  @Output() focusOut = new EventEmitter<void>();\n  @Output() focusIn = new EventEmitter<void>();\n\n  private unsubscribe = new Subject<void>();\n  private onChange: (value: Record<string, unknown> | string) => void = () => { /** */ };\n  private onTouched: () => void = () => { /** */ };\n\n  writeValue(value: Record<string, unknown> | HTML | null): void {\n    if (!this.outputFormat && isHtml(value)) {\n      this.outputFormat = 'html';\n    }\n\n    this.editor.setContent(value ?? emptyDoc);\n  }\n\n  registerOnChange(fn: () => void): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: () => void): void {\n    this.onTouched = fn;\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    this.setMeta('UPDATE_EDITABLE', !isDisabled);\n    this.renderer.setProperty(this.elementRef.nativeElement, 'disabled', isDisabled);\n  }\n\n  private handleChange(jsonDoc: Record<string, unknown>): void {\n    if (this.outputFormat === 'html') {\n      const html = toHTML(jsonDoc, this.editor.schema);\n      this.onChange(html);\n      return;\n    }\n\n    this.onChange(jsonDoc);\n  }\n\n  private setMeta(key: string, value: unknown): void {\n    const { dispatch, state: { tr } } = this.editor.view;\n    dispatch(tr.setMeta(key, value));\n  }\n\n  private setPlaceholder(placeholder: string): void {\n    this.setMeta('UPDATE_PLACEHOLDER', placeholder);\n  }\n\n  private registerPlugins(): void {\n    this.editor.registerPlugin(plugins.editable());\n    this.editor.registerPlugin(plugins.placeholder(this.placeholder));\n\n    this.editor.registerPlugin(plugins.attributes({ class: 'NgxEditor__Content' }));\n\n    this.editor.registerPlugin(plugins.focus(() => {\n      this.focusIn.emit();\n    }));\n\n    this.editor.registerPlugin(plugins.blur(() => {\n      this.focusOut.emit();\n      this.onTouched();\n    }));\n\n    if (this.editor.features.resizeImage) {\n      this.editor.registerPlugin(plugins.imageResize(this.injector));\n    }\n\n    if (this.editor.features.linkOnPaste) {\n      this.editor.registerPlugin(plugins.linkify());\n    }\n  }\n\n  ngOnInit(): void {\n    if (!this.editor) {\n      throw new NgxEditorError('Required editor instance for initializing editor component');\n    }\n\n    this.registerPlugins();\n\n    this.renderer.appendChild(this.ngxEditor.nativeElement, this.editor.view.dom);\n\n    this.editor.valueChanges.pipe(takeUntil(this.unsubscribe)).subscribe((jsonDoc) => {\n      this.handleChange(jsonDoc);\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes['placeholder'] && !changes['placeholder'].isFirstChange()) {\n      this.setPlaceholder(changes['placeholder'].currentValue);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.unsubscribe.next();\n    this.unsubscribe.complete();\n  }\n}\n","<div class=\"NgxEditor\" #ngxEditor>\n  <ng-content></ng-content>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport type { TrustedHTML } from 'trusted-types/lib';\nimport { HTML, isTrustedHtml } from '../../trustedTypesUtil';\n\n@Pipe({\n  name: 'sanitizeHtml',\n})\n\nexport class SanitizeHtmlPipe implements PipeTransform {\n  constructor(private sanitizer: DomSanitizer) {\n  }\n\n  transform(value: HTML): SafeHtml | TrustedHTML {\n    if (isTrustedHtml(value)) {\n      return value as TrustedHTML;\n    }\n    return this.sanitizer.bypassSecurityTrustHtml(value as string);\n  }\n}\n","import type { MarkType } from 'prosemirror-model';\nimport type { EditorState, Transaction, Command } from 'prosemirror-state';\nimport { toggleMark } from 'prosemirror-commands';\n\nimport { applyMark } from 'ngx-editor/commands';\nimport { isMarkActive } from 'ngx-editor/helpers';\n\nimport { ToggleCommand } from './types';\n\nclass Mark implements ToggleCommand {\n  name: string;\n\n  constructor(name: string) {\n    this.name = name;\n  }\n\n  apply(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { schema } = state;\n\n      const type: MarkType = schema.marks[this.name];\n      if (!type) {\n        return false;\n      }\n\n      return applyMark(type)(state, dispatch);\n    };\n  }\n\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { schema } = state;\n\n      const type: MarkType = schema.marks[this.name];\n      if (!type) {\n        return false;\n      }\n\n      return toggleMark(type)(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n\n    const type: MarkType = schema.marks[this.name];\n\n    if (!type) {\n      return false;\n    }\n\n    return isMarkActive(state, type);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default Mark;\n","import type { NodeType } from 'prosemirror-model';\nimport type { EditorState, Transaction, Command } from 'prosemirror-state';\nimport { lift, wrapIn } from 'prosemirror-commands';\n\nimport { isNodeActive } from 'ngx-editor/helpers';\n\nimport { ToggleCommand } from './types';\n\nclass Blockqote implements ToggleCommand {\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { schema } = state;\n\n      const type: NodeType = schema.nodes['blockquote'];\n      if (!type) {\n        return false;\n      }\n\n      if (this.isActive(state)) {\n        return lift(state, dispatch);\n      }\n\n      return wrapIn(type)(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n\n    const type: NodeType = schema.nodes['blockquote'];\n    if (!type) {\n      return false;\n    }\n\n    return isNodeActive(state, type);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default Blockqote;\n","import type { NodeType } from 'prosemirror-model';\nimport type { EditorState, Transaction, Command } from 'prosemirror-state';\n\nimport { canInsert } from 'ngx-editor/helpers';\n\nimport { InsertCommand } from './types';\n\nclass HorizontalRule implements InsertCommand {\n  insert(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { schema, tr } = state;\n\n      const type: NodeType = schema.nodes['horizontal_rule'];\n\n      if (!type) {\n        return false;\n      }\n\n      dispatch(tr.replaceSelectionWith(type.create()).scrollIntoView());\n      return true;\n    };\n  }\n\n  canExecute(state: EditorState): boolean {\n    return canInsert(state, state.schema.nodes['horizontal_rule']);\n  }\n}\n\nexport default HorizontalRule;\n","import type { NodeType, Schema } from 'prosemirror-model';\nimport type { EditorState, Transaction, Command } from 'prosemirror-state';\nimport { liftListItem, wrapInList } from 'prosemirror-schema-list';\n\nimport { isNodeActive } from 'ngx-editor/helpers';\n\nimport { ToggleCommand } from './types';\n\nclass ListItem implements ToggleCommand {\n  isBulletList = false;\n\n  constructor(isBulletList = false) {\n    this.isBulletList = isBulletList;\n  }\n\n  getType(schema: Schema): NodeType {\n    return this.isBulletList ? schema.nodes['bullet_list'] : schema.nodes['ordered_list'];\n  }\n\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { schema } = state;\n\n      const type = this.getType(schema);\n      if (!type) {\n        return false;\n      }\n\n      if (this.isActive(state)) {\n        return liftListItem(schema.nodes['list_item'])(state, dispatch);\n      }\n\n      return wrapInList(type)(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n\n    const type = this.getType(schema);\n    if (!type) {\n      return false;\n    }\n\n    return isNodeActive(state, type);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default ListItem;\n","import type { NodeType, Node as ProseMirrorNode } from 'prosemirror-model';\nimport type { EditorState, Transaction, Command } from 'prosemirror-state';\nimport { setBlockType } from 'prosemirror-commands';\n\nimport { getSelectionNodes } from 'ngx-editor/helpers';\n\nimport { ToggleCommand } from './types';\n\nexport type HeadingLevels = 1 | 2 | 3 | 4 | 5 | 6;\n\nclass Heading implements ToggleCommand {\n  level: number;\n\n  constructor(level: HeadingLevels) {\n    this.level = level;\n  }\n\n  apply(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { schema } = state;\n\n      const type: NodeType = schema.nodes['heading'];\n      if (!type) {\n        return false;\n      }\n\n      return setBlockType(type)(state, dispatch);\n    };\n  }\n\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { schema, selection, doc } = state;\n\n      const type: NodeType = schema.nodes['heading'];\n      if (!type) {\n        return false;\n      }\n\n      const nodePos = selection.$from.before(1);\n      const node = doc.nodeAt(nodePos);\n\n      const attrs = node?.attrs ?? {};\n\n      if (this.isActive(state)) {\n        return setBlockType(schema.nodes['paragraph'], attrs)(state, dispatch);\n      }\n\n      return setBlockType(type, { ...attrs, level: this.level })(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n    const nodesInSelection = getSelectionNodes(state);\n\n    const type: NodeType = schema.nodes['heading'];\n    if (!type) {\n      return false;\n    }\n\n    const supportedNodes = [\n      type,\n      schema.nodes['text'],\n      schema.nodes['blockquote'],\n    ];\n\n    // heading is a text node\n    // don't mark as active when it has more nodes\n    const nodes = nodesInSelection.filter((node) => {\n      return supportedNodes.includes(node.type);\n    });\n\n    const acitveNode = nodes.find((node: ProseMirrorNode) => {\n      return node.attrs['level'] === this.level;\n    });\n\n    return Boolean(acitveNode);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default Heading;\n","import type { EditorState, Transaction, Command } from 'prosemirror-state';\nimport type { Node } from 'prosemirror-model';\n\nimport { getSelectionNodes } from 'ngx-editor/helpers';\n\nimport { ToggleCommand } from './types';\n\nexport type Align = 'left' | 'center' | 'right' | 'justify';\n\nclass TextAlign implements ToggleCommand {\n  align: string;\n\n  constructor(align: Align) {\n    this.align = align;\n  }\n\n  toggle(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { doc, selection, tr, schema } = state;\n      const { from, to } = selection;\n\n      let applicable = false;\n\n      doc.nodesBetween(from, to, (node, pos) => {\n        const nodeType = node.type;\n        if ([schema.nodes['paragraph'], schema.nodes['heading']].includes(nodeType)) {\n          applicable = true;\n          const align = node.attrs['align'] === this.align ? null : this.align;\n          tr.setNodeMarkup(pos, nodeType, { ...node.attrs, align });\n        }\n        return true;\n      });\n\n      if (!applicable) {\n        return false;\n      }\n\n      if (tr.docChanged) {\n        dispatch?.(tr);\n      }\n\n      return true;\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const nodes = getSelectionNodes(state);\n\n    const active = nodes.find((node: Node) => {\n      return node.attrs['align'] === this.align;\n    });\n\n    return Boolean(active);\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.toggle()(state);\n  }\n}\n\nexport default TextAlign;\n","import type { MarkType } from 'prosemirror-model';\nimport type { EditorState, Command } from 'prosemirror-state';\nimport { toggleMark } from 'prosemirror-commands';\n\nimport { isMarkActive } from 'ngx-editor/helpers';\nimport { removeLink } from 'ngx-editor/commands';\nimport type { Dispatch } from './types';\n\nconst defaultOptions = {\n  strict: true,\n};\n\nexport interface LinkAttrs {\n  href: string;\n  title?: string;\n  target?: string;\n}\n\nclass Link {\n  update(attrs: LinkAttrs): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema, selection } = state;\n\n      const type: MarkType = schema.marks['link'];\n      if (!type) {\n        return false;\n      }\n\n      if (selection.empty) {\n        return false;\n      }\n\n      return toggleMark(type, attrs)(state, dispatch);\n    };\n  }\n\n  insert(text: string, attrs: LinkAttrs): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema, tr } = state;\n\n      const type: MarkType = schema.marks['link'];\n      if (!type) {\n        return false;\n      }\n\n      const linkAttrs: LinkAttrs = {\n        href: attrs.href,\n        title: attrs.title ?? text,\n        target: attrs.target ?? '_blank',\n      };\n\n      const node = schema.text(text, [schema.marks['link'].create(linkAttrs)]);\n\n      tr.replaceSelectionWith(node, false)\n        .scrollIntoView();\n\n      if (tr.docChanged) {\n        dispatch?.(tr);\n        return true;\n      }\n\n      return false;\n    };\n  }\n\n  isActive(state: EditorState, options = defaultOptions): boolean {\n    if (options.strict) {\n      return true;\n    }\n\n    const { schema } = state;\n    const type = schema.marks['link'];\n\n    if (!type) {\n      return false;\n    }\n\n    return isMarkActive(state, type);\n  }\n\n  remove(state: EditorState, dispatch?: Dispatch): boolean {\n    return removeLink()(state, dispatch);\n  }\n\n  canExecute(state: EditorState): boolean {\n    const testAttrs: LinkAttrs = {\n      href: '',\n    };\n\n    return this.insert('Exec', testAttrs)(state) || this.update(testAttrs)(state);\n  }\n}\n\nexport default Link;\n","import { type EditorState, NodeSelection, type Command } from 'prosemirror-state';\n\nimport { Dispatch } from './types';\n\nexport interface ImageAttrs {\n  alt?: string;\n  title?: string;\n  width?: string;\n}\n\nclass Image {\n  insert(src: string, attrs: ImageAttrs): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema, tr, selection } = state;\n\n      const type = schema.nodes['image'];\n      if (!type) {\n        return false;\n      }\n\n      const imageAttrs = {\n        width: null,\n        src,\n        ...attrs,\n      };\n\n      if (!imageAttrs.width && selection instanceof NodeSelection && selection.node.type === type) {\n        imageAttrs.width = selection.node.attrs['width'];\n      }\n\n      tr.replaceSelectionWith(type.createAndFill(imageAttrs));\n\n      const resolvedPos = tr.doc.resolve(\n        tr.selection.anchor - tr.selection.$anchor.nodeBefore.nodeSize,\n      );\n\n      tr\n        .setSelection(new NodeSelection(resolvedPos))\n        .scrollIntoView();\n\n      if (tr.docChanged) {\n        dispatch?.(tr);\n        return true;\n      }\n\n      return false;\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { selection } = state;\n    if (selection instanceof NodeSelection) {\n      return selection.node.type.name === 'image';\n    }\n\n    return false;\n  }\n}\n\nexport default Image;\n","import type { MarkType } from 'prosemirror-model';\nimport type { EditorState, Command } from 'prosemirror-state';\n\nimport { getSelectionMarks, isMarkActive } from 'ngx-editor/helpers';\nimport { applyMark, removeMark } from 'ngx-editor/commands';\n\nimport type { Dispatch } from './types';\n\ntype Name = 'text_color' | 'text_background_color';\ntype AttrName = 'color' | 'backgroundColor';\n\ninterface ColorAttrs extends Record<string, string> {\n  color: string;\n}\n\ninterface BackgroundColorAttrs extends Record<string, string> {\n  backgroundColor: string;\n}\n\nclass TextColor {\n  name: Name;\n  attrName: AttrName;\n\n  constructor(name: Name, attrName: AttrName = 'color') {\n    this.name = name;\n    this.attrName = attrName;\n  }\n\n  apply(attrs: ColorAttrs | BackgroundColorAttrs): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema, selection, doc } = state;\n\n      const type: MarkType = schema.marks[this.name];\n      if (!type) {\n        return false;\n      }\n\n      const { from, to, empty } = selection;\n\n      if (!empty && (from + 1 === to)) {\n        const node = doc.nodeAt(from);\n        if (node?.isAtom && !node.isText && node.isLeaf) {\n          // An atomic node (e.g. Image) is selected.\n          return false;\n        }\n      }\n\n      return applyMark(type, attrs)(state, dispatch);\n    };\n  }\n\n  isActive(state: EditorState): boolean {\n    const { schema } = state;\n    const type: MarkType = schema.marks[this.name];\n\n    if (!type) {\n      return false;\n    }\n\n    return isMarkActive(state, type);\n  }\n\n  getActiveColors(state: EditorState): string[] {\n    if (!this.isActive(state)) {\n      return [];\n    }\n\n    const { schema } = state;\n    const marks = getSelectionMarks(state);\n\n    const colors = marks\n      .filter((mark) => mark.type === schema.marks[this.name])\n      .map((mark) => {\n        return mark.attrs[this.attrName];\n      })\n      .filter(Boolean);\n\n    return colors;\n  }\n\n  remove(): Command {\n    return (state: EditorState, dispatch?: Dispatch): boolean => {\n      const { schema } = state;\n\n      const type = schema.marks[this.name];\n      if (!type) {\n        return false;\n      }\n\n      return removeMark(type)(state, dispatch);\n    };\n  }\n\n  canExecute(state: EditorState): boolean {\n    const attrs = this.name === 'text_color' ? { color: '' } : { backgroundColor: '' };\n    return this.apply(attrs)(state);\n  }\n}\n\nexport default TextColor;\n","import type { EditorState, Transaction, Command } from 'prosemirror-state';\n\nimport { InsertCommand } from './types';\n\nconst SAFE_MARKS = ['link'];\n\nclass FormatClear implements InsertCommand {\n  insert(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { tr } = state;\n      const { ranges, empty } = tr.selection;\n\n      if (empty) {\n        return true;\n      }\n\n      Object.entries(state.schema.marks).forEach(([markType, mark]) => {\n        if (SAFE_MARKS.includes(markType)) {\n          return;\n        }\n\n        ranges.forEach((range) => {\n          tr.removeMark(range.$from.pos, range.$to.pos, mark);\n        });\n      });\n\n      dispatch(tr);\n      return true;\n    };\n  }\n\n  canExecute(): boolean {\n    return true;\n  }\n}\n\nexport default FormatClear;\n","import type { EditorState, Transaction, Command } from 'prosemirror-state';\n\nimport { clamp } from 'ngx-editor/utils';\nimport { InsertCommand } from './types';\n\nconst indentNodeTypes = ['paragraph', 'heading', 'blockquote'];\n\ntype IndentMethod = 'increase' | 'decrease';\nconst minIndent = 0;\nconst maxIndent = 10;\n\nconst udpateIndentLevel = (tr: Transaction, pos: number, method: IndentMethod): boolean => {\n  const node = tr.doc.nodeAt(pos);\n  if (!node) { return false; }\n\n  const nodeIndent = node.attrs['indent'] ?? 0;\n  const newIndent = clamp(nodeIndent + (method === 'increase' ? 1 : -1), minIndent, maxIndent);\n\n  if (newIndent === nodeIndent || newIndent < minIndent || newIndent > maxIndent) {\n    return false;\n  }\n\n  const attrs = {\n    ...node.attrs,\n    indent: newIndent,\n  };\n\n  tr.setNodeMarkup(pos, node.type, attrs);\n  return true;\n};\n\nclass Indent implements InsertCommand {\n  method: IndentMethod = 'increase';\n\n  constructor(method: IndentMethod) {\n    this.method = method;\n  }\n\n  insert(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      const { tr, doc } = state;\n      const { from, to } = tr.selection;\n\n      let applicable = false;\n\n      doc.nodesBetween(from, to, (node, pos) => {\n        const nodeType = node.type;\n\n        if (indentNodeTypes.includes(nodeType.name)) {\n          applicable = udpateIndentLevel(tr, pos, this.method);\n          return false;\n        } else if (node.type.name.includes('list')) {\n          return false;\n        }\n\n        return true;\n      });\n\n      if (!applicable) {\n        return false;\n      }\n\n      if (tr.docChanged) {\n        dispatch?.(tr);\n      }\n\n      return true;\n    };\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.insert()(state);\n  }\n}\n\nexport default Indent;\n","import type { EditorState, Transaction, Command } from 'prosemirror-state';\n\nimport { InsertCommand } from './types';\nimport { redo, undo } from 'prosemirror-history';\n\ntype HistoryMode = 'undo' | 'redo';\n\nclass History implements InsertCommand {\n  mode: HistoryMode = 'undo';\n\n  constructor(mode: HistoryMode) {\n    this.mode = mode;\n  }\n\n  insert(): Command {\n    return (state: EditorState, dispatch?: (tr: Transaction) => void): boolean => {\n      if (this.mode === 'undo') {\n        return undo(state, dispatch);\n      }\n\n      return redo(state, dispatch);\n    };\n  }\n\n  canExecute(state: EditorState): boolean {\n    return this.insert()(state);\n  }\n}\n\nexport default History;\n","import Mark from './Mark';\nimport Blockquote from './Blockquote';\nimport HorizontalRule from './HorizontalRule';\nimport ListItem from './ListItem';\nimport Heading from './Heading';\nimport TextAlign from './TextAlign';\nimport Link from './Link';\nimport Image from './Image';\nimport TextColor from './TextColor';\nimport FormatClear from './FormatClear';\nimport Indent from './Indent';\nimport History from './History';\n\nexport const STRONG = new Mark('strong');\nexport const EM = new Mark('em');\nexport const CODE = new Mark('code');\nexport const UNDERLINE = new Mark('u');\nexport const STRIKE = new Mark('s');\nexport const BLOCKQUOTE = new Blockquote();\nexport const HORIZONTAL_RULE = new HorizontalRule();\nexport const FORMAT_CLEAR = new FormatClear();\nexport const UL = new ListItem(true);\nexport const OL = new ListItem(false);\nexport const H1 = new Heading(1);\nexport const H2 = new Heading(2);\nexport const H3 = new Heading(3);\nexport const H4 = new Heading(4);\nexport const H5 = new Heading(5);\nexport const H6 = new Heading(6);\nexport const ALIGN_LEFT = new TextAlign('left');\nexport const ALIGN_CENTER = new TextAlign('center');\nexport const ALIGN_RIGHT = new TextAlign('right');\nexport const ALIGN_JUSTIFY = new TextAlign('justify');\nexport const LINK = new Link();\nexport const IMAGE = new Image();\nexport const TEXT_COLOR = new TextColor('text_color', 'color');\nexport const TEXT_BACKGROUND_COLOR = new TextColor('text_background_color', 'backgroundColor');\nexport const INDENT = new Indent('increase');\nexport const OUTDENT = new Indent('decrease');\nexport const SUPERSCRIPT = new Mark('sup');\nexport const SUBSCRIPT = new Mark('sub');\nexport const UNDO = new History('undo');\nexport const REDO = new History('redo');\n","import * as Commands from '../../commands';\n\nimport { InsertCommand, ToggleCommand } from '../../commands/types';\n\nexport const ToggleCommands: Record<string, ToggleCommand> = {\n  bold: Commands.STRONG,\n  italic: Commands.EM,\n  code: Commands.CODE,\n  underline: Commands.UNDERLINE,\n  strike: Commands.STRIKE,\n  blockquote: Commands.BLOCKQUOTE,\n  bullet_list: Commands.UL,\n  ordered_list: Commands.OL,\n  h1: Commands.H1,\n  h2: Commands.H2,\n  h3: Commands.H3,\n  h4: Commands.H4,\n  h5: Commands.H5,\n  h6: Commands.H6,\n  align_left: Commands.ALIGN_LEFT,\n  align_center: Commands.ALIGN_CENTER,\n  align_right: Commands.ALIGN_RIGHT,\n  align_justify: Commands.ALIGN_JUSTIFY,\n  superscript: Commands.SUPERSCRIPT,\n  subscript: Commands.SUBSCRIPT,\n};\n\nexport const InsertCommands: Record<string, InsertCommand> = {\n  horizontal_rule: Commands.HORIZONTAL_RULE,\n  format_clear: Commands.FORMAT_CLEAR,\n  indent: Commands.INDENT,\n  outdent: Commands.OUTDENT,\n  undo: Commands.UNDO,\n  redo: Commands.REDO,\n};\n\nexport const Link = Commands.LINK;\nexport const Image = Commands.IMAGE;\nexport const TextColor = Commands.TEXT_COLOR;\nexport const TextBackgroundColor = Commands.TEXT_BACKGROUND_COLOR;\n","import { Injectable, TemplateRef } from '@angular/core';\nimport { Subject } from 'rxjs';\n\nimport Editor from '../../Editor';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class MenuService {\n  editor: Editor;\n  customMenuRefChange: Subject<TemplateRef<unknown>> = new Subject<TemplateRef<unknown>>();\n\n  setCustomMenuRef(c: TemplateRef<unknown>): void {\n    this.customMenuRefChange.next(c);\n  }\n}\n","import { Observable, isObservable, of } from 'rxjs';\n\nexport const defaults: Record<string, string | Observable<string>> = {\n  // menu\n  bold: 'Bold',\n  italic: 'Italic',\n  code: 'Code',\n  underline: 'Underline',\n  strike: 'Strike',\n  blockquote: 'Blockquote',\n  bullet_list: 'Bullet List',\n  ordered_list: 'Ordered List',\n  heading: 'Heading',\n  h1: 'Header 1',\n  h2: 'Header 2',\n  h3: 'Header 3',\n  h4: 'Header 4',\n  h5: 'Header 5',\n  h6: 'Header 6',\n  align_left: 'Left Align',\n  align_center: 'Center Align',\n  align_right: 'Right Align',\n  align_justify: 'Justify',\n  text_color: 'Text Color',\n  background_color: 'Background Color',\n  horizontal_rule: 'Horizontal rule',\n  format_clear: 'Clear Formatting',\n  insertLink: 'Insert Link',\n  removeLink: 'Remove Link',\n  insertImage: 'Insert Image',\n  indent: 'Increase Indent',\n  outdent: 'Decrease Indent',\n  superscript: 'Superscript',\n  subscript: 'Subscript',\n  undo: 'Undo',\n  redo: 'Redo',\n\n  // pupups, forms, others...\n  url: 'URL',\n  text: 'Text',\n  openInNewTab: 'Open in new tab',\n  insert: 'Insert',\n  altText: 'Alt Text',\n  title: 'Title',\n  remove: 'Remove',\n  enterValidUrl: 'Please enter a valid URL',\n};\n\nexport type LocalsKeys = keyof typeof defaults;\n\nclass Locals {\n  locals = defaults;\n\n  constructor(newLocals: Partial<Record<LocalsKeys, string | Observable<string>>> = {}) {\n    this.locals = { ...defaults, ...newLocals };\n  }\n\n  get = (key: string): Observable<string> => {\n    const value = this.locals[key];\n    if (value) {\n      return isObservable(value) ? value : of(value);\n    }\n    return of('');\n  };\n}\n\nexport default Locals;\n","export default `\n  <path d=\"M15.6 10.79c.97-.67 1.65-1.77 1.65-2.79 0-2.26-1.75-4-4-4H7v14h7.04c2.09 0 3.71-1.7 3.71-3.79 0-1.52-.86-2.82-2.15-3.42zM10 6.5h3c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-3v-3zm3.5 9H10v-3h3.5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5z\" />\n`;\n","export default `\n  <path d=\"M10 4v3h2.21l-3.42 8H6v3h8v-3h-2.21l3.42-8H18V4z\" />\n`;\n","export default `\n<path d=\"M9.4 16.6L4.8 12l4.6-4.6L8 6l-6 6 6 6 1.4-1.4zm5.2 0l4.6-4.6-4.6-4.6L16 6l6 6-6 6-1.4-1.4z\"/>\n`;\n","export default `\n<path d=\"M12 17c3.31 0 6-2.69 6-6V3h-2.5v8c0 1.93-1.57 3.5-3.5 3.5S8.5 12.93 8.5 11V3H6v8c0 3.31 2.69 6 6 6zm-7 2v2h14v-2H5z\"/>\n`;\n","export default `\n<path d=\"M6.85,7.08C6.85,4.37,9.45,3,12.24,3c1.64,0,3,0.49,3.9,1.28c0.77,0.65,1.46,1.73,1.46,3.24h-3.01 c0-0.31-0.05-0.59-0.15-0.85c-0.29-0.86-1.2-1.28-2.25-1.28c-1.86,0-2.34,1.02-2.34,1.7c0,0.48,0.25,0.88,0.74,1.21 C10.97,8.55,11.36,8.78,12,9H7.39C7.18,8.66,6.85,8.11,6.85,7.08z M21,12v-2H3v2h9.62c1.15,0.45,1.96,0.75,1.96,1.97 c0,1-0.81,1.67-2.28,1.67c-1.54,0-2.93-0.54-2.93-2.51H6.4c0,0.55,0.08,1.13,0.24,1.58c0.81,2.29,3.29,3.3,5.67,3.3 c2.27,0,5.3-0.89,5.3-4.05c0-0.3-0.01-1.16-0.48-1.94H21V12z\"/>\n`;\n","export default `\n<path d=\"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z\"/>\n`;\n","export default `\n<path d=\"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z\"/>\n`;\n","export default `\n<path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z\"/>\n`;\n","export default `\n<path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M3.9 12c0-1.71 1.39-3.1 3.1-3.1h4V7H7c-2.76 0-5 2.24-5 5s2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1zM8 13h8v-2H8v2zm9-6h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1s-1.39 3.1-3.1 3.1h-4V17h4c2.76 0 5-2.24 5-5s-2.24-5-5-5z\"/>\n`;\n","export default `\n<path d=\"M17 7h-4v1.9h4c1.71 0 3.1 1.39 3.1 3.1 0 1.43-.98 2.63-2.31 2.98l1.46 1.46C20.88 15.61 22 13.95 22 12c0-2.76-2.24-5-5-5zm-1 4h-2.19l2 2H16zM2 4.27l3.11 3.11C3.29 8.12 2 9.91 2 12c0 2.76 2.24 5 5 5h4v-1.9H7c-1.71 0-3.1-1.39-3.1-3.1 0-1.59 1.21-2.9 2.76-3.07L8.73 11H8v2h2.73L13 15.27V17h1.73l4.01 4L20 19.74 3.27 3 2 4.27z\"/>\n`;\n","export default `\n<path d=\"M21 19V5c0-1.1-.9-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2zM8.5 13.5l2.5 3.01L14.5 12l4.5 6H5l3.5-4.5z\"/>\n`;\n","export default `\n<path d=\"M15 15H3v2h12v-2zm0-8H3v2h12V7zM3 13h18v-2H3v2zm0 8h18v-2H3v2zM3 3v2h18V3H3z\"/>\n`;\n","export default `\n<path d=\"M7 15v2h10v-2H7zm-4 6h18v-2H3v2zm0-8h18v-2H3v2zm4-6v2h10V7H7zM3 3v2h18V3H3z\"/>\n`;\n","export default `\n<path d=\"M3 21h18v-2H3v2zm6-4h12v-2H9v2zm-6-4h18v-2H3v2zm6-4h12V7H9v2zM3 3v2h18V3H3z\"/>\n`;\n","export default `\n<path d=\"M3 21h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18v-2H3v2zm0-4h18V7H3v2zm0-6v2h18V3H3z\"/>\n`;\n","export default `\n<path d=\"M2,20h20v4H2V20z M5.49,17h2.42l1.27-3.58h5.65L16.09,17h2.42L13.25,3h-2.5L5.49,17z M9.91,11.39l2.03-5.79h0.12l2.03,5.79 H9.91z\"/>\n`;\n","export default `\n<path d=\"M16.56,8.94L7.62,0L6.21,1.41l2.38,2.38L3.44,8.94c-0.59,0.59-0.59,1.54,0,2.12l5.5,5.5C9.23,16.85,9.62,17,10,17 s0.77-0.15,1.06-0.44l5.5-5.5C17.15,10.48,17.15,9.53,16.56,8.94z M5.21,10L10,5.21L14.79,10H5.21z M19,11.5c0,0-2,2.17-2,3.5 c0,1.1,0.9,2,2,2s2-0.9,2-2C21,13.67,19,11.5,19,11.5z M2,20h20v4H2V20z\"/>\n`;\n","export default `\n  <g>\n    <rect fill=\"none\" fill-rule=\"evenodd\" height=\"24\" width=\"24\"/>\n    <rect fill-rule=\"evenodd\" height=\"2\" width=\"16\" x=\"4\" y=\"11\"/>\n  </g>\n`;\n","export default `\n<path d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M3.27 5L2 6.27l6.97 6.97L6.5 19h3l1.57-3.66L16.73 21 18 19.73 3.55 5.27 3.27 5zM6 5v.18L8.82 8h2.4l-.72 1.68 2.1 2.1L14.21 8H20V5H6z\"/>\n`;\n","export default '<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M3 21h18v-2H3v2zM3 8v8l4-4-4-4zm8 9h10v-2H11v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z\"/>';\n","export default '<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M11 17h10v-2H11v2zm-8-5l4 4V8l-4 4zm0 9h18v-2H3v2zM3 3v2h18V3H3zm8 6h10V7H11v2zm0 4h10v-2H11v2z\"/>';\n","export default '<g><rect fill=\"none\" height=\"20\" width=\"20\"/><path d=\"M17,6l-1,0v1h2v1l-3,0V6c0-0.55,0.45-1,1-1l1,0l0-1h-2V3l2,0c0.55,0,1,0.45,1,1v1C18,5.55,17.55,6,17,6z M5.63,16h1.9 l2.43-3.87h0.08L12.47,16h1.9l-3.32-5.2l3.1-4.8h-1.91l-2.19,3.56H9.96L7.75,6h-1.9l3.09,4.8L5.63,16z\"/></g>';\n","export default '<g><rect fill=\"none\" height=\"20\" width=\"20\"/><path d=\"M17,15l-1,0v1h2v1h-3v-2c0-0.55,0.45-1,1-1l1,0l0-1h-2v-1l2,0c0.55,0,1,0.45,1,1v1C18,14.55,17.55,15,17,15z M5.63,14h1.9 l2.43-3.87h0.08L12.47,14h1.9l-3.32-5.2l3.1-4.8h-1.91l-2.19,3.56H9.96L7.75,4h-1.9l3.09,4.8L5.63,14z\"/></g>';\n","export default '<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M12.5 8c-2.65 0-5.05.99-6.9 2.6L2 7v9h9l-3.62-3.62c1.39-1.16 3.16-1.88 5.12-1.88 3.54 0 6.55 2.31 7.6 5.5l2.37-.78C21.08 11.03 17.15 8 12.5 8z\"/>';\n","export default '<path d=\"M0 0h24v24H0V0z\" fill=\"none\"/><path d=\"M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7l-3.6 3.6z\"/>';\n","// Icons source: https://material.io/\n\nimport bold from './bold';\nimport italic from './italic';\nimport code from './code';\nimport underline from './underline';\nimport strike from './strike';\nimport orderedList from './ordered_list';\nimport bulletList from './bullet_list';\nimport quote from './quote';\nimport link from './link';\nimport unlink from './unlink';\nimport image from './image';\nimport alignLeft from './align_left';\nimport alignCenter from './align_center';\nimport alignRight from './align_right';\nimport alignJustify from './align_justify';\nimport textColor from './text_color';\nimport colorFill from './color_fill';\nimport horizontalRule from './horizontal_rule';\nimport formatClear from './format_clear';\nimport indent from './indent';\nimport outdent from './outdent';\nimport superscript from './superscript';\nimport subscript from './subscript';\nimport undo from './undo';\nimport redo from './redo';\n\nconst DEFAULT_ICON_HEIGHT = 20;\nconst DEFAULT_ICON_WIDTH = 20;\nconst DEFAULT_ICON_FILL = 'currentColor';\n\nexport const icons: Record<string, string> = {\n  bold,\n  italic,\n  code,\n  underline,\n  strike,\n  ordered_list: orderedList,\n  bullet_list: bulletList,\n  blockquote: quote,\n  link,\n  unlink,\n  image,\n  align_left: alignLeft,\n  align_center: alignCenter,\n  align_right: alignRight,\n  align_justify: alignJustify,\n  text_color: textColor,\n  color_fill: colorFill,\n  horizontal_rule: horizontalRule,\n  format_clear: formatClear,\n  indent,\n  outdent,\n  superscript,\n  subscript,\n  undo,\n  redo,\n  path: '<path></path>',\n};\n\nexport type IconsKeys = keyof typeof icons;\n\nclass Icon {\n  static get(name: keyof typeof icons, fill = DEFAULT_ICON_FILL): string {\n    const fullPath = icons[name];\n    if (fullPath && (fullPath.includes('<path') || fullPath.includes('<g'))) {\n      return `\n        <svg\n          xmlns=\"http://www.w3.org/2000/svg\"\n          viewBox=\"0 0 24 24\"\n          fill=${fill}\n          height=${DEFAULT_ICON_HEIGHT}\n          width=${DEFAULT_ICON_WIDTH}\n        >\n          ${fullPath}\n        </svg>\n      `;\n    }\n    return fullPath;\n  }\n}\n\nexport default Icon;\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgxEditorServiceConfig {\n  public locals = {};\n  public icons = {};\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport { NgxEditorConfig } from './types';\nimport Locals from './Locals';\nimport { NgxEditorServiceConfig } from './editor-config.service';\nimport Icon from './icons';\nimport { HTML } from './trustedTypesUtil';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgxEditorService {\n  config: NgxEditorServiceConfig;\n\n  constructor(@Optional() config?: NgxEditorServiceConfig) {\n    this.config = config;\n  }\n\n  get locals(): Locals {\n    return new Locals(this.config.locals);\n  }\n\n  getIcon(icon: string): HTML {\n    return this.config.icons[icon] ? this.config.icons[icon] : Icon.get(icon);\n  }\n}\n\nexport const provideMyServiceOptions = (config?: NgxEditorConfig): NgxEditorServiceConfig => {\n  return {\n    locals: config.locals ?? {},\n    icons: config.icons ?? {},\n  };\n};\n","import {\n  Component, ElementRef, HostListener, Input, OnDestroy, OnInit,\n} from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Observable, Subscription } from 'rxjs';\nimport { AsyncPipe, CommonModule } from '@angular/common';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\nimport { HTML } from '../../../trustedTypesUtil';\nimport { MenuService } from '../menu.service';\nimport { TextBackgroundColor, TextColor } from '../MenuCommands';\n\ntype Command = typeof TextColor | typeof TextBackgroundColor;\n\n@Component({\n  selector: 'ngx-color-picker',\n  templateUrl: './color-picker.component.html',\n  styleUrls: ['./color-picker.component.scss'],\n  imports: [AsyncPipe, CommonModule, SanitizeHtmlPipe],\n})\nexport class ColorPickerComponent implements OnInit, OnDestroy {\n  @Input() presets: string[][];\n  @Input() type: string;\n\n  constructor(\n    private el: ElementRef,\n    private menuService: MenuService,\n    private ngxeService: NgxEditorService,\n  ) {}\n\n  get title(): Observable<string> {\n    return this.getLabel(this.type === 'text_color' ? 'text_color' : 'background_color');\n  }\n\n  get icon(): HTML {\n    return this.ngxeService.getIcon(this.type === 'text_color' ? 'text_color' : 'color_fill');\n  }\n\n  private get command(): Command {\n    return this.type === 'text_color' ? TextColor : TextBackgroundColor;\n  }\n\n  private updateSubscription: Subscription;\n  private editorView: EditorView;\n  showPopup = false;\n  isActive = false;\n  activeColors: string[] = [];\n  canExecute = true;\n\n  getContrastYIQ(hexcolor: string): string {\n    const color = hexcolor.replace('#', '');\n    const r = parseInt(color.substring(0, 2), 16);\n    const g = parseInt(color.substring(2, 4), 16);\n    const b = parseInt(color.substring(4, 6), 16);\n    const yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000;\n    return yiq >= 128 ? 'black' : 'white';\n  }\n\n  @HostListener('document:mousedown', ['$event']) onDocumentClick(e: MouseEvent): void {\n    if (!this.el.nativeElement.contains(e.target) && this.showPopup) {\n      this.hidePopup();\n    }\n  }\n\n  private hidePopup(): void {\n    this.showPopup = false;\n  }\n\n  togglePopup(): void {\n    this.showPopup = !this.showPopup;\n  }\n\n  onTogglePopupMouseClick(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.togglePopup();\n  }\n\n  onTogglePopupKeydown(): void {\n    this.togglePopup();\n  }\n\n  remove(): void {\n    const { state, dispatch } = this.editorView;\n\n    this.command.remove()(state, dispatch);\n    this.hidePopup();\n  }\n\n  onRemoveMouseClick(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    e.preventDefault();\n    this.remove();\n  }\n\n  onRemoveKeydown(): void {\n    this.remove();\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  selectColor(color: string): void {\n    const { state, dispatch } = this.editorView;\n\n    if (this.type === 'text_color') {\n      const attrs = { color };\n      this.command.apply(attrs)(state, dispatch);\n    } else {\n      const attrs = { backgroundColor: color };\n      this.command.apply(attrs)(state, dispatch);\n    }\n\n    if (!this.editorView.hasFocus()) {\n      this.editorView.focus();\n    }\n\n    this.hidePopup();\n  }\n\n  onColorSelectMouseClick(e: MouseEvent, color: string): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.selectColor(color);\n  }\n\n  onColorSelectKeydown(color: string): void {\n    this.selectColor(color);\n  }\n\n  private update = (view: EditorView) => {\n    const { state } = view;\n    this.canExecute = this.command.canExecute(state);\n    this.isActive = this.command.isActive(state);\n    this.activeColors = [];\n\n    if (this.isActive) {\n      this.activeColors = this.command.getActiveColors(state);\n    }\n  };\n\n  getLabel(key: string): Observable<string> {\n    return this.ngxeService.locals.get(key);\n  }\n\n  ngOnInit(): void {\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<button\n  type=\"button\"\n  class=\"NgxEditor__MenuItem--Icon\"\n  [class.NgxEditor__MenuItem--Active]=\"isActive || showPopup\"\n  [class.NgxEditor--Disabled]=\"!canExecute\"\n  [disabled]=\"!canExecute\"\n  [innerHTML]=\"icon | sanitizeHtml\"\n  (mousedown)=\"onTogglePopupMouseClick($event)\"\n  (keydown.enter)=\"onTogglePopupKeydown()\"\n  (keydown.space)=\"onTogglePopupKeydown()\"\n  [title]=\"title | async\"\n  [ariaLabel]=\"title | async\"\n></button>\n\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <div *ngFor=\"let colorGroup of presets; trackBy: trackByIndex\" class=\"NgxEditor__ColorContainer\">\n    <button\n      class=\"NgxEditor__Color\"\n      *ngFor=\"let color of colorGroup; trackBy: trackByIndex\"\n      [ngStyle]=\"{ backgroundColor: color, color: getContrastYIQ(color) }\"\n      [title]=\"color\"\n      (mousedown)=\"onColorSelectMouseClick($event, color)\"\n      (keydown.enter)=\"onColorSelectKeydown(color)\"\n      (keydown.space)=\"onColorSelectKeydown(color)\"\n      [ngClass]=\"{ 'NgxEditor__Color--Active': activeColors.includes(color) }\"\n    ></button>\n  </div>\n\n  <button\n    class=\"NgxEditor__MenuItem--Button\"\n    (mousedown)=\"onRemoveMouseClick($event)\"\n    (keydown.enter)=\"onRemoveKeydown()\"\n    (keydown.space)=\"onRemoveKeydown()\"\n    [disabled]=\"!isActive\"\n  >\n    {{ getLabel('remove') | async }}\n  </button>\n</div>\n","import {\n  Component, ElementRef, HostListener, Input, OnDestroy, OnInit,\n} from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { NgxEditorService } from '../../../editor.service';\nimport { TBHeadingItems } from '../../../types';\nimport { MenuService } from '../menu.service';\nimport { ToggleCommands } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-dropdown',\n  templateUrl: './dropdown.component.html',\n  styleUrls: ['./dropdown.component.scss'],\n  imports: [AsyncPipe, CommonModule],\n})\nexport class DropdownComponent implements OnInit, OnDestroy {\n  private editorView: EditorView;\n  private updateSubscription: Subscription;\n\n  @Input() group: string;\n  @Input() items: TBHeadingItems[];\n\n  isDropdownOpen = false;\n\n  disabledItems: string[] = [];\n  activeItem: string | null;\n\n  constructor(\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService,\n    private el: ElementRef,\n  ) {}\n\n  get isSelected(): boolean {\n    return Boolean(this.activeItem || this.isDropdownOpen);\n  }\n\n  get isDropdownDisabled(): boolean {\n    return this.disabledItems.length === this.items.length;\n  }\n\n  @HostListener('document:mousedown', ['$event.target']) onDocumentClick(target: Node): void {\n    if (!this.el.nativeElement.contains(target) && this.isDropdownOpen) {\n      this.isDropdownOpen = false;\n    }\n  }\n\n  getName(key: string): Observable<string> {\n    return this.ngxeService.locals.get(key);\n  }\n\n  getIsDropdownActive(item: string): boolean {\n    return this.activeItem === item;\n  }\n\n  toggleDropdown(): void {\n    this.isDropdownOpen = !this.isDropdownOpen;\n  }\n\n  onToggleDropdownMouseClick(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.toggleDropdown();\n  }\n\n  onToggleDropdownKeydown(): void {\n    this.toggleDropdown();\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  selectItem(item: TBHeadingItems): void {\n    const command = ToggleCommands[item];\n    const { state, dispatch } = this.editorView;\n    command.toggle()(state, dispatch);\n    this.isDropdownOpen = false;\n  }\n\n  onDropdownItemMouseClick(e: MouseEvent, item: TBHeadingItems): void {\n    e.preventDefault();\n\n    // consider only left click\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.selectItem(item);\n  }\n\n  onDropdownItemKeydown(event: Event, item: TBHeadingItems): void {\n    const e = event as KeyboardEvent;\n    e.preventDefault();\n    this.selectItem(item);\n  }\n\n  private update = (view: EditorView) => {\n    const { state } = view;\n    this.disabledItems = [];\n    const activeItems = [];\n\n    this.items.forEach((item: TBHeadingItems) => {\n      const command = ToggleCommands[item];\n      const isActive = command.isActive(state);\n\n      if (isActive) {\n        activeItems.push(item);\n      }\n\n      if (!command.canExecute(state)) {\n        this.disabledItems.push(item);\n      }\n    });\n\n    if (activeItems.length === 1) {\n      [this.activeItem] = activeItems;\n    } else {\n      this.activeItem = null;\n    }\n  };\n\n  ngOnInit(): void {\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<button\n  type=\"button\"\n  class=\"NgxEditor__Dropdown--Text\"\n  [class.NgxEditor__Dropdown--Selected]=\"isSelected\"\n  [disabled]=\"isDropdownDisabled\"\n  [class.NgxEditor--Disabled]=\"isDropdownDisabled\"\n  (mousedown)=\"onToggleDropdownMouseClick($event)\"\n  (keydown.enter)=\"onToggleDropdownKeydown()\"\n  (keydown.space)=\"onToggleDropdownKeydown()\"\n  [ariaLabel]=\"getName(activeItem || group) | async\"\n  aria-haspopup=\"listbox\"\n  [ariaExpanded]=\"isDropdownOpen\"\n>\n  {{ getName(activeItem || group) | async }}\n</button>\n\n<div class=\"NgxEditor__Dropdown--DropdownMenu\" *ngIf=\"isDropdownOpen\" role=\"listbox\">\n  <button\n    type=\"button\"\n    class=\"NgxEditor__Dropdown--Item\"\n    *ngFor=\"let item of items; trackBy: trackByIndex\"\n    (mousedown)=\"onDropdownItemMouseClick($event, item)\"\n    (keydown.enter)=\"onDropdownItemKeydown($event, item)\"\n    (keydown.space)=\"onDropdownItemKeydown($event, item)\"\n    [ngClass]=\"{\n      'NgxEditor__Dropdown--Active': item === activeItem,\n      'NgxEditor--Disabled': disabledItems.includes(item),\n    }\"\n    [ariaLabel]=\"getName(item) | async\"\n    role=\"option\"\n    [attr.aria-selected]=\"item === activeItem\"\n  >\n    {{ getName(item) | async }}\n  </button>\n</div>\n","import { Component, ElementRef, HostListener, OnDestroy, OnInit } from '@angular/core';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { uniq } from 'ngx-editor/utils';\nimport { NodeSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\nimport { HTML } from '../../../trustedTypesUtil';\nimport { MenuService } from '../menu.service';\nimport { Image as ImageCommand } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-image',\n  templateUrl: './image.component.html',\n  styleUrls: ['./image.component.scss'],\n  imports: [AsyncPipe, SanitizeHtmlPipe, ReactiveFormsModule, CommonModule],\n})\nexport class ImageComponent implements OnInit, OnDestroy {\n  showPopup = false;\n  isActive = false;\n  private componentId = uniq();\n  private updateSubscription: Subscription;\n\n  form = new FormGroup({\n    src: new FormControl('', [\n      Validators.required,\n      Validators.pattern('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/??([^#\\n\\r]*)?#?([^\\n\\r]*)'),\n    ]),\n    alt: new FormControl(''),\n    title: new FormControl(''),\n  });\n\n  private editorView: EditorView;\n\n  constructor(\n    private el: ElementRef,\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService,\n  ) {}\n\n  get icon(): HTML {\n    return this.ngxeService.getIcon('image');\n  }\n\n  get src(): AbstractControl {\n    return this.form.get('src');\n  }\n\n  @HostListener('document:mousedown', ['$event']) onDocumentClick(e: MouseEvent): void {\n    if (!this.el.nativeElement.contains(e.target) && this.showPopup) {\n      this.hideForm();\n    }\n  }\n\n  getId(name: string): string {\n    return `${name}-${this.componentId}`;\n  }\n\n  getLabel(key: string): Observable<string> {\n    return this.ngxeService.locals.get(key);\n  }\n\n  private hideForm(): void {\n    this.showPopup = false;\n    this.form.reset({\n      src: '',\n      alt: '',\n      title: '',\n    });\n  }\n\n  togglePopup(): void {\n    this.showPopup = !this.showPopup;\n\n    if (this.showPopup) {\n      this.fillForm();\n    }\n  }\n\n  onTogglePopupMouseClick(e: MouseEvent): void {\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.togglePopup();\n  }\n\n  onTogglePopupKeydown(): void {\n    this.togglePopup();\n  }\n\n  private fillForm(): void {\n    const { state } = this.editorView;\n    const { selection } = state;\n    if (selection instanceof NodeSelection && this.isActive) {\n      const { src, alt = '', title = '' } = selection.node.attrs;\n\n      this.form.setValue({\n        src,\n        alt,\n        title,\n      });\n    }\n  }\n\n  private update = (view: EditorView) => {\n    const { state } = view;\n    this.isActive = ImageCommand.isActive(state);\n  };\n\n  insertLink(e: MouseEvent): void {\n    e.preventDefault();\n    const { src, alt, title } = this.form.getRawValue();\n    const { dispatch, state } = this.editorView;\n\n    const attrs = {\n      alt,\n      title,\n    };\n\n    ImageCommand.insert(src, attrs)(state, dispatch);\n    this.editorView.focus();\n    this.hideForm();\n  }\n\n  ngOnInit(): void {\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<button\n  type=\"button\"\n  class=\"NgxEditor__MenuItem--Icon\"\n  [class.NgxEditor__MenuItem--Active]=\"isActive || showPopup\"\n  [innerHTML]=\"icon | sanitizeHtml\"\n  (mousedown)=\"onTogglePopupMouseClick($event)\"\n  (keydown.enter)=\"onTogglePopupKeydown()\"\n  (keydown.space)=\"onTogglePopupKeydown()\"\n  [title]=\"getLabel('insertImage') | async\"\n  [ariaLabel]=\"getLabel('insertImage') | async\"\n  aria-haspopup=\"dialog\"\n  [ariaExpanded]=\"showPopup\"\n></button>\n\n<!-- popup -->\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <form class=\"NgxEditor__Popup--Form\" [formGroup]=\"form\" (ngSubmit)=\"insertLink($event)\">\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\" [htmlFor]=\"getId('image-popup-url')\">{{\n          getLabel('url') | async\n        }}</label>\n        <input type=\"url\" [id]=\"getId('image-popup-url')\" formControlName=\"src\" autocomplete=\"off\" />\n        <div *ngIf=\"src.touched && src.invalid\" class=\"NgxEditor__HelpText NgxEditor__HelpText--Error\">\n          {{ src.errors?.['pattern'] && getLabel('enterValidUrl') | async }}\n        </div>\n      </div>\n    </div>\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\" [htmlFor]=\"getId('image-popup-label')\">{{\n          getLabel('altText') | async\n        }}</label>\n        <input type=\"text\" [id]=\"getId('image-popup-label')\" formControlName=\"alt\" autocomplete=\"off\" />\n      </div>\n    </div>\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\" [htmlFor]=\"getId('image-popup-title')\">{{\n          getLabel('title') | async\n        }}</label>\n        <input type=\"text\" [id]=\"getId('image-popup-title')\" formControlName=\"title\" autocomplete=\"off\" />\n      </div>\n    </div>\n\n    <button type=\"submit\" [disabled]=\"!form.valid || !form.dirty\">{{ getLabel('insert') | async }}</button>\n  </form>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { AsyncPipe } from '@angular/common';\nimport { EditorView } from 'prosemirror-view';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\nimport { HTML } from '../../../trustedTypesUtil';\nimport { TBItems, ToolbarItem } from '../../../types';\nimport { MenuService } from '../menu.service';\nimport { InsertCommands } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-insert-command',\n  templateUrl: './insert-command.component.html',\n  styleUrls: ['./insert-command.component.scss'],\n  imports: [AsyncPipe, SanitizeHtmlPipe],\n})\nexport class InsertCommandComponent implements OnInit, OnDestroy {\n  @Input() toolbarItem: ToolbarItem;\n\n  get name(): TBItems {\n    return this.toolbarItem as TBItems;\n  }\n\n  html: HTML;\n  editorView: EditorView;\n  disabled = false;\n  private updateSubscription: Subscription;\n\n  constructor(\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService,\n  ) {}\n\n  onMouseClick(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.insert();\n  }\n\n  onKeydown(): void {\n    this.insert();\n  }\n\n  insert(): void {\n    const { state, dispatch } = this.editorView;\n    const command = InsertCommands[this.name];\n    command.insert()(state, dispatch);\n  }\n\n  update = (view: EditorView): void => {\n    const { state } = view;\n    const command = InsertCommands[this.name];\n    this.disabled = !command.canExecute(state);\n  };\n\n  getTitle(name: string): Observable<string> {\n    return this.ngxeService.locals.get(name);\n  }\n\n  ngOnInit(): void {\n    this.html = this.ngxeService.getIcon(this.name);\n\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<button\n  type=\"button\"\n  class=\"NgxEditor__MenuItem--Icon\"\n  [disabled]=\"disabled\"\n  [class.NgxEditor--Disabled]=\"disabled\"\n  [innerHTML]=\"html | sanitizeHtml\"\n  (mousedown)=\"onMouseClick($event)\"\n  (keydown.enter)=\"onKeydown()\"\n  (keydown.space)=\"onKeydown()\"\n  [title]=\"getTitle(name) | async\"\n  [ariaLabel]=\"getTitle(name) | async\"\n></button>\n","import {\n  Component, ElementRef, HostListener, Input, OnDestroy, OnInit,\n} from '@angular/core';\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport { AbstractControl, FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { uniq } from 'ngx-editor/utils';\nimport { EditorView } from 'prosemirror-view';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\nimport { HTML } from '../../../trustedTypesUtil';\nimport { MenuService } from '../menu.service';\nimport { Link as LinkCommand } from '../MenuCommands';\n\nexport interface LinkOptions {\n  showOpenInNewTab: boolean;\n}\n\nconst DEFAULT_LINK_OPTIONS: LinkOptions = {\n  showOpenInNewTab: true,\n};\n\n@Component({\n  selector: 'ngx-link',\n  templateUrl: './link.component.html',\n  styleUrls: ['./link.component.scss'],\n  imports: [AsyncPipe, CommonModule, ReactiveFormsModule, SanitizeHtmlPipe],\n})\nexport class LinkComponent implements OnInit, OnDestroy {\n  @Input({\n    transform: (value: Partial<LinkOptions>) => ({ ...DEFAULT_LINK_OPTIONS, ...value }),\n  })\n    options: Partial<LinkOptions> = DEFAULT_LINK_OPTIONS;\n\n  showPopup = false;\n  isActive = false;\n  canExecute = true;\n  private componentId = uniq();\n  form: FormGroup;\n\n  private editorView: EditorView;\n  private updateSubscription: Subscription;\n\n  constructor(\n    private el: ElementRef,\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService,\n  ) {}\n\n  get icon(): HTML {\n    return this.ngxeService.getIcon(this.isActive ? 'unlink' : 'link');\n  }\n\n  get title(): Observable<string> {\n    return this.ngxeService.locals.get(this.isActive ? 'removeLink' : 'insertLink');\n  }\n\n  get href(): AbstractControl {\n    return this.form.get('href');\n  }\n\n  get text(): AbstractControl {\n    return this.form.get('text');\n  }\n\n  @HostListener('document:mousedown', ['$event']) onDocumentClick(e: MouseEvent): void {\n    if (!this.el.nativeElement.contains(e.target) && this.showPopup) {\n      this.hidePopup();\n    }\n  }\n\n  getId(name: string): string {\n    return `${name}-${this.componentId}`;\n  }\n\n  getLabel(key: string): Observable<string> {\n    return this.ngxeService.locals.get(key);\n  }\n\n  private hidePopup(): void {\n    this.showPopup = false;\n    this.form.reset({\n      href: '',\n      text: '',\n      openInNewTab: true,\n    });\n    this.text.enable();\n  }\n\n  togglePopup(): void {\n    const { state, dispatch } = this.editorView;\n\n    if (this.isActive) {\n      LinkCommand.remove(state, dispatch);\n      return;\n    }\n\n    this.showPopup = !this.showPopup;\n    if (this.showPopup) {\n      this.setText();\n    }\n  }\n\n  onTogglePopupMouseClick(e: MouseEvent): void {\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.togglePopup();\n  }\n\n  onTogglePopupKeydown(): void {\n    this.togglePopup();\n  }\n\n  private setText = () => {\n    const { state: { selection, doc } } = this.editorView;\n    const { empty, from, to } = selection;\n    const selectedText = !empty ? doc.textBetween(from, to) : '';\n\n    if (selectedText) {\n      this.text.patchValue(selectedText);\n      this.text.disable();\n    }\n  };\n\n  private update = (view: EditorView) => {\n    const { state } = view;\n    this.isActive = LinkCommand.isActive(state, { strict: false });\n    this.canExecute = LinkCommand.canExecute(state);\n  };\n\n  insertLink(e: MouseEvent): void {\n    e.preventDefault();\n    const { text, href, openInNewTab } = this.form.getRawValue();\n    const { dispatch, state } = this.editorView;\n    const { selection } = state;\n\n    let target: string | undefined;\n\n    if (this.options.showOpenInNewTab) {\n      target = openInNewTab ? '_blank' : '_self';\n    }\n\n    const attrs = {\n      title: href,\n      href,\n      target,\n    };\n\n    if (selection.empty) {\n      LinkCommand.insert(text, attrs)(state, dispatch);\n      this.editorView.focus();\n    } else {\n      LinkCommand.update(attrs)(state, dispatch);\n    }\n    this.hidePopup();\n  }\n\n  ngOnInit(): void {\n    this.editorView = this.menuService.editor.view;\n\n    this.form = new FormGroup({\n      href: new FormControl('', [\n        Validators.required,\n        Validators.pattern(this.menuService.editor.linkValidationPattern),\n      ]),\n      text: new FormControl('', [Validators.required]),\n      openInNewTab: new FormControl(true),\n    });\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<button\n  type=\"button\"\n  class=\"NgxEditor__MenuItem--Icon\"\n  [class.NgxEditor__MenuItem--Active]=\"isActive || showPopup\"\n  [class.NgxEditor--Disabled]=\"!canExecute\"\n  [disabled]=\"!canExecute\"\n  [innerHTML]=\"icon | sanitizeHtml\"\n  (mousedown)=\"onTogglePopupMouseClick($event)\"\n  (keydown.enter)=\"onTogglePopupKeydown()\"\n  (keydown.space)=\"onTogglePopupKeydown()\"\n  [title]=\"title | async\"\n  [ariaLabel]=\"title | async\"\n  aria-haspopup=\"dialog\"\n  [ariaExpanded]=\"showPopup\"\n></button>\n\n<!-- popup -->\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <form class=\"NgxEditor__Popup--Form\" [formGroup]=\"form\" (ngSubmit)=\"insertLink($event)\">\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\" [htmlFor]=\"getId('link-popup-url')\">{{ getLabel('url') | async }}</label>\n        <input type=\"url\" [id]=\"getId('link-popup-url')\" formControlName=\"href\" autocomplete=\"off\" />\n        <div *ngIf=\"href.touched && href.invalid\" class=\"NgxEditor__HelpText NgxEditor__HelpText--Error\">\n          {{ href.errors?.['pattern'] && getLabel('enterValidUrl') | async }}\n        </div>\n      </div>\n    </div>\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\" [htmlFor]=\"getId('link-popup-label')\">{{\n          getLabel('text') | async\n        }}</label>\n        <input type=\"text\" [id]=\"getId('link-popup-label')\" formControlName=\"text\" autocomplete=\"off\" />\n        <div *ngIf=\"text.touched && text.invalid\" class=\"NgxEditor__HelpText NgxEditor__HelpText--Error\">\n          {{ text.errors?.['required'] && 'This is required' }}\n        </div>\n      </div>\n    </div>\n\n    <div class=\"NgxEditor__Popup--FormGroup\" *ngIf=\"this.options.showOpenInNewTab\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label>\n          <input type=\"checkbox\" formControlName=\"openInNewTab\" />\n          {{ getLabel('openInNewTab') | async }}\n        </label>\n      </div>\n    </div>\n\n    <button type=\"submit\" [disabled]=\"!form.valid\">{{ getLabel('insert') | async }}</button>\n  </form>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Observable, Subscription } from 'rxjs';\nimport { AsyncPipe } from '@angular/common';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\nimport { HTML } from '../../../trustedTypesUtil';\nimport { TBItems, ToolbarItem } from '../../../types';\nimport { MenuService } from '../menu.service';\nimport { ToggleCommands } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-toggle-command',\n  templateUrl: './toggle-command.component.html',\n  styleUrls: ['./toggle-command.component.scss'],\n  imports: [AsyncPipe, SanitizeHtmlPipe],\n})\nexport class ToggleCommandComponent implements OnInit, OnDestroy {\n  @Input() toolbarItem: ToolbarItem;\n\n  get name(): TBItems {\n    return this.toolbarItem as TBItems;\n  }\n\n  html: HTML;\n  editorView: EditorView;\n  isActive = false;\n  disabled = false;\n  private updateSubscription: Subscription;\n\n  constructor(\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService,\n  ) {}\n\n  toggle(): void {\n    const { state, dispatch } = this.editorView;\n    const command = ToggleCommands[this.name];\n    command.toggle()(state, dispatch);\n  }\n\n  onMouseClick(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.toggle();\n  }\n\n  onKeydown(): void {\n    this.toggle();\n  }\n\n  update = (view: EditorView): void => {\n    const { state } = view;\n    const command = ToggleCommands[this.name];\n    this.isActive = command.isActive(state);\n    this.disabled = !command.canExecute(state);\n  };\n\n  getTitle(name: string): Observable<string> {\n    return this.ngxeService.locals.get(name);\n  }\n\n  ngOnInit(): void {\n    this.html = this.ngxeService.getIcon(this.name);\n\n    this.editorView = this.menuService.editor.view;\n\n    this.updateSubscription = this.menuService.editor.update.subscribe((view: EditorView) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<button\n  type=\"button\"\n  class=\"NgxEditor__MenuItem--Icon\"\n  [class.NgxEditor__MenuItem--Active]=\"isActive\"\n  [class.NgxEditor--Disabled]=\"disabled\"\n  [disabled]=\"disabled\"\n  [innerHTML]=\"html | sanitizeHtml\"\n  (mousedown)=\"onMouseClick($event)\"\n  (keydown.enter)=\"onKeydown()\"\n  (keydown.space)=\"onKeydown()\"\n  [title]=\"getTitle(name) | async\"\n  [ariaLabel]=\"getTitle(name) | async\"\n></button>\n","import { Component, Input, OnInit, TemplateRef } from '@angular/core';\n\nimport { CommonModule } from '@angular/common';\nimport { NgxEditorError } from 'ngx-editor/utils';\nimport Editor from '../../Editor';\nimport { Toolbar, ToolbarDropdown, ToolbarItem, ToolbarLink, ToolbarLinkOptions } from '../../types';\nimport { ColorPickerComponent } from './color-picker/color-picker.component';\nimport { DropdownComponent } from './dropdown/dropdown.component';\nimport { ImageComponent } from './image/image.component';\nimport { InsertCommandComponent } from './insert-command/insert-command.component';\nimport { LinkComponent } from './link/link.component';\nimport { MenuService } from './menu.service';\nimport { ToggleCommandComponent } from './toggle-command/toggle-command.component';\n\nexport const DEFAULT_TOOLBAR: Toolbar = [\n  ['bold', 'italic'],\n  ['code', 'blockquote'],\n  ['underline', 'strike'],\n  ['ordered_list', 'bullet_list'],\n  [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n  ['link', 'image'],\n  ['text_color', 'background_color'],\n  ['align_left', 'align_center', 'align_right', 'align_justify'],\n  ['format_clear'],\n];\n\nexport const TOOLBAR_MINIMAL: Toolbar = [\n  ['bold', 'italic'],\n  [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n  ['link', 'image'],\n  ['text_color', 'background_color'],\n];\n\nexport const TOOLBAR_FULL: Toolbar = [\n  ['bold', 'italic'],\n  ['code', 'blockquote'],\n  ['underline', 'strike'],\n  ['ordered_list', 'bullet_list'],\n  [{ heading: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] }],\n  ['link', 'image'],\n  ['text_color', 'background_color'],\n  ['align_left', 'align_center', 'align_right', 'align_justify'],\n  ['horizontal_rule', 'format_clear', 'indent', 'outdent'],\n  ['superscript', 'subscript'],\n  ['undo', 'redo'],\n];\n\nconst DEFAULT_COLOR_PRESETS = [\n  '#b60205',\n  '#d93f0b',\n  '#fbca04',\n  '#0e8a16',\n  '#006b75',\n  '#1d76db',\n  '#0052cc',\n  '#5319e7',\n  '#e99695',\n  '#f9d0c4',\n  '#fef2c0',\n  '#c2e0c6',\n  '#bfdadc',\n  '#c5def5',\n  '#bfd4f2',\n  '#d4c5f9',\n];\n\n@Component({\n  selector: 'ngx-editor-menu',\n  templateUrl: './menu.component.html',\n  styleUrls: ['./menu.component.scss'],\n  providers: [MenuService],\n  imports: [\n    CommonModule,\n    ColorPickerComponent,\n    DropdownComponent,\n    ToggleCommandComponent,\n    InsertCommandComponent,\n    LinkComponent,\n    ImageComponent,\n  ],\n})\nexport class NgxEditorMenuComponent implements OnInit {\n  @Input() toolbar: Toolbar = TOOLBAR_MINIMAL;\n  @Input() colorPresets: string[] = DEFAULT_COLOR_PRESETS;\n  @Input() disabled = false;\n  @Input() editor: Editor;\n  @Input() customMenuRef: TemplateRef<unknown> | null = null;\n  @Input() dropdownPlacement: 'top' | 'bottom' = 'bottom';\n\n  toggleCommands: ToolbarItem[] = [\n    'bold',\n    'italic',\n    'underline',\n    'strike',\n    'code',\n    'blockquote',\n    'ordered_list',\n    'bullet_list',\n    'align_left',\n    'align_center',\n    'align_right',\n    'align_justify',\n    'superscript',\n    'subscript',\n  ];\n\n  insertCommands: ToolbarItem[] = [\n    'horizontal_rule',\n    'format_clear',\n    'indent',\n    'outdent',\n    'undo',\n    'redo',\n  ];\n\n  iconContainerClass = ['NgxEditor__MenuItem', 'NgxEditor__MenuItem--IconContainer'];\n  dropdownContainerClass = ['NgxEditor__Dropdown'];\n  seperatorClass = ['NgxEditor__Seperator'];\n\n  constructor(private menuService: MenuService) {}\n\n  get presets(): string[][] {\n    const col = 8;\n    const colors: string[][] = [];\n\n    this.colorPresets.forEach((color, index) => {\n      const row = Math.floor(index / col);\n\n      if (!colors[row]) {\n        colors.push([]);\n      }\n\n      colors[row].push(color);\n    });\n\n    return colors;\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  isDropDown(item: ToolbarItem): boolean {\n    if ((item as ToolbarDropdown)?.heading) {\n      return true;\n    }\n\n    return false;\n  }\n\n  getDropdownItems(item: ToolbarItem): ToolbarDropdown {\n    return item as ToolbarDropdown;\n  }\n\n  isLinkItem(item: ToolbarItem): boolean {\n    if (item === 'link') {\n      return true;\n    }\n\n    // NOTE: it is not sufficient to check for a `link` property\n    // as String.prototype.link is a valid (although deprecated) method\n    return typeof item === 'object' && typeof (item as ToolbarLink)?.link === 'object';\n  }\n\n  isLinkWithOptions(item: ToolbarItem): boolean {\n    // NOTE: it is not sufficient to check for a `link` property\n    // as String.prototype.link is a valid (although deprecated) method\n    return typeof item === 'object' && typeof (item as ToolbarLink)?.link === 'object';\n  }\n\n  getLinkOptions(item: ToolbarItem): Partial<ToolbarLinkOptions> {\n    return (item as ToolbarLink)?.link;\n  }\n\n  ngOnInit(): void {\n    if (!this.editor) {\n      throw new NgxEditorError('Required editor instance to initialize menu component');\n    }\n\n    this.menuService.editor = this.editor;\n  }\n}\n","<div\n  class=\"NgxEditor__MenuBar\"\n  [ngClass]=\"{ 'NgxEditor--Disabled': disabled, 'NgxEditor__MenuBar--Reverse': dropdownPlacement === 'top' }\"\n>\n  <ng-container *ngFor=\"let toolbarItem of toolbar; let lastToolbarItem = last; trackBy: trackByIndex\">\n    <ng-container *ngFor=\"let item of toolbarItem; let lastItem = last; trackBy: trackByIndex\">\n      <!-- toggle icons -->\n      <ngx-toggle-command [toolbarItem]=\"item\" [class]=\"iconContainerClass\" *ngIf=\"toggleCommands.includes(item)\">\n      </ngx-toggle-command>\n\n      <ngx-insert-command [toolbarItem]=\"item\" [class]=\"iconContainerClass\" *ngIf=\"insertCommands.includes(item)\">\n      </ngx-insert-command>\n\n      <!-- link -->\n      <ng-container *ngIf=\"isLinkItem(item)\">\n        <ngx-link [class]=\"iconContainerClass\" [options]=\"getLinkOptions(item)\"></ngx-link>\n      </ng-container>\n\n      <!-- image -->\n      <ngx-image [class]=\"iconContainerClass\" *ngIf=\"item === 'image'\"> </ngx-image>\n\n      <!-- dropdown -->\n      <ng-container *ngIf=\"isDropDown(item)\">\n        <ngx-dropdown\n          *ngFor=\"let dropdownItem of getDropdownItems(item) | keyvalue; trackBy: trackByIndex\"\n          [class]=\"dropdownContainerClass\"\n          [group]=\"dropdownItem.key\"\n          [items]=\"dropdownItem.value\"\n        >\n        </ngx-dropdown>\n      </ng-container>\n\n      <!-- text color picker -->\n      <ngx-color-picker\n        [class]=\"iconContainerClass\"\n        *ngIf=\"item === 'text_color'\"\n        type=\"text_color\"\n        [presets]=\"presets\"\n      >\n      </ngx-color-picker>\n      <!-- background color picker -->\n      <ngx-color-picker\n        [class]=\"iconContainerClass\"\n        *ngIf=\"item === 'background_color'\"\n        type=\"background_color\"\n        [presets]=\"presets\"\n      >\n      </ngx-color-picker>\n\n      <!-- seperator -->\n      <div [class]=\"seperatorClass\" *ngIf=\"lastItem && !lastToolbarItem\"></div>\n    </ng-container>\n  </ng-container>\n\n  <!-- custom menu -->\n  <ng-container *ngIf=\"customMenuRef\">\n    <ng-container [ngTemplateOutlet]=\"customMenuRef\"></ng-container>\n  </ng-container>\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { EditorView } from 'prosemirror-view';\nimport { Observable, Subscription } from 'rxjs';\n\nimport { AsyncPipe, CommonModule } from '@angular/common';\nimport Editor from '../../../Editor';\nimport { NgxEditorService } from '../../../editor.service';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\nimport { TBItems } from '../../../types';\nimport { ToggleCommands } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-bubble',\n  templateUrl: './bubble.component.html',\n  styleUrls: ['./bubble.component.scss'],\n  imports: [AsyncPipe, CommonModule],\n  providers: [SanitizeHtmlPipe],\n})\nexport class BubbleComponent implements OnInit, OnDestroy {\n  constructor(\n    private sanitizeHTML: SanitizeHtmlPipe,\n    private ngxeService: NgxEditorService,\n  ) {}\n\n  private get view(): EditorView {\n    return this.editor.view;\n  }\n\n  @Input() editor: Editor;\n\n  private updateSubscription: Subscription;\n  execulableItems: TBItems[] = [];\n  activeItems: TBItems[] = [];\n\n  toolbar: TBItems[][] = [\n    ['bold', 'italic', 'underline', 'strike'],\n    ['ordered_list', 'bullet_list', 'blockquote', 'code'],\n    ['align_left', 'align_center', 'align_right', 'align_justify'],\n  ];\n\n  toggleCommands: TBItems[] = [\n    'bold',\n    'italic',\n    'underline',\n    'strike',\n    'ordered_list',\n    'bullet_list',\n    'blockquote',\n    'code',\n    'align_left',\n    'align_center',\n    'align_right',\n    'align_justify',\n  ];\n\n  getIcon(name: TBItems): SafeHtml {\n    return this.sanitizeHTML.transform(this.ngxeService.getIcon(name));\n  }\n\n  getTitle(name: string): Observable<string> {\n    return this.ngxeService.locals.get(name);\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  onClick(e: MouseEvent, commandName: TBItems): void {\n    e.preventDefault();\n    e.stopPropagation();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    const { state, dispatch } = this.view;\n\n    const command = ToggleCommands[commandName];\n    command.toggle()(state, dispatch);\n  }\n\n  private update(view: EditorView): void {\n    this.activeItems = [];\n    this.execulableItems = [];\n    const { state } = view;\n\n    this.toggleCommands.forEach((toolbarItem) => {\n      const command = ToggleCommands[toolbarItem];\n\n      const isActive = command.isActive(state);\n      if (isActive) {\n        this.activeItems.push(toolbarItem);\n      }\n\n      const canExecute = command.canExecute(state);\n\n      if (canExecute) {\n        this.execulableItems.push(toolbarItem);\n      }\n    });\n  }\n\n  ngOnInit(): void {\n    this.updateSubscription = this.editor.update.subscribe((view) => {\n      this.update(view);\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n  }\n}\n","<ng-container *ngFor=\"let toolbarItem of toolbar; let lastToolbarItem = last; trackBy: trackByIndex\">\n  <ng-container *ngFor=\"let item of toolbarItem; let lastItem = last; trackBy: trackByIndex\">\n    <button\n      type=\"button\"\n      class=\"NgxBubbleMenu__Icon\"\n      *ngIf=\"toggleCommands.includes(item)\"\n      [ngClass]=\"{\n        'NgxBubbleMenu__Icon--Active': this.activeItems.includes(item),\n        'NgxEditor--Disabled': !this.execulableItems.includes(item)\n      }\"\n      (mousedown)=\"onClick($event, item)\"\n      [title]=\"getTitle(item) | async\"\n      [innerHTML]=\"getIcon(item)\"\n    ></button>\n    <div class=\"NgxBubbleMenu__Seperator\" *ngIf=\"lastItem && !lastToolbarItem\"></div>\n  </ng-container>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport {\n  Component, ElementRef, HostBinding, HostListener, Input, OnDestroy, OnInit,\n} from '@angular/core';\nimport type { VirtualElement } from '@floating-ui/core';\nimport { autoPlacement, computePosition, detectOverflow, offset } from '@floating-ui/dom';\nimport { NodeSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { asyncScheduler, fromEvent, Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\n\nimport { NgxEditorError } from 'ngx-editor/utils';\nimport Editor from '../../../Editor';\nimport { BubbleComponent } from '../bubble/bubble.component';\n\ninterface BubblePosition {\n  top: number;\n  left: number;\n}\n\n@Component({\n  selector: 'ngx-editor-floating-menu',\n  templateUrl: './floating-menu.component.html',\n  styleUrls: ['./floating-menu.component.scss'],\n  imports: [BubbleComponent, CommonModule],\n})\nexport class NgxEditorFloatingMenuComponent implements OnInit, OnDestroy {\n  constructor(public el: ElementRef<HTMLElement>) {}\n\n  @HostBinding('style') get display(): Partial<CSSStyleDeclaration> {\n    return {\n      visibility: this.showMenu ? 'visible' : 'hidden',\n      opacity: this.showMenu ? '1' : '0',\n      top: `${this.posTop}px`,\n      left: `${this.posLeft}px`,\n    };\n  }\n\n  private get view(): EditorView {\n    return this.editor.view;\n  }\n\n  @Input() editor: Editor;\n  @Input() autoPlace = false;\n\n  private posLeft = 0;\n  private posTop = 0;\n  private showMenu = false;\n  private updateSubscription: Subscription;\n  private dragging = false;\n  private resizeSubscription: Subscription;\n\n  @HostListener('document:mousedown', ['$event']) onMouseDown(e: MouseEvent): void {\n    const target = e.target as Node;\n\n    if (this.el.nativeElement.contains(target) && target.nodeName !== 'INPUT') {\n      e.preventDefault();\n      return;\n    }\n\n    this.dragging = true;\n  }\n\n  @HostListener('document:keydown', ['$event']) onKeyDown(e: KeyboardEvent): void {\n    const target = e.target as Node;\n\n    if (target.nodeName === 'INPUT') {\n      return;\n    }\n\n    this.dragging = true;\n    this.hide();\n  }\n\n  @HostListener('document:mouseup', ['$event']) onMouseUp(e: MouseEvent): void {\n    const target = e.target as Node;\n\n    if (this.el.nativeElement.contains(target) || target.nodeName === 'INPUT') {\n      e.preventDefault();\n      return;\n    }\n\n    this.dragging = false;\n    this.useUpdate();\n  }\n\n  @HostListener('document:keyup', ['$event']) onKeyUp(e: KeyboardEvent): void {\n    const target = e.target as Node;\n\n    if (target.nodeName === 'INPUT') {\n      return;\n    }\n\n    this.dragging = false;\n    this.useUpdate();\n  }\n\n  private useUpdate(): void {\n    if (!this.view) {\n      return;\n    }\n\n    this.update(this.view);\n  }\n\n  private hide(): void {\n    this.showMenu = false;\n  }\n\n  private show(): void {\n    this.showMenu = true;\n  }\n\n  private async calculateBubblePosition(view: EditorView): Promise<BubblePosition> {\n    const {\n      state: { selection },\n    } = view;\n    const { from, to } = selection;\n\n    const start = view.coordsAtPos(from);\n    const end = view.coordsAtPos(to);\n\n    const selectionElement: VirtualElement = {\n      getBoundingClientRect() {\n        if (selection instanceof NodeSelection) {\n          const node = view.nodeDOM(from) as HTMLElement;\n          return node.getBoundingClientRect();\n        }\n\n        const { top, left } = start;\n        const { bottom, right } = end;\n\n        return {\n          x: left,\n          y: top,\n          top,\n          bottom,\n          left,\n          right,\n          width: right - left,\n          height: bottom - top,\n        };\n      },\n    };\n\n    // the floating bubble itself\n    const bubbleEl = this.el.nativeElement;\n\n    const { x: left, y: top } = await computePosition(selectionElement, bubbleEl, {\n      placement: 'top',\n      middleware: [\n        offset(5),\n        this.autoPlace\n          && autoPlacement({\n            boundary: view.dom,\n            padding: 5,\n            allowedPlacements: ['top', 'bottom'],\n          }),\n        {\n          // prevent overflow on right and left side\n          // since only top and bottom placements are allowed\n          // autoplacement can't handle overflows on the right and left\n          name: 'overflowMiddleware',\n          async fn(middlewareArgs) {\n            const overflow = await detectOverflow(middlewareArgs, {\n              boundary: view.dom,\n              padding: 5,\n            });\n\n            // overflows left\n            if (overflow.left > 0) {\n              return {\n                x: middlewareArgs.x + overflow.left,\n              };\n            }\n\n            // overflows right\n            if (overflow.right > 0) {\n              return {\n                x: middlewareArgs.x - overflow.right,\n              };\n            }\n\n            return {};\n          },\n        },\n      ].filter(Boolean),\n    });\n\n    return {\n      left,\n      top,\n    };\n  }\n\n  private canShowMenu(view: EditorView): boolean {\n    const { state } = view;\n    const { selection } = state;\n    const { empty } = selection;\n\n    if (selection instanceof NodeSelection) {\n      if (selection.node.type.name === 'image') {\n        return false;\n      }\n    }\n\n    const hasFocus = this.view.hasFocus();\n\n    if (!hasFocus || empty || this.dragging) {\n      this.hide();\n      return false;\n    }\n\n    return true;\n  }\n\n  private update(view: EditorView): void {\n    const canShowMenu = this.canShowMenu(view);\n\n    if (!canShowMenu) {\n      this.hide();\n      return;\n    }\n\n    this.calculateBubblePosition(this.view).then(({ top, left }) => {\n      if (!this.canShowMenu) {\n        this.hide();\n        return;\n      }\n\n      this.posLeft = left;\n      this.posTop = top;\n\n      this.show();\n    });\n  }\n\n  ngOnInit(): void {\n    if (!this.editor) {\n      throw new NgxEditorError('Required editor instance to initialize floating menu component');\n    }\n\n    this.updateSubscription = this.editor.update.subscribe((view) => {\n      this.update(view);\n    });\n\n    this.resizeSubscription = fromEvent(window, 'resize')\n      .pipe(throttleTime(500, asyncScheduler, { leading: true, trailing: true }))\n      .subscribe(() => {\n        this.useUpdate();\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.updateSubscription.unsubscribe();\n    this.resizeSubscription.unsubscribe();\n  }\n}\n","<div #ref>\n  <ng-content></ng-content>\n</div>\n<ng-container *ngIf=\"ref.children.length === 0\">\n  <ngx-bubble [editor]=\"editor\"></ngx-bubble>\n</ng-container>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { BubbleComponent } from './bubble/bubble.component';\nimport { ColorPickerComponent } from './color-picker/color-picker.component';\nimport { DropdownComponent } from './dropdown/dropdown.component';\nimport { NgxEditorFloatingMenuComponent } from './floating-menu/floating-menu.component';\nimport { ImageComponent } from './image/image.component';\nimport { LinkComponent } from './link/link.component';\nimport { NgxEditorMenuComponent } from './menu.component';\nimport { ToggleCommandComponent } from './toggle-command/toggle-command.component';\n\nimport { SanitizeHtmlPipe } from '../../pipes/sanitize/sanitize-html.pipe';\nimport { InsertCommandComponent } from './insert-command/insert-command.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    ReactiveFormsModule,\n    // pipes\n    SanitizeHtmlPipe,\n    // components\n    NgxEditorMenuComponent,\n    ToggleCommandComponent,\n    InsertCommandComponent,\n    LinkComponent,\n    DropdownComponent,\n    ImageComponent,\n    ColorPickerComponent,\n    NgxEditorFloatingMenuComponent,\n    BubbleComponent,\n  ],\n  providers: [\n    SanitizeHtmlPipe,\n  ],\n  exports: [\n    NgxEditorMenuComponent,\n    NgxEditorFloatingMenuComponent,\n  ],\n})\nexport class MenuModule {}\n","import { CommonModule } from '@angular/common';\nimport { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core';\n\nimport { defaults as defaultLocals } from './Locals';\nimport { icons } from './icons';\nimport { NgxEditorConfig } from './types';\n\nimport { NgxEditorServiceConfig } from './editor-config.service';\nimport { NgxEditorComponent } from './editor.component';\nimport { NgxEditorService, provideMyServiceOptions } from './editor.service';\nimport { MenuModule } from './modules/menu/menu.module';\n\nimport { ImageViewComponent } from './components/image-view/image-view.component';\nimport { NgxEditorFloatingMenuComponent } from './modules/menu/floating-menu/floating-menu.component';\nimport { NgxEditorMenuComponent } from './modules/menu/menu.component';\n\nexport const NGX_EDITOR_CONFIG_TOKEN = new InjectionToken<NgxEditorConfig>('NgxEditorConfig');\n\nconst defaultConfig: NgxEditorConfig = {\n  locals: defaultLocals,\n  icons,\n};\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MenuModule,\n    NgxEditorComponent,\n    ImageViewComponent,\n  ],\n  providers: [],\n  exports: [\n    NgxEditorComponent,\n    NgxEditorMenuComponent,\n    NgxEditorFloatingMenuComponent,\n  ],\n})\nexport class NgxEditorModule {\n  static forRoot(config: NgxEditorConfig = defaultConfig): ModuleWithProviders<NgxEditorModule> {\n    return {\n      ngModule: NgxEditorModule,\n      providers: [\n        {\n          provide: NGX_EDITOR_CONFIG_TOKEN,\n          useValue: config,\n        },\n        {\n          provide: NgxEditorServiceConfig,\n          useFactory: provideMyServiceOptions,\n          deps: [NGX_EDITOR_CONFIG_TOKEN],\n        },\n      ],\n    };\n  }\n\n  static forChild(config: NgxEditorConfig = defaultConfig): ModuleWithProviders<NgxEditorModule> {\n    return {\n      ngModule: NgxEditorModule,\n      providers: [\n        {\n          provide: NGX_EDITOR_CONFIG_TOKEN,\n          useValue: config,\n        },\n        {\n          provide: NgxEditorServiceConfig,\n          useFactory: provideMyServiceOptions,\n          deps: [NGX_EDITOR_CONFIG_TOKEN],\n        },\n        NgxEditorService,\n      ],\n    };\n  }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\nimport { Schema, Node as ProseMirrorNode } from 'prosemirror-model';\n\nimport { parseContent } from './parsers';\nimport defaultSchema from './schema';\n\ntype ValidationErrors = Record<string, unknown>;\n\nconst isEmptyInputValue = (value: string | null): boolean => {\n  // we don't check for string here so it also works with arrays\n  return value === null || value.length === 0;\n};\n\nconst hasValidLength = (value: string | null): boolean => {\n  // non-strict comparison is intentional, to check for both `null` and `undefined` values\n  return value !== null && typeof value.length === 'number';\n};\n\nconst isDocEmpty = (doc: ProseMirrorNode | null): boolean => {\n  if (!doc) {\n    return true;\n  }\n\n  const { childCount, firstChild } = doc;\n  return Boolean(childCount === 1 && firstChild?.isTextblock && firstChild.content.size === 0);\n};\n\n// @dynamic\nexport class Validators {\n  static required(userSchema?: Schema): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const schema = userSchema || defaultSchema;\n      const doc = parseContent(control.value, schema);\n\n      const isEmpty = isDocEmpty(doc);\n\n      if (!isEmpty) {\n        return null;\n      }\n\n      return {\n        required: true,\n      };\n    };\n  }\n\n  static maxLength(maxLength: number, userSchema?: Schema): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const schema = userSchema || defaultSchema;\n      const doc = parseContent(control.value, schema);\n\n      const value = doc.textContent;\n\n      if (hasValidLength(value) && value.length > maxLength) {\n        return {\n          maxlength: {\n            requiredLength: maxLength,\n            actualLength: value.length,\n          },\n        };\n      }\n\n      return null;\n    };\n  }\n\n  static minLength(minLength: number, userSchema?: Schema): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const schema = userSchema || defaultSchema;\n      const doc = parseContent(control.value, schema);\n\n      const value = doc.textContent;\n\n      if (isEmptyInputValue(value) || !hasValidLength(value)) {\n        // don't validate empty values to allow optional controls\n        // don't validate values without `length` property\n        return null;\n      }\n\n      if (value.length < minLength) {\n        return {\n          minlength: {\n            requiredLength: minLength, actualLength: value.length,\n          },\n        };\n      }\n\n      return null;\n    };\n  }\n}\n","import { EditorState, Selection, Transaction } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport {\n  chainCommands, createParagraphNear, liftEmptyBlock,\n  newlineInCode, splitBlock,\n} from 'prosemirror-commands';\nimport { DOMParser } from 'prosemirror-model';\n\nimport { NgxEditorError } from 'ngx-editor/utils';\nimport MarkCommand from './commands/Mark';\nimport ListCommand from './commands/ListItem';\nimport LinkCommand, { LinkAttrs } from './commands/Link';\nimport HeadingCommand, { HeadingLevels } from './commands/Heading';\nimport ImageCommand, { ImageAttrs } from './commands/Image';\nimport TextColorCommand from './commands/TextColor';\nimport TextAlignCommand, { Align } from './commands/TextAlign';\nimport IndentCommand from './commands/Indent';\n\nimport { HTML } from './trustedTypesUtil';\nimport { isString } from './stringUtil';\n\nconst execMark = (name: string, toggle = false) => {\n  return (state: EditorState, dispatch: (tr: Transaction) => void) => {\n    const command = new MarkCommand(name);\n\n    if (!toggle) {\n      return command.apply()(state, dispatch);\n    }\n\n    return command.toggle()(state, dispatch);\n  };\n};\n\ntype FocusPosition = 'start' | 'end';\n\nclass EditorCommands {\n  private view: EditorView;\n  private state: EditorState;\n  private tr: Transaction;\n\n  constructor(view: EditorView) {\n    if (!view) {\n      throw new NgxEditorError('Required view to initialize commands.');\n    }\n\n    this.view = view;\n    this.state = view.state;\n    this.tr = this.view.state.tr;\n  }\n\n  private applyTrx = (tr?: Transaction) => {\n    this.state = this.state.apply(tr ?? this.tr);\n    this.tr = this.state.tr;\n    this.tr.setMeta('APPLIED_TRX', true);\n  };\n\n  private dispatch = (tr: Transaction): void => {\n    this.applyTrx(tr);\n  };\n\n  exec(): boolean {\n    // No changes applied\n    if (!this.tr.getMeta('APPLIED_TRX')) {\n      return false;\n    }\n\n    const forceEmit = !this.view.state.doc.eq(this.state.doc);\n    this.view.updateState(this.state);\n\n    const tr = this.tr\n      .setMeta('FORCE_EMIT', forceEmit);\n\n    this.view.dispatch(tr);\n    return true;\n  }\n\n  focus(position: FocusPosition = 'end'): this {\n    const selection = position === 'start'\n      ? Selection.atStart(this.state.doc)\n      : Selection.atEnd(this.state.doc);\n\n    this.tr.setSelection(selection);\n    this.applyTrx();\n\n    this.view.focus();\n    return this;\n  }\n\n  scrollIntoView(): this {\n    this.tr.scrollIntoView();\n    this.applyTrx();\n    return this;\n  }\n\n  insertText(text: string): this {\n    this.tr.insertText(text);\n    this.applyTrx();\n    return this;\n  }\n\n  insertNewLine(): this {\n    const newLineCommands = [newlineInCode, createParagraphNear, liftEmptyBlock, splitBlock];\n    chainCommands(...newLineCommands)(this.state, this.dispatch);\n    return this;\n  }\n\n  applyMark(name: string): this {\n    execMark(name, false)(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleMark(name: string): this {\n    execMark(name, true)(this.state, this.dispatch);\n    return this;\n  }\n\n  bold(): this {\n    execMark('strong')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleBold(): this {\n    execMark('strong', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  italics(): this {\n    execMark('em')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleItalics(): this {\n    execMark('em', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  underline(): this {\n    execMark('u')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleUnderline(): this {\n    execMark('u', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  strike(): this {\n    execMark('s')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleStrike(): this {\n    execMark('s', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  code(): this {\n    execMark('code')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleCode(): this {\n    execMark('code', true)(this.state, this.dispatch);\n    return this;\n  }\n\n  superscript(): this {\n    execMark('sup')(this.state, this.dispatch);\n    return this;\n  }\n\n  subscript(): this {\n    execMark('sub')(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleOrderedList(): this {\n    const command = new ListCommand(false);\n    command.toggle()(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleBulletList(): this {\n    const command = new ListCommand(true);\n    command.toggle()(this.state, this.dispatch);\n    return this;\n  }\n\n  toggleHeading(level: HeadingLevels): this {\n    const command = new HeadingCommand(level);\n    command.toggle()(this.state, this.dispatch);\n    return this;\n  }\n\n  insertLink(text: string, attrs: LinkAttrs): this {\n    const command = new LinkCommand();\n    command.insert(text, attrs)(this.state, this.dispatch);\n    return this;\n  }\n\n  updateLink(attrs: LinkAttrs): this {\n    const command = new LinkCommand();\n    command.update(attrs)(this.state, this.dispatch);\n    return this;\n  }\n\n  insertImage(src: string, attrs: ImageAttrs = {}): this {\n    const command = new ImageCommand();\n    command.insert(src, attrs)(this.state, this.dispatch);\n    return this;\n  }\n\n  textColor(color: string): this {\n    const command = new TextColorCommand('text_color');\n    command.apply({ color })(this.state, this.dispatch);\n    return this;\n  }\n\n  backgroundColor(color: string): this {\n    const command = new TextColorCommand('text_background_color');\n    command.apply({ backgroundColor: color })(this.state, this.dispatch);\n    return this;\n  }\n\n  removeTextColor(): this {\n    const command = new TextColorCommand('text_color');\n    command.remove()(this.state, this.dispatch);\n    return this;\n  }\n\n  removeBackgroundColor(): this {\n    const command = new TextColorCommand('text_background_color');\n    command.remove()(this.state, this.dispatch);\n    return this;\n  }\n\n  align(p: Align): this {\n    const command = new TextAlignCommand(p);\n    command.toggle()(this.state, this.dispatch);\n    return this;\n  }\n\n  insertHTML(html: HTML): this {\n    const { selection, schema, tr } = this.state;\n    const { from, to } = selection;\n\n    const element = document.createElement('div');\n    element.innerHTML = isString(html) ? html.trim() : String(html);\n    const slice = DOMParser.fromSchema(schema).parseSlice(element);\n\n    const transaction = tr.replaceRange(from, to, slice);\n    this.applyTrx(transaction);\n\n    return this;\n  }\n\n  indent(): this {\n    const command = new IndentCommand('increase');\n    command.insert()(this.state, this.dispatch);\n    return this;\n  }\n\n  outdent(): this {\n    const command = new IndentCommand('decrease');\n    command.insert()(this.state, this.dispatch);\n    return this;\n  }\n}\n\nexport default EditorCommands;\n","import { MarkType, NodeType, Schema } from 'prosemirror-model';\nimport { Command, Plugin } from 'prosemirror-state';\nimport { keymap } from 'prosemirror-keymap';\nimport { toggleMark, baseKeymap, chainCommands, exitCode } from 'prosemirror-commands';\nimport { splitListItem, liftListItem, sinkListItem } from 'prosemirror-schema-list';\nimport { history, undo, redo } from 'prosemirror-history';\nimport {\n  inputRules, wrappingInputRule, textblockTypeInputRule,\n  smartQuotes, emDash, ellipsis, InputRule,\n} from 'prosemirror-inputrules';\n\nimport { markInputRule } from 'ngx-editor/helpers';\n\ninterface Options {\n  history: boolean;\n  keyboardShortcuts: boolean;\n  inputRules: boolean;\n}\n\ninterface ShortcutOptions {\n  history: boolean;\n}\n\nconst isMacOs = typeof navigator !== 'undefined'\n  ? (/Mac/).test(navigator.platform)\n  : false;\n\n// Input rules ref: https://github.com/ProseMirror/prosemirror-example-setup/\n\n// : (NodeType) → InputRule\n// Given a blockquote node type, returns an input rule that turns `\"> \"`\n// at the start of a textblock into a blockquote.\nconst blockQuoteRule = (nodeType: NodeType): InputRule => {\n  return wrappingInputRule(/^\\s*>\\s$/, nodeType);\n};\n\n// : (NodeType) → InputRule\n// Given a list node type, returns an input rule that turns a number\n// followed by a dot at the start of a textblock into an ordered list.\nconst orderedListRule = (nodeType: NodeType): InputRule => {\n  return wrappingInputRule(\n    /^(?:\\d+)\\.\\s$/,\n    nodeType,\n    (match) => ({ order: Number(match[1]) }),\n    (match, node) => node.childCount + node.attrs['order'] === Number(match[1]),\n  );\n};\n\n// : (NodeType) → InputRule\n// Given a list node type, returns an input rule that turns a bullet\n// (dash, plush, or asterisk) at the start of a textblock into a\n// bullet list.\nconst bulletListRule = (nodeType: NodeType): InputRule => {\n  return wrappingInputRule(/^\\s*(?:[-+*])\\s$/, nodeType);\n};\n\n// : (NodeType) → InputRule\n// Given a code block node type, returns an input rule that turns a\n// textblock starting with three backticks into a code block.\nconst codeBlockRule = (nodeType: NodeType): InputRule => {\n  return textblockTypeInputRule(/^```$/, nodeType);\n};\n\n// : (NodeType, number) → InputRule\n// Given a node type and a maximum level, creates an input rule that\n// turns up to that number of `#` characters followed by a space at\n// the start of a textblock into a heading whose level corresponds to\n// the number of `#` signs.\nconst headingRule = (nodeType: NodeType, maxLevel: number): InputRule => {\n  return textblockTypeInputRule(\n    new RegExp(`^(#{1,${maxLevel}})\\\\s$`),\n    nodeType,\n    (match) => ({ level: match[1].length }),\n  );\n};\n\n// : (MarkType) → InputRule\n// Wraps matching text with bold mark\nconst boldRule = (markType: MarkType): InputRule => {\n  // eslint-disable-next-line prefer-named-capture-group\n  return markInputRule(/(?:^|\\s)(?:(\\*\\*|__)(?:([^*_]+))(\\*\\*|__))$/, markType);\n};\n\n// : (MarkType) → InputRule\n// Wraps matching text with em mark\nconst emRule = (markType: MarkType): InputRule => {\n  // eslint-disable-next-line prefer-named-capture-group\n  return markInputRule(/(?:^|\\s)(?:(\\*|_)(?:([^*_]+))(\\*|_))$/, markType);\n};\n\n// : (Schema) → Plugin\n// A set of input rules for creating the basic block quotes, lists,\n// code blocks, and heading.\nconst buildInputRules = (schema: Schema): Plugin => {\n  const rules = smartQuotes.concat(ellipsis, emDash);\n\n  rules.push(boldRule(schema.marks['strong']));\n  rules.push(emRule(schema.marks['em']));\n  rules.push(blockQuoteRule(schema.nodes['blockquote']));\n  rules.push(orderedListRule(schema.nodes['ordered_list']));\n  rules.push(bulletListRule(schema.nodes['bullet_list']));\n  rules.push(codeBlockRule(schema.nodes['code_block']));\n  rules.push(headingRule(schema.nodes['heading'], 6));\n\n  return inputRules({ rules });\n};\n\nexport const getKeyboardShortcuts = (schema: Schema, options: ShortcutOptions) => {\n  const historyKeyMap: Record<string, Command> = {};\n\n  historyKeyMap['Mod-z'] = undo;\n  if (isMacOs) {\n    historyKeyMap['Shift-Mod-z'] = redo;\n  } else {\n    historyKeyMap['Mod-y'] = redo;\n  }\n\n  const plugins = [\n    keymap({\n      'Mod-b': toggleMark(schema.marks['strong']),\n      'Mod-i': toggleMark(schema.marks['em']),\n      'Mod-u': toggleMark(schema.marks['u']),\n      'Mod-`': toggleMark(schema.marks['code']),\n    }),\n    keymap({\n      'Enter': splitListItem(schema.nodes['list_item']),\n      'Shift-Enter': chainCommands(exitCode, (state, dispatch) => {\n        const { tr } = state;\n        const br = schema.nodes['hard_break'];\n        dispatch(tr.replaceSelectionWith(br.create()).scrollIntoView());\n        return true;\n      }),\n      'Mod-[': liftListItem(schema.nodes['list_item']),\n      'Mod-]': sinkListItem(schema.nodes['list_item']),\n      'Tab': sinkListItem(schema.nodes['list_item']),\n    }),\n    keymap(baseKeymap),\n  ];\n\n  if (options.history) {\n    plugins.push(keymap(historyKeyMap));\n  }\n\n  return plugins;\n};\n\nconst getDefaultPlugins = (schema: Schema, options: Options): Plugin[] => {\n  const plugins: Plugin[] = [];\n\n  if (options.keyboardShortcuts) {\n    plugins.push(...getKeyboardShortcuts(schema, { history: options.history }));\n  }\n\n  if (options.history) {\n    plugins.push(history());\n  }\n\n  if (options.inputRules) {\n    plugins.push(buildInputRules(schema));\n  }\n\n  return plugins;\n};\n\nexport default getDefaultPlugins;\n","import { ParseOptions, Schema } from 'prosemirror-model';\nimport { EditorState, Plugin, Transaction } from 'prosemirror-state';\nimport { EditorProps, EditorView } from 'prosemirror-view';\nimport { Observable, Subject } from 'rxjs';\n\nimport { isNil } from 'ngx-editor/utils';\n\nimport EditorCommands from './EditorCommands';\nimport defautlSchema from './schema';\nimport { parseContent } from './parsers';\nimport getDefaultPlugins from './defaultPlugins';\nimport { HTML } from './trustedTypesUtil';\n\ntype JSONDoc = Record<string, unknown>;\ntype Content = HTML | null | JSONDoc;\n\ninterface Options {\n  content?: Content;\n  history?: boolean;\n  keyboardShortcuts?: boolean;\n  inputRules?: boolean;\n  schema?: Schema;\n  plugins?: Plugin[];\n  nodeViews?: EditorProps['nodeViews'];\n  attributes?: EditorProps['attributes'];\n  features?: EditorFeatures;\n  handleScrollToSelection?: EditorProps['handleScrollToSelection'];\n  linkValidationPattern?: string;\n  parseOptions?:ParseOptions;\n}\n\ninterface EditorFeatures {\n  linkOnPaste?: boolean;\n  resizeImage?: boolean;\n}\n\nconst defaultFeatures = {\n  linkOnPaste: true,\n  resizeImage: true,\n};\n\nconst DEFAULT_OPTIONS: Options = {\n  content: null,\n  history: true,\n  keyboardShortcuts: true,\n  inputRules: true,\n  schema: defautlSchema,\n  plugins: [],\n  nodeViews: {},\n  attributes: {},\n  features: defaultFeatures,\n  handleScrollToSelection: null,\n  linkValidationPattern: '(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/??([^#\\n\\r]*)?#?([^\\n\\r]*)|(mailto:.*[@].*)',\n};\n\nclass Editor {\n  private options: Options;\n  view: EditorView;\n\n  constructor(options: Options = DEFAULT_OPTIONS) {\n    this.options = { ...DEFAULT_OPTIONS, ...options };\n    this.createEditor();\n  }\n\n  private valueChangesSubject = new Subject<JSONDoc>();\n  private updateSubject = new Subject<EditorView>();\n\n  get valueChanges(): Observable<JSONDoc> {\n    return this.valueChangesSubject.asObservable();\n  }\n\n  get update(): Observable<EditorView> {\n    return this.updateSubject.asObservable();\n  }\n\n  get schema(): Schema {\n    return this.options.schema || defautlSchema;\n  }\n\n  get linkValidationPattern(): string {\n    return this.options.linkValidationPattern;\n  }\n\n  get commands(): EditorCommands {\n    return new EditorCommands(this.view);\n  }\n\n  get features(): EditorFeatures {\n    return { ...defaultFeatures, ...this.options.features };\n  }\n\n  private handleTransactions(tr: Transaction): void {\n    const state = this.view.state.apply(tr);\n    this.view.updateState(state);\n\n    this.updateSubject.next(this.view);\n\n    if (!tr.docChanged && !tr.getMeta('FORCE_EMIT')) {\n      return;\n    }\n\n    const json = state.doc.toJSON();\n    this.valueChangesSubject.next(json);\n  }\n\n  private createEditor(): void {\n    const { options, schema } = this;\n    const { content = null, nodeViews } = options;\n    const { history = true, keyboardShortcuts = true, inputRules = true } = options;\n\n    const doc = parseContent(content, schema, options.parseOptions);\n\n    const plugins: Plugin[] = options.plugins ?? [];\n    const attributes: EditorProps['attributes'] = options.attributes ?? {};\n\n    const defaultPlugins = getDefaultPlugins(schema, {\n      history,\n      keyboardShortcuts,\n      inputRules,\n    });\n\n    this.view = new EditorView(null, {\n      state: EditorState.create({\n        doc,\n        schema,\n        plugins: [...defaultPlugins, ...plugins],\n      }),\n      nodeViews,\n      dispatchTransaction: this.handleTransactions.bind(this),\n      attributes,\n      handleScrollToSelection: options.handleScrollToSelection,\n    });\n  }\n\n  setContent(content: Content): void {\n    if (isNil(content)) {\n      return;\n    }\n\n    const { state } = this.view;\n    const { tr, doc } = state;\n\n    const newDoc = parseContent(content, this.schema, this.options.parseOptions);\n\n    tr.replaceWith(0, state.doc.content.size, newDoc);\n\n    // don't emit if both content is same\n    if (doc.eq(tr.doc)) {\n      return;\n    }\n\n    if (!tr.docChanged) {\n      return;\n    }\n\n    this.view.dispatch(tr);\n  }\n\n  registerPlugin(plugin: Plugin): void {\n    const { state } = this.view;\n    const plugins = [...state.plugins, plugin];\n\n    const newState = state.reconfigure({ plugins });\n    this.view.updateState(newState);\n  }\n\n  destroy(): void {\n    this.view.destroy();\n  }\n}\n\nexport default Editor;\n","/*\n * Public API Surface of ngx-editor\n */\n\nexport * from './lib/editor.component';\nexport * from './lib/modules/menu/menu.component';\nexport * from './lib/modules/menu/floating-menu/floating-menu.component';\nexport * from './lib/editor.module';\nexport * from './lib/editor.service';\n\nexport * from './lib/schema';\nexport * from './lib/validators';\n\nexport * from './lib/types';\nexport * from './lib/parsers';\nexport { default as Editor } from './lib/Editor';\nexport * from './lib/defaultPlugins';\n\n// other exports for convenience\nexport { ImageViewComponent } from './lib/components/image-view/image-view.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["schema","defaultSchema","i1","plugins.editable","plugins.placeholder","plugins.attributes","plugins.focus","plugins.blur","plugins.imageResize","plugins.linkify","undo","redo","Blockquote","Link","Image","TextColor","Commands.STRONG","Commands.EM","Commands.CODE","Commands.UNDERLINE","Commands.STRIKE","Commands.BLOCKQUOTE","Commands.UL","Commands.OL","Commands.H1","Commands.H2","Commands.H3","Commands.H4","Commands.H5","Commands.H6","Commands.ALIGN_LEFT","Commands.ALIGN_CENTER","Commands.ALIGN_RIGHT","Commands.ALIGN_JUSTIFY","Commands.SUPERSCRIPT","Commands.SUBSCRIPT","Commands.HORIZONTAL_RULE","Commands.FORMAT_CLEAR","Commands.INDENT","Commands.OUTDENT","Commands.UNDO","Commands.REDO","Commands.LINK","Commands.IMAGE","Commands.TEXT_COLOR","Commands.TEXT_BACKGROUND_COLOR","i1.NgxEditorServiceConfig","i1.MenuService","i2.NgxEditorService","i1.NgxEditorService","i2.MenuService","Validators","ImageCommand","i3","i4","LinkCommand","i2","i1.SanitizeHtmlPipe","defaultLocals","MarkCommand","ListCommand","HeadingCommand","TextColorCommand","TextAlignCommand","IndentCommand","defautlSchema"],"mappings":"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"}