{"version":3,"file":"ngx-editor.mjs","sources":["../../../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/parsers.ts","../../../projects/ngx-editor/src/lib/editor.component.ts","../../../projects/ngx-editor/src/lib/editor.component.html","../../../projects/ngx-editor/src/lib/modules/menu/menu.service.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/index.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/index.ts","../../../projects/ngx-editor/src/lib/modules/menu/MenuCommands.ts","../../../projects/ngx-editor/src/lib/Locals.ts","../../../projects/ngx-editor/src/lib/editor-config.service.ts","../../../projects/ngx-editor/src/lib/editor.service.ts","../../../projects/ngx-editor/src/lib/pipes/sanitize/sanitize-html.pipe.ts","../../../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/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/image/image.component.ts","../../../projects/ngx-editor/src/lib/modules/menu/image/image.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/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/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":["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 {\n  Component, ElementRef, EventEmitter,\n  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})\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, ComponentFactoryResolver, ComponentRef, 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    const componentFactoryResolver = injector.get(ComponentFactoryResolver);\n    this.applicationRef = injector.get(ApplicationRef);\n\n    // Create the component and wire it up with the element\n    const factory = componentFactoryResolver.resolveComponentFactory(ImageViewComponent);\n\n    this.imageComponentRef = factory.create(injector, []);\n    // Attach to the view so that the change detector knows to run\n    this.applicationRef.attachView(this.imageComponentRef.hostView);\n\n    // Possible alternate for deprecated ComponentFactoryResolver\n    // const viewContainerRef = injector.get(ViewContainerRef);\n    // this.imageComponentRef = viewContainerRef.createComponent(ImageViewComponent, { injector });\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, any>, newAttrs: Record<string, any>): boolean {\n    return JSON.stringify(prevAttrs) === JSON.stringify(newAttrs);\n  }\n\n  private setNodeAttributes(attrs: Record<string, any>): 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 { DOMSerializer, Schema, DOMParser, Node as ProseMirrorNode } from 'prosemirror-model';\n\nimport defaultSchema from './schema';\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, any>, 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: string, inputSchema?: Schema): Record<string, any> => {\n  const schema = inputSchema ?? defaultSchema;\n\n  const el = document.createElement('div');\n  el.innerHTML = html;\n\n  return DOMParser.fromSchema(schema).parse(el).toJSON();\n};\n\nexport const parseContent = (value: string | Record<string, any> | null, schema: Schema): ProseMirrorNode => {\n  if (!value) {\n    return schema.nodeFromJSON(emptyDoc);\n  }\n\n  if (typeof value !== 'string') {\n    return schema.nodeFromJSON(value);\n  }\n\n  const docJson = toDoc(value, schema);\n  return schema.nodeFromJSON(docJson);\n};\n","import {\n  Component, ViewChild, ElementRef, forwardRef,\n  OnDestroy, ViewEncapsulation, OnInit, Output,\n  EventEmitter, Input, Renderer2, SimpleChanges,\n  OnChanges, Injector,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR, ControlValueAccessor } from '@angular/forms';\nimport { Subject, takeUntil } from 'rxjs';\n\nimport { NgxEditorError } from 'ngx-editor/utils';\nimport * as plugins from './plugins';\nimport { toHTML } from './parsers';\nimport Editor from './Editor';\n\n@Component({\n  selector: 'ngx-editor',\n  templateUrl: './editor.component.html',\n  styleUrls: ['./editor.component.scss'],\n  providers: [{\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => NgxEditorComponent),\n    multi: true,\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: Subject<void> = new Subject();\n  private onChange: (value: Record<string, any> | string) => void = () => { /** */ };\n  private onTouched: () => void = () => { /** */ };\n\n  writeValue(value: Record<string, any> | string | null): void {\n    if (!this.outputFormat && typeof value === 'string') {\n      this.outputFormat = 'html';\n    }\n\n    this.editor.setContent(value ?? '');\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, any>): 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: any): 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({\n      class: 'NgxEditor__Content',\n    }));\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\n      .pipe(takeUntil(this.unsubscribe))\n      .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 { 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<any>> = new Subject<TemplateRef<any>>();\n\n  setCustomMenuRef(c: TemplateRef<any>): void {\n    this.customMenuRefChange.next(c);\n  }\n}\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","// 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';\n\nconst DEFAULT_ICON_HEIGHT = 20;\nconst DEFAULT_ICON_WIDTH = 20;\nconst DEFAULT_ICON_FILL = 'currentColor';\n\nconst icons: Record<string, any> = {\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};\n\nclass Icon {\n  static get(name: keyof typeof icons, fill = DEFAULT_ICON_FILL): string {\n    const path = icons[name] || '<path></path>';\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        ${path}\n      </svg>\n    `;\n  }\n}\n\nexport default Icon;\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\nclass Mark {\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\nclass Blockqote {\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\nclass HorizontalRule {\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\nclass ListItem {\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\nexport type HeadingLevels = 1 | 2 | 3 | 4 | 5 | 6;\n\nclass Heading {\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\nexport type Align = 'left' | 'center' | 'right' | 'justify';\n\nclass TextAlign {\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          tr.setNodeMarkup(pos, nodeType, { ...node.attrs, align: this.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 {\n  color: string;\n}\n\ninterface BackgroundColorAttrs {\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 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';\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 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');\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};\n\nexport const InsertCommands: Record<string, InsertCommand> = {\n  horizontal_rule: Commands.HORIZONTAL_RULE,\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","export const defaults: Record<string, 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  insertLink: 'Insert Link',\n  removeLink: 'Remove Link',\n  insertImage: 'Insert Image',\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};\n\nexport type LocalsKeys = keyof typeof defaults;\n\nclass Locals {\n  locals = defaults;\n\n  constructor(newLocals: Partial<Record<LocalsKeys, string>> = {}) {\n    this.locals = { ...defaults, ...newLocals };\n  }\n\n  get = (key: string):string => {\n    return this.locals[key] ?? '';\n  };\n}\n\nexport default Locals;\n","import { Injectable } from '@angular/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class NgxEditorServiceConfig {\n  public locals = {};\n}\n","import { Injectable, Optional } from '@angular/core';\n\nimport { NgxEditorConfig } from './types';\nimport Locals from './Locals';\nimport { NgxEditorServiceConfig } from './editor-config.service';\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\nexport const provideMyServiceOptions = (config?: NgxEditorConfig): NgxEditorServiceConfig => {\n  return {\n    locals: config.locals ?? {},\n  };\n};\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n  name: 'sanitizeHtml',\n})\n\nexport class SanitizeHtmlPipe implements PipeTransform {\n  constructor(private sanitizer: DomSanitizer) { }\n\n  transform(value: string): SafeHtml {\n    return this.sanitizer.bypassSecurityTrustHtml(value);\n  }\n}\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport Icon from '../../../icons';\nimport { ToggleCommands } from '../MenuCommands';\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport { TBItems, ToolbarItem } from '../../../types';\n\n@Component({\n  selector: 'ngx-toggle-command',\n  templateUrl: './toggle-command.component.html',\n  styleUrls: ['./toggle-command.component.scss'],\n})\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: string;\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(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    const { state, dispatch } = this.editorView;\n    const command = ToggleCommands[this.name];\n    command.toggle()(state, dispatch);\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): string {\n    return this.ngxeService.locals.get(name);\n  }\n\n  ngOnInit(): void {\n    this.html = Icon.get(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","<div class=\"NgxEditor__MenuItem--IconContainer\" [class.NgxEditor__MenuItem--Active]=\"isActive\"\n  [class.NgxEditor--Disabled]=\"disabled\" [innerHTML]=\"html | sanitizeHtml\" (mousedown)=\"toggle($event)\"\n  [title]=\"getTitle(name)\">\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport Icon from '../../../icons';\nimport { InsertCommands } from '../MenuCommands';\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport { TBItems, ToolbarItem } from '../../../types';\n\n@Component({\n  selector: 'ngx-insert-command',\n  templateUrl: './insert-command.component.html',\n  styleUrls: ['./insert-command.component.scss'],\n})\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: string;\n  editorView: EditorView;\n  disabled = false;\n  private updateSubscription: Subscription;\n\n  constructor(\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService,\n  ) { }\n\n  insert(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\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): string {\n    return this.ngxeService.locals.get(name);\n  }\n\n  ngOnInit(): void {\n    this.html = Icon.get(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","<div class=\"NgxEditor__MenuItem--IconContainer\" [class.NgxEditor--Disabled]=\"disabled\" [innerHTML]=\"html | sanitizeHtml\"\n  (mousedown)=\"insert($event)\" [title]=\"getTitle(name)\">\n</div>\n","import {\n  Component, ElementRef,\n  HostListener, OnDestroy, OnInit,\n} from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport Icon from '../../../icons';\nimport { Link as LinkCommand } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-link',\n  templateUrl: './link.component.html',\n  styleUrls: ['./link.component.scss'],\n})\n\nexport class LinkComponent implements OnInit, OnDestroy {\n  showPopup = false;\n  isActive = false;\n  canExecute = true;\n\n  private editorView: EditorView;\n  private updateSubscription: Subscription;\n\n  form = new FormGroup({\n    href: new FormControl('', [\n      Validators.required,\n      Validators.pattern('(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/??([^#\\n\\r]*)?#?([^\\n\\r]*)'),\n    ]),\n    text: new FormControl('', [Validators.required]),\n    openInNewTab: new FormControl(true),\n  });\n\n  constructor(\n    private el: ElementRef,\n    private ngxeService: NgxEditorService,\n    private menuService: MenuService,\n  ) { }\n\n  get icon(): string {\n    return Icon.get(this.isActive ? 'unlink' : 'link');\n  }\n\n  get title(): 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.hideForm();\n    }\n  }\n\n  getLabel(key: string): string {\n    return this.ngxeService.locals.get(key);\n  }\n\n  private hideForm(): void {\n    this.showPopup = false;\n    this.form.reset({\n      href: '',\n      text: '',\n      openInNewTab: true,\n    });\n    this.text.enable();\n  }\n\n  onMouseDown(e: MouseEvent): void {\n    if (e.button !== 0) {\n      return;\n    }\n\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  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    const attrs = {\n      title: href,\n      href,\n      target: openInNewTab ? '_blank' : '_self',\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.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","<div class=\"NgxEditor__MenuItem--IconContainer\" [class.NgxEditor__MenuItem--Active]=\"isActive || showPopup\"\n  [class.NgxEditor--Disabled]=\"!canExecute\" [innerHTML]=\"icon | sanitizeHtml\" (mousedown)=\"onMouseDown($event)\"\n  [title]=\"title\">\n</div>\n\n<!-- popup -->\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <form class=\"NgxEditor__Popup--Form\" [formGroup]=\"form\" (ngSubmit)=\"insertLink($event)\">\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\">{{getLabel('url')}}</label>\n        <input type=\"href\" id=\"href\" formControlName=\"href\" autofocus autocomplete=\"off\" />\n        <div *ngIf=\"href.touched && href.invalid\" class=\"NgxEditor__HelpText NgxEditor__HelpText--Error\">\n          {{ href.errors?.['pattern'] && 'Please enter valid url.' }}\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\">{{getLabel('text')}}</label>\n        <input type=\"text\" 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\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label>\n          <input type=\"checkbox\" formControlName=\"openInNewTab\" />\n          {{getLabel('openInNewTab')}}\n        </label>\n      </div>\n    </div>\n\n    <button type=\"submit\" [disabled]=\"!form.valid\">{{getLabel('insert')}}</button>\n\n  </form>\n</div>\n","import {\n  Component, ElementRef,\n  HostListener, OnDestroy, OnInit,\n} from '@angular/core';\nimport { AbstractControl, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { NodeSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport Icon from '../../../icons';\nimport { Image as ImageCommand } from '../MenuCommands';\n\n@Component({\n  selector: 'ngx-image',\n  templateUrl: './image.component.html',\n  styleUrls: ['./image.component.scss'],\n})\nexport class ImageComponent implements OnInit, OnDestroy {\n  showPopup = false;\n  isActive = false;\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(): string {\n    return Icon.get('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  getLabel(key: string): 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  onMouseDown(e: MouseEvent): void {\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.showPopup = !this.showPopup;\n\n    if (this.showPopup) {\n      this.fillForm();\n    }\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","<div class=\"NgxEditor__MenuItem--IconContainer\" [class.NgxEditor__MenuItem--Active]=\"isActive || showPopup\"\n  [innerHTML]=\"icon | sanitizeHtml\" (mousedown)=\"onMouseDown($event)\" [title]=\"getLabel('insertImage')\">\n</div>\n\n<!-- popup -->\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <form class=\"NgxEditor__Popup--Form\" [formGroup]=\"form\" (ngSubmit)=\"insertLink($event)\">\n\n    <div class=\"NgxEditor__Popup--FormGroup\">\n      <div class=\"NgxEditor__Popup--Col\">\n        <label class=\"NgxEditor__Popup--Label\">{{getLabel('url')}}</label>\n        <input type=\"href\" id=\"href\" formControlName=\"src\" autofocus autocomplete=\"off\" />\n        <div *ngIf=\"src.touched && src.invalid\" class=\"NgxEditor__HelpText NgxEditor__HelpText--Error\">\n          {{ src.errors?.['pattern'] && 'Please enter valid url.' }}\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\">{{getLabel('altText')}}</label>\n        <input type=\"text\" 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\">{{getLabel('title')}}</label>\n        <input type=\"text\" formControlName=\"title\" autocomplete=\"off\" />\n      </div>\n    </div>\n\n    <button type=\"submit\" [disabled]=\"!form.valid || !form.dirty\">{{getLabel('insert')}}</button>\n\n  </form>\n</div>\n","import {\n  Component, ElementRef,\n  HostListener, Input, OnDestroy, OnInit,\n} from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport { ToggleCommands } from '../MenuCommands';\nimport { TBHeadingItems } from '../../../types';\n\n@Component({\n  selector: 'ngx-dropdown',\n  templateUrl: './dropdown.component.html',\n  styleUrls: ['./dropdown.component.scss'],\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): string {\n    return this.ngxeService.locals.get(key);\n  }\n\n  toggleDropdown(e: MouseEvent): void {\n    e.preventDefault();\n    this.isDropdownOpen = !this.isDropdownOpen;\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  onClick(e: MouseEvent, item: TBHeadingItems): void {\n    e.preventDefault();\n\n    // consider only left click\n    if (e.button !== 0) {\n      return;\n    }\n\n    const command = ToggleCommands[item];\n    const { state, dispatch } = this.editorView;\n    command.toggle()(state, dispatch);\n    this.isDropdownOpen = false;\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","<div class=\"NgxEditor__Dropdown--Text\" [class.NgxEditor__Dropdown--Selected]=\"isSelected\"\n  [class.NgxEditor--Disabled]=\"isDropdownDisabled\" (mousedown)=\"toggleDropdown($event)\">\n  {{getName(activeItem || group)}}\n</div>\n\n<div class=\"NgxEditor__Dropdown--DropdownMenu\" *ngIf=\"isDropdownOpen\">\n  <div class=\"NgxEditor__Dropdown--Item\" *ngFor=\"let item of items; trackBy: trackByIndex\"\n    (mousedown)=\"onClick($event, item)\"\n    [ngClass]=\"{'NgxEditor__Dropdown--Active': item === activeItem, 'NgxEditor--Disabled':disabledItems.includes(item)}\">\n    {{getName(item)}}\n  </div>\n</div>\n","import {\n  Component, ElementRef,\n  HostListener, OnDestroy, Input, OnInit,\n} from '@angular/core';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport Icon from '../../../icons';\nimport { NgxEditorService } from '../../../editor.service';\nimport { MenuService } from '../menu.service';\nimport { TextColor, TextBackgroundColor } 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})\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(): string {\n    return this.getLabel(this.type === 'text_color' ? 'text_color' : 'background_color');\n  }\n\n  get icon(): string {\n    return Icon.get(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(e: MouseEvent): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\n    this.showPopup = !this.showPopup;\n  }\n\n  remove(e: MouseEvent): void {\n    e.preventDefault();\n    const { state, dispatch } = this.editorView;\n\n    this.command.remove()(state, dispatch);\n    this.hidePopup();\n  }\n\n  trackByIndex(index: number): number {\n    return index;\n  }\n\n  onColorSelect(e: MouseEvent, color: string): void {\n    e.preventDefault();\n\n    if (e.button !== 0) {\n      return;\n    }\n\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  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): 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","<div class=\"NgxEditor__MenuItem--IconContainer\" [class.NgxEditor__MenuItem--Active]=\"isActive || showPopup\"\n  [class.NgxEditor--Disabled]=\"!canExecute\" [innerHTML]=\"icon | sanitizeHtml\" (mousedown)=\"togglePopup($event)\"\n  [title]=\"title\">\n</div>\n\n<div *ngIf=\"showPopup\" class=\"NgxEditor__Popup\">\n  <div *ngFor=\"let colorGroup of presets; trackBy: trackByIndex\" class=\"NgxEditor__ColorContainer\">\n    <button class=\"NgxEditor__Color\" *ngFor=\"let color of colorGroup; trackBy: trackByIndex\"\n      [ngStyle]=\"{backgroundColor: color, color:getContrastYIQ(color)}\" [title]=\"color\"\n      (mousedown)=\"onColorSelect($event, color)\"\n      [ngClass]=\"{'NgxEditor__Color--Active': activeColors.includes(color)}\"></button>\n  </div>\n\n  <button class=\"NgxEditor__MenuItem--Button\" (mousedown)=\"remove($event)\" [disabled]=\"!isActive\">\n    {{getLabel('remove')}}\n  </button>\n</div>\n","import {\n  Component, Input,\n  OnInit, TemplateRef,\n} from '@angular/core';\n\nimport { NgxEditorError } from 'ngx-editor/utils';\nimport { Toolbar, ToolbarItem, ToolbarDropdown } from '../../types';\nimport { MenuService } from './menu.service';\nimport Editor from '../../Editor';\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];\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'],\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})\n\nexport class MenuComponent 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<any> | 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  ];\n\n  insertCommands: ToolbarItem[] = [\n    'horizontal_rule',\n  ];\n\n  iconContainerClass = ['NgxEditor__MenuItem', 'NgxEditor__MenuItem--Icon'];\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  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 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\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      <ngx-link [class]=\"iconContainerClass\" *ngIf=\"item === 'link'\"></ngx-link>\n\n      <!-- image -->\n      <ngx-image [class]=\"iconContainerClass\" *ngIf=\"item === 'image'\">\n      </ngx-image>\n\n      <!-- dropdown -->\n      <ng-container *ngIf=\"isDropDown(item)\">\n        <ngx-dropdown *ngFor=\"let dropdownItem of getDropdownItems(item) | keyvalue; trackBy: trackByIndex\"\n          [class]=\"dropdownContainerClass\" [group]=\"dropdownItem.key\" [items]=\"dropdownItem.value\">\n        </ngx-dropdown>\n      </ng-container>\n\n      <!-- text color picker -->\n      <ngx-color-picker [class]=\"iconContainerClass\" *ngIf=\"item === 'text_color'\" type=\"text_color\"\n        [presets]=\"presets\">\n      </ngx-color-picker>\n      <!-- background color picker -->\n      <ngx-color-picker [class]=\"iconContainerClass\" *ngIf=\"item === 'background_color'\" type=\"background_color\"\n        [presets]=\"presets\">\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\n</div>\n","import { Component, Input, OnDestroy, OnInit } from '@angular/core';\nimport { SafeHtml } from '@angular/platform-browser';\nimport { EditorView } from 'prosemirror-view';\nimport { Subscription } from 'rxjs';\n\nimport Editor from '../../../Editor';\nimport Icon from '../../../icons';\nimport { TBItems } from '../../../types';\nimport { SanitizeHtmlPipe } from '../../../pipes/sanitize/sanitize-html.pipe';\nimport { ToggleCommands } from '../MenuCommands';\nimport { NgxEditorService } from '../../../editor.service';\n\n@Component({\n  selector: 'ngx-bubble',\n  templateUrl: './bubble.component.html',\n  styleUrls: ['./bubble.component.scss'],\n})\nexport class BubbleComponent implements OnInit, OnDestroy {\n  constructor(private sanitizeHTML: SanitizeHtmlPipe, private ngxeService: NgxEditorService) { }\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    const icon = Icon.get(name);\n    return this.sanitizeHTML.transform(icon);\n  }\n\n  getTitle(name: string): 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\n      .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    <div class=\"NgxBubbleMenu__Icon\" [ngClass]=\"{'NgxBubbleMenu__Icon--Active': this.activeItems.includes(item),\n  'NgxEditor--Disabled': !this.execulableItems.includes(item)}\" (mousedown)=\"onClick($event, item)\"\n      *ngIf=\"toggleCommands.includes(item)\" [title]=\"getTitle(item)\" [innerHTML]=\"getIcon(item)\">\n    </div>\n    <div class=\"NgxBubbleMenu__Seperator\" *ngIf=\"lastItem && !lastToolbarItem\"></div>\n  </ng-container>\n</ng-container>\n","import {\n  Component, ElementRef, HostBinding,\n  HostListener, Input, OnDestroy, OnInit,\n} from '@angular/core';\nimport { NodeSelection } from 'prosemirror-state';\nimport { EditorView } from 'prosemirror-view';\nimport { asyncScheduler, fromEvent, Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\nimport type { VirtualElement } from '@floating-ui/core';\nimport { computePosition, detectOverflow, offset, autoPlacement } from '@floating-ui/dom';\n\nimport { NgxEditorError } from 'ngx-editor/utils';\nimport Editor from '../../../Editor';\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})\nexport class FloatingMenuComponent 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 { state: { selection } } = 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 && 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\n      .subscribe((view) => {\n        this.update(view);\n      });\n\n    this.resizeSubscription = fromEvent(window, 'resize').pipe(\n      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 { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\nimport { MenuComponent } from './menu.component';\nimport { ToggleCommandComponent } from './toggle-command/toggle-command.component';\nimport { LinkComponent } from './link/link.component';\nimport { DropdownComponent } from './dropdown/dropdown.component';\nimport { ImageComponent } from './image/image.component';\nimport { ColorPickerComponent } from './color-picker/color-picker.component';\nimport { FloatingMenuComponent } from './floating-menu/floating-menu.component';\nimport { BubbleComponent } from './bubble/bubble.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  ],\n  declarations: [\n    // pipes\n    SanitizeHtmlPipe,\n\n    // components\n    MenuComponent,\n    ToggleCommandComponent,\n    InsertCommandComponent,\n    LinkComponent,\n    DropdownComponent,\n    ImageComponent,\n    ColorPickerComponent,\n\n    FloatingMenuComponent,\n    BubbleComponent,\n  ],\n  providers: [\n    SanitizeHtmlPipe,\n  ],\n  exports: [\n    MenuComponent,\n    FloatingMenuComponent,\n  ],\n})\n\nexport class MenuModule { }\n","import { NgModule, ModuleWithProviders, InjectionToken } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { NgxEditorConfig } from './types';\nimport { defaults as defaultLocals } from './Locals';\n\nimport { NgxEditorComponent } from './editor.component';\nimport { NgxEditorServiceConfig } from './editor-config.service';\nimport { NgxEditorService, provideMyServiceOptions } from './editor.service';\nimport { MenuModule } from './modules/menu/menu.module';\n\nimport { MenuComponent } from './modules/menu/menu.component';\nimport { ImageViewComponent } from './components/image-view/image-view.component';\nimport { FloatingMenuComponent } from './modules/menu/floating-menu/floating-menu.component';\n\nexport const NGX_EDITOR_CONFIG_TOKEN = new InjectionToken<NgxEditorConfig>('NgxEditorConfig');\n\nconst defaultConfig: NgxEditorConfig = {\n  locals: defaultLocals,\n};\n\n@NgModule({\n  imports: [\n    CommonModule,\n    MenuModule,\n  ],\n  providers: [],\n  declarations: [\n    NgxEditorComponent,\n    ImageViewComponent,\n  ],\n  exports: [\n    NgxEditorComponent,\n    MenuComponent,\n    FloatingMenuComponent,\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, any>;\n\nconst isEmptyInputValue = (value: any): 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: any): 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, 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';\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\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(): this {\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  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: string): this {\n    const { selection, schema, tr } = this.state;\n    const { from, to } = selection;\n\n    const element = document.createElement('div');\n    element.innerHTML = html.trim();\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\nexport default EditorCommands;\n","import { MarkType, NodeType, Schema } from 'prosemirror-model';\nimport { 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  return markInputRule(/(?:^|\\s)(?:(?:\\*\\*|__)(?:(?:[^*_]+))(?:\\*\\*|__))$/, markType);\n};\n\n// : (MarkType) → InputRule\n// Wraps matching text with em mark\nconst emRule = (markType: MarkType): InputRule => {\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, any> = {};\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 { 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';\n\ntype JSONDoc = Record<string, any>;\ntype Content = string | 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}\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};\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 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);\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);\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';\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 * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","schema","defaultSchema","plugins.editable","plugins.placeholder","plugins.attributes","plugins.focus","plugins.blur","plugins.imageResize","plugins.linkify","Link","Image","TextColor","Blockquote","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.HORIZONTAL_RULE","Commands.LINK","Commands.IMAGE","Commands.TEXT_COLOR","Commands.TEXT_BACKGROUND_COLOR","i1.NgxEditorServiceConfig","i1.NgxEditorService","i2.MenuService","i3.SanitizeHtmlPipe","Validators","LinkCommand","i5.SanitizeHtmlPipe","ImageCommand","i1.MenuService","i2.NgxEditorService","i4.SanitizeHtmlPipe","i2.ToggleCommandComponent","i3.InsertCommandComponent","i4.LinkComponent","i5.ImageComponent","i6.DropdownComponent","i7.ColorPickerComponent","i8","i1.SanitizeHtmlPipe","i1.BubbleComponent","i2","defaultLocals","MarkCommand","ListCommand","HeadingCommand","TextColorCommand","TextAlignCommand","defautlSchema"],"mappings":"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"}