el-header-and-footer 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1113 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, EventEmitter, forwardRef, Component, ViewChild, Input, Output, NgModule } from '@angular/core';
3
+ import { NG_VALUE_ACCESSOR, FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import * as i4 from '@ng-bootstrap/ng-bootstrap';
5
+ import { NgbDropdown, NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap';
6
+ import * as i1 from '@angular/router';
7
+ import * as i2 from '@angular/platform-browser';
8
+ import * as i3 from 'ngx-color/sketch';
9
+ import { ColorSketchModule } from 'ngx-color/sketch';
10
+ import * as i5 from '@angular/common';
11
+ import { CommonModule } from '@angular/common';
12
+ import { ColorPickerModule } from 'ngx-color-picker';
13
+ import { NgxColorsModule } from 'ngx-colors';
14
+
15
+ class ElHeaderAndFooterService {
16
+ constructor() { }
17
+ }
18
+ ElHeaderAndFooterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
19
+ ElHeaderAndFooterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterService, providedIn: 'root' });
20
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterService, decorators: [{
21
+ type: Injectable,
22
+ args: [{
23
+ providedIn: 'root'
24
+ }]
25
+ }], ctorParameters: function () { return []; } });
26
+
27
+ class ElHeaderAndFooterComponent {
28
+ constructor(router, route, renderer, sanitizer) {
29
+ this.router = router;
30
+ this.route = route;
31
+ this.renderer = renderer;
32
+ this.sanitizer = sanitizer;
33
+ this.editorId = '';
34
+ this.editorText = '';
35
+ this.editorFrom = '';
36
+ this.clear = false;
37
+ this.toolbarMode = 'fixed';
38
+ this.editorTextChange = new EventEmitter();
39
+ this.editorActionResponse = new EventEmitter();
40
+ this.value = '';
41
+ this.editorTextClear = new EventEmitter();
42
+ this.showToolbar = false;
43
+ this.toolbarTop = 0;
44
+ this.toolbarLeft = 0;
45
+ this.fonts = ['Arial', 'Courier New', 'Georgia', 'Times New Roman', 'Verdana'];
46
+ this.fontSizes = [10, 12, 14, 16, 18, 20, 24, 28, 32, 36];
47
+ this.selectedFont = 'Arial';
48
+ this.selectedFontSize = 14;
49
+ this.isTableSelected = false;
50
+ this.tableAdded = false;
51
+ this.selectedTable = null;
52
+ this.isPlaceholderVisible = true;
53
+ this.selectedCell = null;
54
+ this.isBoldActive = false;
55
+ this.isItalicActive = false;
56
+ this.isUnderlineActive = false;
57
+ this.isStrikethroughActive = false;
58
+ this.isSubscriptActive = false;
59
+ this.isSuperscriptActive = false;
60
+ this.selectedFormatBlock = 'normal';
61
+ this.undoStack = [];
62
+ this.redoStack = [];
63
+ this.history = [];
64
+ this.historyIndex = -1;
65
+ this.selectedImage = null;
66
+ this.imageEditUrl = '';
67
+ this.imagePositionX = 0;
68
+ this.imagePositionY = 0;
69
+ this.imageResizeStartX = 0;
70
+ this.imageResizeStartY = 0;
71
+ this.imageResizeStartWidth = 0;
72
+ this.imageResizeStartHeight = 0;
73
+ this.imageResizeDirection = null;
74
+ this.onChange = () => { };
75
+ this.onTouched = () => { };
76
+ this.color = '#ddd';
77
+ this.selectedItemIndex = null;
78
+ this.parsedTable = null;
79
+ this.isFullScreen = false;
80
+ this.today = '';
81
+ this.CanvasColor = '#fff';
82
+ }
83
+ ngOnChanges(changes) {
84
+ if (changes['bgColor']) {
85
+ const event = { color: { hex: this.bgColor } };
86
+ this.setCanvasBackgroundColor(event, this.editorId);
87
+ }
88
+ }
89
+ ngAfterViewInit() {
90
+ this.initEditor();
91
+ this.checkPlaceholder();
92
+ this.setupHistory();
93
+ }
94
+ ngOnInit() {
95
+ this.init_Func(this.editorText);
96
+ document.addEventListener('selectionchange', () => {
97
+ this.checkActiveStates();
98
+ this.checkFormatBlock(this.editorId);
99
+ });
100
+ this.addClickListenerToImages();
101
+ this.addClickListenerToElements();
102
+ // this.route.queryParams.subscribe(params => {
103
+ // const data = JSON.parse(params['data']);
104
+ // if (data.editedIMG) {
105
+ // const imgUrl = sessionStorage.getItem('editImageFromTemp');
106
+ // if (imgUrl) {
107
+ // this.replaceImageSrc(imgUrl, data.index.index)
108
+ // }
109
+ // sessionStorage.removeItem('editImageFromTemp');
110
+ // }
111
+ // })
112
+ }
113
+ writeValue(value) {
114
+ if (value !== undefined) {
115
+ this.editorText = value;
116
+ this.initEditor();
117
+ this.init_Func(this.editorText);
118
+ }
119
+ }
120
+ // private addClickListenerToImages() {
121
+ // const editor = document.getElementById('editor');
122
+ // if (editor) {
123
+ // editor.addEventListener('click', (event) => {
124
+ // const target = event.target as HTMLElement;
125
+ // if (target.tagName === 'IMG') {
126
+ // this.selectedImage = target as HTMLImageElement;
127
+ // this.imageEditUrl = this.selectedImage.src;
128
+ // // Position the edit button near the selected image
129
+ // } else {
130
+ // this.selectedImage = null;
131
+ // }
132
+ // });
133
+ // }
134
+ // }
135
+ addClickListenerToImages() {
136
+ const editor = document.getElementById(this.editorId);
137
+ if (editor) {
138
+ editor.addEventListener('click', (event) => {
139
+ const target = event.target;
140
+ if (target.tagName === 'IMG') {
141
+ this.selectedImage = target;
142
+ this.imageEditUrl = this.selectedImage.src;
143
+ // Get the index of the selected image
144
+ const images = editor.getElementsByTagName('img');
145
+ for (let i = 0; i < images.length; i++) {
146
+ if (images[i] === this.selectedImage) {
147
+ this.selectedItemIndex = i;
148
+ break;
149
+ }
150
+ }
151
+ if (this.toolbarMode === 'bubble') {
152
+ this.onTextSelect();
153
+ }
154
+ }
155
+ else {
156
+ this.selectedImage = null;
157
+ this.selectedItemIndex = null;
158
+ }
159
+ });
160
+ }
161
+ }
162
+ addClickListenerToElements() {
163
+ const editor = document.getElementById(this.editorId);
164
+ if (editor) {
165
+ editor.addEventListener('click', (event) => {
166
+ const target = event.target;
167
+ // Handle images
168
+ if (target.tagName === 'IMG') {
169
+ this.selectedImage = target;
170
+ this.imageEditUrl = this.selectedImage.src;
171
+ // Get the index of the selected image
172
+ const images = editor.getElementsByTagName('img');
173
+ for (let i = 0; i < images.length; i++) {
174
+ if (images[i] === this.selectedImage) {
175
+ this.selectedItemIndex = i;
176
+ break;
177
+ }
178
+ }
179
+ }
180
+ else {
181
+ this.selectedImage = null;
182
+ }
183
+ if (target.tagName === 'TD' || target.tagName === 'TH') {
184
+ this.selectedTable = target.closest('table');
185
+ const cells = this.selectedTable.getElementsByTagName(target.tagName);
186
+ for (let i = 0; i < cells.length; i++) {
187
+ if (cells[i] === target) {
188
+ this.selectedItemIndex = i;
189
+ break;
190
+ }
191
+ }
192
+ }
193
+ else {
194
+ this.selectedTable = null;
195
+ }
196
+ if (target.tagName === 'P' || target.tagName === 'SPAN' || target.tagName === 'DIV') {
197
+ const paragraphs = editor.getElementsByTagName(target.tagName);
198
+ for (let i = 0; i < paragraphs.length; i++) {
199
+ if (paragraphs[i] === target) {
200
+ this.selectedItemIndex = i;
201
+ break;
202
+ }
203
+ }
204
+ }
205
+ else {
206
+ }
207
+ });
208
+ }
209
+ }
210
+ replaceImageSrc(newSrc, index) {
211
+ const editor = document.getElementById(this.editorId);
212
+ if (editor) {
213
+ editor.focus();
214
+ const images = editor.getElementsByTagName('IMG');
215
+ if (index >= 0) {
216
+ images[index].setAttribute('src', newSrc);
217
+ }
218
+ else {
219
+ console.warn(`Index ${index} is out of bounds. Total images: ${images.length}`);
220
+ }
221
+ }
222
+ else {
223
+ console.error('Editor element not found');
224
+ }
225
+ }
226
+ initEditor() {
227
+ // Initialize editor content and listeners
228
+ const editor = document.getElementById(this.editorId);
229
+ if (editor) {
230
+ editor.innerHTML = this.editorText;
231
+ editor.addEventListener('input', () => {
232
+ this.onModelChange(editor.innerHTML);
233
+ });
234
+ }
235
+ this.checkPlaceholder();
236
+ }
237
+ registerOnChange(fn) {
238
+ this.onChange = fn;
239
+ }
240
+ registerOnTouched(fn) {
241
+ this.onTouched = fn;
242
+ }
243
+ setDisabledState(isDisabled) {
244
+ // Handle the disabled state if necessary
245
+ }
246
+ onModelChange(value) {
247
+ if (value) {
248
+ const VALUE = value;
249
+ this.editorText = this.mainCanvas(VALUE);
250
+ this.onChange(this.mainCanvas(VALUE));
251
+ this.editorTextChange.emit(this.mainCanvas(VALUE));
252
+ }
253
+ else {
254
+ this.selectedImage = null;
255
+ }
256
+ }
257
+ applyImageStyles(content) {
258
+ const div = document.createElement('div');
259
+ div.innerHTML = content;
260
+ const images = div.querySelectorAll('img');
261
+ images.forEach(img => {
262
+ if (img.style.maxWidth >= '700px') {
263
+ img.style.maxWidth = '700px';
264
+ // img.width = 300;
265
+ img.style.height = 'auto';
266
+ }
267
+ else {
268
+ img.style.maxWidth = '100%';
269
+ img.style.height = 'auto';
270
+ }
271
+ });
272
+ return div.innerHTML;
273
+ }
274
+ init_Func(html) {
275
+ if (html) {
276
+ let editor = document.getElementById(this.editorId);
277
+ if (editor) {
278
+ editor.focus();
279
+ this.setEditorContent(html);
280
+ // Set up a MutationObserver to handle content changes
281
+ this.setupMutationObserver(editor);
282
+ // Move the caret to the end after initial content setup
283
+ this.moveCaretToEnd(editor);
284
+ // editor.focus()
285
+ // editor.innerHTML = html;
286
+ // this.sanitizedContent = this.sanitizer.bypassSecurityTrustHtml(this.applyImageStyles(html));
287
+ // editor.innerHTML = this.sanitizedContent as string;
288
+ // editor.addEventListener('input', () => {
289
+ // if (editor) {
290
+ // editor.focus()
291
+ // this.onModelChange(editor.innerHTML);
292
+ // }
293
+ // });
294
+ }
295
+ }
296
+ else {
297
+ this.selectedImage = null;
298
+ }
299
+ }
300
+ setEditorContent(html) {
301
+ let editor = document.getElementById(this.editorId);
302
+ if (editor) {
303
+ // Sanitize and apply styles to the HTML
304
+ this.sanitizedContent = this.sanitizer.bypassSecurityTrustHtml(this.applyImageStyles(html));
305
+ editor.innerHTML = this.sanitizedContent;
306
+ }
307
+ }
308
+ setupMutationObserver(editor) {
309
+ const observer = new MutationObserver(() => {
310
+ // Move the caret to the end after content changes
311
+ this.moveCaretToEnd(editor);
312
+ // Update model with the current content
313
+ this.onModelChange(editor.innerHTML);
314
+ });
315
+ observer.observe(editor, { childList: true, subtree: true, characterData: true });
316
+ }
317
+ moveCaretToEnd(editor) {
318
+ const selection = window.getSelection();
319
+ const range = document.createRange();
320
+ if (editor.lastChild) {
321
+ range.selectNodeContents(editor);
322
+ range.collapse(false); // Collapse to the end
323
+ selection?.removeAllRanges();
324
+ selection?.addRange(range);
325
+ }
326
+ }
327
+ // format(command: string, value?: any) {
328
+ // document.execCommand(command, false, value ?? '');
329
+ // // if (command === 'underline') {
330
+ // // // Toggle underline
331
+ // // const isUnderlined = document.queryCommandState('underline');
332
+ // // document.execCommand('underline', false, isUnderlined ? 'false' : 'true');
333
+ // // } else {
334
+ // // document.execCommand(command, false, '');
335
+ // // }
336
+ // }
337
+ onFormatChange(data) {
338
+ const value = data;
339
+ this.selectedFormatBlock = value;
340
+ if (value) {
341
+ this.format('formatBlock', this.editorId, value);
342
+ }
343
+ }
344
+ format(command, editorId, value) {
345
+ const editor = document.getElementById(editorId);
346
+ if (editor) {
347
+ editor.focus();
348
+ if (command === 'subscript') {
349
+ this.isSubscriptActive = !this.isSubscriptActive;
350
+ document.execCommand('subscript', false, '');
351
+ }
352
+ else if (command === 'superscript') {
353
+ this.isSuperscriptActive = !this.isSuperscriptActive;
354
+ document.execCommand('superscript', false, '');
355
+ ;
356
+ }
357
+ else {
358
+ document.execCommand(command, false, value ?? '');
359
+ if (value) {
360
+ const tag = value.toLowerCase().replace(/[<>]/g, '');
361
+ const toolbar = document.getElementById(editorId + 'toolbar');
362
+ if (toolbar) {
363
+ this.selectedFormatBlock = this.formatBlockDecode(tag);
364
+ }
365
+ }
366
+ }
367
+ }
368
+ this.checkActiveStates();
369
+ this.checkFormatBlock(editorId);
370
+ }
371
+ checkActiveStates() {
372
+ this.isBoldActive = document.queryCommandState('bold');
373
+ this.isItalicActive = document.queryCommandState('italic');
374
+ this.isUnderlineActive = document.queryCommandState('underline');
375
+ this.isStrikethroughActive = document.queryCommandState('strikethrough');
376
+ this.isSubscriptActive = document.queryCommandState('subscript');
377
+ this.isSuperscriptActive = document.queryCommandState('superscript');
378
+ }
379
+ checkFormatBlock(editorId) {
380
+ const editor = document.getElementById(editorId);
381
+ if (editor) {
382
+ const formatBlock = document.queryCommandValue('formatBlock');
383
+ const toolbar = document.getElementById(editorId + 'toolbar');
384
+ if (toolbar) {
385
+ this.selectedFormatBlock = this.formatBlockDecode(formatBlock);
386
+ }
387
+ // You can further handle the formatBlock value as needed
388
+ }
389
+ }
390
+ formatBlockDecode(data) {
391
+ switch (data) {
392
+ case 'h1':
393
+ return 'heading 1';
394
+ break;
395
+ case 'h2':
396
+ return 'heading 2';
397
+ break;
398
+ case 'h3':
399
+ return 'heading 3';
400
+ break;
401
+ case 'h4':
402
+ return 'heading 4';
403
+ break;
404
+ case 'h5':
405
+ return 'heading 5';
406
+ break;
407
+ case 'h6':
408
+ return 'heading 6';
409
+ break;
410
+ case 'p':
411
+ return 'normal';
412
+ break;
413
+ default:
414
+ return 'normal';
415
+ break;
416
+ }
417
+ }
418
+ changeFont(event) {
419
+ this.selectedFont = event;
420
+ document.execCommand('fontName', false, this.selectedFont);
421
+ }
422
+ insertCodeBlock() {
423
+ const code = `
424
+ <pre style="font-size: 12px;
425
+ color: white;
426
+ background-color: black;
427
+ overflow-x: auto;
428
+ margin-bottom: 5px;
429
+ margin-top: 5px;
430
+ padding: 5px 10px;">
431
+ <code style="display: block;
432
+ white-space: pre-wrap;
433
+ height: auto;
434
+ font-family: Menlo, Monaco, Consolas, 'Courier New', monospace;
435
+ font-size: 14px;" class="language-html">Insert code here...</code>
436
+ </pre>
437
+ `;
438
+ document.execCommand('insertHTML', false, code);
439
+ }
440
+ // changeFontSize(event: any) {
441
+ // document.execCommand('fontSize', false, '7');
442
+ // let editor = document.getElementById('editor');
443
+ // if (editor) {
444
+ // let fontElements = editor.getElementsByTagName('font');
445
+ // for (let i = 0; i < fontElements.length; i++) {
446
+ // if (fontElements[i].size == "7") {
447
+ // fontElements[i].removeAttribute("size");
448
+ // fontElements[i].style.fontSize = this.selectedFontSize + 'px';
449
+ // }
450
+ // }
451
+ // }
452
+ // }
453
+ changeFontSize(event) {
454
+ const selectedText = window.getSelection();
455
+ if (selectedText && selectedText.rangeCount > 0) {
456
+ const range = selectedText.getRangeAt(0);
457
+ const span = document.createElement('span');
458
+ span.style.fontSize = this.selectedFontSize + 'px';
459
+ range.surroundContents(span);
460
+ }
461
+ }
462
+ addLink() {
463
+ let url = prompt("Enter the link here: ", "http://");
464
+ if (url) {
465
+ document.execCommand("createLink", false, url);
466
+ }
467
+ }
468
+ insertsImage(editorId) {
469
+ const editor = document.getElementById(editorId);
470
+ if (editor) {
471
+ editor.focus();
472
+ let imageInput = document.getElementById('imageInput');
473
+ if (imageInput) {
474
+ imageInput.click();
475
+ }
476
+ }
477
+ }
478
+ handleImageUpload(event) {
479
+ const file = event.target.files[0];
480
+ if (file) {
481
+ const reader = new FileReader();
482
+ reader.onload = (e) => {
483
+ const img = new Image();
484
+ img.src = e.target.result;
485
+ img.onload = () => {
486
+ // Create the HTML string with the exact width and height
487
+ const imgHTML = `<img src="${img.src}" width="${img.width}" height="${img.height}">`;
488
+ // Insert the image into the editor
489
+ document.execCommand('insertHTML', false, imgHTML);
490
+ };
491
+ };
492
+ reader.readAsDataURL(file);
493
+ }
494
+ }
495
+ addTable(editorId) {
496
+ const tableWidth = 825; // Table width in pixels
497
+ const cols = 3; // Number of columns
498
+ const cellMinWidth = tableWidth / cols; // Calculate minimum width for each cell
499
+ let table = `<br /><table style="border-collapse: collapse; width: ${tableWidth}px; border: 1px solid black;">`;
500
+ for (let i = 0; i < 3; i++) { // Number of rows
501
+ table += '<tr>';
502
+ for (let j = 0; j < cols; j++) {
503
+ table += `<td style="border: 1px solid #000; word-wrap: break-word; word-break: break-all; white-space: normal; min-width: ${cellMinWidth}px;">&nbsp;</td>`;
504
+ }
505
+ table += '</tr>';
506
+ }
507
+ table += '</table><br/ >';
508
+ // document.execCommand('insertHTML', false, table);
509
+ const editor = document.getElementById(editorId);
510
+ if (editor) {
511
+ editor.focus();
512
+ document.execCommand('insertHTML', false, table);
513
+ }
514
+ this.tableAdded = true;
515
+ this.checkTableSelection();
516
+ }
517
+ checkTableSelection(event) {
518
+ let target = event?.target;
519
+ if (target && (target.tagName === 'TD' || target.tagName === 'TH')) {
520
+ this.isTableSelected = true;
521
+ this.selectedTable = target.closest('table');
522
+ }
523
+ else {
524
+ this.isTableSelected = false;
525
+ this.selectedTable = null;
526
+ }
527
+ this.checkPlaceholder();
528
+ }
529
+ checkPlaceholder() {
530
+ // let editor = document.getElementById('editor');
531
+ // if (editor) {
532
+ // this.isPlaceholderVisible = editor.innerHTML === '' || editor.innerHTML === '<br>';
533
+ // if (this.isPlaceholderVisible) {
534
+ // // editor.innerHTML = '<span class="placeholder" style="background: transparent; color: #000000">Insert text here ...</span>';
535
+ // } else {
536
+ // let placeholder = editor.querySelector('.placeholder');
537
+ // if (placeholder) {
538
+ // editor.removeChild(placeholder);
539
+ // }
540
+ // }
541
+ // }
542
+ }
543
+ onFocus() {
544
+ // let editor = document.getElementById('editor');
545
+ // if (editor && this.isPlaceholderVisible) {
546
+ // editor.innerHTML = '';
547
+ // this.isPlaceholderVisible = false;
548
+ // }
549
+ }
550
+ // colorChange(newColor: string) {
551
+ // this.color = newColor;
552
+ // }
553
+ onBlur() {
554
+ this.checkPlaceholder();
555
+ }
556
+ addRow() {
557
+ if (this.selectedTable) {
558
+ let row = this.selectedTable.insertRow();
559
+ for (let i = 0; i < this.selectedTable.rows[0].cells.length; i++) {
560
+ let cell = row.insertCell(i);
561
+ cell.innerHTML = '&nbsp;';
562
+ cell.style.border = '1px solid black';
563
+ }
564
+ }
565
+ }
566
+ // deleteRow() {
567
+ // if (this.selectedTable) {
568
+ // this.selectedTable.deleteRow(-1);
569
+ // }
570
+ // }
571
+ // deleteRow() {
572
+ // if (this.selectedTable) {
573
+ // let rowIndex = this.selectedTable.rows.length - 1;
574
+ // if (window.getSelection) {
575
+ // let selection = window.getSelection();
576
+ // if (selection) {
577
+ // let row = selection.anchorNode?.parentElement?.closest('tr');
578
+ // if (row) {
579
+ // rowIndex = row.rowIndex;
580
+ // }
581
+ // }
582
+ // }
583
+ // this.selectedTable.deleteRow(rowIndex);
584
+ // }
585
+ // }
586
+ deleteRow() {
587
+ const selection = window.getSelection();
588
+ if (selection) {
589
+ if (!selection.rangeCount)
590
+ return;
591
+ const range = selection.getRangeAt(0);
592
+ const selectedNode = range.startContainer;
593
+ const row = selectedNode.parentElement?.closest('tr');
594
+ if (row) {
595
+ const table = row.closest('table');
596
+ if (table) {
597
+ table.deleteRow(row.rowIndex);
598
+ }
599
+ }
600
+ }
601
+ }
602
+ // addColumn() {
603
+ // if (this.selectedTable) {
604
+ // for (let i = 0; i < this.selectedTable.rows.length; i++) {
605
+ // let cell = this.selectedTable.rows[i].insertCell(-1);
606
+ // cell.innerHTML = '&nbsp;';
607
+ // cell.style.border = '1px solid black';
608
+ // }
609
+ // }
610
+ // }
611
+ addColumn() {
612
+ if (this.selectedTable) {
613
+ const columnCount = this.selectedTable.rows[0].cells.length + 1; // New column count
614
+ const tableWidth = this.selectedTable.offsetWidth;
615
+ const minWidth = tableWidth / columnCount;
616
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
617
+ let cell = this.selectedTable.rows[i].insertCell(-1);
618
+ cell.innerHTML = '&nbsp;';
619
+ cell.style.border = '1px solid black';
620
+ cell.style.minWidth = `${minWidth}px`;
621
+ cell.style.wordWrap = 'break-word';
622
+ cell.style.wordBreak = 'break-all';
623
+ cell.style.whiteSpace = 'normal';
624
+ }
625
+ // Update existing cells' minWidth
626
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
627
+ for (let j = 0; j < this.selectedTable.rows[i].cells.length; j++) {
628
+ this.selectedTable.rows[i].cells[j].style.minWidth = `${minWidth}px`;
629
+ }
630
+ }
631
+ }
632
+ }
633
+ deleteColumn() {
634
+ if (this.selectedTable) {
635
+ if (window.getSelection) {
636
+ let selection = window.getSelection();
637
+ if (selection) {
638
+ let cell = selection.anchorNode?.parentElement?.closest('td, th');
639
+ if (cell) {
640
+ let cellIndex = cell.cellIndex;
641
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
642
+ this.selectedTable.rows[i].deleteCell(cellIndex);
643
+ }
644
+ }
645
+ }
646
+ }
647
+ }
648
+ }
649
+ // deleteColumn() {
650
+ // if (this.selectedTable) {
651
+ // for (let i = 0; i < this.selectedTable.rows.length; i++) {
652
+ // this.selectedTable.rows[i].deleteCell(-1);
653
+ // }
654
+ // }
655
+ // }
656
+ adjustTableWidth(event) {
657
+ if (this.selectedTable) {
658
+ this.selectedTable.style.width = event.target.value + 'px';
659
+ }
660
+ }
661
+ adjustCellWidth(event) {
662
+ if (this.selectedTable) {
663
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
664
+ for (let j = 0; j < this.selectedTable.rows[i].cells.length; j++) {
665
+ this.selectedTable.rows[i].cells[j].style.width = event.target.value + 'px';
666
+ }
667
+ }
668
+ }
669
+ }
670
+ adjustCellHeight(event) {
671
+ if (this.selectedTable) {
672
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
673
+ for (let j = 0; j < this.selectedTable.rows[i].cells.length; j++) {
674
+ this.selectedTable.rows[i].cells[j].style.height = event.target.value + 'px';
675
+ }
676
+ }
677
+ }
678
+ }
679
+ setCaretToEnd(element) {
680
+ const range = document.createRange();
681
+ const sel = window.getSelection();
682
+ if (sel) {
683
+ range.selectNodeContents(element);
684
+ range.collapse(false);
685
+ sel.removeAllRanges();
686
+ sel.addRange(range);
687
+ }
688
+ }
689
+ openColorPicker(inputId) {
690
+ const inputElement = document.getElementById(inputId);
691
+ if (inputElement) {
692
+ inputElement.click();
693
+ }
694
+ }
695
+ setTextColor(event, editorId) {
696
+ const editor = document.getElementById(editorId);
697
+ if (editor) {
698
+ editor.focus();
699
+ const color = event.color.hex;
700
+ this.selectedTextColor = color;
701
+ document.execCommand('foreColor', true, color);
702
+ if (this.dropdown) {
703
+ this.dropdown.close();
704
+ }
705
+ }
706
+ }
707
+ setBackgroundColor(event, editorId) {
708
+ const editor = document.getElementById(editorId);
709
+ if (editor) {
710
+ editor.focus();
711
+ const color = event.color.hex;
712
+ this.backgroundColor = color;
713
+ document.execCommand('hiliteColor', true, color);
714
+ if (this.dropdown) {
715
+ this.dropdown.close();
716
+ }
717
+ }
718
+ }
719
+ // colorChanged(event: any) {
720
+ // this.color = event.color.hex;
721
+ // }
722
+ logEvent(event, trigger) {
723
+ const color = event;
724
+ this.setTextColor(color, this.editorId);
725
+ this.selectedTextColor = event;
726
+ document.execCommand('foreColor', false, event);
727
+ // this.logs.unshift([this.logs.length + 1, trigger, event]);
728
+ }
729
+ editImage() {
730
+ let data;
731
+ switch (this.editorFrom) {
732
+ case 'section-content':
733
+ data = { editIMG: true, from: 'htmlEditor', index: this.selectedItemIndex };
734
+ this.navigateToIMGEditor(data);
735
+ sessionStorage.setItem('editImageFromTemp', JSON.stringify(this.imageEditUrl));
736
+ sessionStorage.setItem('textEditor', this.editorText);
737
+ break;
738
+ case 'template':
739
+ data = { editIMG: true, from: 'templateEditor', index: this.selectedItemIndex };
740
+ this.navigateToIMGEditor(data);
741
+ // sessionStorage.setItem('editImageFromTemp2', JSON.stringify(this.imageEditUrl));
742
+ sessionStorage.setItem('templateEditor', this.editorText);
743
+ break;
744
+ default:
745
+ sessionStorage.removeItem('editImageFromTemp');
746
+ // sessionStorage.removeItem('editImageFromTemp2');
747
+ sessionStorage.removeItem('templateEditor');
748
+ sessionStorage.removeItem('textEditor');
749
+ break;
750
+ }
751
+ // if (this.editorFrom === 'section-content') {
752
+ // const data = {editIMG: true, from: 'htmlEditor', index: this.selectedItemIndex}
753
+ // this.navigateToIMGEditor(data)
754
+ // sessionStorage.setItem('editImageFromTemp', JSON.stringify(this.imageEditUrl))
755
+ // sessionStorage.setItem('textEditor', this.editorText)
756
+ // }
757
+ }
758
+ navigateToIMGEditor(data) {
759
+ this.router.navigate(['/admin/image-editor'], { queryParams: { data: JSON.stringify(data) } });
760
+ }
761
+ // onTextSelect(event: MouseEvent): void {
762
+ // if (this.toolbarMode === 'bubble') {
763
+ // const selection = window.getSelection();
764
+ // if (selection && selection.rangeCount > 0) {
765
+ // const range = selection.getRangeAt(0);
766
+ // if (!range.collapsed) {
767
+ // const rect = range.getBoundingClientRect();
768
+ // this.toolbarTop = rect.bottom + window.scrollY + 10;
769
+ // this.toolbarLeft = rect.left + window.scrollX + (rect.width / 2) - 50;
770
+ // this.showToolbar = true;
771
+ // } else {
772
+ // this.showToolbar = false;
773
+ // }
774
+ // }
775
+ // }
776
+ // }
777
+ onTextSelect(event) {
778
+ if (this.toolbarMode === 'bubble') {
779
+ const selection = window.getSelection();
780
+ if (selection && selection.rangeCount > 0) {
781
+ const range = selection.getRangeAt(0);
782
+ if (!range.collapsed) {
783
+ const rect = range.getBoundingClientRect();
784
+ const scrollY = document.documentElement.scrollTop;
785
+ const scrollX = document.documentElement.scrollLeft;
786
+ this.toolbarTop = rect.top + scrollY - 75;
787
+ this.toolbarLeft = rect.left + scrollX + (rect.width / 2) - 325;
788
+ this.showToolbar = true;
789
+ }
790
+ else {
791
+ this.showToolbar = false;
792
+ }
793
+ }
794
+ else {
795
+ this.showToolbar = false;
796
+ }
797
+ }
798
+ }
799
+ onPaste(event) {
800
+ event.preventDefault();
801
+ const clipboardData = event.clipboardData;
802
+ if (clipboardData) {
803
+ const pastedText = clipboardData.getData('text/plain');
804
+ if (this.isTableData(pastedText)) {
805
+ const html = this.convertTextToTable(pastedText);
806
+ this.insertHtmlAtCaret(html);
807
+ }
808
+ else {
809
+ this.insertHtmlAtCaret(pastedText);
810
+ }
811
+ }
812
+ }
813
+ isTableData(text) {
814
+ const rows = text.split('\n');
815
+ return rows.length > 1 && rows[0].split('\t').length > 1;
816
+ }
817
+ convertTextToTable(text) {
818
+ const rows = text.split('\n').filter(row => row.trim() !== '');
819
+ const tableRows = rows.map(row => {
820
+ const cells = row.split('\t').map(cell => `<td class="px-1 py-1 style="border: 1px solid #000">${cell}</td>`).join('');
821
+ return `<tr >${cells}</tr>`;
822
+ }).join('');
823
+ return `<table>${tableRows}</table>`;
824
+ }
825
+ insertHtmlAtCaret(html) {
826
+ const range = window.getSelection()?.getRangeAt(0);
827
+ if (range) {
828
+ range.deleteContents();
829
+ const tempDiv = document.createElement('div');
830
+ tempDiv.innerHTML = html;
831
+ const frag = document.createDocumentFragment();
832
+ let node;
833
+ while ((node = tempDiv.firstChild)) {
834
+ frag.appendChild(node);
835
+ }
836
+ range.insertNode(frag);
837
+ range.collapse(false);
838
+ }
839
+ }
840
+ openFullscreen() {
841
+ var elem = document.getElementById("textEditor");
842
+ this.isFullScreen = true;
843
+ if (elem.requestFullscreen) {
844
+ elem.requestFullscreen();
845
+ }
846
+ else if (elem.mozRequestFullScreen) {
847
+ elem.mozRequestFullScreen();
848
+ }
849
+ else if (elem.webkitRequestFullscreen) {
850
+ elem.webkitRequestFullscreen();
851
+ }
852
+ else if (elem.msRequestFullscreen) {
853
+ elem.msRequestFullscreen();
854
+ }
855
+ this.style = {
856
+ 'min-height': '90vh',
857
+ 'max-height': '90vh',
858
+ };
859
+ }
860
+ closeFullscreen() {
861
+ if (document.exitFullscreen) {
862
+ document.exitFullscreen();
863
+ this.isFullScreen = false;
864
+ this.style = {
865
+ 'min-height': '400px',
866
+ 'max-height': '400px',
867
+ };
868
+ }
869
+ }
870
+ openCanvasColorPicker(inputId) {
871
+ const inputElement = document.getElementById(inputId);
872
+ if (inputElement) {
873
+ inputElement.click();
874
+ }
875
+ }
876
+ setCanvasBackgroundColor(event, editorId) {
877
+ this.CanvasColor = event.color.hex;
878
+ const editor = document.getElementById(editorId);
879
+ if (editor) {
880
+ let color = '';
881
+ console.log('event bg color = ', event);
882
+ editor.style.backgroundColor = '#fff';
883
+ color = event.color.hex || event;
884
+ editor.style.backgroundColor = color;
885
+ this.mainCanvas();
886
+ // this.init_Func(`<div style="background-color: ${color};">${this.editorText}</div>`);
887
+ if (this.dropdown) {
888
+ this.dropdown.close();
889
+ }
890
+ }
891
+ }
892
+ getToday() {
893
+ const currentDate = new Date();
894
+ const day = currentDate.getDate();
895
+ const month = currentDate.getMonth() + 1;
896
+ const year = currentDate.getFullYear();
897
+ const formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
898
+ this.today = formattedDate;
899
+ // const label = `{(${this.today})}`;
900
+ const label = `{(date)}`;
901
+ const htmlContent = ` ${label} `;
902
+ const editor = document.getElementById(this.editorId);
903
+ if (editor) {
904
+ this.editorText += `<div> ${htmlContent} </div>`;
905
+ this.sanitizedContent = this.editorText;
906
+ }
907
+ else {
908
+ this.editorText += `<div> ${htmlContent} </div>`;
909
+ this.sanitizedContent = this.editorText;
910
+ }
911
+ }
912
+ insertPageNumber() {
913
+ const pageNumber = '{(page)}';
914
+ const editor = document.getElementById(this.editorId);
915
+ if (editor) {
916
+ this.editorText += `<div> ${pageNumber} </div>`;
917
+ this.sanitizedContent = this.editorText;
918
+ }
919
+ else {
920
+ this.editorText += `<div> ${pageNumber} </div>`;
921
+ this.sanitizedContent = this.editorText;
922
+ }
923
+ }
924
+ clearTextEditor() {
925
+ const editor = document.getElementById(this.editorId);
926
+ if (editor) {
927
+ this.editorTextClear.emit();
928
+ let data;
929
+ // data.color.hex = '#ffffff'
930
+ data = {
931
+ color: {
932
+ hex: '#353343'
933
+ }
934
+ };
935
+ editor.innerHTML = '';
936
+ this.setCanvasBackgroundColor(data, this.editorId);
937
+ }
938
+ }
939
+ setupHistory() {
940
+ this.saveState();
941
+ const editor = document.getElementById(this.editorId);
942
+ if (editor) {
943
+ editor.addEventListener('input', () => this.onInput());
944
+ }
945
+ }
946
+ onInput() {
947
+ this.saveState();
948
+ }
949
+ saveState() {
950
+ const editor = document.getElementById(this.editorId);
951
+ if (editor) {
952
+ const editorContent = editor.innerHTML;
953
+ if (this.historyIndex === this.history.length - 1) {
954
+ this.history.push(editorContent);
955
+ this.redoStack = [];
956
+ }
957
+ else {
958
+ this.history = this.history.slice(0, this.historyIndex + 1);
959
+ this.history.push(editorContent);
960
+ this.redoStack = [];
961
+ }
962
+ this.historyIndex++;
963
+ }
964
+ }
965
+ undo() {
966
+ if (this.historyIndex > 0) {
967
+ this.redoStack.push(this.history[this.historyIndex]);
968
+ this.historyIndex--;
969
+ const editor = document.getElementById(this.editorId);
970
+ if (editor) {
971
+ this.sanitizedContent = this.history[this.historyIndex];
972
+ }
973
+ }
974
+ }
975
+ redo() {
976
+ if (this.redoStack.length > 0) {
977
+ const redoContent = this.redoStack.pop();
978
+ this.history.push(redoContent);
979
+ this.historyIndex++;
980
+ const editor = document.getElementById(this.editorId);
981
+ if (editor) {
982
+ this.sanitizedContent = redoContent;
983
+ }
984
+ }
985
+ }
986
+ mainCanvas(data) {
987
+ let BG = '';
988
+ const editor = document.getElementById(this.editorId);
989
+ if (editor) {
990
+ editor.focus();
991
+ if (editor.style.backgroundColor === 'rgb(53, 51, 67)') {
992
+ BG = 'rgb(255, 255, 255)';
993
+ }
994
+ else {
995
+ BG = editor.style.backgroundColor;
996
+ }
997
+ return `<div style="background-color: ${BG}; padding: 10px 15px;">${data}</div>`;
998
+ }
999
+ else {
1000
+ return `<div>${data}</div>`;
1001
+ }
1002
+ }
1003
+ themeMode() {
1004
+ const clrMode = document.body.getAttribute('data-layout-color');
1005
+ if (clrMode == 'dark') {
1006
+ return '2px solid #414141 !important';
1007
+ }
1008
+ else {
1009
+ return '2px solid #D0D0D0 !important';
1010
+ }
1011
+ }
1012
+ themeModeClr() {
1013
+ const clrMode = document.body.getAttribute('data-layout-color');
1014
+ if (clrMode == 'dark') {
1015
+ return '#fff !important';
1016
+ }
1017
+ else {
1018
+ return '#000 !important';
1019
+ }
1020
+ }
1021
+ }
1022
+ ElHeaderAndFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterComponent, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i0.Renderer2 }, { token: i2.DomSanitizer }], target: i0.ɵɵFactoryTarget.Component });
1023
+ ElHeaderAndFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: ElHeaderAndFooterComponent, selector: "el-header-and-footer", inputs: { editorId: "editorId", editorText: "editorText", editorFrom: "editorFrom", clear: "clear", editorAction: "editorAction", style: "style", bgColor: "bgColor", toolbarMode: "toolbarMode", value: "value" }, outputs: { editorTextChange: "editorTextChange", editorActionResponse: "editorActionResponse", editorTextClear: "editorTextClear" }, providers: [{
1024
+ provide: NG_VALUE_ACCESSOR,
1025
+ useExisting: forwardRef(() => ElHeaderAndFooterComponent),
1026
+ multi: true
1027
+ }], viewQueries: [{ propertyName: "dropdown", first: true, predicate: NgbDropdown, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container els-text-editor px-0\">\r\n <div class=\"btn-toolbar els-btn-toolbar p-2 py-2 mb-0\" role=\"toolbar\" [id]=\"editorId+'toolbar'\"\r\n aria-label=\"Toolbar with button groups\">\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Header Options\">\r\n <!-- <div class=\"dropdown\">\r\n <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff; width: 150px; border: 2px solid #7D6D6D !important;\" (change)=\"onFormatChange($event)\">\r\n <option [value]=\"'<h1>'\">Heading 1</option>\r\n <option [value]=\"'<h2>'\">Heading 2</option>\r\n <option [value]=\"'<h3>'\">Heading 3</option>\r\n <option [value]=\"'<h4>'\">Heading 4</option>\r\n <option [value]=\"'<h5>'\">Heading 5</option>\r\n <option [value]=\"'<h6>'\">Heading 6</option>\r\n <option selected [value]=\"'<p>'\">Normal</option>\r\n </select>\r\n </div> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button class=\"btn btn-sm els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n id=\"headerDropdown\" ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\">{{selectedFormatBlock | titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h1>')\" [style.color]=\"themeModeClr()\">\r\n <h1>Heading 1</h1>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h2>')\" [style.color]=\"themeModeClr()\">\r\n <h2>Heading 2</h2>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h3>')\" [style.color]=\"themeModeClr()\">\r\n <h3>Heading 3</h3>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h4>')\" [style.color]=\"themeModeClr()\">\r\n <h4>Heading 4</h4>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h5>')\" [style.color]=\"themeModeClr()\">\r\n <h5>Heading 5</h5>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h6>')\" [style.color]=\"themeModeClr()\">\r\n <h6>Heading 6</h6>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<p>')\" [style.color]=\"themeModeClr()\">\r\n <p>Normal</p>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"btn-group els-button-group\" role=\"group\" aria-label=\"Font Options\">\r\n <div ngbDropdown class=\"dropdown\">\r\n <button class=\"btn btn-sm els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\" ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\"\r\n (click)=\"changeFont(font)\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"border py-0\" [style.border]=\"themeMode()\" style=\"height: fit-content;\">\r\n <div class=\"btn-group els-button-group mr-2 \" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-sm els-toolbar-button\" [class.active]=\"isBoldActive\"\r\n (click)=\"format('bold', editorId)\">\r\n <i class=\"mdi mdi-format-bold\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isItalicActive\"\r\n (click)=\"format('italic', editorId)\">\r\n <i class=\"mdi mdi-format-italic\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isUnderlineActive\"\r\n (click)=\"format('underline', editorId)\">\r\n <i class=\"mdi mdi-format-underline\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isStrikethroughActive\"\r\n (click)=\"format('strikethrough', editorId)\">\r\n <i class=\"mdi mdi-format-strikethrough-variant\"></i>\r\n </button>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Text Color\">\r\n <!-- <input type=\"color\" id=\"textColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setTextColor($event)\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"position: relative;\"\r\n (click)=\"openColorPicker('textColorPicker')\">\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\" [style.color]=\"selectedTextColor\"></i>\r\n </button> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\"\r\n [style.color]=\"selectedTextColor ?? '#000'\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setTextColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Background Color\" style=\"position: relative;\">\r\n <!-- <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [style.color]=\"backgroundColor\"\r\n (click)=\"openColorPicker('bgColorPicker')\">\r\n <i class=\"mdi mdi-alpha-a-box\"></i>\r\n </button>\r\n <input type=\"color\" id=\"bgColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setBackgroundColor($event)\"> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-alpha-a-box\" [style.color]=\"backgroundColor ?? '#000'\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertOrderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-numbered\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertUnorderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-bulleted\"></i></button>\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button arrow-none text-secondary\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-align-left \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 3px;\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyLeft', editorId)\"><i class=\"mdi mdi-format-align-left\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyCenter', editorId)\"><i\r\n class=\"mdi mdi-format-align-center\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyRight', editorId)\"><i\r\n class=\"mdi mdi-format-align-right\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyFull', editorId)\"><i\r\n class=\"mdi mdi-format-align-justify\"></i></button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSubscriptActive\"\r\n (click)=\"format('subscript', editorId)\">\r\n <i class=\"mdi mdi-format-subscript\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSuperscriptActive\"\r\n (click)=\"format('superscript', editorId)\">\r\n <i class=\"mdi mdi-format-superscript\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-outline-primary arrow-none els-toolbar-button border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-fill\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\"\r\n (onChangeComplete)=\"setCanvasBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group-2 mr-3\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"getToday()\">Date</button>\r\n </div>\r\n <div class=\"btn-group els-button-group-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"insertPageNumber()\">Page\r\n No</button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addLink()\"><i\r\n class=\"mdi mdi-link-variant\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"insertsImage(editorId)\"><i\r\n class=\"mdi mdi-image\"></i></button>\r\n <input type=\"file\" id=\"imageInput\" style=\"display: none;\" (change)=\"handleImageUpload($event)\">\r\n\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteRow()\"><i class=\"mdi mdi-table-row-remove\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button>\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"undo()\">\r\n <i class=\"mdi mdi-undo\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"redo()\">\r\n <i class=\"mdi mdi-redo\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <!-- <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"clearTextEditor()\">\r\n <i class=\"mdi mdi-close-circle\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div contenteditable=\"true\" [id]=\"editorId\" class=\"els-border p-3\" #editor\r\n style=\"position: relative !important; height: 130px; max-width: 100%; overflow: hidden; \"\r\n [ngStyle]=\"{'font-family': selectedFont, 'font-size': selectedFontSize + 'px'}\" [style]=\"style\"\r\n contenteditable=\"true\" (input)=\"onModelChange($event)\" placeholder=\"Insert text here ...\"\r\n (mouseup)=\"onTextSelect($event)\" [innerHTML]=\"sanitizedContent\" (paste)=\"onPaste($event)\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (click)=\"checkTableSelection($event)\">\r\n </div>\r\n <table *ngIf=\"parsedTable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of parsedTable.headers\">{{ header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of parsedTable.rows\">\r\n <td *ngFor=\"let cell of row\">{{ cell }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>", styles: ["*{font-family:Noto Sans Telugu UI,sans-serif}#editor{min-height:125px;max-height:125px;overflow-y:auto}#editor img{max-width:100%;height:auto}.bubble-toolbar{position:absolute;background-color:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 5px #00000026;z-index:1000;display:none}.els-text-editor{box-sizing:border-box}.els-btn-toolbar{width:\"1028px\"}.els-toolbar-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.els-toolbar-button-2{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:100px}.els-toolbar-dropdown-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;color:#fff}.els-toolbar-dropdown-button:focus{outline:none}.els-form-select{cursor:pointer;display:inline-block;height:100%;padding:2px 5px 2px 8px;position:relative;width:100%;border:none;background-color:#fff;color:#6c757d}.els-button-group{margin-right:15px}.els-form-select:focus{outline:none}.els-border{border:#353343}.els-border:focus{outline:none}.els-dropdown-item{width:50px!important}.els-toolbar-button.active,.btn-toolbar .btn.active,.btn-toolbar .btn:hover{color:#06c}.dropdown-toggle:after{display:none}.table-container{overflow-x:auto;width:100%}table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse;table-layout:fixed}table td,table th{padding:.75rem;vertical-align:top;border:1px solid #dee2e6;word-wrap:break-word}@media (max-width: 576px){table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;border-spacing:0}table thead,table tbody,table tr,table th,table td{display:block}table thead tr{position:absolute;top:-9999px;left:-9999px}table tr{margin-bottom:.625rem;border:1px solid #ccc}table td,table th{border:none;border-bottom:1px solid #ddd;position:relative;padding-left:50%;white-space:normal;text-align:left}table td:before,table th:before{position:absolute;top:.75rem;left:.75rem;width:45%;padding-right:.75rem;white-space:nowrap;text-align:left;font-weight:700}}table.resizable{overflow:hidden;resize:both}.btn-group .btn{display:flex;align-items:center;justify-content:center}.btn-group .mdi{font-size:18px}.icon-with-underline{text-decoration:underline}pre{background-color:#f0f0f0;border:1px solid #ccc;border-radius:5px;overflow-x:auto}code{display:block;white-space:pre-wrap;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#888;border-radius:10px;cursor:pointer}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#555}.custom-scrollbar::-webkit-scrollbar-track{background:transparent;border-radius:10px}.pasted-table{border-collapse:collapse;width:100%}.pasted-table td{border:1px solid black;padding:8px}.pasted-table tr:nth-child(even){background-color:#f2f2f2}.pasted-table tr:hover{background-color:#ddd}.vertical-line{border-left:2px solid #ccc;height:100%;margin:0 auto}.els-text-format{font-weight:800!important;background-color:#2b2936!important;border:2px solid #7D6D6D!important;color:#fff!important}.els-text-format>button{color:#fff!important}.els-text-format>button:hover{background-color:#7d6d6d!important;color:#fff!important}\n"], components: [{ type: i3.SketchComponent, selector: "color-sketch", inputs: ["disableAlpha", "presetColors", "width"] }], directives: [{ type: i4.NgbDropdown, selector: "[ngbDropdown]", inputs: ["autoClose", "dropdownClass", "open", "placement", "container", "display"], outputs: ["openChange"], exportAs: ["ngbDropdown"] }, { type: i4.NgbDropdownToggle, selector: "[ngbDropdownToggle]" }, { type: i4.NgbDropdownMenu, selector: "[ngbDropdownMenu]" }, { type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "titlecase": i5.TitleCasePipe } });
1028
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterComponent, decorators: [{
1029
+ type: Component,
1030
+ args: [{ selector: 'el-header-and-footer', providers: [{
1031
+ provide: NG_VALUE_ACCESSOR,
1032
+ useExisting: forwardRef(() => ElHeaderAndFooterComponent),
1033
+ multi: true
1034
+ }], template: "<div class=\"container els-text-editor px-0\">\r\n <div class=\"btn-toolbar els-btn-toolbar p-2 py-2 mb-0\" role=\"toolbar\" [id]=\"editorId+'toolbar'\"\r\n aria-label=\"Toolbar with button groups\">\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Header Options\">\r\n <!-- <div class=\"dropdown\">\r\n <select class=\"els-form-select \" style=\" font-weight: 700 !important; color: #fff; width: 150px; border: 2px solid #7D6D6D !important;\" (change)=\"onFormatChange($event)\">\r\n <option [value]=\"'<h1>'\">Heading 1</option>\r\n <option [value]=\"'<h2>'\">Heading 2</option>\r\n <option [value]=\"'<h3>'\">Heading 3</option>\r\n <option [value]=\"'<h4>'\">Heading 4</option>\r\n <option [value]=\"'<h5>'\">Heading 5</option>\r\n <option [value]=\"'<h6>'\">Heading 6</option>\r\n <option selected [value]=\"'<p>'\">Normal</option>\r\n </select>\r\n </div> -->\r\n <div ngbDropdown class=\"dropdown\">\r\n <button class=\"btn btn-sm els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\"\r\n id=\"headerDropdown\" ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\">{{selectedFormatBlock | titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h1>')\" [style.color]=\"themeModeClr()\">\r\n <h1>Heading 1</h1>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h2>')\" [style.color]=\"themeModeClr()\">\r\n <h2>Heading 2</h2>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h3>')\" [style.color]=\"themeModeClr()\">\r\n <h3>Heading 3</h3>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h4>')\" [style.color]=\"themeModeClr()\">\r\n <h4>Heading 4</h4>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h5>')\" [style.color]=\"themeModeClr()\">\r\n <h5>Heading 5</h5>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<h6>')\" [style.color]=\"themeModeClr()\">\r\n <h6>Heading 6</h6>\r\n </button>\r\n <button class=\"dropdown-item pb-0\" type=\"button\" (click)=\"onFormatChange('<p>')\" [style.color]=\"themeModeClr()\">\r\n <p>Normal</p>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"btn-group els-button-group\" role=\"group\" aria-label=\"Font Options\">\r\n <div ngbDropdown class=\"dropdown\">\r\n <button class=\"btn btn-sm els-form-select border els-toolbar-dropdown-button dropdown-toggle text-start\"\r\n id=\"headerDropdown\" [style.border]=\"themeMode()\" [style.color]=\"themeModeClr()\" ngbDropdownToggle>\r\n <span style=\"width: 85px; font-weight: 700 !important;\" class=\"text-truncate\">{{selectedFont |\r\n titlecase}}</span>\r\n <i class=\"mdi mdi-chevron-down \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"headerDropdown\" class=\"els-text-format\">\r\n <button class=\"dropdown-item pb-0\" type=\"button\" *ngFor=\"let font of fonts\"\r\n (click)=\"changeFont(font)\">\r\n <span>{{ font }}</span>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"border py-0\" [style.border]=\"themeMode()\" style=\"height: fit-content;\">\r\n <div class=\"btn-group els-button-group mr-2 \" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-sm els-toolbar-button\" [class.active]=\"isBoldActive\"\r\n (click)=\"format('bold', editorId)\">\r\n <i class=\"mdi mdi-format-bold\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isItalicActive\"\r\n (click)=\"format('italic', editorId)\">\r\n <i class=\"mdi mdi-format-italic\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isUnderlineActive\"\r\n (click)=\"format('underline', editorId)\">\r\n <i class=\"mdi mdi-format-underline\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isStrikethroughActive\"\r\n (click)=\"format('strikethrough', editorId)\">\r\n <i class=\"mdi mdi-format-strikethrough-variant\"></i>\r\n </button>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Text Color\">\r\n <!-- <input type=\"color\" id=\"textColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setTextColor($event)\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"position: relative;\"\r\n (click)=\"openColorPicker('textColorPicker')\">\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\" [style.color]=\"selectedTextColor\"></i>\r\n </button> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-text icon-with-underline\"\r\n [style.color]=\"selectedTextColor ?? '#000'\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setTextColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"btn-group\" role=\"group\" aria-label=\"Background Color\" style=\"position: relative;\">\r\n <!-- <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [style.color]=\"backgroundColor\"\r\n (click)=\"openColorPicker('bgColorPicker')\">\r\n <i class=\"mdi mdi-alpha-a-box\"></i>\r\n </button>\r\n <input type=\"color\" id=\"bgColorPicker\"\r\n style=\"position: absolute; top: 100%; left: 0; z-index: 100; opacity: 0;\"\r\n (change)=\"setBackgroundColor($event)\"> -->\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\"\r\n class=\"btn btn-outline-primary els-toolbar-button arrow-none text-secondary border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-alpha-a-box\" [style.color]=\"backgroundColor ?? '#000'\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\" [presetColors]=\"[]\"\r\n (onChangeComplete)=\"setBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertOrderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-numbered\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"format('insertUnorderedList', editorId)\"><i\r\n class=\"mdi mdi-format-list-bulleted\"></i></button>\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button arrow-none text-secondary\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-align-left \"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 3px;\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyLeft', editorId)\"><i class=\"mdi mdi-format-align-left\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyCenter', editorId)\"><i\r\n class=\"mdi mdi-format-align-center\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyRight', editorId)\"><i\r\n class=\"mdi mdi-format-align-right\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" style=\"color: #7A7982;\"\r\n (click)=\"format('justifyFull', editorId)\"><i\r\n class=\"mdi mdi-format-align-justify\"></i></button>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSubscriptActive\"\r\n (click)=\"format('subscript', editorId)\">\r\n <i class=\"mdi mdi-format-subscript\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" [class.active]=\"isSuperscriptActive\"\r\n (click)=\"format('superscript', editorId)\">\r\n <i class=\"mdi mdi-format-superscript\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n\r\n <div ngbDropdown class=\"ql-align\">\r\n <button type=\"button\" class=\"btn btn-outline-primary arrow-none els-toolbar-button border-none p-0\"\r\n id=\"dropdownBasic1\" aria-expanded=\"false\" ngbDropdownToggle>\r\n <i class=\"mdi mdi-format-color-fill\"></i>\r\n </button>\r\n <div ngbDropdownMenu aria-labelledby=\"dropdownBasic1\" style=\"width: 200px;\">\r\n <color-sketch color=\"#fff\"\r\n (onChangeComplete)=\"setCanvasBackgroundColor($event, editorId)\"></color-sketch>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group-2 mr-3\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"getToday()\">Date</button>\r\n </div>\r\n <div class=\"btn-group els-button-group-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button class=\"btn btn-white px-1\" style=\"height: 24px;\" (click)=\"insertPageNumber()\">Page\r\n No</button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addLink()\"><i\r\n class=\"mdi mdi-link-variant\"></i></button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"insertsImage(editorId)\"><i\r\n class=\"mdi mdi-image\"></i></button>\r\n <input type=\"file\" id=\"imageInput\" style=\"display: none;\" (change)=\"handleImageUpload($event)\">\r\n\r\n </div>\r\n <!-- <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addTable()\"><i\r\n class=\"mdi mdi-table\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"addRow()\"><i\r\n class=\"mdi mdi-table-row-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteRow()\"><i class=\"mdi mdi-table-row-remove\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"addColumn()\"><i class=\"mdi mdi-table-column-plus-after\"></i></button>\r\n <button *ngIf=\"isTableSelected\" type=\"button\" class=\"btn btn-white els-toolbar-button\"\r\n (click)=\"deleteColumn()\"><i class=\"mdi mdi-table-column-remove\"></i></button>\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button>\r\n </div> -->\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Text Formatting\">\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"undo()\">\r\n <i class=\"mdi mdi-undo\"></i>\r\n </button>\r\n <button type=\"button\" class=\"btn btn-white els-toolbar-button\" (click)=\"redo()\">\r\n <i class=\"mdi mdi-redo\"></i>\r\n </button>\r\n\r\n </div>\r\n <div class=\"btn-group els-button-group mr-2\" role=\"group\" aria-label=\"Table Options\">\r\n <!-- <button *ngIf=\"selectedImage\" class=\"btn btn-white els-toolbar-button-2\" (click)=\"editImage()\"\r\n style=\"position: absolute;\">Edit Image</button> -->\r\n <button class=\"btn btn-white els-toolbar-button\" (click)=\"clearTextEditor()\">\r\n <i class=\"mdi mdi-close-circle\"></i>\r\n </button>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n\r\n\r\n <div contenteditable=\"true\" [id]=\"editorId\" class=\"els-border p-3\" #editor\r\n style=\"position: relative !important; height: 130px; max-width: 100%; overflow: hidden; \"\r\n [ngStyle]=\"{'font-family': selectedFont, 'font-size': selectedFontSize + 'px'}\" [style]=\"style\"\r\n contenteditable=\"true\" (input)=\"onModelChange($event)\" placeholder=\"Insert text here ...\"\r\n (mouseup)=\"onTextSelect($event)\" [innerHTML]=\"sanitizedContent\" (paste)=\"onPaste($event)\" (focus)=\"onFocus()\"\r\n (blur)=\"onBlur()\" (click)=\"checkTableSelection($event)\">\r\n </div>\r\n <table *ngIf=\"parsedTable\">\r\n <thead>\r\n <tr>\r\n <th *ngFor=\"let header of parsedTable.headers\">{{ header }}</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let row of parsedTable.rows\">\r\n <td *ngFor=\"let cell of row\">{{ cell }}</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n</div>", styles: ["*{font-family:Noto Sans Telugu UI,sans-serif}#editor{min-height:125px;max-height:125px;overflow-y:auto}#editor img{max-width:100%;height:auto}.bubble-toolbar{position:absolute;background-color:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 5px #00000026;z-index:1000;display:none}.els-text-editor{box-sizing:border-box}.els-btn-toolbar{width:\"1028px\"}.els-toolbar-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:28px}.els-toolbar-button-2{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;width:100px}.els-toolbar-dropdown-button{background:none;border:none;cursor:pointer;display:inline-block;float:left;height:24px;padding:3px 5px;color:#fff}.els-toolbar-dropdown-button:focus{outline:none}.els-form-select{cursor:pointer;display:inline-block;height:100%;padding:2px 5px 2px 8px;position:relative;width:100%;border:none;background-color:#fff;color:#6c757d}.els-button-group{margin-right:15px}.els-form-select:focus{outline:none}.els-border{border:#353343}.els-border:focus{outline:none}.els-dropdown-item{width:50px!important}.els-toolbar-button.active,.btn-toolbar .btn.active,.btn-toolbar .btn:hover{color:#06c}.dropdown-toggle:after{display:none}.table-container{overflow-x:auto;width:100%}table{width:100%;max-width:100%;margin-bottom:1rem;background-color:transparent;border-collapse:collapse;table-layout:fixed}table td,table th{padding:.75rem;vertical-align:top;border:1px solid #dee2e6;word-wrap:break-word}@media (max-width: 576px){table{display:block;overflow-x:auto;-webkit-overflow-scrolling:touch;border-spacing:0}table thead,table tbody,table tr,table th,table td{display:block}table thead tr{position:absolute;top:-9999px;left:-9999px}table tr{margin-bottom:.625rem;border:1px solid #ccc}table td,table th{border:none;border-bottom:1px solid #ddd;position:relative;padding-left:50%;white-space:normal;text-align:left}table td:before,table th:before{position:absolute;top:.75rem;left:.75rem;width:45%;padding-right:.75rem;white-space:nowrap;text-align:left;font-weight:700}}table.resizable{overflow:hidden;resize:both}.btn-group .btn{display:flex;align-items:center;justify-content:center}.btn-group .mdi{font-size:18px}.icon-with-underline{text-decoration:underline}pre{background-color:#f0f0f0;border:1px solid #ccc;border-radius:5px;overflow-x:auto}code{display:block;white-space:pre-wrap;font-family:Menlo,Monaco,Consolas,Courier New,monospace;font-size:14px}.custom-scrollbar::-webkit-scrollbar{width:4px}.custom-scrollbar::-webkit-scrollbar-thumb{background-color:#888;border-radius:10px;cursor:pointer}.custom-scrollbar::-webkit-scrollbar-thumb:hover{background-color:#555}.custom-scrollbar::-webkit-scrollbar-track{background:transparent;border-radius:10px}.pasted-table{border-collapse:collapse;width:100%}.pasted-table td{border:1px solid black;padding:8px}.pasted-table tr:nth-child(even){background-color:#f2f2f2}.pasted-table tr:hover{background-color:#ddd}.vertical-line{border-left:2px solid #ccc;height:100%;margin:0 auto}.els-text-format{font-weight:800!important;background-color:#2b2936!important;border:2px solid #7D6D6D!important;color:#fff!important}.els-text-format>button{color:#fff!important}.els-text-format>button:hover{background-color:#7d6d6d!important;color:#fff!important}\n"] }]
1035
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.Renderer2 }, { type: i2.DomSanitizer }]; }, propDecorators: { dropdown: [{
1036
+ type: ViewChild,
1037
+ args: [NgbDropdown, { static: true }]
1038
+ }], editorId: [{
1039
+ type: Input
1040
+ }], editorText: [{
1041
+ type: Input
1042
+ }], editorFrom: [{
1043
+ type: Input
1044
+ }], clear: [{
1045
+ type: Input
1046
+ }], editorAction: [{
1047
+ type: Input
1048
+ }], style: [{
1049
+ type: Input
1050
+ }], bgColor: [{
1051
+ type: Input
1052
+ }], toolbarMode: [{
1053
+ type: Input
1054
+ }], editorTextChange: [{
1055
+ type: Output
1056
+ }], editorActionResponse: [{
1057
+ type: Output
1058
+ }], value: [{
1059
+ type: Input
1060
+ }], editorTextClear: [{
1061
+ type: Output
1062
+ }] } });
1063
+
1064
+ class ElHeaderAndFooterModule {
1065
+ }
1066
+ ElHeaderAndFooterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1067
+ ElHeaderAndFooterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterModule, declarations: [ElHeaderAndFooterComponent], imports: [CommonModule,
1068
+ NgxColorsModule,
1069
+ FormsModule,
1070
+ ReactiveFormsModule,
1071
+ NgbDropdownModule,
1072
+ ColorSketchModule,
1073
+ ColorPickerModule], exports: [ElHeaderAndFooterComponent] });
1074
+ ElHeaderAndFooterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterModule, imports: [[
1075
+ CommonModule,
1076
+ NgxColorsModule,
1077
+ FormsModule,
1078
+ ReactiveFormsModule,
1079
+ NgbDropdownModule,
1080
+ ColorSketchModule,
1081
+ ColorPickerModule
1082
+ ]] });
1083
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterModule, decorators: [{
1084
+ type: NgModule,
1085
+ args: [{
1086
+ declarations: [
1087
+ ElHeaderAndFooterComponent
1088
+ ],
1089
+ imports: [
1090
+ CommonModule,
1091
+ NgxColorsModule,
1092
+ FormsModule,
1093
+ ReactiveFormsModule,
1094
+ NgbDropdownModule,
1095
+ ColorSketchModule,
1096
+ ColorPickerModule
1097
+ ],
1098
+ exports: [
1099
+ ElHeaderAndFooterComponent
1100
+ ]
1101
+ }]
1102
+ }] });
1103
+
1104
+ /*
1105
+ * Public API Surface of el-header-and-footer
1106
+ */
1107
+
1108
+ /**
1109
+ * Generated bundle index. Do not edit.
1110
+ */
1111
+
1112
+ export { ElHeaderAndFooterComponent, ElHeaderAndFooterModule, ElHeaderAndFooterService };
1113
+ //# sourceMappingURL=el-header-and-footer.mjs.map