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,1116 @@
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 === null || selection === void 0 ? void 0 : selection.removeAllRanges();
324
+ selection === null || selection === void 0 ? void 0 : 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 !== null && value !== void 0 ? 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 === null || event === void 0 ? void 0 : 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
+ var _a;
588
+ const selection = window.getSelection();
589
+ if (selection) {
590
+ if (!selection.rangeCount)
591
+ return;
592
+ const range = selection.getRangeAt(0);
593
+ const selectedNode = range.startContainer;
594
+ const row = (_a = selectedNode.parentElement) === null || _a === void 0 ? void 0 : _a.closest('tr');
595
+ if (row) {
596
+ const table = row.closest('table');
597
+ if (table) {
598
+ table.deleteRow(row.rowIndex);
599
+ }
600
+ }
601
+ }
602
+ }
603
+ // addColumn() {
604
+ // if (this.selectedTable) {
605
+ // for (let i = 0; i < this.selectedTable.rows.length; i++) {
606
+ // let cell = this.selectedTable.rows[i].insertCell(-1);
607
+ // cell.innerHTML = '&nbsp;';
608
+ // cell.style.border = '1px solid black';
609
+ // }
610
+ // }
611
+ // }
612
+ addColumn() {
613
+ if (this.selectedTable) {
614
+ const columnCount = this.selectedTable.rows[0].cells.length + 1; // New column count
615
+ const tableWidth = this.selectedTable.offsetWidth;
616
+ const minWidth = tableWidth / columnCount;
617
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
618
+ let cell = this.selectedTable.rows[i].insertCell(-1);
619
+ cell.innerHTML = '&nbsp;';
620
+ cell.style.border = '1px solid black';
621
+ cell.style.minWidth = `${minWidth}px`;
622
+ cell.style.wordWrap = 'break-word';
623
+ cell.style.wordBreak = 'break-all';
624
+ cell.style.whiteSpace = 'normal';
625
+ }
626
+ // Update existing cells' minWidth
627
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
628
+ for (let j = 0; j < this.selectedTable.rows[i].cells.length; j++) {
629
+ this.selectedTable.rows[i].cells[j].style.minWidth = `${minWidth}px`;
630
+ }
631
+ }
632
+ }
633
+ }
634
+ deleteColumn() {
635
+ var _a, _b;
636
+ if (this.selectedTable) {
637
+ if (window.getSelection) {
638
+ let selection = window.getSelection();
639
+ if (selection) {
640
+ let cell = (_b = (_a = selection.anchorNode) === null || _a === void 0 ? void 0 : _a.parentElement) === null || _b === void 0 ? void 0 : _b.closest('td, th');
641
+ if (cell) {
642
+ let cellIndex = cell.cellIndex;
643
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
644
+ this.selectedTable.rows[i].deleteCell(cellIndex);
645
+ }
646
+ }
647
+ }
648
+ }
649
+ }
650
+ }
651
+ // deleteColumn() {
652
+ // if (this.selectedTable) {
653
+ // for (let i = 0; i < this.selectedTable.rows.length; i++) {
654
+ // this.selectedTable.rows[i].deleteCell(-1);
655
+ // }
656
+ // }
657
+ // }
658
+ adjustTableWidth(event) {
659
+ if (this.selectedTable) {
660
+ this.selectedTable.style.width = event.target.value + 'px';
661
+ }
662
+ }
663
+ adjustCellWidth(event) {
664
+ if (this.selectedTable) {
665
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
666
+ for (let j = 0; j < this.selectedTable.rows[i].cells.length; j++) {
667
+ this.selectedTable.rows[i].cells[j].style.width = event.target.value + 'px';
668
+ }
669
+ }
670
+ }
671
+ }
672
+ adjustCellHeight(event) {
673
+ if (this.selectedTable) {
674
+ for (let i = 0; i < this.selectedTable.rows.length; i++) {
675
+ for (let j = 0; j < this.selectedTable.rows[i].cells.length; j++) {
676
+ this.selectedTable.rows[i].cells[j].style.height = event.target.value + 'px';
677
+ }
678
+ }
679
+ }
680
+ }
681
+ setCaretToEnd(element) {
682
+ const range = document.createRange();
683
+ const sel = window.getSelection();
684
+ if (sel) {
685
+ range.selectNodeContents(element);
686
+ range.collapse(false);
687
+ sel.removeAllRanges();
688
+ sel.addRange(range);
689
+ }
690
+ }
691
+ openColorPicker(inputId) {
692
+ const inputElement = document.getElementById(inputId);
693
+ if (inputElement) {
694
+ inputElement.click();
695
+ }
696
+ }
697
+ setTextColor(event, editorId) {
698
+ const editor = document.getElementById(editorId);
699
+ if (editor) {
700
+ editor.focus();
701
+ const color = event.color.hex;
702
+ this.selectedTextColor = color;
703
+ document.execCommand('foreColor', true, color);
704
+ if (this.dropdown) {
705
+ this.dropdown.close();
706
+ }
707
+ }
708
+ }
709
+ setBackgroundColor(event, editorId) {
710
+ const editor = document.getElementById(editorId);
711
+ if (editor) {
712
+ editor.focus();
713
+ const color = event.color.hex;
714
+ this.backgroundColor = color;
715
+ document.execCommand('hiliteColor', true, color);
716
+ if (this.dropdown) {
717
+ this.dropdown.close();
718
+ }
719
+ }
720
+ }
721
+ // colorChanged(event: any) {
722
+ // this.color = event.color.hex;
723
+ // }
724
+ logEvent(event, trigger) {
725
+ const color = event;
726
+ this.setTextColor(color, this.editorId);
727
+ this.selectedTextColor = event;
728
+ document.execCommand('foreColor', false, event);
729
+ // this.logs.unshift([this.logs.length + 1, trigger, event]);
730
+ }
731
+ editImage() {
732
+ let data;
733
+ switch (this.editorFrom) {
734
+ case 'section-content':
735
+ data = { editIMG: true, from: 'htmlEditor', index: this.selectedItemIndex };
736
+ this.navigateToIMGEditor(data);
737
+ sessionStorage.setItem('editImageFromTemp', JSON.stringify(this.imageEditUrl));
738
+ sessionStorage.setItem('textEditor', this.editorText);
739
+ break;
740
+ case 'template':
741
+ data = { editIMG: true, from: 'templateEditor', index: this.selectedItemIndex };
742
+ this.navigateToIMGEditor(data);
743
+ // sessionStorage.setItem('editImageFromTemp2', JSON.stringify(this.imageEditUrl));
744
+ sessionStorage.setItem('templateEditor', this.editorText);
745
+ break;
746
+ default:
747
+ sessionStorage.removeItem('editImageFromTemp');
748
+ // sessionStorage.removeItem('editImageFromTemp2');
749
+ sessionStorage.removeItem('templateEditor');
750
+ sessionStorage.removeItem('textEditor');
751
+ break;
752
+ }
753
+ // if (this.editorFrom === 'section-content') {
754
+ // const data = {editIMG: true, from: 'htmlEditor', index: this.selectedItemIndex}
755
+ // this.navigateToIMGEditor(data)
756
+ // sessionStorage.setItem('editImageFromTemp', JSON.stringify(this.imageEditUrl))
757
+ // sessionStorage.setItem('textEditor', this.editorText)
758
+ // }
759
+ }
760
+ navigateToIMGEditor(data) {
761
+ this.router.navigate(['/admin/image-editor'], { queryParams: { data: JSON.stringify(data) } });
762
+ }
763
+ // onTextSelect(event: MouseEvent): void {
764
+ // if (this.toolbarMode === 'bubble') {
765
+ // const selection = window.getSelection();
766
+ // if (selection && selection.rangeCount > 0) {
767
+ // const range = selection.getRangeAt(0);
768
+ // if (!range.collapsed) {
769
+ // const rect = range.getBoundingClientRect();
770
+ // this.toolbarTop = rect.bottom + window.scrollY + 10;
771
+ // this.toolbarLeft = rect.left + window.scrollX + (rect.width / 2) - 50;
772
+ // this.showToolbar = true;
773
+ // } else {
774
+ // this.showToolbar = false;
775
+ // }
776
+ // }
777
+ // }
778
+ // }
779
+ onTextSelect(event) {
780
+ if (this.toolbarMode === 'bubble') {
781
+ const selection = window.getSelection();
782
+ if (selection && selection.rangeCount > 0) {
783
+ const range = selection.getRangeAt(0);
784
+ if (!range.collapsed) {
785
+ const rect = range.getBoundingClientRect();
786
+ const scrollY = document.documentElement.scrollTop;
787
+ const scrollX = document.documentElement.scrollLeft;
788
+ this.toolbarTop = rect.top + scrollY - 75;
789
+ this.toolbarLeft = rect.left + scrollX + (rect.width / 2) - 325;
790
+ this.showToolbar = true;
791
+ }
792
+ else {
793
+ this.showToolbar = false;
794
+ }
795
+ }
796
+ else {
797
+ this.showToolbar = false;
798
+ }
799
+ }
800
+ }
801
+ onPaste(event) {
802
+ event.preventDefault();
803
+ const clipboardData = event.clipboardData;
804
+ if (clipboardData) {
805
+ const pastedText = clipboardData.getData('text/plain');
806
+ if (this.isTableData(pastedText)) {
807
+ const html = this.convertTextToTable(pastedText);
808
+ this.insertHtmlAtCaret(html);
809
+ }
810
+ else {
811
+ this.insertHtmlAtCaret(pastedText);
812
+ }
813
+ }
814
+ }
815
+ isTableData(text) {
816
+ const rows = text.split('\n');
817
+ return rows.length > 1 && rows[0].split('\t').length > 1;
818
+ }
819
+ convertTextToTable(text) {
820
+ const rows = text.split('\n').filter(row => row.trim() !== '');
821
+ const tableRows = rows.map(row => {
822
+ const cells = row.split('\t').map(cell => `<td class="px-1 py-1 style="border: 1px solid #000">${cell}</td>`).join('');
823
+ return `<tr >${cells}</tr>`;
824
+ }).join('');
825
+ return `<table>${tableRows}</table>`;
826
+ }
827
+ insertHtmlAtCaret(html) {
828
+ var _a;
829
+ const range = (_a = window.getSelection()) === null || _a === void 0 ? void 0 : _a.getRangeAt(0);
830
+ if (range) {
831
+ range.deleteContents();
832
+ const tempDiv = document.createElement('div');
833
+ tempDiv.innerHTML = html;
834
+ const frag = document.createDocumentFragment();
835
+ let node;
836
+ while ((node = tempDiv.firstChild)) {
837
+ frag.appendChild(node);
838
+ }
839
+ range.insertNode(frag);
840
+ range.collapse(false);
841
+ }
842
+ }
843
+ openFullscreen() {
844
+ var elem = document.getElementById("textEditor");
845
+ this.isFullScreen = true;
846
+ if (elem.requestFullscreen) {
847
+ elem.requestFullscreen();
848
+ }
849
+ else if (elem.mozRequestFullScreen) {
850
+ elem.mozRequestFullScreen();
851
+ }
852
+ else if (elem.webkitRequestFullscreen) {
853
+ elem.webkitRequestFullscreen();
854
+ }
855
+ else if (elem.msRequestFullscreen) {
856
+ elem.msRequestFullscreen();
857
+ }
858
+ this.style = {
859
+ 'min-height': '90vh',
860
+ 'max-height': '90vh',
861
+ };
862
+ }
863
+ closeFullscreen() {
864
+ if (document.exitFullscreen) {
865
+ document.exitFullscreen();
866
+ this.isFullScreen = false;
867
+ this.style = {
868
+ 'min-height': '400px',
869
+ 'max-height': '400px',
870
+ };
871
+ }
872
+ }
873
+ openCanvasColorPicker(inputId) {
874
+ const inputElement = document.getElementById(inputId);
875
+ if (inputElement) {
876
+ inputElement.click();
877
+ }
878
+ }
879
+ setCanvasBackgroundColor(event, editorId) {
880
+ this.CanvasColor = event.color.hex;
881
+ const editor = document.getElementById(editorId);
882
+ if (editor) {
883
+ let color = '';
884
+ console.log('event bg color = ', event);
885
+ editor.style.backgroundColor = '#fff';
886
+ color = event.color.hex || event;
887
+ editor.style.backgroundColor = color;
888
+ this.mainCanvas();
889
+ // this.init_Func(`<div style="background-color: ${color};">${this.editorText}</div>`);
890
+ if (this.dropdown) {
891
+ this.dropdown.close();
892
+ }
893
+ }
894
+ }
895
+ getToday() {
896
+ const currentDate = new Date();
897
+ const day = currentDate.getDate();
898
+ const month = currentDate.getMonth() + 1;
899
+ const year = currentDate.getFullYear();
900
+ const formattedDate = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
901
+ this.today = formattedDate;
902
+ // const label = `{(${this.today})}`;
903
+ const label = `{(date)}`;
904
+ const htmlContent = ` ${label} `;
905
+ const editor = document.getElementById(this.editorId);
906
+ if (editor) {
907
+ this.editorText += `<div> ${htmlContent} </div>`;
908
+ this.sanitizedContent = this.editorText;
909
+ }
910
+ else {
911
+ this.editorText += `<div> ${htmlContent} </div>`;
912
+ this.sanitizedContent = this.editorText;
913
+ }
914
+ }
915
+ insertPageNumber() {
916
+ const pageNumber = '{(page)}';
917
+ const editor = document.getElementById(this.editorId);
918
+ if (editor) {
919
+ this.editorText += `<div> ${pageNumber} </div>`;
920
+ this.sanitizedContent = this.editorText;
921
+ }
922
+ else {
923
+ this.editorText += `<div> ${pageNumber} </div>`;
924
+ this.sanitizedContent = this.editorText;
925
+ }
926
+ }
927
+ clearTextEditor() {
928
+ const editor = document.getElementById(this.editorId);
929
+ if (editor) {
930
+ this.editorTextClear.emit();
931
+ let data;
932
+ // data.color.hex = '#ffffff'
933
+ data = {
934
+ color: {
935
+ hex: '#353343'
936
+ }
937
+ };
938
+ editor.innerHTML = '';
939
+ this.setCanvasBackgroundColor(data, this.editorId);
940
+ }
941
+ }
942
+ setupHistory() {
943
+ this.saveState();
944
+ const editor = document.getElementById(this.editorId);
945
+ if (editor) {
946
+ editor.addEventListener('input', () => this.onInput());
947
+ }
948
+ }
949
+ onInput() {
950
+ this.saveState();
951
+ }
952
+ saveState() {
953
+ const editor = document.getElementById(this.editorId);
954
+ if (editor) {
955
+ const editorContent = editor.innerHTML;
956
+ if (this.historyIndex === this.history.length - 1) {
957
+ this.history.push(editorContent);
958
+ this.redoStack = [];
959
+ }
960
+ else {
961
+ this.history = this.history.slice(0, this.historyIndex + 1);
962
+ this.history.push(editorContent);
963
+ this.redoStack = [];
964
+ }
965
+ this.historyIndex++;
966
+ }
967
+ }
968
+ undo() {
969
+ if (this.historyIndex > 0) {
970
+ this.redoStack.push(this.history[this.historyIndex]);
971
+ this.historyIndex--;
972
+ const editor = document.getElementById(this.editorId);
973
+ if (editor) {
974
+ this.sanitizedContent = this.history[this.historyIndex];
975
+ }
976
+ }
977
+ }
978
+ redo() {
979
+ if (this.redoStack.length > 0) {
980
+ const redoContent = this.redoStack.pop();
981
+ this.history.push(redoContent);
982
+ this.historyIndex++;
983
+ const editor = document.getElementById(this.editorId);
984
+ if (editor) {
985
+ this.sanitizedContent = redoContent;
986
+ }
987
+ }
988
+ }
989
+ mainCanvas(data) {
990
+ let BG = '';
991
+ const editor = document.getElementById(this.editorId);
992
+ if (editor) {
993
+ editor.focus();
994
+ if (editor.style.backgroundColor === 'rgb(53, 51, 67)') {
995
+ BG = 'rgb(255, 255, 255)';
996
+ }
997
+ else {
998
+ BG = editor.style.backgroundColor;
999
+ }
1000
+ return `<div style="background-color: ${BG}; padding: 10px 15px;">${data}</div>`;
1001
+ }
1002
+ else {
1003
+ return `<div>${data}</div>`;
1004
+ }
1005
+ }
1006
+ themeMode() {
1007
+ const clrMode = document.body.getAttribute('data-layout-color');
1008
+ if (clrMode == 'dark') {
1009
+ return '2px solid #414141 !important';
1010
+ }
1011
+ else {
1012
+ return '2px solid #D0D0D0 !important';
1013
+ }
1014
+ }
1015
+ themeModeClr() {
1016
+ const clrMode = document.body.getAttribute('data-layout-color');
1017
+ if (clrMode == 'dark') {
1018
+ return '#fff !important';
1019
+ }
1020
+ else {
1021
+ return '#000 !important';
1022
+ }
1023
+ }
1024
+ }
1025
+ 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 });
1026
+ 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: [{
1027
+ provide: NG_VALUE_ACCESSOR,
1028
+ useExisting: forwardRef(() => ElHeaderAndFooterComponent),
1029
+ multi: true
1030
+ }], 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 } });
1031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterComponent, decorators: [{
1032
+ type: Component,
1033
+ args: [{ selector: 'el-header-and-footer', providers: [{
1034
+ provide: NG_VALUE_ACCESSOR,
1035
+ useExisting: forwardRef(() => ElHeaderAndFooterComponent),
1036
+ multi: true
1037
+ }], 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"] }]
1038
+ }], ctorParameters: function () { return [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i0.Renderer2 }, { type: i2.DomSanitizer }]; }, propDecorators: { dropdown: [{
1039
+ type: ViewChild,
1040
+ args: [NgbDropdown, { static: true }]
1041
+ }], editorId: [{
1042
+ type: Input
1043
+ }], editorText: [{
1044
+ type: Input
1045
+ }], editorFrom: [{
1046
+ type: Input
1047
+ }], clear: [{
1048
+ type: Input
1049
+ }], editorAction: [{
1050
+ type: Input
1051
+ }], style: [{
1052
+ type: Input
1053
+ }], bgColor: [{
1054
+ type: Input
1055
+ }], toolbarMode: [{
1056
+ type: Input
1057
+ }], editorTextChange: [{
1058
+ type: Output
1059
+ }], editorActionResponse: [{
1060
+ type: Output
1061
+ }], value: [{
1062
+ type: Input
1063
+ }], editorTextClear: [{
1064
+ type: Output
1065
+ }] } });
1066
+
1067
+ class ElHeaderAndFooterModule {
1068
+ }
1069
+ ElHeaderAndFooterModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1070
+ ElHeaderAndFooterModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterModule, declarations: [ElHeaderAndFooterComponent], imports: [CommonModule,
1071
+ NgxColorsModule,
1072
+ FormsModule,
1073
+ ReactiveFormsModule,
1074
+ NgbDropdownModule,
1075
+ ColorSketchModule,
1076
+ ColorPickerModule], exports: [ElHeaderAndFooterComponent] });
1077
+ ElHeaderAndFooterModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterModule, imports: [[
1078
+ CommonModule,
1079
+ NgxColorsModule,
1080
+ FormsModule,
1081
+ ReactiveFormsModule,
1082
+ NgbDropdownModule,
1083
+ ColorSketchModule,
1084
+ ColorPickerModule
1085
+ ]] });
1086
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ElHeaderAndFooterModule, decorators: [{
1087
+ type: NgModule,
1088
+ args: [{
1089
+ declarations: [
1090
+ ElHeaderAndFooterComponent
1091
+ ],
1092
+ imports: [
1093
+ CommonModule,
1094
+ NgxColorsModule,
1095
+ FormsModule,
1096
+ ReactiveFormsModule,
1097
+ NgbDropdownModule,
1098
+ ColorSketchModule,
1099
+ ColorPickerModule
1100
+ ],
1101
+ exports: [
1102
+ ElHeaderAndFooterComponent
1103
+ ]
1104
+ }]
1105
+ }] });
1106
+
1107
+ /*
1108
+ * Public API Surface of el-header-and-footer
1109
+ */
1110
+
1111
+ /**
1112
+ * Generated bundle index. Do not edit.
1113
+ */
1114
+
1115
+ export { ElHeaderAndFooterComponent, ElHeaderAndFooterModule, ElHeaderAndFooterService };
1116
+ //# sourceMappingURL=el-header-and-footer.mjs.map