{"version":3,"file":"angular-universal-editor.mjs","sources":["../../../projects/angular-universal-editor/src/lib/shared/constants.ts","../../../projects/angular-universal-editor/src/lib/shared/custom-methods.ts","../../../projects/angular-universal-editor/src/lib/angular-universal-editor-config.ts","../../../projects/angular-universal-editor/src/lib/components/mention-user/mention-user.component.ts","../../../projects/angular-universal-editor/src/lib/components/mention-user/mention-user.component.html","../../../projects/angular-universal-editor/src/lib/shared/tooltip.directive.ts","../../../projects/angular-universal-editor/src/lib/components/icon/icon.component.ts","../../../projects/angular-universal-editor/src/lib/components/icon/icon.component.html","../../../projects/angular-universal-editor/src/lib/components/button/button.component.ts","../../../projects/angular-universal-editor/src/lib/components/button/button.component.html","../../../projects/angular-universal-editor/src/lib/components/text-styles/text-styles.component.ts","../../../projects/angular-universal-editor/src/lib/components/text-styles/text-styles.component.html","../../../projects/angular-universal-editor/src/lib/components/vertical-line/vertical-line.component.ts","../../../projects/angular-universal-editor/src/lib/components/vertical-line/vertical-line.component.html","../../../projects/angular-universal-editor/src/lib/components/text-color/text-color-tile/text-color-tile.component.ts","../../../projects/angular-universal-editor/src/lib/components/text-color/text-color-tile/text-color-tile.component.html","../../../projects/angular-universal-editor/src/lib/components/text-color/text-color.component.ts","../../../projects/angular-universal-editor/src/lib/components/text-color/text-color.component.html","../../../projects/angular-universal-editor/src/lib/components/edit-link/edit-link.component.ts","../../../projects/angular-universal-editor/src/lib/components/edit-link/edit-link.component.html","../../../projects/angular-universal-editor/src/lib/components/file-widget/file-widget.component.ts","../../../projects/angular-universal-editor/src/lib/components/file-widget/file-widget.component.html","../../../projects/angular-universal-editor/src/lib/components/alt-text-img/alt-text-img.component.ts","../../../projects/angular-universal-editor/src/lib/components/alt-text-img/alt-text-img.component.html","../../../projects/angular-universal-editor/src/lib/components/more-format/more-format.component.ts","../../../projects/angular-universal-editor/src/lib/components/more-format/more-format.component.html","../../../projects/angular-universal-editor/src/lib/components/more-options/more-options.component.ts","../../../projects/angular-universal-editor/src/lib/components/more-options/more-options.component.html","../../../projects/angular-universal-editor/src/lib/components/datepicker/datepicker.component.ts","../../../projects/angular-universal-editor/src/lib/components/datepicker/datepicker.component.html","../../../projects/angular-universal-editor/src/lib/angular-universal-editor.component.ts","../../../projects/angular-universal-editor/src/lib/angular-universal-editor.component.html","../../../projects/angular-universal-editor/src/lib/angular-universal-editor.module.ts","../../../projects/angular-universal-editor/src/public-api.ts","../../../projects/angular-universal-editor/src/angular-universal-editor.ts"],"sourcesContent":["export const Const = {\r\n    colors: [\r\n        { colorName: 'Black', colorCode: '#000000', selected: false },\r\n        { colorName: 'Light Gray', colorCode: '#B6C2CF', selected: false },\r\n        { colorName: 'Gainsboro', colorCode: '#DCDCDC', selected: false },\r\n        { colorName: 'Red', colorCode: '#FF0000', selected: false },\r\n        { colorName: 'Green', colorCode: '#008000', selected: false },\r\n        { colorName: 'Blue', colorCode: '#0000FF', selected: false },\r\n        { colorName: 'Yellow', colorCode: '#FFFF00', selected: false },\r\n        { colorName: 'Cyan', colorCode: '#00FFFF', selected: false },\r\n        { colorName: 'Magenta', colorCode: '#FF00FF', selected: false },\r\n        { colorName: 'Gray', colorCode: '#808080', selected: false },\r\n        { colorName: 'Maroon', colorCode: '#800000', selected: false },\r\n        { colorName: 'Olive', colorCode: '#808000', selected: false },\r\n        { colorName: 'Purple', colorCode: '#800080', selected: false },\r\n        { colorName: 'Teal', colorCode: '#008080', selected: false },\r\n        { colorName: 'Navy', colorCode: '#000080', selected: false },\r\n        { colorName: 'Coral', colorCode: '#FF7F50', selected: false },\r\n        { colorName: 'Turquoise', colorCode: '#40E0D0', selected: false },\r\n        { colorName: 'Salmon', colorCode: '#FA8072', selected: false },\r\n        { colorName: 'Lime', colorCode: '#00FF00', selected: false },\r\n        { colorName: 'Gold', colorCode: '#FFD700', selected: false },\r\n        { colorName: 'Orchid', colorCode: '#DA70D6', selected: false }\r\n    ],\r\n    colorsDarkMode: [\r\n        { colorName: 'Light Gray', colorCode: '#B6C2CF', selected: false },\r\n        { colorName: 'Black', colorCode: '#000000', selected: false },\r\n        { colorName: 'Gainsboro', colorCode: '#DCDCDC', selected: false },\r\n        { colorName: 'Red', colorCode: '#FF0000', selected: false },\r\n        { colorName: 'Green', colorCode: '#008000', selected: false },\r\n        { colorName: 'Blue', colorCode: '#0000FF', selected: false },\r\n        { colorName: 'Yellow', colorCode: '#FFFF00', selected: false },\r\n        { colorName: 'Cyan', colorCode: '#00FFFF', selected: false },\r\n        { colorName: 'Magenta', colorCode: '#FF00FF', selected: false },\r\n        { colorName: 'Gray', colorCode: '#808080', selected: false },\r\n        { colorName: 'Maroon', colorCode: '#800000', selected: false },\r\n        { colorName: 'Olive', colorCode: '#808000', selected: false },\r\n        { colorName: 'Purple', colorCode: '#800080', selected: false },\r\n        { colorName: 'Teal', colorCode: '#008080', selected: false },\r\n        { colorName: 'Navy', colorCode: '#000080', selected: false },\r\n        { colorName: 'Coral', colorCode: '#FF7F50', selected: false },\r\n        { colorName: 'Turquoise', colorCode: '#40E0D0', selected: false },\r\n        { colorName: 'Salmon', colorCode: '#FA8072', selected: false },\r\n        { colorName: 'Lime', colorCode: '#00FF00', selected: false },\r\n        { colorName: 'Gold', colorCode: '#FFD700', selected: false },\r\n        { colorName: 'Orchid', colorCode: '#DA70D6', selected: false }\r\n    ],\r\n\r\n    editorWidthL: 660,\r\n    editorWidthM: 590,\r\n    editorWidthS: 500,\r\n\r\n    urlRegex: /(http|https|ftp):\\/\\/(\\w+:?\\w*@)?(\\S+)(:[0-9]+)?(\\/|\\/([\\w#!:.?+=&%@!\\-\\/]))?/,\r\n    codeRegex: /(;$)|(\\w+\\s*\\([^)]*\\))|(\\w+\\.\\w+)|(\\w+->\\w+)|([{}[\\]])|(\\/\\*[\\s\\S]*?\\*\\/|\\/\\/[^\\r\\n]*)|([+\\*&|<>=!]{1,2})|([A-Z][a-z0-9]+[A-Z][a-z0-9]+)|(\\w+\\s*::\\s*\\w+)|(__\\w+__)|(\\{[^}]*\\})|(\\[[^\\]]*\\])|(\\([^)]*\\))/,\r\n\r\n\r\n    no_image: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAbJJREFUaEPtmStPxUAQhb9rSPgFGAQOgiAIEh5B4ECQ4HDgUDiwBILAETBIMCAxJBhQoHg5DAkQHIa/gIFOsg2b0m2bttttkxl3b2e658w5s71326Pj0es4fpRAaAVVgbYrMAocAPOBgF4DG8CLa/0sC00CD4GAJ5edAh7TsGQREPBCog0h4IXEv8gi8GNlhxr2XAxKwLO/VIG4wToDJa2mFlILlbROXKYWUguphf46kPos0t9CFS2SV97KXWgW+Aae8tADrSPQD3wYAkNtIrAQ/WO6KgDoElg0eWfAak5NIwoMAO+R3DvAYQagXWA7cX0NOM6oaYTADTBnQAwDbymAloALB9AR4NVxzTuBfWDTWvw5AjqeADNofN/nAHkPzIQgsAKcpiy8B2xZ398B0zleF+vJ+U8yvCkwBki3XSEdlc4eAesFhltSloHzRK43AgJeSLji0wz1SUHwkiY1E8CXVeOFgNhG7OMjRAFRIo7aCcS7jQ/w9j1vzYfaCfgG3tgQN0VEFYg73cmDrc4fr3f+BYfYp9OvmJraaSqtE2o4K4G2i5VAba0seSNVoGTjaiv7BWJvbTHhStu4AAAAAElFTkSuQmCC',\r\n\r\n    expirationDate: new Date(2024, 5, 1),\r\n}","import { ValidatorFn, AbstractControl } from \"@angular/forms\";\r\nimport { Const } from \"./constants\";\r\n\r\nexport function copy(obj: any) {\r\n    return JSON.parse(JSON.stringify(obj));\r\n}\r\n\r\nexport function equal(obj1: any, obj2: any) {\r\n    return JSON.stringify(obj1) === JSON.stringify(obj2);\r\n}\r\n\r\nexport function linkValidator(): ValidatorFn {\r\n    return (control: AbstractControl) => {\r\n      return Const.urlRegex.test(control.value) ? null : { invalidUrl: true };\r\n    };\r\n}\r\n\r\nexport function downloadFile(file: File) {\r\n    const fileURL = URL.createObjectURL(file);\r\n    const a = document.createElement('a');\r\n    a.href = fileURL;\r\n    a.download = file.name;\r\n    document.body.appendChild(a);\r\n    a.click();\r\n    document.body.removeChild(a);\r\n    URL.revokeObjectURL(fileURL);\r\n}\r\n\r\nexport function generateUniqueId(): string {\r\n  const timestamp = Date.now().toString();\r\n  const randomNum = Math.floor(Math.random() * 1000).toString();\r\n  return btoa(timestamp + randomNum);\r\n}\r\n\r\nexport function getWatermarkData() {\r\n  return{\r\n    content: '\\\"https://github.com/vojvodicn23\\\"',\r\n    position: 'absolute',\r\n    bottom: '10px',\r\n    right: '10px',\r\n    color: 'rgb(0, 0, 0)', \r\n    fontSize: '12px', \r\n    height: '15px', \r\n    width: '151px', \r\n  }\r\n}\r\n","import { SafeHtml } from \"@angular/platform-browser\";\r\n\r\nexport class EditorConfig {\r\n    placeholderText: string;\r\n    enableClearFormatting: boolean;\r\n    enableBold: boolean;\r\n    enableItalic: boolean;\r\n    enableUnderline: boolean;\r\n    enableStrikethrough: boolean;\r\n    enableSubscript: boolean;\r\n    enableSuperscript: boolean;\r\n    enableMention: boolean;\r\n    currentUserId: number | string;\r\n    enableTextStyles: boolean;\r\n    enableTextColor: boolean;\r\n    showToolbar: boolean;\r\n    editMode: boolean;\r\n    mentionPosition: 'auto' | 'above' | 'below';\r\n    initialInnerHTML: string | SafeHtml;\r\n    defaultTextColor: 'Black' | 'Gainsboro' | 'Red' | 'Green' | 'Blue' |\r\n    'Yellow' | 'Cyan' | 'Magenta' | 'Light Gray' | 'Gray' | 'Maroon' | 'Olive' |\r\n    'Purple' | 'Teal' | 'Navy' | 'Coral' | 'Turquoise' | 'Salmon' |\r\n    'Lime' | 'Gold' | 'Orchid';\r\n    enableBulletList: boolean;\r\n    enableNumberedList: boolean;\r\n    darkMode: boolean;\r\n    enableLink: boolean;\r\n    enableFile: boolean;\r\n    initialFiles: {file:File; key:string}[];\r\n    enableCode: boolean;\r\n    enableTable: boolean;\r\n    enableDate: boolean;\r\n\r\n\r\n    constructor(config: Partial<EditorConfig> = {}) {\r\n        this.placeholderText = config.placeholderText ?? '';\r\n        this.enableClearFormatting = config.enableClearFormatting ?? true;\r\n        this.enableBold = config.enableBold ?? true;\r\n        this.enableItalic = config.enableItalic ?? true;\r\n        this.enableUnderline = config.enableUnderline ?? true;\r\n        this.enableStrikethrough = config.enableStrikethrough ?? true;\r\n        this.enableSubscript = config.enableSubscript ?? true;\r\n        this.enableSuperscript = config.enableSuperscript ?? true;\r\n        this.enableMention = config.enableMention ?? true;\r\n        this.currentUserId = config.currentUserId ?? '';\r\n        this.enableTextStyles = config.enableTextStyles ?? true;\r\n        this.enableTextColor = config.enableTextColor ?? true;\r\n        this.showToolbar = config.showToolbar ?? true;\r\n        this.editMode = config.editMode ?? true;\r\n        this.mentionPosition = config.mentionPosition ?? 'auto';\r\n        this.initialInnerHTML = config.initialInnerHTML ?? '';\r\n        this.defaultTextColor = config.defaultTextColor ?? (config.darkMode ? 'Light Gray' : 'Black');\r\n        this.enableBulletList = config.enableBulletList ?? true;\r\n        this.enableNumberedList = config.enableNumberedList ?? true;\r\n        this.darkMode = config.darkMode ?? false;\r\n        this.enableLink = config.enableLink ?? true;\r\n        this.enableFile = config.enableFile ?? true;\r\n        this.initialFiles = config.initialFiles ?? [];\r\n        this.enableCode = config.enableCode ?? true;\r\n        this.enableTable = config.enableTable ?? true;\r\n        this.enableDate = config.enableDate ?? true;\r\n    }\r\n}","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'mention-user',\r\n  templateUrl: './mention-user.component.html',\r\n  styleUrls: ['./mention-user.component.css']\r\n})\r\nexport class MentionUserComponent {\r\n\r\n  @Input() user:any;\r\n\r\n  get initials(): string {\r\n    const firstNameInitial = this.user ? this.user.firstName.charAt(0).toUpperCase() : '';\r\n    const lastNameInitial = this.user ? this.user.lastName.charAt(0).toUpperCase() : '';\r\n    return `${firstNameInitial}${lastNameInitial}`;\r\n  }\r\n\r\n\r\n}  \r\n","\n<div class=\"universal-editor-user\"  [class.selected]=\"user?.isMouseEntered\">\n    <div class=\"universal-editor-user-image\">\n\n        <div class=\"universal-editor-user-avatar-image\" *ngIf=\"user?.imageUrl\">\n            <img [src]=\"user.imageUrl\" alt=\"Random Unsplash Image\" width=\"32\" height=\"32\" style=\"border-radius: 50%;\">\n        </div>\n\n        <div class=\"universal-editor-user-avatar\" *ngIf=\"!user?.imageUrl\">\n            {{initials}}\n        </div>\n    </div>\n    <div class=\"universal-editor-user-info\">\n        <div class=\"universal-editor-user-fullname\">{{user?.firstName}} {{user?.lastName}}</div>\n        <div class=\"universal-editor-user-email\">{{user?.email}}</div>\n    </div>\n</div>","import { Directive, ElementRef, HostListener, Input, Renderer2 } from '@angular/core';\n\n@Directive({\n  selector: '[tooltipText]'\n})\nexport class TooltipDirective {\n  @Input() tooltipText = '';\n  @Input() tooltipPostition = 'above';\n\n  tooltipElement: HTMLElement | undefined;\n\n  timeoutId: any;\n  hideTimeoutId: any;\n\n  constructor(private el: ElementRef, private renderer: Renderer2) {}\n\n  @HostListener('mouseenter') onMouseEnter() {\n    if (this.hideTimeoutId) {\n      clearTimeout(this.hideTimeoutId);\n    }\n    this.createTooltip();\n  }\n\n  @HostListener('mouseleave') onMouseLeave() {\n    if (this.timeoutId) {\n      clearTimeout(this.timeoutId);\n    }\n    this.destroyTooltip();\n  }\n\n  createTooltip() {\n    this.timeoutId = setTimeout(() => {\n      if (!this.tooltipElement && this.tooltipText) {\n        this.tooltipElement = this.renderer.createElement('div');\n        this.renderer.addClass(this.tooltipElement, 'tooltip');\n        if(this.tooltipElement){\n          this.tooltipElement.textContent = this.tooltipText;\n          this.renderer.appendChild(this.el.nativeElement, this.tooltipElement);\n\n          const hostPos = this.el.nativeElement.getBoundingClientRect();\n          const tooltipPos = this.tooltipElement.getBoundingClientRect();\n\n          let top = -(hostPos.height / 2 + tooltipPos.height / 2 + 6);\n          let right = hostPos.width / 2 - tooltipPos.width / 2;\n          if(this.tooltipPostition === 'bellow'){\n            top = (hostPos.height / 2 + tooltipPos.height / 2 + 6);\n          }\n          this.renderer.setStyle(this.tooltipElement, 'right', `${right}px`);\n          this.renderer.setStyle(this.tooltipElement, 'top', `${top}px`);\n        }\n      }\n    }, 400);\n  }\n\n  destroyTooltip() {\n    if (this.hideTimeoutId) {\n      clearTimeout(this.hideTimeoutId);\n    }\n\n    this.hideTimeoutId = setTimeout(() => {\n      if (this.tooltipElement) {\n        this.renderer.removeChild(this.el.nativeElement, this.tooltipElement);\n        this.tooltipElement = undefined;\n      }\n    }, 400);\n  }\n}\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'icon',\n  templateUrl: './icon.component.html',\n  styleUrls: ['./icon.component.css']\n})\nexport class IconComponent {\n\n\n  @Input() color = 'black';\n  @Input() icon = '';\n  @Input() width = 20; \n  @Input() height = 20; \n}\n","<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'bold'\">\n    <path [attr.fill]=\"color\" d=\"M287.54-207.001v-545.998h201.414q63.199 0 114.122 39.401 50.923 39.402 50.923 106.214 0 44.845-21.154 74.115-21.154 29.269-46.154 43.082 31.769 11.572 59.269 43.918 27.5 32.346 27.5 85.423 0 78.691-58.569 116.268t-117.735 37.577H287.54Zm91.997-85.69h113.916q47.547 0 66.586-26.231t19.039-50.309q0-24.078-19.539-50.308Q540-445.77 490.923-445.77H379.537v153.079Zm0-234.308h103.77q36.462 0 58.309-21.346 21.847-21.347 21.847-49.424 0-30.924-22.687-50.54-22.686-19.615-55.629-19.615h-105.61v140.925Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 0 24 24\" fill=\"none\"   *ngIf=\"icon === 'alt-text'\">\n    <g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> \n    <path [attr.fill]=\"color\" d=\"M1 3C1 1.89543 1.89543 1 3 1H10C11.1046 1 12 1.89543 12 3V9C12 10.1046 11.1046 11 10 11H3C1.89543 11 1 10.1046 1 9V3ZM3.5 4C3.22386 4 3 4.22386 3 4.5C3 4.77614 3.22386 5 3.5 5H9.5C9.77614 5 10 4.77614 10 4.5C10 4.22386 9.77614 4 9.5 4H3.5ZM3.5 7C3.22386 7 3 7.22386 3 7.5C3 7.77614 3.22386 8 3.5 8H9.5C9.77614 8 10 7.77614 10 7.5C10 7.22386 9.77614 7 9.5 7H3.5Z\"></path> \n    <path [attr.fill]=\"color\" d=\"M4 12H5.5V18.75C5.5 18.9584 5.53643 19.1583 5.60326 19.3437L11.4258 13.643C12.2589 12.8273 13.5675 12.7885 14.4458 13.5266L14.5742 13.6431L20.3964 19.3447C20.4634 19.159 20.5 18.9588 20.5 18.75V7.25C20.5 6.2835 19.7165 5.5 18.75 5.5H13V4H18.75C20.5449 4 22 5.45507 22 7.25V18.75C22 20.5449 20.5449 22 18.75 22H7.25C5.45507 22 4 20.5449 4 18.75V12ZM19.3305 20.4014L13.5247 14.7148C13.2596 14.4553 12.8501 14.4316 12.5588 14.644L12.4752 14.7148L6.66845 20.4011C6.8504 20.4651 7.04613 20.5 7.25 20.5H18.75C18.9535 20.5 19.1489 20.4653 19.3305 20.4014Z\"></path> \n    <path [attr.fill]=\"color\" d=\"M16.2521 7.5C17.4959 7.5 18.5042 8.50831 18.5042 9.75212C18.5042 10.9959 17.4959 12.0042 16.2521 12.0042C15.0083 12.0042 14 10.9959 14 9.75212C14 8.50831 15.0083 7.5 16.2521 7.5ZM16.2521 9C15.8367 9 15.5 9.33673 15.5 9.75212C15.5 10.1675 15.8367 10.5042 16.2521 10.5042C16.6675 10.5042 17.0042 10.1675 17.0042 9.75212C17.0042 9.33673 16.6675 9 16.2521 9Z\"></path> </g>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'mention'\">\n    <path [attr.fill]=\"color\" d=\"M480.392-116.001q-75.287 0-141.592-28.42-66.306-28.42-116.119-78.21-49.814-49.791-78.247-116.087t-28.433-141.673q0-75.378 28.42-141.246 28.42-65.869 78.21-115.682 49.791-49.814 116.087-78.247t141.673-28.433q75.378 0 141.246 28.425 65.869 28.425 115.682 78.225 49.814 49.8 78.247 115.65Q843.999-555.85 843.999-480v50.769q0 50.614-35.607 85.922t-86.393 35.308q-34.384 0-62.115-19.308t-44.429-49.616q-24.763 30.923-60.109 49.923Q520-308.001 480-308.001q-71.602 0-121.801-50.265-50.198-50.264-50.198-121.96t50.265-121.735q50.264-50.038 121.96-50.038t121.735 50.198Q651.999-551.602 651.999-480v50.769q0 28.623 20.769 48.927T721.999-360q28.462 0 49.232-20.304Q792-400.608 792-429.231V-480q0-130-91-221t-221-91q-130 0-221 91t-91 221q0 130 91 221t221 91h192v51.999H480.392ZM480-360q50 0 85-35t35-85q0-50-35-85t-85-35q-50 0-85 35t-35 85q0 50 35 85t85 35Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'bullet-list'\">\n    <path [attr.fill]=\"color\" d=\"M372.309-250.001v-51.998h423.69v51.998h-423.69Zm0-204v-51.998h423.69v51.998h-423.69Zm0-204v-51.998h423.69v51.998h-423.69ZM222.327-217.463q-24.235 0-41.28-17.257-17.046-17.258-17.046-41.492 0-24.235 17.258-41.28t41.492-17.045q24.235 0 41.28 17.257 17.045 17.258 17.045 41.492 0 24.235-17.257 41.28-17.258 17.045-41.492 17.045Zm0-204q-24.235 0-41.28-17.257-17.046-17.258-17.046-41.492 0-24.235 17.258-41.28t41.492-17.045q24.235 0 41.28 17.257 17.045 17.258 17.045 41.492 0 24.235-17.257 41.28-17.258 17.045-41.492 17.045Zm0-204q-24.235 0-41.28-17.257-17.046-17.258-17.046-41.492 0-24.235 17.258-41.28t41.492-17.045q24.235 0 41.28 17.257 17.045 17.258 17.045 41.492 0 24.235-17.257 41.28-17.258 17.045-41.492 17.045Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'code'\">\n    <path [attr.fill]=\"color\" d=\"M336-253.847 109.847-480 336-706.153l36.768 36.768-189 189L373.153-291 336-253.847Zm288 0-36.768-36.768 189-189L586.847-669 624-706.153 850.153-480 624-253.847Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'copy'\">\n    <path [attr.fill]=\"color\" d=\"M362.308-260.001q-27.008 0-45.657-18.65-18.65-18.65-18.65-45.658v-455.382q0-27.008 18.65-45.658 18.649-18.65 45.657-18.65h359.383q27.007 0 45.657 18.65 18.65 18.65 18.65 45.658v455.382q0 27.008-18.65 45.658-18.65 18.65-45.657 18.65H362.308Zm0-51.999h359.383q4.615 0 8.462-3.846 3.846-3.847 3.846-8.463v-455.382q0-4.616-3.846-8.463-3.847-3.846-8.462-3.846H362.308q-4.616 0-8.462 3.846-3.847 3.847-3.847 8.463v455.382q0 4.616 3.847 8.463 3.846 3.846 8.462 3.846ZM238.309-136.003q-27.007 0-45.657-18.65-18.65-18.65-18.65-45.657v-507.381h51.999v507.381q0 4.616 3.846 8.462 3.847 3.847 8.462 3.847h411.382v51.998H238.309ZM349.999-312V-792-312Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'remove'\">\n    <path [attr.fill]=\"color\" d=\"M324.309-164.001q-26.623 0-45.465-18.843-18.843-18.842-18.843-45.465V-696h-48v-51.999H384v-43.384h192v43.384h171.999V-696h-48v467.257q0 27.742-18.65 46.242-18.65 18.5-45.658 18.5H324.309ZM648-696H312v467.691q0 5.385 3.462 8.847 3.462 3.462 8.847 3.462h311.382q4.616 0 8.463-3.846 3.846-3.847 3.846-8.463V-696ZM400.155-288h51.999v-336h-51.999v336Zm107.691 0h51.999v-336h-51.999v336ZM312-696V-216v-480Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'download'\">\n    <path [attr.fill]=\"color\" d=\"M480-344.462 317.233-507.229l37.153-36.384 99.615 99.615v-352.001h51.998v352.001l99.615-99.615 37.153 36.384L480-344.462ZM276.025-212.001q-27.024 0-45.524-18.65t-18.5-45.658v-60.46H264v60.46q0 4.616 3.846 8.463 3.847 3.846 8.463 3.846h407.382q4.616 0 8.463-3.846 3.846-3.847 3.846-8.463v-60.46h51.999v60.46q0 27.008-18.662 45.658-18.662 18.65-45.686 18.65H276.025Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'edit'\">\n    <path [attr.fill]=\"color\" d=\"M216-216h44.461l393.463-393.463-44.461-44.461L216-260.461V-216Zm-51.999 51.999v-118.383l497.616-498.384q8.073-8.241 17.372-11.736 9.299-3.495 19.493-3.495 10.193 0 19.471 3.27 9.277 3.269 17.969 11.576l44.846 44.461q8.308 8.692 11.769 18.004 3.462 9.311 3.462 19.164 0 10.509-3.642 20.063-3.643 9.553-11.589 17.46l-498.384 498H164.001Zm580.384-535.153-45.231-45.231 45.231 45.231Zm-113.082 67.851-21.84-22.621 44.461 44.461-22.621-21.84Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'expand-less'\">\n    <path [attr.fill]=\"color\" d=\"m296-345-56-56 240-240 240 240-56 56-184-184-184 184Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'expand-more'\">\n    <path [attr.fill]=\"color\" d=\"M480-345 240-585l56-56 184 184 184-184 56 56-240 240Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'file'\">\n    <path [attr.fill]=\"color\" d=\"M456-100.616q-87.769 0-147.269-63-59.5-62.999-59.5-149.768v-401.309q0-62.144 43.467-106.11 43.466-43.966 105.61-43.966 64.144 0 106.61 46.466 42.466 46.466 42.466 109.61v376.001q0 38.061-27.164 64.223-27.165 26.161-64.231 26.161-40.066 0-65.72-28.661-25.653-28.662-25.653-66.723v-390.001h59.691v395.001q0 13.269 9.212 22.481 9.212 9.212 22.481 9.212 13.269 0 22.481-9.212 9.212-9.212 9.212-22.481v-382.001q0-37.262-26.071-63.823-26.071-26.562-63.347-26.562-37.275 0-63.314 27.062-26.038 27.061-26.038 65.323v406.309q0 61.538 43.269 103.808Q395.461-160.307 456-160.307q63.539 0 105.308-44.769 41.769-44.77 41.769-106.308v-416.309h59.692v421.309q0 85.769-60 145.768-60 60-146.769 60Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'format-clear'\">\n    <path [attr.fill]=\"color\" d=\"m489.922-565.693-45.306-45.306 15.771-38.079h-54.62l-52.228-52.228h396.767v60.612H522.153l-32.231 75.001Zm268.847 439.767L439.307-445.771l-82.154 190.616h-65.535l101.999-236.307-270.538-270.153 37.153-37.153 635.689 635.689-37.152 37.153Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'italic'\">\n    <path [attr.fill]=\"color\" d=\"M231.77-207.001v-68.306h152.692l133.616-409.386H361.386v-68.306h374.152v68.306H587.153L453.537-275.307h152.385v68.306H231.77Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'strikethrough'\">\n    <path [attr.fill]=\"color\" d=\"M212.001-370.001v-51.998h535.998v51.998H212.001Zm0-168v-51.998h535.998v51.998H212.001Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'subscript'\">\n    <path [attr.fill]=\"color\" d=\"M707.691-164.001v-87.208q0-18.792 12.646-31.638 12.647-12.846 31.508-12.846h44.154v-44.923h-88.308V-384h87.538q18.862 0 31.508 12.599 12.646 12.598 12.646 31.39v43.219q0 18.791-12.646 31.637t-31.508 12.846h-44.153v44.923h88.307v43.385H707.691ZM292.694-300.309l150.153-233.845-138.768-213.845h63.481l110.825 174.847h-1.539L593-747.999h63.306L515.768-534.154l151.538 233.845H604L480.846-492.078h1.539L356-300.309h-63.306Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'superscript'\">\n    <path [attr.fill]=\"color\" d=\"M707.691-576v-87.208q0-18.791 12.646-31.637 12.647-12.846 31.508-12.846h44.154v-44.923h-88.308v-43.385h87.538q18.862 0 31.508 12.599t12.646 31.39v43.219q0 18.792-12.646 31.638t-31.508 12.846h-44.153v44.923h88.307V-576H707.691ZM292.694-212.001l150.153-233.845-138.768-213.845h63.481l110.825 174.846h-1.539L593-659.691h63.306L515.768-445.846l151.538 233.845H604l-123.154-191.77h1.539L356-212.001h-63.306Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'underline'\">\n    <path [attr.fill]=\"color\" d=\"M253.847-179.003v-51.998h452.306v51.998H253.847ZM480-306.848q-88.307 0-137.153-53.053-48.846-53.053-48.846-142.264V-799.46h68.365v300.936q0 57.464 30.658 92.033t87.01 34.569q56.351 0 86.997-34.569t30.646-92.033V-799.46h68.322v297.295q0 89.211-48.846 142.264Q568.307-306.848 480-306.848Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'link'\">\n    <path [attr.fill]=\"color\" d=\"M424.307-306.463H289.539q-72.018 0-122.778-50.819-50.76-50.82-50.76-122.922 0-72.103 50.76-122.718 50.76-50.615 122.778-50.615h134.768v51.998H289.539q-50.385 0-85.962 35.577Q168-530.385 168-480q0 50.385 35.577 85.962 35.577 35.577 85.962 35.577h134.768v51.998Zm-78.306-147.538v-51.998h267.998v51.998H346.001Zm189.692 147.538v-51.998h134.768q50.385 0 85.962-35.577Q792-429.615 792-480q0-50.385-35.577-85.962-35.577-35.577-85.962-35.577H535.693v-51.998h134.768q72.018 0 122.778 50.819 50.76 50.82 50.76 122.922 0 72.103-50.76 122.718-50.76 50.615-122.778 50.615H535.693Z\"/>\n</svg>\n\n<svg  [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'number-list'\">\n    <path [attr.fill]=\"color\" d=\"M164.001-164.001v-35.692h96v-36.308h-48v-35.692h48v-36.308h-96v-35.692h113.846q7.585 0 12.715 5.131 5.131 5.13 5.131 12.715v55.693q0 7.584-5.131 12.715-5.13 5.13-12.715 5.13 7.585 0 12.715 5.131 5.131 5.131 5.131 12.715v52.616q0 7.584-5.131 12.715-5.13 5.131-12.715 5.131H164.001Zm0-226.153V-480q0-7.584 5.131-12.715t12.715-5.131h78.154v-36.308h-96v-35.692h113.846q7.585 0 12.715 5.131 5.131 5.131 5.131 12.715v72q0 7.584-5.131 12.715-5.13 5.131-12.715 5.131h-78.154v36.308h96v35.692H164.001Zm48-226.153v-144h-48v-35.692h83.692v179.692h-35.692Zm160.308 366.306v-51.998h423.69v51.998h-423.69Zm0-204v-51.998h423.69v51.998h-423.69Zm0-204v-51.998h423.69v51.998h-423.69Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'open-link'\">\n    <path [attr.fill]=\"color\" d=\"M228.309-164.001q-27.008 0-45.658-18.65-18.65-18.65-18.65-45.658v-503.382q0-27.008 18.65-45.658 18.65-18.65 45.658-18.65h236.305V-744H228.309q-4.616 0-8.463 3.846-3.846 3.847-3.846 8.463v503.382q0 4.616 3.846 8.463 3.847 3.846 8.463 3.846h503.382q4.616 0 8.463-3.846 3.846-3.847 3.846-8.463v-236.305h51.999v236.305q0 27.008-18.65 45.658-18.65 18.65-45.658 18.65H228.309Zm159.46-186.615-37.153-37.153L706.847-744H576v-51.999h219.999V-576H744v-130.847L387.769-350.616Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'table'\">\n    <path [attr.fill]=\"color\" d=\"M164.001-228.309v-503.382q0-26.527 18.891-45.417 18.89-18.891 45.417-18.891h503.382q26.527 0 45.417 18.891 18.891 18.89 18.891 45.417v503.382q0 26.527-18.891 45.417-18.89 18.891-45.417 18.891H228.309q-26.527 0-45.417-18.891-18.891-18.89-18.891-45.417ZM216-599.923h528v-131.768q0-5.385-3.462-8.847-3.462-3.462-8.847-3.462H228.309q-5.385 0-8.847 3.462-3.462 3.462-3.462 8.847v131.768Zm193.461 192.462h141.078v-140.463H409.461v140.463Zm0 191.461h141.078v-139.463H409.461V-216ZM216-407.461h141.463v-140.463H216v140.463Zm386.537 0H744v-140.463H602.537v140.463ZM228.309-216h129.154v-139.463H216v127.154q0 5.385 3.462 8.847 3.462 3.462 8.847 3.462Zm374.228 0h129.154q5.385 0 8.847-3.462 3.462-3.462 3.462-8.847v-127.154H602.537V-216Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'unlink'\">\n    <path [attr.fill]=\"color\" d=\"M739.384-321.847 698-361.461q42.162-11.298 68.081-44.418Q792-439 792-480q0-50.385-35.385-85.962-35.384-35.577-85.384-35.577H534.924v-51.998h136.307q71.602 0 122.185 50.839 50.583 50.838 50.583 122.916 0 50.936-28.539 92.897-28.538 41.961-76.076 65.038ZM607.23-454.001l-51.999-51.998h57.999v51.998h-6Zm174.617 350.154-678-678L141-819l678 678-37.153 37.153ZM425.076-306.463H289.539q-71.988 0-122.763-50.775Q116.001-408.013 116.001-480q0-61.624 38.962-108.004t107.808-68.841h9.231l52.307 55.306h-33.77q-51.385 0-86.962 35.577Q168-530.385 168-480q0 50.385 35.577 85.962 35.577 35.577 85.962 35.577h135.537v51.998ZM346.77-454.001v-51.998h68.693l50.999 51.998H346.77Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'info'\">\n    <path [attr.fill]=\"color\" d=\"M454.001-298.001h51.998V-528h-51.998v229.999Zm25.788-290.46q11.942 0 20.23-8.077 8.288-8.078 8.288-20.019 0-11.941-8.078-20.23-8.077-8.288-20.018-8.288-11.942 0-20.23 8.078t-8.288 20.019q0 11.941 8.078 20.229 8.077 8.288 20.018 8.288Zm.554 472.46q-75.112 0-141.48-28.42-66.369-28.42-116.182-78.21-49.814-49.791-78.247-116.087t-28.433-141.673q0-75.378 28.42-141.246 28.42-65.869 78.21-115.682 49.791-49.814 116.087-78.247t141.673-28.433q75.378 0 141.246 28.42 65.869 28.42 115.682 78.21 49.814 49.791 78.247 115.853t28.433 141.173q0 75.112-28.42 141.48-28.42 66.369-78.21 116.182-49.791 49.814-115.853 78.247t-141.173 28.433ZM480-168q130 0 221-91t91-221q0-130-91-221t-221-91q-130 0-221 91t-91 221q0 130 91 221t221 91Zm0-312Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'date'\">\n    <path [attr.fill]=\"color\" d=\"M583.918-240q-36.763 0-62.648-25.659-25.884-25.659-25.884-62.423 0-36.763 25.659-62.648 25.659-25.884 62.423-25.884 36.763 0 62.648 25.659Q672-365.296 672-328.532q0 36.763-25.659 62.648Q620.682-240 583.918-240ZM228.309-116.001q-27.008 0-45.658-19-18.65-19-18.65-45.308v-503.382q0-26.308 18.65-45.308t45.658-19h87.385v-100.615h53.537v100.615h223.076v-100.615h51.999v100.615h87.385q27.008 0 45.658 19 18.65 19 18.65 45.308v503.382q0 26.308-18.65 45.308t-45.658 19H228.309Zm0-51.999h503.382q4.616 0 8.463-3.846 3.846-3.847 3.846-8.463v-335.382H216v335.382q0 4.616 3.846 8.463 3.847 3.846 8.463 3.846ZM216-567.69h528v-116.001q0-4.616-3.846-8.463-3.847-3.846-8.463-3.846H228.309q-4.616 0-8.463 3.846-3.846 3.847-3.846 8.463v116.001Zm0 0V-696v128.31Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'more'\">\n    <path [attr.fill]=\"color\" d=\"M273.019-428.001q-21.537 0-36.662-15.337-15.124-15.337-15.124-36.874 0-21.537 15.337-36.662t36.874-15.125q21.537 0 36.661 15.337 15.125 15.337 15.125 36.874 0 21.537-15.337 36.662t-36.874 15.125Zm206.769 0q-21.537 0-36.662-15.337t-15.125-36.874q0-21.537 15.337-36.662t36.874-15.125q21.537 0 36.662 15.337t15.125 36.874q0 21.537-15.337 36.662t-36.874 15.125Zm206.768 0q-21.537 0-36.661-15.337-15.125-15.337-15.125-36.874 0-21.537 15.337-36.662t36.874-15.125q21.537 0 36.662 15.337 15.124 15.337 15.124 36.874 0 21.537-15.337 36.662t-36.874 15.125Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'image'\">\n    <path [attr.fill]=\"color\" d=\"M228.309-164.001q-27.008 0-45.658-19-18.65-19-18.65-45.308v-503.382q0-26.308 18.65-45.308t45.658-19h503.382q27.008 0 45.658 19 18.65 19 18.65 45.308v503.382q0 26.308-18.65 45.308t-45.658 19H228.309Zm0-51.999h503.382q4.616 0 8.463-3.846 3.846-3.847 3.846-8.463v-503.382q0-4.616-3.846-8.463-3.847-3.846-8.463-3.846H228.309q-4.616 0-8.463 3.846-3.846 3.847-3.846 8.463v503.382q0 4.616 3.846 8.463 3.847 3.846 8.463 3.846Zm65.693-82.001h375.073L543.538-465.384 443.231-335.231l-62-78.306-87.229 115.536ZM216-216v-528 528Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'unfold-more'\">\n    <path [attr.fill]=\"color\" d=\"M480-158.616 331.078-307.539l36.383-36.383L480-231.384l112.539-112.538 36.383 36.383L480-158.616Zm-112.539-459L331.078-654 480-802.922 628.922-654l-36.383 36.384L480-730.155 367.461-617.616Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'unfold-less'\">\n    <path [attr.fill]=\"color\" d=\"M369-205.847 331.847-243 480-391.153 628.153-243 591-205.847l-111-111-111 111Zm111-363L331.847-717 369-754.153l111 111 111-111L628.153-717 480-568.847Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'backspace'\">\n    <path [attr.fill]=\"color\" d=\"M378.693-260.001q-17.497 0-32.902-7.385-15.406-7.385-27.175-21.154L164.001-480l154.615-190.691q11.769-13.769 26.982-21.538 15.214-7.77 33.095-7.77h304.998q26.623 0 45.465 18.843 18.843 18.842 18.843 45.465v311.382q0 26.623-18.843 45.465-18.842 18.843-45.465 18.843H378.693ZM696-312v-336V-312Zm-317.307 0h304.998q4.616 0 8.463-3.846 3.846-3.847 3.846-8.463v-311.382q0-4.616-3.846-8.463-3.847-3.846-8.463-3.846H378.693q-5.77 0-10.962 2.885-5.193 2.885-8.27 7.116L231.384-480l128.077 157.999q3.077 4.231 8.27 7.116Q372.923-312 378.693-312Zm46.383-37.847 96-96 96 96L651.229-384l-96-96 96-96-34.153-34.153-96 96-96-96L390.924-576l96 96-96 96 34.152 34.153Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'arrow-right'\">\n    <path [attr.fill]=\"color\" d=\"m535.847-480-189-189L384-706.153 610.153-480 384-253.847 346.847-291l189-189Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'arrow-left'\">\n    <path [attr.fill]=\"color\" d=\"M576-253.847 349.847-480 576-706.153 613.153-669l-189 189 189 189L576-253.847Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'double-arrow-right'\">\n    <path [attr.fill]=\"color\" d=\"M400.232-480 210.848-669 248-706.153 474.153-480 248-253.847 210.848-291l189.384-189Zm274.999 0L485.847-669 523-706.153 749.152-480 523-253.847 485.847-291l189.384-189Z\"/>\n</svg>\n\n<svg [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 -960 960 960\" *ngIf=\"icon === 'double-arrow-left'\">\n    <path [attr.fill]=\"color\" d=\"M437-253.847 210.848-480 437-706.153 474.153-669 284.769-480l189.384 189L437-253.847Zm275 0L485.847-480 712-706.153 749.152-669 559.768-480l189.384 189L712-253.847Z\"/>\n</svg>\n\n<svg [attr.fill]=\"color\" [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 0 32 32\" *ngIf=\"icon === 'remove-row'\">\n    <path d=\"M24,30H4a2.0021,2.0021,0,0,1-2-2V22a2.0021,2.0021,0,0,1,2-2H24a2.0021,2.0021,0,0,1,2,2v6A2.0021,2.0021,0,0,1,24,30ZM4,22H3.9985L4,28H24V22Z\"></path>\n    <polygon points=\"30 3.41 28.59 2 25 5.59 21.41 2 20 3.41 23.59 7 20 10.59 21.41 12 25 8.41 28.59 12 30 10.59 26.41 7 30 3.41\"></polygon>\n    <path d=\"M4,14V8H18V6H4A2.0023,2.0023,0,0,0,2,8v6a2.0023,2.0023,0,0,0,2,2H26V14Z\"></path>\n</svg>\n\n<svg [attr.fill]=\"color\" [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 0 32 32\" *ngIf=\"icon === 'remove-column'\">\n    <polygon points=\"30 3.41 28.59 2 25 5.59 21.41 2 20 3.41 23.59 7 20 10.59 21.41 12 25 8.41 28.59 12 30 10.59 26.41 7 30 3.41\"></polygon>\n    <path d=\"M24,14V28H18V6H16V28a2.0023,2.0023,0,0,0,2,2h6a2.0023,2.0023,0,0,0,2-2V14Z\"></path>\n    <path d=\"M10,30H4a2.0021,2.0021,0,0,1-2-2V8A2.0021,2.0021,0,0,1,4,6h6a2.0021,2.0021,0,0,1,2,2V28A2.0021,2.0021,0,0,1,10,30ZM4,8V28h6V8Z\"></path>\n</svg>\n\n<svg [attr.fill]=\"color\" [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 0 32 32\" *ngIf=\"icon === 'insert-row'\">\n    <path d=\"M28,12H10a2.0021,2.0021,0,0,1-2-2V4a2.0021,2.0021,0,0,1,2-2H28a2.0021,2.0021,0,0,1,2,2v6A2.0021,2.0021,0,0,1,28,12ZM10,4v6H28V4Z\"></path>\n    <path d=\"M28,30H10a2.0021,2.0021,0,0,1-2-2V22a2.0021,2.0021,0,0,1,2-2H28a2.0021,2.0021,0,0,1,2,2v6A2.0021,2.0021,0,0,1,28,30ZM10,22v6H28V22Z\"></path>\n    <polygon points=\"9 16 3.414 10.414 2 11.828 6.172 16 2 20.172 3.414 21.586 9 16\"></polygon>\n</svg>\n\n<svg [attr.fill]=\"color\" [attr.width]=\"width\" [attr.height]=\"height\" viewBox=\"0 0 32 32\" *ngIf=\"icon === 'insert-column'\">\n    <path d=\"M28,30H22a2.0021,2.0021,0,0,1-2-2V10a2.0021,2.0021,0,0,1,2-2h6a2.0021,2.0021,0,0,1,2,2V28A2.0021,2.0021,0,0,1,28,30ZM22,10V28h6V10Z\"></path> \n    <polygon points=\"16 9 21.586 3.414 20.172 2 16 6.172 11.828 2 10.414 3.414 16 9\"></polygon> \n    <path d=\"M10,30H4a2.0021,2.0021,0,0,1-2-2V10A2.0021,2.0021,0,0,1,4,8h6a2.0021,2.0021,0,0,1,2,2V28A2.0021,2.0021,0,0,1,10,30ZM4,10V28h6V10Z\"></path>\n</svg>\n\n\n\n\n\n\n\n\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'universal-button',\n  templateUrl: './button.component.html',\n  styleUrls: ['./button.component.css']\n})\nexport class ButtonComponent {\n  @Input() showIcon = false;\n  @Input() bigButtton = false;\n  @Input() darkMode = false;\n  @Input() isOpen = false;\n  @Input() isSelected = false;\n  @Input() isDisabled = false;\n  @Input() tooltip = '';\n  @Input() tooltipPosition = 'above';\n\n}\n","<button \n    class=\"universal-editor-button\"\n    [class.selected]=\"isSelected || isOpen\"    \n    [class.bigButtton]=\"bigButtton\"    \n    [tooltipText]=\"tooltip\"\n    [tooltipPostition]=\"tooltipPosition\"\n    [disabled]=\"isDisabled\"\n    >\n    <ng-content></ng-content>\n    <icon *ngIf=\"showIcon\"\n        [icon]=\"isOpen ? 'expand-less' : 'expand-more'\" \n        [color]=\"darkMode ? (isDisabled ? 'black' : '#B6C2CF') : (isDisabled ? '#B6C2CF' : 'black')\"\n    >\n    </icon>\n</button>","import { Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, ViewChild, inject } from '@angular/core';\nimport { Const } from '../../shared/constants';\nimport { Observable } from 'rxjs';\n\n@Component({\n  selector: 'text-styles',\n  templateUrl: './text-styles.component.html',\n  styleUrls: ['./text-styles.component.css']\n})\nexport class TextStylesComponent implements OnInit{\n\n\n  @Output() onStyleChange = new EventEmitter<string>();\n  @Input() disabled = false;\n  @Input() darkMode = false;\n  @Input() editorWidth$!: Observable<number>;\n\n\n  editorWidth = 1000;\n  isOpen = false;\n  selectedStyle ='Normal text';\n  style ='p';\n  pSelected = true;\n  h1Selected = false;\n  h2Selected = false;\n  h3Selected = false;\n  h4Selected = false;\n  h5Selected = false;\n  h6Selected = false;\n  el = inject(ElementRef);\n\n  ngOnInit(): void {\n    this.editorWidth$.subscribe(width => {\n      this.editorWidth = width;\n      this.setStyle(this.style);\n    });\n  }\n\n  @HostListener('document:click', ['$event']) onHostClick(event: MouseEvent) {\n    if(this.isOpen) {\n      const dropdown = this.el.nativeElement.querySelector('.universal-editor-dropdown-content-text-styles');\n      dropdown.style.display = 'none';\n      this.isOpen = false;\n    }\n    else if(this.el.nativeElement.contains(event.target)){\n      this.openDropdown();\n    }\n  }\n\n\n  openDropdown(){\n    if(!this.isOpen){\n      const rect = this.el.nativeElement.getBoundingClientRect();\n      const buttonX = rect.left + window.scrollX;\n      const buttonY = rect.top + window.scrollY;\n\n      const dropdown = this.el.nativeElement.querySelector('.universal-editor-dropdown-content-text-styles');\n      dropdown.style.display = 'block';\n      this.isOpen = true;\n      const dropdownHeight = dropdown.clientHeight;\n      const dropdownWidth = dropdown.offsetWidth;\n      const rightWidth = window.innerWidth - buttonX;\n\n      if(buttonY > dropdownHeight){\n        dropdown.style.top = `${buttonY - 15 - dropdownHeight}px`;\n      }\n      else{\n        dropdown.style.top = `${buttonY + 30 + 5}px`;\n      }\n      if(rightWidth > dropdownWidth){\n        dropdown.style.left = `${buttonX}px`;\n      }\n      else{\n        dropdown.style.left = `${buttonX - (dropdownWidth - rightWidth)}px`;\n      }\n      //console.log(buttonX, buttonY)\n    }\n    \n  }\n\n  onSelect(style: string){\n    this.setStyle(style);\n    this.onStyleChange.emit(style);\n  }\n\n  setStyle(style:string){\n    this.pSelected = false;\n    this.h1Selected = false;\n    this.h2Selected = false;\n    this.h3Selected = false;\n    this.h4Selected = false;\n    this.h5Selected = false;\n    this.h6Selected = false;\n    this.style = style;\n    if(style === 'p'){\n      this.pSelected = true;\n      this.selectedStyle = this.editorWidth > Const.editorWidthL ? 'Normal text' : 'P';\n    }\n    else if(style === 'h1'){\n      this.h1Selected = true;\n      this.selectedStyle = this.editorWidth > Const.editorWidthL ? 'Heading 1' : 'H1';\n    }\n    else if(style === 'h2'){\n      this.h2Selected = true;\n      this.selectedStyle = this.editorWidth > Const.editorWidthL ? 'Heading 2' : 'H2';\n    }\n    else if(style === 'h3'){\n      this.h3Selected = true;\n      this.selectedStyle = this.editorWidth > Const.editorWidthL ? 'Heading 3' : 'H3';\n    }\n    else if(style === 'h4'){\n      this.h4Selected = true;\n      this.selectedStyle = this.editorWidth > Const.editorWidthL ? 'Heading 4' : 'H4';\n    }\n    else if(style === 'h5'){\n      this.h5Selected = true;\n      this.selectedStyle = this.editorWidth > Const.editorWidthL ? 'Heading 5' : 'H5';\n    }\n    else if(style === 'h6'){\n      this.h6Selected = true;\n      this.selectedStyle = this.editorWidth > Const.editorWidthL ? 'Heading 6' : 'H6';\n    }\n  }\n\n}\n","\n<div class=\"universal-editor-text-styles\">\n\n    <universal-button [showIcon]=\"true\" tooltip=\"Text styles\" [isOpen]=\"isOpen\" [isDisabled]=\"disabled\" [darkMode]=\"darkMode\">\n        {{selectedStyle}}\n    </universal-button>\n\n    <div class=\"universal-editor-dropdown-content-text-styles\">\n        <div class=\"universal-editor-style\" (click)=\"onSelect('p')\" \n        [class.universal-editor-style-selected]=\"pSelected\">\n            <p style=\"margin-bottom: 0px;\">Normal text</p>\n        </div>\n        <div class=\"universal-editor-style\" (click)=\"onSelect('h1')\" \n        [class.universal-editor-style-selected]=\"h1Selected\">\n            <h1 style=\"margin-bottom: 0px;\">Heading 1</h1>\n        </div>\n        <div class=\"universal-editor-style\" (click)=\"onSelect('h2')\" \n        [class.universal-editor-style-selected]=\"h2Selected\">\n            <h2 style=\"margin-bottom: 0px;\">Heading 2</h2>\n        </div>\n        <div class=\"universal-editor-style\" (click)=\"onSelect('h3')\" \n        [class.universal-editor-style-selected]=\"h3Selected\">\n            <h3 style=\"margin-bottom: 0px;\">Heading 3</h3>\n        </div>\n        <div class=\"universal-editor-style\" (click)=\"onSelect('h4')\" \n        [class.universal-editor-style-selected]=\"h4Selected\">\n            <h4 style=\"margin-bottom: 0px;\">Heading 4</h4>\n        </div>\n        <div class=\"universal-editor-style\" (click)=\"onSelect('h5')\" \n        [class.universal-editor-style-selected]=\"h5Selected\">\n            <h5 style=\"margin-bottom: 0px;\">Heading 5</h5>\n        </div>\n        <div class=\"universal-editor-style\" (click)=\"onSelect('h6')\" \n        [class.universal-editor-style-selected]=\"h6Selected\">\n            <h6 style=\"margin-bottom: 0px;\">Heading 6</h6>\n        </div>\n    </div>\n\n</div>","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'vertical-line',\n  templateUrl: './vertical-line.component.html',\n  styleUrls: ['./vertical-line.component.css']\n})\nexport class VerticalLineComponent {\n  @Input() height = '20px';\n\n}\n","<div class=\"universal-editor-vertical-line\" [style.height]=\"height\"></div>\n","import { Component, Input } from '@angular/core';\n\n@Component({\n  selector: 'text-color-tile',\n  templateUrl: './text-color-tile.component.html',\n  styleUrls: ['./text-color-tile.component.css']\n})\nexport class TextColorTileComponent {\n\n  @Input() colorCode = 'gray';\n  @Input() colorName = 'Default';\n  @Input() selected = false;\n  \n}\n","<div class=\"color-tile-border\">\n    <div \n    class=\"color-tile\"\n    [tooltipText]=\"colorName\" \n    [tooltipPostition]=\"'below'\"\n    [style.background-color]=\"colorCode\"\n    >\n    <svg *ngIf=\"selected\" class=\"selected-icon\" [attr.fill]=\"'white'\"\n    xmlns=\"http://www.w3.org/2000/svg\" height=\"24\" viewBox=\"0 -960 960 960\" width=\"24\">\n        <path d=\"M382-240 154-468l57-57 171 171 367-367 57 57-424 424Z\"/>\n    </svg>\n</div>\n\n\n","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, inject } from '@angular/core';\nimport { equal } from '../../shared/custom-methods';\n\nexport interface Color {\n  colorName: string,\n  colorCode: string,\n  selected: boolean\n}\n\n@Component({\n  selector: 'text-color',\n  templateUrl: './text-color.component.html',\n  styleUrls: ['./text-color.component.css']\n})\nexport class TextColorComponent implements AfterViewInit{\n\n  \n\n  @Output() onColorChange = new EventEmitter<Color>();\n  @Input() defaultColorName = 'Black';\n  @Input() colors:Color[] = [];\n  @Input() darkMode = false;\n  @Input() disabled = false;\n\n\n  isOpen = false;\n  selectedColor = this.colors.find(col => col.colorName === this.defaultColorName);\n\n  el = inject(ElementRef);\n\n  ngOnInit(){\n    \n  }\n\n  ngAfterViewInit() {\n    setTimeout(()=>{     \n      this.colors = this.colors.map(item => {\n        if(item.colorName == this.defaultColorName){\n          item.selected = true;\n          this.selectedColor = item;\n        }\n        else{\n          item.selected = false;\n        }\n        return item;\n      });\n    },0);\n  }\n  \n\n\n  @HostListener('document:click', ['$event']) onHostClick(event: MouseEvent) {\n    if(this.isOpen) {\n      const dropdown = this.el.nativeElement.querySelector('.universal-editor-dropdown-content-text-color');\n      dropdown.style.display = 'none';\n      this.isOpen = false;\n    }\n    else if(this.el.nativeElement.contains(event.target)){\n      this.openDropdown();\n    }\n  }\n\n  openDropdown(){\n    if(!this.isOpen){\n      const rect = this.el.nativeElement.getBoundingClientRect();\n      const buttonX = rect.left + window.scrollX;\n      const buttonY = rect.top + window.scrollY;\n\n      const dropdown = this.el.nativeElement.querySelector('.universal-editor-dropdown-content-text-color');\n      dropdown.style.display = 'block';\n      this.isOpen = true;\n      const dropdownHeight = dropdown.clientHeight;\n      const dropdownWidth = dropdown.offsetWidth;\n      const rightWidth = window.innerWidth - buttonX;\n\n      if(buttonY > dropdownHeight){\n        dropdown.style.top = `${buttonY - 15 - dropdownHeight}px`;\n      }\n      else{\n        dropdown.style.top = `${buttonY + 30 + 5}px`;\n      }\n      if(rightWidth > dropdownWidth){\n        dropdown.style.left = `${buttonX}px`;\n      }\n      else{\n        dropdown.style.left = `${buttonX - (dropdownWidth - rightWidth)}px`;\n      }\n      //console.log(buttonX, buttonY)\n    }\n    \n  }\n\n  onSelect(color: Color){\n    this.setColor(color);\n    this.onColorChange.emit(color);\n  }\n\n  setColor(color:Color){\n    this.colors = this.colors.map(item => {\n      if(equal(item, color)){\n        item.selected = true;\n        this.selectedColor = item;\n      }\n      else{\n        item.selected = false;\n      }\n      return item;\n    });\n  }\n\n\n}\n","\n<div class=\"universal-editor-text-color\">\n\n    <universal-button [showIcon]=\"true\" tooltip=\"Text color\" [isOpen]=\"isOpen\" [darkMode]=\"darkMode\" [isDisabled]=\"disabled\">\n        <div \n        class=\"text-color\"\n        [style.background-color]=\"selectedColor?.colorName !==defaultColorName ? selectedColor?.colorCode : ''\"\n        [style.background-image]=\"selectedColor?.colorName !==defaultColorName ? 'none' : ''\"\n        ></div>A \n    </universal-button>\n\n    <div class=\"universal-editor-dropdown-content-text-color\">\n        <div class=\"universal-editor-dropdown-content-row\">\n            <div *ngFor=\"let color of colors\">\n                <text-color-tile\n                [colorName]=\"color.colorName\" \n                [colorCode]=\"color.colorCode\"\n                [selected]=\"color.selected\"\n                (click)=\"onSelect(color)\">\n                </text-color-tile>\n            </div>\n        </div>\n    </div>\n\n</div>","import { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\nimport { Link } from './Link';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { Observable } from 'rxjs';\nimport { linkValidator } from '../../shared/custom-methods';\n\n@Component({\n  selector: 'edit-link',\n  templateUrl: './edit-link.component.html',\n  styleUrls: ['./edit-link.component.css']\n})\nexport class EditLinkComponent implements OnInit {\n\n  @Input() data: Link | undefined;\n  @Input() link$!: Observable<void>;\n  @Output() onSubmitLink = new EventEmitter<Link>();\n  @Output() onCancelLink = new EventEmitter<boolean>();\n\n  fb = inject(FormBuilder);\n  linkForm: FormGroup = new FormGroup({});\n\n  ngOnInit(): void {\n    this.linkForm = this.fb.group({\n      link: [this.data ? this.data.link : '', [Validators.required, linkValidator()]],\n      text: [this.data ? this.data.text : '', []]\n    });\n\n    this.link$.subscribe(() => {\n      this.linkForm = this.fb.group({\n        link: [this.data ? this.data.link : '', [Validators.required, linkValidator()]],\n        text: [this.data ? this.data.text : '', []]\n      });\n    });\n  }\n\n  submitForm(){\n    const linkData: Link = {\n      link: this.linkForm.controls['link'].value,\n      text: this.linkForm.controls['text'].value ? this.linkForm.controls['text'].value : this.linkForm.controls['link'].value,\n    }\n    this.onSubmitLink.emit(linkData);\n  }\n\n  cancelForm(){\n    this.onCancelLink.emit(true);\n  }\n\n}\n","<form [formGroup]=\"linkForm\">\n    <p class=\"edit-link-label\">Link</p>\n    <input formControlName=\"link\" class=\"edit-link-input\" type=\"text\" >\n\n    <p class=\"edit-link-label\">Display text (optional)</p>\n    <input formControlName=\"text\" class=\"edit-link-input\" type=\"text\">\n\n    <div>\n        <universal-button \n        [bigButtton]=\"true\"\n        [isSelected]=\"!linkForm.invalid && true\"\n        [isDisabled]=\"linkForm.invalid\"\n        (click)=\"submitForm()\"\n        >Save</universal-button>\n\n        <universal-button\n         style=\"margin-left: 10px;\"\n         [bigButtton]=\"true\"\n         (click)=\"cancelForm()\"\n         >Cancel</universal-button>\n    </div>\n</form>\n\n\n","import { Component, ElementRef, EventEmitter, Input, Output, inject } from '@angular/core';\nimport { downloadFile } from '../../shared/custom-methods';\n\n@Component({\n  selector: 'file-widget',\n  templateUrl: './file-widget.component.html',\n  styleUrls: ['./file-widget.component.css']\n})\nexport class FileWidgetComponent {\n\n  @Input() darkMode = false;\n  @Input() editMode = true;\n  @Input() file:{file:File; key:string} | undefined;\n  @Output() onRemoveFile = new EventEmitter<string>();\n\n\n  private el = inject(ElementRef);\n\n  mouseEnter = false;\n  date = new Date();\n  fileName ='File dasdasdasdas asd sad adas das daname.xlsx';\n\n\n  onMouseEnter(){\n    if(this.mouseEnter) return;\n    this.showEditDialog(true);\n    this.mouseEnter = true;\n  }\n\n  onMouseLeave(){\n    if(!this.mouseEnter) return;\n    this.showEditDialog(false);\n    this.mouseEnter = false;\n  }\n\n  removeFile(){\n    if(this.file){\n      this.onRemoveFile.emit(this.file.key);\n    }\n  }\n\n  downloadFile(){\n    if(this.file) downloadFile(this.file.file);\n  }\n\n  private showEditDialog(show: boolean) {\n    const dialog = this.el.nativeElement.querySelector('.file-widget-edit');\n    if(!dialog) return;\n\n    if(show){\n      dialog.style.display = 'flex';\n    }\n    else{\n      dialog.style.display = 'none';\n    }\n  }\n}\n","<div \n    class=\"file-widget\"\n    (mouseenter)=\"onMouseEnter()\"\n    (mouseleave)=\"onMouseLeave()\"\n>\n    <div class=\"file-widget-preview file\" [class.file-dark-mode]=\"darkMode\">\n        <div class=\"file-widget-edit\">\n            <universal-button \n                *ngIf=\"!editMode\"\n                tooltip=\"Download file\"\n                tooltipPosition=\"bellow\"\n                (click)=\"downloadFile()\"\n                ><icon icon=\"download\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\n            </universal-button>\n\n            <universal-button \n                *ngIf=\"editMode\"\n                style=\"margin-left: auto;\"\n                tooltip=\"Remove file\"\n                tooltipPosition=\"bellow\"\n                (click)=\"removeFile()\"\n                ><icon icon=\"remove\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\n            </universal-button>\n        </div>\n        \n    </div>\n    <div class=\"file-widget-info\">\n        <div style=\"padding-right: 8px;\">{{file?.file?.name}}</div>\n        <div>{{file?.file?.lastModified | date: 'dd MMM yyyy, hh:mm a'}}</div>\n    </div>\n</div>\n","import { Component, EventEmitter, Input, OnInit, Output, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Link } from '../edit-link/Link';\nimport { FormBuilder, FormGroup } from '@angular/forms';\n\n@Component({\n  selector: 'alt-text-img',\n  templateUrl: './alt-text-img.component.html',\n  styleUrls: ['./alt-text-img.component.css']\n})\nexport class AltTextImgComponent implements OnInit  {\n\n  @Input() data = '';\n  @Input() altText$!: Observable<void>;\n  @Output() onSubmitAltText = new EventEmitter<string>();\n  @Output() onCancelAltText = new EventEmitter<boolean>();\n\n  fb = inject(FormBuilder);\n  altTextForm: FormGroup = new FormGroup({});\n\n  ngOnInit(): void {\n    this.altTextForm = this.fb.group({\n      altText: [this.data, []],\n    });\n\n    this.altText$.subscribe(() => {\n      this.altTextForm = this.fb.group({\n        altText: [this.data, []],\n      });\n    });\n  }\n\n  submitForm(){\n    this.onSubmitAltText.emit(this.altTextForm.controls['altText'].value);\n  }\n\n  cancelForm(){\n    this.onCancelAltText.emit(true);\n  }\n\n}\n","<form [formGroup]=\"altTextForm\">\n    <p class=\"edit-altText-label\">Alt text</p>\n    <input formControlName=\"altText\" class=\"edit-altText-input\" type=\"text\" >\n\n    <div>\n        <universal-button \n        [bigButtton]=\"true\"\n        [isSelected]=\"!altTextForm.invalid && true\"\n        [isDisabled]=\"altTextForm.invalid\"\n        (click)=\"submitForm()\"\n        >Save</universal-button>\n\n        <universal-button\n         style=\"margin-left: 10px;\"\n         [bigButtton]=\"true\"\n         (click)=\"cancelForm()\"\n         >Cancel</universal-button>\n    </div>\n</form>","import { Component, ElementRef, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';\n\n\n@Component({\n  selector: 'more-format',\n  templateUrl: './more-format.component.html',\n  styleUrls: ['./more-format.component.css']\n})\nexport class MoreFormatComponent{\n\n\n  @Output() onFormat = new EventEmitter<string>();\n  @Input() disabled = false;\n  @Input() darkMode = false;\n\n  @Input() isUnderline = false;\n  @Input() isStrikethrough = false;\n  @Input() isSubscript = false;\n  @Input() isSuperscript = false;\n  @Input() underlineDisabled = false;\n  @Input() strikethroughDisabled = false;\n  @Input() subscriptDisabled = false;\n  @Input() superscriptDisabled = false;\n  @Input() clearFormattingDisabled = false;\n  @Input() enableUnderline = false;\n  @Input() enableStrikethrough = false;\n  @Input() enableSubscript = false;\n  @Input() enableSuperscript = false;\n  @Input() enableClearFormatting = false;\n\n\n  isOpen = false;\n  el = inject(ElementRef);\n\n\n  @HostListener('document:click', ['$event']) onHostClick(event: MouseEvent) {\n    if(this.isOpen) {\n      const dropdown = this.el.nativeElement.querySelector('.universal-editor-dropdown-content-more-format');\n      dropdown.style.display = 'none';\n      this.isOpen = false;\n    }\n    else if(this.el.nativeElement.contains(event.target)){\n      this.openDropdown();\n    }\n  }\n\n\n  openDropdown(){\n    if(!this.isOpen){\n      const rect = this.el.nativeElement.getBoundingClientRect();\n      const buttonX = rect.left + window.scrollX;\n      const buttonY = rect.top + window.scrollY;\n\n      const dropdown = this.el.nativeElement.querySelector('.universal-editor-dropdown-content-more-format');\n      dropdown.style.display = 'block';\n      this.isOpen = true;\n      const dropdownHeight = dropdown.clientHeight;\n      const dropdownWidth = dropdown.offsetWidth;\n      const rightWidth = window.innerWidth - buttonX;\n\n      if(buttonY > dropdownHeight){\n        dropdown.style.top = `${buttonY - 15 - dropdownHeight}px`;\n      }\n      else{\n        dropdown.style.top = `${buttonY + 30 + 5}px`;\n      }\n      if(rightWidth > dropdownWidth){\n        dropdown.style.left = `${buttonX}px`;\n      }\n      else{\n        dropdown.style.left = `${buttonX - (dropdownWidth - rightWidth)}px`;\n      }\n      //console.log(buttonX, buttonY)\n    }\n    \n  }\n\n  onSelect(format: string, isDisabled:boolean){\n    if(isDisabled) return;\n    this.onFormat.emit(format);\n  }\n\n\n}\n","\n<div class=\"universal-editor-more-format\">\n\n    <universal-button [showIcon]=\"true\" tooltip=\"More formatting\" [isOpen]=\"isOpen\"\n     [isDisabled]=\"disabled\" [darkMode]=\"darkMode\" [isSelected]=\"isUnderline || isStrikethrough || isSubscript || isSuperscript\">\n        <icon icon=\"more\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\n    </universal-button>\n    \n\n    <div class=\"universal-editor-dropdown-content-more-format\">\n        <div class=\"universal-editor-format\" (click)=\"onSelect('Underline', underlineDisabled)\" *ngIf=\"enableUnderline\"\n        [class.universal-editor-format-selected]=\"isUnderline\"\n        [class.universal-editor-format-disabled]=\"underlineDisabled\"\n        >\n            <span>Underline</span><span class=\"format-shortcut\">Ctrl+U</span>\n        </div>\n        <div class=\"universal-editor-format\" (click)=\"onSelect('Strikethrough', strikethroughDisabled)\" *ngIf=\"enableStrikethrough\"\n        [class.universal-editor-format-selected]=\"isStrikethrough\"\n        [class.universal-editor-format-disabled]=\"strikethroughDisabled\"\n\n        >\n            <span>Strikethrough</span><span class=\"format-shortcut\">Ctrl+Shift+S</span>\n        </div>\n        <div class=\"universal-editor-format\" (click)=\"onSelect('Subscript', subscriptDisabled)\" *ngIf=\"enableSubscript\"\n        [class.universal-editor-format-selected]=\"isSubscript\"\n        [class.universal-editor-format-disabled]=\"subscriptDisabled\"\n\n        >\n            <span>Subscript</span><span class=\"format-shortcut\">Ctrl+Shift+,</span>\n        </div>\n        <div class=\"universal-editor-format\" (click)=\"onSelect('Superscript', superscriptDisabled)\" *ngIf=\"enableSuperscript\"\n        [class.universal-editor-format-selected]=\"isSuperscript\"\n        [class.universal-editor-format-disabled]=\"superscriptDisabled\"\n\n        >\n            <span>Superscript</span><span class=\"format-shortcut\">Ctrl+Shift+.</span>\n        </div>\n        <div class=\"universal-editor-format\" (click)=\"onSelect('Clear formatting', clearFormattingDisabled)\" *ngIf=\"enableClearFormatting\"\n        [class.universal-editor-format-disabled]=\"clearFormattingDisabled\"\n\n        >\n            <span>Clear formatting</span><span class=\"format-shortcut\">Ctrl+\\</span>\n        </div>\n        \n    </div>\n\n</div>","import { Component, ElementRef, EventEmitter, HostListener, Input, Output, inject } from '@angular/core';\n\n@Component({\n  selector: 'more-options',\n  templateUrl: './more-options.component.html',\n  styleUrls: ['./more-options.component.css']\n})\nexport class MoreOptionsComponent {\n  \n  @Output() onOptions = new EventEmitter<string>();\n  @Input() disabled = false;\n  @Input() darkMode = false;\n\n  @Input() mentionDisabled = false;\n  @Input() linkDisabled = false;\n  @Input() fileDisabled = false;\n  @Input() codeDisabled = false;\n  @Input() dateDisabled = false;\n  @Input() enableMention = false;\n  @Input() enableLink = false;\n  @Input() enableFile = false;\n  @Input() enableCode = false;\n  @Input() enableDate = false;\n\n\n  isOpen = false;\n  el = inject(ElementRef);\n\n\n  @HostListener('document:click', ['$event']) onHostClick(event: MouseEvent) {\n    if(this.isOpen) {\n      const dropdown = this.el.nativeElement.querySelector('.universal-editor-dropdown-content-more-options');\n      dropdown.style.display = 'none';\n      this.isOpen = false;\n    }\n    else if(this.el.nativeElement.contains(event.target)){\n      this.openDropdown();\n    }\n  }\n  openDropdown(){\n    if(!this.isOpen){\n      const rect = this.el.nativeElement.getBoundingClientRect();\n      const buttonX = rect.left + window.scrollX;\n      const buttonY = rect.top + window.scrollY;\n\n      const dropdown = this.el.nativeElement.querySelector('.universal-editor-dropdown-content-more-options');\n      dropdown.style.display = 'block';\n      this.isOpen = true;\n      const dropdownHeight = dropdown.clientHeight;\n      const dropdownWidth = dropdown.offsetWidth;\n      const rightWidth = window.innerWidth - buttonX;\n\n      if(buttonY > dropdownHeight){\n        dropdown.style.top = `${buttonY - 15 - dropdownHeight}px`;\n      }\n      else{\n        dropdown.style.top = `${buttonY + 30 + 5}px`;\n      }\n      if(rightWidth > dropdownWidth){\n        dropdown.style.left = `${buttonX}px`;\n      }\n      else{\n        dropdown.style.left = `${buttonX - (dropdownWidth - rightWidth)}px`;\n      }\n      //console.log(buttonX, buttonY)\n    }\n    \n  }\n\n  onSelect(option: string, isDisabled:boolean){\n    if(isDisabled) return;\n    this.onOptions.emit(option);\n  }\n\n}\n","\n<div class=\"universal-editor-more-options\">\n\n    <universal-button [showIcon]=\"true\" tooltip=\"More options\" [isOpen]=\"isOpen\"\n     [isDisabled]=\"disabled\" [darkMode]=\"darkMode\">\n        <icon icon=\"more\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\n    </universal-button>\n    \n\n    <div class=\"universal-editor-dropdown-content-more-options\">\n        <div class=\"universal-editor-options\" (click)=\"onSelect('Mention', mentionDisabled)\"\n        [class.universal-editor-options-disabled]=\"mentionDisabled\" *ngIf=\"enableMention\"\n        >\n            <span>Mention</span><span class=\"options-shortcut\">&#64;</span>\n        </div>\n        <div class=\"universal-editor-options\" (click)=\"onSelect('Link', linkDisabled)\"\n        [class.universal-editor-options-disabled]=\"linkDisabled\" *ngIf=\"enableLink\"\n        >\n            <span>Link</span><span class=\"options-shortcut\">Ctrl+K</span>\n        </div>\n        <div class=\"universal-editor-options\" (click)=\"onSelect('File', fileDisabled)\"\n        [class.universal-editor-options-disabled]=\"fileDisabled\" *ngIf=\"enableFile\"\n        >\n            <span>Insert image or file</span>\n        </div>\n        <div class=\"universal-editor-options\" (click)=\"onSelect('Code', codeDisabled)\"\n        [class.universal-editor-options-disabled]=\"codeDisabled\" *ngIf=\"enableCode\"\n        >\n            <span>Insert code snippet</span>\n        </div>\n        <div class=\"universal-editor-options\" (click)=\"onSelect('Date', dateDisabled)\"\n        [class.universal-editor-options-disabled]=\"dateDisabled\" *ngIf=\"enableDate\"\n        >\n            <span>Insert date</span>\n        </div>\n        <!-- <div class=\"universal-editor-options\" (click)=\"onSelect('Info', infoWidgetDisabled)\"\n        [class.universal-editor-options-disabled]=\"infoWidgetDisabled\"\n        >\n            <span>Insert info widget</span>\n        </div> -->\n        \n    </div>\n\n</div>","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Observable, Subscription } from 'rxjs';\n\n@Component({\n  selector: 'datepicker',\n  templateUrl: './datepicker.component.html',\n  styleUrls: ['./datepicker.component.css']\n})\nexport class DatepickerComponent implements OnInit, OnDestroy{\n\n\n\n  @Input() darkMode = true;\n  @Input() currentDate$!:Observable<Date>;\n  @Output() onSelectDate = new EventEmitter<Date>();\n\n  todayDate = new Date();\n  currentDate!: Date;\n  shownYear!: number;\n  shownMonth!: number;\n  shownMonthName!: string;\n\n  days:{day:number, month:number, year:number}[] = [];\n\n  private subscriptions = new Subscription();\n  ngOnInit(): void {\n    this.subscriptions.add(this.currentDate$.subscribe(date => {\n      this.currentDate = date;\n      this.shownYear = this.currentDate.getFullYear();\n      this.shownMonth = this.currentDate.getMonth();\n      this.shownMonthName = this.currentDate.toLocaleString('default', { month: 'long' });\n      this.generateCalendarDays(this.shownYear, this.shownMonth);\n    }));\n  }\n  ngOnDestroy(): void {\n    this.subscriptions.unsubscribe();\n  }\n\n  goToPreviousMonth(): void {\n    this.shownYear = this.shownMonth === 0 ? this.shownYear - 1 : this.shownYear;\n    this.shownMonth = this.shownMonth === 0 ? 11 : this.shownMonth - 1;\n    this.shownMonthName = new Date(this.shownYear, this.shownMonth, 1).toLocaleString('default', { month: 'long' });\n    this.generateCalendarDays(this.shownYear, this.shownMonth);\n  }\n  goToPreviousYear(): void {\n    this.shownYear = this.shownYear - 1;\n    this.generateCalendarDays(this.shownYear, this.shownMonth);\n  }\n\n  goToNextMonth(): void {\n    this.shownYear = this.shownMonth === 11 ? this.shownYear + 1 : this.shownYear;\n    this.shownMonth = this.shownMonth === 11 ? 0 : this.shownMonth + 1;\n    this.shownMonthName = new Date(this.shownYear, this.shownMonth, 1).toLocaleString('default', { month: 'long' });\n    this.generateCalendarDays(this.shownYear, this.shownMonth);\n  }\n  goToNextYear(): void {\n    this.shownYear = this.shownYear + 1;\n    this.generateCalendarDays(this.shownYear, this.shownMonth);\n  }\n\n  pickDate(day:{day:number, month:number, year:number}){\n    this.currentDate = new Date(day.year, day.month, day.day);\n    this.onSelectDate.emit(this.currentDate);\n  }\n\n  generateCalendarDays(year: number, month: number){\n    this.days = [];\n    const firstDayOfMonth = new Date(year, month, 1); //1 feb\n    const lastDayOfPrevMonth = new Date(year, month, 0); // 31 jan\n    const lastDayOfMonthh = new Date(year, month + 1, 0); // 29 feb\n\n    const firstDayOfWeek: number = firstDayOfMonth.getDay(); // 4 Thu\n    const daysInPreviousMonth: number = lastDayOfPrevMonth.getDate(); //31\n    const daysInMonth: number = lastDayOfMonthh.getDate(); //29\n\n    for (let index = 0; index < firstDayOfWeek; index++) {\n      const day = {\n        day: daysInPreviousMonth - index,\n        month: month === 0 ? 11 : month - 1,\n        year: month === 0 ? year - 1 : year\n      }\n      this.days.unshift(day);\n    }\n    for (let index = 0; index < daysInMonth; index++) {\n      const day = {\n        day: index + 1,\n        month: month,\n        year: year\n      }\n      this.days.push(day);\n    }\n    const daysLeft = 42 - this.days.length;\n    for (let index = 0; index < daysLeft; index++) {\n      const day = {\n        day: index + 1,\n        month: month === 11 ? 0 : month + 1,\n        year: month === 11 ? year + 1 : year\n      }\n      this.days.push(day);\n    }\n  }\n}","<div class=\"universal-editor-datepicker\">\n    <div class=\"universal-editor-datepicker-header\">\n      <universal-button \n        (click)=\"goToPreviousYear()\"\n        ><icon icon=\"double-arrow-left\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\n      </universal-button>\n      <universal-button \n        (click)=\"goToPreviousMonth()\"\n        ><icon icon=\"arrow-left\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\n      </universal-button>\n      <span>{{ shownMonthName }} {{ shownYear }}</span>\n      <universal-button \n        (click)=\"goToNextMonth()\"\n        ><icon icon=\"arrow-right\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\n      </universal-button>\n      <universal-button \n        (click)=\"goToNextYear()\"\n        ><icon icon=\"double-arrow-right\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\n      </universal-button>\n      \n    </div>\n    <div class=\"universal-editor-datepicker-weekdays\">\n      <div class=\"universal-editor-datepicker-weekday\">SUN</div>\n      <div class=\"universal-editor-datepicker-weekday\">MON</div>\n      <div class=\"universal-editor-datepicker-weekday\">TUE</div>\n      <div class=\"universal-editor-datepicker-weekday\">WED</div>\n      <div class=\"universal-editor-datepicker-weekday\">THU</div>\n      <div class=\"universal-editor-datepicker-weekday\">FRI</div>\n      <div class=\"universal-editor-datepicker-weekday\">SAT</div>\n    </div>\n    <div class=\"universal-editor-datepicker-days\">\n      <universal-button *ngFor=\"let day of days\"\n        style=\"justify-content: center; display: flex;\"\n        [isSelected]=\"day.day === currentDate.getDate() && day.month === currentDate.getMonth() && day.year === currentDate.getFullYear()\"\n        (click)=\"pickDate(day)\"\n        ><span style=\"width: 32px;\"\n        [style.border-bottom]=\"day.day === todayDate.getDate() && day.month === todayDate.getMonth() && day.year === todayDate.getFullYear() ? 'rgb(9, 86, 202) 4px solid' : ''\"\n        [style.color]=\"day.month === shownMonth ? '' : 'var(--text-color-disabled, black)'\"\n        >{{day.day}}\n        </span>\n      </universal-button>\n    </div>\n  </div>\n  ","import { AfterViewInit, Component, ElementRef, EventEmitter, HostListener, Input, OnInit, Output, ViewChild, inject } from '@angular/core';\r\nimport { SafeHtml, DomSanitizer } from '@angular/platform-browser';\r\nimport { Subject} from 'rxjs';\r\nimport { TextStylesComponent } from './components/text-styles/text-styles.component';\r\nimport { equal, generateUniqueId, getWatermarkData } from './shared/custom-methods';\r\nimport { Color, TextColorComponent } from './components/text-color/text-color.component';\r\nimport { Const } from './shared/constants';\r\nimport { Link } from './components/edit-link/Link';\r\nimport { EditorApi } from './angular-universal-editor-api';\r\nimport { EditorConfig } from './angular-universal-editor-config';\r\nimport { MentionUser } from './angular-universal-editor-mention-user';\r\n\r\n@Component({\r\n  selector: 'angular-universal-editor',\r\n  templateUrl: './angular-universal-editor.component.html',\r\n  styleUrls: ['./angular-universal-editor.component.css']\r\n})\r\nexport class AngularUniversalEditorComponent  implements AfterViewInit{\r\n  \r\n  \r\n  @Input() config: EditorConfig = new EditorConfig();\r\n  @Input() mentionUsers:MentionUser[] = [];\r\n\r\n  @Output() onChange = new EventEmitter<string>();\r\n  @Output() onEditorReady = new EventEmitter<EditorApi>();\r\n  @Output() onChangeMentionUsers = new EventEmitter<MentionUser[]>();\r\n  @Output() onFilesChanged = new EventEmitter<{file:File; key:string}[]>();\r\n  \r\n  @ViewChild('editor') editor!: ElementRef;\r\n  private widthSubject = new Subject<number>();\r\n  editorWidth$ = this.widthSubject.asObservable();\r\n  editorWidth = 1000;\r\n  editorWidthM = Const.editorWidthM;\r\n  editorWidthS = Const.editorWidthS;\r\n  textColors = Const.colors;\r\n  darkMode = false;\r\n  defaultTextColor:Color | undefined;\r\n  innerHtml!: SafeHtml;\r\n  private el = inject(ElementRef);\r\n  private sanitizer = inject(DomSanitizer);\r\n\r\n  ngAfterViewInit(){\r\n    const editorApi: EditorApi = {\r\n      clearFormatting: this.onClearFormatting.bind(this),\r\n      triggerBold: this.onSelectBold.bind(this),\r\n      triggerItalic: this.onSelectItalic.bind(this),\r\n      triggerUnderline: this.onSelectUnderline.bind(this),\r\n      triggerStrikethrough: this.onSelectStrikethrough.bind(this),\r\n      triggerSubscript: this.onSelectSubscript.bind(this),\r\n      triggerSuperscript: this.onSelectSuperscript.bind(this),\r\n      triggerMention: this.onMentionClick.bind(this),\r\n      setTextStyle: this.onStyleChange.bind(this),\r\n      setTextColor: this.triggerTextColor.bind(this),\r\n      setInnerHTML: this.triggerInnerHtml.bind(this),\r\n      triggerBulletList: this.onBulletListClick.bind(this),\r\n      triggerNumberedList: this.onNumberedListClick.bind(this),\r\n      setDarkMode: this.setDefaultTextColor.bind(this),\r\n      triggerLinkPopup: this.triggerLink.bind(this),\r\n      triggerUploadFilePopup: this.uploadFile.bind(this),\r\n      setUploadedFiles: this.setUploadFiles.bind(this),\r\n      setImageUrl: this.setImageUrl.bind(this),\r\n      triggerCode: this.addCode.bind(this),\r\n      triggerTable: this.addTable.bind(this),\r\n      triggerDate: this.addDate.bind(this)\r\n    }\r\n    setTimeout(()=>{     \r\n      this.onEditorReady.emit(editorApi);\r\n      if(this.config.initialInnerHTML){\r\n        this.innerHtml =typeof this.config.initialInnerHTML === 'string' ? this.sanitizer.bypassSecurityTrustHtml(this.config.initialInnerHTML) : this.config.initialInnerHTML;\r\n        setTimeout(()=>this.setCurrentUserClass(true),0);\r\n      }\r\n      this.setDefaultTextColor(this.config.darkMode);\r\n      this.files = this.config.initialFiles;\r\n      this.widthSubject.next(this.editor.nativeElement.offsetWidth);\r\n      this.editorWidth = this.editor.nativeElement.offsetWidth;\r\n    }, 0);\r\n  }\r\n\r\n\r\n  onKeydown(event:KeyboardEvent){  \r\n    //console.log(event)\r\n\r\n    if(this.isMentionDropdownOpen){\r\n      if(event.key === 'ArrowDown' && this.enteredUser){\r\n        event.preventDefault();\r\n        if(this.enteredUser.index < this.filteredUsers.length - 1){\r\n          const newIndex = this.enteredUser.index + 1;\r\n          this.filteredUsers = this.filteredUsers.map(user =>{\r\n            return{\r\n              ...user,\r\n              isMouseEntered : user.index === newIndex,\r\n            }\r\n          });\r\n          this.enteredUser = this.filteredUsers[newIndex];\r\n          const items = this.el.nativeElement.querySelectorAll('.universal-editor-user');\r\n          if (!items.length) return;\r\n          items[newIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n        }\r\n      }\r\n      else if(event.key === 'ArrowUp'){\r\n        event.preventDefault();\r\n        if(this.enteredUser && this.enteredUser.index > 0){\r\n          const newIndex = this.enteredUser.index - 1;\r\n          this.filteredUsers = this.filteredUsers.map(user =>{\r\n            return{\r\n              ...user,\r\n              isMouseEntered : user.index === newIndex,\r\n            }\r\n          });\r\n          this.enteredUser = this.filteredUsers[newIndex];\r\n          const items = this.el.nativeElement.querySelectorAll('.universal-editor-user');\r\n          if (!items.length) return;\r\n          items[newIndex].scrollIntoView({ behavior: 'smooth', block: 'nearest' });\r\n        }\r\n      }\r\n      else if(event.key === 'Tab' || event.key === 'Enter'){\r\n        event.preventDefault();\r\n        if(this.enteredUser){         \r\n          this.onSelectUser(this.enteredUser);\r\n        }\r\n        else{\r\n          this.onCancelSelectUser(false);\r\n        }\r\n      }\r\n      else if(event.key === 'Backspace' && !this.searchUserText){\r\n        event.preventDefault();\r\n        this.onCancelSelectUser(true);\r\n      }\r\n      else if(event.key === 'Escape'){\r\n        event.preventDefault();\r\n        this.onCancelSelectUser(false);\r\n      }\r\n    }\r\n    else if(event.key === 'z' && event.ctrlKey){\r\n      /* event.preventDefault();\r\n      if(this.savedChanges.length > 1){\r\n        debugger\r\n        this.savedChanges.pop();\r\n        const last = this.savedChanges[this.savedChanges.length - 1];\r\n        if(!last) return;\r\n        this.innerHtml = this.sanitizer.bypassSecurityTrustHtml(last.html);\r\n        this.files = last.files;\r\n        this.savedRange = last.range;\r\n        this.restoreCaretPosition();\r\n        this.traverseTheDOM(true);\r\n      } */\r\n    }\r\n    else if(event.key === 'y' && event.ctrlKey){\r\n      /* event.preventDefault(); */\r\n    }\r\n    else if(event.key === 'b' && event.ctrlKey){\r\n      const tag = 'strong';\r\n      event.preventDefault();\r\n      if(this.config.enableBold && !this.boldDisabled){\r\n        this.isBold = !this.isBold;\r\n        if(this.currentTextStyleElement){\r\n          if(this.isBold){\r\n            const elem = document.createElement(tag);\r\n            let elemText = '\\u200B';\r\n            if(!this.currentTextStyleElement.textContent){ // empty p\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.currentTextStyleElement.appendChild(elem);\r\n              this.setCursorPositionAfter(space, false);\r\n            }\r\n            else{  //with content\r\n              if(this.selectedText){\r\n                elemText = this.selectedText;\r\n              }\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.addElement(elem, this.currentTextStyleElement);\r\n              this.setCursorPositionAfter(elem, true);\r\n            }\r\n            this.currentBoldElement = elem;\r\n          }\r\n          else{\r\n            if(this.currentBoldElement && this.currentBoldElement.textContent === '\\u200B'){ // empty strong\r\n              this.currentBoldElement.remove();            \r\n            }\r\n            else if(this.currentBoldElement){ // with content\r\n              this.splitAtCaret(this.currentBoldElement, false, false);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if(event.key === 'i' && event.ctrlKey){\r\n      const tag = 'em';\r\n      event.preventDefault();\r\n      if(this.config.enableItalic && !this.italicDisabled){\r\n        this.isItalic = !this.isItalic;\r\n        if(this.currentTextStyleElement){\r\n          if(this.isItalic){\r\n            const elem = document.createElement(tag);\r\n            let elemText = '\\u200B';\r\n            if(!this.currentTextStyleElement.textContent){ // empty p\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.currentTextStyleElement.appendChild(elem);\r\n              this.setCursorPositionAfter(space, false);\r\n            }\r\n            else{  //with content\r\n              if(this.selectedText){\r\n                elemText = this.selectedText;\r\n              }\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.addElement(elem, this.currentTextStyleElement);\r\n              this.setCursorPositionAfter(elem, true);\r\n            }\r\n            this.currentBoldElement = elem;\r\n          }\r\n          else{\r\n            if(this.currentItalicElement && this.currentItalicElement.textContent === '\\u200B'){ // empty italic\r\n              this.currentItalicElement.remove();            \r\n            }\r\n            else if(this.currentItalicElement){ // with content\r\n              this.splitAtCaret(this.currentItalicElement, false, false);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if(event.key === 'u' && event.ctrlKey){\r\n      const tag = 'u';\r\n      event.preventDefault();\r\n      if(this.config.enableUnderline && !this.underlineDisabled){\r\n        this.isUnderline = !this.isUnderline;\r\n        if(this.currentTextStyleElement){\r\n          if(this.isUnderline){\r\n            const elem = document.createElement(tag);\r\n            let elemText = '\\u200B';\r\n            if(!this.currentTextStyleElement.textContent){ // empty p\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.currentTextStyleElement.appendChild(elem);\r\n              this.setCursorPositionAfter(space, false);\r\n            }\r\n            else{  //with content\r\n              if(this.selectedText){\r\n                elemText = this.selectedText;\r\n              }\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.addElement(elem, this.currentTextStyleElement);\r\n              this.setCursorPositionAfter(elem, true);\r\n            }\r\n            this.currentBoldElement = elem;\r\n          }\r\n          else{\r\n            if(this.currentUnderlineElement && this.currentUnderlineElement.textContent === '\\u200B'){ // empty \r\n              this.currentUnderlineElement.remove();            \r\n            }\r\n            else if(this.currentUnderlineElement){ // with content\r\n              this.splitAtCaret(this.currentUnderlineElement, false, false);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if(event.key === 'S' && event.ctrlKey && event.shiftKey){\r\n      const tag = 's';\r\n      event.preventDefault();\r\n      if(this.config.enableStrikethrough && !this.strikethroughDisabled){\r\n        this.isStrikethrough = !this.isStrikethrough;\r\n        if(this.currentTextStyleElement){\r\n          if(this.isStrikethrough){\r\n            const elem = document.createElement(tag);\r\n            let elemText = '\\u200B';\r\n            if(!this.currentTextStyleElement.textContent){ // empty p\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.currentTextStyleElement.appendChild(elem);\r\n              this.setCursorPositionAfter(space, false);\r\n            }\r\n            else{  //with content\r\n              if(this.selectedText){\r\n                elemText = this.selectedText;\r\n              }\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.addElement(elem, this.currentTextStyleElement);\r\n              this.setCursorPositionAfter(elem, true);\r\n            }\r\n            this.currentBoldElement = elem;\r\n          }\r\n          else{\r\n            if(this.currentStrikethroughElement && this.currentStrikethroughElement.textContent === '\\u200B'){ // empty \r\n              this.currentStrikethroughElement.remove();            \r\n            }\r\n            else if(this.currentStrikethroughElement){ // with content\r\n              this.splitAtCaret(this.currentStrikethroughElement, false, false);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if(event.code === 'Comma' && event.ctrlKey && event.shiftKey){\r\n      const tag = 'sub';\r\n      event.preventDefault();\r\n      if(this.config.enableSubscript && !this.subscriptDisabled){\r\n        this.isSubscript = !this.isSubscript;\r\n        if(this.currentTextStyleElement){\r\n          if(this.isSubscript){\r\n            const elem = document.createElement(tag);\r\n            let elemText = '\\u200B';\r\n            if(!this.currentTextStyleElement.textContent){ // empty p\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.currentTextStyleElement.appendChild(elem);\r\n              this.setCursorPositionAfter(space, false);\r\n            }\r\n            else{  //with content\r\n              if(this.selectedText){\r\n                elemText = this.selectedText;\r\n              }\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.addElement(elem, this.currentTextStyleElement);\r\n              this.setCursorPositionAfter(elem, true);\r\n            }\r\n            this.currentBoldElement = elem;\r\n          }\r\n          else{\r\n            if(this.currentSubscriptElement && this.currentSubscriptElement.textContent === '\\u200B'){ // empty \r\n              this.currentSubscriptElement.remove();            \r\n            }\r\n            else if(this.currentSubscriptElement){ // with content\r\n              this.splitAtCaret(this.currentSubscriptElement, false, false);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if(event.code === 'Period' && event.ctrlKey && event.shiftKey){\r\n      const tag = 'sup';\r\n      event.preventDefault();\r\n      if(this.config.enableSuperscript && !this.superscriptDisabled){\r\n        this.isSuperscript = !this.isSuperscript;\r\n        if(this.currentTextStyleElement){\r\n          if(this.isSuperscript){\r\n            const elem = document.createElement(tag);\r\n            let elemText = '\\u200B';\r\n            if(!this.currentTextStyleElement.textContent){ // empty p\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.currentTextStyleElement.appendChild(elem);\r\n              this.setCursorPositionAfter(space, false);\r\n            }\r\n            else{  //with content\r\n              if(this.selectedText){\r\n                elemText = this.selectedText;\r\n              }\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.addElement(elem, this.currentTextStyleElement);\r\n              this.setCursorPositionAfter(elem, true);\r\n            }\r\n            this.currentBoldElement = elem;\r\n          }\r\n          else{\r\n            if(this.currentSupesrsciptElement && this.currentSupesrsciptElement.textContent === '\\u200B'){ // empty \r\n              this.currentSupesrsciptElement.remove();            \r\n            }\r\n            else if(this.currentSupesrsciptElement){ // with content\r\n              this.splitAtCaret(this.currentSupesrsciptElement, false, false);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if(event.key === '\\\\' && event.ctrlKey && !this.clearFormattingDisabled){\r\n      event.preventDefault();\r\n      if(this.currentTextStyleElement && this.highestFormatElement){\r\n        this.splitAtCaret(this.highestFormatElement, true, false);\r\n      }\r\n    }\r\n    else if(event.code === 'CustomTextColor'){\r\n      const tag = 'span';\r\n      event.preventDefault();\r\n      if(this.config.enableTextColor && this.currentTextStyleElement && !this.textColorDisabled){\r\n        if(equal(this.selectedColor, this.defaultTextColor)){\r\n          if(this.currentTextStyleElement.textContent && this.currentTextColorElement){\r\n            this.splitAtCaret(this.currentTextColorElement, false, false);\r\n          }\r\n        }\r\n        else{\r\n          if(this.currentTextColorElement){ // from color to color\r\n            this.splitAtCaret(this.currentTextColorElement, false, true);\r\n          }\r\n          else if(this.selectedColor){ //from default to color\r\n            const elem = document.createElement(tag);\r\n            elem.style.color = this.selectedColor.colorCode;\r\n            elem.className = 'universal-editor-text-color';\r\n            elem.setAttribute('custom-text-color-name', this.selectedColor.colorName);\r\n            elem.setAttribute('custom-text-color-code', this.selectedColor.colorCode);\r\n            let elemText = '\\u200B';\r\n            if(!this.currentTextStyleElement.textContent){ // empty p\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.currentTextStyleElement.appendChild(elem);\r\n              this.setCursorPositionAfter(space, false);\r\n            }\r\n            else{  //with content\r\n              if(this.selectedText){\r\n                elemText = this.selectedText;\r\n              }\r\n              const space = document.createTextNode(elemText);\r\n              elem.appendChild(space);\r\n              this.addElement(elem, this.currentTextStyleElement);\r\n              this.setCursorPositionAfter(elem, true);\r\n            }\r\n            this.currentBoldElement = elem;\r\n          }\r\n        } \r\n      }\r\n    }\r\n    else if(event.code === 'Digit8' && event.ctrlKey && event.shiftKey && this.textStyle === 'p'){\r\n      event.preventDefault();\r\n      if(this.config.enableBulletList && !this.bulletListDisabled){\r\n        this.isBulletList = !this.isBulletList;\r\n        //\r\n        if(this.isBulletList){\r\n          const ul = document.createElement('ul');\r\n          ul.className = 'universal-editor-bullet-list';\r\n          this.currentBulletListElement = ul;\r\n          ul.setAttribute('bullet-list-indent-level', '1');\r\n          let caretElem = undefined;\r\n          if(this.currentTextStyleElement){\r\n            const selection = window.getSelection();\r\n            if (selection && selection.rangeCount > 0) {\r\n              const range = selection.getRangeAt(0);\r\n              const pElements = this.editor.nativeElement.querySelectorAll('p'); \r\n              pElements.forEach((p:any) => {\r\n                if(range.intersectsNode(p)){\r\n                  const li = document.createElement('li');\r\n                  li.appendChild(p);\r\n                  ul.appendChild(li);\r\n                  caretElem = p;\r\n                }\r\n              });\r\n            }\r\n            this.addElement(ul, this.editor.nativeElement);\r\n            this.mergeAdjacent('ul');\r\n            this.setCursorPositionAfter(caretElem, true);\r\n          }\r\n          else{\r\n           // create empty ul\r\n           const li = document.createElement('li');\r\n           const p = document.createElement('p');\r\n           p.textContent = '\\u200B';\r\n           li.appendChild(p);\r\n           ul.appendChild(li);\r\n           this.addElement(ul, this.editor.nativeElement);\r\n           this.mergeAdjacent('ul');\r\n           this.setCursorPositionAfter(p, true);\r\n           this.currentTextStyleElement = p;\r\n          }\r\n          this.traverseTheDOM(true);\r\n        }\r\n        else if(this.currentTextStyleElement){\r\n          if(this.currentBulletListElement && (this.currentBulletListElement.textContent === '\\u200B' || this.currentBulletListElement.textContent === '')){ // empty ul\r\n            const level = this.currentBulletListElement.getAttribute('bullet-list-indent-level');\r\n            if(level && level === '1'){\r\n              this.currentBulletListElement.replaceWith(this.currentTextStyleElement);      \r\n              this.currentBulletListElement = undefined;   \r\n            }\r\n            else{\r\n              const liLevel1 = this.currentBulletListElement.parentElement;\r\n              const ulLevel1 = this.currentBulletListElement.parentElement?.parentElement;\r\n              if(ulLevel1 && liLevel1){\r\n                const li = document.createElement('li');\r\n                li.appendChild(this.currentTextStyleElement);\r\n                ulLevel1.insertBefore(li, liLevel1.nextSibling);\r\n                this.currentBulletListElement.remove();\r\n                this.currentBulletListElement = ulLevel1;\r\n              }\r\n              \r\n            }\r\n            \r\n          }\r\n          else if(this.currentBulletListElement){ // with content\r\n            const selection = window.getSelection();\r\n            if (selection && selection.rangeCount > 0) {\r\n              const range = selection.getRangeAt(0);\r\n              const level = this.currentBulletListElement.getAttribute('bullet-list-indent-level');\r\n              const liElements = this.currentBulletListElement.querySelectorAll(':scope > li'); \r\n              const parent = this.currentBulletListElement.parentElement; \r\n              let ul:HTMLElement | undefined = undefined;\r\n              let caretElem = undefined;\r\n              liElements.forEach((li, index) => {\r\n                if(index === 0 && this.currentBulletListElement && parent){\r\n                  if(range.intersectsNode(li)){\r\n                    while (li.firstChild) {\r\n                      caretElem = li.firstChild;\r\n                      if(level === '1'){\r\n                        parent.insertBefore(li.firstChild, this.currentBulletListElement);\r\n                      }\r\n                      else{\r\n                        const parentUl = parent.parentElement;\r\n                        if(parentUl){\r\n                          const newLi = document.createElement('li');\r\n                          newLi.appendChild(li.firstChild);\r\n                          parentUl.insertBefore(newLi, parent.nextSibling);\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                  else{\r\n                    ul = document.createElement('ul');\r\n                    ul.className = 'universal-editor-bullet-list';\r\n                    ul.setAttribute('bullet-list-indent-level', level ?? '');\r\n                    ul.appendChild(li);\r\n                    parent.insertBefore(ul, this.currentBulletListElement);\r\n                  }\r\n                }\r\n                else if(this.currentBulletListElement && parent) {\r\n                  if(range.intersectsNode(li)){\r\n                    if(ul){\r\n                      ul = undefined;\r\n                    } \r\n                    while (li.firstChild) {\r\n                      caretElem = li.firstChild;\r\n                      if(level === '1'){\r\n                        parent.insertBefore(li.firstChild, this.currentBulletListElement);\r\n                      }\r\n                      else{\r\n                        const parentUl = parent.parentElement;\r\n                        if(parentUl){\r\n                          const newLi = document.createElement('li');\r\n                          newLi.appendChild(li.firstChild);\r\n                          parentUl.insertBefore(newLi, parent.nextSibling);\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                  else{\r\n                    if(ul){\r\n                      ul.appendChild(li);\r\n                    }\r\n                    else{\r\n                      ul = document.createElement('ul');\r\n                      ul.className = 'universal-editor-bullet-list';\r\n                      ul.setAttribute('bullet-list-indent-level', level ?? '');\r\n                      ul.appendChild(li);\r\n                      parent.insertBefore(ul, this.currentBulletListElement);\r\n                    }\r\n                  }\r\n                } \r\n              });\r\n              this.currentBulletListElement.remove();\r\n              this.currentBulletListElement = undefined;\r\n              this.setCursorPositionAfter(caretElem, true);\r\n            }\r\n          }\r\n\r\n\r\n        }\r\n        setTimeout(() => this.traverseTheDOM(true), 0);\r\n      }\r\n    }\r\n    else if(event.code === 'Digit7' && event.ctrlKey && event.shiftKey && this.textStyle === 'p'){\r\n      event.preventDefault();\r\n      if(this.config.enableNumberedList && !this.numberedListDisabled){\r\n        this.isNumberedList = !this.isNumberedList;\r\n        //\r\n        if(this.isNumberedList){\r\n          const ol = document.createElement('ol');\r\n          ol.className = 'universal-editor-numbered-list';\r\n          this.currentNumberedListElement = ol;\r\n          ol.setAttribute('numbered-list-indent-level', '1');\r\n          let caretElem = undefined;\r\n          if(this.currentTextStyleElement){\r\n            const selection = window.getSelection();\r\n            if (selection && selection.rangeCount > 0) {\r\n              const range = selection.getRangeAt(0);\r\n              const pElements = this.editor.nativeElement.querySelectorAll('p'); \r\n              pElements.forEach((p:any) => {\r\n                if(range.intersectsNode(p)){\r\n                  const li = document.createElement('li');\r\n                  li.appendChild(p);\r\n                  ol.appendChild(li);\r\n                  caretElem = p;\r\n                }\r\n              });\r\n            }\r\n            this.addElement(ol, this.editor.nativeElement);\r\n            this.mergeAdjacent('ol');\r\n            this.setCursorPositionAfter(caretElem, true);\r\n          }\r\n          else{\r\n           // create empty ul\r\n           const li = document.createElement('li');\r\n           const p = document.createElement('p');\r\n           p.textContent = '\\u200B';\r\n           li.appendChild(p);\r\n           ol.appendChild(li);\r\n           this.addElement(ol, this.editor.nativeElement);\r\n           this.mergeAdjacent('ol');\r\n           this.setCursorPositionAfter(p, true);\r\n           this.currentTextStyleElement = p;\r\n          }\r\n          this.traverseTheDOM(true);\r\n        }\r\n        else if(this.currentTextStyleElement){\r\n          if(this.currentNumberedListElement && (this.currentNumberedListElement.textContent === '\\u200B' || this.currentNumberedListElement.textContent === '')){ // empty ul\r\n            const level = this.currentNumberedListElement.getAttribute('numbered-list-indent-level');\r\n            if(level && level === '1'){\r\n              this.currentNumberedListElement.replaceWith(this.currentTextStyleElement);      \r\n              this.currentNumberedListElement = undefined;   \r\n            }\r\n            else{\r\n              const liLevel1 = this.currentNumberedListElement.parentElement;\r\n              const olLevel1 = this.currentNumberedListElement.parentElement?.parentElement;\r\n              if(olLevel1 && liLevel1){\r\n                const li = document.createElement('li');\r\n                li.appendChild(this.currentTextStyleElement);\r\n                olLevel1.insertBefore(li, liLevel1.nextSibling);\r\n                this.currentNumberedListElement.remove();\r\n                this.currentNumberedListElement = olLevel1;\r\n              }\r\n              \r\n            }\r\n            \r\n          }\r\n          else if(this.currentNumberedListElement){ // with content\r\n            const selection = window.getSelection();\r\n            if (selection && selection.rangeCount > 0) {\r\n              const range = selection.getRangeAt(0);\r\n              const level = this.currentNumberedListElement.getAttribute('numbered-list-indent-level');\r\n              const liElements = this.currentNumberedListElement.querySelectorAll(':scope > li'); \r\n              const parent = this.currentNumberedListElement.parentElement; \r\n              let ol:HTMLElement | undefined = undefined;\r\n              let caretElem = undefined;\r\n              liElements.forEach((li, index) => {\r\n                if(index === 0 && this.currentNumberedListElement && parent){\r\n                  if(range.intersectsNode(li)){\r\n                    while (li.firstChild) {\r\n                      caretElem = li.firstChild;\r\n                      if(level === '1'){\r\n                        parent.insertBefore(li.firstChild, this.currentNumberedListElement);\r\n                      }\r\n                      else{\r\n                        const parentUl = parent.parentElement;\r\n                        if(parentUl){\r\n                          const newLi = document.createElement('li');\r\n                          newLi.appendChild(li.firstChild);\r\n                          parentUl.insertBefore(newLi, parent.nextSibling);\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                  else{\r\n                    ol = document.createElement('ol');\r\n                    ol.className = 'universal-editor-numbered-list';\r\n                    ol.setAttribute('numbered-list-indent-level', level ?? '');\r\n                    ol.appendChild(li);\r\n                    parent.insertBefore(ol, this.currentNumberedListElement);\r\n                  }\r\n                }\r\n                else if(this.currentNumberedListElement && parent) {\r\n                  if(range.intersectsNode(li)){\r\n                    if(ol){\r\n                      ol = undefined;\r\n                    } \r\n                    while (li.firstChild) {\r\n                      caretElem = li.firstChild;\r\n                      if(level === '1'){\r\n                        parent.insertBefore(li.firstChild, this.currentNumberedListElement);\r\n                      }\r\n                      else{\r\n                        const parentUl = parent.parentElement;\r\n                        if(parentUl){\r\n                          const newLi = document.createElement('li');\r\n                          newLi.appendChild(li.firstChild);\r\n                          parentUl.insertBefore(newLi, parent.nextSibling);\r\n                        }\r\n                      }\r\n                    }\r\n                  }\r\n                  else{\r\n                    if(ol){\r\n                      ol.appendChild(li);\r\n                    }\r\n                    else{\r\n                      ol = document.createElement('ol');\r\n                      ol.className = 'universal-editor-numbered-list';\r\n                      ol.setAttribute('numbered-list-indent-level', level ?? '');\r\n                      ol.appendChild(li);\r\n                      parent.insertBefore(ol, this.currentNumberedListElement);\r\n                    }\r\n                  }\r\n                } \r\n              });\r\n              this.currentNumberedListElement.remove();\r\n              this.currentNumberedListElement = undefined;\r\n              this.setCursorPositionAfter(caretElem, true);\r\n            }\r\n          }\r\n\r\n\r\n        }\r\n        setTimeout(() => this.traverseTheDOM(true), 0);\r\n      }\r\n    }\r\n    else if (event.altKey && event.shiftKey && event.key === 'T') {\r\n      event.preventDefault();\r\n      this.addTable();\r\n    }\r\n    else if(event.key === 'k' && event.ctrlKey && !this.linkDisabled){\r\n      event.preventDefault();\r\n      this.showAddEditLink(true, 'Add');\r\n    }\r\n    else if (event.key === 'Backspace'){\r\n      if(this.currentImageElement){\r\n        event.preventDefault();\r\n        this.removeFile();\r\n        this.traverseTheDOM(true);\r\n      }\r\n      else if(this.currentCodeElement && this.currentCodeElement.lastChild){\r\n        const selection = window.getSelection();\r\n        if (selection && selection.rangeCount > 0) {\r\n          const range = selection.getRangeAt(0);\r\n          if (range.collapsed) {\r\n            const startNode = range.startContainer;\r\n            const isAtStartOfLine = range.startOffset === 0;\r\n            const isAtStartOfContent = startNode === this.currentCodeElement.lastChild && isAtStartOfLine;\r\n            if (isAtStartOfContent) {\r\n              event.preventDefault(); \r\n              if(this.currentCodeElement.lastChild.textContent?.length === 0){\r\n                this.currentCodeElement.remove();\r\n              }\r\n            }\r\n          }\r\n        }\r\n        this.traverseTheDOM(true);\r\n      }\r\n      else if(this.currentTextStyleElement && (this.currentTextStyleElement.textContent === '\\u200B' || this.currentTextStyleElement.textContent === '')){\r\n        event.preventDefault();\r\n        let sibiling = undefined;\r\n        if(this.currentBulletListElement){\r\n          if(this.currentBulletListElement.textContent === '\\u200B' || this.currentBulletListElement.textContent === ''){\r\n            sibiling = this.currentBulletListElement.previousSibling as HTMLElement;\r\n            this.currentBulletListElement.remove();\r\n          }\r\n          else{\r\n            const li = this.currentTextStyleElement.parentElement;\r\n            if(li) li.remove();\r\n          }\r\n        }\r\n        else if(this.currentNumberedListElement){\r\n          if(this.currentNumberedListElement.textContent === '\\u200B' || this.currentNumberedListElement.textContent === ''){\r\n            sibiling = this.currentNumberedListElement.previousSibling as HTMLElement;\r\n            this.currentNumberedListElement.remove();\r\n          }\r\n          else{\r\n            const li = this.currentTextStyleElement.parentElement;\r\n            if(li) li.remove();\r\n          }\r\n        }\r\n        else{\r\n          sibiling = this.currentTextStyleElement.previousSibling as HTMLElement;\r\n          this.currentTextStyleElement.remove();\r\n        }\r\n        if(sibiling && sibiling.className === 'img-wrapper'){\r\n          this.currentImageElement = sibiling;\r\n          const p = document.createElement('p');\r\n          p.textContent = '\\u200B';\r\n          sibiling.insertAdjacentElement('afterend', p);\r\n          setTimeout(() => this.addSizerIntoImageWrapper(),50);\r\n          this.setCursorPositionAfter(sibiling, true);\r\n        }\r\n        else if (sibiling && sibiling.className === 'code-wrapper') {\r\n          this.currentCodeElement = sibiling;\r\n          const p = document.createElement('p');\r\n          p.textContent = '\\u200B';\r\n          sibiling.insertAdjacentElement('afterend', p);\r\n          this.setCursorPositionAfter(sibiling.lastChild, true);\r\n          this.showCodePopup(true);\r\n        }\r\n        else if (sibiling && sibiling.className === 'table-wrapper') {\r\n          this.currentTableElement = sibiling;\r\n          const p = document.createElement('p');\r\n          p.textContent = '\\u200B';\r\n          sibiling.insertAdjacentElement('afterend', p);\r\n          this.setCursorInsideTable();\r\n          this.showTablePopup(true);\r\n        }\r\n\r\n        if(this.currentCellElement && !this.currentCellElement.hasChildNodes()){\r\n          const p = document.createElement('p');\r\n          p.textContent = '\\u200B';\r\n          this.currentCellElement.appendChild(p);\r\n          this.setCursorPositionAfter(p, true);\r\n        }\r\n        this.traverseTheDOM(true);\r\n      }\r\n      else{\r\n        const selection = window.getSelection();\r\n        if(selection){\r\n          const range = selection.getRangeAt(0);\r\n          if (range.startOffset === 0 && range.startContainer.nodeType === Node.TEXT_NODE && this.currentTextStyleElement) {\r\n            let sibiling = undefined;\r\n            if(this.currentBulletListElement){\r\n              sibiling = this.currentBulletListElement.previousSibling as HTMLElement;\r\n            }\r\n            else if(this.currentNumberedListElement){\r\n              sibiling = this.currentNumberedListElement.previousSibling as HTMLElement;\r\n            }\r\n            else{\r\n              sibiling = this.currentTextStyleElement.previousSibling as HTMLElement;\r\n            }\r\n            if(sibiling && sibiling.className === 'img-wrapper'){\r\n              event.preventDefault();\r\n              this.currentImageElement = sibiling;\r\n              setTimeout(() => this.addSizerIntoImageWrapper(),50);\r\n              this.setCursorPositionAfter(this.currentImageElement, true);\r\n              this.traverseTheDOM(true);\r\n            }\r\n            else if(sibiling && sibiling.className === 'code-wrapper') {\r\n              event.preventDefault();\r\n              this.currentCodeElement = sibiling;\r\n              this.setCursorPositionAfter(this.currentCodeElement.lastChild, true);\r\n              this.showCodePopup(true);\r\n              this.traverseTheDOM(true);\r\n            }\r\n            else if (sibiling && sibiling.className === 'table-wrapper') {\r\n              event.preventDefault();\r\n              this.currentTableElement = sibiling;\r\n              this.setCursorInsideTable();\r\n              this.showTablePopup(true);\r\n            }           \r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if(event.key === 'Delete'){\r\n      if(this.currentImageElement){\r\n        event.preventDefault();\r\n        this.removeFile();\r\n        this.traverseTheDOM(true);\r\n      }\r\n      else if(this.currentCodeElement){\r\n        const selection = window.getSelection();\r\n        if (selection && selection.rangeCount > 0) {\r\n          const range = selection.getRangeAt(0);\r\n          if (range.collapsed) {\r\n            const textNode = range.endContainer;\r\n            if(textNode && textNode.textContent && range.endOffset === textNode.textContent.length && this.currentCodeElement){\r\n              event.preventDefault();\r\n            }\r\n          }\r\n        }\r\n      }\r\n      else if(this.currentTextStyleElement && (this.currentTextStyleElement.textContent === '\\u200B' || this.currentTextStyleElement.textContent === '')){\r\n        event.preventDefault();\r\n        let sibiling = undefined;\r\n        if(this.currentBulletListElement){\r\n          if(this.currentBulletListElement.textContent === '\\u200B' || this.currentBulletListElement.textContent === ''){\r\n            sibiling = this.currentBulletListElement.nextSibling as HTMLElement;\r\n            this.currentBulletListElement.remove();\r\n          }\r\n          else{\r\n            const li = this.currentTextStyleElement.parentElement;\r\n            if(li) li.remove();\r\n          }\r\n        }\r\n        else if(this.currentNumberedListElement){\r\n          if(this.currentNumberedListElement.textContent === '\\u200B' || this.currentNumberedListElement.textContent === ''){\r\n            sibiling = this.currentNumberedListElement.nextSibling as HTMLElement;\r\n            this.currentNumberedListElement.remove();\r\n          }\r\n          else{\r\n            const li = this.currentTextStyleElement.parentElement;\r\n            if(li) li.remove();\r\n          }\r\n        }\r\n        else{\r\n          sibiling = this.currentTextStyleElement.nextSibling as HTMLElement;\r\n          this.currentTextStyleElement.remove();\r\n        }\r\n        if(sibiling && sibiling.className === 'img-wrapper'){\r\n          this.currentImageElement = sibiling;\r\n          setTimeout(() => this.addSizerIntoImageWrapper(),50);\r\n          this.setCursorPositionAfter(sibiling, true);\r\n        }\r\n        else if (sibiling && sibiling.className === 'code-wrapper') {\r\n          this.currentCodeElement = sibiling;\r\n          this.setCursorPositionAfter(sibiling.firstChild, false);\r\n          this.showCodePopup(true);\r\n        }\r\n        else if (sibiling && sibiling.className === 'table-wrapper') {\r\n          this.currentTableElement = sibiling;\r\n          this.setCursorInsideTable();\r\n          this.showTablePopup(true);\r\n        }\r\n\r\n        if(this.currentCellElement && !this.currentCellElement.hasChildNodes()){\r\n          const p = document.createElement('p');\r\n          p.textContent = '\\u200B';\r\n          this.currentCellElement.appendChild(p);\r\n          this.setCursorPositionAfter(p, true);\r\n        }\r\n        this.traverseTheDOM(true);\r\n      }\r\n      else{\r\n        const selection = window.getSelection();\r\n        if (selection && selection.rangeCount > 0) {\r\n          const range = selection.getRangeAt(0);\r\n          if(!range.collapsed) return;\r\n\r\n          if (range.endContainer.nodeType === Node.TEXT_NODE) {\r\n            const textNode = range.endContainer;\r\n            if(textNode && textNode.textContent && range.endOffset === textNode.textContent.length && this.currentTextStyleElement){\r\n              let sibiling = undefined;\r\n              if(this.currentBulletListElement){\r\n                sibiling = this.currentBulletListElement.nextSibling as HTMLElement;\r\n              }\r\n              else if(this.currentNumberedListElement){\r\n                sibiling = this.currentNumberedListElement.nextSibling as HTMLElement;\r\n              }\r\n              else{\r\n                sibiling = this.currentTextStyleElement.nextSibling as HTMLElement;\r\n              }\r\n              if (sibiling && sibiling.className === 'img-wrapper') {\r\n                event.preventDefault(); \r\n                this.currentImageElement = sibiling;\r\n                this.removeFile();\r\n              }\r\n              else if (sibiling && sibiling.className === 'code-wrapper') {\r\n                event.preventDefault(); \r\n                this.currentCodeElement = sibiling;\r\n                this.setCursorPositionAfter(sibiling.firstChild, false);\r\n                this.showCodePopup(true);\r\n                this.traverseTheDOM(true);\r\n              }\r\n              else if (sibiling && sibiling.className === 'table-wrapper') {\r\n                event.preventDefault();\r\n                this.currentTableElement = sibiling;\r\n                this.setCursorInsideTable();\r\n                this.showTablePopup(true);\r\n              }\r\n            }\r\n          }\r\n          else{\r\n            let sibiling = undefined;\r\n            if(this.currentBulletListElement){\r\n              sibiling = this.currentBulletListElement.nextSibling as HTMLElement;\r\n            }\r\n            else if(this.currentNumberedListElement){\r\n              sibiling = this.currentNumberedListElement.nextSibling as HTMLElement;\r\n            }\r\n            else if(this.currentTextStyleElement){\r\n              sibiling = this.currentTextStyleElement.nextSibling as HTMLElement;\r\n            }\r\n            if (sibiling && sibiling.className === 'img-wrapper') {\r\n              event.preventDefault(); \r\n              this.currentImageElement = sibiling;\r\n              this.removeFile();\r\n            }\r\n            else if (sibiling && sibiling.className === 'code-wrapper') {\r\n              event.preventDefault(); \r\n              this.currentCodeElement = sibiling;\r\n              this.setCursorPositionAfter(sibiling.firstChild, false);\r\n              this.showCodePopup(true);\r\n              this.traverseTheDOM(true);\r\n            }\r\n            else if (sibiling && sibiling.className === 'table-wrapper') {\r\n              event.preventDefault();\r\n              this.currentTableElement = sibiling;\r\n              this.setCursorInsideTable();\r\n              this.showTablePopup(true);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if(event.key === 'Enter'){\r\n      if(this.currentImageElement){\r\n        event.preventDefault();\r\n        const p = this.currentImageElement.nextSibling;\r\n        if(p){\r\n          this.setCursorPositionAfter(p, true);\r\n        }\r\n        this.traverseTheDOM(true);\r\n\r\n      }\r\n      else if(this.currentCodeElement && this.currentCodeElement.lastChild){\r\n        event.preventDefault();\r\n        const elem = document.createTextNode('\\n\\u00A0'); //\\u200B \\u00A0\r\n        this.addElement(elem, this.editor.nativeElement);\r\n        this.setCursorPositionAfter(elem, false);\r\n        this.traverseTheDOM(true);\r\n      }\r\n      else if((this.currentBulletListElement || this.currentNumberedListElement) && this.currentTextStyleElement && (this.currentTextStyleElement.textContent === '\\u200B' || this.currentTextStyleElement.textContent === '')){\r\n        event.preventDefault();\r\n        if(this.currentBulletListElement){\r\n          this.onBulletListClick();\r\n        }\r\n        else if(this.currentNumberedListElement){\r\n          this.onNumberedListClick();\r\n        }\r\n      }\r\n    }\r\n    else if(event.key === 'Tab'){\r\n      if(this.currentCodeElement && this.currentCodeElement.lastChild){\r\n        event.preventDefault();\r\n        const elem = document.createTextNode('   '); \r\n        this.addElement(elem, this.editor.nativeElement);\r\n        this.setCursorPositionAfter(elem, false);\r\n        this.traverseTheDOM(true);\r\n      }\r\n      else if((this.currentBulletListElement || this.currentNumberedListElement) && this.currentTextStyleElement){\r\n        event.preventDefault();\r\n        if(this.currentBulletListElement && this.currentBulletListElement.textContent !== '\\u200B' && this.currentBulletListElement.textContent !== '' && (this.currentTextStyleElement.textContent === '\\u200B' || this.currentTextStyleElement.textContent === '')){\r\n          const li = this.currentTextStyleElement.parentElement;\r\n          const level = this.currentBulletListElement.getAttribute('bullet-list-indent-level');\r\n          const prevLi = li?.previousElementSibling;\r\n          if(prevLi){\r\n            const ul = document.createElement('ul');\r\n            ul.className = 'universal-editor-bullet-list';\r\n            this.currentBulletListElement = ul;\r\n            ul.setAttribute('bullet-list-indent-level', (parseInt(level ?? '1') + 1).toString());\r\n            const liNew = document.createElement('li');\r\n            liNew.appendChild(this.currentTextStyleElement);\r\n            ul.appendChild(liNew);\r\n            li.remove();\r\n            prevLi.appendChild(ul);\r\n          }\r\n        }\r\n        else if(this.currentNumberedListElement && this.currentNumberedListElement.textContent !== '\\u200B' && this.currentNumberedListElement.textContent !== '' && (this.currentTextStyleElement.textContent === '\\u200B' || this.currentTextStyleElement.textContent === '')){\r\n          const li = this.currentTextStyleElement.parentElement;\r\n          const level = this.currentNumberedListElement.getAttribute('numbered-list-indent-level');\r\n          const prevLi = li?.previousElementSibling;\r\n          if(prevLi){\r\n            const ol = document.createElement('ol');\r\n            ol.className = 'universal-editor-numbered-list';\r\n            this.currentNumberedListElement = ol;\r\n            ol.setAttribute('numbered-list-indent-level', (parseInt(level ?? '1') + 1).toString());\r\n            const liNew = document.createElement('li');\r\n            liNew.appendChild(this.currentTextStyleElement);\r\n            ol.appendChild(liNew);\r\n            li.remove();\r\n            prevLi.appendChild(ol);\r\n          }\r\n        }\r\n      }\r\n      else if(this.currentTableElement && this.currentCellElement){\r\n        event.preventDefault();\r\n        if(this.currentCellElement.nextSibling){\r\n          this.setCursorPositionAfter(this.currentCellElement.nextSibling.firstChild, true);\r\n        }\r\n        else if(this.currentCellElement.parentElement && this.currentCellElement.parentElement.nextElementSibling && this.currentCellElement.parentElement.nextElementSibling.firstChild){\r\n          this.setCursorPositionAfter(this.currentCellElement.parentElement.nextElementSibling.firstChild.firstChild, true);\r\n        }\r\n        this.traverseTheDOM(true);\r\n      }\r\n    }\r\n\r\n    setTimeout(() => this.emitChange(), 0);\r\n  }\r\n\r\n  onInput(event: any) { \r\n    //console.log(event)\r\n    const fontElements = this.editor.nativeElement.querySelectorAll('font');\r\n    fontElements.forEach((fontElem:any) => {\r\n      fontElem.remove();\r\n    });\r\n\r\n    // FIRST CHAR\r\n    if(event.inputType === 'insertText' && this.editor.nativeElement.innerHTML.length <= 1){\r\n      let coords = this.getCaretCoordinates();\r\n      event.preventDefault();\r\n      let content = event.data;\r\n      content = `<span class=\"universal-marker\">${content}</span>`\r\n      if(event.data === '@' && this.config.enableMention){\r\n        content = `<span class=\"universal-tag\">${content}</span>`;\r\n      }\r\n      if(this.selectedColor && !equal(this.selectedColor, this.defaultTextColor)){\r\n        content = `<span class=\"universal-editor-text-color\" style=\"color:${this.selectedColor.colorCode};\" \r\n        custom-text-color-name=\"${this.selectedColor.colorName}\" custom-text-color-code=\"${this.selectedColor.colorCode}\">${content}</span>`;\r\n      }\r\n      if(this.isBold){\r\n        content = `<strong>${content}</strong>`;\r\n      }\r\n      if(this.isItalic){\r\n        content = `<em>${content}</em>`;\r\n      }\r\n      if(this.isUnderline){\r\n        content = `<u>${content}</u>`;\r\n      }\r\n      if(this.isStrikethrough){\r\n        content = `<s>${content}</s>`;\r\n      }\r\n      if(this.isSubscript){\r\n        content = `<sub>${content}</sub>`;\r\n      }\r\n      if(this.isSuperscript){\r\n        content = `<sup>${content}</sup>`;\r\n      }\r\n      content = `<${this.textStyle}>${content}</${this.textStyle}>`;\r\n\r\n      const elem = this.createElementFromString(content) as HTMLElement;\r\n      const text = this.editor.nativeElement.firstChild;\r\n      if(text){\r\n        this.editor.nativeElement.replaceChild(elem, text);\r\n      }\r\n      else{\r\n        this.editor.nativeElement.appendChild(elem);\r\n      }\r\n      const marker = elem.querySelector('.universal-marker');\r\n      if(marker && marker.textContent){\r\n        const text = document.createTextNode(marker.textContent);\r\n        marker.replaceWith(text);\r\n        this.setCursorPositionAfter(text, false);\r\n      }\r\n      else{\r\n        this.setCursorPositionAfter(elem, true);\r\n      }\r\n      if(event.data === '@' && this.config.enableMention){ \r\n        this.openMentionDropdown(coords.x, coords.y);\r\n      }\r\n    }\r\n\r\n    // MENTION PART\r\n    if(event.data === '@' && !this.isMentionDropdownOpen && this.editor.nativeElement.innerHTML.length > 1 && this.config.enableMention && this.currentTextStyleElement) {\r\n      const coords = this.getCaretCoordinates();\r\n      event.preventDefault();\r\n\r\n      if(event.type !== 'customInput'){\r\n        this.deleteCharBeforeCaret();\r\n      }\r\n      const elemText = `<span class=\"universal-tag\">@</span>`; \r\n      const elem = this.createElementFromString(elemText) as HTMLElement;\r\n      this.addElement(elem, this.currentTextStyleElement);\r\n      this.setCursorPositionAfter(elem, true);\r\n\r\n      this.openMentionDropdown(coords.x, coords.y);\r\n    }\r\n\r\n    if(this.isMentionDropdownOpen){\r\n      const tag = this.el.nativeElement.querySelector('.universal-tag');\r\n      if(tag){\r\n        this.searchUserText = tag.textContent.replace(/@/g, '');\r\n        this.filterUsers();\r\n      }\r\n\r\n    }\r\n\r\n    this.traverseTheDOM(true);\r\n    setTimeout(() => this.emitChange(), 0);\r\n  }\r\n\r\n  handlePaste(event: ClipboardEvent) {\r\n    event.preventDefault();\r\n    const paste = event.clipboardData || (window as any).clipboardData;\r\n    const text = paste.getData('text');\r\n\r\n    if(Const.urlRegex.test(text) && this.config.enableLink && !this.linkDisabled){ //link\r\n      this.addLink(text, text);\r\n    }\r\n    else if (paste.items && paste.items.length && paste.types.includes('Files') && this.config.enableFile && !this.fileDisabled) { //file\r\n      for (let i = 0; i < paste.items.length; i++) {\r\n        if (paste.items[i].kind === 'file') {\r\n          const file = paste.items[i].getAsFile();\r\n          if(file){\r\n            this.addFile(file);\r\n          }\r\n        }\r\n      }\r\n    }\r\n    else if (Const.codeRegex.test(text) && this.config.enableCode && !this.codeDisabled) { //code\r\n      this.addCode(text);\r\n    }\r\n    else{\r\n      if(this.currentTextStyleElement){\r\n        const elem = document.createTextNode(text);\r\n        this.addElement(elem, this.currentTextStyleElement);\r\n        this.setCursorPositionAfter(elem, false);\r\n      }\r\n      else if(this.currentCodeElement){\r\n        const elem = document.createTextNode(text);\r\n        this.addElement(elem, this.editor.nativeElement);\r\n        this.setCursorPositionAfter(elem, true);\r\n      }\r\n      else{\r\n        const elem = this.createElementFromString(`<p>${text}</p>`) as HTMLElement;\r\n        this.addElement(elem, this.editor.nativeElement);\r\n        this.setCursorPositionAfter(elem, true);\r\n      }\r\n    }\r\n    this.traverseTheDOM(true);\r\n  }\r\n\r\n\r\n\r\n\r\n  // SHARED\r\n  private textElement:HTMLElement | undefined;\r\n  private selectedText = '';\r\n  resizeTimeout:any;\r\n  private editorHTML = '';\r\n  private taggedUsers:string[] = [];\r\n  private savedRange: Range | null = null;\r\n  private savedChanges: {range: Range | null; html: string; files:{key:string; file:File;}[]}[] = [];\r\n  private emitChange(){\r\n    if(this.editorHTML === this.editor.nativeElement.innerHTML || !this.config.editMode || !this.checkWatermark()) return;\r\n\r\n    const taggedElements:  NodeListOf<Element> = this.editor.nativeElement.querySelectorAll('.universal-editor-tag');\r\n    const ids = Array.from(taggedElements).map(element => element.getAttribute('user-id') ?? '');\r\n    const userIds = Array.from(new Set(ids));\r\n    if(!equal(this.taggedUsers, userIds)){\r\n      this.taggedUsers = userIds;\r\n      this.onChangeMentionUsers.emit(this.mentionUsers.filter(user => userIds.includes(user.id.toString())));\r\n    }\r\n\r\n    this.saveCaretPosition();\r\n    this.savedChanges.push({range: this.savedRange, html: this.editor.nativeElement.innerHTML, files: this.files});\r\n    this.editorHTML = this.editor.nativeElement.innerHTML;\r\n    this.onChange.emit(this.removeClassess(this.editorHTML));\r\n\r\n  }\r\n  triggerInnerHtml(html: string | SafeHtml){\r\n    this.innerHtml =typeof html === 'string' ? this.sanitizer.bypassSecurityTrustHtml(html) : html;\r\n    setTimeout(()=>this.setCurrentUserClass(true),0);\r\n  }\r\n  private removeClassess(html: string){\r\n    const parser = new DOMParser();\r\n    const doc = parser.parseFromString(html, 'text/html');\r\n    if(this.config.currentUserId.toString()){\r\n      const currentUsers = doc.querySelectorAll(`[user-id=\"${this.config.currentUserId}\"]`);\r\n      currentUsers.forEach(element => element.classList.remove('universal-editor-tag-selected'));\r\n    }\r\n    let elements = doc.querySelectorAll('.code-counter-selected');\r\n    elements.forEach(function(element) {\r\n        element.classList.remove('code-counter-selected');\r\n    });\r\n    elements = doc.querySelectorAll('.code-wrapper-selected');\r\n    elements.forEach(function(element) {\r\n        element.classList.remove('code-wrapper-selected');\r\n    });\r\n    elements = doc.querySelectorAll('.code-wrapper-selected');\r\n    elements.forEach(function(element) {\r\n        element.classList.remove('code-wrapper-selected');\r\n    });\r\n    elements = doc.querySelectorAll('.code-wrapper-collapsed');\r\n    elements.forEach(function(element) {\r\n        element.classList.remove('code-wrapper-collapsed');\r\n    });\r\n    elements = doc.querySelectorAll('.code-collapsed');\r\n    elements.forEach(function(element) {\r\n        element.classList.remove('code-collapsed');\r\n        element.removeAttribute('contenteditable');\r\n    });\r\n    elements = doc.querySelectorAll('.cell-selected');\r\n    elements.forEach(function(element) {\r\n        element.classList.remove('cell-selected');\r\n    });\r\n\r\n    return doc.body.innerHTML;\r\n  }\r\n  private mergeAdjacent(tag:string) {\r\n    const all = document.querySelectorAll(tag);\r\n    let prev: any = null;\r\n  \r\n    all.forEach((ul, index) => {\r\n      if (prev && ul.previousElementSibling === prev) {\r\n        while (ul.children.length > 0) {\r\n          prev.appendChild(ul.children[0]);\r\n        }\r\n        ul.remove();\r\n      } else {\r\n        prev = ul;\r\n      }\r\n    });\r\n  }\r\n  private splitAtCaret(element: HTMLElement, clearFormatting: boolean, changeTextColor: boolean) {\r\n    \r\n    const selection = window.getSelection();\r\n    if (!selection || selection.rangeCount === 0){\r\n      return;\r\n    } \r\n    const range = selection.getRangeAt(0);\r\n    let selectedText = range.toString();\r\n    if (element) {\r\n      const startOffset = range.startOffset;\r\n      const originalText = element.textContent;\r\n      if(originalText){\r\n        if(this.textElement && this.textElement.textContent){\r\n          const leftContainer = element.cloneNode(false) as HTMLElement;\r\n          const rightContainer = element.cloneNode(false) as HTMLElement;\r\n          const middleContainer = element.cloneNode(false) as HTMLElement;\r\n          this.splitElementAtText(element, leftContainer, middleContainer, rightContainer, startOffset, selectedText.length);\r\n          const marker = middleContainer.querySelector('#editor-marker');\r\n          if(!marker) return;\r\n          if(!selectedText){\r\n            selectedText = '\\u200B';\r\n          }\r\n          const space = document.createTextNode(selectedText);\r\n          marker.replaceWith(space);\r\n          const parent = element.parentNode;\r\n          if(!parent) return;\r\n          parent.insertBefore(leftContainer, element);\r\n          if(clearFormatting){\r\n            parent.insertBefore(space, element);\r\n          }\r\n          else{\r\n            if(changeTextColor && this.selectedColor){\r\n              middleContainer.style.color = this.selectedColor.colorCode;\r\n              middleContainer.setAttribute('custom-text-color-name', this.selectedColor.colorName);\r\n              middleContainer.setAttribute('custom-text-color-code', this.selectedColor.colorCode);\r\n              parent.insertBefore(middleContainer, element);\r\n            }\r\n            else if(middleContainer.firstChild){\r\n              parent.insertBefore(middleContainer.firstChild, element);\r\n            }\r\n          }\r\n          if(rightContainer.textContent){\r\n            parent.insertBefore(rightContainer, element);\r\n          }\r\n          element.remove();\r\n          this.setCursorPositionAfter(space, false);\r\n        }\r\n      }  \r\n    }\r\n  }\r\n  private splitElementAtText(container:HTMLElement, leftContainer:HTMLElement, middleContainer:HTMLElement, rightContainer:HTMLElement, splitIndex:number, selectedTextLength:number) {\r\n    const children = container.childNodes;\r\n    let left = true;\r\n    children.forEach(child => {\r\n      if (this.textElement && child.contains(this.textElement) && this.textElement.textContent) {\r\n        left = false;\r\n        const textLeft = this.textElement.textContent.slice(0, splitIndex);\r\n        const textRight = this.textElement.textContent.slice(splitIndex + selectedTextLength);\r\n        if(child === this.textElement){\r\n          leftContainer.appendChild(document.createTextNode(textLeft));\r\n          const marker = document.createElement('span');\r\n          marker.id = 'editor-marker';\r\n          middleContainer.appendChild(marker);\r\n          if(textRight){\r\n            rightContainer.appendChild(document.createTextNode(textRight));\r\n          }\r\n        }\r\n        else{\r\n          const leftNew = child.cloneNode(false);\r\n          leftContainer.appendChild(leftNew);\r\n          const rightNew = child.cloneNode(false);\r\n          rightContainer.appendChild(rightNew);\r\n          const middleNew = child.cloneNode(false);\r\n          middleContainer.appendChild(middleNew);\r\n          this.splitElementAtText(child as HTMLElement, leftNew as HTMLElement, middleNew as HTMLElement, rightNew as HTMLElement, splitIndex, selectedTextLength);\r\n          \r\n        }\r\n        \r\n      } else if(left) {\r\n        leftContainer.appendChild(child.cloneNode(true));\r\n      }\r\n      else{\r\n        rightContainer.appendChild(child.cloneNode(true));\r\n      }\r\n    });\r\n  }\r\n  private replaceElement(oldElement: HTMLElement, newElementType: string) {\r\n    //console.log(oldElement, newElementType)\r\n    const newElement = document.createElement(newElementType);\r\n    newElement.innerHTML = oldElement.innerHTML;\r\n    if(oldElement.parentNode){\r\n      oldElement.parentNode.replaceChild(newElement, oldElement);\r\n      this.setCursorPositionAfter(newElement, true);\r\n    }\r\n  }\r\n  private deleteCharBeforeCaret() {\r\n    const selection = window.getSelection();\r\n    if (!selection || selection.rangeCount === 0){\r\n      return;\r\n    } \r\n\r\n    const range = selection.getRangeAt(0);\r\n\r\n    // Check if the selection is collapsed (no text is selected)\r\n    if (range.collapsed) {\r\n      const startContainer = range.startContainer;\r\n      // Deleting a character in a text node\r\n      if (startContainer.nodeType === Node.TEXT_NODE && range.startOffset > 0) {\r\n        // Modify the range to encompass the character before the caret\r\n        range.setStart(startContainer, range.startOffset - 1);\r\n        // Delete the character\r\n        range.deleteContents();\r\n\r\n        // Create a new range to set the caret position\r\n        const newRange = document.createRange();\r\n        newRange.setStart(startContainer, range.startOffset);\r\n        newRange.collapse(true);\r\n\r\n        // Set the new range as the selection\r\n        selection.removeAllRanges();\r\n        selection.addRange(newRange);\r\n      } \r\n    }\r\n  }\r\n  private createElementFromString(htmlString: string) {\r\n    const parser = new DOMParser();\r\n    const doc = parser.parseFromString(htmlString, 'text/html');\r\n\r\n    if (doc.body.firstChild && doc.body.firstChild.nodeType === Node.ELEMENT_NODE) {\r\n        return doc.body.firstChild as HTMLElement;\r\n    }\r\n    return doc.body.firstElementChild;\r\n  }\r\n  private addElement(elem:HTMLElement | Text, parent: HTMLElement){\r\n    const selection = window.getSelection();\r\n    if (selection && selection.rangeCount > 0 && parent.contains(selection.anchorNode)) {\r\n      const range = selection.getRangeAt(0);\r\n      range.deleteContents();\r\n      range.insertNode(elem);\r\n\r\n      range.selectNodeContents(elem);\r\n      range.collapse(true);\r\n      selection.removeAllRanges();\r\n      selection.addRange(range);    \r\n    }          \r\n  }\r\n  private setCursorPositionAfter(element: any, afterContentInsideTag: boolean) {\r\n    if (element) {\r\n      const range = document.createRange();\r\n      const selection = window.getSelection();\r\n      \r\n      if(afterContentInsideTag){\r\n        if (element.lastChild) {\r\n          range.setStartAfter(element.lastChild);\r\n        } else {\r\n            range.setStart(element, 0);\r\n        }\r\n      }\r\n      else{\r\n        range.setStartAfter(element);\r\n      }\r\n      range.collapse(true);\r\n      \r\n      if(selection){\r\n        selection.removeAllRanges();\r\n        selection.addRange(range);\r\n      }\r\n    }\r\n  }\r\n  saveCaretPosition() {\r\n    const selection = window.getSelection();\r\n    if (selection && selection.rangeCount > 0) {\r\n      this.savedRange = selection.getRangeAt(0);\r\n    }\r\n  }\r\n  restoreCaretPosition() {\r\n    if (this.savedRange) {\r\n      const selection = window.getSelection();\r\n      selection?.removeAllRanges();\r\n      selection?.addRange(this.savedRange);\r\n    }\r\n    this.editor.nativeElement.focus();\r\n  }\r\n  @HostListener('document:click', ['$event']) onHostClick(event: MouseEvent) {\r\n    if(!this.config.editMode) return;\r\n\r\n    const targetElement = event.target as HTMLElement;\r\n    const dropdown = this.el.nativeElement.querySelector('.universal-editor-mention');\r\n    const datepicker = this.el.nativeElement.querySelector('.universal-editor-datepicker');\r\n    const dateButton = this.el.nativeElement.querySelector('.date-button');\r\n    const mentionButton = this.el.nativeElement.querySelector('.mention-button');\r\n    const editLink = this.el.nativeElement.querySelector('.universal-editor-link-edit');\r\n\r\n    if (targetElement && dropdown && mentionButton && !dropdown.contains(targetElement) && this.isMentionDropdownOpen && !mentionButton.contains(targetElement)) {\r\n      this.onCancelSelectUser(false);\r\n    }\r\n\r\n    if (targetElement && datepicker && dateButton && !datepicker.contains(targetElement) && !dateButton.contains(targetElement)) {\r\n      this.showDatePopup(false);\r\n    }\r\n\r\n    if(this.editor.nativeElement.contains(targetElement) && targetElement.className === 'img-wrapper'){\r\n      this.currentImageElement = targetElement;\r\n      this.setCursorPositionAfter(targetElement, true);\r\n      this.addSizerIntoImageWrapper();\r\n    }\r\n    if(this.editor.nativeElement.contains(targetElement) && targetElement.nodeName === 'IMG'){\r\n      const parent = targetElement.parentElement;\r\n      if(parent){\r\n        this.currentImageElement = parent;\r\n        this.setCursorPositionAfter(parent, true);\r\n        this.addSizerIntoImageWrapper();\r\n      }\r\n    }\r\n    if(this.editor.nativeElement.contains(targetElement)){\r\n      this.traverseTheDOM(true);\r\n    }\r\n    if(this.config.enableLink && targetElement && editLink && !editLink.contains(targetElement) && this.isAddEditLinkDialogOpen){\r\n      this.showAddEditLink(false, 'Add');\r\n    }\r\n  }\r\n  @HostListener('window:resize', ['$event']) onResize() {\r\n    this.widthSubject.next(this.editor.nativeElement.offsetWidth);\r\n    this.editorWidth = this.editor.nativeElement.offsetWidth;\r\n  }\r\n  onFormat(format:string){\r\n    if(format === 'Underline'){\r\n      this.onSelectUnderline();\r\n    }\r\n    else if(format === 'Strikethrough'){\r\n      this.onSelectStrikethrough();\r\n    }\r\n    else if(format === 'Subscript'){\r\n      this.onSelectSubscript();\r\n    }\r\n    else if(format === 'Superscript'){\r\n      this.onSelectSuperscript();\r\n    }\r\n    else if(format === 'Clear formatting'){\r\n      this.onClearFormatting();\r\n    }\r\n  }\r\n  onOptions(option:string){\r\n    if(option === 'Mention'){\r\n      this.onMentionClick();\r\n    }\r\n    else if(option === 'Link'){\r\n      this.showAddEditLink(true, 'Add');\r\n    }\r\n    else if(option === 'File'){\r\n      this.uploadFile();\r\n    }\r\n    else if(option === 'Code'){\r\n      this.addCode('\\u00A0');\r\n    }\r\n    else if(option === 'Date'){\r\n      this.addDate();\r\n    }\r\n    else if(option === 'Info'){\r\n    }\r\n  }\r\n  private checkWatermark(){\r\n    return true;\r\n\r\n    const pseudoAfterStyles = window.getComputedStyle(this.editor.nativeElement, '::after');\r\n    const styles = getWatermarkData();\r\n    const computedStyles = {\r\n      content: pseudoAfterStyles.getPropertyValue('content'),\r\n      position: pseudoAfterStyles.getPropertyValue('position'),\r\n      bottom: pseudoAfterStyles.getPropertyValue('bottom'),\r\n      right: pseudoAfterStyles.getPropertyValue('right'),\r\n      color: pseudoAfterStyles.getPropertyValue('color'), \r\n      fontSize: pseudoAfterStyles.getPropertyValue('font-size'),\r\n      height: pseudoAfterStyles.getPropertyValue('height'),\r\n      width: pseudoAfterStyles.getPropertyValue('width'),\r\n    }\r\n    const currentDate = new Date();\r\n    if(equal(computedStyles, styles) && currentDate < Const.expirationDate){\r\n      return true;\r\n    }\r\n    for(let i = 0; i < 100; i++){\r\n      console.error('Invalid licence', i);\r\n    }\r\n    return false;\r\n    \r\n  }\r\n\r\n  private traverseTheDOM(exposeChanges: boolean) {\r\n    const editor = this.editor.nativeElement;\r\n    const selection = window.getSelection();\r\n    if (!selection || !selection.rangeCount || !editor.contains(selection.anchorNode) || !this.checkWatermark()) {\r\n        return;\r\n    }\r\n    const range = selection.getRangeAt(0);\r\n    this.selectedText = range.toString();\r\n\r\n    let node: Node | null = selection.getRangeAt(0).startContainer;\r\n    if(exposeChanges){\r\n      this.isBold = false;\r\n      this.isItalic = false;\r\n      this.isUnderline = false;\r\n      this.isStrikethrough = false;\r\n      this.isSubscript = false;\r\n      this.isSuperscript = false;\r\n      this.selectedColor = this.defaultTextColor;\r\n      this.isBulletList = false;\r\n      this.isNumberedList = false;\r\n      this.textStyle = 'p';\r\n    }\r\n    this.showLinkPopup(false);\r\n    this.showCodePopup(false);\r\n    this.showTablePopup(false);\r\n    this.showDatePopup(false);\r\n    this.currentLinkElement = undefined;\r\n    this.textElement = undefined;\r\n    this.currentTextStyleElement = undefined;\r\n    this.currentBoldElement = undefined;\r\n    this.currentItalicElement = undefined;\r\n    this.currentUnderlineElement = undefined;\r\n    this.currentStrikethroughElement = undefined;\r\n    this.currentSupesrsciptElement = undefined;\r\n    this.currentSubscriptElement = undefined;\r\n    this.highestFormatElement = undefined;\r\n    this.currentTextColorElement = undefined;\r\n    this.currentBulletListElement = undefined;\r\n    this.currentNumberedListElement = undefined;\r\n    this.currentImageElement = undefined;\r\n    this.currentCodeElement = undefined;\r\n    this.currentTableElement = undefined;\r\n    this.currentCellElement = undefined;\r\n    this.currentDateElement = undefined;\r\n    if(node.nodeType === Node.TEXT_NODE){\r\n      this.textElement = node as HTMLElement;\r\n    }\r\n\r\n    while (node && node !== editor) {\r\n        if (node.nodeType === Node.ELEMENT_NODE) {\r\n          if(node.nodeName === 'DIV'){\r\n            const div = node as HTMLElement;\r\n            if(div.className === 'img-wrapper'){\r\n              this.currentImageElement = div;\r\n            }\r\n            else if(div.className === 'img-wrapper-sizer' || div.className === 'img-wrapper-sizer-visual' || div.className === 'code-counter'){\r\n\r\n            }\r\n            else if(div.className === 'code-wrapper' || div.className === 'code-wrapper code-wrapper-collapsed'){\r\n              this.currentCodeElement = div;\r\n            }\r\n            else if(div.className === 'table-wrapper'){\r\n              this.currentTableElement = div;\r\n              this.setCursorInsideTable();\r\n              this.showTablePopup(true);\r\n            }\r\n            else{\r\n              const p = document.createElement('p');\r\n              const space = document.createTextNode('\\u200B');\r\n              p.appendChild(space);\r\n              (node as HTMLElement).replaceWith(p);\r\n              this.setCursorPositionAfter(space, false);\r\n              this.currentTextStyleElement = p;\r\n            }\r\n          }\r\n          else if (['P', 'H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(node.nodeName)) {\r\n            this.textStyle = node.nodeName.toLowerCase(); \r\n            this.currentTextStyleElement = node as HTMLElement;\r\n            const br = this.currentTextStyleElement.querySelector('br');\r\n            if(br){\r\n              const space = document.createTextNode('\\u200B');\r\n              br.replaceWith(space);\r\n              this.setCursorPositionAfter(space, false);\r\n            }\r\n          }\r\n          else if(node.nodeName === 'STRONG'){\r\n            if(exposeChanges){\r\n              this.isBold = true;\r\n            }\r\n            this.currentBoldElement = node as HTMLElement;\r\n            this.highestFormatElement = node as HTMLElement;\r\n          }\r\n          else if(node.nodeName === 'EM'){\r\n            if(exposeChanges){\r\n              this.isItalic = true;\r\n            }\r\n            this.currentItalicElement = node as HTMLElement;\r\n            this.highestFormatElement = node as HTMLElement;\r\n          }\r\n          else if(node.nodeName === 'U'){\r\n            if(exposeChanges){\r\n              this.isUnderline = true;\r\n            }\r\n            this.currentUnderlineElement = node as HTMLElement;\r\n            this.highestFormatElement = node as HTMLElement;\r\n          }\r\n          else if(node.nodeName === 'S'){\r\n            if(exposeChanges){\r\n              this.isStrikethrough = true;\r\n            }\r\n            this.currentStrikethroughElement = node as HTMLElement;\r\n            this.highestFormatElement = node as HTMLElement;\r\n          }\r\n          else if(node.nodeName === 'SUB'){\r\n            if(exposeChanges){\r\n              this.isSubscript = true;\r\n            }\r\n            this.currentSubscriptElement = node as HTMLElement;\r\n            this.highestFormatElement = node as HTMLElement;\r\n          }\r\n          else if(node.nodeName === 'SUP'){\r\n            if(exposeChanges){\r\n              this.isSuperscript = true;\r\n            }\r\n            this.currentSupesrsciptElement = node as HTMLElement;\r\n            this.highestFormatElement = node as HTMLElement;\r\n          }\r\n          else if(node.nodeName === 'SPAN'){\r\n            const elem = node as HTMLElement;\r\n            if(elem.className === 'universal-editor-text-color'){\r\n              this.currentTextColorElement = elem;\r\n              if(exposeChanges){\r\n                const textColor = this.currentTextColorElement.getAttribute('custom-text-color-code');\r\n                this.selectedColor = this.textColors.find(color => color.colorCode === textColor);\r\n              }\r\n              this.highestFormatElement = elem;\r\n            }\r\n            else if(elem.className === 'universal-editor-date-widget'){\r\n              this.currentDateElement = elem;\r\n              this.showDatePopup(true);\r\n            }\r\n          }\r\n          else if(node.nodeName === 'UL' && !this.currentBulletListElement){\r\n            if(exposeChanges){\r\n              this.isBulletList = true;\r\n            }\r\n            this.currentBulletListElement = node as HTMLElement;\r\n          }\r\n          else if(node.nodeName === 'OL' && !this.currentNumberedListElement){\r\n            if(exposeChanges){\r\n              this.isNumberedList = true;\r\n            }\r\n            this.currentNumberedListElement = node as HTMLElement;\r\n          }\r\n          else if(node.nodeName === 'A'){\r\n            this.currentLinkElement = node as HTMLElement;\r\n            this.showLinkPopup(true);\r\n          }\r\n          else if(node.nodeName === 'TD' || node.nodeName === 'TH'){\r\n            this.currentCellElement = node as HTMLElement;\r\n          }\r\n          //console.log('Element type:', node.nodeName);\r\n        } \r\n        node = node.parentNode;\r\n    }\r\n\r\n    const sizer = this.el.nativeElement.querySelector('.img-wrapper-sizer');\r\n    if(sizer && !this.currentImageElement){\r\n      sizer.style.display='none';\r\n      this.showImgPopup(false);\r\n    }\r\n\r\n    if(this.currentCodeElement?.lastChild){\r\n      const code = this.currentCodeElement.lastChild.textContent;\r\n      this.updateNumberOfLines(code, 'Edit');\r\n      this.showCodePopup(true);\r\n    }\r\n\r\n    if(exposeChanges){\r\n      if(this.textStyles){\r\n        this.textStyles.setStyle(this.textStyle);\r\n      }\r\n      if(this.selectedColor){\r\n        this.textColorRef.setColor(this.selectedColor);\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n  // DATE\r\n  currentDateElement:HTMLElement | undefined;\r\n  dateSubject = new Subject<Date>();\r\n  currentDate$ = this.dateSubject.asObservable();\r\n  get dateDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  addDate(){\r\n    this.restoreCaretPosition();\r\n    const date = new Date();\r\n    const formattedDate = date.toLocaleDateString('en-US', {\r\n      year: 'numeric',\r\n      month: 'short',\r\n      day: 'numeric'\r\n    });\r\n    const elemText = `<span class=\"universal-editor-date-widget\" timestamp=\"${date}\" contenteditable=false>${formattedDate}</span> `; \r\n    if(this.currentTextStyleElement){\r\n      const elem = this.createElementFromString(elemText) as HTMLElement;\r\n      this.addElement(elem, this.currentTextStyleElement);\r\n      this.setCursorPositionAfter(elem, true);\r\n    }\r\n    else{\r\n      const elem = this.createElementFromString(`<p>${elemText}</p>`) as HTMLElement;\r\n      this.addElement(elem, this.editor.nativeElement);\r\n      this.setCursorPositionAfter(elem.firstChild, true);\r\n    }\r\n    this.traverseTheDOM(true);\r\n    this.emitChange();\r\n  }\r\n  showDatePopup(show:boolean){\r\n    const dialog = this.el.nativeElement.querySelector('.universal-editor-datepicker');\r\n    if(!dialog || !this.config.enableDate) return;\r\n\r\n    if(show && this.currentDateElement){\r\n      const date = this.currentDateElement.getAttribute('timestamp') ?? '';\r\n      this.dateSubject.next(new Date(date));\r\n\r\n      const rect = this.currentDateElement.getBoundingClientRect();\r\n      const x = rect.left + window.scrollX; // Left of the element\r\n      const y = rect.top + window.scrollY; // Top of the element\r\n\r\n      dialog.style.display = 'block';\r\n      setTimeout(() => {\r\n        const dialogHeight = dialog.offsetHeight;\r\n      \r\n        dialog.style.top = `${y - dialogHeight - 8}px`; // Position above the current date element with a small offset\r\n      \r\n        dialog.style.left = `${x}px`; // Align left with the date element\r\n      \r\n        if (x < 0) {\r\n          dialog.style.left = `${window.scrollX}px`; // Align to the left edge\r\n        } else if (x + dialog.offsetWidth > window.innerWidth) {\r\n          dialog.style.left = `${window.innerWidth - dialog.offsetWidth + window.scrollX}px`; // Align to the right edge\r\n        }\r\n      });\r\n    }\r\n    else{\r\n      dialog.style.display = 'none';\r\n    }\r\n  }\r\n  onSelectDate(date: Date){\r\n    if(this.currentDateElement){\r\n      const formattedDate = date.toLocaleDateString('en-US', {\r\n        year: 'numeric',\r\n        month: 'short',\r\n        day: 'numeric'\r\n      });\r\n      this.currentDateElement.textContent = formattedDate;\r\n      this.currentDateElement.setAttribute('timestamp', date.toString());\r\n      this.showDatePopup(false);\r\n      this.setCursorPositionAfter(this.currentDateElement, false);\r\n      this.traverseTheDOM(true);\r\n      this.emitChange();\r\n    }\r\n  }\r\n\r\n\r\n  //TABLE\r\n  currentTableElement:HTMLElement | undefined;\r\n  currentCellElement:HTMLElement | undefined;\r\n  newRow:HTMLElement | undefined;\r\n  newColumn:HTMLElement[] = [];\r\n  get tableDisabled(){\r\n    if(this.currentTableElement || this.currentImageElement || this.currentCodeElement || this.currentBulletListElement || this.currentNumberedListElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  addTable(){\r\n    if(this.tableDisabled || !this.config.enableTable) return;\r\n\r\n    const div = document.createElement('div');  \r\n    div.className = 'table-wrapper';  \r\n    const table = document.createElement('table');    \r\n    /* table.setAttribute('table-id', generateUniqueId()); */ \r\n    const tbody = document.createElement('tbody');\r\n    table.appendChild(tbody);\r\n    const rowH = document.createElement('tr');\r\n    let first = true;\r\n    let firstCell;\r\n    for (let index = 0; index < 3; index++) {\r\n      const cell = document.createElement('th');\r\n      /* cell.setAttribute('cell-id', generateUniqueId());  */\r\n      const p = document.createElement('p');\r\n      p.textContent = '\\u200B';\r\n      cell.appendChild(p);\r\n      rowH.appendChild(cell);\r\n      if(first){\r\n        firstCell = cell;\r\n        first = false;\r\n      }\r\n    }\r\n    tbody.appendChild(rowH)\r\n    for (let index = 0; index < 2; index++) {\r\n      const row = document.createElement('tr');\r\n      for (let index = 0; index < 3; index++){\r\n        const cell = document.createElement('td');\r\n        /* cell.setAttribute('cell-id', generateUniqueId()); */ \r\n        const p = document.createElement('p');\r\n        p.textContent = '\\u200B';\r\n        cell.appendChild(p);\r\n        row.appendChild(cell);\r\n\r\n      }\r\n      tbody.appendChild(row);\r\n    }\r\n    div.appendChild(table);\r\n    if(this.currentTextStyleElement){\r\n      this.currentTextStyleElement.insertAdjacentElement('afterend', div);\r\n    }\r\n    else{\r\n      this.editor.nativeElement.focus();\r\n      this.editor.nativeElement.appendChild(div);  \r\n    }\r\n    const p = document.createElement('p');\r\n    p.textContent = '\\u200B';\r\n    div.insertAdjacentElement('afterend', p);\r\n    this.setCursorPositionAfter(firstCell?.firstChild, true);\r\n    this.emitChange();\r\n    this.traverseTheDOM(true);\r\n\r\n  }\r\n  showTablePopup(show:boolean){\r\n    const dialog = this.el.nativeElement.querySelector('.universal-editor-table');\r\n    if(!dialog || !this.config.enableTable) return;\r\n\r\n    if (show && this.currentTableElement) {\r\n      const rect = this.currentTableElement.getBoundingClientRect();\r\n      const x = rect.left + window.scrollX + (rect.width / 2); // Middle of the element\r\n      const y = rect.top + window.scrollY + rect.height; // Bottom of the element\r\n      this.addRemoveTableClass(true);\r\n      dialog.style.display = 'flex';\r\n      setTimeout(() => {\r\n        const dialogWidth = dialog.offsetWidth;\r\n        const dialogHalfWidth = dialogWidth / 2; // Half the width of the dialog\r\n    \r\n        dialog.style.top = `${y + 8}px`;\r\n    \r\n        // Calculate left position to center the dialog\r\n        const leftPosition = x - dialogHalfWidth;\r\n    \r\n        // Adjust if the dialog goes beyond the left or right edge\r\n        if (leftPosition < 0) {\r\n          dialog.style.left = `${window.scrollX}px`; // Align to the left edge\r\n        } else if (leftPosition + dialogWidth > window.innerWidth) {\r\n          dialog.style.left = `${window.innerWidth - dialogWidth + window.scrollX}px`; // Align to the right edge\r\n        } else {\r\n          dialog.style.left = `${leftPosition}px`; // Centered\r\n        }\r\n      });\r\n    }\r\n    else{\r\n      dialog.style.display = 'none';\r\n      this.addRemoveTableClass(false);\r\n    }\r\n  }\r\n  private setCursorInsideTable(){\r\n    if(!this.currentCellElement && this.currentTableElement){\r\n      const firstCell = this.currentTableElement.querySelector('table tr:first-child th:first-child');\r\n      if(firstCell){\r\n        this.currentCellElement = firstCell as HTMLElement;\r\n        this.setCursorPositionAfter(firstCell, true);\r\n      }\r\n      else{\r\n        const secondCell = this.currentTableElement.querySelector('table tr:first-child td:first-child');\r\n        if(secondCell){\r\n          this.currentCellElement = secondCell as HTMLElement;\r\n          this.setCursorPositionAfter(secondCell, true);\r\n        }\r\n      }\r\n    }\r\n  }\r\n  removeTable(){\r\n    if(this.currentTableElement){\r\n      this.onRemoveTableLeave();\r\n      this.currentTableElement.remove();\r\n      this.editor.nativeElement.focus();\r\n      this.emitChange();\r\n      this.traverseTheDOM(true);\r\n    }\r\n  }\r\n  clearCell(){\r\n    if(this.currentCellElement){\r\n      const p = document.createElement('p');\r\n      p.textContent = '\\u200B';\r\n      this.currentCellElement.innerHTML='';\r\n      this.currentCellElement.appendChild(p);\r\n      this.setCursorPositionAfter(p,true);\r\n      this.emitChange();\r\n      this.traverseTheDOM(true);\r\n    }\r\n  }\r\n  onRemoveCellEnter(){\r\n    if(this.currentCellElement && !this.currentCellElement.classList.contains('remove')){\r\n      this.currentCellElement.classList.add('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-cell');\r\n      if(button){\r\n        button.children[0].classList.add('remove-button');\r\n      }\r\n    }\r\n  }\r\n  onRemoveCellLeave(){\r\n    if(this.currentCellElement && this.currentCellElement.classList.contains('remove')){\r\n      this.currentCellElement.classList.remove('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-cell');\r\n      if(button){\r\n        button.children[0].classList.remove('remove-button');\r\n      }\r\n    }\r\n  }\r\n  removeRow(){\r\n    if(this.currentCellElement && this.currentCellElement.parentElement){\r\n      this.currentCellElement.parentElement.remove();\r\n      this.editor.nativeElement.focus();\r\n      this.emitChange();\r\n      this.traverseTheDOM(true);\r\n    }\r\n  }\r\n  onRemoveRowEnter(){\r\n    if(this.currentCellElement && this.currentCellElement.parentElement){\r\n      this.currentCellElement.parentElement.childNodes.forEach(element => {\r\n        if(!(element as HTMLElement).classList.contains('remove')){\r\n          (element as HTMLElement).classList.add('remove');\r\n          (element as HTMLElement).classList.add('cell-selected-remove');\r\n        }\r\n      });\r\n      const button = this.el.nativeElement.querySelector('#remove-button-row');\r\n      if(button){\r\n        button.children[0].classList.add('remove-button');\r\n      }\r\n    }\r\n  }\r\n  onRemoveRowLeave(){\r\n    if(this.currentCellElement && this.currentCellElement.parentElement){\r\n      this.currentCellElement.parentElement.childNodes.forEach(element => {\r\n        if((element as HTMLElement).classList.contains('remove')){\r\n          (element as HTMLElement).classList.remove('remove');\r\n          (element as HTMLElement).classList.remove('cell-selected-remove');\r\n        }\r\n      });\r\n      const button = this.el.nativeElement.querySelector('#remove-button-row');\r\n      if(button){\r\n        button.children[0].classList.remove('remove-button');\r\n      }\r\n    }\r\n  }\r\n  removeColumn(){\r\n    if(this.currentCellElement && this.currentCellElement.parentNode && this.currentTableElement){\r\n      const columnIndex = Array.from(this.currentCellElement.parentNode.children).indexOf(this.currentCellElement);\r\n      const rows = this.currentTableElement.querySelectorAll('tr');\r\n      rows.forEach(row => { if(row.cells[columnIndex]) row.deleteCell(columnIndex); });\r\n      this.editor.nativeElement.focus();\r\n      this.emitChange();\r\n      this.traverseTheDOM(true);\r\n    }\r\n  }\r\n  onRemoveColumnEnter(){\r\n    if(this.currentCellElement && this.currentCellElement.parentNode && this.currentTableElement){\r\n      const columnIndex = Array.from(this.currentCellElement.parentNode.children).indexOf(this.currentCellElement);\r\n      const rows = this.currentTableElement.querySelectorAll('tr');\r\n      rows.forEach(row => { if(row.cells[columnIndex] && !row.cells[columnIndex].classList.contains('remove')){\r\n        row.cells[columnIndex].classList.add('remove');\r\n        row.cells[columnIndex].classList.add('cell-selected-remove');\r\n      }});\r\n      const button = this.el.nativeElement.querySelector('#remove-button-column');\r\n      if(button){\r\n        button.children[0].classList.add('remove-button');\r\n      }\r\n    }\r\n  }\r\n  onRemoveColumnLeave(){\r\n    if(this.currentCellElement && this.currentCellElement.parentNode && this.currentTableElement){\r\n      const columnIndex = Array.from(this.currentCellElement.parentNode.children).indexOf(this.currentCellElement);\r\n      const rows = this.currentTableElement.querySelectorAll('tr');\r\n      rows.forEach(row => { if(row.cells[columnIndex] && row.cells[columnIndex].classList.contains('remove')){\r\n        row.cells[columnIndex].classList.remove('remove');\r\n        row.cells[columnIndex].classList.remove('cell-selected-remove');\r\n      }});\r\n      const button = this.el.nativeElement.querySelector('#remove-button-column');\r\n      if(button){\r\n        button.children[0].classList.remove('remove-button');\r\n      }\r\n    }\r\n  }\r\n  insertRow(){\r\n    if(this.currentCellElement && this.currentCellElement.parentElement){\r\n      this.onInsertRowLeave();\r\n      const newRow = this.currentCellElement.parentElement.cloneNode(true);\r\n      let firstPar;\r\n      newRow.childNodes.forEach((cell, index) => {\r\n        (cell as HTMLElement).innerHTML = '';\r\n        const p = document.createElement('p');\r\n        p.textContent = '\\u200B';\r\n        cell.appendChild(p);\r\n        if(index === 0) firstPar = p;\r\n      })\r\n      this.currentCellElement.parentElement.insertAdjacentElement('afterend', newRow as HTMLElement);\r\n      this.setCursorPositionAfter(firstPar, true);\r\n      this.emitChange();\r\n      this.traverseTheDOM(true);\r\n    }\r\n  }\r\n  onInsertRowEnter(){\r\n    if(this.currentCellElement && this.currentCellElement.parentElement){\r\n      const newRow = this.currentCellElement.parentElement.cloneNode(true);\r\n      newRow.childNodes.forEach((cell, index) => {\r\n        (cell as HTMLElement).innerHTML = '';\r\n        (cell as HTMLElement).classList.add('cell-selected');\r\n        const p = document.createElement('p');\r\n        p.textContent = '\\u200B';\r\n        cell.appendChild(p);\r\n      });\r\n      this.newRow = newRow as HTMLElement;\r\n      this.currentCellElement.parentElement.insertAdjacentElement('afterend', newRow as HTMLElement);\r\n    }\r\n  }\r\n  onInsertRowLeave(){\r\n    if(this.newRow){\r\n      this.newRow.remove();\r\n      this.newRow = undefined;\r\n    }\r\n  }\r\n  insertColumn(){\r\n    if(this.currentCellElement && this.currentCellElement.parentNode && this.currentTableElement){\r\n      this.onInsertColumnLeave();\r\n      const columnIndex = Array.from(this.currentCellElement.parentNode.children).indexOf(this.currentCellElement);\r\n      const rows = this.currentTableElement.querySelectorAll('tr');\r\n      let firstPar;\r\n      rows.forEach((row, index) => { \r\n        if(row.cells[columnIndex]){\r\n          const newCell = row.cells[columnIndex].cloneNode(false);\r\n          const p = document.createElement('p');\r\n          p.textContent = '\\u200B';\r\n          newCell.appendChild(p);\r\n          row.cells[columnIndex].insertAdjacentElement('afterend', newCell as HTMLElement);\r\n          if(index === 0) firstPar = p;\r\n        }\r\n      });\r\n      this.setCursorPositionAfter(firstPar, true);\r\n      this.emitChange();\r\n      this.traverseTheDOM(true);\r\n    }\r\n  }\r\n  onInsertColumnEnter(){\r\n    if(this.currentCellElement && this.currentCellElement.parentNode && this.currentTableElement){\r\n      const columnIndex = Array.from(this.currentCellElement.parentNode.children).indexOf(this.currentCellElement);\r\n      const rows = this.currentTableElement.querySelectorAll('tr');\r\n      rows.forEach((row) => { \r\n        if(row.cells[columnIndex]){\r\n          const newCell = row.cells[columnIndex].cloneNode(false);\r\n          (newCell as HTMLElement).classList.add('cell-selected');\r\n          const p = document.createElement('p');\r\n          p.textContent = '\\u200B';\r\n          newCell.appendChild(p);\r\n          row.cells[columnIndex].insertAdjacentElement('afterend', newCell as HTMLElement);\r\n          this.newColumn.push(newCell as HTMLElement);\r\n        }\r\n      });\r\n    }\r\n  }\r\n  onInsertColumnLeave(){\r\n    if(this.newColumn){\r\n      this.newColumn.forEach(cell => cell.remove());\r\n      this.newColumn = [];\r\n    }\r\n  }\r\n  private addRemoveTableClass(show:boolean){\r\n    if(this.currentCellElement && this.currentTableElement){\r\n      const selectedCells = this.currentTableElement.querySelectorAll('.cell-selected');\r\n      selectedCells.forEach(element => {\r\n        element.classList.remove('cell-selected');\r\n      });\r\n      if(show){\r\n        this.currentCellElement.classList.add('cell-selected');\r\n      }\r\n    }\r\n  }\r\n  onRemoveTableEnter(){\r\n    if(this.currentTableElement && !this.currentTableElement.classList.contains('remove')){\r\n      this.currentTableElement.classList.add('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-table');\r\n      if(button){\r\n        button.children[0].classList.add('remove-button');\r\n      }\r\n    }\r\n  }\r\n  onRemoveTableLeave(){\r\n    if(this.currentTableElement && this.currentTableElement.classList.contains('remove')){\r\n      this.currentTableElement.classList.remove('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-table');\r\n      if(button){\r\n        button.children[0].classList.remove('remove-button');\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  //CODE\r\n  currentCodeElement:HTMLElement | undefined;\r\n  isExpandedCode = true;\r\n  get codeDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentBulletListElement || this.currentNumberedListElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  addCode(codeText: string){\r\n    if(this.codeDisabled) return;\r\n\r\n    const div = document.createElement('div');\r\n    this.currentCodeElement = div;\r\n    div.className = 'code-wrapper';\r\n    div.setAttribute('spellcheck', 'false');\r\n    \r\n    this.updateNumberOfLines(codeText, 'Add');\r\n    \r\n    const code = document.createElement('code');\r\n    code.textContent = codeText;\r\n    div.appendChild(code);\r\n\r\n    if(this.currentTextStyleElement){\r\n      this.currentTextStyleElement.insertAdjacentElement('afterend', div);\r\n    }\r\n    else{\r\n      this.editor.nativeElement.focus();\r\n      this.editor.nativeElement.appendChild(div);  \r\n    }\r\n    const p = document.createElement('p');\r\n    p.textContent = '\\u200B';\r\n    div.insertAdjacentElement('afterend', p);\r\n    this.setCursorPositionAfter(code, true);\r\n    this.currentTextStyleElement = undefined;\r\n\r\n    this.emitChange();\r\n    this.traverseTheDOM(true);\r\n  }\r\n  removeCode(){\r\n    if(this.currentCodeElement){\r\n      this.onRemoveCodeLeave();\r\n      this.currentCodeElement.remove();\r\n      this.editor.nativeElement.focus();\r\n      this.emitChange();\r\n      this.traverseTheDOM(true);\r\n    }\r\n  }\r\n  copyCode(){\r\n    if(this.currentCodeElement){\r\n      navigator.clipboard.writeText(this.currentCodeElement.lastChild?.textContent ?? '');\r\n      this.copySelected = true;\r\n      setTimeout(() => this.copySelected = false, 500);\r\n    }\r\n  }\r\n  private updateNumberOfLines(codeText: string | null, mode: 'Add' | 'Edit'){\r\n    if(this.currentCodeElement && codeText !== null){\r\n      const lines = codeText.split('\\n');\r\n      const counter = document.createElement('div');\r\n      counter.setAttribute('contenteditable', 'false');\r\n      counter.className = 'code-counter';\r\n      lines.forEach((text, index) => {\r\n        const span = document.createElement('span');\r\n        span.textContent = (index + 1).toString();\r\n        counter.appendChild(span);\r\n      });\r\n      if(mode === 'Add'){\r\n        this.currentCodeElement.appendChild(counter);\r\n      }\r\n      else if(this.currentCodeElement.firstChild){\r\n        this.currentCodeElement.firstChild.replaceWith(counter);\r\n      }\r\n    }\r\n  }\r\n  showCodePopup(show:boolean){\r\n    const dialog = this.el.nativeElement.querySelector('.universal-editor-code');\r\n    if(!dialog || !this.config.enableCode) return;\r\n\r\n    if (show && this.currentCodeElement && this.currentCodeElement.firstChild) {\r\n      const rect = this.currentCodeElement.getBoundingClientRect();\r\n      const x = rect.left + window.scrollX + (rect.width / 2); // Middle of the element\r\n      const y = rect.top + window.scrollY + rect.height; // Bottom of the element\r\n      this.addRemoveCodeClass(true);\r\n      dialog.style.display = 'flex';\r\n      setTimeout(() => {\r\n        const dialogWidth = dialog.offsetWidth;\r\n        const dialogHalfWidth = dialogWidth / 2; // Half the width of the dialog\r\n    \r\n        dialog.style.top = `${y + 8}px`;\r\n    \r\n        // Calculate left position to center the dialog\r\n        const leftPosition = x - dialogHalfWidth;\r\n    \r\n        // Adjust if the dialog goes beyond the left or right edge\r\n        if (leftPosition < 0) {\r\n          dialog.style.left = `${window.scrollX}px`; // Align to the left edge\r\n        } else if (leftPosition + dialogWidth > window.innerWidth) {\r\n          dialog.style.left = `${window.innerWidth - dialogWidth + window.scrollX}px`; // Align to the right edge\r\n        } else {\r\n          dialog.style.left = `${leftPosition}px`; // Centered\r\n        }\r\n      });\r\n    }\r\n    else{\r\n      dialog.style.display = 'none';\r\n      this.addRemoveCodeClass(false);\r\n    }\r\n  }\r\n  private addRemoveCodeClass(show:boolean){\r\n    if(this.currentCodeElement){\r\n      if(show){\r\n        (this.currentCodeElement.firstChild as HTMLElement).classList.add('code-counter-selected');\r\n        this.currentCodeElement.classList.add('code-wrapper-selected');\r\n      }\r\n      else{\r\n        (this.currentCodeElement.firstChild as HTMLElement).classList.remove('code-counter-selected');\r\n        this.currentCodeElement.classList.remove('code-wrapper-selected');\r\n      }\r\n    }\r\n  }\r\n  expandCollapseCode(show:boolean){\r\n    if(this.currentCodeElement){\r\n      this.isExpandedCode = show;\r\n      if(show){\r\n        (this.currentCodeElement.lastChild as HTMLElement).classList.remove('code-collapsed');\r\n        this.currentCodeElement.classList.remove('code-wrapper-collapsed');\r\n        (this.currentCodeElement.lastChild as HTMLElement).removeAttribute('contenteditable');\r\n      }\r\n      else{\r\n        (this.currentCodeElement.lastChild as HTMLElement).classList.add('code-collapsed');\r\n        this.currentCodeElement.classList.add('code-wrapper-collapsed');\r\n        (this.currentCodeElement.lastChild as HTMLElement).setAttribute('contenteditable', 'false');\r\n      }\r\n      this.showCodePopup(true);\r\n    }\r\n  }\r\n  onRemoveCodeEnter(){\r\n    if(this.currentCodeElement && !this.currentCodeElement.classList.contains('remove')){\r\n      this.currentCodeElement.classList.add('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-code');\r\n      if(button){\r\n        button.children[0].classList.add('remove-button');\r\n      }\r\n    }\r\n  }\r\n  onRemoveCodeLeave(){\r\n    if(this.currentCodeElement && this.currentCodeElement.classList.contains('remove')){\r\n      this.currentCodeElement.classList.remove('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-code');\r\n      if(button){\r\n        button.children[0].classList.remove('remove-button');\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  //FILE & IMAGE\r\n  files: {file:File; key:string}[] = [];\r\n  currentImageElement:HTMLElement | undefined;\r\n  private resizing = false;\r\n  private startX = 0;\r\n  private startWidth = 0;\r\n  private maxWidth = 0;\r\n  altText = '';\r\n  private altTextSubject = new Subject<void>();\r\n  altText$ = this.altTextSubject.asObservable();\r\n  get fileDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement || this.currentBulletListElement || this.currentNumberedListElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  private setImageUrl(key:string, url:string){\r\n    const imgElement = this.editor.nativeElement.querySelector(`img[image-key=\"${key}\"]`);\r\n    if(imgElement){\r\n      imgElement.src = url;\r\n    }\r\n    this.emitChange();\r\n  }\r\n  showAddEditAltText(show:boolean){\r\n    const dialog = this.el.nativeElement.querySelector('.universal-editor-altText-edit');\r\n    if(!dialog || !this.config.enableFile) return;\r\n\r\n    if (show && this.currentImageElement && this.currentImageElement.firstChild) {\r\n      this.altText = (this.currentImageElement.firstChild as HTMLImageElement).alt;\r\n      const rect = (this.currentImageElement.firstChild as HTMLElement).getBoundingClientRect();\r\n      const x = rect.left + window.scrollX; // Align with the start of the image\r\n      const bottomOfImage = rect.top + window.scrollY + rect.height;\r\n\r\n      dialog.style.display = 'block';\r\n      setTimeout(() => {\r\n          this.altTextSubject.next();\r\n          const dialogHeight = dialog.offsetHeight;\r\n          const dialogTop = bottomOfImage - dialogHeight; \r\n\r\n          // Adjust vertical position\r\n          dialog.style.top = `${dialogTop}px`;\r\n\r\n          // Adjust horizontal position\r\n          const dialogWidth = dialog.offsetWidth;\r\n          dialog.style.left = (x + dialogWidth > window.innerWidth) ? `${window.innerWidth - dialogWidth + window.scrollX}px` : `${x}px`;\r\n      });\r\n    }\r\n    else{\r\n      dialog.style.display = 'none';\r\n    }\r\n  }\r\n  onSubmitAltText(altText:string){\r\n    if(this.currentImageElement && this.currentImageElement.firstChild){\r\n      const img = this.currentImageElement.firstChild as HTMLImageElement;\r\n      img.alt = altText;\r\n      this.setCursorPositionAfter(this.currentImageElement, true);\r\n      this.clearSizer();\r\n      this.emitChange();\r\n      this.addSizerIntoImageWrapper();\r\n      this.showAddEditAltText(false);\r\n    }\r\n  }\r\n  private addImage(file: {file:File; key:string}){\r\n    const setImage = (url:string) =>{\r\n      const div = document.createElement('div');\r\n        div.setAttribute('wrapper-image-key', file.key);\r\n        div.className = 'img-wrapper';\r\n        div.setAttribute('contenteditable', 'false');\r\n        const img = document.createElement('img');\r\n        img.src = url;\r\n        img.alt = '';\r\n        img.onerror = function() {\r\n          console.log('Error loading the image.');\r\n          this.src = Const.no_image; \r\n          this.style.width = '100px'; \r\n        }\r\n        img.setAttribute('image-key', file.key);\r\n        img.style.width = '50%';\r\n        img.style.height = 'auto';\r\n        div.appendChild(img);\r\n\r\n        if(this.currentTextStyleElement){\r\n          this.currentTextStyleElement.insertAdjacentElement('afterend', div);\r\n        }\r\n        else{\r\n          this.editor.nativeElement.focus();\r\n          this.editor.nativeElement.appendChild(div);  \r\n        }\r\n        const p = document.createElement('p');\r\n        p.textContent = '\\u200B';\r\n        div.insertAdjacentElement('afterend', p);\r\n        this.setCursorPositionAfter(p, true);\r\n        this.currentTextStyleElement = p;\r\n        this.emitChange();\r\n    }\r\n    const reader = new FileReader();\r\n    reader.onload = (event: ProgressEvent<FileReader>) => {\r\n      const result = event.target?.result;\r\n      if (typeof result === 'string') {\r\n        setImage(result);\r\n      }\r\n    };\r\n    reader.readAsDataURL(file.file);\r\n  }\r\n  private addFile(file: File){\r\n    const newF = {key: generateUniqueId(), file: file};\r\n    \r\n    this.files.push(newF);\r\n    if (file.type.match(/^image\\//)) {\r\n      this.addImage(newF);\r\n    }\r\n    this.onFilesChanged.emit(this.files);\r\n  }\r\n  removeFile(key?:string){\r\n    if(key){\r\n      const imgElement = this.editor.nativeElement.querySelector(`div[wrapper-image-key=\"${key}\"]`);\r\n      if(imgElement){\r\n        this.clearSizer();\r\n        imgElement.remove();\r\n        this.currentImageElement = undefined;\r\n        this.emitChange();\r\n      }\r\n      this.files = this.files.filter(file => file.key !== key);\r\n      this.onFilesChanged.emit(this.files);\r\n    }\r\n    else if(this.currentImageElement){\r\n      this.clearSizer();\r\n      const key = this.currentImageElement.getAttribute('wrapper-image-key')\r\n      if(key){\r\n        this.currentImageElement.remove();\r\n        this.currentImageElement = undefined;\r\n        this.files = this.files.filter(file => file.key !== key);\r\n        this.onFilesChanged.emit(this.files);\r\n        this.emitChange();\r\n        const button = this.el.nativeElement.querySelector('#remove-button-img');\r\n        if(button){\r\n          button.children[0].classList.remove('remove-button');\r\n        }\r\n      }\r\n    }\r\n    this.traverseTheDOM(true);\r\n  }\r\n  async copyImage(){\r\n    if(this.currentImageElement && this.currentImageElement.firstChild){\r\n      const image = this.currentImageElement.firstChild as HTMLImageElement;\r\n      if(image.src){\r\n        const response = await fetch(image.src);\r\n        const blob = await response.blob();\r\n          \r\n        await navigator.clipboard.write([new ClipboardItem({[blob.type]: blob})]);\r\n        this.copySelected = true;\r\n        setTimeout(() => this.copySelected = false, 500);\r\n      }\r\n    }\r\n  }\r\n  uploadFile(){\r\n    if(!this.config.enableFile) return;\r\n\r\n    const fileInput = document.createElement('input');\r\n    fileInput.type = 'file';\r\n    fileInput.style.display = 'none';\r\n    document.body.appendChild(fileInput);\r\n\r\n    fileInput.addEventListener('change', (event) => {\r\n      const target = event.target as HTMLInputElement;\r\n      const file = target.files?.[0];\r\n      if (file) {\r\n        this.addFile(file);\r\n        document.body.removeChild(fileInput);\r\n      }\r\n    });\r\n\r\n    fileInput.click();\r\n  }\r\n  private addSizerIntoImageWrapper(){\r\n    if(this.currentImageElement){\r\n      const sizer = this.el.nativeElement.querySelector('.img-wrapper-sizer');\r\n      if(sizer){\r\n        sizer.style.display = 'flex';\r\n        this.currentImageElement.appendChild(sizer);\r\n        this.showImgPopup(true);\r\n      }\r\n    }\r\n  }\r\n  private showImgPopup(show: boolean) {\r\n    const dialog = this.el.nativeElement.querySelector('.universal-editor-img');\r\n    if(!dialog || !this.config.enableFile) return;\r\n\r\n    if (show && this.currentImageElement && this.currentImageElement.firstChild) {\r\n      const rect = (this.currentImageElement.firstChild as HTMLElement).getBoundingClientRect();\r\n      const x = rect.left + window.scrollX + (rect.width / 2); // Middle of the element\r\n      const y = rect.top + window.scrollY + rect.height; // Bottom of the element\r\n    \r\n      dialog.style.display = 'flex';\r\n      setTimeout(() => {\r\n        const dialogWidth = dialog.offsetWidth;\r\n        const dialogHalfWidth = dialogWidth / 2; // Half the width of the dialog\r\n    \r\n        dialog.style.top = `${y + 8}px`;\r\n    \r\n        // Calculate left position to center the dialog\r\n        const leftPosition = x - dialogHalfWidth;\r\n    \r\n        // Adjust if the dialog goes beyond the left or right edge\r\n        if (leftPosition < 0) {\r\n          dialog.style.left = `${window.scrollX}px`; // Align to the left edge\r\n        } else if (leftPosition + dialogWidth > window.innerWidth) {\r\n          dialog.style.left = `${window.innerWidth - dialogWidth + window.scrollX}px`; // Align to the right edge\r\n        } else {\r\n          dialog.style.left = `${leftPosition}px`; // Centered\r\n        }\r\n      });\r\n    }\r\n    else{\r\n      dialog.style.display = 'none';\r\n    }\r\n  }\r\n  private clearSizer(){\r\n    const sizer = this.el.nativeElement.querySelector('.img-wrapper-sizer');\r\n    if(!sizer) return;\r\n    sizer.style.display = 'none';\r\n    this.el.nativeElement.appendChild(sizer);\r\n    this.showImgPopup(false);\r\n  }\r\n  resizeImage(event: MouseEvent) {\r\n    if(this.currentImageElement){\r\n      this.resizing = true;\r\n      this.startX = event.clientX;\r\n      this.maxWidth = this.currentImageElement.offsetWidth - 30;\r\n      const img = this.currentImageElement.firstChild as HTMLElement;\r\n      this.startWidth = img.offsetWidth;\r\n\r\n      const mouseMove = (e: MouseEvent) => {\r\n        if (this.resizing) {\r\n          const diffX = e.clientX - this.startX;\r\n          const newWidth = this.startWidth + diffX;\r\n          if(this.currentImageElement && this.currentImageElement.firstChild){\r\n            const img = this.currentImageElement.firstChild as HTMLElement;\r\n            img.style.width = `${newWidth > this.maxWidth ? this.maxWidth : newWidth}px`;\r\n            this.showImgPopup(true);\r\n            this.clearSizer();\r\n            this.emitChange();\r\n            this.addSizerIntoImageWrapper();\r\n          }\r\n        }\r\n      };\r\n\r\n      const mouseUp = () => {\r\n        this.resizing = false;\r\n        document.removeEventListener('mousemove', mouseMove);\r\n        document.removeEventListener('mouseup', mouseUp);\r\n      };\r\n\r\n      document.addEventListener('mousemove', mouseMove);\r\n      document.addEventListener('mouseup', mouseUp);\r\n    }\r\n  }\r\n  onRemoveImgEnter(){\r\n    if(this.currentImageElement && !this.currentImageElement.classList.contains('remove')){\r\n      this.currentImageElement.classList.add('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-img');\r\n      if(button){\r\n        button.children[0].classList.add('remove-button');\r\n      }\r\n    }\r\n  }\r\n  onRemoveImgLeave(){\r\n    if(this.currentImageElement && this.currentImageElement.classList.contains('remove')){\r\n      this.currentImageElement.classList.remove('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-img');\r\n      if(button){\r\n        button.children[0].classList.remove('remove-button');\r\n      }\r\n    }\r\n  }\r\n  setUploadFiles(files: {file:File; key:string}[]){\r\n    this.files = files;\r\n  }\r\n\r\n\r\n \r\n  //BULLET LIST\r\n  isBulletList = false;\r\n  private currentBulletListElement: HTMLElement | undefined;\r\n  get bulletListDisabled(){\r\n    if(this.textStyle !== 'p' || this.currentImageElement || this.currentCodeElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onBulletListClick(){\r\n    this.editor.nativeElement.focus();\r\n    const event = new KeyboardEvent('keydown', {\r\n      code:'Digit8',\r\n      ctrlKey: true,\r\n      shiftKey: true,\r\n      bubbles: true,\r\n      cancelable: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  //NUMBERED LIST\r\n  isNumberedList = false;\r\n  private currentNumberedListElement: HTMLElement | undefined;\r\n  get numberedListDisabled(){\r\n    if(this.textStyle !== 'p' || this.currentImageElement || this.currentCodeElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onNumberedListClick(){\r\n    this.editor.nativeElement.focus();\r\n    const event = new KeyboardEvent('keydown',{\r\n      code:'Digit7',\r\n      ctrlKey: true,\r\n      shiftKey: true,\r\n      bubbles: true,\r\n      cancelable: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  // TEXT STYLE\r\n  @ViewChild('textStyles') private textStyles!: TextStylesComponent;\r\n  textStyle = 'p';\r\n  private currentTextStyleElement: HTMLElement | undefined;\r\n  get textStyleDisabled(){\r\n    if(this.currentBulletListElement || this.currentNumberedListElement || this.currentImageElement || this.currentCodeElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onStyleChange(event: string){\r\n    if(this.config.enableTextStyles){\r\n      this.restoreCaretPosition();\r\n      if(this.editor.nativeElement.innerHTML.length === 0){\r\n        this.editor.nativeElement.focus();\r\n        let inside = `&#8203;`;\r\n        if(this.selectedColor && !equal(this.selectedColor, this.defaultTextColor)){\r\n          inside = `<span class=\"universal-editor-text-color\" style=\"color:${this.selectedColor.colorCode};\" \r\n          custom-text-color-name=\"${this.selectedColor.colorName}\" custom-text-color-code=\"${this.selectedColor.colorCode}\">${inside}</span>`;\r\n        }\r\n        if(this.isBold){\r\n          inside = `<strong>${inside}</strong>`;\r\n        }\r\n        if(this.isItalic){\r\n          inside = `<em>${inside}</em>`;\r\n        }\r\n        if(this.isUnderline){\r\n          inside = `<u>${inside}</u>`;\r\n        }\r\n        if(this.isStrikethrough){\r\n          inside = `<s>${inside}</s>`;\r\n        }\r\n        if(this.isSubscript){\r\n          inside = `<sub>${inside}</sub>`;\r\n        }\r\n        if(this.isSuperscript){\r\n          inside = `<sup>${inside}</sup>`;\r\n        }\r\n        inside = `<${event}>${inside}</${event}>`;\r\n  \r\n        const elem = this.createElementFromString(inside) as HTMLElement;\r\n        this.addElement(elem, this.editor.nativeElement);\r\n        this.setCursorPositionAfter(elem, true);\r\n      }\r\n      else if(this.currentTextStyleElement){\r\n        this.replaceElement(this.currentTextStyleElement, event);\r\n      }\r\n      this.traverseTheDOM(false);\r\n      this.textStyle = event;\r\n      if(this.textStyles){\r\n        this.textStyles.setStyle(this.textStyle);\r\n      }\r\n     this.emitChange();\r\n    }\r\n  }\r\n\r\n\r\n  // TEXT COLOR\r\n  selectedColor: Color | undefined;\r\n  private currentTextColorElement: HTMLElement | undefined;\r\n  @ViewChild('textColor') private textColorRef!: TextColorComponent;\r\n  get textColorDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  private setDefaultTextColor(mode:boolean){\r\n    this.darkMode = mode;\r\n    this.textColors = this.darkMode ? Const.colorsDarkMode : Const.colors;\r\n    this.defaultTextColor = this.textColors.find(color => color.colorName = this.config.defaultTextColor);\r\n    if(this.defaultTextColor){\r\n      this.defaultTextColor.selected = true;\r\n      this.selectedColor = this.defaultTextColor;\r\n    } \r\n  }\r\n  triggerTextColor(color: 'Black' | 'Gainsboro' | 'Red' | 'Green' | 'Blue' |\r\n  'Yellow' | 'Cyan' | 'Magenta' | 'Light Gray' | 'Gray' | 'Maroon' | 'Olive' |\r\n  'Purple' | 'Teal' | 'Navy' | 'Coral' | 'Turquoise' | 'Salmon' |\r\n  'Lime' | 'Gold' | 'Orchid'){\r\n    const item = Const.colors.find(col => col.colorName === color);\r\n    if(item){\r\n      return item;\r\n    }\r\n    return Const.colors[0];\r\n  }\r\n  onTextColorChange(color:Color){\r\n    this.restoreCaretPosition();\r\n    if(equal(this.selectedColor, color)) return;\r\n    this.selectedColor = color;\r\n    const event = new KeyboardEvent('keydown', {\r\n      code: 'CustomTextColor',\r\n      bubbles: true,\r\n      cancelable: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  // BOLD\r\n  isBold = false;\r\n  private currentBoldElement: HTMLElement | undefined;\r\n  get boldDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onSelectBold(){\r\n    this.editor.nativeElement.focus();\r\n    const event = new KeyboardEvent('keydown', {\r\n      key: 'b',\r\n      ctrlKey: true,\r\n      bubbles: true,\r\n      cancelable: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  // ITALIC\r\n  isItalic = false;\r\n  private currentItalicElement: HTMLElement | undefined;\r\n  get italicDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onSelectItalic(){\r\n    this.editor.nativeElement.focus();\r\n    const event = new KeyboardEvent('keydown', {\r\n      key: 'i',\r\n      ctrlKey: true,\r\n      bubbles: true,\r\n      cancelable: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  // UNDERLINE\r\n  isUnderline = false;\r\n  private currentUnderlineElement: HTMLElement | undefined;\r\n  get underlineDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onSelectUnderline(){\r\n    this.restoreCaretPosition();\r\n    const event = new KeyboardEvent('keydown', {\r\n      key: 'u',\r\n      ctrlKey: true,\r\n      bubbles: true,\r\n      cancelable: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  // STRIKETROUGH\r\n  isStrikethrough = false;\r\n  private currentStrikethroughElement: HTMLElement | undefined;\r\n  get strikethroughDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onSelectStrikethrough(){\r\n    this.restoreCaretPosition();\r\n    const event = new KeyboardEvent('keydown', {\r\n      key: 'S',\r\n      ctrlKey: true,\r\n      bubbles: true,\r\n      cancelable: true,\r\n      shiftKey: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  // SUBSCRIPT\r\n  isSubscript = false;\r\n  private currentSubscriptElement: HTMLElement | undefined;\r\n  get subscriptDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onSelectSubscript(){\r\n    this.restoreCaretPosition();\r\n    const event = new KeyboardEvent('keydown', {\r\n      code: 'Comma',\r\n      ctrlKey: true,\r\n      bubbles: true,\r\n      cancelable: true,\r\n      shiftKey: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  // SUPERSCRIPT\r\n  isSuperscript = false;\r\n  private currentSupesrsciptElement: HTMLElement | undefined;\r\n  get superscriptDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onSelectSuperscript(){\r\n    this.restoreCaretPosition();\r\n    const event = new KeyboardEvent('keydown', {\r\n      code: 'Period',\r\n      ctrlKey: true,\r\n      bubbles: true,\r\n      cancelable: true,\r\n      shiftKey: true\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  // CLEAR FORMATTING\r\n  private highestFormatElement: HTMLElement | undefined;\r\n  get clearFormattingDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onClearFormatting(){\r\n    this.restoreCaretPosition();\r\n    const event = new KeyboardEvent('keydown', {\r\n      key: '\\\\',\r\n      ctrlKey: true,\r\n      bubbles: true,\r\n      cancelable: true,\r\n    });\r\n    this.editor.nativeElement.dispatchEvent(event);\r\n  }\r\n\r\n\r\n  //LINK\r\n  private linkSubject = new Subject<void>();\r\n  link$ = this.linkSubject.asObservable();\r\n  linkData: Link | undefined;\r\n  linkMode: 'Add' | 'Edit' = 'Add';\r\n  private isAddEditLinkDialogOpen = false;\r\n  copySelected = false;\r\n  private currentLinkElement: HTMLElement | undefined;\r\n  get linkDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  private showLinkPopup(show: boolean) {\r\n    const dialog = this.el.nativeElement.querySelector('.universal-editor-link');\r\n    if(!dialog || !this.config.enableLink) return;\r\n\r\n    if(show && this.currentLinkElement){\r\n      const rect = this.currentLinkElement.getBoundingClientRect();\r\n      const x = rect.left + window.scrollX;\r\n      const y = rect.top + window.scrollY;\r\n      dialog.style.display = 'flex';\r\n      setTimeout(() => {\r\n        const dialogWidth = dialog.offsetWidth;\r\n        const rightWidth = window.innerWidth - x;\r\n\r\n        dialog.style.top = `${y + rect.height + 8}px`;\r\n        if (rightWidth > dialogWidth) {\r\n          dialog.style.left = `${x}px`;\r\n        } else {\r\n          dialog.style.left = `${x - (dialogWidth - rightWidth)}px`;\r\n        }\r\n      }, 0);\r\n    }\r\n    else{\r\n      dialog.style.display = 'none';\r\n    }\r\n  }\r\n  showAddEditLink(show:boolean, mode: 'Add' | 'Edit'){\r\n    const dialog = this.el.nativeElement.querySelector('.universal-editor-link-edit');\r\n    if(!dialog || !this.config.enableLink) return;\r\n\r\n    if(show){\r\n      this.linkMode = mode;\r\n      if(mode === 'Add'){\r\n        this.linkData = undefined;\r\n      }\r\n      else{\r\n        this.linkData = {\r\n          link: this.currentLinkElement ? this.currentLinkElement.getAttribute('href') ?? '' : '',\r\n          text: this.currentLinkElement ? this.currentLinkElement.textContent ?? '' : ''\r\n        } \r\n      }\r\n\r\n      this.restoreCaretPosition();\r\n      this.showLinkPopup(false);\r\n      const coords = this.getCaretCoordinates();\r\n      const x = coords.x;\r\n      const y = coords.y;\r\n      dialog.style.display = 'block';\r\n      setTimeout(() => {\r\n      this.linkSubject.next();\r\n      this.isAddEditLinkDialogOpen = true;\r\n        const dropdownHeight = dialog.clientHeight;\r\n        const dropdownWidth = dialog.offsetWidth;\r\n        const rightWidth = window.innerWidth - x;\r\n        //console.log(x, y, dropdownHeight, dropdownWidth, rightWidth);\r\n  \r\n        if(y > dropdownHeight){\r\n          dialog.style.top = `${y - 10 - dropdownHeight}px`;\r\n        }\r\n        else{\r\n          dialog.style.top = `${y + 30}px`;\r\n        }  \r\n        if(rightWidth > dropdownWidth){\r\n          dialog.style.left = `${x}px`;\r\n        }\r\n        else{\r\n          dialog.style.left = `${x - (dropdownWidth - rightWidth)}px`;\r\n        }\r\n      });\r\n    }\r\n    else{\r\n      dialog.style.display = 'none';\r\n      this.isAddEditLinkDialogOpen = false;\r\n    }\r\n  }\r\n  openLink(){\r\n    if(this.currentLinkElement){\r\n      window.open(this.currentLinkElement.getAttribute('href') ?? '', '_blank');\r\n    }\r\n  }\r\n  unLink(){\r\n    if(this.currentLinkElement && this.currentLinkElement.textContent){\r\n      const text = document.createTextNode(this.currentLinkElement.textContent);\r\n      this.currentLinkElement.replaceWith(text);\r\n      this.currentLinkElement = undefined;\r\n      this.setCursorPositionAfter(text, false);\r\n      this.showLinkPopup(false);\r\n     this.emitChange();\r\n    }\r\n  }\r\n  copyLink(){\r\n    if(this.currentLinkElement){\r\n      const link = this.currentLinkElement.getAttribute('href') ?? '';\r\n      navigator.clipboard.writeText(link);\r\n      this.copySelected = true;\r\n      setTimeout(() => this.copySelected = false, 500);\r\n    }\r\n  }\r\n  removeLink(){\r\n    if(this.currentLinkElement){\r\n      this.onRemoveLinkLeave();\r\n      const space = document.createTextNode('\\u200B');\r\n      this.currentLinkElement.replaceWith(space);\r\n      this.setCursorPositionAfter(space, false);\r\n      this.currentLinkElement = undefined;\r\n      this.showLinkPopup(false);\r\n      this.emitChange();\r\n    }\r\n  }\r\n  private addLink(link: string, text: string){\r\n    this.restoreCaretPosition();\r\n    const replacedText = `<a href=\"${link}\" target=\"_blank\" rel=\"noopener noreferrer\">${text}</a>`; //target=\"_blank\" rel=\"noopener noreferrer\"\r\n    if(this.currentTextStyleElement){\r\n      const elem = this.createElementFromString(replacedText) as HTMLElement;\r\n      this.addElement(elem, this.currentTextStyleElement);\r\n      this.setCursorPositionAfter(elem, false);\r\n    }\r\n    else{\r\n      const elem = this.createElementFromString(`<p>${replacedText}</p>`) as HTMLElement;\r\n      this.addElement(elem, this.editor.nativeElement);\r\n      this.setCursorPositionAfter(elem, false);\r\n    }\r\n    this.traverseTheDOM(true);\r\n    this.emitChange();\r\n  }\r\n  onSubmitLink(link: Link){\r\n    if(this.linkMode === 'Add'){\r\n      this.addLink(link.link, link.text);\r\n    }\r\n    else if(this.currentLinkElement){\r\n      this.currentLinkElement.setAttribute('href', link.link);\r\n      this.currentLinkElement.textContent = link.text;\r\n      this.setCursorPositionAfter(this.currentLinkElement, false);\r\n      this.emitChange();\r\n    }\r\n    this.showAddEditLink(false, 'Add');\r\n  }\r\n  onRemoveLinkEnter(){\r\n    if(this.currentLinkElement && !this.currentLinkElement.classList.contains('remove')){\r\n      this.currentLinkElement.classList.add('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-link');\r\n      if(button){\r\n        button.children[0].classList.add('remove-button');\r\n      }\r\n    }\r\n  }\r\n  onRemoveLinkLeave(){\r\n    if(this.currentLinkElement && this.currentLinkElement.classList.contains('remove')){\r\n      this.currentLinkElement.classList.remove('remove');\r\n      const button = this.el.nativeElement.querySelector('#remove-button-link');\r\n      if(button){\r\n        button.children[0].classList.remove('remove-button');\r\n      }\r\n    }\r\n  }\r\n  triggerLink(){\r\n    this.showAddEditLink(true, 'Add');\r\n  }\r\n\r\n   \r\n  // MENTION PART\r\n  private isMentionDropdownOpen = false;\r\n  filteredUsers: any[] = [];\r\n  private searchUserText = '';\r\n  private enteredUser:any;\r\n  get mentionDisabled(){\r\n    if(this.currentImageElement || this.currentCodeElement || this.currentLinkElement){\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n  onMentionClick(){\r\n    this.restoreCaretPosition();\r\n    const event = new InputEvent('customInput',{\r\n      inputType: 'insertText',\r\n      data: '@',\r\n      bubbles: true,\r\n      cancelable: true,\r\n    });\r\n    this.onInput(event);\r\n  }\r\n  onMouseEnter(enteredUser:any){\r\n    if(equal(enteredUser, this.enteredUser)) return;\r\n    this.enteredUser = enteredUser;\r\n    this.filteredUsers = this.filteredUsers.map(user =>{\r\n      return{\r\n        ...user,\r\n        isMouseEntered : user.id === enteredUser.id,\r\n      }\r\n    });\r\n  }\r\n  onSelectUser(user:any){\r\n    if(this.isMentionDropdownOpen){\r\n      const tag = this.el.nativeElement.querySelector('.universal-tag');\r\n      if(tag){\r\n        const newElement = document.createElement('span');\r\n        newElement.className = user.id === this.config.currentUserId ? 'universal-editor-tag universal-editor-tag-selected' : 'universal-editor-tag';\r\n        newElement.setAttribute('user-id', user.id.toString());\r\n        newElement.setAttribute('contenteditable', 'false');\r\n        newElement.textContent = `@${user.firstName} ${user.lastName}`;\r\n\r\n        tag.replaceWith(newElement);\r\n        const space = document.createTextNode('\\u00A0');\r\n        const parentNode = newElement.parentNode;\r\n        if(parentNode){\r\n          parentNode.insertBefore(space, newElement.nextSibling);\r\n        }\r\n        this.setCursorPositionAfter(space, false);\r\n\r\n        this.closeMentionDropdown();\r\n       this.emitChange();\r\n      }\r\n    }\r\n  }\r\n  private onCancelSelectUser(remove: boolean){\r\n    if(this.isMentionDropdownOpen){\r\n      const tag = this.el.nativeElement.querySelector('.universal-tag');\r\n      if(tag){\r\n        const newElement = document.createTextNode(remove ? '' : tag.textContent);\r\n        tag.replaceWith(newElement);\r\n        this.setCursorPositionAfter(newElement, false);\r\n      }\r\n      this.closeMentionDropdown();\r\n    }\r\n  }\r\n  private getCaretCoordinates() {\r\n    const selection = window.getSelection();\r\n    if (!selection || !selection.rangeCount) return { x: 0, y: 0 };\r\n  \r\n    const range = selection.getRangeAt(0).cloneRange();\r\n    const dummySpan = document.createElement('span');\r\n    dummySpan.appendChild(document.createTextNode('\\u200B')); // Zero-width space\r\n    range.insertNode(dummySpan);\r\n    range.collapse(true);\r\n  \r\n    const rect = dummySpan.getBoundingClientRect();\r\n    const coordinates = { x: rect.left, y: rect.top };\r\n    \r\n    const parent = dummySpan.parentNode;\r\n    if(parent){\r\n      dummySpan.parentNode.removeChild(dummySpan);\r\n    }\r\n    return coordinates;\r\n  }\r\n  private openMentionDropdown(x: number, y: number) {\r\n    const dropdown = this.el.nativeElement.querySelector('.universal-editor-mention');\r\n    const backdrop = this.el.nativeElement.querySelector('.universal-editor-mention-backdrop');\r\n\r\n    dropdown.style.display = 'block';\r\n    backdrop.style.display = 'block';\r\n    this.isMentionDropdownOpen = true;\r\n    this.searchUserText = '';\r\n    this.filterUsers();\r\n\r\n    setTimeout(() => {\r\n      const dropdownHeight = dropdown.clientHeight;\r\n      const dropdownWidth = dropdown.offsetWidth;\r\n      const rightWidth = window.innerWidth - x;\r\n      //console.log(x, y, dropdownHeight, dropdownWidth, rightWidth);\r\n\r\n      if(this.config.mentionPosition === 'auto'){\r\n        if(y > dropdownHeight){\r\n          dropdown.style.top = `${y - 10 - dropdownHeight}px`;\r\n        }\r\n        else{\r\n          dropdown.style.top = `${y + 30}px`;\r\n        }    \r\n      }else if(this.config.mentionPosition === 'below'){\r\n        dropdown.style.top = `${y + 30}px`;\r\n      }else{\r\n        dropdown.style.top = `${y - 10 - dropdownHeight}px`;\r\n      }\r\n      if(rightWidth > dropdownWidth){\r\n        dropdown.style.left = `${x}px`;\r\n      }\r\n      else{\r\n        dropdown.style.left = `${x - (dropdownWidth - rightWidth)}px`;\r\n      }\r\n    });\r\n    \r\n    \r\n  }\r\n  private closeMentionDropdown() {\r\n    const dropdown = this.el.nativeElement.querySelector('.universal-editor-mention');\r\n    const backdrop = this.el.nativeElement.querySelector('.universal-editor-mention-backdrop');\r\n    dropdown.style.display = 'none';\r\n    backdrop.style.display = 'none';\r\n    this.isMentionDropdownOpen = false;\r\n  }\r\n  private filterUsers() {\r\n    if (!this.searchUserText) {\r\n      this.filteredUsers = this.mentionUsers.map((user, index) =>{\r\n        return {\r\n          ...user,\r\n          isMouseEntered : index === 0,\r\n          index: index,\r\n        }\r\n      });    \r\n    }\r\n    else{\r\n      const searchLowerCase = this.searchUserText.trim().toLowerCase();\r\n\r\n      this.filteredUsers = this.mentionUsers.filter(user =>{\r\n        const fullName = user.firstName + ' ' + user.lastName;\r\n\r\n        return user.firstName?.toLowerCase().includes(searchLowerCase) ||\r\n        user.lastName?.toLowerCase().includes(searchLowerCase) ||\r\n        fullName.toLowerCase().includes(searchLowerCase) ||\r\n        user.email?.toLowerCase().includes(searchLowerCase)\r\n      }).map((user, index) =>{\r\n        return {\r\n          ...user,\r\n          isMouseEntered : index === 0,\r\n          index: index,\r\n        }\r\n      });\r\n      \r\n    }\r\n    if(this.filteredUsers.length > 0){\r\n      this.enteredUser = this.filteredUsers[0];\r\n    }\r\n    else{\r\n      this.enteredUser = null;\r\n    }\r\n\r\n    \r\n    if(this.isMentionDropdownOpen){\r\n      setTimeout(() => {\r\n        const coords = this.getCaretCoordinates();\r\n        if(coords.x === 0 || coords.y === 0){\r\n          return;\r\n        }\r\n        const dropdown = this.el.nativeElement.querySelector('.universal-editor-mention');\r\n        const dropdownHeight = dropdown.clientHeight;\r\n        const dropdownWidth = dropdown.offsetWidth;\r\n        const rightWidth = window.innerWidth - coords.x;\r\n        //console.log(coords.x, coords.y, dropdownHeight, dropdownWidth, rightWidth)\r\n        if(this.config.mentionPosition === 'auto'){\r\n          if(coords.y > dropdownHeight){\r\n            dropdown.style.top = `${coords.y - 10 - dropdownHeight}px`;\r\n          }\r\n          else{\r\n            dropdown.style.top = `${coords.y + 30}px`;\r\n          }\r\n          \r\n        }else if(this.config.mentionPosition === 'below'){\r\n          dropdown.style.top = `${coords.y + 30}px`;\r\n        }else{\r\n          dropdown.style.top = `${coords.y - 10 - dropdownHeight}px`;\r\n        }\r\n        if(rightWidth > dropdownWidth){\r\n          dropdown.style.left = `${coords.x}px`;\r\n        }\r\n        else{\r\n          dropdown.style.left = `${coords.x - (dropdownWidth - rightWidth)}px`;\r\n        }\r\n      }, 5);\r\n    }\r\n    \r\n    \r\n\r\n\r\n  }\r\n  private setCurrentUserClass(toAdd:boolean){\r\n    if(this.config.currentUserId.toString()){\r\n      const currentUsers = document.querySelectorAll(`[user-id=\"${this.config.currentUserId}\"]`);\r\n      currentUsers.forEach(element => {\r\n        if(toAdd){\r\n          element.classList.add('universal-editor-tag-selected');\r\n        }\r\n        else{\r\n          element.classList.remove('universal-editor-tag-selected');\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n}\r\n\r\n\r\n","<div class=\"universal-editor\"\r\n[style.--background-color]=\"darkMode ? '#2F353B' : 'white'\"\r\n[style.--background-header-color]=\"darkMode ? '#1B1F23' : 'white'\"\r\n[style.--border-color]=\"darkMode ? '#454F59' : '#8692A6'\" \r\n[style.--text-color]=\"darkMode ? '#B6C2CF' : 'black'\" \r\n[style.--text-color-disabled]=\"darkMode ? 'black' : '#B6C2CF'\" \r\n[style.--button-hover-color]=\"darkMode ? '#56595c' : 'lightgray'\" \r\n[style.--button-active-color]=\"darkMode ? '#3681EB' : 'lightblue'\" \r\n[style.--button-active-hover-color]=\"darkMode ? '#2666BF' : '#6DCAE8'\"  \r\n[style.--universal-tag-color]=\"darkMode ? '#3681EB' : 'blue'\" \r\n[style.--tooltip-color]=\"darkMode ? 'lightgray' : 'gray'\" \r\n[style.--tooltip-hover-color]=\"darkMode ? 'gray' : 'lightgray'\" \r\n[style.--tooltip-text-color]=\"darkMode ? '#2e2d2d' : 'white'\" \r\n[style.--background-file-widget-color]=\"darkMode ? '#22272B' : '#091E420F'\"\r\n[style.--background-code-color]=\"darkMode ? '#1B1F23' : '#091E420F'\"\r\n[style.--background-table-header-color]=\"darkMode ? '#22272B' : '#F4F2F2'\"\r\n\r\n>\r\n    <div class=\"universal-editor-header\" *ngIf=\"config.showToolbar && config.editMode\">\r\n        <text-styles\r\n        [disabled]=\"textStyleDisabled\"\r\n        *ngIf=\"config.enableTextStyles\"\r\n        #textStyles\r\n        (onStyleChange)=\"onStyleChange($event)\"\r\n        [darkMode]=\"darkMode\"\r\n        [editorWidth$]=\"editorWidth$\"\r\n        ></text-styles>\r\n\r\n        <vertical-line></vertical-line>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableBold\"\r\n        [isDisabled]=\"boldDisabled\"\r\n        [isSelected]=\"isBold\"\r\n        tooltip=\"Bold Ctrl+B\"\r\n        (click)=\"onSelectBold()\"\r\n        ><icon icon=\"bold\" [color]=\"darkMode ? (boldDisabled ? 'black' : '#B6C2CF') : (boldDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableItalic\"\r\n        [isDisabled]=\"italicDisabled\"\r\n        tooltip=\"Italic Ctrl+I\"\r\n        [isSelected]=\"isItalic\"\r\n        (click)=\"onSelectItalic()\"\r\n        ><icon icon=\"italic\" [color]=\"darkMode ? (italicDisabled ? 'black' : '#B6C2CF') : (italicDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableUnderline && editorWidth >= editorWidthM\"\r\n        [isDisabled]=\"underlineDisabled\"\r\n        tooltip=\"Underline Ctrl+U\"\r\n        [isSelected]=\"isUnderline\"\r\n        (click)=\"onSelectUnderline()\"\r\n        ><icon icon=\"underline\" [color]=\"darkMode ? (underlineDisabled ? 'black' : '#B6C2CF') : (underlineDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableStrikethrough && editorWidth >= editorWidthM\"\r\n        [isDisabled]=\"strikethroughDisabled\"\r\n        tooltip=\"Strikethrough Ctrl+Shift+S\"\r\n        [isSelected]=\"isStrikethrough\"\r\n        (click)=\"onSelectStrikethrough()\"\r\n        ><icon icon=\"strikethrough\" [color]=\"darkMode ? (strikethroughDisabled ? 'black' : '#B6C2CF') : (strikethroughDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableSubscript && editorWidth >= editorWidthM\"\r\n        [isDisabled]=\"subscriptDisabled\"\r\n        tooltip=\"Subscript Ctrl+Shift+,\"\r\n        [isSelected]=\"isSubscript\"\r\n        (click)=\"onSelectSubscript()\"\r\n        ><icon icon=\"subscript\" [color]=\"darkMode ? (subscriptDisabled ? 'black' : '#B6C2CF') : (subscriptDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableSuperscript && editorWidth >= editorWidthM\"\r\n        [isDisabled]=\"superscriptDisabled\"\r\n        tooltip=\"Superscript Ctrl+Shift+.\"\r\n        [isSelected]=\"isSuperscript\"\r\n        (click)=\"onSelectSuperscript()\"\r\n        ><icon icon=\"superscript\" [color]=\"darkMode ? (superscriptDisabled ? 'black' : '#B6C2CF') : (superscriptDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableClearFormatting && editorWidth >= editorWidthM\"\r\n        [isDisabled]=\"clearFormattingDisabled\"\r\n        tooltip=\"Clear formatting Ctrl+\\\"\r\n        (click)=\"onClearFormatting()\"\r\n        ><icon icon=\"format-clear\" [color]=\"darkMode ? (clearFormattingDisabled ? 'black' : '#B6C2CF') : (clearFormattingDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <more-format\r\n        *ngIf=\"editorWidth < editorWidthM\"\r\n        (onFormat)=\"onFormat($event)\"\r\n        [darkMode]=\"darkMode\"\r\n        [isUnderline]=\"isUnderline\"\r\n        [isStrikethrough]=\"isStrikethrough\"\r\n        [isSubscript]=\"isSubscript\"\r\n        [isSuperscript]=\"isSuperscript\"\r\n\r\n        [enableUnderline]=\"config.enableUnderline\"\r\n        [enableStrikethrough]=\"config.enableStrikethrough\"\r\n        [enableSubscript]=\"config.enableSubscript\"\r\n        [enableSuperscript]=\"config.enableSuperscript\"\r\n        [enableClearFormatting]=\"config.enableClearFormatting\"\r\n\r\n\r\n        [underlineDisabled]=\"underlineDisabled\"\r\n        [strikethroughDisabled]=\"strikethroughDisabled\"\r\n        [subscriptDisabled]=\"subscriptDisabled\"\r\n        [superscriptDisabled]=\"superscriptDisabled\"\r\n        [clearFormattingDisabled]=\"clearFormattingDisabled\"\r\n        ></more-format>\r\n\r\n        <vertical-line></vertical-line>\r\n\r\n        <text-color\r\n        #textColor\r\n        *ngIf=\"config.enableTextColor\"\r\n        [disabled]=\"textColorDisabled\"\r\n        [colors]=\"textColors\"\r\n        (onColorChange)=\"onTextColorChange($event)\"\r\n        [defaultColorName]=\"config.defaultTextColor\"\r\n        [darkMode]=\"darkMode\"\r\n        ></text-color>\r\n\r\n        <vertical-line></vertical-line>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableBulletList\"\r\n        [isDisabled]=\"bulletListDisabled\"\r\n        tooltip=\"Bullet list Ctrl+Shift+8\"\r\n        [isSelected]=\"isBulletList\"\r\n        (click)=\"onBulletListClick()\"\r\n        ><icon icon=\"bullet-list\" [color]=\"darkMode ? (bulletListDisabled ? 'black' : '#B6C2CF') : (bulletListDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableNumberedList\"\r\n        [isDisabled]=\"numberedListDisabled\"\r\n        tooltip=\"Numbered list Ctrl+Shift+7\"\r\n        [isSelected]=\"isNumberedList\"\r\n        (click)=\"onNumberedListClick()\"\r\n        ><icon icon=\"number-list\" [color]=\"darkMode ? (numberedListDisabled ? 'black' : '#B6C2CF') : (numberedListDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableTable\"\r\n        [isDisabled]=\"tableDisabled\"\r\n        tooltip=\"Table Shift+Alt+T\"\r\n        (click)=\"addTable()\"\r\n        ><icon icon=\"table\" [color]=\"darkMode ? (tableDisabled ? 'black' : '#B6C2CF') : (tableDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n        \r\n        <vertical-line></vertical-line>\r\n\r\n        <universal-button \r\n        class=\"mention-button\"\r\n        *ngIf=\"config.enableMention && editorWidth >= editorWidthS\"\r\n        [isDisabled]=\"mentionDisabled\"\r\n        tooltip=\"Mention @\"\r\n        (click)=\"onMentionClick()\"\r\n        ><icon icon=\"mention\" [color]=\"darkMode ? (mentionDisabled ? 'black' : '#B6C2CF') : (mentionDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button> \r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableLink && editorWidth >= editorWidthS\"\r\n        [isDisabled]=\"linkDisabled\"\r\n        tooltip=\"Link Ctrl+K\"\r\n        (click)=\"showAddEditLink(true, 'Add')\"\r\n        ><icon icon=\"link\" [color]=\"darkMode ? (linkDisabled ? 'black' : '#B6C2CF') : (linkDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button> \r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableFile && editorWidth >= editorWidthS\"\r\n        [isDisabled]=\"fileDisabled\"\r\n        tooltip=\"Insert image or file\"\r\n        (click)=\"uploadFile()\"\r\n        ><icon icon=\"file\" [color]=\"darkMode ? (fileDisabled ? 'black' : '#B6C2CF') : (fileDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button> \r\n\r\n        <universal-button \r\n        *ngIf=\"config.enableCode && editorWidth >= editorWidthS\"\r\n        [isDisabled]=\"codeDisabled\"\r\n        tooltip=\"Insert code snippet\"\r\n        (click)=\"addCode('\\u00A0')\"\r\n        ><icon icon=\"code\" [color]=\"darkMode ? (codeDisabled ? 'black' : '#B6C2CF') : (codeDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        class=\"table-button\"\r\n        *ngIf=\"config.enableDate && editorWidth >= editorWidthS\"\r\n        [isDisabled]=\"dateDisabled\"\r\n        tooltip=\"Insert date\"\r\n        (click)=\"addDate()\"\r\n        ><icon icon=\"date\" [color]=\"darkMode ? (dateDisabled ? 'black' : '#B6C2CF') : (dateDisabled ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button>\r\n\r\n        <!-- <universal-button \r\n        *ngIf=\"true && editorWidth >= editorWidthS\"\r\n        [isDisabled]=\"true\"\r\n        tooltip=\"Insert info widget\"\r\n        ><icon icon=\"info\" [color]=\"darkMode ? (true ? 'black' : '#B6C2CF') : (true ? '#B6C2CF' : 'black')\"></icon>\r\n        </universal-button> -->\r\n\r\n        <more-options\r\n        *ngIf=\"editorWidth < editorWidthS\"\r\n        (onOptions)=\"onOptions($event)\"\r\n        [darkMode]=\"darkMode\"\r\n\r\n        [enableMention]=\"config.enableMention\"\r\n        [enableLink]=\"config.enableLink\"\r\n        [enableFile]=\"config.enableFile\"\r\n        [enableCode]=\"config.enableCode\"\r\n        [enableDate]=\"config.enableDate\"\r\n\r\n        [mentionDisabled]=\"mentionDisabled\"\r\n        [linkDisabled]=\"linkDisabled\"\r\n        [fileDisabled]=\"fileDisabled\"\r\n        [codeDisabled]=\"codeDisabled\"\r\n        [dateDisabled]=\"dateDisabled\"\r\n        ></more-options>\r\n    </div>\r\n\r\n\r\n    <div #editor  \r\n        class=\"universal-editor-content\"\r\n        [style.border-bottom]=\"files.length > 0 ? 'none' : ''\"\r\n        [style.border-bottom-right-radius]=\"files.length > 0 ? '' : '8px'\"\r\n        [style.border-bottom-left-radius]=\"files.length > 0 ? '' : '8px'\"\r\n        [style.border-top-left-radius]=\"config.showToolbar && config.editMode ? '' : '8px'\"\r\n        [style.border-top-right-radius]=\"config.showToolbar && config.editMode ? '' : '8px'\"\r\n        [attr.contenteditable]=\"config.editMode\"\r\n        [attr.placeholderValue]=\"config.editMode ? config.placeholderText : ''\"\r\n        [innerHTML]=\"innerHtml\"\r\n        (focusout)=\"saveCaretPosition()\"\r\n        (input)=\"onInput($event)\"\r\n        (keydown)=\"onKeydown($event)\"\r\n        (paste)=\"handlePaste($event)\"\r\n    >\r\n    </div>\r\n\r\n    <div class=\"universal-editor-files\" *ngIf=\"files.length > 0\">   \r\n        <file-widget *ngFor=\"let file of files\" \r\n            [darkMode]=\"darkMode\" \r\n            [file]=\"file\" \r\n            [editMode]=\"config.editMode\" \r\n            (onRemoveFile)=\"removeFile($event)\"\r\n        >\r\n        </file-widget>\r\n    </div>\r\n        \r\n\r\n\r\n    <div class=\"universal-editor-mention-backdrop\" *ngIf=\"config.enableMention && config.editMode\"></div>\r\n    <div class=\"universal-editor-mention\" *ngIf=\"config.enableMention && config.editMode\">\r\n        <div *ngFor=\"let user of filteredUsers\">\r\n            <mention-user \r\n                [user]=\"user\"\r\n                (click)=\"onSelectUser(user)\"\r\n                (mouseenter)=\"onMouseEnter(user)\"\r\n                >\r\n            </mention-user>\r\n        </div>\r\n        <div *ngIf=\"filteredUsers.length === 0\">\r\n            <mention-user></mention-user>\r\n        </div>    \r\n    </div>\r\n\r\n\r\n    <div class=\"universal-editor-popup universal-editor-link\" *ngIf=\"config.enableLink && config.editMode\">\r\n        <universal-button \r\n        *ngIf=\"config.editMode\"\r\n        tooltip=\"Edit link\"\r\n        (click)=\"showAddEditLink(true, 'Edit')\"\r\n        ><icon icon=\"edit\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        tooltip=\"Open link in a new tab\"\r\n        (click)=\"openLink()\"\r\n        ><icon icon=\"open-link\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.editMode\"\r\n        tooltip=\"Unlink\"\r\n        (click)=\"unLink()\"\r\n        ><icon icon=\"unlink\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        [isSelected]=\"copySelected\"\r\n        tooltip=\"Copy Link\"\r\n        (click)=\"copyLink()\"\r\n        ><icon icon=\"copy\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        *ngIf=\"config.editMode\"\r\n        id=\"remove-button-link\"\r\n        tooltip=\"Remove\"\r\n        (click)=\"removeLink()\"\r\n        (mouseenter)=\"onRemoveLinkEnter()\"\r\n        (mouseleave)=\"onRemoveLinkLeave()\"\r\n        ><icon icon=\"remove\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n    </div>\r\n    <div class=\"universal-editor-popup-edit universal-editor-link-edit\" *ngIf=\"config.enableLink && config.editMode\">\r\n        <edit-link\r\n        [data]=\"linkData\" \r\n        [link$]=\"link$\"\r\n        (onCancelLink)=\"showAddEditLink(false, 'Add')\"\r\n        (onSubmitLink)=\"onSubmitLink($event)\"\r\n        ></edit-link>\r\n    </div>\r\n\r\n    \r\n    <div class=\"img-wrapper-sizer\" (mousedown)=\"resizeImage($event)\" *ngIf=\"config.enableFile && config.editMode\">\r\n        <div class=\"img-wrapper-sizer-visual\"></div>\r\n    </div>\r\n    <div class=\"universal-editor-popup universal-editor-img\" *ngIf=\"config.enableFile && config.editMode\">\r\n        <universal-button \r\n        tooltip=\"Edit alt text\"\r\n        (click)=\"showAddEditAltText(true)\"\r\n        ><icon icon=\"alt-text\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        [isSelected]=\"copySelected\"\r\n        tooltip=\"Copy Image\"\r\n        (click)=\"copyImage()\"\r\n        ><icon icon=\"copy\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        id=\"remove-button-img\"\r\n        tooltip=\"Remove\"\r\n        (click)=\"removeFile()\"\r\n        (mouseenter)=\"onRemoveImgEnter()\"\r\n        (mouseleave)=\"onRemoveImgLeave()\"\r\n        ><icon icon=\"remove\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n    </div>\r\n    <div class=\"universal-editor-popup-edit universal-editor-altText-edit\" *ngIf=\"config.enableFile && config.editMode\">\r\n        <alt-text-img\r\n        [data]=\"altText\" \r\n        [altText$]=\"altText$\"\r\n        (onCancelAltText)=\"showAddEditAltText(false)\"\r\n        (onSubmitAltText)=\"onSubmitAltText($event)\"\r\n        ></alt-text-img>\r\n    </div>\r\n\r\n    \r\n    <div class=\"universal-editor-popup universal-editor-code\" *ngIf=\"config.enableCode && config.editMode\">\r\n        <universal-button\r\n        *ngIf=\"!isExpandedCode\"\r\n        tooltip=\"Expand to edit\"\r\n        (click)=\"expandCollapseCode(true)\"\r\n        ><icon icon=\"unfold-more\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <universal-button \r\n        *ngIf=\"isExpandedCode\"\r\n        tooltip=\"Collapse\"\r\n        (click)=\"expandCollapseCode(false)\"\r\n        ><icon icon=\"unfold-less\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        [isSelected]=\"copySelected\"\r\n        tooltip=\"Copy code\"\r\n        (click)=\"copyCode()\"\r\n        ><icon icon=\"copy\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        id=\"remove-button-code\"\r\n        tooltip=\"Remove\"\r\n        (click)=\"removeCode()\"\r\n        (mouseenter)=\"onRemoveCodeEnter()\"\r\n        (mouseleave)=\"onRemoveCodeLeave()\"\r\n        ><icon icon=\"remove\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n    </div>\r\n\r\n\r\n    <div class=\"universal-editor-popup universal-editor-table\" *ngIf=\"config.enableTable && config.editMode\">\r\n\r\n        <universal-button \r\n        tooltip=\"Insert column right\"\r\n        (click)=\"insertColumn()\"\r\n        (mouseenter)=\"onInsertColumnEnter()\"\r\n        (mouseleave)=\"onInsertColumnLeave()\"\r\n        ><icon icon=\"insert-column\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        tooltip=\"Insert row below\"\r\n        (click)=\"insertRow()\"\r\n        (mouseenter)=\"onInsertRowEnter()\"\r\n        (mouseleave)=\"onInsertRowLeave()\"\r\n        ><icon icon=\"insert-row\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        id=\"remove-button-column\"\r\n        tooltip=\"Remove column\"\r\n        (click)=\"removeColumn()\"\r\n        (mouseenter)=\"onRemoveColumnEnter()\"\r\n        (mouseleave)=\"onRemoveColumnLeave()\"\r\n        ><icon icon=\"remove-column\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        id=\"remove-button-row\"\r\n        tooltip=\"Remove row\"\r\n        (click)=\"removeRow()\"\r\n        (mouseenter)=\"onRemoveRowEnter()\"\r\n        (mouseleave)=\"onRemoveRowLeave()\"\r\n        ><icon icon=\"remove-row\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        id=\"remove-button-cell\"\r\n        tooltip=\"Clear cell\"\r\n        (click)=\"clearCell()\"\r\n        (mouseenter)=\"onRemoveCellEnter()\"\r\n        (mouseleave)=\"onRemoveCellLeave()\"\r\n        ><icon icon=\"backspace\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n\r\n        <vertical-line height=\"15px\"></vertical-line>\r\n\r\n        <universal-button \r\n        id=\"remove-button-table\"\r\n        tooltip=\"Remove\"\r\n        (click)=\"removeTable()\"\r\n        (mouseenter)=\"onRemoveTableEnter()\"\r\n        (mouseleave)=\"onRemoveTableLeave()\"\r\n        ><icon icon=\"remove\" [color]=\"darkMode ? '#B6C2CF' : 'black'\"></icon>\r\n        </universal-button>\r\n    </div>\r\n\r\n\r\n    <datepicker class=\"universal-editor-datepicker\" *ngIf=\"config.enableDate && config.editMode\"\r\n        [darkMode]=\"darkMode\"\r\n        [currentDate$]=\"currentDate$\"\r\n        (onSelectDate)=\"onSelectDate($event)\"\r\n    >\r\n    </datepicker>\r\n\r\n    \r\n\r\n</div>\r\n\r\n","import { NgModule } from '@angular/core';\nimport { AngularUniversalEditorComponent } from './angular-universal-editor.component';\nimport { AltTextImgComponent } from './components/alt-text-img/alt-text-img.component';\nimport { ButtonComponent } from './components/button/button.component';\nimport { DatepickerComponent } from './components/datepicker/datepicker.component';\nimport { EditLinkComponent } from './components/edit-link/edit-link.component';\nimport { FileWidgetComponent } from './components/file-widget/file-widget.component';\nimport { IconComponent } from './components/icon/icon.component';\nimport { MentionUserComponent } from './components/mention-user/mention-user.component';\nimport { MoreFormatComponent } from './components/more-format/more-format.component';\nimport { MoreOptionsComponent } from './components/more-options/more-options.component';\nimport { TextColorTileComponent } from './components/text-color/text-color-tile/text-color-tile.component';\nimport { TextColorComponent } from './components/text-color/text-color.component';\nimport { TextStylesComponent } from './components/text-styles/text-styles.component';\nimport { VerticalLineComponent } from './components/vertical-line/vertical-line.component';\nimport { TooltipDirective } from './shared/tooltip.directive';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n\n@NgModule({\n  declarations: [\n    AngularUniversalEditorComponent,\n    MentionUserComponent,\n    TextStylesComponent,\n    ButtonComponent,\n    TooltipDirective,\n    VerticalLineComponent,\n    TextColorComponent,\n    TextColorTileComponent,\n    EditLinkComponent,\n    FileWidgetComponent,\n    AltTextImgComponent,\n    IconComponent,\n    MoreFormatComponent,\n    MoreOptionsComponent,\n    DatepickerComponent\n  ],\n  imports: [\n    CommonModule,\n    ReactiveFormsModule\n  ],\n  exports: [\n    AngularUniversalEditorComponent\n  ]\n})\nexport class AngularUniversalEditorModule { }\n","/*\n * Public API Surface of angular-universal-editor\n */\n\nexport * from './lib/angular-universal-editor.component';\nexport * from './lib/angular-universal-editor-api';\nexport * from './lib/angular-universal-editor-config';\nexport * from './lib/angular-universal-editor-mention-user';\nexport * from './lib/angular-universal-editor.component';\nexport * from './lib/angular-universal-editor.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TooltipDirective","i3.IconComponent","i1.ButtonComponent","i2.ButtonComponent","i3.TextColorTileComponent","i1","i2.MentionUserComponent","i3.TextStylesComponent","i4.ButtonComponent","i5.VerticalLineComponent","i6.TextColorComponent","i7.EditLinkComponent","i8.FileWidgetComponent","i9.AltTextImgComponent","i10.IconComponent","i11.MoreFormatComponent","i12.MoreOptionsComponent","i13.DatepickerComponent"],"mappings":"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"}