403Webshell
Server IP : 85.214.143.32  /  Your IP : 216.73.217.113
Web Server : nginx/1.24.0
System : Linux datensicherung.webdress.site 6.8.0-139-generic #139-Ubuntu SMP PREEMPT_DYNAMIC Sat Aug 1 03:52:05 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 7.4.33
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/nextcloud/dist/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/nextcloud/dist/index-CQWytfr1.chunk.mjs.map
{"version":3,"file":"index-CQWytfr1.chunk.mjs","sources":["../node_modules/tributejs/dist/tribute.esm.js","../node_modules/@nextcloud/vue/dist/chunks/NcRichContenteditable-Qw614bJ5.mjs"],"sourcesContent":["if (!Array.prototype.find) {\n    Array.prototype.find = function(predicate) {\n        if (this === null) {\n            throw new TypeError('Array.prototype.find called on null or undefined')\n        }\n        if (typeof predicate !== 'function') {\n            throw new TypeError('predicate must be a function')\n        }\n        var list = Object(this);\n        var length = list.length >>> 0;\n        var thisArg = arguments[1];\n        var value;\n\n        for (var i = 0; i < length; i++) {\n            value = list[i];\n            if (predicate.call(thisArg, value, i, list)) {\n                return value\n            }\n        }\n        return undefined\n    };\n}\n\nif (window && typeof window.CustomEvent !== \"function\") {\n  function CustomEvent$1(event, params) {\n    params = params || {\n      bubbles: false,\n      cancelable: false,\n      detail: undefined\n    };\n    var evt = document.createEvent('CustomEvent');\n    evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n    return evt\n  }\n\n if (typeof window.Event !== 'undefined') {\n   CustomEvent$1.prototype = window.Event.prototype;\n }\n\n  window.CustomEvent = CustomEvent$1;\n}\n\nclass TributeEvents {\n  constructor(tribute) {\n    this.tribute = tribute;\n    this.tribute.events = this;\n  }\n\n  static keys() {\n    return [\n      {\n        key: 9,\n        value: \"TAB\"\n      },\n      {\n        key: 8,\n        value: \"DELETE\"\n      },\n      {\n        key: 13,\n        value: \"ENTER\"\n      },\n      {\n        key: 27,\n        value: \"ESCAPE\"\n      },\n      {\n        key: 32,\n        value: \"SPACE\"\n      },\n      {\n        key: 38,\n        value: \"UP\"\n      },\n      {\n        key: 40,\n        value: \"DOWN\"\n      }\n    ];\n  }\n\n  bind(element) {\n    element.boundKeydown = this.keydown.bind(element, this);\n    element.boundKeyup = this.keyup.bind(element, this);\n    element.boundInput = this.input.bind(element, this);\n\n    element.addEventListener(\"keydown\", element.boundKeydown, false);\n    element.addEventListener(\"keyup\", element.boundKeyup, false);\n    element.addEventListener(\"input\", element.boundInput, false);\n  }\n\n  unbind(element) {\n    element.removeEventListener(\"keydown\", element.boundKeydown, false);\n    element.removeEventListener(\"keyup\", element.boundKeyup, false);\n    element.removeEventListener(\"input\", element.boundInput, false);\n\n    delete element.boundKeydown;\n    delete element.boundKeyup;\n    delete element.boundInput;\n  }\n\n  keydown(instance, event) {\n    if (instance.shouldDeactivate(event)) {\n      instance.tribute.isActive = false;\n      instance.tribute.hideMenu();\n    }\n\n    let element = this;\n    instance.commandEvent = false;\n\n    TributeEvents.keys().forEach(o => {\n      if (o.key === event.keyCode) {\n        instance.commandEvent = true;\n        instance.callbacks()[o.value.toLowerCase()](event, element);\n      }\n    });\n  }\n\n  input(instance, event) {\n    instance.inputEvent = true;\n    instance.keyup.call(this, instance, event);\n  }\n\n  click(instance, event) {\n    let tribute = instance.tribute;\n    if (tribute.menu && tribute.menu.contains(event.target)) {\n      let li = event.target;\n      event.preventDefault();\n      event.stopPropagation();\n      while (li.nodeName.toLowerCase() !== \"li\") {\n        li = li.parentNode;\n        if (!li || li === tribute.menu) {\n          throw new Error(\"cannot find the <li> container for the click\");\n        }\n      }\n      tribute.selectItemAtIndex(li.getAttribute(\"data-index\"), event);\n      tribute.hideMenu();\n\n      // TODO: should fire with externalTrigger and target is outside of menu\n    } else if (tribute.current.element && !tribute.current.externalTrigger) {\n      tribute.current.externalTrigger = false;\n      setTimeout(() => tribute.hideMenu());\n    }\n  }\n\n  keyup(instance, event) {\n    if (instance.inputEvent) {\n      instance.inputEvent = false;\n    }\n    instance.updateSelection(this);\n\n    if (event.keyCode === 27) return;\n\n    if (!instance.tribute.allowSpaces && instance.tribute.hasTrailingSpace) {\n      instance.tribute.hasTrailingSpace = false;\n      instance.commandEvent = true;\n      instance.callbacks()[\"space\"](event, this);\n      return;\n    }\n\n    if (!instance.tribute.isActive) {\n      if (instance.tribute.autocompleteMode) {\n        instance.callbacks().triggerChar(event, this, \"\");\n      } else {\n        let keyCode = instance.getKeyCode(instance, this, event);\n\n        if (isNaN(keyCode) || !keyCode) return;\n\n        let trigger = instance.tribute.triggers().find(trigger => {\n          return trigger.charCodeAt(0) === keyCode;\n        });\n\n        if (typeof trigger !== \"undefined\") {\n          instance.callbacks().triggerChar(event, this, trigger);\n        }\n      }\n    }\n\n    if (\n      instance.tribute.current.mentionText.length <\n      instance.tribute.current.collection.menuShowMinLength\n    ) {\n      return;\n    }\n\n    if (\n      ((instance.tribute.current.trigger ||\n        instance.tribute.autocompleteMode) &&\n        instance.commandEvent === false) ||\n      (instance.tribute.isActive && event.keyCode === 8)\n    ) {\n      instance.tribute.showMenuFor(this, true);\n    }\n  }\n\n  shouldDeactivate(event) {\n    if (!this.tribute.isActive) return false;\n\n    if (this.tribute.current.mentionText.length === 0) {\n      let eventKeyPressed = false;\n      TributeEvents.keys().forEach(o => {\n        if (event.keyCode === o.key) eventKeyPressed = true;\n      });\n\n      return !eventKeyPressed;\n    }\n\n    return false;\n  }\n\n  getKeyCode(instance, el, event) {\n    let tribute = instance.tribute;\n    let info = tribute.range.getTriggerInfo(\n      false,\n      tribute.hasTrailingSpace,\n      true,\n      tribute.allowSpaces,\n      tribute.autocompleteMode\n    );\n\n    if (info) {\n      return info.mentionTriggerChar.charCodeAt(0);\n    } else {\n      return false;\n    }\n  }\n\n  updateSelection(el) {\n    this.tribute.current.element = el;\n    let info = this.tribute.range.getTriggerInfo(\n      false,\n      this.tribute.hasTrailingSpace,\n      true,\n      this.tribute.allowSpaces,\n      this.tribute.autocompleteMode\n    );\n\n    if (info) {\n      this.tribute.current.selectedPath = info.mentionSelectedPath;\n      this.tribute.current.mentionText = info.mentionText;\n      this.tribute.current.selectedOffset = info.mentionSelectedOffset;\n    }\n  }\n\n  callbacks() {\n    return {\n      triggerChar: (e, el, trigger) => {\n        let tribute = this.tribute;\n        tribute.current.trigger = trigger;\n\n        let collectionItem = tribute.collection.find(item => {\n          return item.trigger === trigger;\n        });\n\n        tribute.current.collection = collectionItem;\n\n        if (\n          tribute.current.mentionText.length >=\n            tribute.current.collection.menuShowMinLength &&\n          tribute.inputEvent\n        ) {\n          tribute.showMenuFor(el, true);\n        }\n      },\n      enter: (e, el) => {\n        // choose selection\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          setTimeout(() => {\n            this.tribute.selectItemAtIndex(this.tribute.menuSelected, e);\n            this.tribute.hideMenu();\n          }, 0);\n        }\n      },\n      escape: (e, el) => {\n        if (this.tribute.isActive) {\n          e.preventDefault();\n          e.stopPropagation();\n          this.tribute.isActive = false;\n          this.tribute.hideMenu();\n        }\n      },\n      tab: (e, el) => {\n        // choose first match\n        this.callbacks().enter(e, el);\n      },\n      space: (e, el) => {\n        if (this.tribute.isActive) {\n          if (this.tribute.spaceSelectsMatch) {\n            this.callbacks().enter(e, el);\n          } else if (!this.tribute.allowSpaces) {\n            e.stopPropagation();\n            setTimeout(() => {\n              this.tribute.hideMenu();\n              this.tribute.isActive = false;\n            }, 0);\n          }\n        }\n      },\n      up: (e, el) => {\n        // navigate up ul\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          let count = this.tribute.current.filteredItems.length,\n            selected = this.tribute.menuSelected;\n\n          if (count > selected && selected > 0) {\n            this.tribute.menuSelected--;\n            this.setActiveLi();\n          } else if (selected === 0) {\n            this.tribute.menuSelected = count - 1;\n            this.setActiveLi();\n            this.tribute.menu.scrollTop = this.tribute.menu.scrollHeight;\n          }\n        }\n      },\n      down: (e, el) => {\n        // navigate down ul\n        if (this.tribute.isActive && this.tribute.current.filteredItems) {\n          e.preventDefault();\n          e.stopPropagation();\n          let count = this.tribute.current.filteredItems.length - 1,\n            selected = this.tribute.menuSelected;\n\n          if (count > selected) {\n            this.tribute.menuSelected++;\n            this.setActiveLi();\n          } else if (count === selected) {\n            this.tribute.menuSelected = 0;\n            this.setActiveLi();\n            this.tribute.menu.scrollTop = 0;\n          }\n        }\n      },\n      delete: (e, el) => {\n        if (\n          this.tribute.isActive &&\n          this.tribute.current.mentionText.length < 1\n        ) {\n          this.tribute.hideMenu();\n        } else if (this.tribute.isActive) {\n          this.tribute.showMenuFor(el);\n        }\n      }\n    };\n  }\n\n  setActiveLi(index) {\n    let lis = this.tribute.menu.querySelectorAll(\"li\"),\n      length = lis.length >>> 0;\n\n    if (index) this.tribute.menuSelected = parseInt(index);\n\n    for (let i = 0; i < length; i++) {\n      let li = lis[i];\n      if (i === this.tribute.menuSelected) {\n        li.classList.add(this.tribute.current.collection.selectClass);\n\n        let liClientRect = li.getBoundingClientRect();\n        let menuClientRect = this.tribute.menu.getBoundingClientRect();\n\n        if (liClientRect.bottom > menuClientRect.bottom) {\n          let scrollDistance = liClientRect.bottom - menuClientRect.bottom;\n          this.tribute.menu.scrollTop += scrollDistance;\n        } else if (liClientRect.top < menuClientRect.top) {\n          let scrollDistance = menuClientRect.top - liClientRect.top;\n          this.tribute.menu.scrollTop -= scrollDistance;\n        }\n      } else {\n        li.classList.remove(this.tribute.current.collection.selectClass);\n      }\n    }\n  }\n\n  getFullHeight(elem, includeMargin) {\n    let height = elem.getBoundingClientRect().height;\n\n    if (includeMargin) {\n      let style = elem.currentStyle || window.getComputedStyle(elem);\n      return (\n        height + parseFloat(style.marginTop) + parseFloat(style.marginBottom)\n      );\n    }\n\n    return height;\n  }\n}\n\nclass TributeMenuEvents {\n  constructor(tribute) {\n    this.tribute = tribute;\n    this.tribute.menuEvents = this;\n    this.menu = this.tribute.menu;\n  }\n\n  bind(menu) {\n    this.menuClickEvent = this.tribute.events.click.bind(null, this);\n    this.menuContainerScrollEvent = this.debounce(\n      () => {\n        if (this.tribute.isActive) {\n          this.tribute.showMenuFor(this.tribute.current.element, false);\n        }\n      },\n      300,\n      false\n    );\n    this.windowResizeEvent = this.debounce(\n      () => {\n        if (this.tribute.isActive) {\n          this.tribute.range.positionMenuAtCaret(true);\n        }\n      },\n      300,\n      false\n    );\n\n    // fixes IE11 issues with mousedown\n    this.tribute.range\n      .getDocument()\n      .addEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n    this.tribute.range\n      .getDocument()\n      .addEventListener(\"mousedown\", this.menuClickEvent, false);\n    window.addEventListener(\"resize\", this.windowResizeEvent);\n\n    if (this.menuContainer) {\n      this.menuContainer.addEventListener(\n        \"scroll\",\n        this.menuContainerScrollEvent,\n        false\n      );\n    } else {\n      window.addEventListener(\"scroll\", this.menuContainerScrollEvent);\n    }\n  }\n\n  unbind(menu) {\n    this.tribute.range\n      .getDocument()\n      .removeEventListener(\"mousedown\", this.menuClickEvent, false);\n    this.tribute.range\n      .getDocument()\n      .removeEventListener(\"MSPointerDown\", this.menuClickEvent, false);\n    window.removeEventListener(\"resize\", this.windowResizeEvent);\n\n    if (this.menuContainer) {\n      this.menuContainer.removeEventListener(\n        \"scroll\",\n        this.menuContainerScrollEvent,\n        false\n      );\n    } else {\n      window.removeEventListener(\"scroll\", this.menuContainerScrollEvent);\n    }\n  }\n\n  debounce(func, wait, immediate) {\n    var timeout;\n    return () => {\n      var context = this,\n        args = arguments;\n      var later = () => {\n        timeout = null;\n        if (!immediate) func.apply(context, args);\n      };\n      var callNow = immediate && !timeout;\n      clearTimeout(timeout);\n      timeout = setTimeout(later, wait);\n      if (callNow) func.apply(context, args);\n    };\n  }\n}\n\n// Thanks to https://github.com/jeff-collins/ment.io\n\nclass TributeRange {\n    constructor(tribute) {\n        this.tribute = tribute;\n        this.tribute.range = this;\n    }\n\n    getDocument() {\n        let iframe;\n        if (this.tribute.current.collection) {\n            iframe = this.tribute.current.collection.iframe;\n        }\n\n        if (!iframe) {\n            return document\n        }\n\n        return iframe.contentWindow.document\n    }\n\n    positionMenuAtCaret(scrollTo) {\n        let context = this.tribute.current,\n            coordinates;\n\n        let info = this.getTriggerInfo(false, this.tribute.hasTrailingSpace, true, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n        if (typeof info !== 'undefined') {\n\n            if(!this.tribute.positionMenu){\n                this.tribute.menu.style.cssText = `display: block;`;\n                return\n            }\n\n            if (!this.isContentEditable(context.element)) {\n                coordinates = this.getTextAreaOrInputUnderlinePosition(this.tribute.current.element,\n                    info.mentionPosition);\n            }\n            else {\n                coordinates = this.getContentEditableCaretPosition(info.mentionPosition);\n            }\n\n            this.tribute.menu.style.cssText = `top: ${coordinates.top}px;\n                                     left: ${coordinates.left}px;\n                                     right: ${coordinates.right}px;\n                                     bottom: ${coordinates.bottom}px;\n                                     position: absolute;\n                                     display: block;`;\n\n            if (coordinates.left === 'auto') {\n                this.tribute.menu.style.left = 'auto';\n            }\n\n            if (coordinates.top === 'auto') {\n                this.tribute.menu.style.top = 'auto';\n            }\n\n            if (scrollTo) this.scrollIntoView();\n\n            window.setTimeout(() => {\n                let menuDimensions = {\n                   width: this.tribute.menu.offsetWidth,\n                   height: this.tribute.menu.offsetHeight\n                };\n                let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n                let menuIsOffScreenHorizontally = window.innerWidth > menuDimensions.width && (menuIsOffScreen.left || menuIsOffScreen.right);\n                let menuIsOffScreenVertically = window.innerHeight > menuDimensions.height && (menuIsOffScreen.top || menuIsOffScreen.bottom);\n                if (menuIsOffScreenHorizontally || menuIsOffScreenVertically) {\n                    this.tribute.menu.style.cssText = 'display: none';\n                    this.positionMenuAtCaret(scrollTo);\n                }\n            }, 0);\n\n        } else {\n            this.tribute.menu.style.cssText = 'display: none';\n        }\n    }\n\n    get menuContainerIsBody() {\n        return this.tribute.menuContainer === document.body || !this.tribute.menuContainer;\n    }\n\n\n    selectElement(targetElement, path, offset) {\n        let range;\n        let elem = targetElement;\n\n        if (path) {\n            for (var i = 0; i < path.length; i++) {\n                elem = elem.childNodes[path[i]];\n                if (elem === undefined) {\n                    return\n                }\n                while (elem.length < offset) {\n                    offset -= elem.length;\n                    elem = elem.nextSibling;\n                }\n                if (elem.childNodes.length === 0 && !elem.length) {\n                    elem = elem.previousSibling;\n                }\n            }\n        }\n        let sel = this.getWindowSelection();\n\n        range = this.getDocument().createRange();\n        range.setStart(elem, offset);\n        range.setEnd(elem, offset);\n        range.collapse(true);\n\n        try {\n            sel.removeAllRanges();\n        } catch (error) {}\n\n        sel.addRange(range);\n        targetElement.focus();\n    }\n\n    replaceTriggerText(text, requireLeadingSpace, hasTrailingSpace, originalEvent, item) {\n        let info = this.getTriggerInfo(true, hasTrailingSpace, requireLeadingSpace, this.tribute.allowSpaces, this.tribute.autocompleteMode);\n\n        if (info !== undefined) {\n            let context = this.tribute.current;\n            let replaceEvent = new CustomEvent('tribute-replaced', {\n                detail: {\n                    item: item,\n                    instance: context,\n                    context: info,\n                    event: originalEvent,\n                }\n            });\n\n            if (!this.isContentEditable(context.element)) {\n                let myField = this.tribute.current.element;\n                let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n                    ? this.tribute.replaceTextSuffix\n                    : ' ';\n                text += textSuffix;\n                let startPos = info.mentionPosition;\n                let endPos = info.mentionPosition + info.mentionText.length + textSuffix.length;\n                if (!this.tribute.autocompleteMode) {\n                    endPos += info.mentionTriggerChar.length - 1;\n                }\n                myField.value = myField.value.substring(0, startPos) + text +\n                    myField.value.substring(endPos, myField.value.length);\n                myField.selectionStart = startPos + text.length;\n                myField.selectionEnd = startPos + text.length;\n            } else {\n                // add a space to the end of the pasted text\n                let textSuffix = typeof this.tribute.replaceTextSuffix == 'string'\n                    ? this.tribute.replaceTextSuffix\n                    : '\\xA0';\n                text += textSuffix;\n                let endPos = info.mentionPosition + info.mentionText.length;\n                if (!this.tribute.autocompleteMode) {\n                    endPos += info.mentionTriggerChar.length;\n                }\n                this.pasteHtml(text, info.mentionPosition, endPos);\n            }\n\n            context.element.dispatchEvent(new CustomEvent('input', { bubbles: true }));\n            context.element.dispatchEvent(replaceEvent);\n        }\n    }\n\n    pasteHtml(html, startPos, endPos) {\n        let range, sel;\n        sel = this.getWindowSelection();\n        range = this.getDocument().createRange();\n        range.setStart(sel.anchorNode, startPos);\n        range.setEnd(sel.anchorNode, endPos);\n        range.deleteContents();\n\n        let el = this.getDocument().createElement('div');\n        el.innerHTML = html;\n        let frag = this.getDocument().createDocumentFragment(),\n            node, lastNode;\n        while ((node = el.firstChild)) {\n            lastNode = frag.appendChild(node);\n        }\n        range.insertNode(frag);\n\n        // Preserve the selection\n        if (lastNode) {\n            range = range.cloneRange();\n            range.setStartAfter(lastNode);\n            range.collapse(true);\n            sel.removeAllRanges();\n            sel.addRange(range);\n        }\n    }\n\n    getWindowSelection() {\n        if (this.tribute.collection.iframe) {\n            return this.tribute.collection.iframe.contentWindow.getSelection()\n        }\n\n        return window.getSelection()\n    }\n\n    getNodePositionInParent(element) {\n        if (element.parentNode === null) {\n            return 0\n        }\n\n        for (var i = 0; i < element.parentNode.childNodes.length; i++) {\n            let node = element.parentNode.childNodes[i];\n\n            if (node === element) {\n                return i\n            }\n        }\n    }\n\n    getContentEditableSelectedPath(ctx) {\n        let sel = this.getWindowSelection();\n        let selected = sel.anchorNode;\n        let path = [];\n        let offset;\n\n        if (selected != null) {\n            let i;\n            let ce = selected.contentEditable;\n            while (selected !== null && ce !== 'true') {\n                i = this.getNodePositionInParent(selected);\n                path.push(i);\n                selected = selected.parentNode;\n                if (selected !== null) {\n                    ce = selected.contentEditable;\n                }\n            }\n            path.reverse();\n\n            // getRangeAt may not exist, need alternative\n            offset = sel.getRangeAt(0).startOffset;\n\n            return {\n                selected: selected,\n                path: path,\n                offset: offset\n            }\n        }\n    }\n\n    getTextPrecedingCurrentSelection() {\n        let context = this.tribute.current,\n            text = '';\n\n        if (!this.isContentEditable(context.element)) {\n            let textComponent = this.tribute.current.element;\n            if (textComponent) {\n                let startPos = textComponent.selectionStart;\n                if (textComponent.value && startPos >= 0) {\n                    text = textComponent.value.substring(0, startPos);\n                }\n            }\n\n        } else {\n            let selectedElem = this.getWindowSelection().anchorNode;\n\n            if (selectedElem != null) {\n                let workingNodeContent = selectedElem.textContent;\n                let selectStartOffset = this.getWindowSelection().getRangeAt(0).startOffset;\n\n                if (workingNodeContent && selectStartOffset >= 0) {\n                    text = workingNodeContent.substring(0, selectStartOffset);\n                }\n            }\n        }\n\n        return text\n    }\n\n    getLastWordInText(text) {\n        text = text.replace(/\\u00A0/g, ' '); // https://stackoverflow.com/questions/29850407/how-do-i-replace-unicode-character-u00a0-with-a-space-in-javascript\n        let wordsArray = text.split(/\\s+/);\n        let worldsCount = wordsArray.length - 1;\n        return wordsArray[worldsCount].trim()\n    }\n\n    getTriggerInfo(menuAlreadyActive, hasTrailingSpace, requireLeadingSpace, allowSpaces, isAutocomplete) {\n        let ctx = this.tribute.current;\n        let selected, path, offset;\n\n        if (!this.isContentEditable(ctx.element)) {\n            selected = this.tribute.current.element;\n        } else {\n            let selectionInfo = this.getContentEditableSelectedPath(ctx);\n\n            if (selectionInfo) {\n                selected = selectionInfo.selected;\n                path = selectionInfo.path;\n                offset = selectionInfo.offset;\n            }\n        }\n\n        let effectiveRange = this.getTextPrecedingCurrentSelection();\n        let lastWordOfEffectiveRange = this.getLastWordInText(effectiveRange);\n\n        if (isAutocomplete) {\n            return {\n                mentionPosition: effectiveRange.length - lastWordOfEffectiveRange.length,\n                mentionText: lastWordOfEffectiveRange,\n                mentionSelectedElement: selected,\n                mentionSelectedPath: path,\n                mentionSelectedOffset: offset\n            }\n        }\n\n        if (effectiveRange !== undefined && effectiveRange !== null) {\n            let mostRecentTriggerCharPos = -1;\n            let triggerChar;\n\n            this.tribute.collection.forEach(config => {\n                let c = config.trigger;\n                let idx = config.requireLeadingSpace ?\n                    this.lastIndexWithLeadingSpace(effectiveRange, c) :\n                    effectiveRange.lastIndexOf(c);\n\n                if (idx > mostRecentTriggerCharPos) {\n                    mostRecentTriggerCharPos = idx;\n                    triggerChar = c;\n                    requireLeadingSpace = config.requireLeadingSpace;\n                }\n            });\n\n            if (mostRecentTriggerCharPos >= 0 &&\n                (\n                    mostRecentTriggerCharPos === 0 ||\n                    !requireLeadingSpace ||\n                    /[\\xA0\\s]/g.test(\n                        effectiveRange.substring(\n                            mostRecentTriggerCharPos - 1,\n                            mostRecentTriggerCharPos)\n                    )\n                )\n            ) {\n                let currentTriggerSnippet = effectiveRange.substring(mostRecentTriggerCharPos + triggerChar.length,\n                    effectiveRange.length);\n\n                triggerChar = effectiveRange.substring(mostRecentTriggerCharPos, mostRecentTriggerCharPos + triggerChar.length);\n                let firstSnippetChar = currentTriggerSnippet.substring(0, 1);\n                let leadingSpace = currentTriggerSnippet.length > 0 &&\n                    (\n                        firstSnippetChar === ' ' ||\n                        firstSnippetChar === '\\xA0'\n                    );\n                if (hasTrailingSpace) {\n                    currentTriggerSnippet = currentTriggerSnippet.trim();\n                }\n\n                let regex = allowSpaces ? /[^\\S ]/g : /[\\xA0\\s]/g;\n\n                this.tribute.hasTrailingSpace = regex.test(currentTriggerSnippet);\n\n                if (!leadingSpace && (menuAlreadyActive || !(regex.test(currentTriggerSnippet)))) {\n                    return {\n                        mentionPosition: mostRecentTriggerCharPos,\n                        mentionText: currentTriggerSnippet,\n                        mentionSelectedElement: selected,\n                        mentionSelectedPath: path,\n                        mentionSelectedOffset: offset,\n                        mentionTriggerChar: triggerChar\n                    }\n                }\n            }\n        }\n    }\n\n    lastIndexWithLeadingSpace (str, trigger) {\n        let reversedStr = str.split('').reverse().join('');\n        let index = -1;\n\n        for (let cidx = 0, len = str.length; cidx < len; cidx++) {\n            let firstChar = cidx === str.length - 1;\n            let leadingSpace = /\\s/.test(reversedStr[cidx + 1]);\n\n            let match = true;\n            for (let triggerIdx = trigger.length - 1; triggerIdx >= 0; triggerIdx--) {\n              if (trigger[triggerIdx] !== reversedStr[cidx-triggerIdx]) {\n                match = false;\n                break\n              }\n            }\n\n            if (match && (firstChar || leadingSpace)) {\n                index = str.length - 1 - cidx;\n                break\n            }\n        }\n\n        return index\n    }\n\n    isContentEditable(element) {\n        return element.nodeName !== 'INPUT' && element.nodeName !== 'TEXTAREA'\n    }\n\n    isMenuOffScreen(coordinates, menuDimensions) {\n        let windowWidth = window.innerWidth;\n        let windowHeight = window.innerHeight;\n        let doc = document.documentElement;\n        let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n        let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n        let menuTop = typeof coordinates.top === 'number' ? coordinates.top : windowTop + windowHeight - coordinates.bottom - menuDimensions.height;\n        let menuRight = typeof coordinates.right === 'number' ? coordinates.right : coordinates.left + menuDimensions.width;\n        let menuBottom = typeof coordinates.bottom === 'number' ? coordinates.bottom : coordinates.top + menuDimensions.height;\n        let menuLeft = typeof coordinates.left === 'number' ? coordinates.left : windowLeft + windowWidth - coordinates.right - menuDimensions.width;\n\n        return {\n            top: menuTop < Math.floor(windowTop),\n            right: menuRight > Math.ceil(windowLeft + windowWidth),\n            bottom: menuBottom > Math.ceil(windowTop + windowHeight),\n            left: menuLeft < Math.floor(windowLeft)\n        }\n    }\n\n    getMenuDimensions() {\n        // Width of the menu depends of its contents and position\n        // We must check what its width would be without any obstruction\n        // This way, we can achieve good positioning for flipping the menu\n        let dimensions = {\n            width: null,\n            height: null\n        };\n\n        this.tribute.menu.style.cssText = `top: 0px;\n                                 left: 0px;\n                                 position: fixed;\n                                 display: block;\n                                 visibility; hidden;`;\n       dimensions.width = this.tribute.menu.offsetWidth;\n       dimensions.height = this.tribute.menu.offsetHeight;\n\n       this.tribute.menu.style.cssText = `display: none;`;\n\n       return dimensions\n    }\n\n    getTextAreaOrInputUnderlinePosition(element, position, flipped) {\n        let properties = ['direction', 'boxSizing', 'width', 'height', 'overflowX',\n            'overflowY', 'borderTopWidth', 'borderRightWidth',\n            'borderBottomWidth', 'borderLeftWidth', 'paddingTop',\n            'paddingRight', 'paddingBottom', 'paddingLeft',\n            'fontStyle', 'fontVariant', 'fontWeight', 'fontStretch',\n            'fontSize', 'fontSizeAdjust', 'lineHeight', 'fontFamily',\n            'textAlign', 'textTransform', 'textIndent',\n            'textDecoration', 'letterSpacing', 'wordSpacing'\n        ];\n\n        let isFirefox = (window.mozInnerScreenX !== null);\n\n        let div = this.getDocument().createElement('div');\n        div.id = 'input-textarea-caret-position-mirror-div';\n        this.getDocument().body.appendChild(div);\n\n        let style = div.style;\n        let computed = window.getComputedStyle ? getComputedStyle(element) : element.currentStyle;\n\n        style.whiteSpace = 'pre-wrap';\n        if (element.nodeName !== 'INPUT') {\n            style.wordWrap = 'break-word';\n        }\n\n        // position off-screen\n        style.position = 'absolute';\n        style.visibility = 'hidden';\n\n        // transfer the element's properties to the div\n        properties.forEach(prop => {\n            style[prop] = computed[prop];\n        });\n\n        if (isFirefox) {\n            style.width = `${(parseInt(computed.width) - 2)}px`;\n            if (element.scrollHeight > parseInt(computed.height))\n                style.overflowY = 'scroll';\n        } else {\n            style.overflow = 'hidden';\n        }\n\n        div.textContent = element.value.substring(0, position);\n\n        if (element.nodeName === 'INPUT') {\n            div.textContent = div.textContent.replace(/\\s/g, ' ');\n        }\n\n        let span = this.getDocument().createElement('span');\n        span.textContent = element.value.substring(position) || '.';\n        div.appendChild(span);\n\n        let rect = element.getBoundingClientRect();\n        let doc = document.documentElement;\n        let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n        let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n        let top = 0;\n        let left = 0;\n        if (this.menuContainerIsBody) {\n          top = rect.top;\n          left = rect.left;\n        }\n\n        let coordinates = {\n            top: top + windowTop + span.offsetTop + parseInt(computed.borderTopWidth) + parseInt(computed.fontSize) - element.scrollTop,\n            left: left + windowLeft + span.offsetLeft + parseInt(computed.borderLeftWidth)\n        };\n\n        let windowWidth = window.innerWidth;\n        let windowHeight = window.innerHeight;\n\n        let menuDimensions = this.getMenuDimensions();\n        let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n        if (menuIsOffScreen.right) {\n            coordinates.right = windowWidth - coordinates.left;\n            coordinates.left = 'auto';\n        }\n\n        let parentHeight = this.tribute.menuContainer\n            ? this.tribute.menuContainer.offsetHeight\n            : this.getDocument().body.offsetHeight;\n\n        if (menuIsOffScreen.bottom) {\n            let parentRect = this.tribute.menuContainer\n                ? this.tribute.menuContainer.getBoundingClientRect()\n                : this.getDocument().body.getBoundingClientRect();\n            let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n            coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top - span.offsetTop);\n            coordinates.top = 'auto';\n        }\n\n        menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n        if (menuIsOffScreen.left) {\n            coordinates.left = windowWidth > menuDimensions.width\n                ? windowLeft + windowWidth - menuDimensions.width\n                : windowLeft;\n            delete coordinates.right;\n        }\n        if (menuIsOffScreen.top) {\n            coordinates.top = windowHeight > menuDimensions.height\n                ? windowTop + windowHeight - menuDimensions.height\n                : windowTop;\n            delete coordinates.bottom;\n        }\n\n        this.getDocument().body.removeChild(div);\n        return coordinates\n    }\n\n    getContentEditableCaretPosition(selectedNodePosition) {\n        let range;\n        let sel = this.getWindowSelection();\n\n        range = this.getDocument().createRange();\n        range.setStart(sel.anchorNode, selectedNodePosition);\n        range.setEnd(sel.anchorNode, selectedNodePosition);\n\n        range.collapse(false);\n\n        let rect = range.getBoundingClientRect();\n        let doc = document.documentElement;\n        let windowLeft = (window.pageXOffset || doc.scrollLeft) - (doc.clientLeft || 0);\n        let windowTop = (window.pageYOffset || doc.scrollTop) - (doc.clientTop || 0);\n\n        let left = rect.left;\n        let top = rect.top;\n\n        let coordinates = {\n            left: left + windowLeft,\n            top: top + rect.height + windowTop\n        };\n        let windowWidth = window.innerWidth;\n        let windowHeight = window.innerHeight;\n\n        let menuDimensions = this.getMenuDimensions();\n        let menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n\n        if (menuIsOffScreen.right) {\n            coordinates.left = 'auto';\n            coordinates.right = windowWidth - rect.left - windowLeft;\n        }\n\n        let parentHeight = this.tribute.menuContainer\n            ? this.tribute.menuContainer.offsetHeight\n            : this.getDocument().body.offsetHeight;\n\n        if (menuIsOffScreen.bottom) {\n            let parentRect = this.tribute.menuContainer\n                ? this.tribute.menuContainer.getBoundingClientRect()\n                : this.getDocument().body.getBoundingClientRect();\n            let scrollStillAvailable = parentHeight - (windowHeight - parentRect.top);\n\n            coordinates.top = 'auto';\n            coordinates.bottom = scrollStillAvailable + (windowHeight - rect.top);\n        }\n\n        menuIsOffScreen = this.isMenuOffScreen(coordinates, menuDimensions);\n        if (menuIsOffScreen.left) {\n            coordinates.left = windowWidth > menuDimensions.width\n                ? windowLeft + windowWidth - menuDimensions.width\n                : windowLeft;\n            delete coordinates.right;\n        }\n        if (menuIsOffScreen.top) {\n            coordinates.top = windowHeight > menuDimensions.height\n                ? windowTop + windowHeight - menuDimensions.height\n                : windowTop;\n            delete coordinates.bottom;\n        }\n\n        if (!this.menuContainerIsBody) {\n            coordinates.left = coordinates.left ? coordinates.left - this.tribute.menuContainer.offsetLeft : coordinates.left;\n            coordinates.top = coordinates.top ? coordinates.top - this.tribute.menuContainer.offsetTop : coordinates.top;\n        }\n\n        return coordinates\n    }\n\n    scrollIntoView(elem) {\n        let reasonableBuffer = 20,\n            clientRect;\n        let maxScrollDisplacement = 100;\n        let e = this.menu;\n\n        if (typeof e === 'undefined') return;\n\n        while (clientRect === undefined || clientRect.height === 0) {\n            clientRect = e.getBoundingClientRect();\n\n            if (clientRect.height === 0) {\n                e = e.childNodes[0];\n                if (e === undefined || !e.getBoundingClientRect) {\n                    return\n                }\n            }\n        }\n\n        let elemTop = clientRect.top;\n        let elemBottom = elemTop + clientRect.height;\n\n        if (elemTop < 0) {\n            window.scrollTo(0, window.pageYOffset + clientRect.top - reasonableBuffer);\n        } else if (elemBottom > window.innerHeight) {\n            let maxY = window.pageYOffset + clientRect.top - reasonableBuffer;\n\n            if (maxY - window.pageYOffset > maxScrollDisplacement) {\n                maxY = window.pageYOffset + maxScrollDisplacement;\n            }\n\n            let targetY = window.pageYOffset - (window.innerHeight - elemBottom);\n\n            if (targetY > maxY) {\n                targetY = maxY;\n            }\n\n            window.scrollTo(0, targetY);\n        }\n    }\n}\n\n// Thanks to https://github.com/mattyork/fuzzy\nclass TributeSearch {\n    constructor(tribute) {\n        this.tribute = tribute;\n        this.tribute.search = this;\n    }\n\n    simpleFilter(pattern, array) {\n        return array.filter(string => {\n            return this.test(pattern, string)\n        })\n    }\n\n    test(pattern, string) {\n        return this.match(pattern, string) !== null\n    }\n\n    match(pattern, string, opts) {\n        opts = opts || {};\n        let len = string.length,\n            pre = opts.pre || '',\n            post = opts.post || '',\n            compareString = opts.caseSensitive && string || string.toLowerCase();\n\n        if (opts.skip) {\n            return {rendered: string, score: 0}\n        }\n\n        pattern = opts.caseSensitive && pattern || pattern.toLowerCase();\n\n        let patternCache = this.traverse(compareString, pattern, 0, 0, []);\n        if (!patternCache) {\n            return null\n        }\n        return {\n            rendered: this.render(string, patternCache.cache, pre, post),\n            score: patternCache.score\n        }\n    }\n\n    traverse(string, pattern, stringIndex, patternIndex, patternCache) {\n        // if the pattern search at end\n        if (pattern.length === patternIndex) {\n\n            // calculate score and copy the cache containing the indices where it's found\n            return {\n                score: this.calculateScore(patternCache),\n                cache: patternCache.slice()\n            }\n        }\n\n        // if string at end or remaining pattern > remaining string\n        if (string.length === stringIndex || pattern.length - patternIndex > string.length - stringIndex) {\n            return undefined\n        }\n\n        let c = pattern[patternIndex];\n        let index = string.indexOf(c, stringIndex);\n        let best, temp;\n\n        while (index > -1) {\n            patternCache.push(index);\n            temp = this.traverse(string, pattern, index + 1, patternIndex + 1, patternCache);\n            patternCache.pop();\n\n            // if downstream traversal failed, return best answer so far\n            if (!temp) {\n                return best\n            }\n\n            if (!best || best.score < temp.score) {\n                best = temp;\n            }\n\n            index = string.indexOf(c, index + 1);\n        }\n\n        return best\n    }\n\n    calculateScore(patternCache) {\n        let score = 0;\n        let temp = 1;\n\n        patternCache.forEach((index, i) => {\n            if (i > 0) {\n                if (patternCache[i - 1] + 1 === index) {\n                    temp += temp + 1;\n                }\n                else {\n                    temp = 1;\n                }\n            }\n\n            score += temp;\n        });\n\n        return score\n    }\n\n    render(string, indices, pre, post) {\n        var rendered = string.substring(0, indices[0]);\n\n        indices.forEach((index, i) => {\n            rendered += pre + string[index] + post +\n                string.substring(index + 1, (indices[i + 1]) ? indices[i + 1] : string.length);\n        });\n\n        return rendered\n    }\n\n    filter(pattern, arr, opts) {\n        opts = opts || {};\n        return arr\n            .reduce((prev, element, idx, arr) => {\n                let str = element;\n\n                if (opts.extract) {\n                    str = opts.extract(element);\n\n                    if (!str) { // take care of undefineds / nulls / etc.\n                        str = '';\n                    }\n                }\n\n                let rendered = this.match(pattern, str, opts);\n\n                if (rendered != null) {\n                    prev[prev.length] = {\n                        string: rendered.rendered,\n                        score: rendered.score,\n                        index: idx,\n                        original: element\n                    };\n                }\n\n                return prev\n            }, [])\n\n        .sort((a, b) => {\n            let compare = b.score - a.score;\n            if (compare) return compare\n            return a.index - b.index\n        })\n    }\n}\n\nclass Tribute {\n  constructor({\n    values = null,\n    iframe = null,\n    selectClass = \"highlight\",\n    containerClass = \"tribute-container\",\n    itemClass = \"\",\n    trigger = \"@\",\n    autocompleteMode = false,\n    selectTemplate = null,\n    menuItemTemplate = null,\n    lookup = \"key\",\n    fillAttr = \"value\",\n    collection = null,\n    menuContainer = null,\n    noMatchTemplate = null,\n    requireLeadingSpace = true,\n    allowSpaces = false,\n    replaceTextSuffix = null,\n    positionMenu = true,\n    spaceSelectsMatch = false,\n    searchOpts = {},\n    menuItemLimit = null,\n    menuShowMinLength = 0\n  }) {\n    this.autocompleteMode = autocompleteMode;\n    this.menuSelected = 0;\n    this.current = {};\n    this.inputEvent = false;\n    this.isActive = false;\n    this.menuContainer = menuContainer;\n    this.allowSpaces = allowSpaces;\n    this.replaceTextSuffix = replaceTextSuffix;\n    this.positionMenu = positionMenu;\n    this.hasTrailingSpace = false;\n    this.spaceSelectsMatch = spaceSelectsMatch;\n\n    if (this.autocompleteMode) {\n      trigger = \"\";\n      allowSpaces = false;\n    }\n\n    if (values) {\n      this.collection = [\n        {\n          // symbol that starts the lookup\n          trigger: trigger,\n\n          // is it wrapped in an iframe\n          iframe: iframe,\n\n          // class applied to selected item\n          selectClass: selectClass,\n\n          // class applied to the Container\n          containerClass: containerClass,\n\n          // class applied to each item\n          itemClass: itemClass,\n\n          // function called on select that retuns the content to insert\n          selectTemplate: (\n            selectTemplate || Tribute.defaultSelectTemplate\n          ).bind(this),\n\n          // function called that returns content for an item\n          menuItemTemplate: (\n            menuItemTemplate || Tribute.defaultMenuItemTemplate\n          ).bind(this),\n\n          // function called when menu is empty, disables hiding of menu.\n          noMatchTemplate: (t => {\n            if (typeof t === \"string\") {\n              if (t.trim() === \"\") return null;\n              return t;\n            }\n            if (typeof t === \"function\") {\n              return t.bind(this);\n            }\n\n            return (\n              noMatchTemplate ||\n              function() {\n                return \"<li>No Match Found!</li>\";\n              }.bind(this)\n            );\n          })(noMatchTemplate),\n\n          // column to search against in the object\n          lookup: lookup,\n\n          // column that contains the content to insert by default\n          fillAttr: fillAttr,\n\n          // array of objects or a function returning an array of objects\n          values: values,\n\n          requireLeadingSpace: requireLeadingSpace,\n\n          searchOpts: searchOpts,\n\n          menuItemLimit: menuItemLimit,\n\n          menuShowMinLength: menuShowMinLength\n        }\n      ];\n    } else if (collection) {\n      if (this.autocompleteMode)\n        console.warn(\n          \"Tribute in autocomplete mode does not work for collections\"\n        );\n      this.collection = collection.map(item => {\n        return {\n          trigger: item.trigger || trigger,\n          iframe: item.iframe || iframe,\n          selectClass: item.selectClass || selectClass,\n          containerClass: item.containerClass || containerClass,\n          itemClass: item.itemClass || itemClass,\n          selectTemplate: (\n            item.selectTemplate || Tribute.defaultSelectTemplate\n          ).bind(this),\n          menuItemTemplate: (\n            item.menuItemTemplate || Tribute.defaultMenuItemTemplate\n          ).bind(this),\n          // function called when menu is empty, disables hiding of menu.\n          noMatchTemplate: (t => {\n            if (typeof t === \"string\") {\n              if (t.trim() === \"\") return null;\n              return t;\n            }\n            if (typeof t === \"function\") {\n              return t.bind(this);\n            }\n\n            return (\n              noMatchTemplate ||\n              function() {\n                return \"<li>No Match Found!</li>\";\n              }.bind(this)\n            );\n          })(noMatchTemplate),\n          lookup: item.lookup || lookup,\n          fillAttr: item.fillAttr || fillAttr,\n          values: item.values,\n          requireLeadingSpace: item.requireLeadingSpace,\n          searchOpts: item.searchOpts || searchOpts,\n          menuItemLimit: item.menuItemLimit || menuItemLimit,\n          menuShowMinLength: item.menuShowMinLength || menuShowMinLength\n        };\n      });\n    } else {\n      throw new Error(\"[Tribute] No collection specified.\");\n    }\n\n    new TributeRange(this);\n    new TributeEvents(this);\n    new TributeMenuEvents(this);\n    new TributeSearch(this);\n  }\n\n  get isActive() {\n    return this._isActive;\n  }\n\n  set isActive(val) {\n    if (this._isActive != val) {\n      this._isActive = val;\n      if (this.current.element) {\n        let noMatchEvent = new CustomEvent(`tribute-active-${val}`);\n        this.current.element.dispatchEvent(noMatchEvent);\n      }\n    }\n  }\n\n  static defaultSelectTemplate(item) {\n    if (typeof item === \"undefined\")\n      return `${this.current.collection.trigger}${this.current.mentionText}`;\n    if (this.range.isContentEditable(this.current.element)) {\n      return (\n        '<span class=\"tribute-mention\">' +\n        (this.current.collection.trigger +\n          item.original[this.current.collection.fillAttr]) +\n        \"</span>\"\n      );\n    }\n\n    return (\n      this.current.collection.trigger +\n      item.original[this.current.collection.fillAttr]\n    );\n  }\n\n  static defaultMenuItemTemplate(matchItem) {\n    return matchItem.string;\n  }\n\n  static inputTypes() {\n    return [\"TEXTAREA\", \"INPUT\"];\n  }\n\n  triggers() {\n    return this.collection.map(config => {\n      return config.trigger;\n    });\n  }\n\n  attach(el) {\n    if (!el) {\n      throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n    }\n\n    // Check if it is a jQuery collection\n    if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n      el = el.get();\n    }\n\n    // Is el an Array/Array-like object?\n    if (\n      el.constructor === NodeList ||\n      el.constructor === HTMLCollection ||\n      el.constructor === Array\n    ) {\n      let length = el.length;\n      for (var i = 0; i < length; ++i) {\n        this._attach(el[i]);\n      }\n    } else {\n      this._attach(el);\n    }\n  }\n\n  _attach(el) {\n    if (el.hasAttribute(\"data-tribute\")) {\n      console.warn(\"Tribute was already bound to \" + el.nodeName);\n    }\n\n    this.ensureEditable(el);\n    this.events.bind(el);\n    el.setAttribute(\"data-tribute\", true);\n  }\n\n  ensureEditable(element) {\n    if (Tribute.inputTypes().indexOf(element.nodeName) === -1) {\n      if (element.contentEditable) {\n        element.contentEditable = true;\n      } else {\n        throw new Error(\"[Tribute] Cannot bind to \" + element.nodeName);\n      }\n    }\n  }\n\n  createMenu(containerClass) {\n    let wrapper = this.range.getDocument().createElement(\"div\"),\n      ul = this.range.getDocument().createElement(\"ul\");\n    wrapper.className = containerClass;\n    wrapper.appendChild(ul);\n\n    if (this.menuContainer) {\n      return this.menuContainer.appendChild(wrapper);\n    }\n\n    return this.range.getDocument().body.appendChild(wrapper);\n  }\n\n  showMenuFor(element, scrollTo) {\n    // Only proceed if menu isn't already shown for the current element & mentionText\n    if (\n      this.isActive &&\n      this.current.element === element &&\n      this.current.mentionText === this.currentMentionTextSnapshot\n    ) {\n      return;\n    }\n    this.currentMentionTextSnapshot = this.current.mentionText;\n\n    // create the menu if it doesn't exist.\n    if (!this.menu) {\n      this.menu = this.createMenu(this.current.collection.containerClass);\n      element.tributeMenu = this.menu;\n      this.menuEvents.bind(this.menu);\n    }\n\n    this.isActive = true;\n    this.menuSelected = 0;\n\n    if (!this.current.mentionText) {\n      this.current.mentionText = \"\";\n    }\n\n    const processValues = values => {\n      // Tribute may not be active any more by the time the value callback returns\n      if (!this.isActive) {\n        return;\n      }\n\n      let items = this.search.filter(this.current.mentionText, values, {\n        pre: this.current.collection.searchOpts.pre || \"<span>\",\n        post: this.current.collection.searchOpts.post || \"</span>\",\n        skip: this.current.collection.searchOpts.skip,\n        extract: el => {\n          if (typeof this.current.collection.lookup === \"string\") {\n            return el[this.current.collection.lookup];\n          } else if (typeof this.current.collection.lookup === \"function\") {\n            return this.current.collection.lookup(el, this.current.mentionText);\n          } else {\n            throw new Error(\n              \"Invalid lookup attribute, lookup must be string or function.\"\n            );\n          }\n        }\n      });\n\n      if (this.current.collection.menuItemLimit) {\n        items = items.slice(0, this.current.collection.menuItemLimit);\n      }\n\n      this.current.filteredItems = items;\n\n      let ul = this.menu.querySelector(\"ul\");\n\n      this.range.positionMenuAtCaret(scrollTo);\n\n      if (!items.length) {\n        let noMatchEvent = new CustomEvent(\"tribute-no-match\", {\n          detail: this.menu\n        });\n        this.current.element.dispatchEvent(noMatchEvent);\n        if (\n          (typeof this.current.collection.noMatchTemplate === \"function\" &&\n            !this.current.collection.noMatchTemplate()) ||\n          !this.current.collection.noMatchTemplate\n        ) {\n          this.hideMenu();\n        } else {\n          typeof this.current.collection.noMatchTemplate === \"function\"\n            ? (ul.innerHTML = this.current.collection.noMatchTemplate())\n            : (ul.innerHTML = this.current.collection.noMatchTemplate);\n        }\n\n        return;\n      }\n\n      ul.innerHTML = \"\";\n      let fragment = this.range.getDocument().createDocumentFragment();\n\n      items.forEach((item, index) => {\n        let li = this.range.getDocument().createElement(\"li\");\n        li.setAttribute(\"data-index\", index);\n        li.className = this.current.collection.itemClass;\n        li.addEventListener(\"mousemove\", e => {\n          let [li, index] = this._findLiTarget(e.target);\n          if (e.movementY !== 0) {\n            this.events.setActiveLi(index);\n          }\n        });\n        if (this.menuSelected === index) {\n          li.classList.add(this.current.collection.selectClass);\n        }\n        li.innerHTML = this.current.collection.menuItemTemplate(item);\n        fragment.appendChild(li);\n      });\n      ul.appendChild(fragment);\n    };\n\n    if (typeof this.current.collection.values === \"function\") {\n      this.current.collection.values(this.current.mentionText, processValues);\n    } else {\n      processValues(this.current.collection.values);\n    }\n  }\n\n  _findLiTarget(el) {\n    if (!el) return [];\n    const index = el.getAttribute(\"data-index\");\n    return !index ? this._findLiTarget(el.parentNode) : [el, index];\n  }\n\n  showMenuForCollection(element, collectionIndex) {\n    if (element !== document.activeElement) {\n      this.placeCaretAtEnd(element);\n    }\n\n    this.current.collection = this.collection[collectionIndex || 0];\n    this.current.externalTrigger = true;\n    this.current.element = element;\n\n    if (element.isContentEditable)\n      this.insertTextAtCursor(this.current.collection.trigger);\n    else this.insertAtCaret(element, this.current.collection.trigger);\n\n    this.showMenuFor(element);\n  }\n\n  // TODO: make sure this works for inputs/textareas\n  placeCaretAtEnd(el) {\n    el.focus();\n    if (\n      typeof window.getSelection != \"undefined\" &&\n      typeof document.createRange != \"undefined\"\n    ) {\n      var range = document.createRange();\n      range.selectNodeContents(el);\n      range.collapse(false);\n      var sel = window.getSelection();\n      sel.removeAllRanges();\n      sel.addRange(range);\n    } else if (typeof document.body.createTextRange != \"undefined\") {\n      var textRange = document.body.createTextRange();\n      textRange.moveToElementText(el);\n      textRange.collapse(false);\n      textRange.select();\n    }\n  }\n\n  // for contenteditable\n  insertTextAtCursor(text) {\n    var sel, range;\n    sel = window.getSelection();\n    range = sel.getRangeAt(0);\n    range.deleteContents();\n    var textNode = document.createTextNode(text);\n    range.insertNode(textNode);\n    range.selectNodeContents(textNode);\n    range.collapse(false);\n    sel.removeAllRanges();\n    sel.addRange(range);\n  }\n\n  // for regular inputs\n  insertAtCaret(textarea, text) {\n    var scrollPos = textarea.scrollTop;\n    var caretPos = textarea.selectionStart;\n\n    var front = textarea.value.substring(0, caretPos);\n    var back = textarea.value.substring(\n      textarea.selectionEnd,\n      textarea.value.length\n    );\n    textarea.value = front + text + back;\n    caretPos = caretPos + text.length;\n    textarea.selectionStart = caretPos;\n    textarea.selectionEnd = caretPos;\n    textarea.focus();\n    textarea.scrollTop = scrollPos;\n  }\n\n  hideMenu() {\n    if (this.menu) {\n      this.menu.style.cssText = \"display: none;\";\n      this.isActive = false;\n      this.menuSelected = 0;\n      this.current = {};\n    }\n  }\n\n  selectItemAtIndex(index, originalEvent) {\n    index = parseInt(index);\n    if (typeof index !== \"number\" || isNaN(index)) return;\n    let item = this.current.filteredItems[index];\n    let content = this.current.collection.selectTemplate(item);\n    if (content !== null) this.replaceText(content, originalEvent, item);\n  }\n\n  replaceText(content, originalEvent, item) {\n    this.range.replaceTriggerText(content, true, true, originalEvent, item);\n  }\n\n  _append(collection, newValues, replace) {\n    if (typeof collection.values === \"function\") {\n      throw new Error(\"Unable to append to values, as it is a function.\");\n    } else if (!replace) {\n      collection.values = collection.values.concat(newValues);\n    } else {\n      collection.values = newValues;\n    }\n  }\n\n  append(collectionIndex, newValues, replace) {\n    let index = parseInt(collectionIndex);\n    if (typeof index !== \"number\")\n      throw new Error(\"please provide an index for the collection to update.\");\n\n    let collection = this.collection[index];\n\n    this._append(collection, newValues, replace);\n  }\n\n  appendCurrent(newValues, replace) {\n    if (this.isActive) {\n      this._append(this.current.collection, newValues, replace);\n    } else {\n      throw new Error(\n        \"No active state. Please use append instead and pass an index.\"\n      );\n    }\n  }\n\n  detach(el) {\n    if (!el) {\n      throw new Error(\"[Tribute] Must pass in a DOM node or NodeList.\");\n    }\n\n    // Check if it is a jQuery collection\n    if (typeof jQuery !== \"undefined\" && el instanceof jQuery) {\n      el = el.get();\n    }\n\n    // Is el an Array/Array-like object?\n    if (\n      el.constructor === NodeList ||\n      el.constructor === HTMLCollection ||\n      el.constructor === Array\n    ) {\n      let length = el.length;\n      for (var i = 0; i < length; ++i) {\n        this._detach(el[i]);\n      }\n    } else {\n      this._detach(el);\n    }\n  }\n\n  _detach(el) {\n    this.events.unbind(el);\n    if (el.tributeMenu) {\n      this.menuEvents.unbind(el.tributeMenu);\n    }\n\n    setTimeout(() => {\n      el.removeAttribute(\"data-tribute\");\n      this.isActive = false;\n      if (el.tributeMenu) {\n        el.tributeMenu.remove();\n      }\n    });\n  }\n}\n\n/**\n * Tribute.js\n * Native ES6 JavaScript @mention Plugin\n **/\n\nexport default Tribute;\n","import '../assets/NcRichContenteditable-BCUBhRqg.css';\nimport debounce from \"debounce\";\nimport Tribute from \"tributejs/dist/tribute.esm.js\";\nimport { useIsDarkTheme } from \"../composables/useIsDarkTheme/index.mjs\";\nimport { g as getAvatarUrl } from \"./NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang-DyqakLm5.mjs\";\nimport { N as NcUserStatusIcon } from \"./NcUserStatusIcon-BF5OEQFU.mjs\";\nimport { openBlock, createElementBlock, normalizeClass, createElementVNode, normalizeStyle, toDisplayString, createApp, resolveComponent, createBlock, createCommentVNode, mergeProps, withModifiers, withKeys } from \"vue\";\nimport { _ as _export_sfc } from \"./_plugin-vue_export-helper-1tPrXgE0.mjs\";\nimport { a as emojiSearch, e as emojiAddRecent } from \"./emoji-C8k9NUlo.mjs\";\nimport { r as register, s as t37, J as t34, a as t, K as n } from \"./_l10n-wdIzZwir.mjs\";\nimport escapeHTML from \"escape-html\";\nimport stripTags from \"striptags\";\nimport { c as createElementId } from \"./createElementId-DhjFt1I9.mjs\";\nimport { l as logger } from \"./logger-D3RVzcfQ.mjs\";\nimport \"@nextcloud/auth\";\nimport \"@nextcloud/axios\";\nimport \"@nextcloud/router\";\nimport \"@nextcloud/sharing/public\";\nimport \"@vueuse/core\";\nimport \"vue-router\";\nimport \"./legacy-BoqDmOCa.mjs\";\nimport \"./NcButton-jvoYS2my.mjs\";\nimport { g as getLinkWithPicker, s as searchProvider } from \"./referencePickerModal-CnKdEDwu.mjs\";\nimport \"./customPickerElements-BqbDcaEu.mjs\";\nimport \"unist-builder\";\nimport \"unist-util-visit-parents\";\nimport \"./NcRichText-BO_4KtBA.mjs\";\nimport \"./NcEmptyContent-CGAPqk4S.mjs\";\nimport \"./NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs\";\nimport \"./NcSelect--kERLlBK.mjs\";\nimport \"./NcLoadingIcon-BOVpFVQz.mjs\";\nimport \"./NcTextField.vue_vue_type_script_setup_true_lang-Bx2esFU2.mjs\";\nimport \"dompurify\";\nimport \"./NcIconSvgWrapper-g8ubWhoz.mjs\";\nimport \"./NcInputField-5Sg6EUP6.mjs\";\nimport \"@nextcloud/event-bus\";\nimport \"focus-trap\";\nimport \"./NcActions-C-wDqSrv.mjs\";\nimport \"../composables/useFormatDateTime/index.mjs\";\nimport \"../composables/useHotKey/index.mjs\";\nimport \"../composables/useIsFullscreen/index.mjs\";\nimport \"../composables/useIsMobile/index.mjs\";\nimport \"./NcModal-DiDvgcU8.mjs\";\nimport \"./rtl-v0UOPAM7.mjs\";\nconst _sfc_main$2 = {\n  name: \"NcMentionBubble\",\n  /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n  props: {\n    /**\n     * Id of the bubble\n     */\n    id: {\n      type: String,\n      required: true\n    },\n    /**\n     * The main text\n     */\n    label: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * Icon to be applied\n     */\n    icon: {\n      type: String,\n      required: true\n    },\n    /**\n     * URL of the icon\n     */\n    iconUrl: {\n      type: [String, null],\n      default: null\n    },\n    /**\n     * The source of the bubble, e.g. \"users\" or \"groups\"\n     */\n    source: {\n      type: String,\n      required: true\n    },\n    /**\n     * Is the bubble shown as primary\n     */\n    primary: {\n      type: Boolean,\n      default: false\n    }\n  },\n  setup() {\n    const isDarkTheme = useIsDarkTheme();\n    return {\n      isDarkTheme\n    };\n  },\n  computed: {\n    avatarUrl() {\n      if (this.iconUrl) {\n        return this.iconUrl;\n      }\n      return this.id && this.source === \"users\" ? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme }) : null;\n    },\n    mentionText() {\n      return !this.id.includes(\" \") && !this.id.includes(\"/\") ? `@${this.id}` : `@\"${this.id}\"`;\n    }\n  }\n};\nconst _hoisted_1$2 = { class: \"mention-bubble__wrapper\" };\nconst _hoisted_2$2 = { class: \"mention-bubble__content\" };\nconst _hoisted_3$1 = [\"title\"];\nconst _hoisted_4$1 = {\n  role: \"none\",\n  class: \"mention-bubble__select\"\n};\nfunction _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"span\", {\n    class: normalizeClass([\"mention-bubble\", { \"mention-bubble--primary\": $props.primary }]),\n    contenteditable: \"false\"\n  }, [\n    createElementVNode(\"span\", _hoisted_1$2, [\n      createElementVNode(\"span\", _hoisted_2$2, [\n        createElementVNode(\"span\", {\n          class: normalizeClass([[$props.icon, `mention-bubble__icon--${$options.avatarUrl ? \"with-avatar\" : \"\"}`], \"mention-bubble__icon\"]),\n          style: normalizeStyle($options.avatarUrl ? { backgroundImage: `url(${$options.avatarUrl})` } : null)\n        }, null, 6),\n        createElementVNode(\"span\", {\n          role: \"heading\",\n          class: \"mention-bubble__title\",\n          title: $props.label\n        }, null, 8, _hoisted_3$1)\n      ]),\n      createElementVNode(\"span\", _hoisted_4$1, toDisplayString($options.mentionText), 1)\n    ])\n  ], 2);\n}\nconst NcMentionBubble = /* @__PURE__ */ _export_sfc(_sfc_main$2, [[\"render\", _sfc_render$2], [\"__scopeId\", \"data-v-3c4a673d\"]]);\nconst MENTION_START = /(?=[a-z0-9_\\-@.'])\\B/.source;\nconst MENTION_SIMPLE = /(@[a-z0-9_\\-@.']+)/.source;\nconst MENTION_GUEST = /@&quot;(?:guest|email){1}\\/[a-f0-9]+&quot;/.source;\nconst MENTION_PREFIXED = /@&quot;(?:federated_)?(?:group|team|user){1}\\/[a-z0-9_\\-@.' /:]+&quot;/.source;\nconst MENTION_WITH_SPACE = /@&quot;[a-z0-9_\\-@.' ]+&quot;/.source;\nconst MENTION_COMPLEX = `(${MENTION_GUEST}|${MENTION_PREFIXED}|${MENTION_WITH_SPACE})`;\nconst USERID_REGEX = new RegExp(`${MENTION_START}${MENTION_SIMPLE}`, \"gi\");\nconst USERID_REGEX_WITH_SPACE = new RegExp(`${MENTION_START}${MENTION_COMPLEX}`, \"gi\");\nconst richEditor = {\n  props: {\n    userData: {\n      type: Object,\n      default: () => ({})\n    }\n  },\n  methods: {\n    /**\n     * Convert the value string to html for the inner content\n     *\n     * @param {string} value the content without html\n     * @return {string} rendered html\n     */\n    renderContent(value) {\n      const sanitizedValue = escapeHTML(value);\n      const splitValue = sanitizedValue.split(USERID_REGEX).map((part) => part.split(USERID_REGEX_WITH_SPACE)).flat();\n      return splitValue.map((part) => {\n        if (!part.startsWith(\"@\")) {\n          return part;\n        }\n        const id = part.slice(1).replace(/&quot;/gi, \"\");\n        return this.genSelectTemplate(id);\n      }).join(\"\").replace(/\\n/gmi, \"<br>\").replace(/&amp;/gmi, \"&\");\n    },\n    /**\n     * Convert the innerHtml content to a string with mentions as text\n     *\n     * @param {string} content the content without html\n     * @return {string}\n     */\n    parseContent(content) {\n      let text = content;\n      text = text.replace(/<br>/gmi, \"\\n\");\n      text = text.replace(/&nbsp;/gmi, \" \");\n      text = text.replace(/&amp;/gmi, \"&\");\n      text = text.replace(/<\\/div>/gmi, \"\\n\");\n      text = stripTags(text, \"<div>\");\n      text = stripTags(text);\n      return text;\n    },\n    /**\n     * Generate an autocompletion popup entry template\n     *\n     * @param {string} value the value to match against the userData\n     * @return {string}\n     */\n    genSelectTemplate(value) {\n      if (typeof value === \"undefined\") {\n        return `${this.autocompleteTribute.current.collection.trigger}${this.autocompleteTribute.current.mentionText}`;\n      }\n      const data = this.userData[value];\n      if (!data) {\n        return [\" \", \"/\", \":\"].every((char) => !value.includes(char)) ? `@${value}` : `@\"${value}\"`;\n      }\n      return this.renderComponentHtml(data, NcMentionBubble).replace(/[\\n\\t]/gmi, \"\").replace(/>\\s+</g, \"><\");\n    },\n    /**\n     * Render a component and return its html content\n     *\n     * @param {object} props the props to pass to the component\n     * @param {object} component the component to render\n     * @return {string} the rendered html\n     */\n    renderComponentHtml(props, component) {\n      const Item = createApp(component, {\n        ...props\n      });\n      const mount = document.createElement(\"div\");\n      mount.style.display = \"none\";\n      document.body.appendChild(mount);\n      Item.mount(mount);\n      const renderedHtml = mount.innerHTML;\n      Item.unmount();\n      mount.remove();\n      return renderedHtml;\n    }\n  }\n};\nconst _sfc_main$1 = {\n  name: \"NcAutoCompleteResult\",\n  components: {\n    NcUserStatusIcon\n  },\n  /* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n  props: {\n    /**\n     * The label text\n     */\n    label: {\n      type: String,\n      required: false,\n      default: null\n    },\n    /**\n     * The secondary line of text if any\n     */\n    subline: {\n      type: String,\n      default: null\n    },\n    /**\n     * Unique id\n     */\n    id: {\n      type: String,\n      default: null\n    },\n    /**\n     * The icon class\n     */\n    icon: {\n      type: String,\n      required: true\n    },\n    /**\n     * Icon as external URL\n     */\n    iconUrl: {\n      type: String,\n      default: null\n    },\n    /**\n     * The source of the bubble, e.g. \"users\" or \"groups\"\n     */\n    source: {\n      type: String,\n      required: true\n    },\n    /**\n     * The user status of the result\n     */\n    status: {\n      type: [Object, Array],\n      default: () => ({})\n    }\n  },\n  setup() {\n    const isDarkTheme = useIsDarkTheme();\n    return {\n      isDarkTheme\n    };\n  },\n  computed: {\n    avatarUrl() {\n      if (this.iconUrl) {\n        return this.iconUrl;\n      }\n      return this.id && this.source === \"users\" ? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme }) : null;\n    }\n  }\n};\nconst _hoisted_1$1 = { class: \"autocomplete-result\" };\nconst _hoisted_2$1 = {\n  key: 0,\n  class: \"autocomplete-result__status autocomplete-result__status--icon\"\n};\nconst _hoisted_3 = { class: \"autocomplete-result__content\" };\nconst _hoisted_4 = [\"title\"];\nconst _hoisted_5 = {\n  key: 0,\n  class: \"autocomplete-result__subline\"\n};\nfunction _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) {\n  const _component_NcUserStatusIcon = resolveComponent(\"NcUserStatusIcon\");\n  return openBlock(), createElementBlock(\"div\", _hoisted_1$1, [\n    createElementVNode(\"div\", {\n      class: normalizeClass([[$props.icon, `autocomplete-result__icon--${$options.avatarUrl ? \"with-avatar\" : \"\"}`], \"autocomplete-result__icon\"]),\n      style: normalizeStyle($options.avatarUrl ? { backgroundImage: `url(${$options.avatarUrl})` } : null)\n    }, [\n      $props.status.icon ? (openBlock(), createElementBlock(\"span\", _hoisted_2$1, toDisplayString($props.status && $props.status.icon || \"\"), 1)) : $props.status.status && $props.status.status !== \"offline\" ? (openBlock(), createBlock(_component_NcUserStatusIcon, {\n        key: 1,\n        class: \"autocomplete-result__status\",\n        status: $props.status.status\n      }, null, 8, [\"status\"])) : createCommentVNode(\"\", true)\n    ], 6),\n    createElementVNode(\"span\", _hoisted_3, [\n      createElementVNode(\"span\", {\n        class: \"autocomplete-result__title\",\n        title: $props.label\n      }, toDisplayString($props.label), 9, _hoisted_4),\n      $props.subline ? (openBlock(), createElementBlock(\"span\", _hoisted_5, toDisplayString($props.subline), 1)) : createCommentVNode(\"\", true)\n    ])\n  ]);\n}\nconst NcAutoCompleteResult = /* @__PURE__ */ _export_sfc(_sfc_main$1, [[\"render\", _sfc_render$1], [\"__scopeId\", \"data-v-ed88a5f1\"]]);\nregister(t34, t37);\nconst style1 = {\n  \"material-design-icon\": \"_material-design-icon_g5CUm\",\n  \"tribute-container\": \"_tribute-container_vZo-i\",\n  \"tribute-container__item\": \"_tribute-container__item_jsFSw\",\n  \"tribute-container--focus-visible\": \"_tribute-container--focus-visible_2kxiD\",\n  \"tribute-container-autocomplete\": \"_tribute-container-autocomplete_j-g-I\",\n  \"tribute-container-emoji\": \"_tribute-container-emoji_x7KXk\",\n  \"tribute-container-link\": \"_tribute-container-link_FguVk\",\n  \"tribute-item\": \"_tribute-item_iNlZn\",\n  \"tribute-item__title\": \"_tribute-item__title_UpDWk\",\n  \"tribute-item__icon\": \"_tribute-item__icon_BwNUI\"\n};\nconst smilesCharacters = [\"d\", \"D\", \"p\", \"P\", \"s\", \"S\", \"x\", \"X\", \")\", \"(\", \"|\", \"/\"];\nconst textSmiles = [];\nsmilesCharacters.forEach((char) => {\n  textSmiles.push(\":\" + char);\n  textSmiles.push(\":-\" + char);\n});\nlet isPlaintextOnlySupported = null;\nconst _sfc_main = {\n  name: \"NcRichContenteditable\",\n  mixins: [richEditor],\n  inheritAttrs: false,\n  props: {\n    /**\n     * The ID attribute of the content editable\n     */\n    id: {\n      type: String,\n      default: () => createElementId()\n    },\n    /**\n     * Visual label of the contenteditable\n     */\n    label: {\n      type: String,\n      default: \"\"\n    },\n    /**\n     * The text content\n     */\n    modelValue: {\n      type: String,\n      required: true\n    },\n    /**\n     * Placeholder to be shown if empty\n     */\n    placeholder: {\n      type: String,\n      default: t(\"Write a message …\")\n    },\n    /**\n     * Auto complete function\n     */\n    autoComplete: {\n      type: Function,\n      default: () => []\n    },\n    /**\n     * The containing element or selector for the tribute (menu popover)\n     * Defaults to `body` element\n     */\n    menuContainer: {\n      type: [String, Element, null],\n      default: null\n    },\n    /**\n     * Make the contenteditable looks like a textarea or not.\n     * Default looks like a single-line input.\n     * This also handle the default enter/shift+enter behaviour.\n     * if multiline, enter = newline; otherwise enter = submit\n     * shift+enter always add a new line. ctrl+enter always submits\n     */\n    multiline: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Is the content editable ?\n     */\n    contenteditable: {\n      type: Boolean,\n      default: true\n    },\n    /**\n     * Disable the editing and show specific disabled design\n     */\n    disabled: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * Max allowed length\n     */\n    maxlength: {\n      type: Number,\n      default: null\n    },\n    /**\n     * Enable or disable emoji autocompletion\n     */\n    emojiAutocomplete: {\n      type: Boolean,\n      default: true\n    },\n    /**\n     * Enable or disable link autocompletion\n     */\n    linkAutocomplete: {\n      type: Boolean,\n      default: true\n    },\n    /**\n     * CSS class to apply to the root element.\n     */\n    class: {\n      type: [String, Array, Object],\n      default: \"\"\n    }\n  },\n  emits: [\n    \"paste\",\n    \"update:modelValue\",\n    \"smartPickerSubmit\",\n    \"submit\"\n  ],\n  setup() {\n    const segmenter = new Intl.Segmenter();\n    if (isPlaintextOnlySupported === null) {\n      try {\n        document.createElement(\"div\").contentEditable = \"plaintext-only\";\n        isPlaintextOnlySupported = true;\n      } catch (error) {\n        logger.debug(\"[NcRichContenteditable] Unsupported attribute value:\", { error });\n        isPlaintextOnlySupported = false;\n      }\n    }\n    return {\n      // Constants\n      labelId: createElementId(),\n      tributeId: createElementId(),\n      segmenter,\n      /**\n       * Non-reactive property to store Tribute instance\n       *\n       * @type {import('tributejs').default | null}\n       */\n      tribute: null,\n      tributeStyleMutationObserver: null\n    };\n  },\n  data() {\n    return {\n      // Represent the raw untrimmed text of the contenteditable\n      // serves no other purpose than to check whether the\n      // content is empty or not\n      localValue: this.modelValue,\n      // Is in text composition session in IME\n      isComposing: false,\n      // Tribute autocomplete\n      isAutocompleteOpen: false,\n      autocompleteActiveId: void 0,\n      isTributeIntegrationDone: false\n    };\n  },\n  computed: {\n    /**\n     * Is the current trimmed value empty?\n     *\n     * @return {boolean}\n     */\n    isEmptyValue() {\n      return !this.localValue || this.localValue.trim() === \"\";\n    },\n    /**\n     * Is the current value over maxlength?\n     *\n     * @return {boolean}\n     */\n    isOverMaxlength() {\n      if (this.isEmptyValue || !this.maxlength) {\n        return false;\n      }\n      const length = [...this.segmenter.segment(this.localValue)].length;\n      return length > this.maxlength;\n    },\n    /**\n     * Tooltip to show if characters count is over limit\n     *\n     * @return {string}\n     */\n    tooltipString() {\n      if (!this.isOverMaxlength) {\n        return null;\n      }\n      return n(\"Message limit of %n character reached\", \"Message limit of %n characters reached\", this.maxlength);\n    },\n    /**\n     * Edit is only allowed when contenteditable is:\n     * 'true' (all browsers since 2015)\n     * 'plaintext-only' (most browsers since 2015, Firefox since 136+)\n     *\n     * @return {string}\n     */\n    contenteditableAttributeValue() {\n      if (this.contenteditable && !this.disabled) {\n        return isPlaintextOnlySupported ? \"plaintext-only\" : \"true\";\n      }\n      return \"false\";\n    },\n    /**\n     * Compute debounce function for the autocomplete function\n     */\n    debouncedAutoComplete() {\n      return debounce(async (search, callback) => {\n        this.autoComplete(search, callback);\n      }, 100);\n    }\n  },\n  watch: {\n    /**\n     * If the parent value change, we compare the plain text rendering\n     * If it's different, we render everything and update the main content\n     */\n    modelValue() {\n      const html = this.$refs.contenteditable.innerHTML;\n      if (this.modelValue.trim() !== this.parseContent(html).trim()) {\n        this.updateContent(this.modelValue);\n      }\n    }\n  },\n  mounted() {\n    this.initializeTribute();\n    this.updateContent(this.modelValue);\n  },\n  beforeUnmount() {\n    if (this.tribute) {\n      this.tribute.detach(this.$refs.contenteditable);\n    }\n    if (this.tributeStyleMutationObserver) {\n      this.tributeStyleMutationObserver.disconnect();\n    }\n  },\n  methods: {\n    /**\n     * Focus the richContenteditable\n     *\n     * @public\n     */\n    focus() {\n      this.$refs.contenteditable.focus();\n    },\n    initializeTribute() {\n      const renderMenuItem = (content) => `<div id=\"${createElementId()}\" class=\"${this.$style[\"tribute-item\"]}\" role=\"option\">${content}</div>`;\n      const tributesCollection = [];\n      tributesCollection.push({\n        fillAttr: \"id\",\n        // Search against id and label (display name) (fallback to title for v8.0.0..8.6.1 compatibility)\n        lookup: (result) => `${result.id} ${result.label ?? result.title}`,\n        requireLeadingSpace: true,\n        // Popup mention autocompletion templates\n        menuItemTemplate: (item) => renderMenuItem(this.renderComponentHtml(item.original, NcAutoCompleteResult)),\n        // Hide if no results\n        noMatchTemplate: () => '<span class=\"hidden\"></span>',\n        // Inner display of mentions\n        selectTemplate: (item) => this.genSelectTemplate(item?.original?.id),\n        // Autocompletion results\n        values: this.debouncedAutoComplete,\n        // Class added to the menu container\n        containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-autocomplete\"]}`,\n        // Class added to each list item\n        itemClass: this.$style[\"tribute-container__item\"]\n      });\n      if (this.emojiAutocomplete) {\n        tributesCollection.push({\n          trigger: \":\",\n          // Don't use the tribute search function at all\n          // We pass search results as values (see below)\n          lookup: (result, query) => query,\n          requireLeadingSpace: true,\n          // Popup mention autocompletion templates\n          menuItemTemplate: (item) => {\n            if (textSmiles.includes(item.original)) {\n              return item.original;\n            }\n            return renderMenuItem(`<span class=\"${this.$style[\"tribute-item__emoji\"]}\">${item.original.native}</span> :${item.original.short_name}`);\n          },\n          // Hide if no results\n          noMatchTemplate: () => t(\"No emoji found\"),\n          // Display raw emoji along with its name\n          selectTemplate: (item) => {\n            if (textSmiles.includes(item.original)) {\n              return item.original;\n            }\n            emojiAddRecent(item.original);\n            return item.original.native;\n          },\n          // Pass the search results as values\n          values: (text, cb) => {\n            const emojiResults = emojiSearch(text);\n            if (textSmiles.includes(\":\" + text)) {\n              emojiResults.unshift(\":\" + text);\n            }\n            cb(emojiResults);\n          },\n          // Class added to the menu container\n          containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-emoji\"]}`,\n          // Class added to each list item\n          itemClass: this.$style[\"tribute-container__item\"]\n        });\n      }\n      if (this.linkAutocomplete) {\n        tributesCollection.push({\n          trigger: \"/\",\n          // Don't use the tribute search function at all\n          // We pass search results as values (see below)\n          lookup: (result, query) => query,\n          requireLeadingSpace: true,\n          // Popup mention autocompletion templates\n          menuItemTemplate: (item) => renderMenuItem(`<img class=\"${this.$style[\"tribute-item__icon\"]}\" src=\"${item.original.icon_url}\"> <span class=\"${this.$style[\"tribute-item__title\"]}\">${item.original.title}</span>`),\n          // Hide if no results\n          noMatchTemplate: () => t(\"No link provider found\"),\n          selectTemplate: this.getLink,\n          // Pass the search results as values\n          values: (text, cb) => cb(searchProvider(text)),\n          // Class added to the menu container\n          containerClass: `${this.$style[\"tribute-container\"]} ${this.$style[\"tribute-container-link\"]}`,\n          // Class added to each list item\n          itemClass: this.$style[\"tribute-container__item\"]\n        });\n      }\n      const menuContainer = typeof this.menuContainer === \"string\" ? document.querySelector(this.menuContainer) : this.menuContainer;\n      this.tribute = new Tribute({\n        collection: tributesCollection,\n        // FIXME: tributejs doesn't support allowSpaces as a collection option, only as a global one\n        // Requires to fork a library to allow spaces only in the middle of mentions ('@' trigger)\n        allowSpaces: false,\n        // Where to inject the menu popup\n        menuContainer\n      });\n      this.tribute.attach(this.$refs.contenteditable);\n      this.$refs.contenteditable.contentEditable = this.contenteditableAttributeValue;\n    },\n    getLink(item) {\n      getLinkWithPicker(item.original.id).then((result) => {\n        const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n        const eventData = {\n          result,\n          insertText: true\n        };\n        this.$emit(\"smartPickerSubmit\", eventData);\n        if (eventData.insertText) {\n          const newElem = document.createTextNode(result);\n          tmpElem.replaceWith(newElem);\n          this.setCursorAfter(newElem);\n          this.updateValue(this.$refs.contenteditable.innerHTML);\n        } else {\n          tmpElem.remove();\n        }\n      }).catch((error) => {\n        logger.debug(\"[NcRichContenteditable] Smart picker promise rejected:\", { error });\n        const tmpElem = document.getElementById(\"tmp-smart-picker-result-node\");\n        this.setCursorAfter(tmpElem);\n        tmpElem.remove();\n      });\n      return '<span id=\"tmp-smart-picker-result-node\"></span>';\n    },\n    setCursorAfter(element) {\n      const range = document.createRange();\n      range.setEndAfter(element);\n      range.collapse();\n      const selection = window.getSelection();\n      selection.removeAllRanges();\n      selection.addRange(range);\n    },\n    moveCursorToEnd() {\n      if (!document.createRange) {\n        return;\n      }\n      if (window.getSelection().rangeCount > 0 && this.$refs.contenteditable.contains(window.getSelection().getRangeAt(0).commonAncestorContainer)) {\n        return;\n      }\n      const range = document.createRange();\n      range.selectNodeContents(this.$refs.contenteditable);\n      range.collapse(false);\n      const selection = window.getSelection();\n      selection.removeAllRanges();\n      selection.addRange(range);\n    },\n    /**\n     * Re-emit the input event to the parent\n     *\n     * @param {Event} event the input event\n     */\n    onInput(event) {\n      this.updateValue(event.target.innerHTML);\n    },\n    /**\n     * When pasting, sanitize the content, extract text\n     * and render it again\n     *\n     * @param {Event} event the paste event\n     * @fires Event paste the original paste event\n     */\n    onPaste(event) {\n      if (!this.contenteditable || this.disabled) {\n        return;\n      }\n      if (isPlaintextOnlySupported) {\n        this.$emit(\"paste\", event);\n      } else {\n        event.preventDefault();\n        const clipboardData = event.clipboardData;\n        this.$emit(\"paste\", event);\n        if (clipboardData.files.length !== 0 || !Object.values(clipboardData.items).find((item) => item?.type.startsWith(\"text\"))) {\n          return;\n        }\n        const text = clipboardData.getData(\"text\");\n        const selection = window.getSelection();\n        const range = selection.getRangeAt(0);\n        range.deleteContents();\n        range.insertNode(document.createTextNode(text));\n        range.collapse(false);\n      }\n      this.updateValue(this.$refs.contenteditable.innerHTML);\n    },\n    /**\n     * Update the value text from the provided html\n     *\n     * @param {string} htmlOrText - The html content (or raw text with \\@mentions)\n     */\n    updateValue(htmlOrText) {\n      const text = this.parseContent(htmlOrText).replace(/^\\n$/, \"\");\n      this.localValue = text;\n      this.$emit(\"update:modelValue\", text);\n    },\n    /**\n     * Update content and local value\n     *\n     * @param {string} value the message value\n     */\n    updateContent(value) {\n      const renderedContent = this.renderContent(value);\n      this.$refs.contenteditable.innerHTML = renderedContent;\n      this.localValue = value;\n    },\n    /**\n     * Enter key pressed. Submits if not multiline\n     *\n     * @param {Event} event the keydown event\n     */\n    onEnter(event) {\n      if (this.multiline || this.isOverMaxlength || this.tribute.isActive || this.isComposing) {\n        return;\n      }\n      event.preventDefault();\n      event.stopPropagation();\n      this.$emit(\"submit\", event);\n    },\n    /**\n     * Ctrl + Enter key pressed is used to submit\n     *\n     * @param {Event} event the keydown event\n     */\n    onCtrlEnter(event) {\n      if (this.isOverMaxlength) {\n        return;\n      }\n      this.$emit(\"submit\", event);\n    },\n    onKeyUp(event) {\n      event.stopImmediatePropagation();\n    },\n    onKeyEsc(event) {\n      if (this.tribute && this.isAutocompleteOpen) {\n        event.stopImmediatePropagation();\n        this.tribute.hideMenu();\n      }\n    },\n    /**\n     * Get HTML element with Tribute.js container\n     *\n     * @return {HTMLElement}\n     */\n    getTributeContainer() {\n      return this.tribute.menu;\n    },\n    /**\n     * Get the currently selected item element id in Tribute.js container\n     *\n     * @return {HTMLElement}\n     */\n    getTributeSelectedItem() {\n      return this.getTributeContainer().querySelector('.highlight [id^=\"nc-rich-contenteditable-tribute-item-\"]');\n    },\n    /**\n     * Handle Tribute activation\n     *\n     * @param {boolean} isActive - is active\n     */\n    onTributeActive(isActive) {\n      this.isAutocompleteOpen = isActive;\n      if (isActive) {\n        this.getTributeContainer().setAttribute(\"class\", this.tribute.current.collection.containerClass || this.$style[\"tribute-container\"]);\n        this.setupTributeIntegration();\n        document.removeEventListener(\"click\", this.hideTribute, true);\n      } else {\n        this.debouncedAutoComplete.clear();\n        this.autocompleteActiveId = void 0;\n        this.setTributeFocusVisible(false);\n      }\n    },\n    onTributeArrowKeyDown() {\n      if (!this.isAutocompleteOpen) {\n        return;\n      }\n      this.setTributeFocusVisible(true);\n      this.onTributeSelectedItemWillChange();\n    },\n    onTributeSelectedItemWillChange() {\n      requestAnimationFrame(() => {\n        this.autocompleteActiveId = this.getTributeSelectedItem()?.id;\n      });\n    },\n    setupTributeIntegration() {\n      if (this.isTributeIntegrationDone) {\n        return;\n      }\n      this.isTributeIntegrationDone = true;\n      const tributeContainer = this.getTributeContainer();\n      tributeContainer.id = this.tributeId;\n      tributeContainer.setAttribute(\"role\", \"listbox\");\n      const ul = tributeContainer.children[0];\n      ul.setAttribute(\"role\", \"presentation\");\n      this.tributeStyleMutationObserver = new MutationObserver(([{ target }]) => {\n        if (target.style.display !== \"none\") {\n          this.onTributeSelectedItemWillChange();\n        }\n      }).observe(tributeContainer, {\n        attributes: true,\n        attributeFilter: [\"style\"]\n      });\n      tributeContainer.addEventListener(\"mousemove\", () => {\n        this.setTributeFocusVisible(false);\n        this.onTributeSelectedItemWillChange();\n      }, { passive: true });\n    },\n    /**\n     * Set tribute-container--focus-visible class on the Tribute container when the user navigates the listbox via keyboard.\n     *\n     * Because the real focus is kept on the textbox, we cannot use the :focus-visible pseudo-class\n     * to style selected options in the autocomplete listbox.\n     *\n     * @param {boolean} withFocusVisible - should the focus-visible class be added\n     */\n    setTributeFocusVisible(withFocusVisible) {\n      if (withFocusVisible) {\n        this.getTributeContainer().classList.add(this.$style[\"tribute-container--focus-visible\"]);\n      } else {\n        this.getTributeContainer().classList.remove(this.$style[\"tribute-container--focus-visible\"]);\n      }\n    },\n    /**\n     * Show tribute menu programmatically.\n     *\n     * @param {string} trigger - trigger character, can be '/', '@', or ':'\n     *\n     * @public\n     */\n    showTribute(trigger) {\n      this.focus();\n      const index = this.tribute.collection.findIndex((collection) => collection.trigger === trigger);\n      this.tribute.showMenuForCollection(this.$refs.contenteditable, index);\n      this.updateValue(this.$refs.contenteditable.innerHTML);\n      document.addEventListener(\"click\", this.hideTribute, true);\n    },\n    /**\n     * Hide tribute menu programmatically\n     *\n     */\n    hideTribute() {\n      this.tribute.hideMenu();\n      document.removeEventListener(\"click\", this.hideTribute, true);\n    }\n  }\n};\nconst _hoisted_1 = [\"id\", \"contenteditable\", \"aria-labelledby\", \"aria-placeholder\", \"aria-controls\", \"aria-expanded\", \"aria-activedescendant\", \"title\"];\nconst _hoisted_2 = [\"id\"];\nfunction _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {\n  return openBlock(), createElementBlock(\"div\", {\n    class: normalizeClass([\"rich-contenteditable\", _ctx.$props.class])\n  }, [\n    createElementVNode(\"div\", mergeProps({\n      id: $props.id,\n      ref: \"contenteditable\",\n      class: [{\n        \"rich-contenteditable__input--empty\": $options.isEmptyValue,\n        \"rich-contenteditable__input--multiline\": $props.multiline,\n        \"rich-contenteditable__input--has-label\": $props.label,\n        \"rich-contenteditable__input--overflow\": $options.isOverMaxlength,\n        \"rich-contenteditable__input--disabled\": $props.disabled\n      }, \"rich-contenteditable__input\"],\n      contenteditable: $options.contenteditableAttributeValue,\n      \"aria-labelledby\": $props.label ? $setup.labelId : void 0,\n      \"aria-placeholder\": $props.placeholder,\n      \"aria-multiline\": \"true\",\n      role: \"textbox\",\n      \"aria-haspopup\": \"listbox\",\n      \"aria-autocomplete\": \"inline\",\n      \"aria-controls\": $setup.tributeId,\n      \"aria-expanded\": $data.isAutocompleteOpen ? \"true\" : \"false\",\n      \"aria-activedescendant\": $data.autocompleteActiveId,\n      title: $options.tooltipString\n    }, _ctx.$attrs, {\n      onFocus: _cache[0] || (_cache[0] = (...args) => $options.moveCursorToEnd && $options.moveCursorToEnd(...args)),\n      onInput: _cache[1] || (_cache[1] = (...args) => $options.onInput && $options.onInput(...args)),\n      onCompositionstart: _cache[2] || (_cache[2] = ($event) => $data.isComposing = true),\n      onCompositionend: _cache[3] || (_cache[3] = ($event) => $data.isComposing = false),\n      onKeydownCapture: _cache[4] || (_cache[4] = withKeys((...args) => $options.onKeyEsc && $options.onKeyEsc(...args), [\"esc\"])),\n      onKeydown: [\n        _cache[5] || (_cache[5] = withKeys(withModifiers((...args) => $options.onEnter && $options.onEnter(...args), [\"exact\"]), [\"enter\"])),\n        _cache[6] || (_cache[6] = withKeys(withModifiers((...args) => $options.onCtrlEnter && $options.onCtrlEnter(...args), [\"ctrl\", \"exact\", \"stop\", \"prevent\"]), [\"enter\"])),\n        _cache[9] || (_cache[9] = withKeys(withModifiers((...args) => $options.onTributeArrowKeyDown && $options.onTributeArrowKeyDown(...args), [\"exact\", \"stop\"]), [\"up\"])),\n        _cache[10] || (_cache[10] = withKeys(withModifiers((...args) => $options.onTributeArrowKeyDown && $options.onTributeArrowKeyDown(...args), [\"exact\", \"stop\"]), [\"down\"]))\n      ],\n      onPaste: _cache[7] || (_cache[7] = (...args) => $options.onPaste && $options.onPaste(...args)),\n      onKeyupCapture: _cache[8] || (_cache[8] = withModifiers((...args) => $options.onKeyUp && $options.onKeyUp(...args), [\"stop\", \"prevent\"])),\n      onTributeActiveTrue: _cache[11] || (_cache[11] = ($event) => $options.onTributeActive(true)),\n      onTributeActiveFalse: _cache[12] || (_cache[12] = ($event) => $options.onTributeActive(false))\n    }), null, 16, _hoisted_1),\n    $props.label ? (openBlock(), createElementBlock(\"div\", {\n      key: 0,\n      id: $setup.labelId,\n      class: \"rich-contenteditable__label\"\n    }, toDisplayString($props.label), 9, _hoisted_2)) : createCommentVNode(\"\", true)\n  ], 2);\n}\nconst cssModules = {\n  \"$style\": style1\n};\nconst NcRichContenteditable = /* @__PURE__ */ _export_sfc(_sfc_main, [[\"render\", _sfc_render], [\"__cssModules\", cssModules], [\"__scopeId\", \"data-v-94776745\"]]);\nexport {\n  NcAutoCompleteResult as N,\n  NcMentionBubble as a,\n  NcRichContenteditable as b\n};\n//# sourceMappingURL=NcRichContenteditable-Qw614bJ5.mjs.map\n"],"names":["predicate","list","length","thisArg","value","i","CustomEvent$1","event","params","evt","TributeEvents","tribute","element","instance","o","li","keyCode","trigger","eventKeyPressed","el","info","e","collectionItem","item","count","selected","index","lis","liClientRect","menuClientRect","scrollDistance","elem","includeMargin","height","style","TributeMenuEvents","menu","func","wait","immediate","timeout","context","args","later","callNow","TributeRange","iframe","scrollTo","coordinates","menuDimensions","menuIsOffScreen","menuIsOffScreenHorizontally","menuIsOffScreenVertically","targetElement","path","offset","range","sel","text","requireLeadingSpace","hasTrailingSpace","originalEvent","replaceEvent","textSuffix","endPos","myField","startPos","html","frag","node","lastNode","ctx","ce","selectedElem","workingNodeContent","selectStartOffset","textComponent","wordsArray","worldsCount","menuAlreadyActive","allowSpaces","isAutocomplete","selectionInfo","effectiveRange","lastWordOfEffectiveRange","mostRecentTriggerCharPos","triggerChar","config","c","idx","currentTriggerSnippet","firstSnippetChar","leadingSpace","regex","str","reversedStr","cidx","len","firstChar","match","triggerIdx","windowWidth","windowHeight","doc","windowLeft","windowTop","menuTop","menuRight","menuBottom","menuLeft","dimensions","position","flipped","properties","isFirefox","div","computed","prop","span","rect","top","left","parentHeight","parentRect","scrollStillAvailable","selectedNodePosition","reasonableBuffer","clientRect","maxScrollDisplacement","elemTop","elemBottom","maxY","targetY","TributeSearch","pattern","array","string","opts","pre","post","compareString","patternCache","stringIndex","patternIndex","best","temp","score","indices","rendered","arr","prev","a","b","Tribute","values","selectClass","containerClass","itemClass","autocompleteMode","selectTemplate","menuItemTemplate","lookup","fillAttr","collection","menuContainer","noMatchTemplate","replaceTextSuffix","positionMenu","spaceSelectsMatch","searchOpts","menuItemLimit","menuShowMinLength","t","val","noMatchEvent","matchItem","wrapper","ul","processValues","items","fragment","collectionIndex","textRange","textNode","textarea","scrollPos","caretPos","front","back","content","newValues","replace","_sfc_main$2","useIsDarkTheme","getAvatarUrl","_hoisted_1$2","_hoisted_2$2","_hoisted_3$1","_hoisted_4$1","_sfc_render$2","_ctx","_cache","$props","$setup","$data","$options","openBlock","createElementBlock","normalizeClass","createElementVNode","normalizeStyle","toDisplayString","NcMentionBubble","_export_sfc","MENTION_START","MENTION_SIMPLE","MENTION_GUEST","MENTION_PREFIXED","MENTION_WITH_SPACE","MENTION_COMPLEX","USERID_REGEX","USERID_REGEX_WITH_SPACE","richEditor","escapeHTML","part","id","stripTags","data","char","props","component","Item","createApp","mount","renderedHtml","_sfc_main$1","NcUserStatusIcon","_hoisted_1$1","_hoisted_2$1","_hoisted_3","_hoisted_4","_hoisted_5","_sfc_render$1","_component_NcUserStatusIcon","resolveComponent","createBlock","createCommentVNode","NcAutoCompleteResult","register","t34","t37","style1","smilesCharacters","textSmiles","isPlaintextOnlySupported","_sfc_main","createElementId","segmenter","error","logger","n","debounce","search","callback","renderMenuItem","tributesCollection","result","query","emojiAddRecent","cb","emojiResults","emojiSearch","searchProvider","getLinkWithPicker","tmpElem","eventData","newElem","selection","clipboardData","htmlOrText","renderedContent","isActive","tributeContainer","target","withFocusVisible","_hoisted_1","_hoisted_2","_sfc_render","mergeProps","$event","withKeys","withModifiers","cssModules","NcRichContenteditable"],"mappings":"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","x_google_ignoreList":[0,1]}

Youez - 2016 - github.com/yon3zu
LinuXploit