rapid-text-editor 1.0.16 → 1.0.17
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.
- package/esm2020/lib/rapid-text-editor.component.mjs +74 -21
- package/fesm2015/rapid-text-editor.mjs +73 -20
- package/fesm2015/rapid-text-editor.mjs.map +1 -1
- package/fesm2020/rapid-text-editor.mjs +73 -20
- package/fesm2020/rapid-text-editor.mjs.map +1 -1
- package/lib/rapid-text-editor.component.d.ts +2 -0
- package/package.json +2 -2
|
@@ -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\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 @Output() contentChange = new EventEmitter<string>();\r\n @ViewChild('editor', { static: true }) editor!: ElementRef;\r\n @ViewChild('tableDialog') tableDialog!: TemplateRef<any>;\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 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 }\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 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 }\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 }\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.fontSize = `${size}px`;\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.fontSize = `${size}px`;\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.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\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 const range = selection.getRangeAt(0);\r\n const editor = document.getElementById('editor');\r\n if (!editor) return;\r\n const newElem = document.createElement(tag);\r\n switch (tag) {\r\n case 'H1':\r\n newElem.style.fontSize = '32px';\r\n newElem.style.fontWeight = 'bold';\r\n break;\r\n case 'H2':\r\n newElem.style.fontSize = '28px';\r\n newElem.style.fontWeight = 'bold';\r\n break;\r\n case 'H3':\r\n newElem.style.fontSize = '24px';\r\n newElem.style.fontWeight = 'bold';\r\n break;\r\n case 'H4':\r\n newElem.style.fontSize = '20px';\r\n newElem.style.fontWeight = 'bold';\r\n break;\r\n case 'H5':\r\n newElem.style.fontSize = '18px';\r\n newElem.style.fontWeight = '600';\r\n break;\r\n case 'H6':\r\n newElem.style.fontSize = '16px';\r\n newElem.style.fontWeight = '600';\r\n break;\r\n case 'P':\r\n default:\r\n newElem.style.fontSize = '14px';\r\n newElem.style.fontWeight = 'normal';\r\n break;\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'; // Zero-width space to keep cursor visible\r\n }\r\n range.deleteContents();\r\n range.insertNode(newElem);\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 editor.focus();\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 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 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 const content = editor.innerHTML; // Get the HTML content from the editor\r\n const plainTextContent = editor.innerText; // Optionally, get plain text content\r\n this.onChange(content);\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;\">Paragraph</option>\r\n <option value=\"H1\" style=\"font-size: 32px; font-weight: bold;\">H1</option>\r\n <option value=\"H2\" style=\"font-size: 28px; font-weight: bold;\">H2</option>\r\n <option value=\"H3\" style=\"font-size: 24px; font-weight: bold;\">H3</option>\r\n <option value=\"H4\" style=\"font-size: 20px; font-weight: bold;\">H4</option>\r\n <option value=\"H5\" style=\"font-size: 18px; font-weight: 600;\">H5</option>\r\n <option value=\"H6\" style=\"font-size: 16px; font-weight: 600;\">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;\" value=\"12\">12px</option>\r\n <option style=\"font-size: 14px;\" value=\"14\" selected>14px</option>\r\n <option style=\"font-size: 16px;\" value=\"16\">16px</option>\r\n <option style=\"font-size: 18px;\" value=\"18\">18px</option>\r\n <option style=\"font-size: 20px;\" value=\"20\">20px</option>\r\n <option style=\"font-size: 24px;\" value=\"24\">24px</option>\r\n <option style=\"font-size: 28px;\" value=\"28\">28px</option>\r\n <option style=\"font-size: 32px;\" value=\"32\">32px</option>\r\n <option style=\"font-size: 48px;\" value=\"48\">48px</option>\r\n </select>\r\n <button (click)=\"format('bold')\" type=\"button\" aria-label=\"Bold\">\r\n <mat-icon>format_bold</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\">\r\n <mat-icon>format_italic</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\">\r\n <mat-icon>format_underline</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\">\r\n <mat-icon>strikethrough_s</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\">\r\n <mat-icon>format_align_left</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\">\r\n <mat-icon>format_align_center</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\">\r\n <mat-icon>format_align_right</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\">\r\n <mat-icon>format_align_justify</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\">\r\n <mat-icon>format_list_bulleted</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\">\r\n <mat-icon>format_list_numbered</mat-icon>\r\n </button>\r\n <button color=\"secondary\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\">\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 </button>\r\n <button (click)=\"openTableDialog($event)\" type=\"button\" color=\"secondary\"\r\n aria-label=\"Choose table rows and columns\">\r\n <mat-icon>border_all</mat-icon>\r\n </button>\r\n\r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" color=\"secondary\" aria-label=\"Make Header\">\r\n <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span>\r\n </button>\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</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\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 ],\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\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 @Output() contentChange = new EventEmitter<string>();\r\n @ViewChild('editor', { static: true }) editor!: ElementRef;\r\n @ViewChild('tableDialog') tableDialog!: TemplateRef<any>;\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 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 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 }\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.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\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 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 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","<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\">\r\n <mat-icon>format_bold</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('italic')\" type=\"button\" aria-label=\"Italic\">\r\n <mat-icon>format_italic</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('underline')\" type=\"button\" aria-label=\"Underline\">\r\n <mat-icon>format_underline</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('strikethrough')\" type=\"button\" aria-label=\"Strikethrough\">\r\n <mat-icon>strikethrough_s</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyLeft')\" type=\"button\" aria-label=\"Align Left\">\r\n <mat-icon>format_align_left</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyCenter')\" type=\"button\" aria-label=\"Center\">\r\n <mat-icon>format_align_center</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyRight')\" type=\"button\" aria-label=\"Align Right\">\r\n <mat-icon>format_align_right</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('justifyFull')\" type=\"button\" aria-label=\"Justify\">\r\n <mat-icon>format_align_justify</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('insertUnorderedList')\" type=\"button\" aria-label=\"Unordered List\">\r\n <mat-icon>format_list_bulleted</mat-icon>\r\n </button>\r\n\r\n <button (click)=\"format('insertOrderedList')\" type=\"button\" aria-label=\"Ordered List\">\r\n <mat-icon>format_list_numbered</mat-icon>\r\n </button>\r\n <button color=\"secondary\" aria-label=\"Insert Image\" type=\"button\"\r\n style=\"position: relative; display: inline-flex; align-items: center; justify-content: center;\">\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 </button>\r\n <button (click)=\"openTableDialog($event)\" type=\"button\" color=\"secondary\"\r\n aria-label=\"Choose table rows and columns\">\r\n <mat-icon>border_all</mat-icon>\r\n </button>\r\n\r\n <button class=\"mb-1\" (click)=\"makeFirstRowHeader()\" type=\"button\" color=\"secondary\" aria-label=\"Make Header\">\r\n <span style=\"font-size: 20px;\" class=\"material-symbols-outlined\">\r\n page_header\r\n </span>\r\n </button>\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</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\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 ],\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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"}
|
|
@@ -26,6 +26,8 @@ export declare class RapidTextEditorComponent implements ControlValueAccessor, O
|
|
|
26
26
|
ngOnChanges(changes: SimpleChanges): void;
|
|
27
27
|
private applyDimensions;
|
|
28
28
|
ngAfterViewInit(): void;
|
|
29
|
+
ensureParagraphAndFocus(): void;
|
|
30
|
+
initializeEditorContent(data: string): void;
|
|
29
31
|
onContentChange(): void;
|
|
30
32
|
getContent(): string;
|
|
31
33
|
selectedHead: any;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rapid-text-editor",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.17",
|
|
4
|
+
"description": "Rapid Text Editor",
|
|
5
5
|
"peerDependencies": {
|
|
6
6
|
"@angular/common": "^13.0.0 || 13.x",
|
|
7
7
|
"@angular/core": "^13.0.0 || 13.x"
|