{"version":3,"file":"deja-js-component-editor.mjs","sources":["../../../../projects/deja-js/component/editor/deja-editor.service.ts","../../../../projects/deja-js/component/editor/deja-editor.component.ts","../../../../projects/deja-js/component/editor/deja-editor.component.html","../../../../projects/deja-js/component/editor/string.utils.ts","../../../../projects/deja-js/component/editor/deja-editor.module.ts","../../../../projects/deja-js/component/editor/material-field-wrapper/deja-editor-selector.directive.ts","../../../../projects/deja-js/component/editor/material-field-wrapper/index.ts","../../../../projects/deja-js/component/editor/index.ts","../../../../projects/deja-js/component/editor/deja-js-component-editor.ts"],"sourcesContent":["/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { Injectable } from '@angular/core';\n\n/**\n * Monaco Editor Service\n *\n * Service used by Monaco Editor Component to load only once instance of the Monaco Editor Library\n */\n@Injectable()\nexport class DejaEditorService {\n\n    private _loading: boolean;\n    private _loader: Promise<unknown>;\n\n    /**\n     * Load the CKEditor Editor Library\n     *\n     * @return Resolved promise when the library is loaded\n     */\n    public initDejaEditorLib(): Promise<unknown> {\n        if (!this._loading) {\n            this.init();\n        }\n\n        return this._loader;\n    }\n\n    private init(): void {\n        this._loader = new Promise(resolve => {\n            this._loading = true;\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\n            const wnd = <any>window;\n\n            // Load AMD loader if necessary\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n            if (!wnd.ckeditor) {\n                const baseElement = document.getElementsByTagName('base')[0] || {} as HTMLBaseElement;\n                const baseHref = baseElement.href;\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n                const basePath = wnd.CKEDITOR_BASEPATH || `${baseHref}assets/ckeditor/`;\n                const loaderScript = document.createElement('script');\n                document.head.appendChild(loaderScript);\n                loaderScript.type = 'text/javascript';\n                loaderScript.src = `${basePath as string}ckeditor.js`;\n                loaderScript.addEventListener('load', resolve);\n            }\n        });\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-return */\n/* eslint-disable @typescript-eslint/no-unsafe-call */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/unbound-method */\nimport { coerceBooleanProperty, coerceNumberProperty, NumberInput } from '@angular/cdk/coercion';\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, forwardRef, Input, NgZone, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Destroy } from '@deja-js/component/core';\nimport { cloneDeep } from 'lodash-es';\nimport { debounceTime, delay, from, merge, ReplaySubject, Subject, Subscription, switchMap, take, takeUntil, tap } from 'rxjs';\n\nimport { DejaEditorService } from './deja-editor.service';\n\ninterface EventInfo {\n    data: any;\n    editor: any;\n    listenerData: any;\n    name: string;\n    sender: { [key: string]: any };\n\n    cancel: () => void;\n    removeListener: () => void;\n    stop: () => void;\n}\n\n/**\n * CKEditor component\n * Usage :\n *  <ckeditor [(ngModel)]=\"data\" [config]=\"{...}\" debounce=\"500\"></ckeditor>\n */\n@Component({\n    selector: 'deja-editor',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => DejaEditorComponent),\n            multi: true\n        }\n    ],\n    templateUrl: './deja-editor.component.html',\n    styleUrls: ['./deja-editor.component.scss'],\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None\n})\nexport class DejaEditorComponent extends Destroy implements OnChanges, OnInit, AfterViewInit, OnDestroy, ControlValueAccessor {\n    @Input() public config: CKEDITOR.config;\n\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public readonly change = new EventEmitter();\n    @Output() public readonly ready = new EventEmitter();\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public readonly blur = new EventEmitter();\n    // eslint-disable-next-line @angular-eslint/no-output-native\n    @Output() public readonly focus = new EventEmitter();\n    @Output() public readonly disabled = new EventEmitter<boolean>();\n\n    @ViewChild('host', { static: true }) public host: ElementRef<HTMLTextAreaElement>;\n\n    public instance: CKEDITOR.editor;\n    public debounceTimeout$sub: Subscription;\n\n    private _readonly: boolean;\n    private _debounce = 0;\n    private _inline = true;\n    private onDataChangeListener: any;\n    private focus$ = new ReplaySubject<void>(1);\n    private disabled$ = new ReplaySubject<boolean>(1);\n    private onCkeditorChange$ = new Subject<void>();\n    private writeValue$ = new ReplaySubject<string>(1);\n    private _value = '';\n    private isDestroyed = false;\n    private registeredListeners = new Map<string, (evt: CKEDITOR.eventInfo) => void>();\n\n    @Input()\n    public set readonly(value: boolean) {\n        this._readonly = coerceBooleanProperty(value);\n    }\n\n    public get readonly(): boolean {\n        return this._readonly;\n    }\n\n    @Input()\n    public set inline(value: boolean) {\n        this._inline = coerceBooleanProperty(value);\n    }\n\n    public get inline(): boolean {\n        return this._inline;\n    }\n\n    @Input() public set debounce(debounce: NumberInput) {\n        this._debounce = coerceNumberProperty(debounce);\n    }\n\n    private readonly errorEventListener: EventListener;\n\n    /**\n     * Constructor\n     */\n    public constructor(\n        private zone: NgZone,\n        private changeDetectorRef: ChangeDetectorRef,\n        private initializer: DejaEditorService\n    ) {\n        super();\n        this.errorEventListener = (error: ErrorEvent): any => {\n            if (error.message === 'Uncaught ReferenceError: SCAYT is not defined' && this.instance) {\n                this.instance.destroy();\n                this.instance = null;\n                const config = cloneDeep(this.config);\n                config.plugins = config.plugins?.split(',').filter(plugin => !plugin.includes('scayt')).join(',');\n                config.removePlugins = config.removePlugins ? `${config.removePlugins},scayt` : 'scayt';\n                /* eslint-disable camelcase */\n                config.scayt_autoStartup = false;\n                /* eslint-enable camelcase */\n                this.ckeditorInit(config);\n            }\n        };\n        window.addEventListener('error', this.errorEventListener);\n    }\n\n    public get value(): string {\n        return this._value;\n    }\n\n    @Input()\n    public set value(v: string) {\n        if (v !== this._value) {\n            this._value = v;\n        }\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes.readonly && this.instance) {\n            this.instance.setReadOnly(this.readonly);\n        }\n    }\n\n    public ngOnInit(): void {\n        this.ready.pipe(\n            switchMap(() =>\n                merge(\n                    this.focus$.pipe(\n                        tap(() => this.instance.focus())\n                    ),\n                    this.disabled$.pipe(\n                        tap(value => this.disabled.emit(value)),\n                        tap(value => this.instance.setReadOnly(value))\n                    ),\n                    this.onCkeditorChange$.pipe(\n                        debounceTime(this._debounce),\n                        tap(() => this.updateValue())\n                    ),\n                    this.writeValue$.pipe(\n                        tap(value => this.updateCkeditorInstanceValue(value))\n                    )\n                )\n            ),\n            takeUntil(this.destroyed$)\n        ).subscribe();\n    }\n\n    /**\n     * On component destroy\n     */\n    public ngOnDestroy(): void {\n        super.ngOnDestroy();\n        this.isDestroyed = true;\n        this.cleanListeners();\n        this.focus.complete();\n        this.blur.complete();\n        this.change.complete();\n        this.disabled.complete();\n        this.instance?.destroy();\n        window.removeEventListener('error', this.errorEventListener);\n    }\n\n    /**\n     * On component view init\n     */\n    public ngAfterViewInit(): void {\n        from(this.initializer.initDejaEditorLib()).pipe(\n            take(1),\n            tap(() => this.ckeditorInit(cloneDeep(this.config) || {})),\n            delay(0),\n            takeUntil(this.destroyed$)\n        ).subscribe(() => this.changeDetectorRef.markForCheck());\n    }\n\n    /**\n     * Value update process\n     */\n    public updateValue(): void {\n        this.zone.run(() => {\n            let value = this.instance.getData();\n            if (!value) {\n                value = null;\n            }\n            if (this.value !== value) {\n                this.value = value;\n\n                this.onChange(value);\n                this.change.emit(value);\n            }\n        });\n    }\n\n    public textAreaChange(): void {\n        this.zone.run(() => {\n            const value = this.host.nativeElement.value;\n\n            this.onChange(value);\n            this.change.emit(value);\n        });\n    }\n\n    /**\n     * CKEditor init\n     */\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    public ckeditorInit(config: CKEDITOR.config): void {\n        if (typeof CKEDITOR === 'undefined') {\n            console.warn('CKEditor 4.x is missing (http://ckeditor.com/)');\n        } else {\n            // Check textarea exists\n            if (this.instance) {\n                return;\n            }\n\n            if (this.readonly) {\n                config.readOnly = this.readonly;\n            }\n\n            const keyEvents = config.on?.key;\n            if (!config.on) {\n                config.on = {};\n            }\n            config.on.key = (event: EventInfo): void => {\n                // Override CTRL+A event. Native one cause editor switch on first try\n                if (event.data.code === 1114177) {\n                    // CTRL + A\n                    event.cancel();\n                    event.stop();\n                    this.instance.document.$.execCommand('SelectAll');\n                }\n                if (keyEvents) {\n                    keyEvents(event);\n                }\n            };\n            // CKEditor replace textarea\n            if (this.inline) {\n                this.instance = CKEDITOR.inline(\n                    this.host.nativeElement,\n                    config\n                );\n            } else {\n                this.instance = CKEDITOR.replace(\n                    this.host.nativeElement,\n                    config\n                );\n            }\n\n            // Set initial value\n            this.instance.setData(this.value);\n\n            // listen for instanceReady event\n            this.listenEvent('instanceReady', evt => {\n                // send the evt to the EventEmitter\n                this.ready.emit(evt);\n            });\n\n            // CKEditor blur event\n            this.listenEvent('blur', evt => {\n                this.blur.emit(evt);\n                this.onTouched();\n            });\n\n            // CKEditor focus event\n            this.listenEvent('focus', evt => {\n                if (!this.readonly) {\n                    this.focus.emit(evt);\n                }\n            });\n            this.registerChangeListener();\n        }\n    }\n\n    /**\n     * Implements ControlValueAccessor\n     */\n    public writeValue(value: string): void {\n        this._value = value;\n        this.writeValue$.next(value);\n    }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    public onChange(_x: unknown): void { }\n\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    public onTouched(): void { }\n\n    public registerOnChange(fn: (_a: unknown) => void): void {\n        this.onChange = fn;\n    }\n\n    public registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.disabled$.next(isDisabled);\n    }\n\n    /**\n     * Return the word at cursor position.\n     *  - If the cursor is at the end of a word, it return that word.\n     *  - If the cursor is at the begining of a word, it return that word.\n     *  - If the cursor is in the middle of a word, it return that word.\n     *  - If there are no word nearly the cursor, return null\n     */\n    public getWordAtCursor(): string {\n        const range = this.instance.getSelection().getRanges(true)[0];\n        if (!range) {\n            return null;\n        }\n        const word = this.firstTextNode(range);\n        return (word?.toReplace) || null;\n    }\n\n    public hasActiveSelection(): boolean {\n        return !!this.getSelectedText();\n    }\n\n    public getSelectedText(): string {\n        if (this.instance) {\n            const selection = this.instance.getSelection();\n            return selection.getSelectedText();\n        }\n        return '';\n    }\n\n    /**\n     * Replace the content of the editor.\n     *  - If there is an active selection, replace this selection\n     *  - If the editor is empty, simply insert the text\n     *  - If the cursor is near a word, replace this word with the text\n     *  - If there is no selection, no word near the cursor, simply insert the text at the cursor position\n     * @param replace the string to replace with\n     */\n    public replace(replace: string): void {\n        if (!replace || !this.instance) {\n            return;\n        }\n        const selection = this.getSelectedText();\n        if (selection) {\n            // Focus is used during the CKEDITOR insertText process and cause deselection of the selected text\n            // So we temporarily deactivate it\n            const focus = this.instance.focus;\n            this.instance.focus = (): void => undefined as void;\n            this.instance.insertHtml(replace);\n            this.instance.focus = focus;\n            return;\n        }\n\n        const range = this.instance.getSelection().getRanges(true)[0];\n        if (!range) {\n            this.instance.insertHtml(replace);\n            return;\n        }\n        const text = this.firstTextNode(range);\n        if (text) {\n            this.replaceWord(text, replace);\n        } else {\n            this.instance.insertHtml(replace);\n        }\n        this.updateValue();\n        this.setFocus();\n    }\n\n    public setFocus(): void {\n        this.focus$.next();\n    }\n\n    private registerChangeListener(): void {\n        // CKEditor change event\n        this.onDataChangeListener = this.listenEvent('change', () => {\n            this.onCkeditorChange$.next();\n        });\n    }\n\n    private hasTextNodeAsChild(node: any, reverse = false): any {\n        const children: any[] = node.getChildren().toArray();\n        if (reverse) {\n            // eslint-disable-next-line no-loops/no-loops\n            for (let i = children.length - 1; i >= 0; i--) {\n                const child = children[i];\n                if (child.type === CKEDITOR.NODE_TEXT) {\n                    return child;\n                } else {\n                    const inChild = this.hasTextNodeAsChild(child);\n                    if (inChild) {\n                        return inChild;\n                    }\n                }\n            }\n        } else {\n            // eslint-disable-next-line no-loops/no-loops\n            for (const child of children) {\n                if (child.type === CKEDITOR.NODE_TEXT) {\n                    return child;\n                } else {\n                    const inChild = this.hasTextNodeAsChild(child);\n                    if (inChild) {\n                        return inChild;\n                    }\n                }\n            }\n        }\n        return null;\n    }\n\n    private mergeTextNodeAroundWithDirection(\n        textNode: any,\n        reverse = false\n    ): void {\n        const toRemove = [];\n        let newText = textNode.getText();\n        let x = textNode;\n        // eslint-disable-next-line no-loops/no-loops\n        while ((x = reverse ? x.getPrevious() : x.getNext)) {\n            if (\n                x.type !== CKEDITOR.NODE_TEXT ||\n                x\n                    .getText()\n                    .charAt(reverse ? x.getText().length - 1 : 0)\n                    .match(/[\\s,;.:!?]/)\n            ) {\n                break;\n            }\n            if (reverse) {\n                // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n                newText = x.getText() + newText;\n            } else {\n                newText += x.getText();\n            }\n            toRemove.push(x);\n        }\n        if (toRemove.length > 0) {\n            textNode.setText(newText);\n            toRemove.forEach(node => node.remove());\n        }\n    }\n\n    private mergeTextNodeAround(textNode: any): any {\n        this.mergeTextNodeAroundWithDirection(textNode, true);\n        this.mergeTextNodeAroundWithDirection(textNode);\n        return textNode;\n    }\n\n    private firstNonEmptyTextNode(node: any, reverse = false): any {\n        let x = node;\n        // eslint-disable-next-line no-loops/no-loops\n        while ((x = reverse ? x.getPrevious() : x.getNext())) {\n            if (x.type === CKEDITOR.NODE_TEXT) {\n                if (x.getText() !== '') {\n                    return x;\n                }\n            } else {\n                return x;\n            }\n        }\n\n        return undefined;\n    }\n\n    private trim(text: string): string {\n        if (text) {\n            text = text.replace(/[\\u200b\\u00A0]/g, '').trim();\n        }\n        return text;\n    }\n\n    private extractFirstWord(text: string, reverse = false): string {\n        if (!text) {\n            return text;\n        }\n        if (text.includes(' ')) {\n            const spaceSplit = text.split(' ');\n            return this.trim(spaceSplit[reverse ? spaceSplit.length - 1 : 0]);\n        } else {\n            return this.trim(text);\n        }\n    }\n\n    private firstTextNodeResult(selectedNode: any, reverse = false, firstNodeIsText = false): {\n        textNode: any;\n        firstNodeIsText: boolean;\n        toReplace: string;\n    } {\n        const text: string = selectedNode.getText();\n        if (this.trim(text) && this.trim(text.substring(text.length - 1))) {\n            const node = this.mergeTextNodeAround(selectedNode);\n            return {\n                textNode: node,\n                firstNodeIsText: firstNodeIsText,\n                toReplace: this.extractFirstWord(node.getText() as string, reverse)\n            };\n        }\n        return null;\n    }\n\n    private firstTextNodeWithDirection(range: any, reverse = false): {\n        textNode: any;\n        firstNodeIsText: boolean;\n        toReplace: string;\n    } {\n        const startContainer = range.startContainer;\n        if (reverse && startContainer.type === CKEDITOR.NODE_TEXT) {\n            return this.firstTextNodeResult(startContainer, reverse, true);\n        }\n        const startNode: any = startContainer.type === CKEDITOR.NODE_TEXT ? ((reverse && this.firstNonEmptyTextNode(startContainer, true)) || this.firstNonEmptyTextNode(startContainer)) : startContainer.getChildren().getItem(range.startOffset - 1);\n        if (startNode) {\n            if (startNode.type === CKEDITOR.NODE_TEXT) {\n                return this.firstTextNodeResult(startNode, reverse);\n            }\n            let x = this.hasTextNodeAsChild(startNode, reverse);\n            if (x) {\n                return this.firstTextNodeResult(x, reverse);\n            }\n            x = startNode;\n            // eslint-disable-next-line no-loops/no-loops\n            while ((x = reverse ? x.getPrevious() : x.getNext())) {\n                if (x.type === CKEDITOR.NODE_TEXT) {\n                    return this.firstTextNodeResult(x, reverse);\n                }\n                const textNode = this.hasTextNodeAsChild(x, reverse);\n                if (textNode) {\n                    return this.firstTextNodeResult(textNode, reverse);\n                }\n            }\n        }\n        return null;\n    }\n\n    private firstTextNode(\n        range: any\n    ): { textNode: any; firstNodeIsText: boolean; toReplace: string } {\n        let textNode: {\n            textNode: any;\n            firstNodeIsText: boolean;\n            toReplace: string;\n        } = this.firstTextNodeWithDirection(range, true);\n        if (!textNode) {\n            textNode = this.firstTextNodeWithDirection(range);\n        }\n        return textNode;\n    }\n\n    private replaceWord(\n        node: { textNode: any; firstNodeIsText: boolean; toReplace: string },\n        replace: string\n    ): void {\n        const index = node.textNode.getText().lastIndexOf(node.toReplace);\n        if (index !== -1) {\n            const beforeText = node.textNode.getText().substring(0, index);\n            // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n            const afterText = node.textNode.getText().substring(index + node.toReplace.length) as string | Text;\n            node.textNode.setText(beforeText);\n            // Wrap into a span otherwise methode createFromHtml will only take the html element :\n            // For instance if replace is 'abc<br/>def', createFromHtml will create an html text element with abc only\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            const newElement = CKEDITOR.dom.element.createFromHtml(`<span>${CKEDITOR.tools.htmlDecode(CKEDITOR.tools.transformPlainTextToHtml(\n                replace,\n                CKEDITOR.ENTER_BR\n            ))}</span>`);\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            newElement.insertAfter(node.textNode);\n            // eslint-disable-next-line @typescript-eslint/restrict-plus-operands\n            if (node.textNode.getText().substring(index + node.toReplace.length)) {\n                const end = new CKEDITOR.dom.text(afterText);\n                end.insertAfter(newElement);\n            }\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            this.instance.getSelection().selectElement(node.textNode);\n            const tmpRange = this.instance.getSelection().getRanges()[0];\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-argument\n            tmpRange.setStartAfter(node.textNode);\n            tmpRange.select();\n        }\n    }\n\n    private updateCkeditorInstanceValue(value: string): void {\n        if (this.instance && !this.isDestroyed) {\n            this.onDataChangeListener?.removeListener();\n            // The data change listener must be removed before setting the data,\n            // valueAccessor.onChange is called by the data change listener and must not be subsequently called on writeValue call which fire\n            // the data change event by calling instance.setData.\n            this.instance.setData(value, {\n                callback: (): void => {\n                    this.registerChangeListener();\n                }\n            });\n        } else {\n            this.host.nativeElement.value = value;\n        }\n    }\n\n    private listenEvent(eventType: string, callback: (evt: CKEDITOR.eventInfo) => void): void {\n        this.instance.on(eventType, callback);\n        this.registeredListeners.set(eventType, callback);\n    }\n\n    private cleanListeners(): void {\n        this.registeredListeners.forEach((callback, eventType) => this.instance?.removeListener(eventType, callback));\n    }\n}\n","<textarea #host (onchange)=\"textAreaChange()\" style=\"visibility: hidden\"></textarea>\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nexport class StringUtils {\n    public static getLastWord(from: string, cursorPosition: number): string {\n        if (!from) {\n            return null;\n        }\n        if (from.length > cursorPosition) {\n            from =\n                from.substr(0, cursorPosition) +\n                from.substr(cursorPosition).split(/[\\s,;.:]/)[0];\n        }\n        if (!from) {\n            return null;\n        }\n        // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n        if (from.match(/[\\s,.!?;:]$/)) {\n            return null;\n        }\n        const stringArray = from.split(/[\\s,.!?;:]/);\n        return stringArray[stringArray.length - 1];\n    }\n\n    public static insert(from: string, newValue: string, cursorStartPosition: number, cursorEndPosition: number): { value: string; newStartPosition: number; newEndPosition: number } {\n        if (cursorStartPosition === cursorEndPosition) {\n            const result = {\n                value:\n                    from.substring(\n                        0,\n                        cursorStartPosition === 0 ? 0 : cursorStartPosition + 1\n                    ) + newValue,\n                newStartPosition: 0,\n                newEndPosition: 0\n            };\n            result.newStartPosition = result.value.length;\n            result.newEndPosition = result.value.length;\n            return result;\n        } else {\n            const result = {\n                value: from.substring(0, cursorStartPosition),\n                newStartPosition: 0,\n                newEndPosition: 0\n            };\n            result.newStartPosition = result.value.length;\n            result.value += newValue;\n            result.newEndPosition = result.value.length;\n            result.value = result.value + from.substring(cursorEndPosition);\n            return result;\n        }\n    }\n\n    public static replace(\n        from: string,\n        lastValue: string,\n        newValue: string,\n        cursorStartPosition: number,\n        cursorEndPosition: number\n    ): { newStartPosition: number; newEndPosition: number; value: string } {\n        if (cursorStartPosition === cursorEndPosition) {\n            let position = cursorStartPosition;\n            // eslint-disable-next-line @typescript-eslint/prefer-regexp-exec\n            if (from.charAt(position).match(/[\\s,;.:]/)) {\n                position--;\n            }\n            // eslint-disable-next-line no-loops/no-loops, @typescript-eslint/prefer-regexp-exec\n            while (!from.charAt(position).match(/[\\s,;.:]/) && position > 0) {\n                position--;\n            }\n            const result = {\n                value:\n                    from.substring(0, position === 0 ? 0 : position + 1) +\n                    newValue,\n                newStartPosition: 0,\n                newEndPosition: 0\n            };\n            result.newStartPosition = result.value.length;\n            result.newEndPosition = result.value.length;\n            result.value =\n                result.value +\n                from.substring(\n                    (position === 0 ? 0 : position + 1) +\n                    (lastValue ? lastValue.length : 0)\n                );\n\n            return result;\n        } else {\n            const result = {\n                value: from.substring(0, cursorStartPosition),\n                newStartPosition: 0,\n                newEndPosition: 0\n            };\n            result.newStartPosition = result.value.length;\n            result.value += newValue;\n            result.newEndPosition = result.value.length;\n            result.value = result.value + from.substring(cursorEndPosition);\n            return result;\n        }\n    }\n\n    public static removeLastWord(\n        from: string,\n        cursorStartPosition: number,\n        cursorEndPosition: number\n    ): { startValue: string; endValue: string } {\n        if (cursorStartPosition === cursorEndPosition) {\n            let position = cursorStartPosition;\n            // eslint-disable-next-line no-loops/no-loops, @typescript-eslint/prefer-regexp-exec\n            while (!from.charAt(position).match(/[\\s,;.:]/) && position > 0) {\n                position--;\n            }\n            let endPosition = cursorEndPosition + 1;\n            // eslint-disable-next-line no-loops/no-loops, @typescript-eslint/prefer-regexp-exec\n            while (!from.charAt(endPosition).match(/[\\s,;.:]/) && endPosition < from.length) {\n                endPosition++;\n            }\n            const result = {\n                startValue: from.substring(\n                    0,\n                    position === 0 ? 0 : position + 1\n                ),\n                endValue: from.substring(endPosition)\n            };\n            return result;\n        } else {\n            const result = {\n                startValue: from.substring(0, cursorStartPosition),\n                endValue: from.substring(cursorEndPosition)\n            };\n            return result;\n        }\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { DejaEditorComponent } from './deja-editor.component';\nimport { DejaEditorService } from './deja-editor.service';\n\n/**\n * CKEditorModule\n */\n@NgModule({\n    imports: [CommonModule],\n    declarations: [DejaEditorComponent],\n    exports: [DejaEditorComponent],\n    providers: [DejaEditorService]\n})\nexport class DejaEditorModule {}\n\nexport * from './deja-editor.component';\nexport * from './string.utils';\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Directive, DoCheck, ElementRef, Host, HostBinding, Input, OnDestroy, OnInit, Optional, Self } from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm } from '@angular/forms';\nimport { CanUpdateErrorState, ErrorStateMatcher } from '@angular/material/core';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { _MatInputMixinBase } from '@deja-js/component/core';\nimport { Subject } from 'rxjs';\n\nimport { DejaEditorComponent } from '../deja-editor.component';\n\nlet nextUniqueId = 0;\n\n@Directive({\n    selector: 'deja-editor',\n    providers: [\n        {\n            provide: MatFormFieldControl,\n            useExisting: DejaEditorSelectorDirective\n        }\n    ]\n})\nexport class DejaEditorSelectorDirective extends _MatInputMixinBase implements MatFormFieldControl<string>, DoCheck, OnInit, OnDestroy, CanUpdateErrorState {\n    @Input() public placeholder: string;\n    @HostBinding('attr.aria-describedby') public describedBy = '';\n\n    public errorState: boolean;\n    public autofilled?: boolean;\n    public value: string;\n    // eslint-disable-next-line rxjs/finnish\n    public stateChanges: Subject<void> = new Subject<void>();\n    public focused: boolean;\n    public controlType = 'app-editor';\n\n    protected _disabled = false;\n    protected _uid = `mat-input-${nextUniqueId++}`;\n    protected _id: string;\n    protected _required = false;\n    private _placeholder: HTMLDivElement;\n\n    @Input()\n    public get id(): string {\n        return this._id;\n    }\n\n    public set id(value: string) {\n        this._id = value || this._uid;\n    }\n\n    @Input()\n    public get required(): boolean {\n        return this._required;\n    }\n\n    public set required(value: boolean) {\n        this._required = coerceBooleanProperty(value);\n    }\n\n    @Input()\n    public get disabled(): boolean {\n        if (this.ngControl?.disabled !== null) {\n            return this.ngControl.disabled;\n        }\n        return this._disabled;\n    }\n\n    public set disabled(value: boolean) {\n        this._disabled = coerceBooleanProperty(value);\n\n        // Browsers may not fire the blur event if the input is disabled too quickly.\n        // Reset from here to ensure that the element doesn't become stuck.\n        if (this.focused) {\n            this.focused = false;\n            this.stateChanges.next();\n        }\n    }\n\n    public constructor(\n        @Self() private editor: DejaEditorComponent,\n        @Optional()\n        @Self()\n        public ngControl: NgControl,\n        @Optional() parentForm: NgForm,\n        @Optional() parentFormGroup: FormGroupDirective,\n        defaultErrorStateMatcher: ErrorStateMatcher,\n        @Host() private hostElement: ElementRef<HTMLElement>\n    ) {\n        super(\n            defaultErrorStateMatcher,\n            parentForm,\n            parentFormGroup,\n            ngControl\n        );\n    }\n\n    public onContainerClick(): void {\n        this.editor.setFocus();\n    }\n\n    public setDescribedByIds(ids: string[]): void {\n        this.describedBy = ids.join(' ');\n    }\n\n    public ngOnInit(): void {\n        this.editor.focus.subscribe(() => {\n            this.focused = true;\n            this.stateChanges.next();\n        });\n\n        this.editor.blur.subscribe(() => {\n            this.focused = false;\n            this.stateChanges.next();\n        });\n        this.editor.change.subscribe(() => {\n            this.stateChanges.next();\n        });\n        this.generatePlaceholder();\n    }\n\n    public ngDoCheck(): void {\n        if (this.ngControl) {\n            this.updateErrorState();\n        }\n    }\n\n    public ngOnDestroy(): void {\n        this.stateChanges.complete();\n    }\n\n    public get empty(): boolean {\n        return !this.editor.value;\n    }\n\n    public get shouldLabelFloat(): boolean {\n        if (this.focused || !this.empty) {\n            if (this.empty) {\n                this.attachPlaceholder();\n            } else {\n                this.detachPlaceholder();\n            }\n            return true;\n        } else {\n            this.detachPlaceholder();\n            return false;\n        }\n    }\n\n    private attachPlaceholder(): void {\n        if (this._placeholder && !this._placeholder.parentElement) {\n            this.hostElement.nativeElement.appendChild(this._placeholder);\n        }\n    }\n\n    private detachPlaceholder(): void {\n        if (this._placeholder?.parentElement) {\n            this._placeholder.remove();\n        }\n    }\n\n    private generatePlaceholder(): void {\n        if (this.placeholder) {\n            this._placeholder = document.createElement('div');\n            this._placeholder.style.position = 'absolute';\n            this._placeholder.style.position = 'absolute';\n            this._placeholder.style.left = '0';\n            this._placeholder.style.boxSizing = 'content-box';\n            this._placeholder.style.width = '100%';\n            this._placeholder.style.height = '100%';\n            this._placeholder.style.overflow = 'hidden';\n            this._placeholder.style.pointerEvents = 'none';\n            this._placeholder.style.top = '-0.84375em';\n            this._placeholder.style.paddingTop = '0.84375em';\n            const placeholderChildren = document.createElement('div');\n            placeholderChildren.style.color = 'rgba(0,0,0,0.54)';\n            placeholderChildren.style.top = '1.28125em';\n            placeholderChildren.style.position = 'absolute';\n            const placeholderText = document.createTextNode(this.placeholder);\n            placeholderChildren.appendChild(placeholderText);\n            this._placeholder.appendChild(placeholderChildren);\n        }\n    }\n}\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\n\nimport { NgModule } from '@angular/core';\nimport { MatFormFieldModule } from '@angular/material/form-field';\n\nimport { DejaEditorComponent } from '../deja-editor.component';\nimport { DejaEditorModule } from '../deja-editor.module';\nimport { DejaEditorSelectorDirective } from './deja-editor-selector.directive';\n\n@NgModule({\n    imports: [DejaEditorModule, MatFormFieldModule],\n    declarations: [DejaEditorSelectorDirective],\n    exports: [DejaEditorComponent, DejaEditorSelectorDirective]\n})\nexport class DejaMatEditorModule {}\n\nexport * from './deja-editor-selector.directive';\n","/*\n *  @license\n *  Copyright Hôpitaux Universitaires de Genève. All Rights Reserved.\n *\n *  Use of this source code is governed by an Apache-2.0 license that can be\n *  found in the LICENSE file at https://github.com/DSI-HUG/dejajs-components/blob/master/LICENSE\n */\nexport * from './deja-editor.module';\nexport * from './material-field-wrapper/index';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.DejaEditorService","i1.DejaEditorComponent"],"mappings":"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"}