{"version":3,"file":"annuadvent-ngx-cms-content-editor.mjs","sources":["../../../projects/ngx-cms/content-editor/src/constants/content-editor.constants.ts","../../../projects/ngx-cms/content-editor/src/services/selection.service.ts","../../../projects/ngx-cms/content-editor/src/constants/table.constants.ts","../../../projects/ngx-cms/content-editor/src/services/content-editor.service.ts","../../../projects/ngx-cms/content-editor/src/directives/contenteditable-value-accessor.directive.ts","../../../projects/ngx-cms/content-editor/src/directives/focus.directive.ts","../../../projects/ngx-cms/content-editor/src/directives/format-inline.directive.ts","../../../projects/ngx-cms/content-editor/src/services/table.service.ts","../../../projects/ngx-cms/content-editor/src/components/table-form/table-form.component.ts","../../../projects/ngx-cms/content-editor/src/components/table-form/table-form.component.html","../../../projects/ngx-cms/content-editor/src/components/table/table.component.ts","../../../projects/ngx-cms/content-editor/src/components/table/table.component.html","../../../projects/ngx-cms/content-editor/src/components/leaf-element/leaf-element.component.ts","../../../projects/ngx-cms/content-editor/src/components/leaf-element/leaf-element.component.html","../../../projects/ngx-cms/content-editor/src/components/content-element/content-element.component.ts","../../../projects/ngx-cms/content-editor/src/components/content-element/content-element.component.html","../../../projects/ngx-cms/content-editor/src/components/content-editor/content-editor.component.ts","../../../projects/ngx-cms/content-editor/src/components/content-editor/content-editor.component.html","../../../projects/ngx-cms/content-editor/src/content-editor.module.ts","../../../projects/ngx-cms/content-editor/src/services/html2json.service.ts","../../../projects/ngx-cms/content-editor/annuadvent-ngx-cms-content-editor.ts"],"sourcesContent":["import { ToolbarItem } from '@annuadvent/ngx-common-ui/toolbar';\r\nimport { EditorElement } from '../interfaces/content-editor.interface';\r\n\r\nexport enum SUPPORTED_TAGS {\r\n  H1 = 'h1',\r\n  H2 = 'h2',\r\n  H3 = 'h3',\r\n  H4 = 'h4',\r\n  H5 = 'h5',\r\n  H6 = 'h6',\r\n  IMAGE = 'img',\r\n  PARAGRAPH = 'p',\r\n  CODE_BLOCK = 'anu-code-block',\r\n  LIST_ITEM = 'li',\r\n  ORDERED_LIST = 'ol',\r\n  UNORDERED_LIST = 'ul',\r\n  ARTICLE = 'article',\r\n  DIV = 'div',\r\n  TABLE = 'anu-table',\r\n}\r\n\r\nexport const EDITOR_ROOT_ELEMENT: EditorElement = {\r\n  name: 'root',\r\n  tagName: 'div',\r\n  isContainer: true,\r\n  children: [\r\n    {\r\n      name: 'h2-1234',\r\n      tagName: 'h2',\r\n      data: {\r\n        text: 'Example heading text',\r\n      },\r\n    },\r\n    {\r\n      name: 'p-1234',\r\n      tagName: 'p',\r\n      data: {\r\n        text: 'Example description text',\r\n      },\r\n    },\r\n  ],\r\n};\r\n\r\nexport const TOOLBAR_FORMATTING: Array<ToolbarItem> = [\r\n  {\r\n    name: 'link',\r\n    title: 'Hyperlink',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABFZJREFUaEPtmHnoZmMUxz+jsW+DTNnJmr2GyBIRkS1GIiRqUBNiCGWL4g9rsiQKZUlD9hFDSZMsf6BhBtmyZons2fXhPHrcuet7f83br+755+2993nOc77P+Z7tTmGSy5RJbj8DgHF7cPDA4IGeNzBQqOcF9t4+bg9MBbYB1gd+Bz4C3gL+aItsXAA2Bc4FjgJWLxj7JXAvcCXwcROQcQA4E7gCWL7BuO+B04A769ZNNIA1gWWBL4C/Sg6+CpiTPXfNa8AHAWgGML2w72zg6ioQfQEsEzQ4DtgHWDEOks/PA/cDtwE/A9cA3n6Su4ELgfezZ+o7KNZuFs8FeQDwVBmIPgC2Bu4Bdmiggjx+CTgiM+gs4LqafWsATwC7xJp3ga0i0P+3bVQA+8XtrpZpkzZvxP8tgPVKDPQ25fWNTcEJrAssBtIZRwIPFPeNAmB/4GFghVCm0fJUF/+ZHbBHZBNTZJLrgTNaGJ+WXA6cH3/uAo7vC0DjH8q4rptNhT+UGFXkvEveCyr81hKEFHoh1i4Etu8DoGj848BM4JcSY8zhekWRNsbBBvH/JOD2lgDWjozm8k+i4I0UA12MPxW4OTNezr8JPB3PHgMOaQlgo0ixLrdCG8idAXQx3hwuTVaOU8w210Zt+CaeW2mLub4Kj4E7N14+AhzWFYC53RtL+b2ONuo24Aw8xRR7bHbgq5FypZRVuE0czAMODB168oYuAEyF5u/UqzQZr+63gc0jG/mrN5Kkd79GBiur1Ll9Jof74sF3wCbA110APAvsFRtMkYdWBGzSqZd+hH8+FAg8FSHf22J8BiwHWJRSla2izt6AF7ZSLDgHsA1ZQqrqwJ7Ac7HaPmVH4Nuq0+K5lTkVsiJ9ZmfuvwUw0OuMl7YpjuT+4YUa89/eKgByzUOVWdHPNNjPtoC5Wnkwax02Bl4BpsW73aNPKtPnzefGz4/AtZcqlSoALwM7BWpz8RLcK9G2SnjJhuxFYFdgLeCZrF8qzSShq7Px7qsC8CmwDvAVIIC24iByNHARcFPkfumnfAjsnBWmXOdIxtcBcLSzh5H3yfVtQawawWrhSsab+03Jr5coGdn4OgAGsIGsmL4M5LYibYrG75vFR67nGODWLGAbOV80oopClwEXxOKLgUtbWl9lvM2excuL0KNOXqcUWorOxtd5YEtgEWBAWkTkroWoTqqMt4l7NHRV7bdgnRiTW8u7+ndZ3TxwB3BCaLP4HBxNWdkB0swMYypV5Hyijf1/1fT1OXAJYG1oqsylwOoA6GrTaaqaP8UkZZHSOx6op8w6pwMGbzI+D1gHHwf57YAN45al0pNRba3eI0vTRGY760EaWhQBFPe/Ey2Ho+BSkSYAGuFM6neckwG/pJWJXyEcUs5rWfQmDFwbAOkw64JpbzdAz/j5zylpQQzb+eeRCTOwSVEXAE26xvJ+ADCWa88OHTwweKDnDQwU6nmBvbcPHuh9hT0VTHoP/A0LTuMxcvfaggAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'image',\r\n    title: 'Image',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAArtJREFUaEPt2cnrVEcQwPHPz8QtehMU0RiI6FEQUdyJiRKEgKK4oBdv6l+gHlwPov4FLuQUFQSj6CVBcUFcQBH0IqIiuF28KbivFLyRx2NmfG9+b37zBqZhLtPV3fXtqq7q6teny1tfl+uvB9BpC/YsUDULjMEBLMJPnVYus/5rnMF6PK/1ZV3oJJZWTPGsOqHjskYAryq481mA0HFkI4AvKemVOI70f50wTnjJahxNLf7Nc7IulFa2ShFqGN50M8BQvK0iQES6zViDn/EER7Ans+OVBAjlz2FmnYN1DX+kIIbgXdUssAtbm0SFndiR9FcS4AEmNgGI/klVBgiXiJ1t1KI/ok+0rrTAfUxOAAbjfdXOQPj4tiYWCP8PmWgDAjAH8YsL160cKXt4EoVm1ZG9ioWpKPQjPrTTAuvwNwYlpl6B0zkhNmEtJuAxDmNfJg+0FWA2ziOSTa2Fv/6Fszkg8oi0DeAXXMfoOlq8xO+4mUfD78i0BSCutFcwpcniUXjMw70GMuFyn3MA/oCPZZ6BWPjfnMXPI8zF05QCcYCj8luFf5Iq61MTkNIBdmNLjp2ridzBgqQUHItTmJ4afyiBaFR7lAoQESN2rWi98AwXsBij6sBH5ImIVK+FxdMWarmgmYZLbSw742q9tw5BKQBh+hsYV8B1ioqGC23AwczAfgPEobuIGUU1akE+olIUOMdSY/sFEP4WBXUU1gPV4tqwBP8lC/YLIC5V2wdK89Q68ZD1Jy4nASOdL3If4nhAiqeVohGnLN4X+A23MwkvF8DUhH5EWdq0OE9k8/m4WzQTR+Yc3+KiZQ97iF+LApStRJnz5XKhMhcse64eQNk7WnS+hhbo+uf1bvjAcQLLaybLJqgoDfcnGbCKn5j+x8Zmn5iK+mLH5Tt1RSgNvAdQ2la2OFHPAi1uXGnDvgKePZUxa4GbwQAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'bold',\r\n    title: 'Bold',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAcVJREFUaEPtmLsuBVEUhr/TeAaXwgNoFErReADRaRQUFIRGQugQNBqXEAotFVEqiQcgQaHQuIQHIHHPSs5J5JiZk7Vmjr137Emmm732//3/vqxMicCfUuD6iQCuE4wJxARyOvCvl9CX0rxP4Am4APaBHeBZWePX53kS0AJUT34PDABHeSBcAojud6Af2LVCuAYQ3S9AB3BpgfABQHQfAj2+AKSZ0lReLnNAQ5VY2eDNwKMWoh4J1Ko5CSwlCO0D9kIAaAQeEoROAMshALQAtwlCR4H1EACmgMUEoZ3Aqc8AsknlzJ9N2MTnQDugvhxrbbgsQ9STpRSTy6wbONa6L9+7BpDjcwTYtIj3AUD2wrRVvA8AksAaIEfomwXE9RKqaJbWejBkANE+DGxpIeqRQFbNrH7oDmgFPjQQfw1Q0ZbWD3UBJyEAyKUmjlc/Y8BqyAAzwEIIAGn90BCw7TNAVj8kuqUfOnMNoJn/57dXQJu2oavHKWQF6AUOtIN9AVgBxrXifeiFXoH58mtqz10kIL8Tb8p/5DaAa4vzlTF5APLMW9jYCFCYlcZCMQGjcYUNiwkUZqWxUEzAaFxhw2IChVlpLBR8At98JVgxmKHZCAAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'italic',\r\n    title: 'Italic',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAATxJREFUaEPtl1sOAUEQRc/8WANfrMJjKx5rwVo8tuKxCr5Ygx9SiYjQMumarjaTlE+62r3n1lxR0PBX0XD9uIF/J+gJeAIVCfgKBQDec0K1SMANxCToCfgz8E0gaiuiDsfs5tvZA9APzA6Ao/LO15i1ARG5D4gUU8Oq4mXe2sAamASEToFN3Q10gBPQ+hB6AXrAre4GFsA8IFLeX6YQb7lCQv0MtD+ECvUucK27AdnxVUCkPBOzVOItEzCtzncAFi0k9bgLUJY6HaWkb5WA1OM4IFTqdFt3A1mq03KFslSnlYFs1WllIFt1WhnIVp0WBrJWZ1UDWf+0l9Wu5ofMDZRRjfncE4ih9TyrgfbzazSXNf4ZUEC3G9EkYKdGcbMbUEBLOuIJJMWpuMwTUEBLOuIJJMWpuMwTUEBLOvIAVacwMU4KlX0AAAAASUVORK5CYII=',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'underline',\r\n    title: 'Underline',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAfJJREFUaEPtmL0vRFEQxX+L0kdDhUIiovVfEIIoNEqFxFd0GiQSvUKiEFHRqXz+F6ITIjQSCRVaQSbuJi937643971dWeZ2+3bmnDlnZu7LboE6P4U6rx8T8NsdtA7UYwc+A0XHdjIzVgxxZtKEAZmxTIBzM8YISbUOxDiX2TXbgYQD1gFb4tK3omoqVMGOy5bYbiG7hTIuno1QxhF6A5q9JrQC8lxzJOfFS3gF2jQgMdfoNdDnkQwAlxpiQHIuvBzB7tfgxAg4BwY9klVgQ0MMrAHrXs4ZMKzBiREwD2x5JE9Ar2KMZExugXYPZw7YrraAbuAeaPSIDoHJMj9SkqFimsROePnvQA/wUG0Bgr8LTAeIpDB5LssYOuL8XqB4id0BZjTFS2zMCEleJ3AFtAQIn92InQI37ntZ+hFgITA2EiKCZXkfayVAeIaA48AoaWv4AMYdljY3ugNFokVgE2hQM38nSPFLgUshNVzsCCUJRoH9MuNUqRAZmyngJHW1gcA8BAhsB7ACzAJNPxQkrh8AyzEz72PnJaCI2wWMuZeRXInyWY5cjXeALPaR9qqsZEjeArJMQ1SuCYiyLcekf9WB0L8ROXpZApXK3FRBDtoEKNuVytxUQX+lA0oDaxOu6UBtKlKymAClYbmHWwdyt1QJ+AWdBFkxz16l8QAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n];\r\n\r\nexport const TOOLBAR_STYLES: Array<ToolbarItem> = [\r\n  {\r\n    name: 'markup',\r\n    title: 'Markup',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAxJJREFUaEPtmkuoTlEUx383YkAoQmQgI49SQh4lihJKJt4DZUCRQh6RyECeA4+594SSCTOPKPIeeJRHyHtiJAYM2H+tneN07tnfd86+93y3zp6c7579Wr+91trrtNZtI9x6AquApcAYoFd4Su6It8AMQM/SrS2wwlDgEjC29E7/LxANIg9AJ3+nA4T3KFEg8gDWAYdtt5/ADuAM8KmkNnYBO22N0hB5ADr9ibbRVmBfScH99CSA3pWCyAP4BvS2XYc4R/7cQQBa9p059utm98gD+J1YLOTszeyb1oCfWwiilQAKaaLVAJqGqAJgo/OtgwGba9ixqwCYBNxuwGkagqgCQLIrus+JAVEVQF/gLDC3LERVAF5uBcqpwKB2QLYkIvbwrDFVA4QUEIxFNUDoCEv21xrwBxjzW6gZpdQaqDXQjL1kjK1NqDah2oT+nUDmVV5/SpQ0kdD0+haqb6GQjQT6axPq0iZUUvudM72q7/xodGkAnwVQ3uZJapdZwDjLUl8FlgWk+AUcA9bbuOtWMMmatsIyEy+BC27eAGClDTwJfGlvrzSA93otqInJJmHWuFzOPWADcDMA8B0YDChNr3bfJbQmZMxRukSCdwMuAgusFvfYxo4HHsQGWOhOZXViUZ2WTu0ucM3eq6qzPwGg18oB3UoJoyqQqkFqnQbgKzdelqfAKEvabkoIqAKJ14BenwMWJfr7OFN5D+jZ8gCyY2lphFVkJLBM8ZDZuMwtmgbkcC9Sqpb6R5sPFNHANmCPqzMfADabzb8yqCOA+qMB5PmnnLgIwDDgEdAd0O/Z7kDO202l8pL8JRrAiYwc/hJgegkNyHx0pW4H1gKLgSnASAc2PzZA6BotogEBqHj+xhy7v9UJ5gFy/Kga6CiAr86JTwPLzUZnAle6GoCiuQKTApX+B0PBM08DR4GPKaeU7/ytKReNxEVNSBpQ6+duHQW6H/Z3HkDWhaLKzuUsgL02WgHnYWqmHG0y8MFujmS37vOBwA2/sHX2AHbbbz29wGmhplnN7Blwyr6L/DdUFsBx4Lk6/gDA1w1Abv2dCQAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'anu-table',\r\n    title: 'Table',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAVxJREFUaEPtmTtOw0AQhj+ngCK5Qa6ABFWSQ+QEpIcG5y5QpkacILlDUgUJrpALBNNQAJoIS8Za28lG8u5Ys6W1q/kfo9nxToLylSjHT6cIXAL3wC1wBfQjc+cTeAeegQXwJfhyB4bACriODHQVnFdgCuyEgCi/UQQ+J7UFJkJgDjwqUb4M80EIiPojpQTWQuADGCglkAmBnwrwTSXWdU6+9RrE+C4Uj+JWn3iHKmQECjKaAzXp58wUS6GSYlGlkIrKWpdCRqANBcyBNlSui9FpB3x6k6jKqBGoyF3rRss9uLXTsbbToUv8UfE7fQ8cpUDoTeaAOXCmAm3/E0s8uYldy6d1af1dyAiUrbMUOvFZxVLIlUKan9f3nRhwpMDTmfdJqONpPuRbAzehUHjGlUnluDhmXSoi8W/MmgtwAdwBs79Bd2xzswx4A15cg25PF8Mfa2qgwiNsQKCewC8Cf4RoX2kt7wAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n\r\n  {\r\n    name: 'ul',\r\n    title: 'Bulleted list',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAUJJREFUaEPtmDtuwkAQhj+q5AhEyhGALpwmZdIRhSaIFFBAk6QLlJS5DW1yhTyOENGAVnJhrTDYGht70O/S3pn5HzPe1bZw/rSc40cE6nZQDsgBowJqIaOA5vAsBy6AOXCbVPgAJsDGXLHkBFkE3oCnqNYrME6925aM5Vi6vVizCPwC7SjjH3DlhcBPBDbg/gauvRAI7TKKHHgBnr0QCEM8i4Z46mmIjw1UY75rI6vbCjkgB4wK6CxkFLBIuM5COgsV6Zc9awu1kM5CRrVzh2snzi1VRQvlQEXC5k571g70gLtEihXwmVuWEy7MciCAXwNhPwjPP9CPSDT6XmgJDCIhF8Cjl1uJAPYhIvAODL0Q6CYtdJlqoRvgywuBgLMD3KeGOA3+hGN6uNRZ/0Ybo/IhIHKgbpvkgBwwKqAWMgpoDt8BRag2MY/2fgEAAAAASUVORK5CYII=',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'ol',\r\n    title: 'Numbered list',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAASdJREFUaEPtmDsOwjAMhr9KMHAjNk6BxM7IirgEOxMzI0fgBhyHCQQoQ5eoj7hVGrtyt0pO4v/hxHKF8a8ynj8OoLSCroArMJKBWVroF5GiGmRTcuYB1ALUQNoUiIGOdHPv8sY8uuzhAHo5lQW4AjK+JooeUwMTpdh9jOo7PoUhB5DCUs6YWSrQ9sKqBJvSCwUHfIBlTisM3buL1RXwANbAAbhEh6juhQKwG7ADzsCpgSHVAELSR+AObIGvJQB74Ao8gQ3wavGnWgXewKIhadO3UMBjBsDQG63IOpWsSphwABK2csSmthKmith8Mxcr3TZeUfuQxYOt+j+2mwMQFrV4LtQ3YlSrgPkiNg9AaM2y4d5KlOVfaY8vIcUtJGErR6wrkINVyZ5/MAArMcqknlsAAAAASUVORK5CYII=',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'img',\r\n    title: 'Image',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAArtJREFUaEPt2cnrVEcQwPHPz8QtehMU0RiI6FEQUdyJiRKEgKK4oBdv6l+gHlwPov4FLuQUFQSj6CVBcUFcQBH0IqIiuF28KbivFLyRx2NmfG9+b37zBqZhLtPV3fXtqq7q6teny1tfl+uvB9BpC/YsUDULjMEBLMJPnVYus/5rnMF6PK/1ZV3oJJZWTPGsOqHjskYAryq481mA0HFkI4AvKemVOI70f50wTnjJahxNLf7Nc7IulFa2ShFqGN50M8BQvK0iQES6zViDn/EER7Ans+OVBAjlz2FmnYN1DX+kIIbgXdUssAtbm0SFndiR9FcS4AEmNgGI/klVBgiXiJ1t1KI/ok+0rrTAfUxOAAbjfdXOQPj4tiYWCP8PmWgDAjAH8YsL160cKXt4EoVm1ZG9ioWpKPQjPrTTAuvwNwYlpl6B0zkhNmEtJuAxDmNfJg+0FWA2ziOSTa2Fv/6Fszkg8oi0DeAXXMfoOlq8xO+4mUfD78i0BSCutFcwpcniUXjMw70GMuFyn3MA/oCPZZ6BWPjfnMXPI8zF05QCcYCj8luFf5Iq61MTkNIBdmNLjp2ridzBgqQUHItTmJ4afyiBaFR7lAoQESN2rWi98AwXsBij6sBH5ImIVK+FxdMWarmgmYZLbSw742q9tw5BKQBh+hsYV8B1ioqGC23AwczAfgPEobuIGUU1akE+olIUOMdSY/sFEP4WBXUU1gPV4tqwBP8lC/YLIC5V2wdK89Q68ZD1Jy4nASOdL3If4nhAiqeVohGnLN4X+A23MwkvF8DUhH5EWdq0OE9k8/m4WzQTR+Yc3+KiZQ97iF+LApStRJnz5XKhMhcse64eQNk7WnS+hhbo+uf1bvjAcQLLaybLJqgoDfcnGbCKn5j+x8Zmn5iK+mLH5Tt1RSgNvAdQ2la2OFHPAi1uXGnDvgKePZUxa4GbwQAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n\r\n  {\r\n    name: 'anu-code-block',\r\n    title: 'Code block',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAYlJREFUaEPtmLEOwjAMRN2vhg3Y4KtBHiJZURL7Lm4qpERiQfH5np22bg/583X8uX/ZAFd3cHdgd2CyAvsITRZwOnymA08R0V/GeovInRFiAdT4QyTtOfIVkQ8DwQAU81owJr5VaAXQBUOgBqz5MwBgCASgNn8WAAQRBWiZPxMgDBEB6JnX/1/MnaMRcxMRvRPVy70mPIAV5otpCmIEsNI8DdEDOMN8VBPqRAsgmgg5/qhmGKIGQBNFIFjNEIQFYBONIGY1XYgCMJuoBZGlOYRQgKxEFiJbswuhAG6bIgfd7Mk2r9JdzXKEsiCWmtdJwF7EsxDLzbeGMRbiEvO9aRKFuMz8aByOQlxq3pvnoxDgTWq4HS6IN06vhIDNex2gR1yiJZT5KIDu63XC62CUpXyVqJ/m7hsfYqAFgcSPYGqA8OsqaqCGQON7EBYgbB45QjaxhcgGgMyzAPaayASAzc8AlAlRk2Ys1aG0siqYAUFpbACqbIlBuwOJxaSkdgeosiUG7Q4kFpOS+gHp9YE4BjsehgAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'p',\r\n    title: 'Paragraph',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAARJJREFUaEPtmDEKAkEQBOsQTBQ/oQ8yFfyFZppqot8Q/2OqqS8wM1EOVLyVhYPeW++gN5+e6a5hgyno+Cs6Pj828G+CJmACYgJeITFAuTwksAUWQF9WbkbgDuyB1Vs+NHADhs30TqZazjiKGdgAy5YT2AHrmIFkMeUS8i+UK+lYHxMwATEBr5AYoFxuAnKEokBIYAJMgZ6o+11+BQ7AI6HmRyo0cAHGDTSav0wklw4NnIGSQuqXzUA5/AwYJHRwAo65Vijh3Hmk/I3myTnexQRMQEzAKyQGKJebgByhKNDW0+LPCbHuVaJNp8XKCbGugbacFksClRNiXQPiRuYv9y+UP/NqRxMwATEBr5AYoFzeeQJP65MaMdYfRFIAAAAASUVORK5CYII=',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'h1',\r\n    title: 'Heading 1',\r\n    label: 'H1',\r\n    icon: '',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'h2',\r\n    title: 'Heading 2',\r\n    label: 'H2',\r\n    icon: '',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'h3',\r\n    title: 'Heading 3',\r\n    label: 'H3',\r\n    icon: '',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'h4',\r\n    title: 'Heading 4',\r\n    label: 'H4',\r\n    icon: '',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'h5',\r\n    title: 'Heading 5',\r\n    label: 'H5',\r\n    icon: '',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'h6',\r\n    title: 'Heading 6',\r\n    label: 'H6',\r\n    icon: '',\r\n  } as ToolbarItem,\r\n  {\r\n    name: 'element-styles',\r\n    title: 'Styles',\r\n    label: '',\r\n    icon: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAABDVJREFUaEPtmVeIVVcUhr+xBguWREWMoKhgS1VRH8SCvWFHDbG3J32LCIoFIgi2B0VREUQFFU0EGz4EkhhNokajxoZiRGyxo1GsifuXdfV659w5Zc4w58BsGIaZvc86699rrX+VU0DRqwXQyedM1O2rwC/AK+BxVCEFPg9OA1ZFFe7z3H5gBrAO6As8ivKeJAA4Bxw0EA/DgkgKAOl9FOgF3AsDIkkApPcxZ40eYUAkDYBAHDcQd4NYIokApPefBuKOH4ikApDeZ4FuwM2iQCQZgPQWQwnEjXwgkg5Aep83ENe9QJQ2gLHAAj8/NxBLkwbgBPBtAOUzR3YA/+WeL00LhND9zdHKwPMyAGGvLcbzlYAXabZA6gFUBF6m2QJlAGKMx0iiKlj7+d7DacoDqQdQPkom/hhoHsnghR+q4hp4yfsSGADUDSk3lAV0eGXIF/gd1+jkmqssf7aGZRwwH6jv96Dth7KA6o6nAQVHOaYSeZaB2Q50CSCkHPB/0DxQ0gAyesjKM93w7AegvQ+IRFkgW9dlwGLgNFCzCBCxWECTAt2E14vU9mnPKzhvGYfn8/fuQBtgUREAPCk/Xx7IdaELwGjHHn+YH3YENgONgYvAMOCM7X0BbAMaAf8AQ4HfDFwTYCvwSY6iv9pQ67bV/YGbryAANHxt62ak9RylbrGSdogzezXnt/vcMGqgzTX3WLGlOedHwE7XjE8FDgCHgA+ArwANdX/P0VDBKcCr3V6fPFaIbIFTwKfAEQMi+RrMij3WGoPIpb5z/a38VJa44m69t5sqjAQu2RRa5fBlo9BBHkqOMPnfeOwJoGQXWkEsoJvtD8iP63jI+NEpJYU+tBtXoy5raanv7Wkvn+yATbCb9tJluuuRVXEuiRvAbsuc8k+5hteSr28A1gA6pxjQoFbrAbDR9hRLOjPGQ8hEoKH7/7y4AWjgKoYQzbU04fJhudEcF5CaFnSwMkHxMt7mm3K9XS5o9ZGkqQW43EPfAzSBzrV+Z+BrFyOTPABoGiGGi+RCmgRkvtSst4JquCnxkymnTKqblZ9OscDVaFBfd2pbvMg95joKXu4+bNzP8Wn9LbdThhaz5a5iAZAw0aCUVlOtW64OfO9+PjNlxS4CKvrVlxa5TD/gpNGoFKxhtLrCBbPqoOy1ENhrwe510cUGIKGqjf4yU7YCxCqZJeXlYvrdGqiatac+Vs/9a/wvINnrb0e5nxvtdvXS3i5NBWYkF8ojM5Z/K7NLaWViz9GhvUVWTxyAw87nRwHtXBxtyqdg0gCIUpU3VIYoi8+2atSvtZUbigQCu5AO1orFSd4JeQY8cco3cwlusGMxJa4GAd8RCYBkqxBT4xHHyrSUYrCwS+yXTRpvn/czXUl+6A4DIvUAMjkmVAzocFIskHoAIgD1E6m1QGQASvGZsjhM0MV9VplYjX+h9Rr0ZAJApz7a+wAAAABJRU5ErkJggg==',\r\n  } as ToolbarItem,\r\n];\r\n","import { Inject, Injectable } from \"@angular/core\";\r\nimport { Link } from \"@annuadvent/ngx-common-ui/link-form\";\r\nimport { ImageInfo } from \"@annuadvent/ngx-cms/cms-image-form\";\r\nimport { Observable, Subject } from \"rxjs\";\r\nimport { DOCUMENT } from \"@angular/common\";\r\nimport { Rectangle } from \"../interfaces/content-editor.interface\";\r\nimport { SUPPORTED_TAGS } from \"../constants/content-editor.constants\";\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class SelectionService {\r\n  private savedSelection: Array<Range>;\r\n  private _selection = new Subject<boolean>();\r\n\r\n  constructor(@Inject(DOCUMENT) private document: Document) {}\r\n\r\n  // Get the deepest Element node in the DOM tree that contains the entire range.\r\n  private getRangeContainer(range: Range): Node {\r\n    let container = range.commonAncestorContainer;\r\n    // If the selected node is a Text node, climb up to an element node - in Internet\r\n    // Explorer, the .contains() method only works with Element nodes.\r\n    while (container && container.nodeName !== \"ANU-CONTENT-EDITOR\") {\r\n      container = container.parentNode;\r\n    }\r\n\r\n    return container;\r\n  }\r\n\r\n  private restoreSelection(savedSel: Array<Range>): Selection {\r\n    if (savedSel) {\r\n      const selection: Selection = this.document.getSelection();\r\n      selection.removeAllRanges();\r\n      for (var i = 0, len = savedSel.length; i < len; ++i) {\r\n        selection.addRange(savedSel[i]);\r\n      }\r\n      return selection;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private isImageInSelection(selection: Selection) {\r\n    if (!selection || !selection.rangeCount) return false;\r\n\r\n    const range = selection.getRangeAt(0);\r\n\r\n    // check if selection contains an image, if yes then Image should also be the hyperlink.\r\n    const fragment = range.cloneContents();\r\n    const imgs = fragment.querySelectorAll(SUPPORTED_TAGS.IMAGE);\r\n\r\n    if (imgs && imgs.length) return true;\r\n\r\n    return false;\r\n  }\r\n\r\n  public get selection(): Observable<boolean> {\r\n    return this._selection.asObservable();\r\n  }\r\n\r\n  public get selectionText(): string {\r\n    this.restoreSelection(this.savedSelection);\r\n    return this.document.getSelection().toString();\r\n  }\r\n\r\n  // You can save selection because when you focus on some other element, current selection gets lost,\r\n  // so you can save it and restore it for processing.\r\n  public saveSelection(selection: Selection) {\r\n    var ranges: Array<Range> = [];\r\n    for (var i = 0, len = selection.rangeCount; i < len; ++i) {\r\n      ranges.push(selection.getRangeAt(i));\r\n    }\r\n    this.savedSelection = ranges;\r\n\r\n    if (selection.toString() || this.isImageInSelection(selection)) {\r\n      this._selection.next(true);\r\n    } else {\r\n      this._selection.next(false);\r\n    }\r\n  }\r\n\r\n  public getSelectionRect(): Rectangle | null {\r\n    const selection = this.restoreSelection(this.savedSelection);\r\n    if (!selection || selection.type !== \"Range\" || !selection.rangeCount) {\r\n      return null;\r\n    }\r\n\r\n    // // save selection for later use\r\n    // this.saveSelection(selection);\r\n\r\n    // Calculate the selection bounding rectangle\r\n    const range = selection.getRangeAt(0);\r\n    const rangeContainer = this.getRangeContainer(range) as Element;\r\n    if (!rangeContainer) {\r\n      return null;\r\n    }\r\n    const rangeRect = range.getBoundingClientRect();\r\n    const rangeContainerRect = rangeContainer.getBoundingClientRect();\r\n    const selectionRect: Rectangle = {\r\n      left: rangeRect.left - rangeContainerRect.left,\r\n      top: rangeRect.top - rangeContainerRect.top,\r\n      bottom: rangeRect.top - rangeContainerRect.top + rangeRect.height,\r\n      right: rangeRect.left - rangeContainerRect.left + rangeRect.width,\r\n      width: rangeRect.width,\r\n      height: rangeRect.height,\r\n    };\r\n\r\n    return selectionRect;\r\n  }\r\n\r\n  public addLink(link: Link) {\r\n    const selection = this.restoreSelection(this.savedSelection);\r\n    if (!selection || selection.type !== \"Range\" || !selection.rangeCount) {\r\n      return;\r\n    }\r\n\r\n    const selectionText = selection.toString();\r\n    if (!selectionText && !this.isImageInSelection(selection)) {\r\n      return;\r\n    }\r\n\r\n    const range = selection.getRangeAt(0);\r\n\r\n    // check if selection contains an image, if yes then Image should also be the hyperlink.\r\n    const fragment = range.cloneContents();\r\n    const imgs = fragment.querySelectorAll(SUPPORTED_TAGS.IMAGE);\r\n    let linkContentNode: any = this.document.createTextNode(link.label);\r\n    if (imgs && imgs.length) {\r\n      linkContentNode = fragment;\r\n    }\r\n\r\n    // create a new Link\r\n    var newLink = this.document.createElement(\"a\");\r\n    newLink.target = link.target;\r\n    newLink.href = link.href;\r\n    newLink.title = link.title;\r\n    newLink.appendChild(linkContentNode);\r\n\r\n    // replace selection with Link\r\n    range.deleteContents();\r\n    range.insertNode(newLink);\r\n  }\r\n\r\n  public addImage(image: ImageInfo) {\r\n    const selection = this.restoreSelection(this.savedSelection);\r\n    if (!selection || selection.type !== \"Range\" || !selection.rangeCount) {\r\n      return;\r\n    }\r\n\r\n    const selectionText = selection.toString();\r\n    if (!selectionText && !this.isImageInSelection(selection)) {\r\n      return;\r\n    }\r\n\r\n    const range = selection.getRangeAt(0);\r\n\r\n    // create a new Image\r\n    var newImage = this.document.createElement(SUPPORTED_TAGS.IMAGE);\r\n    newImage.src = image.src;\r\n    newImage.alt = image.alt;\r\n    // newImage.appendChild(newImage);\r\n\r\n    // replace selection with Image\r\n    range.deleteContents();\r\n    range.insertNode(newImage);\r\n  }\r\n\r\n  public addFormating(tagName: string) {\r\n    const selection = this.restoreSelection(this.savedSelection);\r\n    if (!selection || selection.type !== \"Range\" || !selection.rangeCount) {\r\n      return;\r\n    }\r\n\r\n    const selectionText = selection.toString();\r\n    if (!selectionText) {\r\n      return;\r\n    }\r\n\r\n    const range = selection.getRangeAt(0);\r\n\r\n    // create a new formatting Element\r\n    var newEl = this.document.createElement(tagName);\r\n    var textNode = this.document.createTextNode(selectionText);\r\n    newEl.appendChild(textNode);\r\n\r\n    // replace selection with new formatting element\r\n    range.deleteContents();\r\n    range.insertNode(newEl);\r\n  }\r\n}\r\n","import { EditorElement } from '../interfaces/content-editor.interface';\r\nimport { TableInfo } from '../interfaces/table.interface';\r\n\r\nexport const TABLE_DEFAULT_EDITOR_ELEMENT: EditorElement = {\r\n  name: 'root',\r\n  tagName: 'div',\r\n  isContainer: true,\r\n  children: [\r\n    {\r\n      name: 'p-1234',\r\n      tagName: 'p',\r\n      data: {\r\n        text: 'Sample Cell Text',\r\n      },\r\n    },\r\n  ],\r\n};\r\n\r\nexport const TABLE_TOOLBAR_ITEMS = [\r\n  {\r\n    name: 'editTable',\r\n    title: 'Edit Table',\r\n    label: '',\r\n    iconImage:\r\n      'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAAyZJREFUaEPtmUuoTVEYx39XHokolOfQQCGPQpmIMhADkkgeeRtI7tjYGCNJlGcMvAojkiSMiDAy81YGrgy813db+7Tusvbe59tnrXP2qbsnp87+1tr///re6+uhy5+eGuMfA0wH/gKvga8hrHUkMAs4BKwwv8Ms6J/ALeAg8MIlUjcCa4GzwMgcy/gObASuZ+/rRGC9MZlzwNASsxYSCzNN1IVAHvhXgGCc4ZG6BqyR/0IE5L/dwHZgJjCqoqO/A/YAN0rWh8D/st8Xc5JnJ3DC2Ud8YjzQ5xOYYtW4tCJof9lbYFrBXnngNwGXvHWiDVcT84EnLoEhwG0gFnj5fhEBDXjZq5TAXuBYpJOXbYpMSAt+C3DawfYDmOCb0GPr3ZncTWAH8DEiKdlKCz4kH3TiPmC0A3Yy8KGG4CWMLgBe+lFIUnbKJBfj5CU6bQAuhxJZSgLrgAtekvoNbAXOB7TctLwbhVIRaBqMJaKST01ABcaUB1r5AZk4tga0YLTy/QpLpQEtGK18w21SENCC0crnhsoYJqQFo5X/L2DF1IAWjFY+mFNjEdCC0crnFgQxCEgbeNFLUpIxQyVxlVqosJpplYCU4G8AqZuyp23gY4TRudJUJAK/yhzMcbt3bmfXqgYOAIcdAo0y19O7tpCT5aLZqXaf3MaoVQJXgdUO2F7giAe+qsM2FdZbISD2/8k21xnmeYbQU4dAVfCyRXICvv1/MS3pREBu1pbY3nqlIjr50SY5Ad/+vwHSq47LiXtF0Sm0JDkB3/6L4rUWfFtM6LO9GShMNOZy6z2wD7hSJui9T64BN8y53xZfuG/84K7xg3vAM+CPEnxbNJAlmuHAgwiA2+7EFQ5VtSS5CanQVBAeJNDp2cGgBrpOA/7l7qQEN9PN+rIMWqSEzh4ZsY4NLXZP+RGwyBGS0dCuBDfUZSSkuztpx6yZ7ENgcRmB/cDRst079F5mdu6MrAHD1cAIw1qGHHM6BDLvs3dMpl8e6A/65X1HlRbuDLCsJiQE/GZbEAYh5Y1ZZay5zQwSZntTm3bwkr7iOXDK+oKfDwZg6HSobPlAup7APyoi/DGtMXsgAAAAAElFTkSuQmCC',\r\n  },\r\n];\r\n\r\nexport const SAMPLE_TABLE: TableInfo = {\r\n  classNames: ['border'],\r\n  width: 'auto',\r\n  height: 'auto',\r\n  cellSpacing: '0px',\r\n  cellPadding: '0px',\r\n  thRow: {\r\n    classNames: [],\r\n    cells: [\r\n      {\r\n        classNames: [],\r\n        value: 'Column1',\r\n      },\r\n      {\r\n        classNames: [],\r\n        value: 'Column2',\r\n      },\r\n    ],\r\n  },\r\n  rows: [\r\n    {\r\n      classNames: [],\r\n      cells: [\r\n        {\r\n          classNames: [],\r\n          value: '',\r\n        },\r\n        {\r\n          classNames: [],\r\n          value: '',\r\n        },\r\n      ],\r\n    },\r\n  ],\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n  EditorElement,\r\n  EditorElementData,\r\n} from '../interfaces/content-editor.interface';\r\nimport { SUPPORTED_TAGS } from '../constants/content-editor.constants';\r\nimport { SAMPLE_TABLE } from '../constants/table.constants';\r\nimport { UtilsService } from '@annuadvent/ngx-core/utils';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ContentEditorService {\r\n  constructor(private utilsService: UtilsService) {}\r\n\r\n  private getEditorElementName(elType: string): string {\r\n    return `${elType}-${Date.now()}`;\r\n  }\r\n\r\n  public initElementData(tagName: string, data: any = {}): EditorElementData {\r\n    data = data || {};\r\n\r\n    const elData: EditorElementData = {};\r\n    switch (tagName) {\r\n      case SUPPORTED_TAGS.IMAGE:\r\n        const { src, alt } = data;\r\n        elData.src = src || '';\r\n        elData.alt = alt || '';\r\n        break;\r\n      case SUPPORTED_TAGS.CODE_BLOCK:\r\n        const { source, language, enableEdit } = data;\r\n        elData.source = source || '<h1>Sample source code</h1>';\r\n        elData.language = language || 'markup';\r\n        elData.enableEdit = enableEdit || false;\r\n        break;\r\n      case SUPPORTED_TAGS.TABLE:\r\n        const { tableData } = data;\r\n        elData.tableData = this.utilsService.deepCopy(\r\n          tableData || SAMPLE_TABLE\r\n        );\r\n        break;\r\n      default:\r\n        const { text } = data;\r\n        elData.text = text || '';\r\n    }\r\n\r\n    return elData;\r\n  }\r\n\r\n  public findParent(el: EditorElement, parent: EditorElement): EditorElement {\r\n    if (!parent.isContainer || !parent.children || !parent.children.length) {\r\n      return null;\r\n    }\r\n\r\n    let foundParent: EditorElement;\r\n\r\n    for (let i = 0; i < parent.children.length; i++) {\r\n      const chEl = parent.children[i];\r\n\r\n      if (el.name === chEl.name) {\r\n        foundParent = parent;\r\n        break;\r\n      }\r\n\r\n      foundParent = this.findParent(el, chEl);\r\n      if (foundParent) {\r\n        break;\r\n      }\r\n    }\r\n\r\n    return foundParent;\r\n  }\r\n\r\n  /**\r\n   * This function creates a new element based on existing element, and appends it to the parent of existing element.\r\n   * @param existingEl  existing element, whose empty copy will be created as a new element.\r\n   * @param fullTree\r\n   */\r\n  public addNewEditorElement(\r\n    existingEl: EditorElement,\r\n    fullTree: EditorElement\r\n  ): void {\r\n    const el = { ...existingEl };\r\n    const parent = this.findParent(existingEl, fullTree);\r\n    const index = parent.children.findIndex(\r\n      (itm) => itm.name === existingEl.name\r\n    );\r\n\r\n    //Remove focus from all other elements of its parent\r\n    parent.children.forEach((ch) => (ch.focused = false));\r\n\r\n    // Prepare new element for adding it to parent, and addd focus to it.\r\n    const newEl: EditorElement = {\r\n      tagName: el.tagName,\r\n      name: this.getEditorElementName(el.tagName),\r\n      focused: true,\r\n      data: this.initElementData(el.tagName), // Init with tagName specific empty or default data values\r\n    };\r\n\r\n    // Append newEl to its Parent (means parent's children)\r\n    parent.children.splice(index + 1, 0, newEl);\r\n  }\r\n\r\n  public removeEditorElement(el: EditorElement, fullTree: EditorElement) {\r\n    // if the element to remove is the only child of root, then do not remove\r\n    if (fullTree.children.length === 1) {\r\n      return;\r\n    }\r\n\r\n    // Find the parent of selected Element\r\n    const parent = this.findParent(el, fullTree);\r\n    if (!parent) {\r\n      console.error('No Parent found or Element is Root element itself.');\r\n      return;\r\n    }\r\n    const index = parent.children.findIndex((itm) => itm.name === el.name);\r\n    // remove selected child\r\n    parent.children.splice(index, 1);\r\n\r\n    if (parent.children.length) {\r\n      const nextOrPreviousItemIndex =\r\n        index >= parent.children.length ? index - 1 : index;\r\n      const childToFocus = parent.children[nextOrPreviousItemIndex];\r\n      if (\r\n        childToFocus.isContainer &&\r\n        childToFocus.children &&\r\n        childToFocus.children.length\r\n      ) {\r\n        childToFocus.children[childToFocus.children.length - 1].focused = true;\r\n      } else {\r\n        childToFocus.focused = true;\r\n      }\r\n    } else {\r\n      this.removeEditorElement(parent, fullTree);\r\n    }\r\n  }\r\n\r\n  public setFocusOffAll(fullTree: EditorElement) {\r\n    if (fullTree.focused) {\r\n      fullTree.focused = false;\r\n    }\r\n    if (fullTree.children && fullTree.children.length) {\r\n      fullTree.children.forEach((child) => this.setFocusOffAll(child));\r\n    }\r\n  }\r\n\r\n  /**\r\n   *\r\n   * @param el Existing Element that will be replaced with new element\r\n   * @param tagName New Element Tag Name\r\n   * @param fullTree Root most Editor Element, means Root element having compltete tree.\r\n   * @param data New item data\r\n   */\r\n  public replaceElement(\r\n    el: EditorElement,\r\n    tagName: string,\r\n    fullTree: EditorElement,\r\n    data: EditorElementData = null\r\n  ) {\r\n    /*\r\n     * If existing focused element is LI of a UL/OL, check if new El is UL/OL, then do not replace el, but just change type of list to that of new el.\r\n     * First Check if new El is an element that requires a parent, like li must have UL/OL as parent. Table-> TR- TD could be the other example. Then process them first\r\n     */\r\n    if (\r\n      el.tagName ===\r\n      SUPPORTED_TAGS.LIST_ITEM /*, el.tagName === otherElWithRequiredParent */\r\n    ) {\r\n      const parent = this.findParent(el, fullTree);\r\n\r\n      // if new el is UL/OL, then change only el type to new El list type, else do nothing.\r\n      if (\r\n        [SUPPORTED_TAGS.ORDERED_LIST, SUPPORTED_TAGS.UNORDERED_LIST].includes(\r\n          tagName as SUPPORTED_TAGS\r\n        )\r\n      ) {\r\n        // if list type is different of existing list item, then change else do nothing\r\n        if (parent.tagName !== tagName) {\r\n          parent.name = this.getEditorElementName(tagName);\r\n          parent.tagName = tagName;\r\n        }\r\n      } else {\r\n        // If new el is not UL/OL, but any other and existing el is LI, then\r\n        // remove existing LI and add copy as new item below the parent List (ul/ol)\r\n        const newItem = { ...el };\r\n        newItem.tagName = tagName;\r\n        newItem.name = this.getEditorElementName(tagName);\r\n        newItem.data = this.initElementData(tagName, data);\r\n\r\n        // find parent of OL/UL of existing LI, so that new El cab be added to it\r\n        const parentOfParent = this.findParent(parent, fullTree);\r\n        let indexOfParent = parentOfParent.children.findIndex(\r\n          (itm) => itm.name === parent.name\r\n        );\r\n\r\n        if (parent.children.length > 1) {\r\n          indexOfParent++;\r\n        }\r\n\r\n        this.removeEditorElement(el, fullTree);\r\n        this.setFocusOffAll(fullTree);\r\n\r\n        // Add new el as sibling of existing UL/OL of existing LI\r\n        parentOfParent.children.splice(indexOfParent, 0, newItem);\r\n      }\r\n    } else {\r\n      // If new El is any other element than LI, then check if it is a direct Individual element or a container.\r\n\r\n      // Check if new El is container Element, like UL/OL, then add relevant child/children before replacement process\r\n      if (\r\n        [SUPPORTED_TAGS.ORDERED_LIST, SUPPORTED_TAGS.UNORDERED_LIST].includes(\r\n          tagName as SUPPORTED_TAGS\r\n        )\r\n      ) {\r\n        // Create a new LI for the new List (UL/OL)\r\n        const newListItem = { ...el };\r\n        newListItem.tagName = SUPPORTED_TAGS.LIST_ITEM;\r\n        newListItem.name = this.getEditorElementName(SUPPORTED_TAGS.LIST_ITEM);\r\n        newListItem.data = this.initElementData(SUPPORTED_TAGS.LIST_ITEM, data);\r\n\r\n        // Convert existing el to UL/OL, add above created li to it.\r\n        el.tagName = tagName;\r\n        el.name = this.getEditorElementName(tagName);\r\n        el.isContainer = true;\r\n        el.children = [newListItem];\r\n\r\n        // As it's a container, so remove data and focus props from it.\r\n        delete el.data;\r\n        delete el.focused;\r\n      } else {\r\n        el.tagName = tagName;\r\n        el.name = this.getEditorElementName(tagName);\r\n        if (data) el.data = this.initElementData(tagName, data);\r\n      }\r\n    }\r\n  }\r\n}\r\n","import {\r\n  AfterViewInit,\r\n  Directive,\r\n  ElementRef,\r\n  forwardRef,\r\n  HostListener,\r\n  Inject,\r\n  OnDestroy,\r\n  Renderer2,\r\n} from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\n/*\r\n * This is a barebones contenteditable {@link ControlValueAccessor} allowing you to use\r\n * Angular forms with native contenteditable HTML. For security reasons you might want\r\n * to consider sanitizing pasted/dropped content before using it. Also make sure that\r\n * you do not set any dangerous content as control value yourself, because directive\r\n * just outputs control value as-is.\r\n */\r\n@Directive({\r\n  selector:\r\n    \"[contenteditable][formControlName], [contenteditable][formControl], [contenteditable][ngModel]\",\r\n  providers: [\r\n    {\r\n      provide: NG_VALUE_ACCESSOR,\r\n      useExisting: forwardRef(() => ContenteditableValueAccessorDirective),\r\n      multi: true,\r\n    },\r\n  ],\r\n})\r\nexport class ContenteditableValueAccessorDirective\r\n  implements ControlValueAccessor, AfterViewInit, OnDestroy\r\n{\r\n  private observer: any;\r\n\r\n  /**\r\n   * onTouch callback that marks control as touched and allows FormHooks use\r\n   */\r\n  private onTouched = () => {};\r\n\r\n  /**\r\n   * onChange callback that writes value to control and allows FormHooks use\r\n   */\r\n  private onChange: (value: string) => void = () => {};\r\n\r\n  constructor(\r\n    @Inject(ElementRef) private readonly elementRef: ElementRef,\r\n    @Inject(Renderer2) private readonly renderer: Renderer2\r\n  ) {\r\n    /**\r\n     * MutationObserver IE11 fallback (as opposed to input event for modern browsers).\r\n     * When mutation removes a tag, i.e. delete is pressed on the last remaining character\r\n     * inside a tag — callback is triggered before the DOM is actually changed, therefore\r\n     * setTimeout is used\r\n     */\r\n    if (typeof MutationObserver !== \"undefined\") {\r\n      this.observer = new MutationObserver(() => {\r\n        setTimeout(() => {\r\n          this.onChange(\r\n            ContenteditableValueAccessorDirective.processValue(\r\n              this.elementRef.nativeElement.innerHTML\r\n            )\r\n          );\r\n        });\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * To support IE11 MutationObserver is used to monitor changes to the content\r\n   */\r\n  public ngAfterViewInit() {\r\n    if (this.observer) {\r\n      this.observer.observe(this.elementRef.nativeElement, {\r\n        characterData: true,\r\n        childList: true,\r\n        subtree: true,\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Disconnect MutationObserver IE11 fallback on destroy\r\n   */\r\n  public ngOnDestroy() {\r\n    if (this.observer) {\r\n      this.observer.disconnect();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Listen to input events to write innerHTML value into control,\r\n   * also disconnect MutationObserver as it is not needed if this\r\n   * event works in current browser\r\n   */\r\n  @HostListener(\"input\")\r\n  onInput() {\r\n    if (this.observer) {\r\n      this.observer.disconnect();\r\n    }\r\n    this.onChange(\r\n      ContenteditableValueAccessorDirective.processValue(\r\n        this.elementRef.nativeElement.innerHTML\r\n      )\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Listen to blur event to mark control as touched\r\n   */\r\n  @HostListener(\"blur\")\r\n  onBlur() {\r\n    this.onTouched();\r\n  }\r\n\r\n  /**\r\n   * Reacts to external change\r\n   *\r\n   * @see {@link ControlValueAccessor#writeValue}\r\n   */\r\n  writeValue(value: string | null) {\r\n    this.renderer.setProperty(\r\n      this.elementRef.nativeElement,\r\n      \"innerHTML\",\r\n      ContenteditableValueAccessorDirective.processValue(value)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Registers onChange callback\r\n   *\r\n   * @see {@link ControlValueAccessor#registerOnChange}\r\n   */\r\n  public registerOnChange(onChange: (value: string) => void) {\r\n    this.onChange = onChange;\r\n  }\r\n\r\n  /**\r\n   * Registers onTouch callback\r\n   *\r\n   * @see {@link ControlValueAccessor#registerOnTouched}\r\n   */\r\n  public registerOnTouched(onTouched: () => void) {\r\n    this.onTouched = onTouched;\r\n  }\r\n\r\n  /**\r\n   * Sets disabled state by setting contenteditable attribute to true/false\r\n   *\r\n   * @see {@link ControlValueAccessor#setDisabledState}\r\n   */\r\n  public setDisabledState(disabled: boolean) {\r\n    this.renderer.setAttribute(\r\n      this.elementRef.nativeElement,\r\n      \"contenteditable\",\r\n      String(!disabled)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * null is treated as empty string to prevent IE11 outputting 'null',\r\n   * also single <br> is replaced with empty string when passed to the control\r\n   */\r\n  private static processValue(value: unknown): string {\r\n    const processed = String(value == null ? \"\" : value);\r\n\r\n    return processed.trim() === \"<br>\" ? \"\" : processed;\r\n  }\r\n}\r\n","import {\r\n  Directive,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Inject,\r\n  Input,\r\n  Output,\r\n} from \"@angular/core\";\r\n\r\n@Directive({\r\n  selector: \"[focus]\",\r\n})\r\nexport class FocusDirective {\r\n  @Input() focus: boolean;\r\n  @Output() onFocus = new EventEmitter();\r\n\r\n  constructor(@Inject(ElementRef) private element: ElementRef) {}\r\n\r\n  protected ngOnChanges() {\r\n    if (this.focus === true) this.element.nativeElement.focus();\r\n  }\r\n}\r\n","import { DOCUMENT } from \"@angular/common\";\r\nimport {\r\n  Directive,\r\n  EventEmitter,\r\n  HostListener,\r\n  Inject,\r\n  NgZone,\r\n  OnDestroy,\r\n  OnInit,\r\n} from \"@angular/core\";\r\nimport { SelectionService } from \"../services/selection.service\";\r\n\r\n@Directive({\r\n  selector: \"[anuFormatInline]\",\r\n  outputs: [\"selected: anuFormatInline\"],\r\n})\r\nexport class FormatInlineDirective implements OnInit, OnDestroy {\r\n  selected = new EventEmitter();\r\n\r\n  constructor(\r\n    private selService: SelectionService,\r\n    private zone: NgZone,\r\n    @Inject(DOCUMENT) private document: Document\r\n  ) {\r\n    this.handleDocumentSelectionChange =\r\n      this.handleDocumentSelectionChange.bind(this);\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.zone.runOutsideAngular(() => {\r\n      this.document.addEventListener(\r\n        \"selectionchange\",\r\n        this.handleDocumentSelectionChange,\r\n        false\r\n      );\r\n    });\r\n  }\r\n\r\n  public ngOnDestroy(): void {\r\n    this.document.removeEventListener(\r\n      \"selectionchange\",\r\n      this.handleDocumentSelectionChange,\r\n      false\r\n    );\r\n  }\r\n\r\n  public setSelection(selection: Selection) {\r\n    this.selService.saveSelection(selection);\r\n    this.selected.emit();\r\n  }\r\n\r\n  @HostListener(\"mouseup\", [\"$event\"])\r\n  public onMouseUp(event: any) {\r\n    this.setSelection(event.view.getSelection());\r\n  }\r\n\r\n  private handleDocumentSelectionChange(event: any) {\r\n    if (!event.target.getSelection().toString()) {\r\n      // this.selected.emit();\r\n    }\r\n  }\r\n}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { TableCell, TableInfo, TableRow } from '../interfaces/table.interface';\r\nimport { SAMPLE_TABLE } from '../constants/table.constants';\r\nimport { DOCUMENT } from '@angular/common';\r\n\r\n/**\r\n * TableService service provides methods and functionality for tabular content creation.\r\n * 1) Creates a table.\r\n * 2) Updates a table.\r\n * 3) Table can be used in content editor.\r\n */\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class TableService {\r\n  constructor(@Inject(DOCUMENT) private document: Document) {}\r\n\r\n  /**\r\n   *  Creates specified number of Empty initialized Table cells\r\n   * @param count number of cells\r\n   * @returns Empty initialized Table Cells\r\n   */\r\n  private getCells(count): Array<TableCell> {\r\n    const cells: Array<TableCell> = [];\r\n    for (let i = 0; i < count; i++) {\r\n      cells.push({\r\n        classNames: [],\r\n        width: 'auto',\r\n        height: 'auto',\r\n        value: '',\r\n      } as TableCell);\r\n    }\r\n\r\n    return cells;\r\n  }\r\n\r\n  /**\r\n   * Gets a Table row with initialized cells\r\n   * 1) Merges existing cells\r\n   * 2) removes extra cells, if needed\r\n   * 3) adds empty initialized additional cells, if needed\r\n   * @param row TableRow, if null, creates a new row self initialized cells\r\n   * @param cellCount Number of cells in the row\r\n   * @returns TableRow\r\n   */\r\n  private getRowWithCells(row: TableRow, cellCount: number): TableRow {\r\n    const newRow: TableRow = row\r\n      ? { ...row }\r\n      : ({\r\n          classNames: [],\r\n          cells: [],\r\n        } as TableRow);\r\n\r\n    const cells: Array<TableCell> = [];\r\n    const isAdditionalCells: boolean = cellCount > newRow.cells.length;\r\n\r\n    const additionalCells = isAdditionalCells\r\n      ? this.getCells(cellCount - newRow.cells.length)\r\n      : [];\r\n\r\n    newRow.cells.splice(\r\n      cellCount,\r\n      isAdditionalCells ? 0 : newRow.cells.length - cellCount,\r\n      ...additionalCells\r\n    );\r\n\r\n    return newRow;\r\n  }\r\n\r\n  /**\r\n   * Returns a new Table having provided number of rows and columns, and with sample data in cells.\r\n   * @param rowCount Number of rows for the table\r\n   * @param columnCount Number of columns for the table\r\n   * @param tableInfo TableInfo - existing table, if updates needed. Provide null if new table is needed.\r\n   * @returns Updated TableInfo (Table structure)\r\n   */\r\n  public getTable(\r\n    rowCount: number = 2,\r\n    columnCount: number = 2,\r\n    tableInfo: TableInfo = null\r\n  ): TableInfo {\r\n    tableInfo = tableInfo || SAMPLE_TABLE;\r\n\r\n    // Update or create Table Header Row\r\n    tableInfo.thRow = this.getRowWithCells(tableInfo.thRow, columnCount);\r\n\r\n    // Update or create Table Rows\r\n    const rows: Array<TableRow> = [];\r\n    for (let r = 0; r < rowCount; r++) {\r\n      const newRow = this.getRowWithCells(\r\n        tableInfo.rows[r] || null,\r\n        columnCount\r\n      );\r\n\r\n      rows.push(newRow);\r\n    }\r\n\r\n    tableInfo.rows = rows;\r\n    return tableInfo;\r\n  }\r\n\r\n  public getTableInfoFromMarkup(tableMarkUp: string): TableInfo {\r\n    if (!tableMarkUp) return null;\r\n\r\n    const tableInfo: TableInfo = {};\r\n\r\n    const rootEl = this.document.createElement('div');\r\n    rootEl.innerHTML = tableMarkUp;\r\n    const table = rootEl.querySelector('table');\r\n\r\n    if (!table) return null;\r\n\r\n    const tHs = table.querySelectorAll('tr > th');\r\n    const tRs = table.querySelectorAll('tr:not(:has(th))');\r\n\r\n    const thRow: TableRow = { cells: [] };\r\n    const rows: Array<TableRow> = [];\r\n\r\n    tHs?.forEach((th: Element) => {\r\n      thRow.cells.push({\r\n        value: th.innerHTML,\r\n      } as TableCell);\r\n    });\r\n\r\n    tRs?.forEach((tr: Element) => {\r\n      const tDs = tr.querySelectorAll('td');\r\n      const cells: Array<TableCell> = [];\r\n\r\n      tDs?.forEach((td: Element) => {\r\n        cells.push({\r\n          value: td.innerHTML,\r\n        });\r\n      });\r\n      rows.push({\r\n        cells: cells,\r\n      });\r\n    });\r\n\r\n    tableInfo.thRow = thRow;\r\n    tableInfo.rows = rows;\r\n\r\n    return tableInfo;\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { TableInfo } from '../../interfaces/table.interface';\r\nimport { UtilsService } from '@annuadvent/ngx-core/utils';\r\nimport { TableService } from '../../services/table.service';\r\n\r\n/**\r\n * TableFormComponent is a table editor component\r\n * 1) Updates table meta, style information.\r\n * 2) Add/update/remove rows/columns\r\n * 3) Add/update/remove CSS classes from table/rows/cells\r\n */\r\n@Component({\r\n  selector: 'anu-table-form',\r\n  templateUrl: './table-form.component.html',\r\n  styleUrls: ['./table-form.component.scss'],\r\n})\r\nexport class TableFormComponent implements OnInit, OnChanges {\r\n  @Input() value: TableInfo;\r\n\r\n  @Output() changed = new EventEmitter<TableInfo>();\r\n\r\n  rowCount: number = 2;\r\n  columnCount: number = 2;\r\n  tableInfo: TableInfo;\r\n\r\n  // Load Table from markup variables\r\n  tableMarkup: string = '';\r\n  markUpError: string = '';\r\n\r\n  constructor(\r\n    private utilsService: UtilsService,\r\n    private tableService: TableService\r\n  ) {}\r\n\r\n  private initForm(): void {\r\n    this.tableInfo = this.utilsService.deepCopy(this.value);\r\n    this.rowCount = this.tableInfo?.rows?.length || 2;\r\n    this.columnCount = this.tableInfo?.thRow?.cells?.length || 2;\r\n  }\r\n  ngOnInit(): void {\r\n    this.initForm();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    this.initForm();\r\n  }\r\n\r\n  public onChange(): void {\r\n    // Create Table based on table info\r\n    setTimeout(() => {\r\n      this.tableInfo = this.tableService.getTable(\r\n        this.rowCount,\r\n        this.columnCount,\r\n        this.tableInfo\r\n      );\r\n\r\n      this.changed.emit(this.utilsService.deepCopy(this.tableInfo));\r\n    });\r\n  }\r\n\r\n  public onPreview(): void {\r\n    this.markUpError = '';\r\n\r\n    const tableInfo = this.tableService.getTableInfoFromMarkup(\r\n      this.tableMarkup\r\n    );\r\n    if (tableInfo) {\r\n      this.tableInfo = this.utilsService.deepCopy(tableInfo);\r\n      this.changed.emit(this.utilsService.deepCopy(this.tableInfo));\r\n    } else {\r\n      this.markUpError = 'No valid table in the markup';\r\n    }\r\n  }\r\n}\r\n","<ng-container *ngIf=\"tableInfo\">\r\n  <div class=\"row bottom\">\r\n    <label class=\"col-lg-2 col-md-2 col-sm-4\">\r\n      Rows\r\n      <input\r\n        type=\"number\"\r\n        [ngModelOptions]=\"{ updateOn: 'blur' }\"\r\n        (ngModelChange)=\"onChange()\"\r\n        [(ngModel)]=\"rowCount\"\r\n      />\r\n    </label>\r\n    <label class=\"col-lg-2 col-md-2 col-sm-4\">\r\n      Columns\r\n      <input\r\n        type=\"number\"\r\n        [ngModelOptions]=\"{ updateOn: 'blur' }\"\r\n        (ngModelChange)=\"onChange()\"\r\n        [(ngModel)]=\"columnCount\"\r\n      />\r\n    </label>\r\n\r\n    <label class=\"col-lg-2 col-md-2 col-sm-4\">\r\n      Width\r\n      <input\r\n        type=\"text\"\r\n        [ngModelOptions]=\"{ updateOn: 'blur' }\"\r\n        (ngModelChange)=\"onChange()\"\r\n        [(ngModel)]=\"tableInfo.width\"\r\n      />\r\n    </label>\r\n    <label class=\"col-lg-2 col-md-2 col-sm-4\">\r\n      Height\r\n      <input\r\n        type=\"text\"\r\n        [ngModelOptions]=\"{ updateOn: 'blur' }\"\r\n        (ngModelChange)=\"onChange()\"\r\n        [(ngModel)]=\"tableInfo.height\"\r\n      />\r\n    </label>\r\n    <label class=\"col-lg-2 col-md-2 col-sm-4\">\r\n      Cell Padding\r\n      <input\r\n        type=\"text\"\r\n        [ngModelOptions]=\"{ updateOn: 'blur' }\"\r\n        (ngModelChange)=\"onChange()\"\r\n        [(ngModel)]=\"tableInfo.cellPadding\"\r\n      />\r\n    </label>\r\n    <label class=\"col-lg-2 col-md-2 col-sm-4\">\r\n      Cell Spacing\r\n      <input\r\n        type=\"text\"\r\n        [ngModelOptions]=\"{ updateOn: 'blur' }\"\r\n        (ngModelChange)=\"onChange()\"\r\n        [(ngModel)]=\"tableInfo.cellSpacing\"\r\n      />\r\n    </label>\r\n  </div>\r\n</ng-container>\r\n\r\n<div class=\"row\">\r\n  <label>Load Table from HTML markup</label>\r\n  <label *ngIf=\"markUpError\" class=\"error\">{{ markUpError }}</label>\r\n  <textarea\r\n    placeholder=\"Type or paste here your table markup...\"\r\n    [(ngModel)]=\"tableMarkup\"\r\n    (ngModelChange)=\"onPreview()\"\r\n    [ngModelOptions]=\"{ updateOn: 'blur' }\"\r\n  ></textarea>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { TableCell, TableInfo } from '../../interfaces/table.interface';\r\nimport { ToolbarItem } from '@annuadvent/ngx-common-ui/toolbar';\r\nimport { TABLE_TOOLBAR_ITEMS } from '../../constants/table.constants';\r\nimport { TableService } from '../../services/table.service';\r\nimport { UtilsService } from '@annuadvent/ngx-core/utils';\r\n\r\n@Component({\r\n  selector: 'anu-table',\r\n  templateUrl: './table.component.html',\r\n  styleUrls: ['./table.component.scss'],\r\n})\r\nexport class TableComponent implements OnInit {\r\n  @Input() value: TableInfo;\r\n  @Input() enableEdit: boolean = false;\r\n\r\n  @Output() changed = new EventEmitter<TableInfo>();\r\n  @Output() tableModalOpenStatusChanged = new EventEmitter<boolean>();\r\n\r\n  toolbarItems: Array<ToolbarItem> = [...TABLE_TOOLBAR_ITEMS];\r\n  showTableForm: boolean = false;\r\n  rowCount: number = 2;\r\n  columnCount: number = 2;\r\n\r\n  tableInfo: TableInfo = null;\r\n  activeCell: TableCell = null;\r\n  showStylesModal: boolean = false;\r\n\r\n  // Styles Toolbar\r\n  // showStylesToolbar: boolean = false;\r\n\r\n  constructor(\r\n    private tableService: TableService,\r\n    private utilsService: UtilsService\r\n  ) {\r\n    this.value = this.tableService.getTable(2, 2);\r\n  }\r\n\r\n  ngOnInit(): void {}\r\n\r\n  public toolbarChanged(selectedItem: ToolbarItem): void {\r\n    this.tableInfo = this.utilsService.deepCopy(this.value);\r\n    this.showTableForm = true;\r\n    this.tableModalOpenStatusChanged.emit(true);\r\n  }\r\n\r\n  public modalOkClicked(modalOpened: boolean): void {\r\n    this.showTableForm = modalOpened;\r\n    this.value = this.tableInfo;\r\n    this.changed.emit(this.value);\r\n    this.tableModalOpenStatusChanged.emit(modalOpened);\r\n  }\r\n\r\n  public modalCancelClicked(modalOpened: boolean): void {\r\n    this.showTableForm = modalOpened;\r\n    this.tableModalOpenStatusChanged.emit(modalOpened);\r\n  }\r\n\r\n  public tableChanged(tInfo: TableInfo): void {\r\n    this.tableInfo = tInfo;\r\n  }\r\n\r\n  public textSelected() {\r\n    // TODO\r\n  }\r\n\r\n  public enterPressed(event: any): void {\r\n    event.stopPropagation();\r\n  }\r\n\r\n  public backspacePressed(event: any): void {\r\n    event.stopPropagation();\r\n  }\r\n\r\n  public onBlur(event: any) {\r\n    event.stopPropagation();\r\n    this.changed.emit(this.value);\r\n  }\r\n\r\n  public elementStylesChanged(selectedClassNames: Array<string>): void {\r\n    this.activeCell.classNames = selectedClassNames;\r\n    this.changed.emit(this.value);\r\n  }\r\n\r\n  public onStylesToolbarClick(item: ToolbarItem): void {\r\n    this.showStylesModal = true;\r\n  }\r\n}\r\n","<anu-toolbar\r\n  class=\"toolbar\"\r\n  *ngIf=\"enableEdit\"\r\n  [items]=\"toolbarItems\"\r\n  [size]=\"'size-sm'\"\r\n  (changed)=\"toolbarChanged($event)\"\r\n></anu-toolbar>\r\n\r\n<table\r\n  *ngIf=\"value\"\r\n  [ngClass]=\"value.classNames\"\r\n  [style.width]=\"value.width || 'auto'\"\r\n  [style.height]=\"value.height || 'auto'\"\r\n  [cellSpacing]=\"value.cellSpacing || 'initial'\"\r\n  [cellPadding]=\"value.cellPadding || 'initial'\"\r\n>\r\n  <thead *ngIf=\"value.thRow\">\r\n    <tr>\r\n      <th\r\n        class=\"relative\"\r\n        [ngClass]=\"thCell.classNames\"\r\n        *ngFor=\"let thCell of value.thRow.cells\"\r\n      >\r\n        <!-- Cell Toolbar Start -->\r\n        <anu-toolbar\r\n          *ngIf=\"enableEdit && thCell === activeCell\"\r\n          class=\"toolbar-cell\"\r\n          [isVertical]=\"true\"\r\n          [items]=\"toolbarItems\"\r\n          (changed)=\"onStylesToolbarClick($event)\"\r\n        ></anu-toolbar>\r\n        <!-- Cell Toolbar End-->\r\n\r\n        <p\r\n          contenteditable\r\n          [(ngModel)]=\"thCell.value\"\r\n          tabindex=\"0\"\r\n          (anuFormatInline)=\"textSelected()\"\r\n          (keydown.enter)=\"enterPressed($event)\"\r\n          (keydown.backspace)=\"backspacePressed($event)\"\r\n          (blur)=\"onBlur($event)\"\r\n          (focusin)=\"activeCell = thCell\"\r\n        ></p>\r\n      </th>\r\n    </tr>\r\n  </thead>\r\n  <tbody>\r\n    <tr [ngClass]=\"row.classNames\" *ngFor=\"let row of value.rows\">\r\n      <td\r\n        class=\"relative\"\r\n        [ngClass]=\"cell.classNames\"\r\n        [style.width]=\"cell.width\"\r\n        [style.height]=\"cell.height\"\r\n        *ngFor=\"let cell of row.cells\"\r\n      >\r\n        <!-- Cell Toolbar Start -->\r\n        <anu-toolbar\r\n          *ngIf=\"enableEdit && cell === activeCell\"\r\n          class=\"toolbar-cell\"\r\n          [isVertical]=\"true\"\r\n          [items]=\"toolbarItems\"\r\n          (changed)=\"onStylesToolbarClick($event)\"\r\n        ></anu-toolbar>\r\n        <!-- Cell Toolbar End-->\r\n        <p\r\n          contenteditable\r\n          [(ngModel)]=\"cell.value\"\r\n          tabindex=\"0\"\r\n          (anuFormatInline)=\"textSelected()\"\r\n          (keydown.enter)=\"enterPressed($event)\"\r\n          (keydown.backspace)=\"backspacePressed($event)\"\r\n          (blur)=\"onBlur($event)\"\r\n          (focusin)=\"activeCell = cell\"\r\n        ></p>\r\n      </td>\r\n    </tr>\r\n  </tbody>\r\n</table>\r\n\r\n<anu-modal\r\n  [opened]=\"showTableForm\"\r\n  modalTitle=\"Table Information\"\r\n  okLabel=\"Update Table\"\r\n  [enableOk]=\"true\"\r\n  [enableCancel]=\"true\"\r\n  (okClick)=\"modalOkClicked($event)\"\r\n  (cancelClick)=\"modalCancelClicked($event)\"\r\n>\r\n  <anu-table-form\r\n    [value]=\"tableInfo\"\r\n    (changed)=\"tableChanged($event)\"\r\n  ></anu-table-form>\r\n</anu-modal>\r\n\r\n<!-- StylesModal -->\r\n<anu-modal\r\n  *ngIf=\"value\"\r\n  [opened]=\"showStylesModal\"\r\n  (cancelClick)=\"showStylesModal = false\"\r\n  [enableCancel]=\"true\"\r\n  [cancelLabel]=\"'Close'\"\r\n  [enableOk]=\"false\"\r\n  modalTitle=\"Apply Styles\"\r\n>\r\n  <anu-element-styles\r\n    [selectedStyles]=\"activeCell?.classNames\"\r\n    (changed)=\"elementStylesChanged($event)\"\r\n  ></anu-element-styles>\r\n</anu-modal>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { CodeBlockInfo } from '@annuadvent/ngx-common-ui/code-block';\r\nimport { SUPPORTED_TAGS } from '../../constants/content-editor.constants';\r\nimport {\r\n  EditorElement,\r\n  EditorElementData,\r\n} from '../../interfaces/content-editor.interface';\r\nimport { TableInfo } from '../../interfaces/table.interface';\r\n\r\n@Component({\r\n  selector: 'anu-leaf-element',\r\n  templateUrl: './leaf-element.component.html',\r\n  styleUrls: ['./leaf-element.component.scss'],\r\n})\r\nexport class LeafElementComponent implements OnInit {\r\n  @Input() value: EditorElement = {} as EditorElement;\r\n  @Input() fullTree: EditorElement = {} as EditorElement;\r\n  @Output() enterKeyPressed = new EventEmitter<EditorElement>();\r\n  @Output() backspaceKeyPressed = new EventEmitter<EditorElement>();\r\n  @Output() changed = new EventEmitter<EditorElement>();\r\n  @Output() focusin = new EventEmitter<EditorElement>();\r\n\r\n  /**\r\n   * checks if CodeBlock modal is open, then prevent from reciving keydown.enter and keydown.backspace events.\r\n   */\r\n  sourceModalOpenStatus: boolean = false;\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {}\r\n\r\n  public enterPressed(event: any, value: EditorElement): void {\r\n    //checks if CodeBlock modal is open, then prevent from reciving keydown.enter and keydown.backspace events\r\n    if (!this.sourceModalOpenStatus) {\r\n      event.preventDefault();\r\n      this.enterKeyPressed.emit(value);\r\n    }\r\n  }\r\n\r\n  public backspacePressed(event: any): void {\r\n    if (\r\n      (!this.value?.data?.text ||\r\n        this.value?.tagName === SUPPORTED_TAGS.CODE_BLOCK) &&\r\n      !this.sourceModalOpenStatus\r\n    ) {\r\n      event.preventDefault();\r\n      this.backspaceKeyPressed.emit(this.value);\r\n    }\r\n  }\r\n\r\n  public onBlur(event: any) {\r\n    event.stopPropagation();\r\n    this.changed.emit(this.value);\r\n  }\r\n\r\n  public onFocus(event: any) {\r\n    event.stopPropagation();\r\n    this.focusin.emit(this.value);\r\n  }\r\n\r\n  public textSelected() {\r\n    // TODO\r\n  }\r\n\r\n  public codeBlockChanged(codeBlockInfo: CodeBlockInfo) {\r\n    this.value.data = {\r\n      source: codeBlockInfo.source,\r\n      language: codeBlockInfo.language,\r\n    } as EditorElementData;\r\n    this.changed.emit(this.value);\r\n  }\r\n\r\n  /**\r\n   * checks if CodeBlock modal is open, then prevent from reciving keydown.enter and keydown.backspace events.\r\n   */\r\n  public sourceModalOpenStatusChanged(opened: boolean) {\r\n    this.sourceModalOpenStatus = opened;\r\n  }\r\n\r\n  public tableChanged(tableInfo: TableInfo) {\r\n    this.value.data.tableData = tableInfo;\r\n    this.changed.emit(this.value);\r\n  }\r\n}\r\n","<h1\r\n  *ngIf=\"value.tagName === 'h1'\"\r\n  contenteditable\r\n  [(ngModel)]=\"value.data.text\"\r\n  tabindex=\"0\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (blur)=\"onBlur($event)\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n></h1>\r\n<h2\r\n  *ngIf=\"value.tagName === 'h2'\"\r\n  contenteditable\r\n  [(ngModel)]=\"value.data.text\"\r\n  tabindex=\"0\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (blur)=\"onBlur($event)\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n></h2>\r\n<h3\r\n  *ngIf=\"value.tagName === 'h3'\"\r\n  contenteditable\r\n  [(ngModel)]=\"value.data.text\"\r\n  tabindex=\"0\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (blur)=\"onBlur($event)\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n></h3>\r\n<h4\r\n  *ngIf=\"value.tagName === 'h4'\"\r\n  contenteditable\r\n  [(ngModel)]=\"value.data.text\"\r\n  tabindex=\"0\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (blur)=\"onBlur($event)\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n></h4>\r\n<h5\r\n  *ngIf=\"value.tagName === 'h5'\"\r\n  contenteditable\r\n  [(ngModel)]=\"value.data.text\"\r\n  tabindex=\"0\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (blur)=\"onBlur($event)\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n></h5>\r\n<h6\r\n  *ngIf=\"value.tagName === 'h6'\"\r\n  contenteditable\r\n  [(ngModel)]=\"value.data.text\"\r\n  tabindex=\"0\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (blur)=\"onBlur($event)\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n></h6>\r\n\r\n<li\r\n  *ngIf=\"value.tagName === 'li'\"\r\n  contenteditable\r\n  [(ngModel)]=\"value.data.text\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  tabindex=\"0\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (blur)=\"onBlur($event)\"\r\n  (focusin)=\"onFocus($event)\"\r\n></li>\r\n\r\n<p\r\n  *ngIf=\"value.tagName === 'p'\"\r\n  contenteditable\r\n  [(ngModel)]=\"value.data.text\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  tabindex=\"0\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (blur)=\"onBlur($event)\"\r\n></p>\r\n\r\n<img\r\n  *ngIf=\"value.tagName === 'img'\"\r\n  contenteditable\r\n  [src]=\"value?.data?.src\"\r\n  [alt]=\"value?.data?.alt\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  tabindex=\"0\"\r\n  (anuFormatInline)=\"textSelected()\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  [name]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (blur)=\"onBlur($event)\"\r\n/>\r\n\r\n<anu-code-block\r\n  *ngIf=\"value.tagName === 'anu-code-block'\"\r\n  [source]=\"value?.data?.source\"\r\n  [language]=\"value?.data?.language\"\r\n  [enableEdit]=\"true\"\r\n  tabindex=\"0\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  (changed)=\"codeBlockChanged($event)\"\r\n  [id]=\"value.name\"\r\n  (sourceModalOpenStatusChanged)=\"sourceModalOpenStatusChanged($event)\"\r\n  [focus]=\"value?.focused\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (blur)=\"onBlur($event)\"\r\n></anu-code-block>\r\n\r\n<anu-table\r\n  *ngIf=\"value.tagName === 'anu-table'\"\r\n  [value]=\"value?.data?.tableData\"\r\n  [enableEdit]=\"true\"\r\n  tabindex=\"0\"\r\n  (keydown.enter)=\"enterPressed($event, value)\"\r\n  (keydown.backspace)=\"backspacePressed($event)\"\r\n  (changed)=\"tableChanged($event)\"\r\n  [id]=\"value.name\"\r\n  [focus]=\"value?.focused\"\r\n  (focusin)=\"onFocus($event)\"\r\n  (blur)=\"onBlur($event)\"\r\n></anu-table>\r\n","import {\r\n  AfterContentChecked,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\nimport { ToolbarItem } from '@annuadvent/ngx-common-ui/toolbar';\r\nimport { EditorElement } from '../../interfaces/content-editor.interface';\r\nimport { ImageInfo } from '@annuadvent/ngx-cms/cms-image-form';\r\nimport { ContentEditorService } from '../../services/content-editor.service';\r\nimport { TOOLBAR_STYLES } from '../../constants/content-editor.constants';\r\nimport { SAMPLE_TABLE } from '../../constants/table.constants';\r\n\r\n@Component({\r\n  selector: 'anu-content-element',\r\n  templateUrl: './content-element.component.html',\r\n  styleUrls: ['./content-element.component.scss'],\r\n})\r\nexport class ContentElementComponent\r\n  implements OnInit, AfterContentChecked, OnChanges\r\n{\r\n  @Input() editorElement: EditorElement = {} as EditorElement;\r\n  @Input() fullTree: EditorElement = {} as EditorElement;\r\n  @Input() enableOpenai: boolean = false;\r\n  @Output() changed = new EventEmitter<EditorElement>();\r\n\r\n  isToolbar: boolean = false;\r\n  styleToolbar: Array<ToolbarItem> = TOOLBAR_STYLES;\r\n  toggleImageForm: boolean = false;\r\n  imageInfo: ImageInfo = {\r\n    src: 'https://',\r\n    alt: '',\r\n  };\r\n\r\n  showMarkupModal: boolean = false;\r\n  markModalText: string = '';\r\n\r\n  // Styles Modal\r\n  showStylesModal: boolean = false;\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    private ceService: ContentEditorService\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n    this.setStyleToolbarItems();\r\n  }\r\n\r\n  ngAfterContentChecked() {\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    this.setStyleToolbarItems();\r\n  }\r\n\r\n  private setStyleToolbarItems() {\r\n    if (this.editorElement?.tagName === 'li') {\r\n      // this.styleToolbar = this.styleToolbar.filter(item => ['ul', 'ol'].includes(item.name)) // disable non list elements\r\n    }\r\n  }\r\n\r\n  public enterKeyPressed(el: EditorElement) {\r\n    this.ceService.addNewEditorElement(el, this.fullTree);\r\n  }\r\n\r\n  public backspaceKeyPressed(el: EditorElement) {\r\n    this.ceService.removeEditorElement(el, this.fullTree);\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  public focusin() {\r\n    if (!this.editorElement?.isContainer) {\r\n      this.ceService.setFocusOffAll(this.fullTree);\r\n      this.editorElement.focused = true;\r\n      this.isToolbar = false;\r\n    }\r\n  }\r\n\r\n  public onBlur() {\r\n    this.changed.emit(this.editorElement);\r\n  }\r\n\r\n  public toggleToolbar(event, editorElement) {\r\n    event.preventDefault();\r\n    this.isToolbar = !this.isToolbar;\r\n  }\r\n\r\n  public styleToolbarSelected(item: ToolbarItem) {\r\n    switch (item.name) {\r\n      case 'img':\r\n        this.toggleImageForm = true;\r\n        this.imageInfo.alt =\r\n          this.editorElement?.data?.alt || this.editorElement?.data?.text;\r\n        if (this.editorElement?.data?.src) {\r\n          this.imageInfo.src = this.editorElement?.data?.src;\r\n        }\r\n        break;\r\n\r\n      case 'anu-code-block':\r\n        this.ceService.replaceElement(\r\n          this.editorElement,\r\n          item.name,\r\n          this.fullTree,\r\n          { source: '<h1>Sample source code</h1>', language: 'markup' }\r\n        );\r\n        this.isToolbar = !this.isToolbar;\r\n        break;\r\n\r\n      case 'anu-table':\r\n        this.ceService.replaceElement(\r\n          this.editorElement,\r\n          item.name,\r\n          this.fullTree,\r\n          {\r\n            tableData: SAMPLE_TABLE,\r\n          }\r\n        );\r\n        this.isToolbar = !this.isToolbar;\r\n        break;\r\n\r\n      case 'markup':\r\n        if (\r\n          ['p', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(\r\n            this.editorElement?.tagName\r\n          )\r\n        ) {\r\n          this.markModalText = this.editorElement?.data?.text || '';\r\n          this.showMarkupModal = true;\r\n        }\r\n\r\n        break;\r\n      case 'element-styles':\r\n        if (\r\n          ['p', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'img'].includes(\r\n            this.editorElement?.tagName\r\n          )\r\n        ) {\r\n          this.isToolbar = !this.isToolbar;\r\n          this.showStylesModal = true;\r\n        }\r\n\r\n        break;\r\n\r\n      default:\r\n        this.ceService.replaceElement(\r\n          this.editorElement,\r\n          item.name,\r\n          this.fullTree\r\n        );\r\n        this.isToolbar = !this.isToolbar;\r\n    }\r\n  }\r\n\r\n  public cancelImageModal() {\r\n    this.toggleImageForm = false;\r\n  }\r\n\r\n  public saveImage(image: ImageInfo) {\r\n    this.ceService.replaceElement(\r\n      this.editorElement,\r\n      'img',\r\n      this.fullTree,\r\n      image\r\n    );\r\n    this.toggleImageForm = false;\r\n    this.isToolbar = !this.isToolbar;\r\n  }\r\n\r\n  public markupModalOk(): void {\r\n    this.showMarkupModal = false;\r\n    this.editorElement.data = this.editorElement.data || {};\r\n    this.editorElement.data.text = this.markModalText;\r\n  }\r\n\r\n  public elementStylesChanged(classNames: Array<string>): void {\r\n    this.editorElement.classNames = [...classNames];\r\n    this.changed.emit(this.editorElement);\r\n  }\r\n}\r\n","<div\r\n  *ngIf=\"!editorElement?.isContainer\"\r\n  [ngClass]=\"{ visible: editorElement?.focused }\"\r\n  class=\"row center nowrap styles-toolbar\"\r\n>\r\n  <a href=\"#\" class=\"toolbar-btn\" (click)=\"toggleToolbar($event, editorElement)\"\r\n    >&#187;</a\r\n  >\r\n  <anu-toolbar\r\n    class=\"shadow-half\"\r\n    [isVertical]=\"true\"\r\n    [ngClass]=\"{ opened: isToolbar }\"\r\n    [items]=\"styleToolbar\"\r\n    (changed)=\"styleToolbarSelected($event)\"\r\n  ></anu-toolbar>\r\n</div>\r\n\r\n<!-- Headings h1 - h6 -->\r\n<anu-leaf-element\r\n  class=\"col-12\"\r\n  *ngIf=\"\r\n    [\r\n      'h1',\r\n      'h2',\r\n      'h3',\r\n      'h4',\r\n      'h5',\r\n      'h6',\r\n      'p',\r\n      'li',\r\n      'img',\r\n      'anu-code-block',\r\n      'anu-table'\r\n    ].includes(editorElement?.tagName)\r\n  \"\r\n  [ngClass]=\"editorElement.classNames\"\r\n  [value]=\"editorElement\"\r\n  (changed)=\"onBlur()\"\r\n  (focusin)=\"focusin()\"\r\n  (enterKeyPressed)=\"enterKeyPressed($event)\"\r\n  (backspaceKeyPressed)=\"backspaceKeyPressed($event)\"\r\n  [fullTree]=\"fullTree\"\r\n></anu-leaf-element>\r\n\r\n<!-- Container Elements -->\r\n<ng-container *ngIf=\"editorElement?.isContainer\">\r\n  <article *ngIf=\"editorElement?.tagName === 'article'\">\r\n    <ng-container *ngFor=\"let child of editorElement?.children\">\r\n      <anu-content-element\r\n        [enableOpenai]=\"enableOpenai\"\r\n        class=\"col-12\"\r\n        [editorElement]=\"child\"\r\n        [fullTree]=\"fullTree\"\r\n        (changed)=\"onBlur()\"\r\n        (focusin)=\"focusin()\"\r\n      >\r\n      </anu-content-element>\r\n    </ng-container>\r\n  </article>\r\n  <div *ngIf=\"editorElement?.tagName === 'div'\">\r\n    <ng-container *ngFor=\"let child of editorElement?.children\">\r\n      <anu-content-element\r\n        [enableOpenai]=\"enableOpenai\"\r\n        class=\"col-12\"\r\n        [editorElement]=\"child\"\r\n        [fullTree]=\"fullTree\"\r\n        (changed)=\"onBlur()\"\r\n        (focusin)=\"focusin()\"\r\n      >\r\n      </anu-content-element>\r\n    </ng-container>\r\n  </div>\r\n  <ul *ngIf=\"editorElement?.tagName === 'ul'\">\r\n    <ng-container *ngFor=\"let child of editorElement?.children\">\r\n      <anu-content-element\r\n        [enableOpenai]=\"enableOpenai\"\r\n        class=\"col-12\"\r\n        [editorElement]=\"child\"\r\n        [fullTree]=\"fullTree\"\r\n        (changed)=\"onBlur()\"\r\n        (focusin)=\"focusin()\"\r\n      >\r\n      </anu-content-element>\r\n    </ng-container>\r\n  </ul>\r\n  <ol *ngIf=\"editorElement?.tagName === 'ol'\">\r\n    <ng-container *ngFor=\"let child of editorElement?.children\">\r\n      <anu-content-element\r\n        [enableOpenai]=\"enableOpenai\"\r\n        class=\"col-12\"\r\n        [editorElement]=\"child\"\r\n        [fullTree]=\"fullTree\"\r\n        (changed)=\"onBlur()\"\r\n        (focusin)=\"focusin()\"\r\n      >\r\n      </anu-content-element>\r\n    </ng-container>\r\n  </ol>\r\n</ng-container>\r\n\r\n<!-- Image Form Modal-->\r\n<ng-container *ngIf=\"toggleImageForm\">\r\n  <anu-modal [opened]=\"toggleImageForm\" (cancelClick)=\"cancelImageModal()\">\r\n    <anu-cms-image-form\r\n      [src]=\"imageInfo.src\"\r\n      [alt]=\"imageInfo.alt\"\r\n      (cancel)=\"cancelImageModal()\"\r\n      [enableOpenai]=\"enableOpenai\"\r\n      (save)=\"saveImage($event)\"\r\n    >\r\n    </anu-cms-image-form>\r\n  </anu-modal>\r\n</ng-container>\r\n\r\n<!-- markupModal -->\r\n<anu-modal\r\n  *ngIf=\"editorElement?.data\"\r\n  [opened]=\"showMarkupModal\"\r\n  (cancelClick)=\"showMarkupModal = false\"\r\n  (okClick)=\"markupModalOk()\"\r\n  okLabel=\"Update\"\r\n  [enableCancel]=\"true\"\r\n  [enableOk]=\"true\"\r\n  modalTitle=\"Update Markup\"\r\n>\r\n  <textarea [(ngModel)]=\"markModalText\"></textarea>\r\n</anu-modal>\r\n\r\n<!-- StylesModal -->\r\n<anu-modal\r\n  *ngIf=\"editorElement?.data\"\r\n  [opened]=\"showStylesModal\"\r\n  (cancelClick)=\"showStylesModal = false\"\r\n  [enableCancel]=\"true\"\r\n  [cancelLabel]=\"'Close'\"\r\n  [enableOk]=\"false\"\r\n  modalTitle=\"Apply Styles\"\r\n>\r\n  <anu-element-styles\r\n    [selectedStyles]=\"editorElement?.classNames\"\r\n    (changed)=\"elementStylesChanged($event)\"\r\n  ></anu-element-styles>\r\n</anu-modal>\r\n","import {\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n  EditorElement,\r\n  Rectangle,\r\n} from '../../interfaces/content-editor.interface';\r\nimport {\r\n  EDITOR_ROOT_ELEMENT,\r\n  TOOLBAR_FORMATTING,\r\n} from '../../constants/content-editor.constants';\r\nimport { ToolbarItem } from '@annuadvent/ngx-common-ui/toolbar';\r\nimport { Link } from '@annuadvent/ngx-common-ui/link-form';\r\nimport { ImageInfo } from '@annuadvent/ngx-cms/cms-image-form';\r\nimport { SelectionService } from '../../services/selection.service';\r\n\r\n@Component({\r\n  selector: 'anu-content-editor',\r\n  templateUrl: './content-editor.component.html',\r\n  styleUrls: ['./content-editor.component.scss'],\r\n})\r\nexport class ContentEditorComponent implements OnInit {\r\n  @Input() value: EditorElement = { ...EDITOR_ROOT_ELEMENT };\r\n  @Input() enableOpenai: boolean = false;\r\n  @ViewChild('popup', { static: true }) popupEl: ElementRef;\r\n  @Output() changed = new EventEmitter<EditorElement>();\r\n\r\n  selectionRect: Rectangle;\r\n  isTextSelected: boolean = false;\r\n  formattingToolbar: Array<ToolbarItem> = TOOLBAR_FORMATTING;\r\n\r\n  link: Link = {\r\n    href: 'https://',\r\n    label: '',\r\n    title: '',\r\n    target: '_blank',\r\n  };\r\n\r\n  imageInfo: ImageInfo = {\r\n    src: '',\r\n    alt: '',\r\n  };\r\n\r\n  toggleLinkForm: boolean = false;\r\n  toggleImageForm: boolean = false;\r\n\r\n  constructor(private selService: SelectionService) {\r\n    this.selectionRect = { top: 0, left: 0, bottom: 0, right: 0 };\r\n    this.selService.selection.subscribe(this.handleTextSelection);\r\n  }\r\n\r\n  handleTextSelection = (hasSelection: boolean) => {\r\n    this.isTextSelected = hasSelection;\r\n    if (hasSelection) {\r\n      setTimeout(() => {\r\n        this.selectionRect = this.selService.getSelectionRect();\r\n        if (this.selectionRect) {\r\n          this.selectionRect.top =\r\n            this.selectionRect.top -\r\n            this.popupEl.nativeElement.offsetHeight -\r\n            this.selectionRect.height;\r\n        }\r\n      });\r\n    }\r\n  };\r\n\r\n  ngOnInit(): void {}\r\n\r\n  public contentChanged(el: EditorElement) {\r\n    this.changed.emit(this.value);\r\n  }\r\n\r\n  public saveLink(link: Link): void {\r\n    this.selService.addLink(link);\r\n    this.toggleLinkForm = false;\r\n    this.isTextSelected = false;\r\n  }\r\n\r\n  public saveImage(image: ImageInfo): void {\r\n    this.selService.addImage(image);\r\n    this.toggleImageForm = false;\r\n    this.isTextSelected = false;\r\n  }\r\n\r\n  public cancelLinkModal(): void {\r\n    this.toggleLinkForm = false;\r\n  }\r\n\r\n  public cancelImageModal(): void {\r\n    this.toggleImageForm = false;\r\n  }\r\n\r\n  public formattingToolbarSelected(toolbarItem: ToolbarItem): void {\r\n    switch (toolbarItem.name) {\r\n      case 'link':\r\n        this.link = {\r\n          href: 'https://',\r\n          label: this.selService.selectionText,\r\n          title: this.selService.selectionText,\r\n          target: '_blank',\r\n        };\r\n        this.toggleLinkForm = !this.toggleLinkForm;\r\n        break;\r\n      case 'image':\r\n        this.imageInfo = {\r\n          src: 'https://',\r\n          alt: this.selService.selectionText,\r\n        };\r\n        this.toggleImageForm = !this.toggleImageForm;\r\n        break;\r\n      case 'bold':\r\n        this.selService.addFormating('b');\r\n        this.isTextSelected = false;\r\n        break;\r\n      case 'italic':\r\n        this.selService.addFormating('i');\r\n        this.isTextSelected = false;\r\n        break;\r\n      case 'underline':\r\n        this.selService.addFormating('u');\r\n        this.isTextSelected = false;\r\n        break;\r\n      default:\r\n        this.isTextSelected = false;\r\n        break;\r\n    }\r\n  }\r\n}\r\n","<anu-content-element\r\n  [enableOpenai]=\"enableOpenai\"\r\n  (changed)=\"contentChanged($event)\"\r\n  [editorElement]=\"value\"\r\n  [fullTree]=\"value\"\r\n>\r\n</anu-content-element>\r\n\r\n<div\r\n  #popup\r\n  [ngClass]=\"{ opened: isTextSelected }\"\r\n  class=\"popup\"\r\n  [style.top.px]=\"selectionRect.bottom\"\r\n  [style.left.px]=\"selectionRect.left\"\r\n>\r\n  <anu-toolbar\r\n    class=\"shadow-half\"\r\n    [items]=\"formattingToolbar\"\r\n    (changed)=\"formattingToolbarSelected($event)\"\r\n  ></anu-toolbar>\r\n  <!-- Link Form Modal-->\r\n  <anu-modal\r\n    modalTitle=\"Update hyperlink information\"\r\n    [opened]=\"toggleLinkForm\"\r\n    (cancelClick)=\"cancelLinkModal()\"\r\n  >\r\n    <anu-link-form\r\n      [href]=\"link.href\"\r\n      [label]=\"link.label\"\r\n      [title]=\"link.title\"\r\n      [target]=\"link.target\"\r\n      (cancel)=\"cancelLinkModal()\"\r\n      (save)=\"saveLink($event)\"\r\n    >\r\n    </anu-link-form>\r\n  </anu-modal>\r\n  <!-- Image Form Modal-->\r\n  <anu-modal [opened]=\"toggleImageForm\" (cancelClick)=\"cancelImageModal()\">\r\n    <anu-cms-image-form\r\n      [src]=\"imageInfo.src\"\r\n      [alt]=\"imageInfo.alt\"\r\n      (cancel)=\"cancelImageModal()\"\r\n      [enableOpenai]=\"enableOpenai\"\r\n      (save)=\"saveImage($event)\"\r\n    >\r\n    </anu-cms-image-form>\r\n  </anu-modal>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { ToolbarModule } from '@annuadvent/ngx-common-ui/toolbar';\r\nimport { ModalModule } from '@annuadvent/ngx-common-ui/modal';\r\nimport { CmsImageFormModule } from '@annuadvent/ngx-cms/cms-image-form';\r\nimport { LinkFormModule } from '@annuadvent/ngx-common-ui/link-form';\r\nimport { CodeBlockModule } from '@annuadvent/ngx-common-ui/code-block';\r\nimport { ContenteditableValueAccessorDirective } from './directives/contenteditable-value-accessor.directive';\r\nimport { FocusDirective } from './directives/focus.directive';\r\nimport { FormatInlineDirective } from './directives/format-inline.directive';\r\nimport { ContentEditorComponent } from './components/content-editor/content-editor.component';\r\nimport { ContentElementComponent } from './components/content-element/content-element.component';\r\nimport { LeafElementComponent } from './components/leaf-element/leaf-element.component';\r\nimport { TableComponent } from './components/table/table.component';\r\nimport { TableFormComponent } from './components/table-form/table-form.component';\r\nimport { ElementStylesModule } from '@annuadvent/ngx-common-ui/element-styles';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    ContentEditorComponent,\r\n    ContenteditableValueAccessorDirective,\r\n    FocusDirective,\r\n    ContentElementComponent,\r\n    FormatInlineDirective,\r\n    LeafElementComponent,\r\n    TableComponent,\r\n    TableFormComponent,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    FormsModule,\r\n    ToolbarModule,\r\n    ModalModule,\r\n    CmsImageFormModule,\r\n    LinkFormModule,\r\n    CodeBlockModule,\r\n    ElementStylesModule,\r\n  ],\r\n  exports: [\r\n    ContentEditorComponent,\r\n    ContenteditableValueAccessorDirective,\r\n    FocusDirective,\r\n    ContentElementComponent,\r\n    FormatInlineDirective,\r\n    LeafElementComponent,\r\n    TableComponent,\r\n    TableFormComponent,\r\n  ],\r\n})\r\nexport class ContentEditorModule {}\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport {\r\n  EditorElement,\r\n  EditorElementData,\r\n} from '../interfaces/content-editor.interface';\r\nimport { DOCUMENT } from '@angular/common';\r\nimport * as showdown from 'showdown';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class Html2JsonService {\r\n  constructor(@Inject(DOCUMENT) private document: Document) {}\r\n\r\n  public md2html(\r\n    mdText: string,\r\n    replaceNewlineWith: string = '<p></p>'\r\n  ): string {\r\n    const converter = new showdown.Converter();\r\n    let html = converter.makeHtml(mdText);\r\n    // html = html.replaceAll('\\\\n', replaceNewlineWith);\r\n\r\n    return html;\r\n  }\r\n\r\n  public html2json(htmlText: string): EditorElement {\r\n    const rootEl = this.document.createElement('article');\r\n    rootEl.innerHTML = htmlText;\r\n    rootEl.id = 'root';\r\n    const htmlJson: EditorElement = this.parseHtmlElement(rootEl);\r\n\r\n    return htmlJson;\r\n  }\r\n\r\n  public md2json(mdText: string): EditorElement {\r\n    return this.html2json(this.md2html(mdText));\r\n  }\r\n\r\n  public md2jsonText(mdText: string): string {\r\n    return JSON.stringify(this.html2json(this.md2html(mdText)), null, '\\t');\r\n  }\r\n\r\n  private parseHtmlElement(el: HTMLElement | ChildNode): EditorElement {\r\n    const tagName = (\r\n      (el as HTMLElement).tagName || (el as ChildNode).nodeName\r\n    ).toLowerCase();\r\n    const name = (el as HTMLElement).id || `${tagName}-${Date.now()}`;\r\n    const isContainer = ['ol', 'ul', 'article', 'div'].includes(tagName);\r\n    const focused = false;\r\n    const editorEl: EditorElement = { name, tagName, isContainer, focused };\r\n\r\n    if (el.childNodes && el.childNodes.length) {\r\n      const elementChildren = el.childNodes;\r\n      const children: Array<EditorElement> = [];\r\n      if (tagName === 'pre') {\r\n        let codeEl;\r\n        el.childNodes.forEach((node) => {\r\n          if (node.nodeName === 'CODE') {\r\n            codeEl = node;\r\n          }\r\n        });\r\n\r\n        return {\r\n          ...editorEl,\r\n          tagName: 'anu-code-block',\r\n          data: this.getContent(codeEl),\r\n        };\r\n      } else if (\r\n        ['p', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'].includes(tagName)\r\n      ) {\r\n        return {\r\n          ...editorEl,\r\n          data: {\r\n            text:\r\n              tagName === 'p'\r\n                ? (el as HTMLElement).innerHTML\r\n                : (el as HTMLElement).textContent,\r\n          },\r\n        };\r\n      } else if (tagName === 'a') {\r\n        // embed anchor tag and its content to a p tag, p is from allowed list of tags.\r\n        const pEl = this.document.createElement('p');\r\n        pEl.appendChild(el);\r\n\r\n        return {\r\n          ...editorEl,\r\n          tagName: 'p',\r\n          data: {\r\n            text: pEl.innerHTML,\r\n          },\r\n        };\r\n      } else {\r\n        for (let i = 0; i < elementChildren.length; i++) {\r\n          const elObj = this.parseHtmlElement(elementChildren[i]);\r\n          children.push(elObj);\r\n        }\r\n\r\n        const data = tagName === 'a' ? this.getContent(el) : '';\r\n\r\n        if (data) {\r\n          return { ...editorEl, data, children };\r\n        } else {\r\n          return { ...editorEl, children };\r\n        }\r\n      }\r\n    }\r\n\r\n    return { ...editorEl, data: this.getContent(el) };\r\n  }\r\n\r\n  private getContent(el: ChildNode): EditorElementData {\r\n    const content: EditorElementData = {};\r\n    const tagName = (el as HTMLElement).tagName || (el as ChildNode).nodeName;\r\n\r\n    switch (tagName) {\r\n      case 'IMG':\r\n        const imgEl = el as HTMLImageElement;\r\n        content.src = imgEl.src || '';\r\n        content.alt = imgEl.alt || '';\r\n        break;\r\n      case 'CODE':\r\n        const codeEl = el as HTMLElement;\r\n        content.source = codeEl.innerHTML || '';\r\n        content.language = codeEl.lang || '';\r\n        break;\r\n      case '#text':\r\n        const textEl = el as HTMLSpanElement;\r\n        content.text = textEl.textContent || '';\r\n        break;\r\n      default:\r\n        content.text = el.textContent || '';\r\n    }\r\n\r\n    return content;\r\n  }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.TableService","i1.TableService","i2","i8.ContenteditableValueAccessorDirective","i9.FormatInlineDirective","i10.TableFormComponent","i1","i3","i4.ContenteditableValueAccessorDirective","i5.FocusDirective","i6.FormatInlineDirective","i7.TableComponent","i1.ContentEditorService","i4","i5","i6","i8.LeafElementComponent","i1.SelectionService","i7.ContentElementComponent"],"mappings":"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"}