{"version":3,"file":"asoftwareworld-form-builder-pro-editor.mjs","sources":["../../src/components/editor/editor.service.ts","../../src/components/editor/editor-dialog/editor-dialog.ts","../../src/components/editor/editor-dialog/editor-dialog.html","../../src/components/editor/editor-select/editor-select.ts","../../src/components/editor/editor-select/editor-select.html","../../src/components/editor/editor-toolbar/editor-toolbar.ts","../../src/components/editor/editor-toolbar/editor-toolbar.html","../../src/components/editor/editor.ts","../../src/components/editor/editor.html","../../src/components/editor/editor-button/editor-button.ts","../../src/components/editor/editor-button/editor-button.html","../../src/components/editor/editor-toolbar-set/editor-toolbar-set.ts","../../src/components/editor/editor-toolbar-set/editor-toolbar-set.html","../../src/components/editor/editor.module.ts","../../src/components/editor/public_api.ts","../../src/components/editor/asoftwareworld-form-builder-pro-editor.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { HttpClient, HttpEvent } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { CustomClass, UploadResponse } from '@asoftwareworld/form-builder-pro/api';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class AswEditorService {\n    savedSelection!: Range | null;\n    selectedText!: string;\n    uploadUrl: any;\n    uploadWithCredentials?: boolean;\n\n    constructor(\n        private http: HttpClient,\n        @Inject(DOCUMENT) private doc: any\n    ) {}\n\n    /**\n     * Executed command from editor header buttons exclude toggleEditorMode\n     * @param command string from triggerCommand\n     */\n    executeCommand(command: string, value?: string): void {\n        const commands = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'pre'];\n        if (commands.includes(command)) {\n            this.doc.execCommand('formatBlock', false, command);\n            return;\n        }\n        this.doc.execCommand(command, false, value);\n    }\n\n    /**\n     * Create URL link\n     * @param url string from UI prompt\n     */\n    createLink(url: string): void {\n        if (!url.includes('http')) {\n            this.doc.execCommand('createlink', false, url);\n        } else {\n            const newUrl = `<a href='${url}' target='_blank'> ${this.selectedText} </a>`;\n            this.insertHtml(newUrl);\n        }\n    }\n\n    /**\n     * insert color either font or background\n     *\n     * @param color color to be inserted\n     * @param where where the color has to be inserted either text/background\n     */\n    insertColor(color: string, where: string): void {\n        const restored = this.restoreSelection();\n        if (restored) {\n            if (where === 'textColor') {\n                this.doc.execCommand('foreColor', false, color);\n            } else {\n                this.doc.execCommand('hiliteColor', false, color);\n            }\n        }\n    }\n\n    /**\n     * Set font name\n     * @param fontName string\n     */\n    setFontName(fontName: string): void {\n        this.doc.execCommand('fontName', false, fontName);\n    }\n\n    /**\n     * Set font size\n     * @param fontSize string\n     */\n    setFontSize(fontSize: string): void {\n        this.doc.execCommand('fontSize', false, fontSize);\n    }\n\n    /**\n     * Create raw HTML\n     * @param html HTML string\n     */\n    insertHtml(html: string): void {\n        const isHTMLInserted = this.doc.execCommand('insertHTML', false, html);\n\n        if (!isHTMLInserted) {\n            throw new Error('Unable to perform the operation');\n        }\n    }\n\n    /**\n     * save selection when the editor is focussed out\n     */\n    public saveSelection = (): void => {\n        if (this.doc.getSelection) {\n            const sel = this.doc.getSelection();\n            if (sel.getRangeAt && sel.rangeCount) {\n                this.savedSelection = sel.getRangeAt(0);\n                this.selectedText = sel.toString();\n            }\n        } else if (this.doc.getSelection && this.doc.createRange) {\n            this.savedSelection = document.createRange();\n        } else {\n            this.savedSelection = null;\n        }\n    };\n\n    /**\n     * restore selection when the editor is focused in\n     *\n     * saved selection when the editor is focused out\n     */\n    restoreSelection(): boolean {\n        if (this.savedSelection) {\n            if (this.doc.getSelection) {\n                const sel = this.doc.getSelection();\n                sel.removeAllRanges();\n                sel.addRange(this.savedSelection);\n                return true;\n            } else if (this.doc.getSelection /*&& this.savedSelection.select*/) {\n                // this.savedSelection.select();\n                return true;\n            } else {\n                return false;\n            }\n        } else {\n            return false;\n        }\n    }\n\n    /**\n     * setTimeout used for execute 'saveSelection' method in next event loop iteration\n     */\n    public executeInNextQueueIteration(callbackFn: (...args: any[]) => any, timeout = 1e2): void {\n        setTimeout(callbackFn, timeout);\n    }\n\n    /** check any selection is made or not */\n    private checkSelection(): any {\n        const selectedText = this.savedSelection?.toString();\n\n        if (selectedText?.length === 0) {\n            throw new Error('No Selection Made');\n        }\n        return true;\n    }\n\n    /**\n     * Upload file to uploadUrl\n     * @param file The file\n     */\n    uploadImage(file: File): Observable<HttpEvent<UploadResponse>> | any {\n        const uploadData: FormData = new FormData();\n\n        uploadData.append('file', file, file.name);\n\n        return this.http.post<UploadResponse>(this.uploadUrl, uploadData, {\n            reportProgress: true,\n            observe: 'events',\n            withCredentials: this.uploadWithCredentials\n        });\n    }\n\n    /**\n     * Insert image with Url\n     * @param imageUrl The imageUrl.\n     */\n    insertImage(imageUrl: string): void {\n        this.doc.execCommand('insertImage', false, imageUrl);\n    }\n\n    setDefaultParagraphSeparator(separator: string): void {\n        this.doc.execCommand('defaultParagraphSeparator', false, separator);\n    }\n\n    createCustomClass(customClass: CustomClass): void {\n        let newTag = this.selectedText;\n        if (customClass) {\n            const tagName = customClass.tag ? customClass.tag : 'span';\n            newTag = '<' + tagName + ' class=\"' + customClass.class + '\">' + this.selectedText + '</' + tagName + '>';\n        }\n        this.insertHtml(newTag);\n    }\n\n    insertVideo(videoUrl: string): void {\n        if (videoUrl.match('www.youtube.com')) {\n            this.insertYouTubeVideoTag(videoUrl);\n        }\n        if (videoUrl.match('vimeo.com')) {\n            this.insertVimeoVideoTag(videoUrl);\n        }\n    }\n\n    private insertYouTubeVideoTag(videoUrl: string): void {\n        const id = videoUrl.split('v=')[1];\n        const imageUrl = `https://img.youtube.com/vi/${id}/0.jpg`;\n        const thumbnail = `\n      <div style='position: relative'>\n        <a href='${videoUrl}' target='_blank'>\n          <img src=\"${imageUrl}\" alt=\"click to watch\"/>\n          <img style='position: absolute; left:200px; top:140px'\n          src=\"https://img.icons8.com/color/96/000000/youtube-play.png\"/>\n        </a>\n      </div>`;\n        this.insertHtml(thumbnail);\n    }\n\n    private insertVimeoVideoTag(videoUrl: string): void {\n        const sub = this.http.get<any>(`https://vimeo.com/api/oembed.json?url=${videoUrl}`).subscribe((data) => {\n            const imageUrl = data.thumbnail_url_with_play_button;\n            const thumbnail = `<div>\n        <a href='${videoUrl}' target='_blank'>\n          <img src=\"${imageUrl}\" alt=\"${data.title}\"/>\n        </a>\n      </div>`;\n            this.insertHtml(thumbnail);\n            sub.unsubscribe();\n        });\n    }\n\n    nextNode(node: any): any {\n        if (node.hasChildNodes()) {\n            return node.firstChild;\n        } else {\n            while (node && !node.nextSibling) {\n                node = node.parentNode;\n            }\n            if (!node) {\n                return null;\n            }\n            return node.nextSibling;\n        }\n    }\n\n    getRangeSelectedNodes(range: any, includePartiallySelectedContainers: any): any[] {\n        let node = range.startContainer;\n        const endNode = range.endContainer;\n        let rangeNodes = [];\n\n        // Special case for a range that is contained within a single node\n        if (node === endNode) {\n            rangeNodes = [node];\n        } else {\n            // Iterate nodes until we hit the end container\n            while (node && node !== endNode) {\n                rangeNodes.push((node = this.nextNode(node)));\n            }\n\n            // Add partially selected nodes at the start of the range\n            node = range.startContainer;\n            while (node && node !== range.commonAncestorContainer) {\n                rangeNodes.unshift(node);\n                node = node.parentNode;\n            }\n        }\n\n        // Add ancestors of the range container, if required\n        if (includePartiallySelectedContainers) {\n            node = range.commonAncestorContainer;\n            while (node) {\n                rangeNodes.push(node);\n                node = node.parentNode;\n            }\n        }\n\n        return rangeNodes;\n    }\n\n    getSelectedNodes(): any[] {\n        const nodes: any[] = [];\n        if (this.doc.getSelection) {\n            const sel = this.doc.getSelection();\n            for (let i = 0, len = sel.rangeCount; i < len; ++i) {\n                nodes.push.apply(nodes, this.getRangeSelectedNodes(sel.getRangeAt(i), true));\n            }\n        }\n        return nodes;\n    }\n\n    replaceWithOwnChildren(el: any): void {\n        const parent = el.parentNode;\n        while (el.hasChildNodes()) {\n            parent.insertBefore(el.firstChild, el);\n        }\n        parent.removeChild(el);\n    }\n\n    removeSelectedElements(tagNames: any): void {\n        const tagNamesArray = tagNames.toLowerCase().split(',');\n        this.getSelectedNodes().forEach((node) => {\n            if (node.nodeType === 1 && tagNamesArray.indexOf(node.tagName.toLowerCase()) > -1) {\n                // Remove the node and replace it with its children\n                this.replaceWithOwnChildren(node);\n            }\n        });\n    }\n}\n","/**\n * @license\n * Copyright ASW (A Software World) All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file\n */\n\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Icons } from '@asoftwareworld/form-builder-pro/common';\n\n@Component({\n    selector: 'asw-editor-dialog',\n    templateUrl: './editor-dialog.html'\n})\nexport class AswEditorDialog implements OnInit {\n    icons = Icons;\n    linkTo!: string;\n    constructor(\n        public dialogRef: MatDialogRef<AswEditorDialog>,\n        @Inject(MAT_DIALOG_DATA) public data: any\n    ) {}\n\n    ngOnInit(): void {\n        this.linkTo = this.data.linkTo;\n    }\n\n    onNoClick(): void {\n        this.dialogRef.close();\n    }\n}\n","<div class=\"asw-dialog-header\">\r\n    <div class=\"asw-edit-row-dialog\">\r\n        <div class=\"asw-dialog-header clearfix\">\r\n            <div class=\"asw-dialog-about\">\r\n                <h1 mat-dialog-title class=\"asw-m-0\">Add Link</h1>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <button mat-icon-button (click)=\"onNoClick()\" aria-label=\"Close dialog\" class=\"asw-mt-2 asw-me-2\">\r\n        <div [innerHTML]=\"icons.close | aswSafeHtml\">add</div>\r\n    </button>\r\n</div>\r\n<mat-divider></mat-divider>\r\n<div mat-dialog-content class=\"mat-typography\">\r\n    <mat-form-field appearance=\"outline\" class=\"asw-width-100\">\r\n        <mat-label>Link to</mat-label>\r\n        <input matInput \r\n            type=\"text\"\r\n            placeholder=\"Link to\"\r\n            matTooltip=\"Link to\"\r\n            #input=\"ngModel\"\r\n            [(ngModel)]=\"linkTo\">\r\n    </mat-form-field>\r\n</div>\r\n<mat-divider></mat-divider>\r\n<div mat-dialog-actions align=\"end\">\r\n    <button id=\"no\"\r\n            type=\"button\"\r\n            class=\"asw-button asw-button-danger asw-mb-1 asw-me-2\"\r\n            (click)=\"onNoClick()\">\r\n        Cancel\r\n    </button>\r\n    <button type=\"button\"\r\n            id=\"yes\"\r\n            class=\"asw-button asw-button-primary asw-mb-1\"\r\n            [mat-dialog-close]=\"linkTo\"\r\n            cdkFocusInitial>\r\n        Ok\r\n    </button>\r\n</div>","import { Component, ElementRef, EventEmitter, forwardRef, HostBinding, HostListener, Input, OnInit, Output, Renderer2, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { isDefined } from '@asoftwareworld/form-builder-pro/utils';\n\nexport interface SelectOption {\n    label: string;\n    value: string;\n}\n\n@Component({\n    selector: 'asw-editor-select',\n    templateUrl: './editor-select.html',\n    styleUrls: ['./editor-select.scss'],\n    encapsulation: ViewEncapsulation.None,\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => AswEditorSelect),\n            multi: true\n        }\n    ]\n})\nexport class AswEditorSelect implements OnInit, ControlValueAccessor {\n    @Input() options: SelectOption[] = [];\n\n    // tslint:disable-next-line:no-input-rename\n    @Input('hidden') isHidden?: boolean;\n\n    selectedOption!: SelectOption;\n    disabled = false;\n    optionId = 0;\n\n    get label(): string {\n        return this.selectedOption && this.selectedOption.hasOwnProperty('label') ? this.selectedOption.label : 'Select';\n    }\n\n    opened = false;\n\n    get value(): string {\n        return this.selectedOption.value;\n    }\n\n    @HostBinding('style.display') hidden = 'inline-block';\n\n    @Output('change') changeEvent = new EventEmitter();\n\n    @ViewChild('labelButton', { static: true }) labelButton!: ElementRef;\n\n    constructor(\n        private elRef: ElementRef,\n        private r: Renderer2\n    ) {}\n\n    ngOnInit(): void {\n        this.selectedOption = this.options[0];\n        if (isDefined(this.isHidden) && this.isHidden) {\n            this.hide();\n        }\n    }\n\n    hide(): void {\n        this.hidden = 'none';\n    }\n\n    optionSelect(option: SelectOption, event: MouseEvent): void {\n        event.stopPropagation();\n        this.setValue(option.value);\n        this.onChange(this.selectedOption.value);\n        this.changeEvent.emit(this.selectedOption.value);\n        this.onTouched();\n        this.opened = false;\n    }\n\n    toggleOpen(event: MouseEvent): void {\n        // event.stopPropagation();\n        if (this.disabled) {\n            return;\n        }\n        this.opened = !this.opened;\n    }\n\n    @HostListener('document:click', ['$event'])\n    onClick($event: MouseEvent): void {\n        if (!this.elRef.nativeElement.contains($event.target)) {\n            this.close();\n        }\n    }\n\n    close(): void {\n        this.opened = false;\n    }\n\n    get isOpen(): boolean {\n        return this.opened;\n    }\n\n    writeValue(value: string): void {\n        if (!value || typeof value !== 'string') {\n            return;\n        }\n        this.setValue(value);\n    }\n\n    setValue(value: string): void {\n        let index = 0;\n        const selectedEl = this.options.find((el, i) => {\n            index = i;\n            return el.value === value;\n        });\n        if (selectedEl) {\n            this.selectedOption = selectedEl;\n            this.optionId = index;\n        }\n    }\n\n    onChange: any = () => {};\n    onTouched: any = () => {};\n\n    registerOnChange(fn: any): void {\n        this.onChange = fn;\n    }\n\n    registerOnTouched(fn: any): void {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(isDisabled: boolean): void {\n        this.labelButton.nativeElement.disabled = isDisabled;\n        const div = this.labelButton.nativeElement;\n        const action = isDisabled ? 'addClass' : 'removeClass';\n        this.r[action](div, 'disabled');\n        this.disabled = isDisabled;\n    }\n\n    @HostListener('keydown', ['$event'])\n    handleKeyDown($event: KeyboardEvent): void {\n        if (!this.opened) {\n            return;\n        }\n        // console.log($event.key);\n        // if (KeyCode[$event.key]) {\n        switch ($event.key) {\n            case 'ArrowDown':\n                this._handleArrowDown();\n                break;\n            case 'ArrowUp':\n                this._handleArrowUp();\n                break;\n            case 'Space':\n                this._handleSpace();\n                break;\n            case 'Enter':\n                this._handleEnter($event);\n                break;\n            case 'Tab':\n                this._handleTab();\n                break;\n            case 'Escape':\n                this.close();\n                $event.preventDefault();\n                break;\n            case 'Backspace':\n                this._handleBackspace();\n                break;\n        }\n        // } else if ($event.key && $event.key.length === 1) {\n        // this._keyPress$.next($event.key.toLocaleLowerCase());\n        // }\n    }\n\n    _handleArrowDown(): void {\n        if (this.optionId < this.options.length - 1) {\n            this.optionId++;\n        }\n    }\n\n    _handleArrowUp(): void {\n        if (this.optionId >= 1) {\n            this.optionId--;\n        }\n    }\n\n    _handleSpace(): void {}\n\n    _handleEnter($event: any): void {\n        this.optionSelect(this.options[this.optionId], $event);\n    }\n\n    _handleTab(): void {}\n\n    _handleBackspace(): void {}\n}\n","<span class=\"asw-font asw-picker\" [ngClass]=\"{'asw-expanded':isOpen}\">\r\n    <button [tabIndex]=\"-1\" #labelButton tabindex=\"0\" type=\"button\" role=\"button\" class=\"asw-picker-label\" matTooltip=\"{{label}}\"\r\n        (click)=\"toggleOpen($event);\">{{label}}\r\n        <svg viewBox=\"0 0 18 18\">\r\n            <polygon class=\"asw-stroke\" points=\"7 11 9 13 11 11 7 11\"></polygon>\r\n            <polygon class=\"asw-stroke\" points=\"7 7 9 5 11 7 7 7\"></polygon>\r\n        </svg>\r\n    </button>\r\n    <span class=\"asw-picker-options\">\r\n        <button tabindex=\"-1\" type=\"button\" role=\"button\" class=\"asw-picker-item\"\r\n            *ngFor=\"let item of options; let i = index\"\r\n            [ngClass]=\"{'selected': item.value === value, 'focused': i === optionId}\"\r\n            (click)=\"optionSelect(item, $event)\">\r\n            {{item.label}}\r\n        </button>\r\n        <span class=\"dropdown-item\" *ngIf=\"!options.length\">No items for select</span>\r\n    </span>\r\n</span>","import { DOCUMENT } from '@angular/common';\nimport { HttpEvent, HttpResponse } from '@angular/common/http';\nimport { Component, ElementRef, EventEmitter, Inject, Input, OnInit, Output, Renderer2, ViewChild } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { CustomClass, ElementDOM, UploadResponse } from '@asoftwareworld/form-builder-pro/api';\nimport { Constants, Icons } from '@asoftwareworld/form-builder-pro/common';\nimport { Observable } from 'rxjs';\nimport { AswEditorDialog } from '../editor-dialog/editor-dialog';\nimport { SelectOption } from './../editor-select/editor-select';\nimport { AswEditorService } from './../editor.service';\n\n@Component({\n    selector: 'asw-editor-toolbar',\n    templateUrl: './editor-toolbar.html',\n    styleUrls: ['./editor-toolbar.scss']\n})\nexport class AswEditorToolbar implements OnInit, ElementDOM {\n    htmlMode = false;\n    linkSelected = false;\n    block = 'default';\n    fontSize = '3';\n    foreColour: any;\n    backColor: any;\n    icons: any = Icons;\n    colorsName: string[] = [];\n    constant = Constants;\n    textColor = '#000105';\n    backgroundColor = '#ffffff';\n    selectedColor!: string;\n    show = false;\n\n    headings: SelectOption[] = [\n        {\n            label: 'Heading 1',\n            value: 'h1'\n        },\n        {\n            label: 'Heading 2',\n            value: 'h2'\n        },\n        {\n            label: 'Heading 3',\n            value: 'h3'\n        },\n        {\n            label: 'Heading 4',\n            value: 'h4'\n        },\n        {\n            label: 'Heading 5',\n            value: 'h5'\n        },\n        {\n            label: 'Heading 6',\n            value: 'h6'\n        },\n        {\n            label: 'Heading 7',\n            value: 'h7'\n        },\n        {\n            label: 'Paragraph',\n            value: 'p'\n        },\n        {\n            label: 'Predefined',\n            value: 'pre'\n        },\n        {\n            label: 'Standard',\n            value: 'div'\n        },\n        {\n            label: 'default',\n            value: 'default'\n        }\n    ];\n\n    fontSizes: SelectOption[] = [\n        {\n            label: '1',\n            value: '1'\n        },\n        {\n            label: '2',\n            value: '2'\n        },\n        {\n            label: '3',\n            value: '3'\n        },\n        {\n            label: '4',\n            value: '4'\n        },\n        {\n            label: '5',\n            value: '5'\n        },\n        {\n            label: '6',\n            value: '6'\n        },\n        {\n            label: '7',\n            value: '7'\n        }\n    ];\n\n    customClassId = '-1';\n\n    customClasses$: CustomClass[] = [];\n    customClassList: SelectOption[] = [{ label: '', value: '' }];\n    // uploadUrl: string;\n\n    tagMap: any = {\n        BLOCKQUOTE: 'indent',\n        A: 'link'\n    };\n\n    select = ['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P', 'PRE', 'DIV'];\n\n    buttons = ['bold', 'italic', 'underline', 'strikeThrough', 'subscript', 'superscript', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull', 'indent', 'outdent', 'insertUnorderedList', 'insertOrderedList', 'link'];\n\n    @Input() id!: string;\n    @Input() uploadUrl!: string;\n    @Input() upload: ((file: File) => Observable<HttpEvent<UploadResponse>>) | any;\n    @Input() showToolbar!: boolean;\n    @Input() fonts: SelectOption[] = [{ label: '', value: '' }];\n\n    @Input()\n    set customClasses(classes: CustomClass[]) {\n        if (classes) {\n            this.customClasses$ = classes;\n            this.customClassList = this.customClasses$.map((x, i) => ({ label: x.name, value: i.toString() }));\n            this.customClassList.unshift({ label: 'Clear Class', value: '-1' });\n        }\n    }\n\n    @Input()\n    set defaultFontSize(value: string) {\n        if (value) {\n            this.fontSize = value;\n        }\n    }\n\n    @Input() hiddenButtons?: string[][];\n\n    @Output() execute: EventEmitter<string> = new EventEmitter<string>();\n\n    @ViewChild('fileInput', { static: true }) myInputFile?: ElementRef;\n\n    public get isLinkButtonDisabled(): boolean {\n        return this.htmlMode || !Boolean(this.aswEditorService.selectedText);\n    }\n\n    constructor(\n        private renderer: Renderer2,\n        private aswEditorService: AswEditorService,\n        @Inject(DOCUMENT) private doc: any,\n        public dialog: MatDialog,\n        public elementDOM: ElementRef<HTMLElement>\n    ) {}\n\n    ngOnInit(): void {\n        this.colorsName = Object.keys(this.constant.colors);\n    }\n\n    /**\n     * Trigger command from editor header buttons\n     * @param command string from toolbar buttons\n     */\n    triggerCommand(command: string): void {\n        this.execute.emit(command);\n    }\n\n    /**\n     * highlight editor buttons when cursor moved or positioning\n     */\n    triggerButtons(): void {\n        if (!this.showToolbar) {\n            return;\n        }\n        this.buttons.forEach((e) => {\n            const result = this.doc.queryCommandState(e);\n            const elementById = this.getChildById(e + '-' + this.id);\n            if (result) {\n                this.renderer.addClass(elementById, 'active');\n            } else {\n                this.renderer.removeClass(elementById, 'active');\n            }\n        });\n    }\n\n    getChildById(id: string): any {\n        return this.elementDOM.nativeElement.querySelector(`#${id}`);\n    }\n\n    /**\n     * trigger highlight editor buttons when cursor moved or positioning in block\n     */\n    triggerBlocks(nodes: Node[]): void {\n        if (!this.showToolbar) {\n            return;\n        }\n        this.linkSelected = nodes.findIndex((x) => x.nodeName === 'A') > -1;\n        let found = false;\n        this.select.forEach((y) => {\n            const node = nodes.find((x) => x.nodeName === y);\n            if (node !== undefined && y === node.nodeName) {\n                if (found === false) {\n                    this.block = node.nodeName.toLowerCase();\n                    found = true;\n                }\n            } else if (found === false) {\n                this.block = 'default';\n            }\n        });\n\n        found = false;\n        if (this.customClasses$) {\n            this.customClasses$.forEach((y, index) => {\n                const node = nodes.find((x): any => {\n                    if (x instanceof Element) {\n                        return x.className === y.class;\n                    }\n                });\n                if (node !== undefined) {\n                    if (found === false) {\n                        this.customClassId = index.toString();\n                        found = true;\n                    }\n                } else if (found === false) {\n                    this.customClassId = '-1';\n                }\n            });\n        }\n\n        Object.keys(this.tagMap).map((e: any) => {\n            const elementById = this.getChildById(this.tagMap[e] + '-' + this.id);\n            const node = nodes.find((x) => x.nodeName === e);\n            if (node !== undefined && e === node.nodeName) {\n                this.renderer.addClass(elementById, 'active');\n            } else {\n                this.renderer.removeClass(elementById, 'active');\n            }\n        });\n\n        this.foreColour = this.doc.queryCommandValue('ForeColor');\n        this.fontSize = this.doc.queryCommandValue('FontSize');\n        // this.fontName = this.doc.queryCommandValue('FontName').replace(/\"/g, '');\n        this.backColor = this.doc.queryCommandValue('backColor');\n    }\n\n    /**\n     * insert URL link\n     */\n    insertUrl(): void {\n        let url: any = 'https://';\n        const selection = this.aswEditorService.savedSelection;\n        if (selection && selection.commonAncestorContainer.parentElement?.nodeName === 'A') {\n            const parent = selection.commonAncestorContainer.parentElement as HTMLAnchorElement;\n            if (parent.href !== '') {\n                url = parent.href;\n            }\n        }\n        // const dialogRef = this.dialog.open(AswEditorDialog, {\n        //     width: '450px',\n        //     data: { linkTo: url }\n        // });\n        // dialogRef.afterClosed().subscribe((result) => {\n        //     if (result !== undefined) {\n        //         url = result;\n        //         this.aswEditorService.createLink(url);\n        //     }\n        // });\n        url = prompt('Insert URL link', url);\n        if (url && url !== '' && url !== 'https://') {\n            this.aswEditorService.createLink(url);\n        }\n    }\n\n    /**\n     * insert Video link\n     */\n    insertVideo(): void {\n        this.execute.emit('');\n        const dialogRef = this.dialog.open(AswEditorDialog, {\n            width: '450px',\n            data: { linkTo: `https://` }\n        });\n        dialogRef.afterClosed().subscribe((result) => {\n            if (result !== undefined) {\n                const url = result;\n                if (url && url !== '' && url !== `https://`) {\n                    this.aswEditorService.insertVideo(url);\n                }\n            }\n        });\n    }\n\n    /** insert color */\n    insertColor(color: string, where: string): void {\n        if (where === 'textColor') {\n            this.textColor = color;\n        } else {\n            this.backgroundColor = color;\n        }\n        this.aswEditorService.insertColor(color, where);\n        this.execute.emit('');\n        this.show = false;\n    }\n\n    /**\n     * Change status of visibility to color picker\n     */\n    public toggleColors(where: string): void {\n        this.show = !this.show;\n        this.selectedColor = where;\n    }\n\n    /**\n     * Change color from input\n     */\n    public setColor(data: any): void {\n        this.insertColor(data.colorCode, data.where);\n    }\n\n    /**\n     * set font Name/family\n     * @param foreColor string\n     */\n    setFontName(foreColor: string): void {\n        this.aswEditorService.setFontName(foreColor);\n        this.execute.emit('');\n    }\n\n    /**\n     * set font Size\n     * @param fontSize string\n     */\n    setFontSize(fontSize: string): void {\n        this.aswEditorService.setFontSize(fontSize);\n        this.execute.emit('');\n    }\n\n    /**\n     * toggle editor mode (WYSIWYG or SOURCE)\n     * @param m boolean\n     */\n    setEditorMode(m: boolean): void {\n        const toggleEditorModeButton = this.getChildById('toggleEditorMode' + '-' + this.id);\n        if (m) {\n            this.renderer.addClass(toggleEditorModeButton, 'active');\n        } else {\n            this.renderer.removeClass(toggleEditorModeButton, 'active');\n        }\n        this.htmlMode = m;\n    }\n\n    /**\n     * Upload image when file is selected.\n     */\n    onFileChanged(event: any): void {\n        const file = event.target.files[0];\n        if (file.type.includes('image/')) {\n            if (this.upload) {\n                this.upload(file).subscribe((response: HttpResponse<UploadResponse>) => this.watchUploadImage(response, event));\n            } else if (this.uploadUrl) {\n                this.aswEditorService.uploadImage(file).subscribe((response: HttpResponse<UploadResponse>) => this.watchUploadImage(response, event));\n            } else {\n                const reader = new FileReader();\n                reader.onload = (e: ProgressEvent) => {\n                    const fr = e.currentTarget as FileReader;\n                    if (fr.result) {\n                        this.aswEditorService.insertImage(fr.result.toString());\n                    }\n                };\n                reader.readAsDataURL(file);\n            }\n        }\n    }\n\n    watchUploadImage(response: HttpResponse<{ imageUrl: string }> | any, event: any): void {\n        const { imageUrl } = response.body;\n        this.aswEditorService.insertImage(imageUrl);\n        event.srcElement.value = null;\n    }\n\n    /**\n     * Set custom class\n     */\n    setCustomClass(classId: string): void {\n        if (classId === '-1') {\n            this.execute.emit('clear');\n        } else {\n            this.aswEditorService.createCustomClass(this.customClasses$[+classId]);\n        }\n    }\n\n    isButtonHidden(name: string): boolean {\n        if (!name) {\n            return false;\n        }\n        if (!(this.hiddenButtons instanceof Array)) {\n            return false;\n        }\n        let result: any;\n        for (const arr of this.hiddenButtons) {\n            if (arr instanceof Array) {\n                result = arr.find((item) => item === name);\n            }\n            if (result) {\n                break;\n            }\n        }\n        return result !== undefined;\n    }\n\n    focus(): void {\n        this.execute.emit('focus');\n    }\n}\n","<div class=\"asw-editor-toolbar\" *ngIf=\"showToolbar\">\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button type=\"button\" matTooltip=\"Undo (Ctrl+Z)\" class=\"asw-editor-button\" (click)=\"triggerCommand('undo')\"\r\n            [hidden]=\"isButtonHidden('undo')\" tabindex=\"-1\">\r\n            <div [innerHTML]=\"icons.undo | aswSafeHtml\"></div>\r\n        </button>\r\n        <button type=\"button\" matTooltip=\"Redo (Ctrl+Y)\" class=\"asw-editor-button\" (click)=\"triggerCommand('redo')\"\r\n            [hidden]=\"isButtonHidden('redo')\" tabindex=\"-1\">\r\n            <div [innerHTML]=\"icons.redo | aswSafeHtml\"></div>\r\n        </button>\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button [id]=\"'bold-'+id\" type=\"button\" matTooltip=\"Bold (Ctrl+B)\" class=\"asw-editor-button\" (click)=\"triggerCommand('bold')\"\r\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('bold')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.bold | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'italic-'+id\" type=\"button\" matTooltip=\"Italic (Ctrl+I)\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('italic')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('italic')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.italic | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'underline-'+id\" type=\"button\" matTooltip=\"Underline (Ctrl+U)\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('underline')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('underline')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.underline | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'strikeThrough-'+id\" type=\"button\" matTooltip=\"Strikethrough\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('strikeThrough')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('strikeThrough')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.strikeThrough | aswSafeHtml\"></div>\r\n        </button>\r\n        <!-- <button [id]=\"'subscript-'+id\" type=\"button\" matTooltip=\"Subscript\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('subscript')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('subscript')\"\r\n            tabindex=\"-1\">\r\n            <mat-icon [ngClass]=\"{'asw-icon-disabled': htmlMode }\">subscript</mat-icon>\r\n        </button>\r\n        <button [id]=\"'superscript-'+id\" type=\"button\" matTooltip=\"Superscript\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('superscript')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('superscript')\"\r\n            tabindex=\"-1\">\r\n            <mat-icon [ngClass]=\"{'asw-icon-disabled': htmlMode }\">superscript</mat-icon>\r\n        </button> -->\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button [id]=\"'foregroundColorPicker-'+id\" type=\"button\" class=\"asw-editor-button\"\r\n            (click)=\"toggleColors('textColor')\" matTooltip=\"Text color\" [disabled]=\"htmlMode\"\r\n            [hidden]=\"isButtonHidden('textColor')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.formatColorText | aswSafeHtml\"></div>\r\n        </button>\r\n        <ng-container *ngIf=\"show\">\r\n            <asw-color-picker [textColor]=\"textColor\"\r\n                [isEditor]=\"true\"\r\n                [backgroundColor]=\"backgroundColor\"\r\n                (colorChange)=\"setColor($event)\"></asw-color-picker>\r\n        </ng-container>\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button [id]=\"'alignLeft-'+id\" type=\"button\" matTooltip=\"Align left\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('justifyLeft')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('justifyLeft')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.justifyLeft | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'alignCenter-'+id\" type=\"button\" matTooltip=\"Align center\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('justifyCenter')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('justifyCenter')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.justifyCenter | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'alignRight-'+id\" type=\"button\" matTooltip=\"Align right\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('justifyRight')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('justifyRight')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.justifyRight | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'justifyFull-'+id\" type=\"button\" matTooltip=\"Justify Full\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('justifyFull')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('justifyFull')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.justifyFull | aswSafeHtml\"></div>\r\n        </button>\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button [id]=\"'indent-'+id\" type=\"button\" matTooltip=\"Indent\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('indent')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('indent')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.indent | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'outdent-'+id\" type=\"button\" matTooltip=\"Outdent\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('outdent')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('outdent')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.outdent | aswSafeHtml\"></div>\r\n        </button>\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button [id]=\"'insertUnorderedList-'+id\" type=\"button\" matTooltip=\"Unordered List\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('insertUnorderedList')\" [disabled]=\"htmlMode\"\r\n            [hidden]=\"isButtonHidden('insertUnorderedList')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.formatListBulleted | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'insertOrderedList-'+id\" type=\"button\" matTooltip=\"Ordered List\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('insertOrderedList')\" [disabled]=\"htmlMode\"\r\n            [hidden]=\"isButtonHidden('insertOrderedList')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.formatListNumbered | aswSafeHtml\"></div>\r\n        </button>\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <asw-editor-select class=\"select-heading\" [options]=\"headings\" [(ngModel)]=\"block\"\r\n            (change)=\"triggerCommand(block)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('heading')\" tabindex=\"-1\">\r\n        </asw-editor-select>\r\n    </div>\r\n    <!-- <div class=\"asw-editor-toolbar-set\">\r\n        <asw-editor-select class=\"select-font\" [options]=\"fonts\" [(ngModel)]=\"fontName\" (change)=\"setFontName(fontName)\"\r\n            [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('fontName')\" tabindex=\"-1\"></asw-editor-select>\r\n    </div> -->\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <asw-editor-select class=\"select-font-size\" [options]=\"fontSizes\" [(ngModel)]=\"fontSize\"\r\n            (change)=\"setFontSize(fontSize)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('fontSize')\" tabindex=\"-1\">\r\n        </asw-editor-select>\r\n    </div>\r\n    \r\n    <div *ngIf=\"customClasses$\" class=\"asw-editor-toolbar-set\">\r\n        <asw-editor-select class=\"select-custom-style\" [options]=\"customClassList\" [(ngModel)]=\"customClassId\"\r\n            (change)=\"setCustomClass(customClassId)\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('customClasses')\"\r\n            tabindex=\"-1\"></asw-editor-select>\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button [id]=\"'link-'+id\" type=\"button\" class=\"asw-editor-button\" (click)=\"insertUrl()\" matTooltip=\"Insert Link\"\r\n            [disabled]=\"isLinkButtonDisabled\" [hidden]=\"isButtonHidden('link')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.link | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'unlink-'+id\" type=\"button\" class=\"asw-editor-button\" (click)=\"triggerCommand('unlink')\"\r\n            matTooltip=\"Unlink\" [disabled]=\"htmlMode || !linkSelected\" [hidden]=\"isButtonHidden('unlink')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.unlink | aswSafeHtml\"></div>\r\n        </button>\r\n        <!-- ToDO: need to improve for image and video upload -->\r\n        <!-- <input style=\"display: none\" accept=\"image/*\" type=\"file\" (change)=\"onFileChanged($event)\" #fileInput>\r\n        <button [id]=\"'insertImage-'+id\" type=\"button\" class=\"asw-editor-button\" (click)=\"focus(); fileInput.click()\"\r\n            matTooltip=\"Insert Image\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('insertImage')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.image | aswSafeHtml\"></div>\r\n        </button>\r\n        <button [id]=\"'insertVideo-'+id\" type=\"button\" class=\"asw-editor-button\" (click)=\"insertVideo()\"\r\n            matTooltip=\"Insert Video\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('insertVideo')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.videoCam | aswSafeHtml\"></div>\r\n        </button> -->\r\n        <button [id]=\"'insertHorizontalRule-'+id\" type=\"button\" matTooltip=\"Horizontal Line\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('insertHorizontalRule')\" [disabled]=\"htmlMode\"\r\n            [hidden]=\"isButtonHidden('insertHorizontalRule')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.remove | aswSafeHtml\"></div>\r\n        </button>\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button [id]=\"'clearFormatting-'+id\" type=\"button\" matTooltip=\"Remove formatting\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('removeFormat')\" [disabled]=\"htmlMode\" [hidden]=\"isButtonHidden('removeFormat')\"\r\n            tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.formatClear | aswSafeHtml\"></div>\r\n        </button>\r\n    </div>\r\n    <div class=\"asw-editor-toolbar-set\">\r\n        <button [id]=\"'toggleEditorMode-'+id\" type=\"button\" matTooltip=\"HTML Code\" class=\"asw-editor-button\"\r\n            (click)=\"triggerCommand('toggleEditorMode')\" [hidden]=\"isButtonHidden('toggleEditorMode')\" tabindex=\"-1\">\r\n            <div [ngClass]=\"{'asw-icon-disabled': htmlMode }\" [innerHTML]=\"icons.code | aswSafeHtml\"></div>\r\n        </button>\r\n    </div>\r\n    <ng-content></ng-content>\r\n</div>\r\n","import { DOCUMENT } from '@angular/common';\nimport {\n    AfterViewInit,\n    Attribute,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    HostBinding,\n    HostListener,\n    Inject,\n    Input,\n    OnDestroy,\n    OnInit,\n    Output,\n    Renderer2,\n    SecurityContext,\n    TemplateRef,\n    ViewChild\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { AswEditorConfig, aswEditorConfig, ElementDOM } from '@asoftwareworld/form-builder-pro/api';\nimport { isDefined } from '@asoftwareworld/form-builder-pro/utils';\nimport { AswEditorToolbar } from './editor-toolbar/editor-toolbar';\nimport { AswEditorService } from './editor.service';\n\n@Component({\n    selector: 'asw-editor',\n    templateUrl: './editor.html',\n    styleUrls: ['./editor.scss'],\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => AswEditor),\n            multi: true\n        }\n    ]\n})\nexport class AswEditor implements OnInit, ControlValueAccessor, AfterViewInit, OnDestroy, ElementDOM {\n    private onChange: ((value: string) => void) | any;\n    private onTouched!: () => void;\n\n    modeVisual = true;\n    showPlaceholder = false;\n    disabled = false;\n    focused = false;\n    touched = false;\n    changed = false;\n\n    focusInstance: any;\n    blurInstance: any;\n\n    @Input() id = '';\n    @Input() config: AswEditorConfig | any = aswEditorConfig;\n    @Input() placeholder = '';\n    @Input() tabIndex: number | null;\n\n    @Output() html: any;\n\n    @ViewChild('editor', { static: true }) textArea!: ElementRef;\n    @ViewChild('editorWrapper', { static: true }) editorWrapper!: ElementRef;\n    @ViewChild('editorToolbar') editorToolbar?: AswEditorToolbar;\n    @ContentChild('customButtons') customButtonsTemplateRef: TemplateRef<any> | any;\n    executeCommandFn = this.executeCommand.bind(this);\n\n    @Output() viewMode = new EventEmitter<boolean>();\n\n    /** emits `blur` event when focused out from the textarea */\n    @Output('blur') blurEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n    /** emits `focus` event when focused in to the textarea */\n    // eslint-disable-next-line @angular-eslint/no-output-rename, @angular-eslint/no-output-native\n    @Output('focus') focusEvent: EventEmitter<FocusEvent> = new EventEmitter<FocusEvent>();\n\n    @HostBinding('attr.tabindex') tabindex = -1;\n\n    @HostListener('focus')\n    onFocus(): void {\n        this.focus();\n    }\n\n    constructor(\n        private renderer: Renderer2,\n        private aswEditorService: AswEditorService,\n        @Inject(DOCUMENT) private doc: any,\n        private sanitizer: DomSanitizer,\n        private cdRef: ChangeDetectorRef,\n        @Attribute('tabindex') defaultTabIndex: string,\n        @Attribute('autofocus') private autoFocus: any,\n        public elementDOM: ElementRef<HTMLElement>\n    ) {\n        const parsedTabIndex = Number(defaultTabIndex);\n        this.tabIndex = parsedTabIndex || parsedTabIndex === 0 ? parsedTabIndex : null;\n    }\n\n    ngOnInit(): void {\n        this.config.toolbarPosition = this.config.toolbarPosition ? this.config.toolbarPosition : aswEditorConfig.toolbarPosition;\n    }\n\n    ngAfterViewInit(): void {\n        if (isDefined(this.autoFocus)) {\n            this.focus();\n        }\n    }\n\n    onPaste(event: ClipboardEvent): any {\n        if (this.config.rawPaste) {\n            event.preventDefault();\n            const text = event.clipboardData?.getData('text/plain');\n            document.execCommand('insertHTML', false, text);\n            return text;\n        }\n    }\n\n    /**\n     * Executed command from editor header buttons\n     * @param command string from triggerCommand\n     */\n    executeCommand(command: string, value?: string): void {\n        this.focus();\n        if (command === 'focus') {\n            return;\n        }\n        if (command === 'toggleEditorMode') {\n            this.toggleEditorMode(this.modeVisual);\n        } else if (command !== '') {\n            if (command === 'clear') {\n                this.aswEditorService.removeSelectedElements(this.getCustomTags());\n                this.onContentChange(this.textArea.nativeElement);\n            } else if (command === 'default') {\n                this.aswEditorService.removeSelectedElements('h1,h2,h3,h4,h5,h6,p,pre');\n                this.onContentChange(this.textArea.nativeElement);\n            } else {\n                this.aswEditorService.executeCommand(command, value);\n            }\n            this.exec();\n        }\n    }\n\n    /**\n     * focus event\n     */\n    onTextAreaFocus(event: FocusEvent): void {\n        if (this.focused) {\n            event.stopPropagation();\n            return;\n        }\n        this.focused = true;\n        this.focusEvent.emit(event);\n        if (!this.touched || !this.changed) {\n            this.aswEditorService.executeInNextQueueIteration(() => {\n                this.configure();\n                this.touched = true;\n            });\n        }\n    }\n\n    /**\n     * @description fires when cursor leaves textarea\n     */\n    public onTextAreaMouseOut(event: MouseEvent): void {\n        this.aswEditorService.saveSelection();\n    }\n\n    /**\n     * blur event\n     */\n    onTextAreaBlur(event: FocusEvent): void {\n        /**\n         * save selection if focussed out\n         */\n        this.aswEditorService.executeInNextQueueIteration(this.aswEditorService.saveSelection);\n\n        if (typeof this.onTouched === 'function') {\n            this.onTouched();\n        }\n\n        if (event.relatedTarget !== null) {\n            const parent = (event.relatedTarget as HTMLElement).parentElement;\n            if (parent?.classList.contains('asw-editor-toolbar-set') && parent.classList.contains('asw-picker')) {\n                this.blurEvent.emit(event);\n                this.focused = false;\n            }\n        }\n    }\n\n    /**\n     *  focus the text area when the editor is focused\n     */\n    focus(): void {\n        if (this.modeVisual) {\n            this.textArea.nativeElement.focus();\n        } else {\n            const sourceText = this.getChildById('sourceText' + this.id);\n            sourceText.focus();\n            this.focused = true;\n        }\n    }\n\n    /**\n     * Executed from the contenteditable section while the input property changes\n     * @param element html element from contenteditable\n     */\n    onContentChange(element: any): void {\n        element = element.target ? (element.target as HTMLElement) : (element as HTMLElement);\n        let html = '';\n        if (this.modeVisual) {\n            html = element.innerHTML;\n        } else {\n            html = element.innerText;\n        }\n        if (!html || html === '<br>') {\n            html = '';\n        }\n        if (typeof this.onChange === 'function') {\n            this.onChange(this.config.sanitize || this.config.sanitize === undefined ? this.sanitizer.sanitize(SecurityContext.HTML, html) : html);\n            if (!html !== this.showPlaceholder) {\n                this.togglePlaceholder(this.showPlaceholder);\n            }\n        }\n        this.changed = true;\n    }\n\n    /**\n     * Set the function to be called\n     * when the control receives a change event.\n     *\n     * @param fn a function\n     */\n    registerOnChange(fn: any): void {\n        this.onChange = (e: any) => (e === '<br>' ? fn('') : fn(e));\n    }\n\n    /**\n     * Set the function to be called\n     * when the control receives a touch event.\n     *\n     * @param fn a function\n     */\n    registerOnTouched(fn: any): void {\n        this.onTouched = fn;\n    }\n\n    /**\n     * Write a new value to the element.\n     *\n     * @param value value to be executed when there is a change in contenteditable\n     */\n    writeValue(value: any): void {\n        if ((!value || value === '<br>' || value === '') !== this.showPlaceholder) {\n            this.togglePlaceholder(this.showPlaceholder);\n        }\n\n        if (value === undefined || value === '' || value === '<br>') {\n            value = null;\n        }\n\n        this.refreshView(value);\n    }\n\n    /**\n     * refresh view/HTML of the editor\n     *\n     * @param value html string from the editor\n     */\n    refreshView(value: string): void {\n        const normalizedValue = value === null ? '' : value;\n        this.renderer.setProperty(this.textArea.nativeElement, 'innerHTML', normalizedValue);\n\n        return;\n    }\n\n    /**\n     * toggles placeholder based on input string\n     *\n     * @param value A HTML string from the editor\n     */\n    togglePlaceholder(value: boolean): void {\n        if (!value) {\n            this.renderer.addClass(this.editorWrapper.nativeElement, 'show-placeholder');\n            this.showPlaceholder = true;\n        } else {\n            this.renderer.removeClass(this.editorWrapper.nativeElement, 'show-placeholder');\n            this.showPlaceholder = false;\n        }\n    }\n\n    /**\n     * Implements disabled state for this element\n     *\n     * @param isDisabled Disabled flag\n     */\n    setDisabledState(isDisabled: boolean): void {\n        const div = this.textArea.nativeElement;\n        const action = isDisabled ? 'addClass' : 'removeClass';\n        this.renderer[action](div, 'disabled');\n        this.disabled = isDisabled;\n    }\n\n    /**\n     * toggles editor mode based on bToSource bool\n     *\n     * @param bToSource A boolean value from the editor\n     */\n    toggleEditorMode(bToSource: boolean): void {\n        let oContent: any;\n        const editableElement = this.textArea.nativeElement;\n\n        if (bToSource) {\n            oContent = this.renderer.createText(editableElement.innerHTML);\n            this.renderer.setProperty(editableElement, 'innerHTML', '');\n            this.renderer.setProperty(editableElement, 'contentEditable', false);\n\n            const oPre = this.renderer.createElement('pre');\n            this.renderer.setStyle(oPre, 'margin', '0');\n            this.renderer.setStyle(oPre, 'outline', 'none');\n\n            const oCode = this.renderer.createElement('code');\n            this.renderer.setProperty(oCode, 'id', 'sourceText' + this.id);\n            this.renderer.setStyle(oCode, 'display', 'block');\n            this.renderer.setStyle(oCode, 'white-space', 'pre-wrap');\n            this.renderer.setStyle(oCode, 'word-break', 'keep-all');\n            this.renderer.setStyle(oCode, 'outline', 'none');\n            this.renderer.setStyle(oCode, 'margin', '0');\n            this.renderer.setStyle(oCode, 'background-color', '#e8f0fe');\n            this.renderer.setProperty(oCode, 'contentEditable', true);\n            this.renderer.appendChild(oCode, oContent);\n            this.focusInstance = this.renderer.listen(oCode, 'focus', (event) => this.onTextAreaFocus(event));\n            this.blurInstance = this.renderer.listen(oCode, 'blur', (event) => this.onTextAreaBlur(event));\n            this.renderer.appendChild(oPre, oCode);\n            this.renderer.appendChild(editableElement, oPre);\n\n            // ToDo move to service\n            this.doc.execCommand('defaultParagraphSeparator', false, 'div');\n\n            this.modeVisual = false;\n            this.viewMode.emit(false);\n            oCode.focus();\n        } else {\n            if (this.doc.querySelectorAll) {\n                this.renderer.setProperty(editableElement, 'innerHTML', editableElement.innerText);\n            } else {\n                oContent = this.doc.createRange();\n                oContent.selectNodeContents(editableElement.firstChild);\n                this.renderer.setProperty(editableElement, 'innerHTML', oContent.toString());\n            }\n            this.renderer.setProperty(editableElement, 'contentEditable', true);\n            this.modeVisual = true;\n            this.viewMode.emit(true);\n            this.onContentChange(editableElement);\n            editableElement.focus();\n        }\n        this.editorToolbar?.setEditorMode(!this.modeVisual);\n    }\n\n    /**\n     * toggles editor buttons when cursor moved or positioning\n     *\n     * Send a node array from the contentEditable of the editor\n     */\n    exec(): void {\n        this.editorToolbar?.triggerButtons();\n\n        let userSelection;\n        if (this.doc.getSelection) {\n            userSelection = this.doc.getSelection();\n            this.aswEditorService.executeInNextQueueIteration(this.aswEditorService.saveSelection);\n        }\n\n        let a = userSelection.focusNode;\n        const els = [];\n        while (a && a.id !== 'editor') {\n            els.unshift(a);\n            a = a.parentNode;\n        }\n        this.editorToolbar?.triggerBlocks(els);\n    }\n\n    private configure(): void {\n        this.aswEditorService.uploadUrl = this.config.uploadUrl;\n        this.aswEditorService.uploadWithCredentials = this.config.uploadWithCredentials;\n        if (this.config.defaultParagraphSeparator) {\n            this.aswEditorService.setDefaultParagraphSeparator(this.config.defaultParagraphSeparator);\n        }\n        if (this.config.defaultFontName) {\n            this.aswEditorService.setFontName(this.config.defaultFontName);\n        }\n        if (this.config.defaultFontSize) {\n            this.aswEditorService.setFontSize(this.config.defaultFontSize);\n        }\n    }\n\n    getCustomTags(): string {\n        const tags = ['span'];\n        this.config.customClasses?.forEach((x: any) => {\n            if (x.tag !== undefined) {\n                if (!tags.includes(x.tag)) {\n                    tags.push(x.tag);\n                }\n            }\n        });\n        return tags.join(',');\n    }\n\n    ngOnDestroy(): void {\n        if (this.blurInstance) {\n            this.blurInstance();\n        }\n        if (this.focusInstance) {\n            this.focusInstance();\n        }\n    }\n\n    filterStyles(html: string): string {\n        html = html.replace('position: fixed;', '');\n        return html;\n    }\n\n    getChildById(id: string): any {\n        return this.elementDOM.nativeElement.querySelector(`#${id}`);\n    }\n}\n","<div\r\n     class=\"asw-editor\"\r\n     #aswEditor\r\n     [style.width]=\"config.width\"\r\n     [style.minWidth]=\"config.minWidth\"\r\n>\r\n     <asw-editor-toolbar\r\n          *ngIf=\"config.toolbarPosition === 'top'\"\r\n          #editorToolbar\r\n          [id]=\"id\"\r\n          [uploadUrl]=\"config.uploadUrl\"\r\n          [upload]=\"config.upload\"\r\n          [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\r\n          [customClasses]=\"config.customClasses\"\r\n          [defaultFontSize]=\"config.defaultFontSize\"\r\n          [hiddenButtons]=\"config.toolbarHiddenButtons\"\r\n          (execute)=\"executeCommand($event)\"\r\n     >\r\n       <ng-container\r\n         [ngTemplateOutlet]=\"customButtonsTemplateRef\"\r\n         [ngTemplateOutletContext]=\"{ executeCommandFn: this.executeCommandFn}\"\r\n       >\r\n       </ng-container>\r\n     </asw-editor-toolbar>\r\n\r\n     <div\r\n          class=\"asw-editor-wrapper\"\r\n          #editorWrapper\r\n     >\r\n          <div\r\n               #editor\r\n               class=\"asw-editor-textarea\"\r\n               [attr.contenteditable]=\"config.editable\"\r\n               [attr.tabindex]=\"disabled ? -1 : tabIndex\"\r\n               [attr.translate]=\"config.translate\"\r\n               [attr.spellcheck]=\"config.spellcheck\"\r\n               [style.height]=\"config.height\"\r\n               [style.minHeight]=\"config.minHeight\"\r\n               [style.maxHeight]=\"config.maxHeight\"\r\n               [style.outline]=\"config.outline === false ? 'none': undefined\"\r\n               (input)=\"onContentChange($event)\"\r\n               (focus)=\"onTextAreaFocus($event)\"\r\n               (blur)=\"onTextAreaBlur($event)\"\r\n               (click)=\"exec()\"\r\n               (keyup)=\"exec()\"\r\n               (mouseout)=\"onTextAreaMouseOut($event)\"\r\n               (paste)=\"onPaste($event)\"\r\n          >\r\n          </div>\r\n          <span class=\"asw-editor-placeholder\">{{ placeholder || config['placeholder'] }}</span>\r\n     </div>\r\n     <asw-editor-toolbar\r\n          *ngIf=\"config.toolbarPosition === 'bottom'\"\r\n          #editorToolbar\r\n          [id]=\"id\"\r\n          [uploadUrl]=\"config.uploadUrl\"\r\n          [upload]=\"config.upload\"\r\n          [showToolbar]=\"config.showToolbar !== undefined ? config.showToolbar : true\"\r\n          [customClasses]=\"config.customClasses\"\r\n          [defaultFontSize]=\"config.defaultFontSize\"\r\n          [hiddenButtons]=\"config.toolbarHiddenButtons\"\r\n          (execute)=\"executeCommand($event)\"\r\n     ></asw-editor-toolbar>\r\n</div>","import { Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n    selector: 'asw-editor-button',\n    templateUrl: './editor-button.html',\n    styleUrls: ['./editor-button.scss'],\n    encapsulation: ViewEncapsulation.None\n})\nexport class AswEditorButton {\n    @Input() iconClass = '';\n    @Input() title = '';\n    @Output() buttonClick = new EventEmitter();\n\n    constructor() {}\n}\n","<button type=\"button\" [title]=\"title\" class=\"asw-editor-button\" (click)=\"buttonClick.emit()\" tabindex=\"-1\">\r\n    <i [class]=\"iconClass\"></i>\r\n</button>","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n    selector: 'asw-editor-toolbar-set',\n    templateUrl: './editor-toolbar-set.html',\n    encapsulation: ViewEncapsulation.None\n})\nexport class AswEditorToolbarSet {}\n","<div class=\"asw-editor-toolbar-set\">\r\n    <ng-content></ng-content>\r\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { AswPipeModule } from '@asoftwareworld/form-builder-pro/common';\nimport { AswTranslateModule } from '@asoftwareworld/form-builder-pro/core';\nimport { AswEditor } from './editor';\nimport { AswEditorButton } from './editor-button/editor-button';\nimport { AswEditorDialog } from './editor-dialog/editor-dialog';\nimport { AswEditorSelect } from './editor-select/editor-select';\nimport { AswEditorToolbarSet } from './editor-toolbar-set/editor-toolbar-set';\nimport { AswEditorToolbar } from './editor-toolbar/editor-toolbar';\nimport { AswEditorService } from './editor.service';\nimport { AswColorPickerModule } from '@asoftwareworld/form-builder-pro/color-picker';\n\n@NgModule({\n    imports: [CommonModule, FormsModule, ReactiveFormsModule, MatDialogModule, MatFormFieldModule, MatButtonModule, MatInputModule, MatTooltipModule, AswPipeModule, AswTranslateModule, AswColorPickerModule, MatDividerModule],\n    declarations: [AswEditorButton, AswEditorSelect, AswEditorToolbarSet, AswEditorToolbar, AswEditor, AswEditorDialog],\n    exports: [AswEditorButton, AswEditorSelect, AswEditorToolbarSet, AswEditorToolbar, AswEditor, AswEditorDialog],\n    providers: [AswEditorService]\n})\nexport class AswEditorModule {}\n","/**\n * @license\n * Copyright ASW (A Software World) All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file\n */\n\nexport * from './editor';\nexport * from './editor-button/editor-button';\nexport * from './editor-select/editor-select';\nexport * from './editor-toolbar/editor-toolbar';\nexport * from './editor-toolbar-set/editor-toolbar-set';\nexport * from './editor-dialog/editor-dialog';\nexport * from './editor.service';\nexport * from './editor.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i2","i3","i4","i5","i6","i7.AswEditorSelect","i1.AswEditorService","i4.AswEditorToolbar"],"mappings":"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"}