rapid-text-editor 1.0.21 → 1.0.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"rapid-text-editor.mjs","sources":["../../../projects/rapid-text-editor/src/lib/rapid-text-editor.service.ts","../../../projects/rapid-text-editor/src/lib/rapid-text-editor.component.ts","../../../projects/rapid-text-editor/src/lib/rapid-text-editor.component.html","../../../projects/rapid-text-editor/src/lib/rapid-text-editor.module.ts","../../../projects/rapid-text-editor/src/public-api.ts","../../../projects/rapid-text-editor/src/rapid-text-editor.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RapidTextEditorService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, ElementRef, Input, Output, OnInit, ViewChild, OnChanges, TemplateRef, forwardRef, EventEmitter, AfterViewInit, SimpleChange, SimpleChanges, Renderer2} from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ChangeDetectorRef } from '@angular/core';\r\nimport { SignaturePad } from 'angular2-signaturepad';\r\n\r\n@Component({\r\n selector: 'rapid-text-editor',\r\n templateUrl: './rapid-text-editor.component.html',\r\n styleUrls: ['./rapid-text-editor.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RapidTextEditorComponent),\r\n multi: true\r\n }\r\n ]\r\n \r\n})\r\nexport class RapidTextEditorComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnChanges {\r\n\r\n @Input() contentCapture: boolean = false;\r\n @Input() height: string = \"auto\";\r\n @Input() width: string = \"auto\";\r\n @Input() iconColor: string = '#333333';\r\n @Output() contentChange = new EventEmitter<string>();\r\n @ViewChild('editor', { static: true }) editor!: ElementRef;\r\n @ViewChild('tableDialog') tableDialog!: TemplateRef<any>;\r\n @ViewChild('signatureDialog') signatureDialog!: TemplateRef<any>;\r\n @ViewChild('sigPad') signaturePad!: SignaturePad;\r\n private editorContent: string = '';\r\n rows: number = 1;\r\n cols: number = 1;\r\n grid = Array(49).fill(0);\r\n Math = Math;\r\n uploadedImages: string[] = [];\r\n \r\n signaturePadOptions = {\r\n minWidth: 1,\r\n canvasWidth: 400,\r\n canvasHeight: 200\r\n };\r\n\r\n constructor(private dialog: MatDialog, \r\n private el: ElementRef, \r\n private renderer: Renderer2, \r\n private elRef: ElementRef,\r\n private _change: ChangeDetectorRef\r\n ) {\r\n console.log('Build -1')\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.contentCapture) {\r\n console.log('Content capture is enabled.');\r\n } else {\r\n console.log('Content capture is disabled.');\r\n }\r\n // this.initializeEditorContent('');\r\n // this.ensureParagraphAndFocus();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['height'] || changes['width']) {\r\n this.applyDimensions();\r\n }\r\n }\r\n\r\n private applyDimensions(): void {\r\n const dimensionElement = this.elRef.nativeElement.querySelector('.dimension');\r\n if (this.width) {\r\n this.renderer.setStyle(dimensionElement, 'width', this.width);\r\n }\r\n const editorElement = this.elRef.nativeElement.querySelector('.editor');\r\n if(this.height){\r\n this.renderer.setStyle(editorElement, 'height', this.height);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n const editor = this.el.nativeElement.querySelector('.editor');\r\n \r\n if (editor && (editor.innerHTML.trim() === \"\" || editor.innerHTML.trim() === \"<br>\")) {\r\n editor.focus();\r\n const range = document.createRange();\r\n range.setStart(editor, 0);\r\n range.collapse(true);\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n editor.innerHTML = '<p style=\"font-size:14px; font-weight:normal;\">\\u200B</p>'\r\n }\r\n else {\r\n console.error('Editor element not found.');\r\n }\r\n\r\n const observer = new MutationObserver(() => this.updateCurrentFormat());\r\n observer.observe(this.editor.nativeElement, {\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n\r\n this.editor.nativeElement.blur();\r\n\r\n // this.initializeEditorContent('');\r\n // this.ensureParagraphAndFocus();\r\n\r\n }\r\n\r\n ensureParagraphAndFocus() {\r\n\r\n const editor = document.getElementById('editor');\r\n if (!editor) return;\r\n\r\n // If editor is empty or doesn't have a <p> as the last element\r\n if (!editor.innerHTML.trim()) {\r\n editor.innerHTML = '<p style=\"font-size:14px; font-weight:normal;\">\\u200B</p>';\r\n } else {\r\n const firstChild = editor.firstChild as HTMLElement;\r\n if (!firstChild || firstChild.tagName !== 'P') {\r\n const content = editor.innerHTML;\r\n editor.innerHTML = `<p style=\"font-size:14px; font-weight:normal;\">${content}</p>`;\r\n }\r\n }\r\n\r\n const p = editor.querySelector('p');\r\n if (p) {\r\n const range = document.createRange();\r\n range.selectNodeContents(p);\r\n range.collapse(true); \r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n }\r\n\r\n // Focus the editor\r\n editor.focus();\r\n }\r\n\r\n initializeEditorContent(data: string) {\r\n const editor = document.getElementById('editor');\r\n if (!editor) return;\r\n\r\n // If content has no HTML tags, wrap with <p>\r\n const hasHtmlTags = /<[^>]+>/.test(data);\r\n if (!hasHtmlTags) {\r\n editor.innerHTML = `<p style=\"font-size:14px; font-weight: normal;\">${data}</p>`;\r\n // this.ensureParagraphAndFocus();\r\n } else {\r\n editor.innerHTML = data;\r\n }\r\n \r\n }\r\n\r\n\r\n onContentChange(): void {\r\n if (this.contentCapture) {\r\n const editor = this.el.nativeElement.querySelector('.editor');\r\n if (editor) {\r\n this.editorContent = editor.innerHTML;\r\n console.log('Captured Content (Child):', this.editorContent);\r\n this.contentChange.emit(this.editorContent);\r\n } else {\r\n console.error('Editor element not found.');\r\n }\r\n }\r\n }\r\n\r\n getContent(): string {\r\n return this.editorContent;\r\n }\r\n\r\n selectedHead: any = 'P';\r\n selectedFont: any = '14';\r\n\r\n public onChange = (content: string) => {\r\n if (this.editor.nativeElement.innerHTML == '<br>' || this.editor.nativeElement.innerHTML == '') {\r\n this.selectedHead = 'P';\r\n this.selectedFont = '14';\r\n }\r\n this._change.detectChanges();\r\n };\r\n\r\n private onTouched = () => { };\r\n\r\n writeValue(content: string): void {\r\n if (this.editor && this.editor.nativeElement) {\r\n this.editor.nativeElement.innerHTML = content || '';\r\n }\r\n }\r\n\r\n registerOnChange(fn: (content: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n }\r\n\r\n // setFontSize(event: Event) {\r\n // const select = event.target as HTMLSelectElement;\r\n // const size = select.value;\r\n // const selection = window.getSelection();\r\n // if (!selection || selection.rangeCount === 0) return;\r\n // const range = selection.getRangeAt(0);\r\n // if (!range.collapsed) {\r\n // const parent = selection.anchorNode?.parentElement;\r\n // if (\r\n // parent &&\r\n // parent.classList &&\r\n // Array.from(parent.classList).some((c: string) => c.startsWith('fs-'))\r\n // ) {\r\n // parent.style.fontSize = `${size}px`;\r\n // parent.className = `fs-${size}`;\r\n // } else {\r\n // const span = document.createElement('span');\r\n // span.style.fontSize = `${size}px`;\r\n // span.classList.add(`fs-${size}`);\r\n // range.surroundContents(span);\r\n // }\r\n // }\r\n // else {\r\n // const span = document.createElement('span');\r\n // span.style.fontSize = `${size}px`;\r\n // span.classList.add(`fs-${size}`);\r\n // span.appendChild(document.createTextNode('\\u200B')); // zero-width space\r\n // range.insertNode(span);\r\n // const newRange = document.createRange();\r\n // newRange.setStart(span.firstChild as Node, 1);\r\n // newRange.collapse(true);\r\n // selection.removeAllRanges();\r\n // selection.addRange(newRange);\r\n // }\r\n // }\r\n\r\n onEditorKeyUp(event: KeyboardEvent) {\r\n // handle Enter or arrow keys\r\n if (event.key === 'Enter' || event.key === 'ArrowLeft' || event.key === 'ArrowRight' || event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'BackSpace' ) {\r\n this.updateCurrentFormat();\r\n }\r\n }\r\n\r\n updateCurrentFormat() {\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) return;\r\n\r\n const anchorNode = selection.anchorNode;\r\n if (!anchorNode) return;\r\n\r\n let parentElem = anchorNode.nodeType === Node.ELEMENT_NODE\r\n ? (anchorNode as HTMLElement)\r\n : (anchorNode.parentElement as HTMLElement);\r\n\r\n if (!parentElem) return;\r\n\r\n let detectedHead = 'P';\r\n let detectedFont = '14'; // default\r\n\r\n // Traverse upward to detect formatting\r\n while (parentElem && parentElem !== this.editor.nativeElement) {\r\n const tag = parentElem.tagName.toUpperCase();\r\n\r\n // Detect heading\r\n if (['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P'].includes(tag)) {\r\n detectedHead = tag;\r\n }\r\n\r\n // Detect inline font-size from style or class\r\n const fontSize = window.getComputedStyle(parentElem).fontSize;\r\n if (fontSize) {\r\n const px = parseInt(fontSize.replace('px', ''), 10);\r\n if (!isNaN(px)) {\r\n detectedFont = px.toString();\r\n break; // found the closest valid font size\r\n }\r\n }\r\n\r\n parentElem = parentElem.parentElement as HTMLElement;\r\n }\r\n\r\n // Update bound properties if changed\r\n let changed = false;\r\n if (this.selectedHead !== detectedHead) {\r\n this.selectedHead = detectedHead;\r\n changed = true;\r\n }\r\n if (this.selectedFont !== detectedFont) {\r\n this.selectedFont = detectedFont;\r\n changed = true;\r\n }\r\n\r\n if (changed) {\r\n this._change.detectChanges();\r\n }\r\n }\r\n\r\n\r\n setFontSize(event: Event) {\r\n const select = event.target as HTMLSelectElement;\r\n const size = select.value;\r\n const selection = window.getSelection();\r\n\r\n if (!selection || selection.rangeCount === 0) return;\r\n\r\n const range = selection.getRangeAt(0);\r\n\r\n if (!range.collapsed) {\r\n // Non-empty selection\r\n const span = document.createElement('span');\r\n span.style.setProperty('font-size', `${size}px`, 'important');\r\n span.classList.add(`fs-${size}`);\r\n try {\r\n range.surroundContents(span);\r\n } catch {\r\n // If selection spans multiple elements, use execCommand fallback\r\n document.execCommand('fontSize', false, '7'); // temporary largest size\r\n document.querySelectorAll('font[size=\"7\"]').forEach((el: HTMLElement) => {\r\n el.removeAttribute('size');\r\n el.style.setProperty('font-size', `${size}px`, 'important');\r\n el.classList.add(`fs-${size}`);\r\n });\r\n }\r\n } else {\r\n // Collapsed selection (no text selected)\r\n const span = document.createElement('span');\r\n span.style.setProperty('font-size', `${size}px`, 'important');\r\n span.classList.add(`fs-${size}`);\r\n span.appendChild(document.createTextNode('\\u200B')); // zero-width space\r\n range.insertNode(span);\r\n\r\n // Move cursor inside span\r\n const newRange = document.createRange();\r\n newRange.setStart(span.firstChild as Node, 1);\r\n newRange.collapse(true);\r\n selection.removeAllRanges();\r\n selection.addRange(newRange);\r\n }\r\n\r\n const content = this.editor.nativeElement.innerHTML;\r\n this.onChange(content);\r\n this.updateCurrentFormat();\r\n this._change.detectChanges();\r\n }\r\n\r\n setHeading(event: Event) {\r\n const select = event.target as HTMLSelectElement;\r\n const tag = select.value;\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) return;\r\n\r\n const range = selection.getRangeAt(0);\r\n const editor = document.getElementById('editor');\r\n if (!editor) return;\r\n\r\n const newElem = document.createElement(tag);\r\n\r\n switch (tag) {\r\n case 'H1':\r\n newElem.style.setProperty('font-size', '32px', 'important');\r\n newElem.style.setProperty('font-weight', 'bold', 'important');\r\n break;\r\n case 'H2':\r\n newElem.style.setProperty('font-size', '28px', 'important');\r\n newElem.style.setProperty('font-weight', 'bold', 'important');\r\n break;\r\n case 'H3':\r\n newElem.style.setProperty('font-size', '24px', 'important');\r\n newElem.style.setProperty('font-weight', 'bold', 'important');\r\n break;\r\n case 'H4':\r\n newElem.style.setProperty('font-size', '20px', 'important');\r\n newElem.style.setProperty('font-weight', 'bold', 'important');\r\n break;\r\n case 'H5':\r\n newElem.style.setProperty('font-size', '18px', 'important');\r\n newElem.style.setProperty('font-weight', '600', 'important');\r\n break;\r\n case 'H6':\r\n newElem.style.setProperty('font-size', '16px', 'important');\r\n newElem.style.setProperty('font-weight', '600', 'important');\r\n break;\r\n case 'P':\r\n default:\r\n newElem.style.setProperty('font-size', '14px', 'important');\r\n newElem.style.setProperty('font-weight', 'normal', 'important');\r\n break;\r\n }\r\n\r\n const selectedText = selection.toString();\r\n if (selectedText) {\r\n newElem.textContent = selectedText;\r\n } else {\r\n newElem.innerHTML = '\\u200B'; // Keeps cursor visible\r\n }\r\n\r\n range.deleteContents();\r\n range.insertNode(newElem);\r\n\r\n const newRange = document.createRange();\r\n newRange.setStart(newElem, newElem.childNodes.length);\r\n newRange.collapse(true);\r\n selection.removeAllRanges();\r\n selection.addRange(newRange);\r\n\r\n editor.focus();\r\n\r\n this._change.detectChanges();\r\n const inputEvent = new Event('input', { bubbles: true });\r\n editor.dispatchEvent(inputEvent);\r\n }\r\n\r\n\r\n format(command: string): void {\r\n document.execCommand(command, false, '');\r\n }\r\n\r\n //Image Section\r\n\r\n allowDrop(event: DragEvent): void {\r\n //event.preventDefault();\r\n }\r\n\r\n // Handle image drag start\r\n drag(event: DragEvent, imageUrl: string): void {\r\n event.dataTransfer?.setData(\"text\", imageUrl);\r\n }\r\n\r\n // Handle drop event in the editor\r\n drop(event: DragEvent): void {\r\n // event.preventDefault();\r\n }\r\n\r\n // bindImageClickEvents() {\r\n // const editorEl = this.editor.nativeElement;\r\n // const images = editorEl.querySelectorAll('img');\r\n\r\n // images.forEach(img => {\r\n // // Avoid double-binding\r\n // img.removeEventListener('click', this.onImageClick as any);\r\n // img.addEventListener('click', this.onImageClick.bind(this));\r\n // });\r\n // }\r\n\r\n // onImageClick(event: MouseEvent) {\r\n // event.stopPropagation();\r\n // const img = event.target as HTMLImageElement;\r\n // this.enableImageResize(img);\r\n // }\r\n\r\n // enableImageResize(img: HTMLImageElement) {\r\n // // Remove any existing resize handles first\r\n // this.removeImageResizeHandles();\r\n\r\n // const wrapper = document.createElement('div');\r\n // wrapper.classList.add('image-resize-wrapper');\r\n // img.parentNode?.insertBefore(wrapper, img);\r\n // wrapper.appendChild(img);\r\n\r\n // // Add resizable handles\r\n // const resizer = document.createElement('div');\r\n // resizer.classList.add('resizer');\r\n // wrapper.appendChild(resizer);\r\n\r\n // // Handle resizing logic\r\n // let startX = 0, startY = 0, startWidth = 0, startHeight = 0;\r\n\r\n // resizer.addEventListener('mousedown', (e: MouseEvent) => {\r\n // e.preventDefault();\r\n // startX = e.clientX;\r\n // startY = e.clientY;\r\n // startWidth = img.width;\r\n // startHeight = img.height;\r\n\r\n // const onMouseMove = (e: MouseEvent) => {\r\n // const newWidth = startWidth + (e.clientX - startX);\r\n // const newHeight = startHeight + (e.clientY - startY);\r\n // img.style.width = `${newWidth}px`;\r\n // img.style.height = `${newHeight}px`;\r\n // };\r\n\r\n // const onMouseUp = () => {\r\n // document.removeEventListener('mousemove', onMouseMove);\r\n // document.removeEventListener('mouseup', onMouseUp);\r\n // };\r\n\r\n // document.addEventListener('mousemove', onMouseMove);\r\n // document.addEventListener('mouseup', onMouseUp);\r\n // });\r\n // }\r\n\r\n // removeImageResizeHandles() {\r\n // const existing = this.editor.nativeElement.querySelector('.image-resize-wrapper');\r\n // if (existing) {\r\n // const img = existing.querySelector('img');\r\n // if (img) {\r\n // existing.parentNode?.insertBefore(img, existing);\r\n // }\r\n // existing.remove();\r\n // }\r\n // }\r\n\r\n\r\n removeImage(index: number): void {\r\n this.uploadedImages.splice(index, 1);\r\n }\r\n\r\n insertImageInEditor(imageUrl: string): void {\r\n const editor = document.querySelector('.editor') as HTMLElement;\r\n if (!editor) {\r\n console.error('Editor element not found.');\r\n return;\r\n }\r\n\r\n // Create image element\r\n const img = document.createElement('img');\r\n img.src = imageUrl;\r\n img.style.maxWidth = '100%';\r\n img.style.display = 'block';\r\n img.style.width = '300px';\r\n img.style.height = 'auto';\r\n\r\n // Create a wrapper around the image to allow resizing\r\n const wrapper = document.createElement('div');\r\n wrapper.style.position = 'relative';\r\n wrapper.style.display = 'inline-block'; // Ensures the wrapper only takes up space for the image\r\n wrapper.style.margin = '10px';\r\n wrapper.style.padding = '5px';\r\n wrapper.style.border = '1px dashed #ccc'; // Optional border to indicate the image area\r\n\r\n // Append the image to the wrapper\r\n wrapper.appendChild(img);\r\n\r\n // Append the wrapper to the editor\r\n editor.appendChild(wrapper);\r\n\r\n // Make the image resizable\r\n this.makeImageResizable(wrapper, img);\r\n\r\n // Optionally, add a text node to maintain cursor position after appending the image\r\n const textNode = document.createTextNode('\\u200B'); // Invisible character to maintain position\r\n editor.appendChild(textNode);\r\n\r\n const range = document.createRange();\r\n range.setStartAfter(wrapper);\r\n range.collapse(true);\r\n\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n }\r\n\r\n makeImageResizable(wrapper: HTMLElement, img: HTMLImageElement): void {\r\n let isResizing = false;\r\n let startX = 0;\r\n let startY = 0;\r\n let startWidth = 0;\r\n let startHeight = 0;\r\n\r\n // Create resize handles for the image\r\n const createResizeHandle = (\r\n cursor: string,\r\n positionStyles: Record<string, string>,\r\n resizeCallback: (deltaX: number, deltaY: number) => void\r\n ) => {\r\n const handle = document.createElement('div');\r\n handle.style.position = 'absolute';\r\n handle.style.width = '10px';\r\n handle.style.height = '10px';\r\n handle.style.background = 'rgba(0, 0, 0, 0.5)';\r\n handle.style.cursor = cursor;\r\n Object.assign(handle.style, positionStyles);\r\n\r\n handle.addEventListener('mousedown', (resizeEvent) => {\r\n isResizing = true;\r\n startX = resizeEvent.clientX;\r\n startY = resizeEvent.clientY;\r\n startWidth = img.offsetWidth;\r\n startHeight = img.offsetHeight;\r\n\r\n const onMouseMove = (moveEvent: MouseEvent) => {\r\n if (isResizing) {\r\n const deltaX = moveEvent.clientX - startX;\r\n const deltaY = moveEvent.clientY - startY;\r\n resizeCallback(deltaX, deltaY);\r\n }\r\n };\r\n\r\n const onMouseUp = () => {\r\n isResizing = false;\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n };\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n });\r\n\r\n wrapper.appendChild(handle);\r\n };\r\n\r\n // Add resizing handles to the wrapper for the image\r\n createResizeHandle(\r\n 'nw-resize',\r\n { top: '-5px', left: '-5px' },\r\n (deltaX, deltaY) => {\r\n img.style.width = `${startWidth - deltaX}px`;\r\n img.style.height = `${startHeight - deltaY}px`;\r\n }\r\n );\r\n createResizeHandle(\r\n 'se-resize',\r\n { bottom: '-5px', right: '-5px' },\r\n (deltaX, deltaY) => {\r\n img.style.width = `${startWidth + deltaX}px`;\r\n img.style.height = `${startHeight + deltaY}px`;\r\n }\r\n );\r\n }\r\n\r\n insertImage(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input?.files) {\r\n Array.from(input.files).forEach(file => {\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const imageUrl = e.target.result;\r\n this.uploadedImages.push(imageUrl); // Store image URL in the array\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n }\r\n\r\n convertImage(file: File): Promise<File> {\r\n return new Promise((resolve, reject) => {\r\n if (file.type !== 'image/png') {\r\n resolve(file); // Return the original file if it's not a PNG\r\n return;\r\n }\r\n\r\n const img = new Image();\r\n const reader = new FileReader();\r\n\r\n reader.onload = (e: any) => {\r\n img.src = e.target.result;\r\n\r\n img.onload = () => {\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n\r\n if (!ctx) {\r\n reject(new Error('Failed to get canvas context'));\r\n return;\r\n }\r\n\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n ctx.drawImage(img, 0, 0);\r\n canvas.toBlob(\r\n blob => {\r\n if (blob) {\r\n const jpgFile = new File([blob], file.name.replace(/\\.png$/, '.jpg'), { type: 'image/jpeg' });\r\n resolve(jpgFile);\r\n } else {\r\n reject(new Error('Failed to convert PNG to JPG'));\r\n }\r\n },\r\n 'image/jpeg',\r\n 0.95 // Quality factor for JPEG\r\n );\r\n };\r\n };\r\n\r\n reader.onerror = () => reject(new Error('Failed to read the file'));\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n insertImageToEditor(event: any): void {\r\n const file = event.target.files[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const imageUrl = e.target.result;\r\n const editor = document.querySelector('.editor') as HTMLElement;\r\n\r\n if (!editor) {\r\n console.error('Editor element not found.');\r\n return;\r\n }\r\n const wrapper = document.createElement('div');\r\n wrapper.contentEditable = 'false';\r\n wrapper.style.position = 'relative';\r\n wrapper.style.display = 'inline-block';\r\n wrapper.style.border = '1px dashed #ccc';\r\n wrapper.style.margin = '10px';\r\n wrapper.style.padding = '5px';\r\n wrapper.style.borderBlockColor = '#007BFF';\r\n const img = document.createElement('img');\r\n img.src = imageUrl;\r\n img.style.maxWidth = '100%';\r\n img.style.display = 'block';\r\n img.style.width = '300px';\r\n img.style.height = 'auto';\r\n wrapper.appendChild(img);\r\n let isResizing = false;\r\n let startX = 0;\r\n let startY = 0;\r\n let startWidth = 0;\r\n let startHeight = 0;\r\n\r\n const createResizeHandle = (\r\n cursor: string,\r\n positionStyles: Record<string, string>,\r\n resizeCallback: (deltaX: number, deltaY: number) => void\r\n ) => {\r\n const handle = document.createElement('div');\r\n handle.style.position = 'absolute';\r\n handle.style.width = '10px';\r\n handle.style.height = '10px';\r\n handle.style.background = 'rgba(0, 0, 0, 0.5)';\r\n handle.style.cursor = cursor;\r\n Object.assign(handle.style, positionStyles);\r\n\r\n handle.addEventListener('mousedown', (resizeEvent) => {\r\n isResizing = true;\r\n startX = resizeEvent.clientX;\r\n startY = resizeEvent.clientY;\r\n startWidth = img.offsetWidth;\r\n startHeight = img.offsetHeight;\r\n\r\n const onMouseMove = (moveEvent: MouseEvent) => {\r\n if (isResizing) {\r\n const deltaX = moveEvent.clientX - startX;\r\n const deltaY = moveEvent.clientY - startY;\r\n resizeCallback(deltaX, deltaY);\r\n }\r\n };\r\n const onMouseUp = () => {\r\n isResizing = false;\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n };\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n });\r\n\r\n wrapper.appendChild(handle);\r\n };\r\n createResizeHandle(\r\n 'nw-resize',\r\n { top: '-5px', left: '-5px' },\r\n (deltaX, deltaY) => {\r\n img.style.width = `${startWidth - deltaX}px`;\r\n img.style.height = `${startHeight - deltaY}px`;\r\n }\r\n );\r\n createResizeHandle(\r\n 'se-resize',\r\n { bottom: '-5px', right: '-5px' },\r\n (deltaX, deltaY) => {\r\n img.style.width = `${startWidth + deltaX}px`;\r\n img.style.height = `${startHeight + deltaY}px`;\r\n }\r\n );\r\n editor.appendChild(wrapper);\r\n const textNode = document.createTextNode('\\u200B');\r\n editor.appendChild(textNode);\r\n const range = document.createRange();\r\n range.setStartAfter(wrapper);\r\n range.collapse(true);\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n\r\n openTableDialog(event: MouseEvent): void {\r\n this.insertMarker();\r\n this.rows = 1;\r\n this.cols = 1;\r\n\r\n const dialogRef = this.dialog.open(this.tableDialog, {\r\n position: {\r\n top: `${event.clientY}px`,\r\n left: `${event.clientX}px`,\r\n },\r\n panelClass: 'custom-dialog-container'\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result) {\r\n this.insertTable(result.rows, result.cols);\r\n }\r\n });\r\n }\r\n\r\n openSignatureDialog(event: MouseEvent): void {\r\n this.insertMarker();\r\n\r\n const dialogRef = this.dialog.open(this.signatureDialog, {\r\n position: {\r\n top: `${event.clientY}px`,\r\n left: `${event.clientX}px`,\r\n },\r\n disableClose: true,\r\n panelClass: 'custom-dialog-container'\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if(result)\r\n // this.editor.nativeElement.innerHTML += `<img src=${result} alt='Signature' />`\r\n this.insertImageInEditor(result);\r\n });\r\n }\r\n\r\n updatePreview(cols: number, rows: number) {\r\n this.cols = cols;\r\n this.rows = rows;\r\n }\r\n\r\n updateSelection(colIndex: number, rowIndex: number, dialogRef: any) {\r\n this.cols = colIndex;\r\n this.rows = rowIndex;\r\n dialogRef.close({ rows: this.rows, cols: this.cols }); // Close dialog with selection\r\n }\r\n\r\n makeFirstRowHeader(): void {\r\n const editor = this.editor.nativeElement;\r\n const selection = window.getSelection();\r\n // Check if selection is inside the editor\r\n if (!this.isSelectionInsideEditor(editor, selection)) {\r\n return;\r\n }\r\n // Find the closest table to the selection\r\n const range = selection.getRangeAt(0);\r\n const selectedNode = range.startContainer;\r\n const table = this.findClosestTable(selectedNode);\r\n if (!table) {\r\n return;\r\n }\r\n // Convert the first row cells to header cells\r\n const firstRow = table.rows[0];\r\n if (firstRow) {\r\n for (let i = 0; i < firstRow.cells.length; i++) {\r\n const cell = firstRow.cells[i];\r\n const th = document.createElement('th');\r\n th.innerHTML = cell.innerHTML;\r\n th.style.textAlign = 'center';\r\n th.style.backgroundColor = '#F1F1F0';\r\n th.style.border = '1px solid black';\r\n th.style.borderCollapse = 'collapse';\r\n th.style.padding = window.getComputedStyle(cell).padding; // Retain padding\r\n th.style.width = window.getComputedStyle(cell).width; // Retain width\r\n th.style.height = window.getComputedStyle(cell).height;\r\n firstRow.replaceChild(th, cell);\r\n }\r\n }\r\n editor.focus();\r\n }\r\n\r\n private findClosestTable(node: Node): HTMLTableElement | null {\r\n while (node && node !== document) {\r\n if (node.nodeName === 'TABLE') {\r\n return node as HTMLTableElement;\r\n }\r\n node = node.parentNode!;\r\n }\r\n return null;\r\n }\r\n\r\n private insertMarker(): void {\r\n const selection = window.getSelection();\r\n if (selection && selection.rangeCount > 0) {\r\n const range = selection.getRangeAt(0).cloneRange();\r\n const marker = document.createElement('span');\r\n marker.id = 'table-marker';\r\n marker.style.display = 'none';\r\n range.insertNode(marker);\r\n }\r\n }\r\n\r\n insertTable(rows: string, cols: string): void {\r\n const rowCount = parseInt(rows, 10);\r\n const colCount = parseInt(cols, 10);\r\n\r\n if (isNaN(rowCount) || isNaN(colCount) || rowCount < 1 || colCount < 1) {\r\n return;\r\n }\r\n\r\n const editor = this.editor.nativeElement;\r\n const marker = editor.querySelector('#table-marker');\r\n\r\n const tableHTML = this.createTableHTML(rowCount, colCount);\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = tableHTML;\r\n const table = tempDiv.firstElementChild;\r\n\r\n if (marker && table) {\r\n marker.parentNode!.replaceChild(table, marker);\r\n this.setCursorToFirstCell(table as HTMLElement);\r\n editor.focus();\r\n } else {\r\n // fallback if no marker, just append\r\n this.appendTable(editor, rowCount, colCount);\r\n }\r\n }\r\n\r\n private createTableHTML(rowCount: number, colCount: number): string {\r\n let tableHTML = '<table style=\"font-size: 14px; width: 100%; border: 1px solid black; border-collapse: collapse;\">';\r\n for (let i = 0; i < rowCount; i++) {\r\n tableHTML += '<tr>';\r\n for (let j = 0; j < colCount; j++) {\r\n tableHTML += `<td style=\"border: 1px solid black; border-collapse: collapse; height: 2em; padding: .4em; \"\r\n role=\"textbox\" contenteditable=\"true\"></td>`;\r\n }\r\n tableHTML += '</tr>';\r\n }\r\n tableHTML += '</table>';\r\n return tableHTML;\r\n }\r\n\r\n private appendTable(editor: HTMLElement, rowCount: number, colCount: number): void {\r\n const tableHTML = this.createTableHTML(rowCount, colCount);\r\n editor.innerHTML += tableHTML;\r\n const lastInsertedTable = editor.querySelector('table:last-child') as HTMLElement;\r\n this.setCursorToFirstCell(lastInsertedTable);\r\n editor.focus();\r\n }\r\n\r\n private isSelectionInsideEditor(editor: HTMLElement, selection: Selection): boolean {\r\n if (!selection.rangeCount) return false;\r\n let node = selection.getRangeAt(0).commonAncestorContainer;\r\n while (node) {\r\n if (node === editor) return true;\r\n node = node.parentNode!;\r\n }\r\n return false;\r\n }\r\n\r\n private setCursorToFirstCell(table: HTMLElement): void {\r\n const firstCell = table.querySelector('tr:first-child td:first-child, tr:first-child th:first-child') as HTMLElement;\r\n if (firstCell) {\r\n firstCell.setAttribute('contenteditable', 'true');\r\n firstCell.focus();\r\n const newRange = document.createRange();\r\n newRange.selectNodeContents(firstCell); // Select the contents of the cell\r\n newRange.collapse(true); // Collapse to the start\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(newRange);\r\n }\r\n }\r\n }\r\n\r\n insertPageBreak(): void {\r\n const pageBreak = `<div style=\"page-break-after: always;\"><br /></div>`;\r\n document.execCommand('insertHTML', false, pageBreak);\r\n }\r\n\r\n submitContent(): void {\r\n const editor = this.editor.nativeElement;\r\n if(!editor) return;\r\n const content = editor.innerHTML; // Get the HTML content from the editor\r\n const plainTextContent = editor.innerText; // Optionally, get plain text content\r\n if (!editor.innerHTML.trim()) {\r\n editor.innerHTML = '<p style=\"font-size:14px; font-weight:normal;\">\\u200B</p>';\r\n // this.ensureParagraphAndFocus();\r\n }\r\n this.onChange(content);\r\n }\r\n\r\n //Signature\r\n\r\n closeSignDialog(dialogRef: any){\r\n dialogRef.close();\r\n }\r\n submitSignDialog(dialogRef: any){\r\n const data = this.signaturePad.toDataURL('image/png');\r\n dialogRef.close(data);\r\n }\r\n}\r\n","<div class=\"dimension\">\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <!-- <mat-icon>format_italic</mat-icon> -->\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <!-- <mat-icon>format_underline</mat-icon> -->\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <!-- <mat-icon>strikethrough_s</mat-icon> -->\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <!-- <mat-icon>format_align_left</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <!-- <mat-icon>format_align_center</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <!-- <mat-icon>format_align_right</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <!-- <mat-icon>format_align_justify</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <!-- <mat-icon>format_list_bulleted</mat-icon> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <!-- <mat-icon>format_list_numbered</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n <button aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <!-- <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon> -->\r\n <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n <button (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg width=\"256px\" height=\"256px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <!-- <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button (click)=\"openSignatureDialog($event)\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"🔍-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"🎨-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n\r\n <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <!-- <button type=\"button\" class=\"normal\" > Close </button> -->\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { RapidTextEditorComponent } from './rapid-text-editor.component';\r\n\r\n//Mat Modules\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SignaturePadModule } from \"angular2-signaturepad\";\r\n\r\n@NgModule({\r\n declarations: [\r\n RapidTextEditorComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n FormsModule, ReactiveFormsModule,\r\n SignaturePadModule\r\n],\r\n exports: [\r\n RapidTextEditorComponent\r\n ]\r\n})\r\nexport class RapidTextEditorModule { }\r\n","/*\r\n * Public API Surface of rapid-text-editor\r\n */\r\n\r\nexport * from './lib/rapid-text-editor.service';\r\nexport * from './lib/rapid-text-editor.component';\r\nexport * from './lib/rapid-text-editor.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rapid-text-editor.mjs","sources":["../../../projects/rapid-text-editor/src/lib/rapid-text-editor.service.ts","../../../projects/rapid-text-editor/src/lib/rapid-text-editor.component.ts","../../../projects/rapid-text-editor/src/lib/rapid-text-editor.component.html","../../../projects/rapid-text-editor/src/lib/rapid-text-editor.module.ts","../../../projects/rapid-text-editor/src/public-api.ts","../../../projects/rapid-text-editor/src/rapid-text-editor.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class RapidTextEditorService {\r\n\r\n constructor() { }\r\n}\r\n","import { Component, ElementRef, Input, Output, OnInit, ViewChild, OnChanges, TemplateRef, forwardRef, EventEmitter, AfterViewInit, SimpleChange, SimpleChanges, Renderer2} from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { ChangeDetectorRef } from '@angular/core';\r\nimport { SignaturePad } from 'angular2-signaturepad';\r\n\r\nexport interface RDEditorOptions {\r\n options: {\r\n textFormat?: boolean,\r\n fontSize?: boolean,\r\n bold: boolean,\r\n italic: boolean,\r\n underline: boolean,\r\n strikethrough: boolean,\r\n alignLeft: boolean,\r\n alignRight: boolean,\r\n alignCenter: boolean,\r\n justify: boolean,\r\n bulletList: boolean,\r\n numberedList: boolean,\r\n image?: boolean,\r\n table?: boolean, \r\n tableHeader?: boolean,\r\n signature?: boolean\r\n }\r\n}\r\n\r\n@Component({\r\n selector: 'rapid-text-editor',\r\n templateUrl: './rapid-text-editor.component.html',\r\n styleUrls: ['./rapid-text-editor.component.scss'],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => RapidTextEditorComponent),\r\n multi: true\r\n }\r\n ]\r\n \r\n})\r\nexport class RapidTextEditorComponent implements ControlValueAccessor, OnInit, AfterViewInit, OnChanges {\r\n\r\n private defaultEditorOptions: RDEditorOptions = {\r\n options: {\r\n textFormat: true,\r\n fontSize: true,\r\n bold: true,\r\n italic: true,\r\n underline: true,\r\n strikethrough: true,\r\n alignLeft: true,\r\n alignRight: true,\r\n alignCenter: true,\r\n justify: true,\r\n bulletList: true,\r\n numberedList: true,\r\n image: true,\r\n table: true,\r\n tableHeader: true,\r\n signature: true\r\n }\r\n };\r\n\r\n\r\n @Input() contentCapture: boolean = false;\r\n @Input() height: string = \"auto\";\r\n @Input() width: string = \"auto\";\r\n @Input() iconColor: string = '#333333'\r\n @Input('editorOptions') editorOptions!: RDEditorOptions;\r\n @Output() contentChange = new EventEmitter<string>();\r\n @ViewChild('editor', { static: true }) editor!: ElementRef;\r\n @ViewChild('tableDialog') tableDialog!: TemplateRef<any>;\r\n @ViewChild('signatureDialog') signatureDialog!: TemplateRef<any>;\r\n @ViewChild('sigPad') signaturePad!: SignaturePad;\r\n\r\n private editorContent: string = '';\r\n rows: number = 1;\r\n cols: number = 1;\r\n grid = Array(49).fill(0);\r\n Math = Math;\r\n uploadedImages: string[] = [];\r\n \r\n signaturePadOptions = {\r\n minWidth: 1,\r\n canvasWidth: 400,\r\n canvasHeight: 200\r\n };\r\n\r\n constructor(private dialog: MatDialog, \r\n private el: ElementRef, \r\n private renderer: Renderer2, \r\n private elRef: ElementRef,\r\n private _change: ChangeDetectorRef\r\n ) {\r\n console.log('Build -1')\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.contentCapture) {\r\n console.log('Content capture is enabled.');\r\n } else {\r\n console.log('Content capture is disabled.');\r\n }\r\n if(!this.editorOptions){\r\n this.editorOptions = this.defaultEditorOptions;\r\n }\r\n // this.initializeEditorContent('');\r\n // this.ensureParagraphAndFocus();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['height'] || changes['width']) {\r\n this.applyDimensions();\r\n }\r\n }\r\n\r\n private applyDimensions(): void {\r\n const dimensionElement = this.elRef.nativeElement.querySelector('.dimension');\r\n if (this.width) {\r\n this.renderer.setStyle(dimensionElement, 'width', this.width);\r\n }\r\n const editorElement = this.elRef.nativeElement.querySelector('.editor');\r\n if(this.height){\r\n this.renderer.setStyle(editorElement, 'height', this.height);\r\n } \r\n }\r\n\r\n ngAfterViewInit(): void {\r\n\r\n const editor = this.el.nativeElement.querySelector('.editor');\r\n \r\n if (editor && (editor.innerHTML.trim() === \"\" || editor.innerHTML.trim() === \"<br>\")) {\r\n editor.focus();\r\n const range = document.createRange();\r\n range.setStart(editor, 0);\r\n range.collapse(true);\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n editor.innerHTML = '<p style=\"font-size:14px; font-weight:normal;\">\\u200B</p>'\r\n }\r\n else {\r\n console.error('Editor element not found.');\r\n }\r\n\r\n const observer = new MutationObserver(() => this.updateCurrentFormat());\r\n observer.observe(this.editor.nativeElement, {\r\n childList: true,\r\n characterData: true,\r\n subtree: true\r\n });\r\n\r\n this.editor.nativeElement.blur();\r\n\r\n // this.initializeEditorContent('');\r\n // this.ensureParagraphAndFocus();\r\n\r\n }\r\n\r\n ensureParagraphAndFocus() {\r\n\r\n const editor = document.getElementById('editor');\r\n if (!editor) return;\r\n\r\n // If editor is empty or doesn't have a <p> as the last element\r\n if (!editor.innerHTML.trim()) {\r\n editor.innerHTML = '<p style=\"font-size:14px; font-weight:normal;\">\\u200B</p>';\r\n } else {\r\n const firstChild = editor.firstChild as HTMLElement;\r\n if (!firstChild || firstChild.tagName !== 'P') {\r\n const content = editor.innerHTML;\r\n editor.innerHTML = `<p style=\"font-size:14px; font-weight:normal;\">${content}</p>`;\r\n }\r\n }\r\n\r\n const p = editor.querySelector('p');\r\n if (p) {\r\n const range = document.createRange();\r\n range.selectNodeContents(p);\r\n range.collapse(true); \r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n }\r\n\r\n // Focus the editor\r\n editor.focus();\r\n }\r\n\r\n initializeEditorContent(data: string) {\r\n const editor = document.getElementById('editor');\r\n if (!editor) return;\r\n\r\n // If content has no HTML tags, wrap with <p>\r\n const hasHtmlTags = /<[^>]+>/.test(data);\r\n if (!hasHtmlTags) {\r\n editor.innerHTML = `<p style=\"font-size:14px; font-weight: normal;\">${data}</p>`;\r\n // this.ensureParagraphAndFocus();\r\n } else {\r\n editor.innerHTML = data;\r\n }\r\n \r\n }\r\n\r\n\r\n onContentChange(): void {\r\n if (this.contentCapture) {\r\n const editor = this.el.nativeElement.querySelector('.editor');\r\n if (editor) {\r\n this.editorContent = editor.innerHTML;\r\n console.log('Captured Content (Child):', this.editorContent);\r\n this.contentChange.emit(this.editorContent);\r\n } else {\r\n console.error('Editor element not found.');\r\n }\r\n }\r\n }\r\n\r\n getContent(): string {\r\n return this.editorContent;\r\n }\r\n\r\n selectedHead: any = 'P';\r\n selectedFont: any = '14';\r\n\r\n public onChange = (content: string) => {\r\n if (this.editor.nativeElement.innerHTML == '<br>' || this.editor.nativeElement.innerHTML == '') {\r\n this.selectedHead = 'P';\r\n this.selectedFont = '14';\r\n }\r\n this._change.detectChanges();\r\n };\r\n\r\n private onTouched = () => { };\r\n\r\n writeValue(content: string): void {\r\n if (this.editor && this.editor.nativeElement) {\r\n this.editor.nativeElement.innerHTML = content || '';\r\n }\r\n }\r\n\r\n registerOnChange(fn: (content: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n onBlur() {\r\n this.onTouched();\r\n }\r\n\r\n // setFontSize(event: Event) {\r\n // const select = event.target as HTMLSelectElement;\r\n // const size = select.value;\r\n // const selection = window.getSelection();\r\n // if (!selection || selection.rangeCount === 0) return;\r\n // const range = selection.getRangeAt(0);\r\n // if (!range.collapsed) {\r\n // const parent = selection.anchorNode?.parentElement;\r\n // if (\r\n // parent &&\r\n // parent.classList &&\r\n // Array.from(parent.classList).some((c: string) => c.startsWith('fs-'))\r\n // ) {\r\n // parent.style.fontSize = `${size}px`;\r\n // parent.className = `fs-${size}`;\r\n // } else {\r\n // const span = document.createElement('span');\r\n // span.style.fontSize = `${size}px`;\r\n // span.classList.add(`fs-${size}`);\r\n // range.surroundContents(span);\r\n // }\r\n // }\r\n // else {\r\n // const span = document.createElement('span');\r\n // span.style.fontSize = `${size}px`;\r\n // span.classList.add(`fs-${size}`);\r\n // span.appendChild(document.createTextNode('\\u200B')); // zero-width space\r\n // range.insertNode(span);\r\n // const newRange = document.createRange();\r\n // newRange.setStart(span.firstChild as Node, 1);\r\n // newRange.collapse(true);\r\n // selection.removeAllRanges();\r\n // selection.addRange(newRange);\r\n // }\r\n // }\r\n\r\n onEditorKeyUp(event: KeyboardEvent) {\r\n // handle Enter or arrow keys\r\n if (event.key === 'Enter' || event.key === 'ArrowLeft' || event.key === 'ArrowRight' || event.key === 'ArrowUp' || event.key === 'ArrowDown' || event.key === 'BackSpace' ) {\r\n this.updateCurrentFormat();\r\n }\r\n }\r\n\r\n updateCurrentFormat() {\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) return;\r\n\r\n const anchorNode = selection.anchorNode;\r\n if (!anchorNode) return;\r\n\r\n let parentElem = anchorNode.nodeType === Node.ELEMENT_NODE\r\n ? (anchorNode as HTMLElement)\r\n : (anchorNode.parentElement as HTMLElement);\r\n\r\n if (!parentElem) return;\r\n\r\n let detectedHead = 'P';\r\n let detectedFont = '14'; // default\r\n\r\n // Traverse upward to detect formatting\r\n while (parentElem && parentElem !== this.editor.nativeElement) {\r\n const tag = parentElem.tagName.toUpperCase();\r\n\r\n // Detect heading\r\n if (['H1', 'H2', 'H3', 'H4', 'H5', 'H6', 'P'].includes(tag)) {\r\n detectedHead = tag;\r\n }\r\n\r\n // Detect inline font-size from style or class\r\n const fontSize = window.getComputedStyle(parentElem).fontSize;\r\n if (fontSize) {\r\n const px = parseInt(fontSize.replace('px', ''), 10);\r\n if (!isNaN(px)) {\r\n detectedFont = px.toString();\r\n break; // found the closest valid font size\r\n }\r\n }\r\n\r\n parentElem = parentElem.parentElement as HTMLElement;\r\n }\r\n\r\n // Update bound properties if changed\r\n let changed = false;\r\n if (this.selectedHead !== detectedHead) {\r\n this.selectedHead = detectedHead;\r\n changed = true;\r\n }\r\n if (this.selectedFont !== detectedFont) {\r\n this.selectedFont = detectedFont;\r\n changed = true;\r\n }\r\n\r\n if (changed) {\r\n this._change.detectChanges();\r\n }\r\n }\r\n\r\n\r\n setFontSize(event: Event) {\r\n const select = event.target as HTMLSelectElement;\r\n const size = select.value;\r\n const selection = window.getSelection();\r\n\r\n if (!selection || selection.rangeCount === 0) return;\r\n\r\n const range = selection.getRangeAt(0);\r\n\r\n if (!range.collapsed) {\r\n // Non-empty selection\r\n const span = document.createElement('span');\r\n span.style.setProperty('font-size', `${size}px`, 'important');\r\n span.classList.add(`fs-${size}`);\r\n try {\r\n range.surroundContents(span);\r\n } catch {\r\n // If selection spans multiple elements, use execCommand fallback\r\n document.execCommand('fontSize', false, '7'); // temporary largest size\r\n document.querySelectorAll('font[size=\"7\"]').forEach((el: HTMLElement) => {\r\n el.removeAttribute('size');\r\n el.style.setProperty('font-size', `${size}px`, 'important');\r\n el.classList.add(`fs-${size}`);\r\n });\r\n }\r\n } else {\r\n // Collapsed selection (no text selected)\r\n const span = document.createElement('span');\r\n span.style.setProperty('font-size', `${size}px`, 'important');\r\n span.classList.add(`fs-${size}`);\r\n span.appendChild(document.createTextNode('\\u200B')); // zero-width space\r\n range.insertNode(span);\r\n\r\n // Move cursor inside span\r\n const newRange = document.createRange();\r\n newRange.setStart(span.firstChild as Node, 1);\r\n newRange.collapse(true);\r\n selection.removeAllRanges();\r\n selection.addRange(newRange);\r\n }\r\n\r\n const content = this.editor.nativeElement.innerHTML;\r\n this.onChange(content);\r\n this.updateCurrentFormat();\r\n this._change.detectChanges();\r\n }\r\n\r\n setHeading(event: Event) {\r\n const select = event.target as HTMLSelectElement;\r\n const tag = select.value;\r\n const selection = window.getSelection();\r\n if (!selection || selection.rangeCount === 0) return;\r\n\r\n const range = selection.getRangeAt(0);\r\n const editor = document.getElementById('editor');\r\n if (!editor) return;\r\n\r\n const newElem = document.createElement(tag);\r\n\r\n switch (tag) {\r\n case 'H1':\r\n newElem.style.setProperty('font-size', '32px', 'important');\r\n newElem.style.setProperty('font-weight', 'bold', 'important');\r\n break;\r\n case 'H2':\r\n newElem.style.setProperty('font-size', '28px', 'important');\r\n newElem.style.setProperty('font-weight', 'bold', 'important');\r\n break;\r\n case 'H3':\r\n newElem.style.setProperty('font-size', '24px', 'important');\r\n newElem.style.setProperty('font-weight', 'bold', 'important');\r\n break;\r\n case 'H4':\r\n newElem.style.setProperty('font-size', '20px', 'important');\r\n newElem.style.setProperty('font-weight', 'bold', 'important');\r\n break;\r\n case 'H5':\r\n newElem.style.setProperty('font-size', '18px', 'important');\r\n newElem.style.setProperty('font-weight', '600', 'important');\r\n break;\r\n case 'H6':\r\n newElem.style.setProperty('font-size', '16px', 'important');\r\n newElem.style.setProperty('font-weight', '600', 'important');\r\n break;\r\n case 'P':\r\n default:\r\n newElem.style.setProperty('font-size', '14px', 'important');\r\n newElem.style.setProperty('font-weight', 'normal', 'important');\r\n break;\r\n }\r\n\r\n const selectedText = selection.toString();\r\n if (selectedText) {\r\n newElem.textContent = selectedText;\r\n } else {\r\n newElem.innerHTML = '\\u200B'; // Keeps cursor visible\r\n }\r\n\r\n range.deleteContents();\r\n range.insertNode(newElem);\r\n\r\n const newRange = document.createRange();\r\n newRange.setStart(newElem, newElem.childNodes.length);\r\n newRange.collapse(true);\r\n selection.removeAllRanges();\r\n selection.addRange(newRange);\r\n\r\n editor.focus();\r\n\r\n this._change.detectChanges();\r\n const inputEvent = new Event('input', { bubbles: true });\r\n editor.dispatchEvent(inputEvent);\r\n }\r\n\r\n\r\n format(command: string): void {\r\n document.execCommand(command, false, '');\r\n }\r\n\r\n //Image Section\r\n\r\n allowDrop(event: DragEvent): void {\r\n //event.preventDefault();\r\n }\r\n\r\n // Handle image drag start\r\n drag(event: DragEvent, imageUrl: string): void {\r\n event.dataTransfer?.setData(\"text\", imageUrl);\r\n }\r\n\r\n // Handle drop event in the editor\r\n drop(event: DragEvent): void {\r\n // event.preventDefault();\r\n }\r\n\r\n // bindImageClickEvents() {\r\n // const editorEl = this.editor.nativeElement;\r\n // const images = editorEl.querySelectorAll('img');\r\n\r\n // images.forEach(img => {\r\n // // Avoid double-binding\r\n // img.removeEventListener('click', this.onImageClick as any);\r\n // img.addEventListener('click', this.onImageClick.bind(this));\r\n // });\r\n // }\r\n\r\n // onImageClick(event: MouseEvent) {\r\n // event.stopPropagation();\r\n // const img = event.target as HTMLImageElement;\r\n // this.enableImageResize(img);\r\n // }\r\n\r\n // enableImageResize(img: HTMLImageElement) {\r\n // // Remove any existing resize handles first\r\n // this.removeImageResizeHandles();\r\n\r\n // const wrapper = document.createElement('div');\r\n // wrapper.classList.add('image-resize-wrapper');\r\n // img.parentNode?.insertBefore(wrapper, img);\r\n // wrapper.appendChild(img);\r\n\r\n // // Add resizable handles\r\n // const resizer = document.createElement('div');\r\n // resizer.classList.add('resizer');\r\n // wrapper.appendChild(resizer);\r\n\r\n // // Handle resizing logic\r\n // let startX = 0, startY = 0, startWidth = 0, startHeight = 0;\r\n\r\n // resizer.addEventListener('mousedown', (e: MouseEvent) => {\r\n // e.preventDefault();\r\n // startX = e.clientX;\r\n // startY = e.clientY;\r\n // startWidth = img.width;\r\n // startHeight = img.height;\r\n\r\n // const onMouseMove = (e: MouseEvent) => {\r\n // const newWidth = startWidth + (e.clientX - startX);\r\n // const newHeight = startHeight + (e.clientY - startY);\r\n // img.style.width = `${newWidth}px`;\r\n // img.style.height = `${newHeight}px`;\r\n // };\r\n\r\n // const onMouseUp = () => {\r\n // document.removeEventListener('mousemove', onMouseMove);\r\n // document.removeEventListener('mouseup', onMouseUp);\r\n // };\r\n\r\n // document.addEventListener('mousemove', onMouseMove);\r\n // document.addEventListener('mouseup', onMouseUp);\r\n // });\r\n // }\r\n\r\n // removeImageResizeHandles() {\r\n // const existing = this.editor.nativeElement.querySelector('.image-resize-wrapper');\r\n // if (existing) {\r\n // const img = existing.querySelector('img');\r\n // if (img) {\r\n // existing.parentNode?.insertBefore(img, existing);\r\n // }\r\n // existing.remove();\r\n // }\r\n // }\r\n\r\n\r\n removeImage(index: number): void {\r\n this.uploadedImages.splice(index, 1);\r\n }\r\n\r\n insertImageInEditor(imageUrl: string): void {\r\n const editor = document.querySelector('.editor') as HTMLElement;\r\n if (!editor) {\r\n console.error('Editor element not found.');\r\n return;\r\n }\r\n\r\n // Create image element\r\n const img = document.createElement('img');\r\n img.src = imageUrl;\r\n img.style.maxWidth = '100%';\r\n img.style.display = 'block';\r\n img.style.width = '300px';\r\n img.style.height = 'auto';\r\n\r\n // Create a wrapper around the image to allow resizing\r\n const wrapper = document.createElement('div');\r\n wrapper.style.position = 'relative';\r\n wrapper.style.display = 'inline-block'; // Ensures the wrapper only takes up space for the image\r\n wrapper.style.margin = '10px';\r\n wrapper.style.padding = '5px';\r\n wrapper.style.border = '1px dashed #ccc'; // Optional border to indicate the image area\r\n\r\n // Append the image to the wrapper\r\n wrapper.appendChild(img);\r\n\r\n // Append the wrapper to the editor\r\n editor.appendChild(wrapper);\r\n\r\n // Make the image resizable\r\n this.makeImageResizable(wrapper, img);\r\n\r\n // Optionally, add a text node to maintain cursor position after appending the image\r\n const textNode = document.createTextNode('\\u200B'); // Invisible character to maintain position\r\n editor.appendChild(textNode);\r\n\r\n const range = document.createRange();\r\n range.setStartAfter(wrapper);\r\n range.collapse(true);\r\n\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n }\r\n\r\n makeImageResizable(wrapper: HTMLElement, img: HTMLImageElement): void {\r\n let isResizing = false;\r\n let startX = 0;\r\n let startY = 0;\r\n let startWidth = 0;\r\n let startHeight = 0;\r\n\r\n // Create resize handles for the image\r\n const createResizeHandle = (\r\n cursor: string,\r\n positionStyles: Record<string, string>,\r\n resizeCallback: (deltaX: number, deltaY: number) => void\r\n ) => {\r\n const handle = document.createElement('div');\r\n handle.style.position = 'absolute';\r\n handle.style.width = '10px';\r\n handle.style.height = '10px';\r\n handle.style.background = 'rgba(0, 0, 0, 0.5)';\r\n handle.style.cursor = cursor;\r\n Object.assign(handle.style, positionStyles);\r\n\r\n handle.addEventListener('mousedown', (resizeEvent) => {\r\n isResizing = true;\r\n startX = resizeEvent.clientX;\r\n startY = resizeEvent.clientY;\r\n startWidth = img.offsetWidth;\r\n startHeight = img.offsetHeight;\r\n\r\n const onMouseMove = (moveEvent: MouseEvent) => {\r\n if (isResizing) {\r\n const deltaX = moveEvent.clientX - startX;\r\n const deltaY = moveEvent.clientY - startY;\r\n resizeCallback(deltaX, deltaY);\r\n }\r\n };\r\n\r\n const onMouseUp = () => {\r\n isResizing = false;\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n };\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n });\r\n\r\n wrapper.appendChild(handle);\r\n };\r\n\r\n // Add resizing handles to the wrapper for the image\r\n createResizeHandle(\r\n 'nw-resize',\r\n { top: '-5px', left: '-5px' },\r\n (deltaX, deltaY) => {\r\n img.style.width = `${startWidth - deltaX}px`;\r\n img.style.height = `${startHeight - deltaY}px`;\r\n }\r\n );\r\n createResizeHandle(\r\n 'se-resize',\r\n { bottom: '-5px', right: '-5px' },\r\n (deltaX, deltaY) => {\r\n img.style.width = `${startWidth + deltaX}px`;\r\n img.style.height = `${startHeight + deltaY}px`;\r\n }\r\n );\r\n }\r\n\r\n insertImage(event: Event): void {\r\n const input = event.target as HTMLInputElement;\r\n if (input?.files) {\r\n Array.from(input.files).forEach(file => {\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const imageUrl = e.target.result;\r\n this.uploadedImages.push(imageUrl); // Store image URL in the array\r\n };\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n }\r\n\r\n convertImage(file: File): Promise<File> {\r\n return new Promise((resolve, reject) => {\r\n if (file.type !== 'image/png') {\r\n resolve(file); // Return the original file if it's not a PNG\r\n return;\r\n }\r\n\r\n const img = new Image();\r\n const reader = new FileReader();\r\n\r\n reader.onload = (e: any) => {\r\n img.src = e.target.result;\r\n\r\n img.onload = () => {\r\n const canvas = document.createElement('canvas');\r\n const ctx = canvas.getContext('2d');\r\n\r\n if (!ctx) {\r\n reject(new Error('Failed to get canvas context'));\r\n return;\r\n }\r\n\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n\r\n ctx.drawImage(img, 0, 0);\r\n canvas.toBlob(\r\n blob => {\r\n if (blob) {\r\n const jpgFile = new File([blob], file.name.replace(/\\.png$/, '.jpg'), { type: 'image/jpeg' });\r\n resolve(jpgFile);\r\n } else {\r\n reject(new Error('Failed to convert PNG to JPG'));\r\n }\r\n },\r\n 'image/jpeg',\r\n 0.95 // Quality factor for JPEG\r\n );\r\n };\r\n };\r\n\r\n reader.onerror = () => reject(new Error('Failed to read the file'));\r\n reader.readAsDataURL(file);\r\n });\r\n }\r\n insertImageToEditor(event: any): void {\r\n const file = event.target.files[0];\r\n if (file) {\r\n const reader = new FileReader();\r\n reader.onload = (e: any) => {\r\n const imageUrl = e.target.result;\r\n const editor = document.querySelector('.editor') as HTMLElement;\r\n\r\n if (!editor) {\r\n console.error('Editor element not found.');\r\n return;\r\n }\r\n const wrapper = document.createElement('div');\r\n wrapper.contentEditable = 'false';\r\n wrapper.style.position = 'relative';\r\n wrapper.style.display = 'inline-block';\r\n wrapper.style.border = '1px dashed #ccc';\r\n wrapper.style.margin = '10px';\r\n wrapper.style.padding = '5px';\r\n wrapper.style.borderBlockColor = '#007BFF';\r\n const img = document.createElement('img');\r\n img.src = imageUrl;\r\n img.style.maxWidth = '100%';\r\n img.style.display = 'block';\r\n img.style.width = '300px';\r\n img.style.height = 'auto';\r\n wrapper.appendChild(img);\r\n let isResizing = false;\r\n let startX = 0;\r\n let startY = 0;\r\n let startWidth = 0;\r\n let startHeight = 0;\r\n\r\n const createResizeHandle = (\r\n cursor: string,\r\n positionStyles: Record<string, string>,\r\n resizeCallback: (deltaX: number, deltaY: number) => void\r\n ) => {\r\n const handle = document.createElement('div');\r\n handle.style.position = 'absolute';\r\n handle.style.width = '10px';\r\n handle.style.height = '10px';\r\n handle.style.background = 'rgba(0, 0, 0, 0.5)';\r\n handle.style.cursor = cursor;\r\n Object.assign(handle.style, positionStyles);\r\n\r\n handle.addEventListener('mousedown', (resizeEvent) => {\r\n isResizing = true;\r\n startX = resizeEvent.clientX;\r\n startY = resizeEvent.clientY;\r\n startWidth = img.offsetWidth;\r\n startHeight = img.offsetHeight;\r\n\r\n const onMouseMove = (moveEvent: MouseEvent) => {\r\n if (isResizing) {\r\n const deltaX = moveEvent.clientX - startX;\r\n const deltaY = moveEvent.clientY - startY;\r\n resizeCallback(deltaX, deltaY);\r\n }\r\n };\r\n const onMouseUp = () => {\r\n isResizing = false;\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n };\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n });\r\n\r\n wrapper.appendChild(handle);\r\n };\r\n createResizeHandle(\r\n 'nw-resize',\r\n { top: '-5px', left: '-5px' },\r\n (deltaX, deltaY) => {\r\n img.style.width = `${startWidth - deltaX}px`;\r\n img.style.height = `${startHeight - deltaY}px`;\r\n }\r\n );\r\n createResizeHandle(\r\n 'se-resize',\r\n { bottom: '-5px', right: '-5px' },\r\n (deltaX, deltaY) => {\r\n img.style.width = `${startWidth + deltaX}px`;\r\n img.style.height = `${startHeight + deltaY}px`;\r\n }\r\n );\r\n editor.appendChild(wrapper);\r\n const textNode = document.createTextNode('\\u200B');\r\n editor.appendChild(textNode);\r\n const range = document.createRange();\r\n range.setStartAfter(wrapper);\r\n range.collapse(true);\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n }\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n }\r\n\r\n openTableDialog(event: MouseEvent): void {\r\n this.insertMarker();\r\n this.rows = 1;\r\n this.cols = 1;\r\n\r\n const dialogRef = this.dialog.open(this.tableDialog, {\r\n position: {\r\n top: `${event.clientY}px`,\r\n left: `${event.clientX}px`,\r\n },\r\n panelClass: 'custom-dialog-container'\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if (result) {\r\n this.insertTable(result.rows, result.cols);\r\n }\r\n });\r\n }\r\n\r\n openSignatureDialog(event: MouseEvent): void {\r\n this.insertMarker();\r\n\r\n const dialogRef = this.dialog.open(this.signatureDialog, {\r\n position: {\r\n // top: `${event.clientY}px`,\r\n // left: `${event.clientX}px`,\r\n top: '30px'\r\n },\r\n disableClose: true,\r\n panelClass: 'custom-dialog-container'\r\n });\r\n\r\n dialogRef.afterClosed().subscribe((result) => {\r\n if(result)\r\n // this.editor.nativeElement.innerHTML += `<img src=${result} alt='Signature' />`\r\n this.insertImageInEditor(result);\r\n });\r\n }\r\n\r\n updatePreview(cols: number, rows: number) {\r\n this.cols = cols;\r\n this.rows = rows;\r\n }\r\n\r\n updateSelection(colIndex: number, rowIndex: number, dialogRef: any) {\r\n this.cols = colIndex;\r\n this.rows = rowIndex;\r\n dialogRef.close({ rows: this.rows, cols: this.cols }); // Close dialog with selection\r\n }\r\n\r\n makeFirstRowHeader(): void {\r\n const editor = this.editor.nativeElement;\r\n const selection = window.getSelection();\r\n // Check if selection is inside the editor\r\n if (!this.isSelectionInsideEditor(editor, selection)) {\r\n return;\r\n }\r\n // Find the closest table to the selection\r\n const range = selection.getRangeAt(0);\r\n const selectedNode = range.startContainer;\r\n const table = this.findClosestTable(selectedNode);\r\n if (!table) {\r\n return;\r\n }\r\n // Convert the first row cells to header cells\r\n const firstRow = table.rows[0];\r\n if (firstRow) {\r\n for (let i = 0; i < firstRow.cells.length; i++) {\r\n const cell = firstRow.cells[i];\r\n const th = document.createElement('th');\r\n th.innerHTML = cell.innerHTML;\r\n th.style.textAlign = 'center';\r\n th.style.backgroundColor = '#F1F1F0';\r\n th.style.border = '1px solid black';\r\n th.style.borderCollapse = 'collapse';\r\n th.style.padding = window.getComputedStyle(cell).padding; // Retain padding\r\n th.style.width = window.getComputedStyle(cell).width; // Retain width\r\n th.style.height = window.getComputedStyle(cell).height;\r\n firstRow.replaceChild(th, cell);\r\n }\r\n }\r\n editor.focus();\r\n }\r\n\r\n private findClosestTable(node: Node): HTMLTableElement | null {\r\n while (node && node !== document) {\r\n if (node.nodeName === 'TABLE') {\r\n return node as HTMLTableElement;\r\n }\r\n node = node.parentNode!;\r\n }\r\n return null;\r\n }\r\n\r\n private insertMarker(): void {\r\n const selection = window.getSelection();\r\n if (selection && selection.rangeCount > 0) {\r\n const range = selection.getRangeAt(0).cloneRange();\r\n const marker = document.createElement('span');\r\n marker.id = 'table-marker';\r\n marker.style.display = 'none';\r\n range.insertNode(marker);\r\n }\r\n }\r\n\r\n insertTable(rows: string, cols: string): void {\r\n const rowCount = parseInt(rows, 10);\r\n const colCount = parseInt(cols, 10);\r\n\r\n if (isNaN(rowCount) || isNaN(colCount) || rowCount < 1 || colCount < 1) {\r\n return;\r\n }\r\n\r\n const editor = this.editor.nativeElement;\r\n const marker = editor.querySelector('#table-marker');\r\n\r\n const tableHTML = this.createTableHTML(rowCount, colCount);\r\n const tempDiv = document.createElement('div');\r\n tempDiv.innerHTML = tableHTML;\r\n const table = tempDiv.firstElementChild;\r\n\r\n if (marker && table) {\r\n marker.parentNode!.replaceChild(table, marker);\r\n this.setCursorToFirstCell(table as HTMLElement);\r\n editor.focus();\r\n } else {\r\n // fallback if no marker, just append\r\n this.appendTable(editor, rowCount, colCount);\r\n }\r\n }\r\n\r\n private createTableHTML(rowCount: number, colCount: number): string {\r\n let tableHTML = '<table style=\"font-size: 14px; width: 100%; border: 1px solid black; border-collapse: collapse;\">';\r\n for (let i = 0; i < rowCount; i++) {\r\n tableHTML += '<tr>';\r\n for (let j = 0; j < colCount; j++) {\r\n tableHTML += `<td style=\"border: 1px solid black; border-collapse: collapse; height: 2em; padding: .4em; \"\r\n role=\"textbox\" contenteditable=\"true\"></td>`;\r\n }\r\n tableHTML += '</tr>';\r\n }\r\n tableHTML += '</table>';\r\n return tableHTML;\r\n }\r\n\r\n private appendTable(editor: HTMLElement, rowCount: number, colCount: number): void {\r\n const tableHTML = this.createTableHTML(rowCount, colCount);\r\n editor.innerHTML += tableHTML;\r\n const lastInsertedTable = editor.querySelector('table:last-child') as HTMLElement;\r\n this.setCursorToFirstCell(lastInsertedTable);\r\n editor.focus();\r\n }\r\n\r\n private isSelectionInsideEditor(editor: HTMLElement, selection: Selection): boolean {\r\n if (!selection.rangeCount) return false;\r\n let node = selection.getRangeAt(0).commonAncestorContainer;\r\n while (node) {\r\n if (node === editor) return true;\r\n node = node.parentNode!;\r\n }\r\n return false;\r\n }\r\n\r\n private setCursorToFirstCell(table: HTMLElement): void {\r\n const firstCell = table.querySelector('tr:first-child td:first-child, tr:first-child th:first-child') as HTMLElement;\r\n if (firstCell) {\r\n firstCell.setAttribute('contenteditable', 'true');\r\n firstCell.focus();\r\n const newRange = document.createRange();\r\n newRange.selectNodeContents(firstCell); // Select the contents of the cell\r\n newRange.collapse(true); // Collapse to the start\r\n const selection = window.getSelection();\r\n if (selection) {\r\n selection.removeAllRanges();\r\n selection.addRange(newRange);\r\n }\r\n }\r\n }\r\n\r\n insertPageBreak(): void {\r\n const pageBreak = `<div style=\"page-break-after: always;\"><br /></div>`;\r\n document.execCommand('insertHTML', false, pageBreak);\r\n }\r\n\r\n submitContent(): void {\r\n const editor = this.editor.nativeElement;\r\n if(!editor) return;\r\n const content = editor.innerHTML; // Get the HTML content from the editor\r\n const plainTextContent = editor.innerText; // Optionally, get plain text content\r\n if (!editor.innerHTML.trim()) {\r\n editor.innerHTML = '<p style=\"font-size:14px; font-weight:normal;\">\\u200B</p>';\r\n // this.ensureParagraphAndFocus();\r\n }\r\n this.onChange(content);\r\n }\r\n\r\n //Signature\r\n\r\n closeSignDialog(dialogRef: any){\r\n dialogRef.close();\r\n }\r\n submitSignDialog(dialogRef: any){\r\n const data = this.signaturePad.toDataURL('image/png');\r\n dialogRef.close(data);\r\n }\r\n}\r\n","<div class=\"dimension\">\r\n <div class=\"rich-text-editor\">\r\n <!-- Toolbar -->\r\n <div class=\"toolbar\">\r\n <select *ngIf=\"editorOptions?.options?.textFormat ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedHead\" (change)=\"setHeading($event)\">\r\n <option value=\"P\" style=\"font-size: 14px !important;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px !important; font-weight: bold !important;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px !important; font-weight: bold !important;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px !important; font-weight: bold !important;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px !important; font-weight: bold !important;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px !important; font-weight: 600 !important;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px !important; font-weight: 600 !important;\">H6</option>\r\n </select>\r\n <select *ngIf=\"editorOptions?.options?.fontSize ?? true\" class=\"select-wrapper\" [(ngModel)]=\"selectedFont\"\r\n (change)=\"setFontSize($event)\">\r\n <option style=\"font-size: 12px !important;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px !important;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px !important;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px !important;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px !important;\" value=\"20\">20px</option> \r\n <option style=\"font-size: 24px !important;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px !important;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px !important;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px !important;\" value=\"48\">48px</option>\r\n </select>\r\n <button *ngIf=\"editorOptions?.options?.bold ?? true\" (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\" title=\"Bold\" >\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"-6.5 0 28 32\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <title>bold</title> <path d=\"M0 25.531v1.344c1.063-0.031 1.938-0.063 2.563-0.094 0.625 0 1.094-0.031 1.313-0.031 1.656-0.125 3.063-0.219 4.281-0.188l2.813 0.063c2.438 0 4.25-0.313 5.75-1 0.719-0.344 1.344-0.844 1.969-1.531 0.469-0.469 0.813-1.031 1.031-1.656 0.25-0.844 0.375-1.594 0.375-2.281 0-2.5-1.719-4.625-5.094-5.406 0.531-0.25 1.031-0.5 1.375-0.688s0.625-0.313 0.781-0.438c1.188-0.875 1.781-1.906 1.781-3.281 0-0.594-0.094-1.188-0.281-1.719-0.375-1.094-1.219-2-2.406-2.563-0.531-0.313-1.031-0.469-1.375-0.531-0.938-0.25-1.844-0.375-2.719-0.375h-1.094c-0.219 0-0.406 0-0.531-0.031h-0.5c-0.063 0-0.156 0-0.25 0.031h-0.625l-5.406 0.156-3.719 0.094 0.063 1.188c0.875 0.125 1.406 0.188 1.625 0.188 0.438 0 0.781 0.094 0.969 0.219 0.094 0 0.156 0.063 0.188 0.125 0.063 0.219 0.125 0.688 0.156 1.563 0.063 1.563 0.063 2.813 0.063 3.75 0.031 0.969 0.031 1.625 0.094 2v7.031c0 1.219-0.031 2.125-0.156 2.75-0.031 0.219-0.125 0.438-0.281 0.688-0.438 0.188-1 0.375-1.75 0.469-0.375 0.063-0.719 0.125-1 0.156zM7.719 14.281v-2.469c0.063-1.719 0-2.969-0.031-3.969-0.063-0.438-0.063-0.844-0.063-1.063 0.75-0.156 1.344-0.219 1.844-0.219 1.625 0 2.844 0.344 3.656 1.094 0.813 0.688 1.219 1.563 1.219 2.656 0 2.969-1.75 4.094-5.063 4.094-0.563 0-1.094-0.031-1.563-0.125zM7.719 20.406v-4.5c0.313-0.063 0.75-0.125 1.438-0.125 1.594-0.031 2.813 0.125 3.563 0.438 1.531 0.563 2.594 2.188 2.594 4.344 0 1.031-0.219 1.844-0.563 2.563-0.375 0.719-0.906 1.219-1.719 1.594-1.656 0.781-3.719 0.719-5.125 0.125-0.094-0.25-0.125-0.438-0.125-0.594z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.italic ?? true\" (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\" title=\"Italic\">\r\n <!-- <mat-icon>format_italic</mat-icon> -->\r\n <svg viewBox=\"4 0 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Italic\"> <path id=\"Vector\" d=\"M8 19H10M10 19H12M10 19L14 5M12 5H14M14 5H16\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.underline ?? true\" (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\" title=\"Underline\">\r\n <!-- <mat-icon>format_underline</mat-icon> -->\r\n <svg viewBox=\"4 0 18 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Underline\"> <path id=\"Vector\" d=\"M6 19H18M8 5V11C8 13.2091 9.79086 15 12 15C14.2091 15 16 13.2091 16 11V5\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.strikethrough ?? true\" (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\" title=\"Strikethrough\">\r\n <!-- <mat-icon>strikethrough_s</mat-icon> -->\r\n <svg viewBox=\"4 0 20 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g id=\"Edit / Strikethrough\"> <path id=\"Vector\" d=\"M12.0005 12.0001C12.8959 12.0001 13.7749 12.1925 14.5457 12.5571C14.8939 12.7218 15.2146 12.9192 15.5009 13.1437C15.8484 13.4162 16.1457 13.729 16.3822 14.0732C16.8136 14.7009 17.0263 15.4096 16.9982 16.1256C16.97 16.8416 16.702 17.5385 16.2222 18.1433C15.7424 18.7481 15.0684 19.2386 14.2705 19.5638C13.4727 19.889 12.5802 20.0373 11.6865 19.9923C10.7928 19.9473 9.93104 19.7108 9.19043 19.3082C8.44982 18.9055 7.85782 18.3514 7.47656 17.7032M12.0005 12.0001H4M12.0005 12.0001H20M16.5243 6.29718C16.143 5.649 15.5512 5.09462 14.8105 4.69197C14.0699 4.28932 13.2076 4.05287 12.314 4.00789C11.4203 3.96291 10.5278 4.11091 9.72998 4.43613C8.93213 4.76135 8.25812 5.25205 7.77832 5.85689C7.29852 6.46173 7.03057 7.15885 7.00244 7.87485C6.9942 8.08463 7.00669 8.29345 7.03924 8.50014\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignLeft ?? true\" (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\" title=\"Align Left\" >\r\n <!-- <mat-icon>format_align_left</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M11 1H1V3H11V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 9H1V11H11V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignCenter ?? true\" (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\" title=\"Align Center\" >\r\n <!-- <mat-icon>format_align_center</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H1V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H1V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M11 13H1V15H11V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.alignRight ?? true\" (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\" title=\"Align Right\" >\r\n <!-- <mat-icon>format_align_right</mat-icon> -->\r\n <svg viewBox=\"0 0 16 16\" [attr.fill]=\"iconColor\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M15 1H5V3H15V1Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M1 5H15V7H1V5Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 9H5V11H15V9Z\" [attr.fill]=\"iconColor\"></path> <path d=\"M15 13H1V15H15V13Z\" [attr.fill]=\"iconColor\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.justify ?? true\" (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\" title=\"Justify\" >\r\n <!-- <mat-icon>format_align_justify</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 -2.5 29 29\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"m1.334 2.666h26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001h.002-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002z\"></path><path d=\"m27.999 5.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.011 0 .024.001.037.001.737 0 1.334-.597 1.334-1.334s-.597-1.334-1.334-1.334c-.013 0-.026 0-.039.001z\"></path><path d=\"m27.999 10.667h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 21.333h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path><path d=\"m27.999 16h-26.665c-.72.021-1.296.61-1.296 1.333s.576 1.312 1.294 1.333h.002 26.665c.72-.021 1.296-.61 1.296-1.333s-.576-1.312-1.294-1.333z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.bulletList ?? true\" (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\" title=\"Bullet List\" >\r\n <!-- <mat-icon>format_list_bulleted</mat-icon> -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" [attr.fill]=\"iconColor\" viewBox=\"0 0 36 48\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"><path d=\"M8 21c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zM8 9c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3zm0 24.33c-1.47 0-2.67 1.19-2.67 2.67s1.2 2.67 2.67 2.67 2.67-1.19 2.67-2.67-1.2-2.67-2.67-2.67zM14 38h28v-4H14v4zm0-12h28v-4H14v4zm0-16v4h28v-4H14z\"></path></g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.numberedList ?? true\" (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\" title=\"Numbered List\" >\r\n <!-- <mat-icon>format_list_numbered</mat-icon> -->\r\n <svg [attr.fill]=\"iconColor\" version=\"1.1\" id=\"Capa_1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 94.479 94.479\" xml:space=\"preserve\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <g> <g> <path d=\"M92.479,6.821H26.823c-1.104,0-2,0.896-2,2V19.58c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V8.821 C94.479,7.717,93.584,6.821,92.479,6.821z\"></path> <path d=\"M92.479,40.457H26.823c-1.104,0-2,0.896-2,2v10.761c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V42.457 C94.479,41.352,93.584,40.457,92.479,40.457z\"></path> <path d=\"M92.479,75.109H26.823c-1.104,0-2,0.896-2,2v10.759c0,1.104,0.896,2,2,2h65.656c1.104,0,2-0.896,2-2V77.109 C94.479,76.004,93.584,75.109,92.479,75.109z\"></path> <path d=\"M1.842,11.104c0.423,0.051,0.848-0.08,1.167-0.36l0.914-0.799v12.973c0,0.828,0.672,1.5,1.5,1.5h1.546 c0.828,0,1.5-0.672,1.5-1.5V5.567c0-0.828-0.672-1.5-1.5-1.5H5.378c-0.356,0-0.701,0.127-0.973,0.358L0.527,7.728 c-0.589,0.501-0.7,1.369-0.256,2.003l0.522,0.745C1.04,10.825,1.42,11.053,1.842,11.104z\"></path> <path d=\"M2.546,37.5c-0.647,0.23-1.056,0.872-0.99,1.556l0.096,0.999c0.048,0.497,0.339,0.938,0.778,1.176 c0.438,0.238,0.967,0.243,1.409,0.011c1.18-0.615,1.923-0.775,2.922-0.534c0.71,0.163,1.188,0.586,1.438,1.225 c0.378,1.143,0.395,2.957-2.854,6.873l-2.506,2.996c-0.589,0.688-0.99,1.119-1.302,1.404c-0.312,0.284-0.488,0.688-0.488,1.107 v1.475c0,0.828,0.672,1.5,1.5,1.5h9.132c0.828,0,1.5-0.672,1.5-1.5V55.01c0-0.828-0.672-1.5-1.5-1.5H6.896 c0.458-0.515,1.037-1.211,1.716-2.063c2.803-3.468,5.061-6.645,4.292-10.376c-0.309-1.672-1.247-2.966-2.731-3.752 c-0.826-0.424-1.879-0.639-3.127-0.639C5.629,36.68,4.031,36.971,2.546,37.5z\"></path> <path d=\"M10.491,79.516c0.25-0.135,0.487-0.289,0.74-0.483c1.718-1.313,1.801-3.335,1.786-3.885 c-0.001-1.878-0.712-3.318-2.166-4.401c-1.026-0.77-2.534-1.177-4.361-1.177c-1.347,0-2.787,0.212-4.057,0.596 c-0.668,0.202-1.107,0.839-1.063,1.533l0.058,0.88c0.031,0.471,0.28,0.896,0.673,1.155c0.394,0.259,0.886,0.319,1.327,0.159 c0.864-0.307,1.571-0.45,2.223-0.45c0.229,0,0.457,0.019,0.722,0.063c0.94,0.127,1.563,0.549,1.9,1.283 c0.237,0.52,0.19,1.445-0.083,1.885c-0.654,1.014-2.438,1.217-3.443,1.25c-0.81,0.024-1.453,0.688-1.453,1.498v0.658 c0,0.828,0.687,1.5,1.515,1.5c1.575,0,2.311,0.309,2.596,0.485c0.737,0.465,1.065,1.043,1.066,1.918 c0.025,0.912-0.348,1.606-1.129,2.121c-1.014,0.651-2.64,0.647-4.505,0.032c-0.438-0.146-0.918-0.082-1.302,0.175 c-0.384,0.255-0.629,0.672-0.665,1.132l-0.068,0.872C0.75,88.973,1.135,89.588,1.75,89.83c0.33,0.13,0.551,0.183,1.022,0.281 c0.857,0.196,1.84,0.302,2.842,0.302c1.493,0,4.248-0.247,5.944-1.919c1.657-1.69,1.974-4.11,1.56-5.729 C12.636,80.704,11.461,79.946,10.491,79.516z\"></path> </g> </g> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.image ?? true\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\" title=\"Insert Image\" >\r\n <input type=\"file\" accept=\"png,jpg,jpeg\" (change)=\"insertImageToEditor($event)\"\r\n style=\"position: absolute; left: -50%; top: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;\"\r\n aria-hidden=\"true\" />\r\n <!-- <mat-icon style=\"pointer-events: none;\">insert_photo_outlined</mat-icon> -->\r\n <svg viewBox=\"2 1 20 22\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M14.2647 15.9377L12.5473 14.2346C11.758 13.4519 11.3633 13.0605 10.9089 12.9137C10.5092 12.7845 10.079 12.7845 9.67922 12.9137C9.22485 13.0605 8.83017 13.4519 8.04082 14.2346L4.04193 18.2622M14.2647 15.9377L14.606 15.5991C15.412 14.7999 15.8149 14.4003 16.2773 14.2545C16.6839 14.1262 17.1208 14.1312 17.5244 14.2688C17.9832 14.4253 18.3769 14.834 19.1642 15.6515L20 16.5001M14.2647 15.9377L18.22 19.9628M18.22 19.9628C17.8703 20 17.4213 20 16.8 20H7.2C6.07989 20 5.51984 20 5.09202 19.782C4.7157 19.5903 4.40973 19.2843 4.21799 18.908C4.12583 18.7271 4.07264 18.5226 4.04193 18.2622M18.22 19.9628C18.5007 19.9329 18.7175 19.8791 18.908 19.782C19.2843 19.5903 19.5903 19.2843 19.782 18.908C20 18.4802 20 17.9201 20 16.8V13M11 4H7.2C6.07989 4 5.51984 4 5.09202 4.21799C4.7157 4.40973 4.40973 4.71569 4.21799 5.09202C4 5.51984 4 6.0799 4 7.2V16.8C4 17.4466 4 17.9066 4.04193 18.2622M18 9V6M18 6V3M18 6H21M18 6H15\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.table ?? true\" (click)=\"openTableDialog($event)\" type=\"button\" title=\"Table\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg width=\"256px\" height=\"256px\" viewBox=\"2 12 20 3\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path d=\"M3 9H21M3 15H21M9 9L9 20M15 9L15 20M6.2 20H17.8C18.9201 20 19.4802 20 19.908 19.782C20.2843 19.5903 20.5903 19.2843 20.782 18.908C21 18.4802 21 17.9201 21 16.8V7.2C21 6.0799 21 5.51984 20.782 5.09202C20.5903 4.71569 20.2843 4.40973 19.908 4.21799C19.4802 4 18.9201 4 17.8 4H6.2C5.0799 4 4.51984 4 4.09202 4.21799C3.71569 4.40973 3.40973 4.71569 3.21799 5.09202C3 5.51984 3 6.07989 3 7.2V16.8C3 17.9201 3 18.4802 3.21799 18.908C3.40973 19.2843 3.71569 19.5903 4.09202 19.782C4.51984 20 5.07989 20 6.2 20Z\" [attr.stroke]=\"iconColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.tableHeader ?? true\" class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" aria-label=\"Make Header\" title=\"Table Header\" >\r\n <!-- <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span> -->\r\n <svg [attr.fill]=\"iconColor\" viewBox=\"0 0 1920 1920\" xmlns=\"http://www.w3.org/2000/svg\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M213.333 0C95.5126 0 0 95.5126 0 213.333V1706.67C0 1824.49 95.5126 1920 213.333 1920H1706.67C1824.49 1920 1920 1824.49 1920 1706.67V213.333C1920 95.5126 1824.49 0 1706.67 0H213.333ZM266.667 746.667C237.211 746.667 213.333 722.788 213.333 693.333V373.333C213.333 343.878 237.211 320 266.667 320H1653.33C1682.79 320 1706.67 343.878 1706.67 373.333V693.333C1706.67 722.788 1682.79 746.667 1653.33 746.667H266.667Z\"></path> </g></svg>\r\n </button>\r\n\r\n <button *ngIf=\"editorOptions?.options?.signature ?? true\" (click)=\"openSignatureDialog($event)\" type=\"button\" title=\"Signature\"\r\n aria-label=\"Choose table rows and columns\">\r\n <!-- <mat-icon>border_all</mat-icon> -->\r\n <svg viewBox=\"0 0 28 28\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" fill=\"#000000\"><g id=\"SVGRepo_bgCarrier\" stroke-width=\"0\"></g><g id=\"SVGRepo_tracerCarrier\" stroke-linecap=\"round\" stroke-linejoin=\"round\"></g><g id=\"SVGRepo_iconCarrier\"> <!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools --> <desc>Created with Sketch.</desc> <g id=\"🔍-Product-Icons\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\"> <g id=\"ic_fluent_signature_28_regular\" fill=\"#212121\" fill-rule=\"nonzero\"> <path d=\"M16.4798956,21.0019578 L16.75,21 C17.9702352,21 18.6112441,21.5058032 19.4020627,22.7041662 L19.7958278,23.3124409 C20.1028266,23.766938 20.2944374,23.9573247 20.535784,24.0567929 C20.9684873,24.2351266 21.3271008,24.1474446 22.6440782,23.5133213 L23.0473273,23.3170319 C23.8709982,22.9126711 24.4330286,22.6811606 25.0680983,22.5223931 C25.4699445,22.4219316 25.8771453,22.6662521 25.9776069,23.0680983 C26.0780684,23.4699445 25.8337479,23.8771453 25.4319017,23.9776069 C25.0371606,24.0762922 24.6589465,24.2178819 24.1641364,24.4458997 L23.0054899,25.0032673 C21.4376302,25.7436944 20.9059009,25.8317321 19.964216,25.4436275 C19.3391237,25.1860028 18.9836765,24.813298 18.4635639,24.0180227 L18.2688903,23.7140849 C17.7071112,22.8288731 17.4057794,22.5384538 16.8688444,22.5036655 L16.75,22.5 C16.2017306,22.5 16.0933104,22.5684572 14.009281,24.1150241 C12.2670395,25.4079488 10.9383359,26.0254984 9.24864243,26.0254984 C7.18872869,26.0254984 5.24773367,25.647067 3.43145875,24.8905363 L6.31377803,24.2241784 C7.25769404,24.4250762 8.23567143,24.5254984 9.24864243,24.5254984 C10.5393035,24.5254984 11.609129,24.0282691 13.1153796,22.9104743 L14.275444,22.0545488 C15.5468065,21.1304903 15.8296113,21.016032 16.4798956,21.0019578 L16.4798956,21.0019578 Z M22.7770988,3.22208979 C24.4507223,4.8957133 24.4507566,7.60916079 22.7771889,9.28281324 L21.741655,10.3184475 C22.8936263,11.7199657 22.8521526,13.2053774 21.7811031,14.279556 L18.7800727,17.2805874 L18.7800727,17.2805874 C18.4870374,17.5733384 18.0121637,17.573108 17.7194126,17.2800727 C17.4266616,16.9870374 17.426892,16.5121637 17.7199273,16.2194126 L20.7188969,13.220444 C21.2039571,12.7339668 21.2600021,12.1299983 20.678941,11.3818945 L10.0845437,21.9761011 C9.78635459,22.2743053 9.41036117,22.482705 8.99944703,22.5775313 L2.91864463,23.9807934 C2.37859061,24.1054212 1.89457875,23.6214094 2.0192066,23.0813554 L3.42247794,17.0005129 C3.51729557,16.5896365 3.72566589,16.2136736 4.0238276,15.9154968 L16.7165019,3.22217992 C18.3900415,1.54855555 21.1034349,1.54851059 22.7770988,3.22208979 Z M17.7771889,4.28281324 L5.08451462,16.9761302 C4.98512738,17.0755224 4.91567061,17.2008434 4.88406473,17.3378022 L3.7506248,22.2493752 L8.66215777,21.1159445 C8.79912915,21.0843357 8.92446029,21.0148692 9.02385665,20.9154678 L21.7165019,8.22217992 C22.8043063,7.13432049 22.8042862,5.37060478 21.7164588,4.2827701 C20.6285914,3.19496507 18.8649506,3.19499653 17.7771889,4.28281324 Z\" id=\"🎨-Color\"> </path> </g> </g> </g></svg>\r\n </button>\r\n\r\n </div>\r\n <div class=\"editor\" id=\"editor\" contenteditable=\"true\" #editor (input)=\"submitContent()\" (blur)=\"onBlur()\" (keyup)=\"onEditorKeyUp($event)\" (mouseup)=\"updateCurrentFormat()\"\r\n (drop)=\"drop($event)\" (dragover)=\"allowDrop($event)\">\r\n </div>\r\n </div>\r\n <ng-template #tableDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Choose Table Size</h2>\r\n <mat-dialog-content>\r\n <div class=\"grid-container\">\r\n <div *ngFor=\"let cell of grid; let i = index\" [ngClass]=\"{\r\n 'grid-item': true,\r\n 'highlighted': i % 7 < cols && Math.floor(i / 7) < rows\r\n }\" (mouseenter)=\"updatePreview(i % 7 + 1, Math.floor(i / 7) + 1)\"\r\n (click)=\"updateSelection(i % 7 + 1, Math.floor(i / 7) + 1, dialogRef)\"></div>\r\n </div>\r\n <p>{{ rows }} x {{ cols }} </p>\r\n </mat-dialog-content>\r\n </ng-template>\r\n\r\n <ng-template #signatureDialog let-dialogRef=\"dialogRef\">\r\n <h2 mat-dialog-title>Draw a Signature</h2>\r\n <signature-pad #sigPad [options]=\"signaturePadOptions\" class=\"sign\" ></signature-pad>\r\n <div class=\"action\" >\r\n <!-- <button type=\"button\" class=\"normal\" > Close </button> -->\r\n <button type=\"button\" class=\"normal\" (click)=\"closeSignDialog(dialogRef)\" > Close </button>\r\n <button type=\"button\" class=\"submit\" (click)=\"submitSignDialog(dialogRef)\" > Submit </button>\r\n </div>\r\n \r\n </ng-template>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { RapidTextEditorComponent } from './rapid-text-editor.component';\r\n\r\n//Mat Modules\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SignaturePadModule } from \"angular2-signaturepad\";\r\n\r\n@NgModule({\r\n declarations: [\r\n RapidTextEditorComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatIconModule,\r\n MatButtonModule,\r\n MatDialogModule,\r\n FormsModule, ReactiveFormsModule,\r\n SignaturePadModule\r\n],\r\n exports: [\r\n RapidTextEditorComponent\r\n ]\r\n})\r\nexport class RapidTextEditorModule { }\r\n","/*\r\n * Public API Surface of rapid-text-editor\r\n */\r\n\r\nexport * from './lib/rapid-text-editor.service';\r\nexport * from './lib/rapid-text-editor.component';\r\nexport * from './lib/rapid-text-editor.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}