@talrace/ngx-noder 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/esm2022/lib/+shared/add-link-dialog/add-link-dialog.component.mjs +67 -0
  2. package/esm2022/lib/+shared/editor/core/edit.session.mjs +7 -10
  3. package/esm2022/lib/+shared/editor/core/editor.mjs +7 -5
  4. package/esm2022/lib/+shared/editor/core/helpers/paragraph.helper.mjs +53 -16
  5. package/esm2022/lib/+shared/editor/core/helpers/position.helper.mjs +4 -1
  6. package/esm2022/lib/+shared/editor/core/models/line-info.model.mjs +1 -1
  7. package/esm2022/lib/+shared/editor/core/paging/pages.wrap.mjs +19 -12
  8. package/esm2022/lib/+shared/editor/core/paging/paragraph.mjs +3 -3
  9. package/esm2022/lib/+shared/editor/core/paging/text-line-info.mjs +3 -3
  10. package/esm2022/lib/+shared/editor/custom-components/external-element/models/external-element.model.mjs +3 -2
  11. package/esm2022/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.mjs +4 -3
  12. package/esm2022/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.mjs +4 -4
  13. package/esm2022/lib/+shared/editor/custom-components/table/components/table.component.mjs +116 -10
  14. package/esm2022/lib/+shared/editor/custom-components/table/selection/table-selection.mjs +7 -1
  15. package/esm2022/lib/+shared/editor/editor.component.mjs +6 -4
  16. package/esm2022/lib/+shared/editor/execution/regulator.service.mjs +3 -3
  17. package/esm2022/lib/+shared/editor/operations/helpers/table-operations.helper.mjs +6 -3
  18. package/esm2022/lib/+shared/helpers/revision.helper.mjs +91 -0
  19. package/esm2022/lib/+shared/helpers/validation.helper.mjs +7 -0
  20. package/esm2022/lib/models/generated/cell.model.mjs +1 -1
  21. package/esm2022/public-api.mjs +5 -2
  22. package/fesm2022/talrace-ngx-noder.mjs +384 -79
  23. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  24. package/lib/+shared/add-link-dialog/add-link-dialog.component.d.ts +26 -0
  25. package/lib/+shared/editor/core/editor.d.ts +2 -1
  26. package/lib/+shared/editor/core/helpers/paragraph.helper.d.ts +5 -2
  27. package/lib/+shared/editor/core/models/line-info.model.d.ts +1 -0
  28. package/lib/+shared/editor/core/paging/pages.wrap.d.ts +6 -5
  29. package/lib/+shared/editor/core/paging/paragraph.d.ts +5 -2
  30. package/lib/+shared/editor/core/paging/text-line-info.d.ts +2 -0
  31. package/lib/+shared/editor/custom-components/external-element/models/external-element.model.d.ts +2 -1
  32. package/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.d.ts +2 -1
  33. package/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.d.ts +1 -0
  34. package/lib/+shared/editor/custom-components/table/components/table.component.d.ts +18 -1
  35. package/lib/+shared/editor/editor.component.d.ts +2 -1
  36. package/lib/+shared/editor/execution/regulator.service.d.ts +1 -1
  37. package/lib/+shared/helpers/revision.helper.d.ts +15 -0
  38. package/lib/+shared/helpers/validation.helper.d.ts +5 -0
  39. package/lib/models/generated/cell.model.d.ts +1 -0
  40. package/package.json +1 -1
  41. package/public-api.d.ts +4 -1
  42. package/src/lib/+shared/confirm-dialog/_theme.scss +30 -0
  43. package/src/lib/+shared/editor/_theme.scss +7 -0
  44. package/src/lib/+shared/editor-toolbar/_theme.scss +7 -0
  45. package/src/scss/_fonts.scss +3 -0
  46. package/src/scss/_mixins.scss +49 -0
  47. package/src/scss/_variables.scss +1 -0
@@ -22,17 +22,17 @@ import { MatTooltipModule } from '@angular/material/tooltip';
22
22
  import * as i1$4 from '@angular/material/dialog';
23
23
  import { MatDialogModule, MAT_DIALOG_DATA } from '@angular/material/dialog';
24
24
  import * as i2$3 from '@angular/forms';
25
- import { ReactiveFormsModule, FormsModule, FormControl } from '@angular/forms';
26
- import * as i7$1 from '@angular/material/form-field';
25
+ import { ReactiveFormsModule, FormsModule, FormControl, Validators } from '@angular/forms';
26
+ import * as i4$1 from '@angular/material/form-field';
27
27
  import { MatFormFieldModule } from '@angular/material/form-field';
28
28
  import * as i6 from '@angular/material/input';
29
29
  import { MatInputModule } from '@angular/material/input';
30
- import * as i4$1 from '@angular/material/menu';
30
+ import * as i4$2 from '@angular/material/menu';
31
31
  import { MatMenuModule } from '@angular/material/menu';
32
- import * as i7$2 from '@angular/material/select';
32
+ import * as i7$1 from '@angular/material/select';
33
33
  import { MatSelectModule } from '@angular/material/select';
34
34
  import * as i2$2 from '@angular/platform-browser';
35
- import * as i4$2 from '@angular/material/core';
35
+ import * as i4$3 from '@angular/material/core';
36
36
  import * as i3$1 from '@angular/material/autocomplete';
37
37
  import { MatAutocompleteModule } from '@angular/material/autocomplete';
38
38
  import * as i1$3 from '@angular/material/button-toggle';
@@ -40,6 +40,7 @@ import { MatButtonToggleModule } from '@angular/material/button-toggle';
40
40
  import * as i5$1 from 'ngx-colors';
41
41
  import { NgxColorsModule } from 'ngx-colors';
42
42
  import { MatToolbarModule } from '@angular/material/toolbar';
43
+ import { TranslateModule } from '@ngx-translate/core';
43
44
 
44
45
  const DEFAULT_FILE_NAME = 'Untitled document';
45
46
 
@@ -302,8 +303,9 @@ class ElementDataModel {
302
303
  }
303
304
 
304
305
  class ExternalElementModel {
305
- constructor(name, icon, type, componentType, factoryMethod) {
306
+ constructor(name, title, icon, type, componentType, factoryMethod) {
306
307
  this.name = name;
308
+ this.title = title;
307
309
  this.icon = icon;
308
310
  this.type = type;
309
311
  this.componentType = componentType;
@@ -1891,6 +1893,9 @@ class PositionHelper {
1891
1893
  sizeMax = tokens[currentColumn];
1892
1894
  }
1893
1895
  }
1896
+ if (tokens[tokenIndex]?.isTable) {
1897
+ sizeMax.ascent = paragraphInfo.lineHeight;
1898
+ }
1894
1899
  const paragraph = paragraphs[paragraphInfo.paragraphIndex];
1895
1900
  const paragraphTop = paragraph.distanceFromTop || 0;
1896
1901
  const linePaddingLeft = paragraph.textLinesInfo[paragraphInfo.lineIndex].paddingLeft;
@@ -2673,7 +2678,7 @@ class Lines {
2673
2678
  }
2674
2679
 
2675
2680
  class ParagraphHelper {
2676
- static processTextLinesProperties(currentParagraph, prevParagraphInfo, pagesInfo) {
2681
+ static processTextLinesProperties(currentParagraph, prevParagraphInfo, pagesInfo, tables) {
2677
2682
  let currentPageContentHeight = prevParagraphInfo.paragraphHeight;
2678
2683
  let currentPage = prevParagraphInfo.lastPage;
2679
2684
  let previousLine = null;
@@ -2682,17 +2687,50 @@ class ParagraphHelper {
2682
2687
  textLineInfo.screenLine = ++prevParagraphInfo.paragraphLastLine;
2683
2688
  textLineInfo.firstLinePageOffset = 0;
2684
2689
  textLineInfo.endPageOffset = 0;
2685
- let contentHeightWithLine = currentPageContentHeight + textLineInfo.height + textLineInfo.offsetBefore;
2686
- const isFirstLineInDocument = prevParagraphInfo.paragraphLastLine === 0;
2687
- if (!isFirstLineInDocument &&
2688
- (contentHeightWithLine > currentPageVerticalData.contentHeight || textLineInfo.isAfterPageBreak)) {
2689
- const leftSpaceOnPage = currentPageVerticalData.contentHeight - currentPageContentHeight;
2690
- contentHeightWithLine -= currentPageContentHeight;
2691
- const nexPageVerticalData = PageHelper.getVerticalData(currentPage + 1, pagesInfo.pagesVerticalData);
2692
- const lineSpaceBefore = pagesInfo.pagesSpace + currentPageVerticalData.marginBottom + nexPageVerticalData.marginTop;
2693
- const pageOffset = lineSpaceBefore + leftSpaceOnPage;
2694
- currentPage++;
2695
- currentPageVerticalData = nexPageVerticalData;
2690
+ textLineInfo.splitOffset = 0;
2691
+ const textLineHeight = textLineInfo.height + textLineInfo.offsetBefore;
2692
+ const leftSpaceOnPage = currentPageVerticalData.contentHeight - currentPageContentHeight;
2693
+ if (!textLineInfo.hasTable &&
2694
+ (prevParagraphInfo.paragraphLastLine === 0 || (textLineHeight <= leftSpaceOnPage && !textLineInfo.isAfterPageBreak))) {
2695
+ if (previousLine?.hasTable && previousLine.page != currentPage) {
2696
+ textLineInfo.splitOffset = currentPageContentHeight;
2697
+ }
2698
+ currentPageContentHeight += textLineHeight + textLineInfo.offsetAfter;
2699
+ textLineInfo.page = currentPage;
2700
+ previousLine = textLineInfo;
2701
+ continue;
2702
+ }
2703
+ const nextPageVerticalData = PageHelper.getVerticalData(currentPage + 1, pagesInfo.pagesVerticalData);
2704
+ const spaceBetweenPagesContent = pagesInfo.pagesSpace + currentPageVerticalData.marginBottom + nextPageVerticalData.marginTop;
2705
+ if (textLineInfo.hasTable) {
2706
+ const { splitsCount, leftHeight, tableHeight } = ParagraphHelper.processTableSplit(tables, currentParagraph.startInsertIndex, leftSpaceOnPage, spaceBetweenPagesContent, currentPageVerticalData.contentHeight);
2707
+ textLineInfo.height = tableHeight;
2708
+ textLineInfo.page = currentPage;
2709
+ currentPage += splitsCount;
2710
+ if (splitsCount) {
2711
+ if (textLineInfo.height === leftHeight) {
2712
+ textLineInfo.page++;
2713
+ const pageOffset = spaceBetweenPagesContent + leftSpaceOnPage;
2714
+ if (previousLine) {
2715
+ previousLine.endPageOffset = pageOffset;
2716
+ }
2717
+ else {
2718
+ currentParagraph.pagePreviousContentHeight = 0;
2719
+ textLineInfo.firstLinePageOffset = pageOffset;
2720
+ }
2721
+ }
2722
+ currentPageContentHeight = leftHeight + textLineInfo.offsetBefore + textLineInfo.offsetAfter;
2723
+ currentPageVerticalData = nextPageVerticalData;
2724
+ }
2725
+ else {
2726
+ currentPageContentHeight += textLineInfo.height + textLineInfo.offsetBefore + textLineInfo.offsetAfter;
2727
+ }
2728
+ }
2729
+ else if (prevParagraphInfo.paragraphLastLine !== 0 && (textLineHeight > leftSpaceOnPage || textLineInfo.isAfterPageBreak)) {
2730
+ const pageOffset = spaceBetweenPagesContent + leftSpaceOnPage;
2731
+ textLineInfo.page = ++currentPage;
2732
+ currentPageVerticalData = nextPageVerticalData;
2733
+ currentPageContentHeight = textLineHeight + textLineInfo.offsetAfter;
2696
2734
  if (previousLine) {
2697
2735
  previousLine.endPageOffset = pageOffset;
2698
2736
  }
@@ -2701,8 +2739,6 @@ class ParagraphHelper {
2701
2739
  textLineInfo.firstLinePageOffset = pageOffset;
2702
2740
  }
2703
2741
  }
2704
- currentPageContentHeight = contentHeightWithLine + textLineInfo.offsetAfter;
2705
- textLineInfo.page = currentPage;
2706
2742
  previousLine = textLineInfo;
2707
2743
  }
2708
2744
  }
@@ -2748,7 +2784,9 @@ class ParagraphHelper {
2748
2784
  return paragraphTextLinesInfo.reduce((prev, next) => prev + next.height + next.endPageOffset + next.offsetBefore + next.offsetAfter, 0);
2749
2785
  }
2750
2786
  static getPageLinesHeight(paragraphTextLinesInfo, page) {
2751
- return paragraphTextLinesInfo.filter(line => line.page === page).reduce((prev, next) => prev + next.height + next.offsetAfter, 0);
2787
+ return paragraphTextLinesInfo
2788
+ .filter(line => line.page === page)
2789
+ .reduce((prev, next) => prev + next.height + next.offsetAfter + next.splitOffset, 0);
2752
2790
  }
2753
2791
  static processOffsetLineWithNumberingMarker(textLineInfo, markerHeight, offsetBefore) {
2754
2792
  if (!markerHeight || textLineInfo.height >= markerHeight) {
@@ -2801,6 +2839,10 @@ class ParagraphHelper {
2801
2839
  }
2802
2840
  return indents;
2803
2841
  }
2842
+ static processTableSplit(tables, startInsertIndex, leftSpaceOnPage, spaceBetweenPagesContent, contentHeight) {
2843
+ const table = tables.find(x => x.instance.insertIndex >= startInsertIndex);
2844
+ return table.instance.processSplit(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight);
2845
+ }
2804
2846
  }
2805
2847
 
2806
2848
  class TextLayer extends EventEmitting {
@@ -3972,7 +4014,7 @@ class Editor extends EventEmitting {
3972
4014
  get targets() {
3973
4015
  return this.regulatorService.getCurrentSessionTargets();
3974
4016
  }
3975
- constructor(model, container, editorService, regulatorService, commandsService, clipboard) {
4017
+ constructor(model, container, editorService, regulatorService, commandsService, clipboard, customPageWidth) {
3976
4018
  super();
3977
4019
  this.model = model;
3978
4020
  this.container = container;
@@ -3980,6 +4022,7 @@ class Editor extends EventEmitting {
3980
4022
  this.regulatorService = regulatorService;
3981
4023
  this.commandsService = commandsService;
3982
4024
  this.clipboard = clipboard;
4025
+ this.customPageWidth = customPageWidth;
3983
4026
  this.MAX_COUNT = 999;
3984
4027
  this.parentTagName = 'APP-EDITOR';
3985
4028
  this.tableCellTagName = 'APP-NODER-TABLE-CELL';
@@ -4826,7 +4869,8 @@ class Editor extends EventEmitting {
4826
4869
  return textInterval;
4827
4870
  }
4828
4871
  initMainSession() {
4829
- this.container.nativeElement.style.maxWidth = `${this.model.pageWidth}px`;
4872
+ const pageWidth = this.customPageWidth ?? this.model.pageWidth;
4873
+ this.container.nativeElement.style.maxWidth = `${pageWidth}px`;
4830
4874
  const pageMargin = new MarginModel({
4831
4875
  left: this.model.marginLeft,
4832
4876
  right: this.model.marginRight,
@@ -4835,7 +4879,7 @@ class Editor extends EventEmitting {
4835
4879
  header: this.model.marginHeader,
4836
4880
  footer: this.model.marginFooter
4837
4881
  });
4838
- this.regulatorService.addMainSession(this.model, pageMargin, this.container);
4882
+ this.regulatorService.addMainSession(this.model, pageMargin, pageWidth, this.container);
4839
4883
  this.mainSession.addEventListener('changeScrollTop', this.onScrollTopChange);
4840
4884
  this.session.addEventListener('setStyles', this.setStyles);
4841
4885
  this.mainRenderer.scrollTo(0);
@@ -5090,7 +5134,7 @@ class Editor extends EventEmitting {
5090
5134
  }
5091
5135
  changedEdgeHeightSubscription() {
5092
5136
  return this.editorService.changedEdgeHeight$.subscribe(edgeType => {
5093
- this.mainSession.pagesWrap.updatePageVerticalData(edgeType, this.regulatorService.edgeEditingPage);
5137
+ this.mainSession.pagesWrap.updatePageVerticalData(edgeType, this.regulatorService.edgeEditingPage, this.session.wrapParagraphIndex);
5094
5138
  });
5095
5139
  }
5096
5140
  undoSubscription() {
@@ -6029,7 +6073,7 @@ class CellResizer {
6029
6073
  this.spaceRight = this.table.columns[this.cellResizerParameters.columnIndex].width - this.minCellWidth;
6030
6074
  this.startX =
6031
6075
  this.tableEl.offsetLeft +
6032
- this.tableEl.rows[this.cellResizerParameters.rowIndex].cells[this.cellResizerParameters.cellIndex].getBoundingClientRect().left;
6076
+ this.tableEl.rows[this.splitRowIndex].cells[this.cellResizerParameters.cellIndex].getBoundingClientRect().left;
6033
6077
  this.columnPositionChanged(this.startX - this.resizerBorderSize);
6034
6078
  this.addHorizontalMouseSubscriptions();
6035
6079
  }
@@ -6042,7 +6086,7 @@ class CellResizer {
6042
6086
  if (this.table.columns.length > nextColumnIndex) {
6043
6087
  this.spaceRight = this.table.columns[nextColumnIndex].width - this.minCellWidth;
6044
6088
  }
6045
- const cellRect = this.tableEl.rows[this.cellResizerParameters.rowIndex].cells[this.cellResizerParameters.columnIndex].getBoundingClientRect();
6089
+ const cellRect = this.tableEl.rows[this.splitRowIndex].cells[this.cellResizerParameters.columnIndex].getBoundingClientRect();
6046
6090
  this.startX = this.tableEl.offsetLeft + cellRect.left + cellRect.width - this.resizerBorderSize;
6047
6091
  this.columnPositionChanged(this.startX);
6048
6092
  this.addHorizontalMouseSubscriptions();
@@ -6090,7 +6134,7 @@ class CellResizer {
6090
6134
  return;
6091
6135
  }
6092
6136
  this.resizerEl.setAttribute('style', `height:${this.resizerHeight}px; `);
6093
- this.resizerEl.setAttribute('style', `height:${this.resizerHeight}px;left:${position - this.resizerEl.getBoundingClientRect().x}px`);
6137
+ this.resizerEl.setAttribute('style', `height:${this.resizerHeight}px;left:${position - this.resizerEl.getBoundingClientRect().x}px;top:${this.startY}px`);
6094
6138
  }
6095
6139
  }
6096
6140
 
@@ -6359,6 +6403,9 @@ class TableSelection {
6359
6403
  return;
6360
6404
  }
6361
6405
  const selectionRange = this.getSelectionRangeForMenuOverlay(event.target);
6406
+ if (!selectionRange) {
6407
+ return;
6408
+ }
6362
6409
  const targets = this.getTargetsForMenuOverlay(selectionRange);
6363
6410
  const canRemoveRows = selectionRange.rowIndexes.endIndex - selectionRange.rowIndexes.startIndex + 1 < this.rowMatrix.length;
6364
6411
  const canRemoveColumns = selectionRange.cellIndexes.endIndex - selectionRange.cellIndexes.startIndex + 1 < this.rowMatrix[0].cells.length;
@@ -6583,6 +6630,9 @@ class TableSelection {
6583
6630
  }
6584
6631
  getSelectionRangeForMenuOverlay(element) {
6585
6632
  const selectedCell = this.getCellIndexes(element);
6633
+ if (!selectedCell) {
6634
+ return null;
6635
+ }
6586
6636
  const isCellInSelection = this.selectionRange &&
6587
6637
  this.selectionRange.rowIndexes.startIndex <= selectedCell.rowIndex &&
6588
6638
  this.selectionRange.rowIndexes.endIndex >= selectedCell.rowIndex &&
@@ -6703,10 +6753,14 @@ class NoderTableComponent extends BaseNoderComponent {
6703
6753
  this.el = el;
6704
6754
  this.overlayService = overlayService;
6705
6755
  this.rowMatrix = [];
6756
+ this.splits = [];
6706
6757
  this.minRowHeight = 19;
6707
- this.borderSize = 0.8;
6758
+ this.borderSize = 1;
6708
6759
  this.startResizing = (cellResizerParameters) => {
6709
- this.resizer.resizerHeight = this.height;
6760
+ const splitRowIndex = this.getSplitRowIndex(cellResizerParameters.rowIndex);
6761
+ this.resizer.resizerHeight = this.getRowsHeightBetweenSplits(splitRowIndex);
6762
+ this.resizer.startY = this.getRowsHeightBefore(splitRowIndex);
6763
+ this.resizer.splitRowIndex = splitRowIndex;
6710
6764
  this.resizer.tableInsertIndex = this.insertIndex;
6711
6765
  this.resizer.onStartResizing(cellResizerParameters);
6712
6766
  };
@@ -6716,7 +6770,8 @@ class NoderTableComponent extends BaseNoderComponent {
6716
6770
  if (tableRow.hRule === HRule.Exact) {
6717
6771
  return;
6718
6772
  }
6719
- const row = this.tableEl.rows[rowIndex];
6773
+ const rowIndexWithSplit = this.getIndexIncludingSplitRows(this.rowMatrix[rowIndex].row);
6774
+ const row = this.tableEl.rows[rowIndexWithSplit];
6720
6775
  const currentHeight = row.offsetHeight;
6721
6776
  const cellHeights = this.rowMatrix[rowIndex].cells.map(x => x.cellContentHeight);
6722
6777
  const maxCellContentHeigh = Math.max(...cellHeights, height);
@@ -6757,6 +6812,14 @@ class NoderTableComponent extends BaseNoderComponent {
6757
6812
  } while (i < cellSpanCount);
6758
6813
  return width;
6759
6814
  }
6815
+ getAdjustedWidth(tableRow, cellIndex, absoluteCellIndex) {
6816
+ const cellWidth = this.getCellWidth(tableRow, cellIndex, absoluteCellIndex);
6817
+ if (tableRow.cells[cellIndex].widthType === 'pct') {
6818
+ tableRow.cells[cellIndex].widthType = 'dxa';
6819
+ return (cellWidth * this._width) / 5000; // 5000 is equal to 100% in docx units of measurement
6820
+ }
6821
+ return cellWidth;
6822
+ }
6760
6823
  createResizer() {
6761
6824
  this.resizerEl = document.createElement('div');
6762
6825
  this.resizerEl.className = 'resizer-border';
@@ -6780,6 +6843,7 @@ class NoderTableComponent extends BaseNoderComponent {
6780
6843
  this.initialize();
6781
6844
  }
6782
6845
  insertRows(rowsCount, targetIndex) {
6846
+ this._width = this.getTableWidth();
6783
6847
  let rowIndex = 0;
6784
6848
  while (rowIndex < rowsCount) {
6785
6849
  const targetRowIndex = targetIndex + rowIndex;
@@ -6827,7 +6891,7 @@ class NoderTableComponent extends BaseNoderComponent {
6827
6891
  rowIndex,
6828
6892
  cellIndex: modelCellIndex,
6829
6893
  columnIndex: currentTargetIndex,
6830
- width: this.getCellWidth(this.table.rows[rowIndex], modelCellIndex, currentTargetIndex),
6894
+ width: this.getAdjustedWidth(this.table.rows[rowIndex], modelCellIndex, currentTargetIndex),
6831
6895
  heightChanged: this.cellHeightChanged,
6832
6896
  startResizing: this.startResizing,
6833
6897
  properties: this.properties
@@ -6952,21 +7016,113 @@ class NoderTableComponent extends BaseNoderComponent {
6952
7016
  }
6953
7017
  this._height = rowsHeight + bordersHeight;
6954
7018
  }
7019
+ processSplit(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight) {
7020
+ this.removeSplits();
7021
+ if (leftSpaceOnPage >= this.height) {
7022
+ return { splitsCount: 0, tableHeight: this.height, leftHeight: 0 };
7023
+ }
7024
+ if (leftSpaceOnPage < this.rowMatrix[0].height) {
7025
+ return { splitsCount: 1, tableHeight: this.height, leftHeight: this.height };
7026
+ }
7027
+ return this.splitTable(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight);
7028
+ }
7029
+ splitTable(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight) {
7030
+ let leftHeight = 0, tableHeightWithSplits = this.height, rowIndex = 0;
7031
+ while (rowIndex < this.rowMatrix.length) {
7032
+ let { index, rowsHeight } = this.getRowIndexByHeight(rowIndex, leftSpaceOnPage);
7033
+ rowIndex = index;
7034
+ if (index === this.rowMatrix.length) {
7035
+ break;
7036
+ }
7037
+ leftHeight = this.rowMatrix
7038
+ .slice(index)
7039
+ .map(x => x.height)
7040
+ .reduce((partialSum, curr) => partialSum + curr + this.borderSize);
7041
+ const splitRowHeight = spaceBetweenPagesContent + leftSpaceOnPage - rowsHeight;
7042
+ this.createSplitRow(index + this.splits.length, splitRowHeight);
7043
+ this.splits.push(index + this.splits.length);
7044
+ tableHeightWithSplits += splitRowHeight;
7045
+ leftSpaceOnPage = contentHeight;
7046
+ }
7047
+ return {
7048
+ splitsCount: this.splits.length,
7049
+ tableHeight: tableHeightWithSplits,
7050
+ leftHeight
7051
+ };
7052
+ }
7053
+ getRowIndexByHeight(startIndex, height) {
7054
+ if (startIndex >= this.rowMatrix.length) {
7055
+ return { index: this.rowMatrix.length, rowsHeight: 0 };
7056
+ }
7057
+ let tableHeight = this.rowMatrix[startIndex].height + this.borderSize, i = startIndex;
7058
+ while (tableHeight < height) {
7059
+ tableHeight += this.rowMatrix[i + 1]?.height + this.borderSize;
7060
+ i++;
7061
+ }
7062
+ return { index: i, rowsHeight: tableHeight - this.rowMatrix[i]?.height };
7063
+ }
7064
+ createSplitRow(index, height) {
7065
+ this.tableEl.insertRow(index);
7066
+ this.tableEl.rows[index].style.height = `${height}px`;
7067
+ this.tableEl.rows[index].classList.add('split-row');
7068
+ }
7069
+ removeSplits() {
7070
+ this.splits = [];
7071
+ while (this.tableEl.querySelector('.split-row')) {
7072
+ const el = this.tableEl.querySelector('.split-row');
7073
+ el.remove();
7074
+ }
7075
+ }
6955
7076
  calculateProperties() {
6956
7077
  if (!this.tableEl) {
6957
7078
  return;
6958
7079
  }
6959
7080
  this.setTableHeight();
6960
- const bordersSize = this.borderSize * this.table.columns.length;
6961
- const width = this.table.columns.reduce((prev, next) => prev + next.width, 1);
6962
- this._width = width + bordersSize;
7081
+ }
7082
+ getTableWidth() {
7083
+ return this.table.columns.reduce((prev, next) => prev + next.width + this.borderSize, 1);
7084
+ }
7085
+ getSplitRowIndex(rowIndex) {
7086
+ return this.getIndexIncludingSplitRows(this.rowMatrix[rowIndex].row);
7087
+ }
7088
+ getIndexIncludingSplitRows(row) {
7089
+ return Array.from(this.tableEl.rows).indexOf(row);
7090
+ }
7091
+ getRowsHeightBefore(rowIndex) {
7092
+ let index = 0;
7093
+ for (const element of this.splits) {
7094
+ if (rowIndex < element) {
7095
+ break;
7096
+ }
7097
+ index = element + 1;
7098
+ }
7099
+ return this.getRowsHeight(0, index);
7100
+ }
7101
+ getRowsHeightBetweenSplits(rowIndex) {
7102
+ let startIndex = 0;
7103
+ let endIndex = this.tableEl.rows.length;
7104
+ for (const element of this.splits) {
7105
+ if (rowIndex < element) {
7106
+ endIndex = element;
7107
+ break;
7108
+ }
7109
+ startIndex = element + 1;
7110
+ }
7111
+ return this.getRowsHeight(startIndex, endIndex);
7112
+ }
7113
+ getRowsHeight(start, end) {
7114
+ let sum = 0;
7115
+ for (let i = start; i < end; i++) {
7116
+ sum += this.tableEl.rows[i].offsetHeight;
7117
+ }
7118
+ return sum;
6963
7119
  }
6964
7120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NoderTableComponent, deps: [{ token: ComponentService }, { token: EditorService }, { token: i0.ElementRef }, { token: OverlayService }], target: i0.ɵɵFactoryTarget.Component }); }
6965
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: NoderTableComponent, selector: "app-noder-table", usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [":host ::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host ::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host ::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host ::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
7121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: NoderTableComponent, selector: "app-noder-table", usesInheritance: true, ngImport: i0, template: '', isInline: true, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
6966
7122
  }
6967
7123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NoderTableComponent, decorators: [{
6968
7124
  type: Component,
6969
- args: [{ selector: 'app-noder-table', template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host ::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host ::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host ::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host ::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"] }]
7125
+ args: [{ selector: 'app-noder-table', template: '', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{position:relative}:host::ng-deep table{position:relative;border-collapse:collapse;background:transparent;empty-cells:show;border-spacing:0;overflow:visible;table-layout:fixed}:host::ng-deep td{position:relative;vertical-align:top;border:1px solid #000;margin:0;padding:0;height:inherit}:host::ng-deep .hidden-cell{display:none;cursor:not-allowed}:host::ng-deep .resizer-border{position:absolute;border:solid .5px blue;z-index:1}\n"] }]
6970
7126
  }], ctorParameters: () => [{ type: ComponentService }, { type: EditorService }, { type: i0.ElementRef }, { type: OverlayService }] });
6971
7127
 
6972
7128
  class NumberingDataModel {
@@ -7441,7 +7597,9 @@ class TableOperationsHelper {
7441
7597
  images: [],
7442
7598
  paragraphs: [new ParagraphModel({ insertIndex: 0, paragraphStyle: DEFAULT_PARAGRAPH_STYLE })],
7443
7599
  tables: [],
7444
- tabs: []
7600
+ tabs: [],
7601
+ links: [],
7602
+ widthType: 'dxa'
7445
7603
  });
7446
7604
  cells.push(cell);
7447
7605
  }
@@ -7554,7 +7712,8 @@ class TableOperationsHelper {
7554
7712
  ],
7555
7713
  verticalMerge: this.getCellVerticalMerge(matrix[inheritIndex].cells[i].verticalMerge, targetIndex, inheritIndex),
7556
7714
  tables: [],
7557
- tabs: []
7715
+ tabs: [],
7716
+ links: []
7558
7717
  });
7559
7718
  newCells.push(newCell);
7560
7719
  }
@@ -8198,8 +8357,8 @@ class TextLineInfo {
8198
8357
  this.paddingLeft = 0;
8199
8358
  this.offsetBefore = 0;
8200
8359
  this.offsetAfter = 0;
8201
- this.firstLinePageOffset = 0;
8202
- this.endPageOffset = 0;
8360
+ this.firstLinePageOffset = 0; // for selection
8361
+ this.endPageOffset = 0; // for selection
8203
8362
  this.screenLine = 0;
8204
8363
  this.isAfterPageBreak = false;
8205
8364
  this.isEndedByPageBreak = false;
@@ -8267,9 +8426,9 @@ class Paragraph {
8267
8426
  : ParagraphHelper.getPageLinesHeight(this.textLinesInfo, this.lastPageNumber);
8268
8427
  return { lastPage: this.lastPageNumber, paragraphHeight: pageContentHeight, paragraphLastLine: this.lastScreenLine };
8269
8428
  }
8270
- processParagraphProperties(prevParagraphInfo, pagesInfo) {
8429
+ processParagraphProperties(prevParagraphInfo, pagesInfo, tables) {
8271
8430
  this.pagePreviousContentHeight = prevParagraphInfo.paragraphHeight;
8272
- this.processTextLinesProperties(this, prevParagraphInfo, pagesInfo);
8431
+ this.processTextLinesProperties(this, prevParagraphInfo, pagesInfo, tables);
8273
8432
  ParagraphHelper.processOffsetLineWithNumberingMarker(this.textLinesInfo[0], this.numberingData.height, this.offsetBefore);
8274
8433
  this.pageNumbers = ParagraphHelper.getParagraphPages(this.textLinesInfo);
8275
8434
  this.height = ParagraphHelper.getParagraphHeight(this.textLinesInfo);
@@ -8280,13 +8439,13 @@ class PagesWrap extends EventEmitting {
8280
8439
  get defaultVerticalData() {
8281
8440
  return this.pagesVerticalData.find(x => x.pageType === PageType.Default);
8282
8441
  }
8283
- constructor(pagesSpace, documentMargin, pageWidth, pageHeight = 0, edges = null) {
8442
+ constructor(pagesSpace, documentMargin, pageWidth, pageHeight = 0, customComponents) {
8284
8443
  super();
8285
8444
  this.pagesSpace = pagesSpace;
8286
8445
  this.documentMargin = documentMargin;
8287
8446
  this.pageWidth = pageWidth;
8288
8447
  this.pageHeight = pageHeight;
8289
- this.edges = edges;
8448
+ this.customComponents = customComponents;
8290
8449
  this.allPagesHeight = 0;
8291
8450
  this.minHeight = 0;
8292
8451
  this.paragraphs = [];
@@ -8379,14 +8538,15 @@ class PagesWrap extends EventEmitting {
8379
8538
  pages: visiblePages
8380
8539
  };
8381
8540
  }
8382
- processParagraphsProperties(startParagraphIndex) {
8541
+ processParagraphsProperties(startParagraphIndex, wrapParagraphIndex) {
8542
+ this.setParagraphIndexes(wrapParagraphIndex);
8383
8543
  const pagesInfo = { pagesVerticalData: this.pagesVerticalData, pagesSpace: this.pagesSpace };
8384
8544
  let currentPage = startParagraphIndex === 0 ? 1 : this.paragraphs[startParagraphIndex - 1].lastPageNumber;
8385
8545
  let pageVerticalData = PageHelper.getVerticalData(currentPage, this.pagesVerticalData);
8386
8546
  for (let i = startParagraphIndex; i < this.paragraphs.length; i++) {
8387
8547
  const prevParagraphInfo = this.getPreviousParagraphInfo(i);
8388
8548
  const paragraph = this.paragraphs[i];
8389
- paragraph.processParagraphProperties(prevParagraphInfo, pagesInfo);
8549
+ paragraph.processParagraphProperties(prevParagraphInfo, pagesInfo, this.customComponents.tables);
8390
8550
  if (paragraph.firstPageNumber !== currentPage) {
8391
8551
  currentPage = paragraph.firstPageNumber;
8392
8552
  pageVerticalData = PageHelper.getVerticalData(paragraph.firstPageNumber, this.pagesVerticalData);
@@ -8413,9 +8573,9 @@ class PagesWrap extends EventEmitting {
8413
8573
  destroy() {
8414
8574
  this.removeAllListeners('pagesCountChanged');
8415
8575
  }
8416
- updatePageVerticalData(edgeType, page) {
8576
+ updatePageVerticalData(edgeType, page, wrapParagraphIndex) {
8417
8577
  const pageVerticalData = PageHelper.getVerticalData(page, this.pagesVerticalData);
8418
- const componentHeight = this.edges.getComponentHeight(page, edgeType);
8578
+ const componentHeight = this.customComponents.edges.getComponentHeight(page, edgeType);
8419
8579
  if (edgeType === EdgeType.Header) {
8420
8580
  pageVerticalData.marginTop = componentHeight > this.documentMargin.top ? componentHeight : this.documentMargin.top;
8421
8581
  }
@@ -8427,7 +8587,7 @@ class PagesWrap extends EventEmitting {
8427
8587
  return;
8428
8588
  }
8429
8589
  pageVerticalData.contentHeight = newContentHeight;
8430
- this.processParagraphsProperties(0);
8590
+ this.processParagraphsProperties(0, wrapParagraphIndex);
8431
8591
  }
8432
8592
  getPreviousParagraphInfo(row) {
8433
8593
  if (!row || !this.paragraphs.length) {
@@ -8460,7 +8620,8 @@ class PagesWrap extends EventEmitting {
8460
8620
  return visiblePages;
8461
8621
  }
8462
8622
  initPagesVerticalData() {
8463
- if (!this.edges || (!this.edges.headersComponents.length && !this.edges.footersComponents.length)) {
8623
+ if (!this.customComponents.edges ||
8624
+ (!this.customComponents.edges.headersComponents.length && !this.customComponents.edges.footersComponents.length)) {
8464
8625
  this.pagesVerticalData = [
8465
8626
  new PageVerticalDataModel({
8466
8627
  marginTop: this.documentMargin.top,
@@ -8471,10 +8632,10 @@ class PagesWrap extends EventEmitting {
8471
8632
  ];
8472
8633
  return;
8473
8634
  }
8474
- const pageTypes = this.edges.getUniquePageTypes();
8635
+ const pageTypes = this.customComponents.edges.getUniquePageTypes();
8475
8636
  this.pagesVerticalData = pageTypes.map(pageType => {
8476
- const headerHeight = this.edges.getComponentHeightByPageType(pageType, EdgeType.Header);
8477
- const footerHeight = this.edges.getComponentHeightByPageType(pageType, EdgeType.Footer);
8637
+ const headerHeight = this.customComponents.edges.getComponentHeightByPageType(pageType, EdgeType.Header);
8638
+ const footerHeight = this.customComponents.edges.getComponentHeightByPageType(pageType, EdgeType.Footer);
8478
8639
  const marginTop = Math.max(headerHeight, this.documentMargin.top);
8479
8640
  const marginBottom = Math.max(footerHeight, this.documentMargin.bottom);
8480
8641
  return new PageVerticalDataModel({
@@ -8485,6 +8646,11 @@ class PagesWrap extends EventEmitting {
8485
8646
  });
8486
8647
  });
8487
8648
  }
8649
+ setParagraphIndexes(wrapParagraphIndex) {
8650
+ for (let i = 0; i < this.paragraphs.length; i++) {
8651
+ this.paragraphs[i].startInsertIndex = wrapParagraphIndex[i];
8652
+ }
8653
+ }
8488
8654
  }
8489
8655
 
8490
8656
  class ParagraphStyleHelper {
@@ -8621,8 +8787,7 @@ class EditSession extends EventEmitting {
8621
8787
  backgroundColor: DEFAULT_BACKGROUND_COLOR,
8622
8788
  highlightColor: DEFAULT_BACKGROUND_COLOR
8623
8789
  };
8624
- const maxWidth = document.pageWidth - (document.pageMargin.left + document.pageMargin.right);
8625
- this.customComponents = this.customContentService.generateComponents(this.model, this.sessionId, this.properties, maxWidth);
8790
+ this.customComponents = this.customContentService.generateComponents(this.model, this.sessionId, this.properties, this.document);
8626
8791
  this.setDocument();
8627
8792
  }
8628
8793
  destroy() {
@@ -8697,7 +8862,7 @@ class EditSession extends EventEmitting {
8697
8862
  this.pagesWrap.paragraphs.splice(count);
8698
8863
  this.wrapData.splice(count);
8699
8864
  this.updateWrapParagraphLine(firstParagraph);
8700
- this.pagesWrap.processParagraphsProperties(firstParagraph);
8865
+ this.pagesWrap.processParagraphsProperties(firstParagraph, this.wrapParagraphIndex);
8701
8866
  }
8702
8867
  /**
8703
8868
  * Given a string, returns an array of the display characters, including tabs and spaces.
@@ -9258,13 +9423,10 @@ class EditSession extends EventEmitting {
9258
9423
  displayTokens[i].width = TabHelper.calculateTabWidth(sum, this.properties.defaultTabWidth);
9259
9424
  }
9260
9425
  sum += displayTokens[i].width;
9261
- if (i > 0 && (sum >= maxRowWidth || displayTokens[i - 1].breaksLine)) {
9426
+ if ((i > 0 && (sum >= maxRowWidth || displayTokens[i - 1].breaksLine)) || displayTokens[i].isTable) {
9262
9427
  return i;
9263
9428
  }
9264
- if (displayTokens[i].isLineBreak) {
9265
- return i + 1;
9266
- }
9267
- if (i === displayTokens.length - 1 && displayTokens[i].isPageBreak) {
9429
+ if (displayTokens[i].isLineBreak || (i === displayTokens.length - 1 && displayTokens[i].isPageBreak)) {
9268
9430
  return i + 1;
9269
9431
  }
9270
9432
  }
@@ -9338,7 +9500,7 @@ class EditSession extends EventEmitting {
9338
9500
  }
9339
9501
  setDocument() {
9340
9502
  const pageMargin = this.document.pageMargin;
9341
- this.pagesWrap = new PagesWrap(this.document.pagesSpace, pageMargin, this.document.pageWidth, this.document.pageHeight, this.customComponents.edges);
9503
+ this.pagesWrap = new PagesWrap(this.document.pagesSpace, pageMargin, this.document.pageWidth, this.document.pageHeight, this.customComponents);
9342
9504
  }
9343
9505
  clearCursorStyle() {
9344
9506
  this._cursorStyle = null;
@@ -9483,6 +9645,7 @@ class EditSession extends EventEmitting {
9483
9645
  info.offsetBefore = firstWrapToken.indentBefore;
9484
9646
  info.offsetAfter = firstWrapToken.indentAfter;
9485
9647
  info.lineSpacing = firstWrapToken.lineSpacing;
9648
+ info.hasTable = firstWrapToken.isTable;
9486
9649
  }
9487
9650
  let fontSize = 0;
9488
9651
  let ascent = 0;
@@ -10777,7 +10940,8 @@ class CustomContentService {
10777
10940
  this.injector = injector;
10778
10941
  this.elements = this.injector.get(EXTERNAL_ELEMENT_SERVICE).elements;
10779
10942
  }
10780
- generateComponents(model, sessionId, properties, contentWidth) {
10943
+ generateComponents(model, sessionId, properties, document) {
10944
+ const contentWidth = document.pageWidth - (document.pageMargin.left + document.pageMargin.right);
10781
10945
  return {
10782
10946
  images: this.componentService.generateComponents(NoderImageComponent, model?.images || [], x => {
10783
10947
  return { image: x, sessionId };
@@ -10795,7 +10959,7 @@ class CustomContentService {
10795
10959
  right: model.marginRight,
10796
10960
  top: model.marginHeader,
10797
10961
  bottom: model.marginFooter
10798
- }), model.pageWidth, sessionId, properties)
10962
+ }), document.pageWidth, sessionId, properties)
10799
10963
  : null
10800
10964
  };
10801
10965
  }
@@ -10886,9 +11050,9 @@ class RegulatorService {
10886
11050
  this.sessionIdIncrement = 0;
10887
11051
  this.edgeEditingPage = null;
10888
11052
  }
10889
- addMainSession(model, margins, container) {
11053
+ addMainSession(model, margins, pageWidth, container) {
10890
11054
  const currentSessionId = ++this.sessionIdIncrement;
10891
- const document = new Document(model, margins, DocumentInfo.pagesSpace, model.pageWidth, model.pageHeight);
11055
+ const document = new Document(model, margins, DocumentInfo.pagesSpace, pageWidth, model.pageHeight);
10892
11056
  const renderer = new VirtualRenderer(container.nativeElement, this.editorService);
10893
11057
  const session = new EditSession(document, currentSessionId, this.customContentService, model, this.selection, new GeneralPropertiesModel({
10894
11058
  numberings: model.numberings,
@@ -11137,7 +11301,7 @@ class EditorComponent {
11137
11301
  }
11138
11302
  initEditor(content) {
11139
11303
  this.ngOnDestroy();
11140
- this.editor = new Editor(content, this.container, this.editorService, this.regulatorService, this.commandsService, this.clipboard);
11304
+ this.editor = new Editor(content, this.container, this.editorService, this.regulatorService, this.commandsService, this.clipboard, this.customPageWidth);
11141
11305
  this.subscriptions.push(this.toggleSidenavSubscription());
11142
11306
  }
11143
11307
  createElement(model) {
@@ -11167,12 +11331,14 @@ class EditorComponent {
11167
11331
  });
11168
11332
  }
11169
11333
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: ComponentService }, { token: EditorService }, { token: i0.Injector }, { token: RegulatorService }, { token: CommandsService }, { token: i5.Clipboard }], target: i0.ɵɵFactoryTarget.Component }); }
11170
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: EditorComponent, selector: "app-editor", inputs: { content: "content" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "sidenavContainer", first: true, predicate: ["drawerContainer"], descendants: true, static: true }, { propertyName: "sidenav", first: true, predicate: ["drawer"], descendants: true, static: true }], ngImport: i0, template: "<mat-drawer-container\n class=\"sidenav-container\"\n [hasBackdrop]=\"sidenavProperties.hasBackdrop\">\n <mat-drawer-content>\n <div class=\"container\">\n <div\n #container\n class=\"edit-container\"></div>\n <app-element-toolbar\n *ngIf=\"elements.length\"\n [elements]=\"elements\"\n [isDisabled]=\"isViewOnly$ | async\"\n (createElement)=\"createElement($event)\"></app-element-toolbar>\n </div>\n </mat-drawer-content>\n <mat-drawer\n #drawer\n [autoFocus]=\"sidenavProperties.autoFocus\"\n [position]=\"sidenavProperties.position\"\n [mode]=\"sidenavProperties.mode\">\n <div\n #drawerContainer\n class=\"drawer-container\"></div>\n </mat-drawer>\n</mat-drawer-container>\n", styles: [":host{flex:1;display:flex;position:relative}.sidenav-container{width:100%}.container{height:100%;display:flex;justify-content:center}app-element-toolbar{right:15px;top:50px}:host::ng-deep .ace-editor{position:relative;line-height:1;font-size:12pt;font-family:Courier New,Courier,monospace;text-align:left;width:100%;height:100%}:host::ng-deep .ace-scroller{position:absolute;overflow:hidden;top:0;bottom:0;-webkit-user-select:none;user-select:none;cursor:text}:host::ng-deep .ace-scrollbar{overflow:hidden scroll;contain:strict;position:absolute;right:0;bottom:0;z-index:6;top:0}:host::ng-deep .ace-scrollbar-inner{position:absolute;cursor:text;left:0;top:0}:host::ng-deep .ace-text-input{position:absolute;z-index:0;width:.5em;height:1em;opacity:0;background:transparent;appearance:none;border:none;resize:none;overflow:hidden;font:inherit;padding:0 1px;margin:0 -1px;contain:strict;-webkit-user-select:text;user-select:text}:host::ng-deep .ace-layer{z-index:1;position:absolute;word-wrap:normal;white-space:pre;height:100%;width:100%;box-sizing:border-box;pointer-events:none}:host::ng-deep .ace-text-layer{font:inherit!important;position:absolute;contain:style size layout;pointer-events:auto}:host::ng-deep .ace-edges-layer{z-index:2}:host::ng-deep .ace-line{display:flex;align-items:baseline;line-height:normal}:host::ng-deep .ace-line .hyperlink-hover{cursor:pointer}:host::ng-deep .ace-line>*{display:inline-block;font-kerning:none}:host::ng-deep .ace-line>*.paragraph-symbol{align-self:flex-end}:host::ng-deep .ace-content{position:inherit;box-sizing:border-box;min-width:100%;contain:style size layout;inset:0}:host::ng-deep .ace-line-group{display:inline-flex}:host::ng-deep .ace-line-group .lines-container{width:100%}:host::ng-deep .ace-line-group .numberingMarker{display:inline-flex}:host::ng-deep .ace-line-group .numberingMarker span{align-self:end}:host::ng-deep .ace-text-layer>.ace-line,:host::ng-deep .ace-text-layer>.ace-line-group,:host::ng-deep .ace-edges-layer>.ace-line,:host::ng-deep .ace-edges-layer>.ace-line-group{contain:style size layout;position:absolute;top:0;left:0;right:0}:host::ng-deep .ace-text-layer>.ace-line-group:has(.focused){z-index:1}:host::ng-deep .ace-line-group:has(.lines-container>.ace-line:first-child>span:not(:empty)){align-items:baseline}:host::ng-deep .ace-cursor-layer{z-index:4}:host::ng-deep .ace-cursor-layer.selecting{display:none}:host::ng-deep .ace-cursor{z-index:4;position:absolute;box-sizing:border-box;border-left:2px solid;transform:translateZ(0)}:host::ng-deep .ace-hidden-cursors .ace-cursor{opacity:0}:host::ng-deep .ace-hidden-cursors{visibility:hidden}:host::ng-deep .ace-animate-blinking .ace-cursor{animation-duration:1s;animation-timing-function:step-end;animation-name:blink-ace-animate;animation-iteration-count:infinite}:host::ng-deep .ace-animate-blinking.ace-smooth-blinking .ace-cursor{animation-duration:1s;animation-timing-function:ease-in-out;animation-name:blink-ace-animate-smooth}@keyframes blink-ace-animate{0%,to{opacity:1}60%{opacity:0}}@keyframes blink-ace-animate-smooth{0%,to{opacity:1}45%{opacity:1}60%{opacity:0}85%{opacity:0}}:host::ng-deep .ace-selection-layer .ace-selection{position:absolute;z-index:5}:host::ng-deep .ace-selection-layer.text-selection .ace-selection{background-color:#5ea8f766}:host::ng-deep .ace-selection-layer.notes-highlight .ace-selection{background:#ff06}:host::ng-deep .ace-underline{text-decoration:underline}:host::ng-deep .ace-bold{font-weight:700}:host::ng-deep .ace-italic{font-style:italic}:host::ng-deep .page{width:100%;position:absolute}:host::ng-deep .page-label{position:absolute;top:40px;right:96px;font-family:Courier New,Courier,monospace;font-size:16px;line-height:1}:host::ng-deep .font-baseline{visibility:hidden;height:500px}:host::ng-deep .font-baseline span:after{content:\"\";height:100%;display:inline-block}:host::ng-deep .ruler-line{position:absolute;top:0;bottom:0;width:0;border-left:1px solid rgba(0,0,0,.4);opacity:.5;display:none;z-index:1}:host::ng-deep .ruler-line.visible{display:block}:host::ng-deep .drawer-container .mat-button-toggle-button{height:48px;border-radius:4px}:host::ng-deep .drawer-container .mat-button-toggle-checked button{height:48px;border-radius:4px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i7.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i7.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "component", type: ElementToolbarComponent, selector: "app-element-toolbar", inputs: ["isDisabled", "elements"], outputs: ["createElement"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11334
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: EditorComponent, selector: "app-editor", inputs: { customPageWidth: "customPageWidth", content: "content" }, host: { properties: { "class": "this.class" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "sidenavContainer", first: true, predicate: ["drawerContainer"], descendants: true, static: true }, { propertyName: "sidenav", first: true, predicate: ["drawer"], descendants: true, static: true }], ngImport: i0, template: "<mat-drawer-container\n class=\"sidenav-container\"\n [hasBackdrop]=\"sidenavProperties.hasBackdrop\">\n <mat-drawer-content>\n <div class=\"container\">\n <div\n #container\n class=\"edit-container\"></div>\n <app-element-toolbar\n *ngIf=\"elements.length\"\n [elements]=\"elements\"\n [isDisabled]=\"isViewOnly$ | async\"\n (createElement)=\"createElement($event)\"></app-element-toolbar>\n </div>\n </mat-drawer-content>\n <mat-drawer\n #drawer\n [autoFocus]=\"sidenavProperties.autoFocus\"\n [position]=\"sidenavProperties.position\"\n [mode]=\"sidenavProperties.mode\">\n <div\n #drawerContainer\n class=\"drawer-container\"></div>\n </mat-drawer>\n</mat-drawer-container>\n", styles: [":host{flex:1;display:flex;position:relative}.sidenav-container{width:100%}.container{height:100%;display:flex;justify-content:center}app-element-toolbar{right:15px;top:50px}:host::ng-deep .ace-editor{position:relative;line-height:1;font-size:12pt;font-family:Courier New,Courier,monospace;text-align:left;width:100%;height:100%}:host::ng-deep .ace-scroller{position:absolute;overflow:hidden;top:0;bottom:0;-webkit-user-select:none;user-select:none;cursor:text}:host::ng-deep .ace-scrollbar{overflow:hidden scroll;contain:strict;position:absolute;right:0;bottom:0;z-index:6;top:0}:host::ng-deep .ace-scrollbar-inner{position:absolute;cursor:text;left:0;top:0}:host::ng-deep .ace-text-input{position:absolute;z-index:0;width:.5em;height:1em;opacity:0;background:transparent;appearance:none;border:none;resize:none;overflow:hidden;font:inherit;padding:0 1px;margin:0 -1px;contain:strict;-webkit-user-select:text;user-select:text}:host::ng-deep .ace-layer{z-index:1;position:absolute;word-wrap:normal;white-space:pre;height:100%;width:100%;box-sizing:border-box;pointer-events:none}:host::ng-deep .ace-text-layer{font:inherit!important;position:absolute;contain:style size layout;pointer-events:auto}:host::ng-deep .ace-edges-layer{z-index:2}:host::ng-deep .ace-line{display:flex;align-items:baseline;line-height:normal}:host::ng-deep .ace-line .hyperlink-hover{cursor:pointer}:host::ng-deep .ace-line>*{display:inline-block;font-kerning:none}:host::ng-deep .ace-line>*.paragraph-symbol{align-self:flex-end}:host::ng-deep .ace-content{position:inherit;box-sizing:border-box;min-width:100%;contain:style size layout;inset:0}:host::ng-deep .ace-line-group{display:inline-flex}:host::ng-deep .ace-line-group .lines-container{width:100%}:host::ng-deep .ace-line-group .numberingMarker{display:inline-flex}:host::ng-deep .ace-line-group .numberingMarker span{align-self:end}:host::ng-deep .ace-text-layer>.ace-line,:host::ng-deep .ace-text-layer>.ace-line-group,:host::ng-deep .ace-edges-layer>.ace-line,:host::ng-deep .ace-edges-layer>.ace-line-group{contain:style size layout;position:absolute;top:0;left:0;right:0}:host::ng-deep .ace-text-layer>.ace-line-group:has(.focused){z-index:1}:host::ng-deep .ace-line-group:has(.lines-container>.ace-line:first-child>span:not(:empty)){align-items:baseline}:host::ng-deep .ace-cursor-layer{z-index:4}:host::ng-deep .ace-cursor-layer.selecting{display:none}:host::ng-deep .ace-cursor{z-index:4;position:absolute;box-sizing:border-box;border-left:2px solid;transform:translateZ(0)}:host::ng-deep .ace-hidden-cursors .ace-cursor{opacity:0}:host::ng-deep .ace-hidden-cursors{visibility:hidden}:host::ng-deep .ace-animate-blinking .ace-cursor{animation-duration:1s;animation-timing-function:step-end;animation-name:blink-ace-animate;animation-iteration-count:infinite}:host::ng-deep .ace-animate-blinking.ace-smooth-blinking .ace-cursor{animation-duration:1s;animation-timing-function:ease-in-out;animation-name:blink-ace-animate-smooth}@keyframes blink-ace-animate{0%,to{opacity:1}60%{opacity:0}}@keyframes blink-ace-animate-smooth{0%,to{opacity:1}45%{opacity:1}60%{opacity:0}85%{opacity:0}}:host::ng-deep .ace-selection-layer .ace-selection{position:absolute;z-index:5}:host::ng-deep .ace-selection-layer.text-selection .ace-selection{background-color:#5ea8f766}:host::ng-deep .ace-selection-layer.notes-highlight .ace-selection{background:#ff06}:host::ng-deep .ace-underline{text-decoration:underline}:host::ng-deep .ace-bold{font-weight:700}:host::ng-deep .ace-italic{font-style:italic}:host::ng-deep .page{width:100%;position:absolute}:host::ng-deep .page-label{position:absolute;top:40px;right:96px;font-family:Courier New,Courier,monospace;font-size:16px;line-height:1}:host::ng-deep .font-baseline{visibility:hidden;height:500px}:host::ng-deep .font-baseline span:after{content:\"\";height:100%;display:inline-block}:host::ng-deep .ruler-line{position:absolute;top:0;bottom:0;width:0;border-left:1px solid rgba(0,0,0,.4);opacity:.5;display:none;z-index:1}:host::ng-deep .ruler-line.visible{display:block}:host::ng-deep .drawer-container .mat-button-toggle-button{height:48px;border-radius:4px}:host::ng-deep .drawer-container .mat-button-toggle-checked button{height:48px;border-radius:4px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i7.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i7.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "component", type: ElementToolbarComponent, selector: "app-element-toolbar", inputs: ["isDisabled", "elements"], outputs: ["createElement"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11171
11335
  }
11172
11336
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EditorComponent, decorators: [{
11173
11337
  type: Component,
11174
11338
  args: [{ selector: 'app-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-drawer-container\n class=\"sidenav-container\"\n [hasBackdrop]=\"sidenavProperties.hasBackdrop\">\n <mat-drawer-content>\n <div class=\"container\">\n <div\n #container\n class=\"edit-container\"></div>\n <app-element-toolbar\n *ngIf=\"elements.length\"\n [elements]=\"elements\"\n [isDisabled]=\"isViewOnly$ | async\"\n (createElement)=\"createElement($event)\"></app-element-toolbar>\n </div>\n </mat-drawer-content>\n <mat-drawer\n #drawer\n [autoFocus]=\"sidenavProperties.autoFocus\"\n [position]=\"sidenavProperties.position\"\n [mode]=\"sidenavProperties.mode\">\n <div\n #drawerContainer\n class=\"drawer-container\"></div>\n </mat-drawer>\n</mat-drawer-container>\n", styles: [":host{flex:1;display:flex;position:relative}.sidenav-container{width:100%}.container{height:100%;display:flex;justify-content:center}app-element-toolbar{right:15px;top:50px}:host::ng-deep .ace-editor{position:relative;line-height:1;font-size:12pt;font-family:Courier New,Courier,monospace;text-align:left;width:100%;height:100%}:host::ng-deep .ace-scroller{position:absolute;overflow:hidden;top:0;bottom:0;-webkit-user-select:none;user-select:none;cursor:text}:host::ng-deep .ace-scrollbar{overflow:hidden scroll;contain:strict;position:absolute;right:0;bottom:0;z-index:6;top:0}:host::ng-deep .ace-scrollbar-inner{position:absolute;cursor:text;left:0;top:0}:host::ng-deep .ace-text-input{position:absolute;z-index:0;width:.5em;height:1em;opacity:0;background:transparent;appearance:none;border:none;resize:none;overflow:hidden;font:inherit;padding:0 1px;margin:0 -1px;contain:strict;-webkit-user-select:text;user-select:text}:host::ng-deep .ace-layer{z-index:1;position:absolute;word-wrap:normal;white-space:pre;height:100%;width:100%;box-sizing:border-box;pointer-events:none}:host::ng-deep .ace-text-layer{font:inherit!important;position:absolute;contain:style size layout;pointer-events:auto}:host::ng-deep .ace-edges-layer{z-index:2}:host::ng-deep .ace-line{display:flex;align-items:baseline;line-height:normal}:host::ng-deep .ace-line .hyperlink-hover{cursor:pointer}:host::ng-deep .ace-line>*{display:inline-block;font-kerning:none}:host::ng-deep .ace-line>*.paragraph-symbol{align-self:flex-end}:host::ng-deep .ace-content{position:inherit;box-sizing:border-box;min-width:100%;contain:style size layout;inset:0}:host::ng-deep .ace-line-group{display:inline-flex}:host::ng-deep .ace-line-group .lines-container{width:100%}:host::ng-deep .ace-line-group .numberingMarker{display:inline-flex}:host::ng-deep .ace-line-group .numberingMarker span{align-self:end}:host::ng-deep .ace-text-layer>.ace-line,:host::ng-deep .ace-text-layer>.ace-line-group,:host::ng-deep .ace-edges-layer>.ace-line,:host::ng-deep .ace-edges-layer>.ace-line-group{contain:style size layout;position:absolute;top:0;left:0;right:0}:host::ng-deep .ace-text-layer>.ace-line-group:has(.focused){z-index:1}:host::ng-deep .ace-line-group:has(.lines-container>.ace-line:first-child>span:not(:empty)){align-items:baseline}:host::ng-deep .ace-cursor-layer{z-index:4}:host::ng-deep .ace-cursor-layer.selecting{display:none}:host::ng-deep .ace-cursor{z-index:4;position:absolute;box-sizing:border-box;border-left:2px solid;transform:translateZ(0)}:host::ng-deep .ace-hidden-cursors .ace-cursor{opacity:0}:host::ng-deep .ace-hidden-cursors{visibility:hidden}:host::ng-deep .ace-animate-blinking .ace-cursor{animation-duration:1s;animation-timing-function:step-end;animation-name:blink-ace-animate;animation-iteration-count:infinite}:host::ng-deep .ace-animate-blinking.ace-smooth-blinking .ace-cursor{animation-duration:1s;animation-timing-function:ease-in-out;animation-name:blink-ace-animate-smooth}@keyframes blink-ace-animate{0%,to{opacity:1}60%{opacity:0}}@keyframes blink-ace-animate-smooth{0%,to{opacity:1}45%{opacity:1}60%{opacity:0}85%{opacity:0}}:host::ng-deep .ace-selection-layer .ace-selection{position:absolute;z-index:5}:host::ng-deep .ace-selection-layer.text-selection .ace-selection{background-color:#5ea8f766}:host::ng-deep .ace-selection-layer.notes-highlight .ace-selection{background:#ff06}:host::ng-deep .ace-underline{text-decoration:underline}:host::ng-deep .ace-bold{font-weight:700}:host::ng-deep .ace-italic{font-style:italic}:host::ng-deep .page{width:100%;position:absolute}:host::ng-deep .page-label{position:absolute;top:40px;right:96px;font-family:Courier New,Courier,monospace;font-size:16px;line-height:1}:host::ng-deep .font-baseline{visibility:hidden;height:500px}:host::ng-deep .font-baseline span:after{content:\"\";height:100%;display:inline-block}:host::ng-deep .ruler-line{position:absolute;top:0;bottom:0;width:0;border-left:1px solid rgba(0,0,0,.4);opacity:.5;display:none;z-index:1}:host::ng-deep .ruler-line.visible{display:block}:host::ng-deep .drawer-container .mat-button-toggle-button{height:48px;border-radius:4px}:host::ng-deep .drawer-container .mat-button-toggle-checked button{height:48px;border-radius:4px}\n"] }]
11175
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: ComponentService }, { type: EditorService }, { type: i0.Injector }, { type: RegulatorService }, { type: CommandsService }, { type: i5.Clipboard }], propDecorators: { content: [{
11339
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: ComponentService }, { type: EditorService }, { type: i0.Injector }, { type: RegulatorService }, { type: CommandsService }, { type: i5.Clipboard }], propDecorators: { customPageWidth: [{
11340
+ type: Input
11341
+ }], content: [{
11176
11342
  type: Input
11177
11343
  }], container: [{
11178
11344
  type: ViewChild,
@@ -12934,7 +13100,7 @@ class EditorHeaderComponent {
12934
13100
  });
12935
13101
  }
12936
13102
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EditorHeaderComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Injector }, { token: CustomIconService }], target: i0.ɵɵFactoryTarget.Component }); }
12937
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: EditorHeaderComponent, isStandalone: true, selector: "app-editor-header", inputs: { isViewOnly: "isViewOnly", hasSelection: "hasSelection", clipboardData: "clipboardData", title: "title", historyInfo: "historyInfo", styles: "styles" }, outputs: { openFileFromDisk: "openFileFromDisk", addCustomElement: "addCustomElement", saveAs: "saveAs", print: "print", insertPageBreak: "insertPageBreak", createDocument: "createDocument", insertImage: "insertImage", changeMode: "changeMode", renameDocumentTitle: "renameDocumentTitle", delete: "delete", openEditMenu: "openEditMenu", undo: "undo", redo: "redo", cutSelected: "cutSelected", copySelected: "copySelected", pasteClipboardData: "pasteClipboardData", selectAll: "selectAll", removeSelected: "removeSelected", insertLink: "insertLink", createElement: "createElement", changeParagraphStyle: "changeParagraphStyle", changeTextStyle: "changeTextStyle", setNumberingTemplateType: "setNumberingTemplateType", removeNumberings: "removeNumberings", insertTable: "insertTable" }, providers: [ExternalElementService], viewQueries: [{ propertyName: "titleSpan", first: true, predicate: ["titleSpan"], descendants: true, static: true }, { propertyName: "tableInsertMenu", first: true, predicate: ["tableInsert"], descendants: true }], ngImport: i0, template: "<div class=\"menu-header\">\n <div class=\"file-name\">\n <span\n #titleSpan\n class=\"title\"\n matTooltip=\"Double click to rename\"\n (blur)=\"onRenameTitle($event)\"\n (keydown.enter)=\"$event.target.blur()\"\n (dblclick)=\"onFocus($event)\">\n {{ title }}\n </span>\n </div>\n <div class=\"menu-buttons\">\n <button\n id=\"editor-header-menu-file\"\n mat-button\n [matMenuTriggerFor]=\"fileMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n File\n </button>\n <mat-menu #fileMenu=\"matMenu\">\n <button\n *ngIf=\"!isViewOnly\"\n id=\"editor-header-menu-item-new\"\n mat-menu-item\n (click)=\"createDocument.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-add-new\"></mat-icon>\n <span class=\"menu-item-text\">New</span>\n </div>\n </button>\n <input\n #fileInput\n class=\"upload-input\"\n accept=\".docx\"\n type=\"file\"\n id=\"file-input\"\n (change)=\"onOpenFileFromDisk($event)\" />\n <button\n *ngIf=\"!isViewOnly\"\n id=\"editor-header-menu-item-open-from\"\n mat-menu-item\n (click)=\"fileInput.click()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-open-from\"></mat-icon>\n <span class=\"menu-item-text\">Open From</span>\n <span class=\"hot-keys\">Ctrl+O</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-save-as\"\n mat-menu-item\n (click)=\"onSaveAs()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">Save As</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-rename\"\n mat-menu-item\n (click)=\"onRename()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-rename\"></mat-icon>\n <span class=\"menu-item-text\">Rename</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-print\"\n mat-menu-item\n (click)=\"onPrint()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n <span class=\"menu-item-text\">Print</span>\n <span class=\"hot-keys\">Ctrl+P</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-delete\"\n mat-menu-item\n (click)=\"onDelete()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">Delete</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"editor-header-menu-edit\"\n mat-button\n [matMenuTriggerFor]=\"editMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"menuOpened()\">\n Edit\n </button>\n <mat-menu #editMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-undo\"\n mat-menu-item\n [disabled]=\"!canUndo\"\n (click)=\"onUndo()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n <span class=\"menu-item-text\">Undo</span>\n <span class=\"hot-keys\">Ctrl+Z</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-redo\"\n mat-menu-item\n [disabled]=\"!canRedo\"\n (click)=\"onRedo()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n <span class=\"menu-item-text\">Redo</span>\n <span class=\"hot-keys\">Ctrl+Y</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-cut\"\n mat-menu-item\n [disabled]=\"!hasSelection\"\n (click)=\"onCut()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-content-cut\"></mat-icon>\n <span class=\"menu-item-text\">Cut</span>\n <span class=\"hot-keys\">Ctrl+X</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-copy\"\n mat-menu-item\n [disabled]=\"!hasSelection\"\n (click)=\"onCopy()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-file-copy\"></mat-icon>\n <span class=\"menu-item-text\">Copy</span>\n <span class=\"hot-keys\">Ctrl+C</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-paste\"\n mat-menu-item\n [disabled]=\"!clipboardData?.length\"\n (click)=\"onPaste()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-content-paste\"></mat-icon>\n <span class=\"menu-item-text\">Paste</span>\n <span class=\"hot-keys\">Ctrl+V</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-select-all\"\n mat-menu-item\n (click)=\"onSelectAll()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-select-all\"></mat-icon>\n <span class=\"menu-item-text\">Select All</span>\n <span class=\"hot-keys\">Ctrl+A</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-delete-text\"\n mat-menu-item\n [disabled]=\"!hasSelection\"\n (click)=\"onRemoveSelected()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">Delete</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"!isViewOnly\"\n #insertMenuTrigger=\"matMenuTrigger\"\n id=\"editor-header-menu-insert\"\n mat-button\n [matMenuTriggerFor]=\"insertMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n Insert\n </button>\n <mat-menu #insertMenu=\"matMenu\">\n <input\n #imageFileInput\n class=\"upload-input\"\n accept=\"image/gif, image/jpeg, image/png, image/bmp, image/webp\"\n type=\"file\"\n id=\"image-file-input\"\n (change)=\"onInsertImage($event)\" />\n <button\n id=\"editor-header-menu-item-image\"\n mat-menu-item\n (click)=\"imageFileInput.click()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-image\"></mat-icon>\n <span class=\"menu-item-text\">Image</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-table\"\n mat-menu-item\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-table\"></mat-icon>\n Table\n </button>\n <button\n id=\"editor-header-menu-item-link\"\n mat-menu-item\n (click)=\"onInsertLink()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-link-on\"></mat-icon>\n <span class=\"menu-item-text\">Link</span>\n <span class=\"hot-keys\">Ctrl+K</span>\n </div>\n </button>\n <button\n *ngFor=\"let element of elements\"\n id=\"editor-header-menu-item-{{ element.title }}\"\n mat-menu-item\n (click)=\"onCreate(element)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n <span class=\"menu-item-text\">{{ element.name }}</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-headers-footers\"\n mat-menu-item\n class=\"hidden\"\n [matMenuTriggerFor]=\"listHeadersFootersMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">Headers & Footers</span>\n </div>\n </button>\n <mat-menu #listHeadersFootersMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-header\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-header\"></mat-icon>\n <span class=\"menu-item-text\">Header</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-bottom\"></mat-icon>\n <span class=\"menu-item-text\">Footer</span>\n </div>\n </button>\n </mat-menu>\n </mat-menu>\n <button\n *ngIf=\"!isViewOnly\"\n id=\"editor-header-menu-layout\"\n mat-button\n [matMenuTriggerFor]=\"layoutMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n Layout\n </button>\n <mat-menu #layoutMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-page-break\"\n mat-menu-item\n (click)=\"insertPageBreak.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-page-break\"></mat-icon>\n <span class=\"menu-item-text\">Page Break</span>\n <span class=\"hot-keys\">Ctrl+Enter</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"!isViewOnly\"\n id=\"editor-header-menu-format\"\n mat-button\n [matMenuTriggerFor]=\"formatMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n Format\n </button>\n <mat-menu #formatMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-align\"\n mat-menu-item\n [matMenuTriggerFor]=\"listAlignMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">Align</span>\n </div>\n </button>\n <mat-menu #listAlignMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-align-left\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Left)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">Left</span>\n <span class=\"hot-keys\">Ctrl+L</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-align-center\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Center)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n <span class=\"menu-item-text\">Center</span>\n <span class=\"hot-keys\">Ctrl+E</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-align-right\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Right)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n <span class=\"menu-item-text\">Right</span>\n <span class=\"hot-keys\">Ctrl+R</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"editor-header-menu-item-bullets-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletsNumberingMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">Bullets & Numbering</span>\n </div>\n </button>\n <mat-menu #listBulletsNumberingMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-bullets\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">Bullet List Menu</span>\n </div>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList1)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList1\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList2)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList2\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList3)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList3\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList4)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList4\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList5)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList5\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList6)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList6\"></mat-icon>\n </div>\n </mat-menu>\n <button\n id=\"editor-header-menu-item-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listNumberedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n <span class=\"menu-item-text\">Numbered List Menu</span>\n </div>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList1)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList1\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList2)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList2\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList3)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList3\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList4)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList4\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList5)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList5\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList6)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList6\"></mat-icon>\n </div>\n </mat-menu>\n </mat-menu>\n <button\n id=\"editor-header-menu-item-text\"\n mat-menu-item\n [matMenuTriggerFor]=\"listTextMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">Text</span>\n </div>\n </button>\n <mat-menu #listTextMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-bold\"\n mat-menu-item\n (click)=\"onApplyBold()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">Bold</span>\n <span class=\"hot-keys\">Ctrl+B</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-italic\"\n mat-menu-item\n (click)=\"onApplyItalic()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-italic\"></mat-icon>\n <span class=\"menu-item-text\">Italic</span>\n <span class=\"hot-keys\">Ctrl+I</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-underlined\"\n mat-menu-item\n (click)=\"onApplyUnderline()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-underlined\"></mat-icon>\n <span class=\"menu-item-text\">Underlined</span>\n <span class=\"hot-keys\">Ctrl+U</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"editor-header-menu-item-header-footer\"\n mat-menu-item\n class=\"hidden\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">Headers & Footers</span>\n </div>\n </button>\n </mat-menu>\n <mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table\">\n <app-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n </mat-menu>\n </div>\n</div>\n\n<div class=\"editor-mode\">\n <mat-form-field appearance=\"outline\">\n <mat-select\n [(value)]=\"selectedMode\"\n (selectionChange)=\"changeMode.emit($event)\">\n <mat-select-trigger>\n <div class=\"select-trigger\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"{{ modeOptions[selectedMode].icon }}\"></mat-icon>\n <span class=\"item-title\">{{ modeOptions[selectedMode].name }}</span>\n <div class=\"separator\"></div>\n </div>\n </mat-select-trigger>\n <mat-option\n *ngFor=\"let mode of modeOptions\"\n class=\"editor-mode-option\"\n [value]=\"mode.id\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"{{ mode.icon }}\"></mat-icon>\n <div class=\"item-content\">\n <span class=\"item-title\">{{ mode.name }}</span>\n <span class=\"item-text\">{{ mode.text }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n", styles: [":host{width:100%;display:flex;align-items:center;justify-content:space-between;padding:8px 24px}:host .mat-mdc-form-field{width:auto;height:24px;text-align:right}:host .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host .mat-mdc-form-field ::ng-deep .mat-mdc-text-field-wrapper{align-items:center}:host .mat-mdc-form-field ::ng-deep .mdc-notched-outline>*{border:unset}:host .mat-mdc-form-field ::ng-deep .mat-mdc-select-value{margin-right:4px}:host .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-infix{padding:0;width:auto}:host .mat-mdc-form-field ::ng-deep .mat-mdc-select-arrow svg{top:0}:host .mat-mdc-form-field .mat-mdc-select{font-size:14px;font-weight:700}.upload-input{display:none}mat-icon{width:24px;height:24px;font-size:24px}.editor-mode{display:flex;justify-content:flex-end;align-items:center;overflow:hidden;height:40px;border:1px solid;border-radius:20px}::ng-deep .cdk-overlay-pane{min-width:min-content}.separator{border-left:1px solid;opacity:.1;height:18px;margin:2px 8px}.select-trigger{display:inline-flex;text-align:left;margin-top:1px}.select-trigger .mat-icon{width:32px}.item-content{display:grid}.item-content .item-title{line-height:6px;padding-top:10px}.item-content .item-text{font-size:10px;font-weight:400;text-wrap:nowrap}.menu-buttons{display:flex;flex-wrap:wrap}.menu-buttons button{font-weight:500;height:24px;min-width:unset}.menu-header{display:flex;flex-direction:column;flex:1;overflow:hidden}.file-name{flex-basis:0;margin:0 8px 6px;display:block;min-height:32px;overflow:hidden}.file-name .title{font-size:18px;font-weight:500;line-height:normal;outline:none;display:inline-block;white-space:nowrap;min-width:1px;min-height:32px;overflow:hidden;max-width:100%;-webkit-user-select:none;user-select:none}.file-name .title:not(:focus){text-overflow:ellipsis}.heading-menu{display:inline-flex;width:210px}.hot-keys{text-align:end;width:auto}.menu-item-text{white-space:nowrap;width:64%}.mat-mdc-menu-item .mat-icon{margin-right:4px;width:28px}#editor-header-menu-item-print,#editor-header-menu-item-redo,#editor-header-menu-item-paste,#editor-header-menu-item-link,#editor-header-menu-item-image{border-bottom:1px solid}.hidden{display:none}.list-marker,.list-number{margin:0 5px}.list-marker mat-icon,.list-number mat-icon{width:70px;height:80px;margin:0 5px}.list-marker mat-icon:hover,.list-number mat-icon:hover{border:none}.list-icon .selected,.list-number .selected,.list-icon .selected:hover,.list-number .selected:hover{border:2px solid}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: InsertTableComponent, selector: "app-insert-table", outputs: ["selectSizes"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7$2.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i7$2.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i4$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13103
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: EditorHeaderComponent, isStandalone: true, selector: "app-editor-header", inputs: { isViewOnly: "isViewOnly", hasSelection: "hasSelection", clipboardData: "clipboardData", title: "title", historyInfo: "historyInfo", styles: "styles" }, outputs: { openFileFromDisk: "openFileFromDisk", addCustomElement: "addCustomElement", saveAs: "saveAs", print: "print", insertPageBreak: "insertPageBreak", createDocument: "createDocument", insertImage: "insertImage", changeMode: "changeMode", renameDocumentTitle: "renameDocumentTitle", delete: "delete", openEditMenu: "openEditMenu", undo: "undo", redo: "redo", cutSelected: "cutSelected", copySelected: "copySelected", pasteClipboardData: "pasteClipboardData", selectAll: "selectAll", removeSelected: "removeSelected", insertLink: "insertLink", createElement: "createElement", changeParagraphStyle: "changeParagraphStyle", changeTextStyle: "changeTextStyle", setNumberingTemplateType: "setNumberingTemplateType", removeNumberings: "removeNumberings", insertTable: "insertTable" }, providers: [ExternalElementService], viewQueries: [{ propertyName: "titleSpan", first: true, predicate: ["titleSpan"], descendants: true, static: true }, { propertyName: "tableInsertMenu", first: true, predicate: ["tableInsert"], descendants: true }], ngImport: i0, template: "<div class=\"menu-header\">\n <div class=\"file-name\">\n <span\n #titleSpan\n class=\"title\"\n matTooltip=\"Double click to rename\"\n (blur)=\"onRenameTitle($event)\"\n (keydown.enter)=\"$event.target.blur()\"\n (dblclick)=\"onFocus($event)\">\n {{ title }}\n </span>\n </div>\n <div class=\"menu-buttons\">\n <button\n id=\"editor-header-menu-file\"\n mat-button\n [matMenuTriggerFor]=\"fileMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n File\n </button>\n <mat-menu #fileMenu=\"matMenu\">\n <button\n *ngIf=\"!isViewOnly\"\n id=\"editor-header-menu-item-new\"\n mat-menu-item\n (click)=\"createDocument.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-add-new\"></mat-icon>\n <span class=\"menu-item-text\">New</span>\n </div>\n </button>\n <input\n #fileInput\n class=\"upload-input\"\n accept=\".docx\"\n type=\"file\"\n id=\"file-input\"\n (change)=\"onOpenFileFromDisk($event)\" />\n <button\n *ngIf=\"!isViewOnly\"\n id=\"editor-header-menu-item-open-from\"\n mat-menu-item\n (click)=\"fileInput.click()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-open-from\"></mat-icon>\n <span class=\"menu-item-text\">Open From</span>\n <span class=\"hot-keys\">Ctrl+O</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-save-as\"\n mat-menu-item\n (click)=\"onSaveAs()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">Save As</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-rename\"\n mat-menu-item\n (click)=\"onRename()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-rename\"></mat-icon>\n <span class=\"menu-item-text\">Rename</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-print\"\n mat-menu-item\n (click)=\"onPrint()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n <span class=\"menu-item-text\">Print</span>\n <span class=\"hot-keys\">Ctrl+P</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-delete\"\n mat-menu-item\n (click)=\"onDelete()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">Delete</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"editor-header-menu-edit\"\n mat-button\n [matMenuTriggerFor]=\"editMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"menuOpened()\">\n Edit\n </button>\n <mat-menu #editMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-undo\"\n mat-menu-item\n [disabled]=\"!canUndo\"\n (click)=\"onUndo()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n <span class=\"menu-item-text\">Undo</span>\n <span class=\"hot-keys\">Ctrl+Z</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-redo\"\n mat-menu-item\n [disabled]=\"!canRedo\"\n (click)=\"onRedo()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n <span class=\"menu-item-text\">Redo</span>\n <span class=\"hot-keys\">Ctrl+Y</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-cut\"\n mat-menu-item\n [disabled]=\"!hasSelection\"\n (click)=\"onCut()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-content-cut\"></mat-icon>\n <span class=\"menu-item-text\">Cut</span>\n <span class=\"hot-keys\">Ctrl+X</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-copy\"\n mat-menu-item\n [disabled]=\"!hasSelection\"\n (click)=\"onCopy()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-file-copy\"></mat-icon>\n <span class=\"menu-item-text\">Copy</span>\n <span class=\"hot-keys\">Ctrl+C</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-paste\"\n mat-menu-item\n [disabled]=\"!clipboardData?.length\"\n (click)=\"onPaste()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-content-paste\"></mat-icon>\n <span class=\"menu-item-text\">Paste</span>\n <span class=\"hot-keys\">Ctrl+V</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-select-all\"\n mat-menu-item\n (click)=\"onSelectAll()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-select-all\"></mat-icon>\n <span class=\"menu-item-text\">Select All</span>\n <span class=\"hot-keys\">Ctrl+A</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-delete-text\"\n mat-menu-item\n [disabled]=\"!hasSelection\"\n (click)=\"onRemoveSelected()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">Delete</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"!isViewOnly\"\n #insertMenuTrigger=\"matMenuTrigger\"\n id=\"editor-header-menu-insert\"\n mat-button\n [matMenuTriggerFor]=\"insertMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n Insert\n </button>\n <mat-menu #insertMenu=\"matMenu\">\n <input\n #imageFileInput\n class=\"upload-input\"\n accept=\"image/gif, image/jpeg, image/png, image/bmp, image/webp\"\n type=\"file\"\n id=\"image-file-input\"\n (change)=\"onInsertImage($event)\" />\n <button\n id=\"editor-header-menu-item-image\"\n mat-menu-item\n (click)=\"imageFileInput.click()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-image\"></mat-icon>\n <span class=\"menu-item-text\">Image</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-table\"\n mat-menu-item\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-table\"></mat-icon>\n Table\n </button>\n <button\n id=\"editor-header-menu-item-link\"\n mat-menu-item\n (click)=\"onInsertLink()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-link-on\"></mat-icon>\n <span class=\"menu-item-text\">Link</span>\n <span class=\"hot-keys\">Ctrl+K</span>\n </div>\n </button>\n <button\n *ngFor=\"let element of elements\"\n id=\"editor-header-menu-item-{{ element.title }}\"\n mat-menu-item\n (click)=\"onCreate(element)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n <span class=\"menu-item-text\">{{ element.name }}</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-headers-footers\"\n mat-menu-item\n class=\"hidden\"\n [matMenuTriggerFor]=\"listHeadersFootersMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">Headers & Footers</span>\n </div>\n </button>\n <mat-menu #listHeadersFootersMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-header\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-header\"></mat-icon>\n <span class=\"menu-item-text\">Header</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-bottom\"></mat-icon>\n <span class=\"menu-item-text\">Footer</span>\n </div>\n </button>\n </mat-menu>\n </mat-menu>\n <button\n *ngIf=\"!isViewOnly\"\n id=\"editor-header-menu-layout\"\n mat-button\n [matMenuTriggerFor]=\"layoutMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n Layout\n </button>\n <mat-menu #layoutMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-page-break\"\n mat-menu-item\n (click)=\"insertPageBreak.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-page-break\"></mat-icon>\n <span class=\"menu-item-text\">Page Break</span>\n <span class=\"hot-keys\">Ctrl+Enter</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"!isViewOnly\"\n id=\"editor-header-menu-format\"\n mat-button\n [matMenuTriggerFor]=\"formatMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n Format\n </button>\n <mat-menu #formatMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-align\"\n mat-menu-item\n [matMenuTriggerFor]=\"listAlignMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">Align</span>\n </div>\n </button>\n <mat-menu #listAlignMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-align-left\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Left)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">Left</span>\n <span class=\"hot-keys\">Ctrl+L</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-align-center\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Center)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n <span class=\"menu-item-text\">Center</span>\n <span class=\"hot-keys\">Ctrl+E</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-align-right\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Right)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n <span class=\"menu-item-text\">Right</span>\n <span class=\"hot-keys\">Ctrl+R</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"editor-header-menu-item-bullets-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletsNumberingMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">Bullets & Numbering</span>\n </div>\n </button>\n <mat-menu #listBulletsNumberingMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-bullets\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">Bullet List Menu</span>\n </div>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList1)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList1\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList2)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList2\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList3)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList3\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList4)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList4\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList5)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList5\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList6)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList6\"></mat-icon>\n </div>\n </mat-menu>\n <button\n id=\"editor-header-menu-item-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listNumberedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n <span class=\"menu-item-text\">Numbered List Menu</span>\n </div>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList1)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList1\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList2)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList2\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList3)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList3\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList4)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList4\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList5)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList5\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList6)\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList6\"></mat-icon>\n </div>\n </mat-menu>\n </mat-menu>\n <button\n id=\"editor-header-menu-item-text\"\n mat-menu-item\n [matMenuTriggerFor]=\"listTextMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">Text</span>\n </div>\n </button>\n <mat-menu #listTextMenu=\"matMenu\">\n <button\n id=\"editor-header-menu-item-bold\"\n mat-menu-item\n (click)=\"onApplyBold()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">Bold</span>\n <span class=\"hot-keys\">Ctrl+B</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-italic\"\n mat-menu-item\n (click)=\"onApplyItalic()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-italic\"></mat-icon>\n <span class=\"menu-item-text\">Italic</span>\n <span class=\"hot-keys\">Ctrl+I</span>\n </div>\n </button>\n <button\n id=\"editor-header-menu-item-underlined\"\n mat-menu-item\n (click)=\"onApplyUnderline()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-underlined\"></mat-icon>\n <span class=\"menu-item-text\">Underlined</span>\n <span class=\"hot-keys\">Ctrl+U</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"editor-header-menu-item-header-footer\"\n mat-menu-item\n class=\"hidden\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">Headers & Footers</span>\n </div>\n </button>\n </mat-menu>\n <mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table\">\n <app-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n </mat-menu>\n </div>\n</div>\n\n<div class=\"editor-mode\">\n <mat-form-field appearance=\"outline\">\n <mat-select\n [(value)]=\"selectedMode\"\n (selectionChange)=\"changeMode.emit($event)\">\n <mat-select-trigger>\n <div class=\"select-trigger\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"{{ modeOptions[selectedMode].icon }}\"></mat-icon>\n <span class=\"item-title\">{{ modeOptions[selectedMode].name }}</span>\n <div class=\"separator\"></div>\n </div>\n </mat-select-trigger>\n <mat-option\n *ngFor=\"let mode of modeOptions\"\n class=\"editor-mode-option\"\n [value]=\"mode.id\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"{{ mode.icon }}\"></mat-icon>\n <div class=\"item-content\">\n <span class=\"item-title\">{{ mode.name }}</span>\n <span class=\"item-text\">{{ mode.text }}</span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n</div>\n", styles: [":host{width:100%;display:flex;align-items:center;justify-content:space-between;padding:8px 24px}:host .mat-mdc-form-field{width:auto;height:24px;text-align:right}:host .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}:host .mat-mdc-form-field ::ng-deep .mat-mdc-text-field-wrapper{align-items:center}:host .mat-mdc-form-field ::ng-deep .mdc-notched-outline>*{border:unset}:host .mat-mdc-form-field ::ng-deep .mat-mdc-select-value{margin-right:4px}:host .mat-mdc-form-field ::ng-deep .mat-mdc-form-field-infix{padding:0;width:auto}:host .mat-mdc-form-field ::ng-deep .mat-mdc-select-arrow svg{top:0}:host .mat-mdc-form-field .mat-mdc-select{font-size:14px;font-weight:700}.upload-input{display:none}mat-icon{width:24px;height:24px;font-size:24px}.editor-mode{display:flex;justify-content:flex-end;align-items:center;overflow:hidden;height:40px;border:1px solid;border-radius:20px}::ng-deep .cdk-overlay-pane{min-width:min-content}.separator{border-left:1px solid;opacity:.1;height:18px;margin:2px 8px}.select-trigger{display:inline-flex;text-align:left;margin-top:1px}.select-trigger .mat-icon{width:32px}.item-content{display:grid}.item-content .item-title{line-height:6px;padding-top:10px}.item-content .item-text{font-size:10px;font-weight:400;text-wrap:nowrap}.menu-buttons{display:flex;flex-wrap:wrap}.menu-buttons button{font-weight:500;height:24px;min-width:unset}.menu-header{display:flex;flex-direction:column;flex:1;overflow:hidden}.file-name{flex-basis:0;margin:0 8px 6px;display:block;min-height:32px;overflow:hidden}.file-name .title{font-size:18px;font-weight:500;line-height:normal;outline:none;display:inline-block;white-space:nowrap;min-width:1px;min-height:32px;overflow:hidden;max-width:100%;-webkit-user-select:none;user-select:none}.file-name .title:not(:focus){text-overflow:ellipsis}.heading-menu{display:inline-flex;width:210px}.hot-keys{text-align:end;width:auto}.menu-item-text{white-space:nowrap;width:64%}.mat-mdc-menu-item .mat-icon{margin-right:4px;width:28px}#editor-header-menu-item-print,#editor-header-menu-item-redo,#editor-header-menu-item-paste,#editor-header-menu-item-link,#editor-header-menu-item-image{border-bottom:1px solid}.hidden{display:none}.list-marker,.list-number{margin:0 5px}.list-marker mat-icon,.list-number mat-icon{width:70px;height:80px;margin:0 5px}.list-marker mat-icon:hover,.list-number mat-icon:hover{border:none}.list-icon .selected,.list-number .selected,.list-icon .selected:hover,.list-number .selected:hover{border:2px solid}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: InsertTableComponent, selector: "app-insert-table", outputs: ["selectSizes"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "directive", type: i7$1.MatSelectTrigger, selector: "mat-select-trigger" }, { kind: "component", type: i4$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
12938
13104
  }
12939
13105
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EditorHeaderComponent, decorators: [{
12940
13106
  type: Component,
@@ -13065,7 +13231,7 @@ class EditorSearchDialogComponent extends ObserverComponent {
13065
13231
  });
13066
13232
  }
13067
13233
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EditorSearchDialogComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
13068
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: EditorSearchDialogComponent, isStandalone: true, selector: "app-editor-search-dialog", providers: [ExternalElementService], usesInheritance: true, ngImport: i0, template: "<div class=\"line search-form\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>Search for</mat-label>\n <input\n matInput\n [formControl]=\"searchControl\"\n (keydown.enter)=\"findNext()\" />\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"findPrev()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-onleft\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"findNext()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-onright\"></mat-icon>\n </button>\n</div>\n<ng-container *ngIf=\"{ searchIteration: searchIteration$ | async } as data\">\n <div\n class=\"replace-form\"\n *ngIf=\"isReplace\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>Replace with</mat-label>\n <input\n matInput\n [formControl]=\"replaceControl\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n (keydown.enter)=\"replace()\" />\n </mat-form-field>\n <button\n type=\"button\"\n mat-button\n (click)=\"replace()\">\n Replace\n </button>\n </div>\n <div class=\"search-options\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Toggle Replace Mode\"\n (click)=\"setReplace()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"{{ isReplace ? 'icon-arrow-up' : 'icon-arrow-down' }}\"></mat-icon>\n </button>\n <div class=\"counter\">\n <span>{{ data.searchIteration?.current ?? 0 }} of {{ data.searchIteration?.total ?? 0 }}</span>\n </div>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Close\"\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n </button>\n </div>\n</ng-container>\n", styles: [":host{min-height:56px;max-width:100%;display:block;font-size:10px;padding:3px}.close-icon{position:absolute;right:1px;top:1px}.search-form,.replace-form,.search-options{display:flex}mat-form-field{padding-left:10px}.mdc-button{font-size:12px;padding:0 8px;min-width:unset}.search-options{line-height:40px}.search-options .counter{text-align:center;flex:1}.mat-mdc-input-element{font-size:10px}.replace-form .mdc-button{width:80px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13234
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: EditorSearchDialogComponent, isStandalone: true, selector: "app-editor-search-dialog", providers: [ExternalElementService], usesInheritance: true, ngImport: i0, template: "<div class=\"line search-form\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>Search for</mat-label>\n <input\n matInput\n [formControl]=\"searchControl\"\n (keydown.enter)=\"findNext()\" />\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"findPrev()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-onleft\"></mat-icon>\n </button>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"findNext()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-onright\"></mat-icon>\n </button>\n</div>\n<ng-container *ngIf=\"{ searchIteration: searchIteration$ | async } as data\">\n <div\n class=\"replace-form\"\n *ngIf=\"isReplace\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>Replace with</mat-label>\n <input\n matInput\n [formControl]=\"replaceControl\"\n spellcheck=\"false\"\n autocomplete=\"off\"\n (keydown.enter)=\"replace()\" />\n </mat-form-field>\n <button\n type=\"button\"\n mat-button\n (click)=\"replace()\">\n Replace\n </button>\n </div>\n <div class=\"search-options\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Toggle Replace Mode\"\n (click)=\"setReplace()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"{{ isReplace ? 'icon-arrow-up' : 'icon-arrow-down' }}\"></mat-icon>\n </button>\n <div class=\"counter\">\n <span>{{ data.searchIteration?.current ?? 0 }} of {{ data.searchIteration?.total ?? 0 }}</span>\n </div>\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Close\"\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n </button>\n </div>\n</ng-container>\n", styles: [":host{min-height:56px;max-width:100%;display:block;font-size:10px;padding:3px}.close-icon{position:absolute;right:1px;top:1px}.search-form,.replace-form,.search-options{display:flex}mat-form-field{padding-left:10px}.mdc-button{font-size:12px;padding:0 8px;min-width:unset}.search-options{line-height:40px}.search-options .counter{text-align:center;flex:1}.mat-mdc-input-element{font-size:10px}.replace-form .mdc-button{width:80px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i2$1.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13069
13235
  }
13070
13236
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: EditorSearchDialogComponent, decorators: [{
13071
13237
  type: Component,
@@ -13097,7 +13263,7 @@ class FontComponent {
13097
13263
  this.selectFont.emit(font);
13098
13264
  }
13099
13265
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FontComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13100
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: FontComponent, selector: "app-font", inputs: { isDisabled: "isDisabled", styles: "styles" }, outputs: { selectFont: "selectFont" }, ngImport: i0, template: "<button\n mat-button\n [matMenuTriggerFor]=\"fontMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n <div class=\"font-menu\">\n <span>{{ font }}</span>\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu #fontMenu=\"matMenu\">\n <ng-container *ngFor=\"let font of fonts\">\n <button\n mat-menu-item\n [disabled]=\"isDisabled\"\n (click)=\"onSelectFont(font)\">\n {{ font }}\n </button>\n </ng-container>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}:host button{height:28px;margin:0 4px}.font-menu{display:flex;justify-content:space-between;align-items:center;min-width:130px}span{padding-left:10%}mat-icon{margin-right:5%}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13266
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: FontComponent, selector: "app-font", inputs: { isDisabled: "isDisabled", styles: "styles" }, outputs: { selectFont: "selectFont" }, ngImport: i0, template: "<button\n mat-button\n [matMenuTriggerFor]=\"fontMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n <div class=\"font-menu\">\n <span>{{ font }}</span>\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu #fontMenu=\"matMenu\">\n <ng-container *ngFor=\"let font of fonts\">\n <button\n mat-menu-item\n [disabled]=\"isDisabled\"\n (click)=\"onSelectFont(font)\">\n {{ font }}\n </button>\n </ng-container>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}:host button{height:28px;margin:0 4px}.font-menu{display:flex;justify-content:space-between;align-items:center;min-width:130px}span{padding-left:10%}mat-icon{margin-right:5%}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13101
13267
  }
13102
13268
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FontComponent, decorators: [{
13103
13269
  type: Component,
@@ -13169,7 +13335,7 @@ class FontSizeComponent {
13169
13335
  }
13170
13336
  }
13171
13337
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FontSizeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13172
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: FontSizeComponent, selector: "app-font-size", inputs: { isDisabled: "isDisabled", fontSize: "fontSize" }, outputs: { selectFontSize: "selectFontSize" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: ["auto"], descendants: true }], ngImport: i0, template: "<button\n mat-button\n [disabled]=\"!fontSize || isDisabled\"\n (click)=\"onDecrementFontSize()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-remove\"></mat-icon>\n</button>\n<input\n type=\"text\"\n [formControl]=\"fontSizeControl\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"onSetFontSize()\"\n (blur)=\"resetFontSize()\" />\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n panelWidth=\"60\"\n disableRipple=\"false\"\n hideSingleSelectionIndicator=\"true\">\n <mat-option\n *ngFor=\"let fontSize of fontSizes\"\n [value]=\"fontSize\"\n (click)=\"onSelectFontSize(fontSize)\">\n {{ fontSize }}\n </mat-option>\n</mat-autocomplete>\n<button\n mat-button\n [disabled]=\"!fontSize || isDisabled\"\n (click)=\"onIncrementFontSize()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n</button>\n", styles: [":host{justify-content:center;align-items:center;display:flex}button{margin:4px}input{width:30px;height:25px;text-align:center;border-color:transparent;outline-color:#1b84e0}.mdc-button{min-width:28px;min-height:28px;width:28px;height:28px;padding:0}.mat-mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.mat-mdc-option{padding-left:6px;padding-right:6px;min-height:30px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13338
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: FontSizeComponent, selector: "app-font-size", inputs: { isDisabled: "isDisabled", fontSize: "fontSize" }, outputs: { selectFontSize: "selectFontSize" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: ["auto"], descendants: true }], ngImport: i0, template: "<button\n mat-button\n [disabled]=\"!fontSize || isDisabled\"\n (click)=\"onDecrementFontSize()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-remove\"></mat-icon>\n</button>\n<input\n type=\"text\"\n [formControl]=\"fontSizeControl\"\n [matAutocomplete]=\"auto\"\n (keyup.enter)=\"onSetFontSize()\"\n (blur)=\"resetFontSize()\" />\n<mat-autocomplete\n #auto=\"matAutocomplete\"\n panelWidth=\"60\"\n disableRipple=\"false\"\n hideSingleSelectionIndicator=\"true\">\n <mat-option\n *ngFor=\"let fontSize of fontSizes\"\n [value]=\"fontSize\"\n (click)=\"onSelectFontSize(fontSize)\">\n {{ fontSize }}\n </mat-option>\n</mat-autocomplete>\n<button\n mat-button\n [disabled]=\"!fontSize || isDisabled\"\n (click)=\"onIncrementFontSize()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n</button>\n", styles: [":host{justify-content:center;align-items:center;display:flex}button{margin:4px}input{width:30px;height:25px;text-align:center;border-color:transparent;outline-color:#1b84e0}.mdc-button{min-width:28px;min-height:28px;width:28px;height:28px;padding:0}.mat-mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.mat-mdc-option{padding-left:6px;padding-right:6px;min-height:30px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13173
13339
  }
13174
13340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: FontSizeComponent, decorators: [{
13175
13341
  type: Component,
@@ -13335,7 +13501,7 @@ class NumberingComponent {
13335
13501
  this.selectNumberingTemplate.emit(numberingTemplateType);
13336
13502
  }
13337
13503
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NumberingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13338
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: NumberingComponent, selector: "app-numbering", inputs: { isDisabled: "isDisabled", selectedNumberingType: "selectedNumberingType", selectedNumberingTemplate: "selectedNumberingTemplate" }, outputs: { selectNumberingTemplate: "selectNumberingTemplate", removeNumberings: "removeNumberings" }, ngImport: i0, template: "<mat-button-toggle-group\n name=\"format\"\n aria-label=\"format\"\n [disabled]=\"isDisabled\">\n <mat-button-toggle\n (click)=\"onToggleBulletedNumbering()\"\n [value]=\"numberingType.Bullet\"\n [checked]=\"selectedNumberingType === numberingType.Bullet\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n </mat-button-toggle>\n <button\n mat-button\n [matMenuTriggerFor]=\"listBulletedMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [disabled]=\"isDisabled\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList1)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList1\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList2)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList2\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList3)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList3\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList4)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList4\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList5)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList5\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList6)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList6\"></mat-icon>\n </div>\n </mat-menu>\n <mat-button-toggle\n (click)=\"onToggleNumberedNumbering()\"\n [value]=\"numberingType.Number\"\n [checked]=\"selectedNumberingType === numberingType.Number\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n </mat-button-toggle>\n <button\n mat-button\n [matMenuTriggerFor]=\"listNumberedMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [disabled]=\"isDisabled\"\n style=\"display: none\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList1)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList1\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList2)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList2\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList3)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList3\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList4)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList4\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList5)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList5\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList6)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList6\"></mat-icon>\n </div>\n </mat-menu>\n</mat-button-toggle-group>\n", styles: [":host{display:flex;align-items:center}mat-button-toggle-group,button{margin:0 3px}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:0}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:0}.mdc-button{min-width:28px;min-height:28px;padding:0}.mat-mdc-button>.mat-icon{margin-right:0}.mat-button-toggle-group{align-items:center}.mat-button-toggle-group .mdc-button{min-width:20px;height:28px;padding:0}.list-marker,.list-number{margin:0 5px}.list-marker mat-icon,.list-number mat-icon{width:70px;height:80px;margin:0 5px}.list-marker mat-icon:hover,.list-number mat-icon:hover{border:none!important}.list-icon .selected,.list-icon .selected:hover{border:2px solid #1b84e0}\n"], dependencies: [{ kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i1$3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13504
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: NumberingComponent, selector: "app-numbering", inputs: { isDisabled: "isDisabled", selectedNumberingType: "selectedNumberingType", selectedNumberingTemplate: "selectedNumberingTemplate" }, outputs: { selectNumberingTemplate: "selectNumberingTemplate", removeNumberings: "removeNumberings" }, ngImport: i0, template: "<mat-button-toggle-group\n name=\"format\"\n aria-label=\"format\"\n [disabled]=\"isDisabled\">\n <mat-button-toggle\n (click)=\"onToggleBulletedNumbering()\"\n [value]=\"numberingType.Bullet\"\n [checked]=\"selectedNumberingType === numberingType.Bullet\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n </mat-button-toggle>\n <button\n mat-button\n [matMenuTriggerFor]=\"listBulletedMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [disabled]=\"isDisabled\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList1)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList1\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList2)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList2\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList3)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList3\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList4)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList4\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList5)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList5\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.BulletList6)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList6\"></mat-icon>\n </div>\n </mat-menu>\n <mat-button-toggle\n (click)=\"onToggleNumberedNumbering()\"\n [value]=\"numberingType.Number\"\n [checked]=\"selectedNumberingType === numberingType.Number\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n </mat-button-toggle>\n <button\n mat-button\n [matMenuTriggerFor]=\"listNumberedMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [disabled]=\"isDisabled\"\n style=\"display: none\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList1)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList1\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList2)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList2\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList3)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList3\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList4)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList4\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList5)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList5\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateType.NumberList6)\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList6\"></mat-icon>\n </div>\n </mat-menu>\n</mat-button-toggle-group>\n", styles: [":host{display:flex;align-items:center}mat-button-toggle-group,button{margin:0 3px}.mat-button-toggle-group-appearance-standard .mat-button-toggle+.mat-button-toggle{border-left:0}.mat-button-toggle-standalone.mat-button-toggle-appearance-standard,.mat-button-toggle-group-appearance-standard{border:0}.mdc-button{min-width:28px;min-height:28px;padding:0}.mat-mdc-button>.mat-icon{margin-right:0}.mat-button-toggle-group{align-items:center}.mat-button-toggle-group .mdc-button{min-width:20px;height:28px;padding:0}.list-marker,.list-number{margin:0 5px}.list-marker mat-icon,.list-number mat-icon{width:70px;height:80px;margin:0 5px}.list-marker mat-icon:hover,.list-number mat-icon:hover{border:none!important}.list-icon .selected,.list-icon .selected:hover{border:2px solid #1b84e0}\n"], dependencies: [{ kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i1$3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13339
13505
  }
13340
13506
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: NumberingComponent, decorators: [{
13341
13507
  type: Component,
@@ -13498,7 +13664,7 @@ class HeadingComponent {
13498
13664
  console.log('select heading', heading);
13499
13665
  }
13500
13666
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: HeadingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13501
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: HeadingComponent, selector: "app-heading", ngImport: i0, template: "<button\n mat-button\n [matMenuTriggerFor]=\"headingMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n <div class=\"heading-menu\">\n <span>{{ selectedHeading }}</span>\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu #headingMenu=\"matMenu\">\n <ng-container *ngFor=\"let heading of headings\">\n <button\n mat-menu-item\n (click)=\"onSelectHeading(heading)\">\n {{ heading }}\n </button>\n </ng-container>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}.heading-menu{display:flex;justify-content:space-between;align-items:center;min-width:150px}span{padding-left:10%}mat-icon{margin-right:5%}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13667
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: HeadingComponent, selector: "app-heading", ngImport: i0, template: "<button\n mat-button\n [matMenuTriggerFor]=\"headingMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n <div class=\"heading-menu\">\n <span>{{ selectedHeading }}</span>\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu #headingMenu=\"matMenu\">\n <ng-container *ngFor=\"let heading of headings\">\n <button\n mat-menu-item\n (click)=\"onSelectHeading(heading)\">\n {{ heading }}\n </button>\n </ng-container>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}.heading-menu{display:flex;justify-content:space-between;align-items:center;min-width:150px}span{padding-left:10%}mat-icon{margin-right:5%}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$2.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i4$2.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i4$2.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13502
13668
  }
13503
13669
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: HeadingComponent, decorators: [{
13504
13670
  type: Component,
@@ -13560,7 +13726,7 @@ class ZoomComponent {
13560
13726
  trigger.panelOpen ? trigger.closePanel() : trigger.openPanel();
13561
13727
  }
13562
13728
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: ZoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
13563
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: ZoomComponent, selector: "app-zoom", viewQueries: [{ propertyName: "zoom", first: true, predicate: ["zoom"], descendants: true }], ngImport: i0, template: "<input\n [matAutocomplete]=\"auto\"\n [formControl]=\"myControl\"\n #trigger=\"matAutocompleteTrigger\"\n #zoom\n (focusout)=\"onSetPreviousValue()\"\n (keydown)=\"onKeyDown($event, trigger)\" />\n<button\n mat-button\n (click)=\"openPanel($event, trigger)\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n</button>\n<mat-autocomplete\n class=\"zoom-autocomplite\"\n #auto=\"matAutocomplete\"\n [panelWidth]=\"80\">\n <mat-option\n *ngFor=\"let zoomPercentage of zoomPercentages\"\n (click)=\"onSelectZoom(zoomPercentage)\">\n {{ zoomPercentage }}%\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{display:flex;align-items:center;width:90px}.zoom-menu{display:flex;justify-content:space-between;align-items:center;min-width:100px}span{padding-left:10%}.mdc-button{min-width:20px;height:25px;padding:0;margin-right:10px}mat-icon{width:20px;margin-right:5%}input{padding-left:10px;font-size:14px;width:60px;border-color:transparent;outline:none}::ng-deep .mdc-menu-surface.mat-mdc-autocomplete-panel{max-height:100%!important}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13729
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: ZoomComponent, selector: "app-zoom", viewQueries: [{ propertyName: "zoom", first: true, predicate: ["zoom"], descendants: true }], ngImport: i0, template: "<input\n [matAutocomplete]=\"auto\"\n [formControl]=\"myControl\"\n #trigger=\"matAutocompleteTrigger\"\n #zoom\n (focusout)=\"onSetPreviousValue()\"\n (keydown)=\"onKeyDown($event, trigger)\" />\n<button\n mat-button\n (click)=\"openPanel($event, trigger)\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n</button>\n<mat-autocomplete\n class=\"zoom-autocomplite\"\n #auto=\"matAutocomplete\"\n [panelWidth]=\"80\">\n <mat-option\n *ngFor=\"let zoomPercentage of zoomPercentages\"\n (click)=\"onSelectZoom(zoomPercentage)\">\n {{ zoomPercentage }}%\n </mat-option>\n</mat-autocomplete>\n", styles: [":host{display:flex;align-items:center;width:90px}.zoom-menu{display:flex;justify-content:space-between;align-items:center;min-width:100px}span{padding-left:10%}.mdc-button{min-width:20px;height:25px;padding:0;margin-right:10px}mat-icon{width:20px;margin-right:5%}input{padding-left:10px;font-size:14px;width:60px;border-color:transparent;outline:none}::ng-deep .mdc-menu-surface.mat-mdc-autocomplete-panel{max-height:100%!important}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "component", type: i3$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i4$3.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i3$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13564
13730
  }
13565
13731
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: ZoomComponent, decorators: [{
13566
13732
  type: Component,
@@ -13652,6 +13818,88 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
13652
13818
  }]
13653
13819
  }] });
13654
13820
 
13821
+ class RevisionHelper {
13822
+ static applyOperationsToRevision(revision, operations) {
13823
+ operations.sort((a, b) => a.createTime - b.createTime);
13824
+ const actions = operations.map(x => x.command);
13825
+ OperationsHelper.applyOperations(revision.content, actions);
13826
+ }
13827
+ static fillTablesDefaultStyles(tables) {
13828
+ for (const table of tables) {
13829
+ for (const row of table.rows) {
13830
+ for (const cell of row.cells) {
13831
+ this.fillDefaultStyles(cell);
13832
+ }
13833
+ }
13834
+ }
13835
+ }
13836
+ static fillEdgesDefaultStyles(headers, footers) {
13837
+ for (const header of headers) {
13838
+ this.fillDefaultStyles(header);
13839
+ }
13840
+ for (const footer of footers) {
13841
+ this.fillDefaultStyles(footer);
13842
+ }
13843
+ }
13844
+ static fillDefaultStyles(contents) {
13845
+ for (const format of contents.formats) {
13846
+ format.textStyle = FormatStyleHelper.combineTextStyles(format.textStyle, DEFAULT_TEXT_STYLE);
13847
+ }
13848
+ for (const paragraph of contents.paragraphs) {
13849
+ paragraph.paragraphStyle = this.fillParagraphStyleModel(paragraph.paragraphStyle);
13850
+ }
13851
+ }
13852
+ static fillParagraphStyleModel(paragraphStyle) {
13853
+ return new ParagraphStyleModel({
13854
+ alignment: paragraphStyle.alignment ?? DEFAULT_PARAGRAPH_STYLE.alignment,
13855
+ backgroundColor: paragraphStyle.backgroundColor ?? DEFAULT_PARAGRAPH_STYLE.backgroundColor,
13856
+ headingStyleId: paragraphStyle.headingStyleId,
13857
+ indentFirstLine: paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
13858
+ indentHanging: paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging,
13859
+ indentLeft: paragraphStyle.indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft,
13860
+ indentRight: paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight,
13861
+ lineSpacing: paragraphStyle.lineSpacing ?? DEFAULT_PARAGRAPH_STYLE.lineSpacing,
13862
+ spaceAfter: paragraphStyle.spaceAfter ?? DEFAULT_PARAGRAPH_STYLE.spaceAfter,
13863
+ spaceBefore: paragraphStyle.spaceBefore ?? DEFAULT_PARAGRAPH_STYLE.spaceBefore,
13864
+ contextualSpacing: paragraphStyle.contextualSpacing ?? DEFAULT_PARAGRAPH_STYLE.contextualSpacing,
13865
+ beforeAutospacing: paragraphStyle.beforeAutospacing ?? DEFAULT_PARAGRAPH_STYLE.beforeAutospacing,
13866
+ afterAutospacing: paragraphStyle.afterAutospacing ?? DEFAULT_PARAGRAPH_STYLE.afterAutospacing,
13867
+ numberingId: paragraphStyle.numberingId ?? DEFAULT_PARAGRAPH_STYLE.numberingId,
13868
+ numberingLevel: paragraphStyle.numberingLevel ?? DEFAULT_PARAGRAPH_STYLE.numberingLevel
13869
+ });
13870
+ }
13871
+ static getEmptyDocxModel() {
13872
+ const pageMargin = new MarginModel();
13873
+ return new DocxModel({
13874
+ content: '',
13875
+ contentLength: 0,
13876
+ headings: DEFAULT_HEADINGS,
13877
+ pageHeight: DocumentInfo.height,
13878
+ pageWidth: DocumentInfo.width,
13879
+ paragraphs: [
13880
+ new ParagraphModel({
13881
+ insertIndex: 0,
13882
+ paragraphStyle: DEFAULT_PARAGRAPH_STYLE
13883
+ })
13884
+ ],
13885
+ breaks: [],
13886
+ elements: [],
13887
+ formats: [new FormatModel({ startIndex: 0, endIndex: 0, textStyle: DEFAULT_TEXT_STYLE })],
13888
+ images: [],
13889
+ links: [],
13890
+ marginBottom: pageMargin.bottom,
13891
+ marginFooter: pageMargin.footer,
13892
+ marginHeader: pageMargin.header,
13893
+ marginLeft: pageMargin.left,
13894
+ marginRight: pageMargin.right,
13895
+ marginTop: pageMargin.top,
13896
+ tables: [],
13897
+ numberings: [],
13898
+ tabs: []
13899
+ });
13900
+ }
13901
+ }
13902
+
13655
13903
  class ConfirmDialogComponent {
13656
13904
  constructor(data, ref) {
13657
13905
  this.data = data;
@@ -13671,13 +13919,62 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImpor
13671
13919
  args: [MAT_DIALOG_DATA]
13672
13920
  }] }, { type: i1$4.MatDialogRef }] });
13673
13921
 
13674
- class DocumentModel {
13922
+ const URL_PATTERN = /^(https?:\/\/)?(www\.)?[-a-zA-Z0-9áéíóúÁÉÍÓÚüÜñÑ@:%._+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9áéíóúÁÉÍÓÚüÜñÑ@:%_+.~#?&/=]*)$/;
13923
+ class ValidationHelper {
13924
+ static urlValidator(control) {
13925
+ return control.value && !URL_PATTERN.test(control.value) ? { invalidUrl: true } : null;
13926
+ }
13927
+ }
13928
+
13929
+ class AddLinkDialogOptions {
13675
13930
  constructor(fields) {
13676
13931
  if (fields) {
13677
13932
  Object.assign(this, fields);
13678
13933
  }
13679
13934
  }
13680
13935
  }
13936
+ class AddLinkDialogComponent {
13937
+ constructor(dialogRef, data, fb) {
13938
+ this.dialogRef = dialogRef;
13939
+ this.data = data;
13940
+ this.fb = fb;
13941
+ dialogRef.disableClose = true;
13942
+ this.form = this.fb.group({
13943
+ text: [data.text, Validators.required],
13944
+ link: [data.link, [Validators.required, ValidationHelper.urlValidator]]
13945
+ });
13946
+ }
13947
+ onClose() {
13948
+ this.dialogRef.close();
13949
+ }
13950
+ onApply() {
13951
+ this.dialogRef.close({ text: this.form.controls.text.value, link: this.form.controls.link.value });
13952
+ }
13953
+ onEnter() {
13954
+ if (this.form.invalid) {
13955
+ return;
13956
+ }
13957
+ this.onApply();
13958
+ }
13959
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: AddLinkDialogComponent, deps: [{ token: i1$4.MatDialogRef }, { token: MAT_DIALOG_DATA }, { token: i2$3.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
13960
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.1", type: AddLinkDialogComponent, isStandalone: true, selector: "app-add-link-dialog", ngImport: i0, template: "<div mat-dialog-title>{{ data.title }}</div>\n<div\n mat-dialog-content\n [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ data.textPlaceholder }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.text\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>The {{ data.textPlaceholder }} is required.</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ data.linkPlaceholder }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.link\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>The {{ data.linkPlaceholder }} is required.</mat-error>\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n Cancel\n </button>\n <button\n mat-raised-button\n color=\"primary\"\n class=\"apply-btn\"\n [disabled]=\"form.invalid\"\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-done-thin\"></mat-icon>\n Apply\n </button>\n</div>\n", styles: [":host{height:300px;width:430px;display:block;overflow:hidden}:host ::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: 12px;height:48px}:host ::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:12px}.mat-mdc-dialog-title{font-weight:600;padding-top:5px}mat-form-field{width:100%}.mat-mdc-dialog-content{padding-top:10px;padding-bottom:0}.mat-mdc-dialog-actions{display:flex;justify-content:center;align-items:center;padding-top:5px;height:25%}.mat-mdc-dialog-actions button{width:30%;height:100%;letter-spacing:1px;border-radius:8px}.mat-mdc-dialog-actions button .apply-btn{font-weight:400}.mat-mdc-dialog-actions button .mat-icon{font-size:24px;height:24px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2$1.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i1$4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i4$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i4$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13961
+ }
13962
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.1", ngImport: i0, type: AddLinkDialogComponent, decorators: [{
13963
+ type: Component,
13964
+ args: [{ standalone: true, imports: [
13965
+ CommonModule,
13966
+ MatButtonModule,
13967
+ MatDialogModule,
13968
+ MatFormFieldModule,
13969
+ MatIconModule,
13970
+ MatInputModule,
13971
+ ReactiveFormsModule,
13972
+ TranslateModule
13973
+ ], selector: 'app-add-link-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div mat-dialog-title>{{ data.title }}</div>\n<div\n mat-dialog-content\n [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ data.textPlaceholder }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.text\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>The {{ data.textPlaceholder }} is required.</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ data.linkPlaceholder }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.link\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>The {{ data.linkPlaceholder }} is required.</mat-error>\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n Cancel\n </button>\n <button\n mat-raised-button\n color=\"primary\"\n class=\"apply-btn\"\n [disabled]=\"form.invalid\"\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"nc-icon\"\n fontIcon=\"icon-done-thin\"></mat-icon>\n Apply\n </button>\n</div>\n", styles: [":host{height:300px;width:430px;display:block;overflow:hidden}:host ::ng-deep .mdc-text-field--outlined{--mdc-outlined-text-field-container-shape: 12px;height:48px}:host ::ng-deep .mat-mdc-text-field-wrapper.mdc-text-field--outlined .mat-mdc-form-field-infix{padding-top:12px}.mat-mdc-dialog-title{font-weight:600;padding-top:5px}mat-form-field{width:100%}.mat-mdc-dialog-content{padding-top:10px;padding-bottom:0}.mat-mdc-dialog-actions{display:flex;justify-content:center;align-items:center;padding-top:5px;height:25%}.mat-mdc-dialog-actions button{width:30%;height:100%;letter-spacing:1px;border-radius:8px}.mat-mdc-dialog-actions button .apply-btn{font-weight:400}.mat-mdc-dialog-actions button .mat-icon{font-size:24px;height:24px}\n"] }]
13974
+ }], ctorParameters: () => [{ type: i1$4.MatDialogRef }, { type: AddLinkDialogOptions, decorators: [{
13975
+ type: Inject,
13976
+ args: [MAT_DIALOG_DATA]
13977
+ }] }, { type: i2$3.FormBuilder }] });
13681
13978
 
13682
13979
  class DocumentNameModel {
13683
13980
  constructor(fields) {
@@ -13687,6 +13984,14 @@ class DocumentNameModel {
13687
13984
  }
13688
13985
  }
13689
13986
 
13987
+ class DocumentModel {
13988
+ constructor(fields) {
13989
+ if (fields) {
13990
+ Object.assign(this, fields);
13991
+ }
13992
+ }
13993
+ }
13994
+
13690
13995
  class FileSourceModel {
13691
13996
  constructor(fields) {
13692
13997
  if (fields) {
@@ -13732,5 +14037,5 @@ class OperationModel {
13732
14037
  * Generated bundle index. Do not edit.
13733
14038
  */
13734
14039
 
13735
- export { Alignment, BaseNoderComponent, BreakTypes, CommandModel, CommandType, ConfirmDialogComponent, DEFAULT_BACKGROUND_COLOR, DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER, DEFAULT_FILE_NAME, DEFAULT_FONT_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_HEADINGS, DEFAULT_HEADING_STYLE_ID, DEFAULT_PARAGRAPH_STYLE, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE, DefaultPageSize, DocumentInfo, DocumentModel, DocumentNameModel, DocxModel, DomHelper, EditorComponent, EditorHeaderComponent, EditorModule, EditorSearchDialogComponent, EditorService, EditorToolbarComponent, EditorToolbarModule, ElementDataModel, ElementModel, ExternalElementModel, ExternalElementService, FileSourceModel, FormatStyleHelper, HYPERLINK_FONT_COLOR, HYPERLINK_HEADING_STYLE_ID, ImageApiService, ImageDataModel, LastDocumentRevisionModel, Mode, NEW_LINE_MARKUP, NoderExternalComponent, NumberingLevelModel, OpenDocx, OperationModel, OperationsHistoryInfoModel, PageType, PaginatorSizes, ParagraphStyleModel, RevisionModel, SetDocx, TextStyleModel };
14040
+ export { AddLinkDialogComponent, AddLinkDialogOptions, Alignment, BaseNoderComponent, BreakTypes, CommandModel, CommandType, CommandsService, ConfirmDialogComponent, DEFAULT_BACKGROUND_COLOR, DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER, DEFAULT_FILE_NAME, DEFAULT_FONT_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_HEADINGS, DEFAULT_HEADING_STYLE_ID, DEFAULT_PARAGRAPH_STYLE, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE, DefaultPageSize, DocumentInfo, DocumentModel, DocumentNameModel, DocxModel, DomHelper, EditorComponent, EditorHeaderComponent, EditorModule, EditorSearchDialogComponent, EditorService, EditorToolbarComponent, EditorToolbarModule, ElementDataModel, ElementModel, ExternalElementModel, ExternalElementService, FileSourceModel, FormatStyleHelper, HYPERLINK_FONT_COLOR, HYPERLINK_HEADING_STYLE_ID, ImageApiService, ImageDataModel, LastDocumentRevisionModel, Mode, NEW_LINE_MARKUP, NoderExternalComponent, NumberingLevelModel, OpenDocx, OperationModel, OperationsHistoryInfoModel, PageType, PaginatorSizes, ParagraphStyleModel, RevisionHelper, RevisionModel, SetDocx, TextStyleModel };
13736
14041
  //# sourceMappingURL=talrace-ngx-noder.mjs.map