@talrace/ngx-noder 19.0.36 → 19.0.38

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 (51) hide show
  1. package/assets/i18n/noder.en.json +7 -2
  2. package/assets/i18n/noder.es.json +7 -2
  3. package/assets/i18n/noder.ru.json +7 -2
  4. package/fesm2022/talrace-ngx-noder.mjs +932 -1363
  5. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  6. package/lib/apart-components/editor-toolbar/components/base-toolbar.component.d.ts +4 -1
  7. package/lib/apart-components/editor-toolbar/components/buttons/spacing/spacing.component.d.ts +16 -0
  8. package/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.d.ts +3 -0
  9. package/lib/apart-components/editor-toolbar/editor-toolbar.module.d.ts +24 -23
  10. package/lib/editor/components/external-element/external.component.d.ts +2 -0
  11. package/lib/editor/components/shared/services/custom-content.service.d.ts +1 -8
  12. package/lib/editor/content/constants/display-values.const.d.ts +6 -2
  13. package/lib/editor/content/display-data/display-data.d.ts +10 -29
  14. package/lib/editor/content/display-data/display-token.model.d.ts +8 -17
  15. package/lib/editor/content/display-data/general-properties.model.d.ts +3 -2
  16. package/lib/editor/content/display-data/indent.model.d.ts +2 -1
  17. package/lib/editor/content/display-data/line-info.model.d.ts +3 -3
  18. package/lib/editor/content/display-data/paragraph-info.interface.d.ts +1 -1
  19. package/lib/editor/content/display-data/text-line-info.d.ts +1 -14
  20. package/lib/editor/content/display-data/toolbar-styles.interface.d.ts +1 -0
  21. package/lib/editor/content/helpers/display-token.helper.d.ts +9 -3
  22. package/lib/editor/content/helpers/line-info.helper.d.ts +10 -0
  23. package/lib/editor/display/layers/text.layer.d.ts +2 -4
  24. package/lib/editor/display/rendering.helper.d.ts +4 -13
  25. package/lib/editor/editor.module.d.ts +3 -1
  26. package/lib/editor/execution/editor.d.ts +9 -1
  27. package/lib/editor/execution/regulator.service.d.ts +5 -0
  28. package/lib/editor/{components → gadgets/comment}/comment-popup/comment-popup.component.d.ts +6 -4
  29. package/lib/editor/gadgets/comment/comment-popup/comment-type.model.d.ts +6 -0
  30. package/lib/editor/gadgets/comment/comment-types.const.d.ts +3 -0
  31. package/lib/editor/gadgets/font-metrics/font-metric-size.interface.d.ts +0 -4
  32. package/lib/editor/gadgets/numbering/numbering.helper.d.ts +16 -7
  33. package/lib/editor/gadgets/page-break/break.helper.d.ts +1 -2
  34. package/lib/editor/interaction/editor.service.d.ts +29 -4
  35. package/lib/editor/positioning/cursor-position.interface.d.ts +3 -7
  36. package/lib/editor/positioning/position.helper.d.ts +0 -3
  37. package/package.json +1 -1
  38. package/public-api.d.ts +1 -0
  39. package/src/_ngx-noder.theme.scss +1 -1
  40. package/src/assets/fonts/nc-iconfont.eot +0 -0
  41. package/src/assets/fonts/nc-iconfont.scss +24 -12
  42. package/src/assets/fonts/nc-iconfont.svg +5 -1
  43. package/src/assets/fonts/nc-iconfont.ttf +0 -0
  44. package/src/assets/fonts/nc-iconfont.woff +0 -0
  45. package/src/lib/apart-components/editor-toolbar/_theme.scss +2 -0
  46. package/src/lib/apart-components/editor-toolbar/components/buttons/spacing/_spacing.theme.scss +24 -0
  47. package/lib/editor/components/tab/tab.helper.d.ts +0 -4
  48. package/lib/editor/content/display-data/format-ext.model.d.ts +0 -5
  49. package/lib/editor/display/print/print.rendering.helper.d.ts +0 -6
  50. package/lib/editor/positioning/line-width.helper.d.ts +0 -5
  51. /package/src/lib/editor/{components → gadgets/comment}/comment-popup/_theme.scss +0 -0
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, Injectable, signal, inject, ChangeDetectorRef, HostBinding, Input, Component, ChangeDetectionStrategy, ViewChild, InjectionToken, createComponent, EventEmitter, Output, HostListener, ApplicationRef, Injector, Inject, input, computed, effect, NgModule } from '@angular/core';
2
+ import { Directive, Injectable, signal, inject, ChangeDetectorRef, HostBinding, Input, InjectionToken, Component, ChangeDetectionStrategy, Inject, ViewChild, createComponent, EventEmitter, Output, HostListener, ApplicationRef, Injector, input, computed, effect, NgModule, output } from '@angular/core';
3
3
  import { Subject, BehaviorSubject, distinctUntilChanged, debounceTime, filter, fromEvent, take, throttleTime, startWith, takeUntil, tap, map, catchError } from 'rxjs';
4
4
  import * as i1$2 from '@angular/common/http';
5
5
  import { HttpHeaders } from '@angular/common/http';
@@ -10,26 +10,26 @@ import * as i4 from '@angular/material/button';
10
10
  import { MatButtonModule } from '@angular/material/button';
11
11
  import * as i5 from '@angular/material/icon';
12
12
  import { MatIconModule } from '@angular/material/icon';
13
- import * as i3 from '@ngx-translate/core';
13
+ import * as i5$1 from '@angular/material/tooltip';
14
+ import { MatTooltipModule } from '@angular/material/tooltip';
15
+ import * as i6 from '@ngx-translate/core';
14
16
  import { TranslateModule } from '@ngx-translate/core';
15
- import * as i3$1 from '@angular/common';
17
+ import * as i3 from '@angular/common';
16
18
  import { CommonModule, AsyncPipe } from '@angular/common';
17
19
  import * as i2 from '@angular/forms';
18
20
  import { FormControl, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
19
- import * as i6 from '@angular/material/input';
21
+ import * as i6$1 from '@angular/material/input';
20
22
  import { MatInputModule } from '@angular/material/input';
21
- import * as i5$2 from '@angular/material/tooltip';
22
- import { MatTooltipModule } from '@angular/material/tooltip';
23
23
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
24
- import * as i5$1 from '@angular/material/form-field';
24
+ import * as i5$2 from '@angular/material/form-field';
25
25
  import { MatFormFieldModule } from '@angular/material/form-field';
26
- import * as i6$1 from '@angular/cdk/clipboard';
26
+ import * as i6$2 from '@angular/cdk/clipboard';
27
27
  import * as i1$1 from '@angular/material/dialog';
28
28
  import { MAT_DIALOG_DATA, MatDialogModule, MatDialog } from '@angular/material/dialog';
29
29
  import { marker } from '@biesbjerg/ngx-translate-extract-marker';
30
30
  import * as i7 from '@angular/material/select';
31
31
  import { MatSelectModule } from '@angular/material/select';
32
- import * as i3$2 from '@angular/material/core';
32
+ import * as i3$1 from '@angular/material/core';
33
33
  import * as i10 from '@angular/material/sidenav';
34
34
  import { MatSidenavModule } from '@angular/material/sidenav';
35
35
  import * as i4$1 from '@angular/material/menu';
@@ -45,7 +45,7 @@ import * as i2$3 from '@angular/material/divider';
45
45
  import { MatDividerModule } from '@angular/material/divider';
46
46
  import * as i5$3 from 'ngx-colors';
47
47
  import { NgxColorsModule } from 'ngx-colors';
48
- import * as i3$3 from '@angular/material/button-toggle';
48
+ import * as i3$2 from '@angular/material/button-toggle';
49
49
  import { MatButtonToggleModule } from '@angular/material/button-toggle';
50
50
  import * as i10$1 from '@angular/material/checkbox';
51
51
  import { MatCheckboxModule } from '@angular/material/checkbox';
@@ -530,11 +530,7 @@ class FontMetrics {
530
530
  return {
531
531
  width: textMetrics.width,
532
532
  height: textMetrics.fontBoundingBoxAscent + textMetrics.fontBoundingBoxDescent,
533
- baseline: fontBaseLine.baseline,
534
- content: fontBaseLine.content,
535
533
  font: fontBaseLine.font,
536
- line: fontBaseLine.line,
537
- multiplier: fontBaseLine.multiplier,
538
534
  ascent: textMetrics.fontBoundingBoxAscent,
539
535
  descent: textMetrics.fontBoundingBoxDescent
540
536
  };
@@ -678,6 +674,9 @@ class EditorService {
678
674
  this._updateTableBorderStyle$ = new Subject();
679
675
  this._updateTableBorderWidth$ = new Subject();
680
676
  this._updateTableBorders$ = new Subject();
677
+ this._selectSpacing$ = new Subject();
678
+ this._selectBefore$ = new Subject();
679
+ this._selectAfter$ = new Subject();
681
680
  this._isTableSelected$ = new BehaviorSubject(false);
682
681
  this._redo$ = new Subject();
683
682
  this._undo$ = new Subject();
@@ -717,6 +716,8 @@ class EditorService {
717
716
  this._removeComment$ = new Subject();
718
717
  this._setCommentSelected$ = new Subject();
719
718
  this._setCommentsVisibility$ = new Subject();
719
+ this._getCommentText$ = new Subject();
720
+ this._replaceCommentText$ = new Subject();
720
721
  }
721
722
  set styles(value) {
722
723
  this._styles$.next({ ...value });
@@ -877,6 +878,15 @@ class EditorService {
877
878
  get updateTableBorders$() {
878
879
  return this._updateTableBorders$.asObservable();
879
880
  }
881
+ get selectSpacing$() {
882
+ return this._selectSpacing$.asObservable();
883
+ }
884
+ get selectBefore$() {
885
+ return this._selectBefore$.asObservable();
886
+ }
887
+ get selectAfter$() {
888
+ return this._selectAfter$.asObservable();
889
+ }
880
890
  get isTableSelected() {
881
891
  return this._isTableSelected$.value;
882
892
  }
@@ -1001,6 +1011,12 @@ class EditorService {
1001
1011
  get setCommentsVisibility$() {
1002
1012
  return this._setCommentsVisibility$.asObservable();
1003
1013
  }
1014
+ get getCommentText$() {
1015
+ return this._getCommentText$.asObservable();
1016
+ }
1017
+ get replaceCommentText$() {
1018
+ return this._replaceCommentText$.asObservable();
1019
+ }
1004
1020
  tabSettings(value) {
1005
1021
  this._tabSettings$.next(value);
1006
1022
  }
@@ -1158,6 +1174,15 @@ class EditorService {
1158
1174
  updateTableBorders(borders) {
1159
1175
  this._updateTableBorders$.next(borders);
1160
1176
  }
1177
+ selectSpacing(value) {
1178
+ this._selectSpacing$.next(value);
1179
+ }
1180
+ selectBefore(value) {
1181
+ this._selectBefore$.next(value);
1182
+ }
1183
+ selectAfter(value) {
1184
+ this._selectAfter$.next(value);
1185
+ }
1161
1186
  setIsTableSelected(value) {
1162
1187
  if (this.isTableSelected === value) {
1163
1188
  return;
@@ -1248,14 +1273,14 @@ class EditorService {
1248
1273
  ignoreGrammarSuggestion(error) {
1249
1274
  this._ignoreGrammarError$.next(error);
1250
1275
  }
1251
- addCommentAtSelection() {
1252
- this._addCommentAtSelection$.next();
1276
+ addCommentAtSelection(commentType) {
1277
+ this._addCommentAtSelection$.next(commentType);
1253
1278
  }
1254
1279
  commentSizeChanged() {
1255
1280
  this._commentSizeChanged$.next();
1256
1281
  }
1257
- createComment(reqId) {
1258
- this._createComment$.next(reqId);
1282
+ createComment(reqId, commentType) {
1283
+ this._createComment$.next({ reqId, commentType });
1259
1284
  }
1260
1285
  commentCreated(commentId, reqId) {
1261
1286
  this._commentCreated$.next({ commentId, reqId });
@@ -1269,6 +1294,12 @@ class EditorService {
1269
1294
  setCommentsVisibility(value) {
1270
1295
  this._setCommentsVisibility$.next(value);
1271
1296
  }
1297
+ getCommentText(commentId, continueWith) {
1298
+ this._getCommentText$.next({ commentId, continueWith });
1299
+ }
1300
+ replaceCommentText(commentId, content) {
1301
+ this._replaceCommentText$.next({ commentId, newContent: content });
1302
+ }
1272
1303
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
1273
1304
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorService }); }
1274
1305
  }
@@ -1347,6 +1378,10 @@ class ExternalComponent extends BaseNoderComponent {
1347
1378
  constructor() {
1348
1379
  super(...arguments);
1349
1380
  this.focusSidenav = true;
1381
+ this.isText = false;
1382
+ }
1383
+ getText() {
1384
+ return '';
1350
1385
  }
1351
1386
  skipSidenav() {
1352
1387
  return this.editorService.isViewOnly;
@@ -1443,6 +1478,14 @@ class BaseCommentComponent {
1443
1478
  }
1444
1479
  }
1445
1480
 
1481
+ class CommentTypeModel {
1482
+ constructor(typeId, nameTranslated, icon) {
1483
+ this.typeId = typeId;
1484
+ this.nameTranslated = nameTranslated;
1485
+ this.icon = icon;
1486
+ }
1487
+ }
1488
+
1446
1489
  class GrammarService {
1447
1490
  constructor() {
1448
1491
  this.debounceTime = 3000;
@@ -1703,11 +1746,11 @@ const CUSTOM_ELEMENT_MARKER = '*';
1703
1746
  const TABLE_MARKER = '#';
1704
1747
 
1705
1748
  class BreakHelper {
1706
- static getBreakType(model, char, insertIndex) {
1749
+ static getBreakType(breaks, char, insertIndex) {
1707
1750
  if (char !== CUSTOM_ELEMENT_MARKER) {
1708
1751
  return null;
1709
1752
  }
1710
- return model.breaks.find(x => x.insertIndex === insertIndex)?.breakType ?? null;
1753
+ return breaks.find(x => x.insertIndex === insertIndex)?.breakType ?? null;
1711
1754
  }
1712
1755
  static removeBreakMarker(breaks, text, fragmentStartIndex) {
1713
1756
  const index = text.at(-1) === NEW_LINE_MARKUP ? -2 : -1;
@@ -1718,6 +1761,8 @@ class BreakHelper {
1718
1761
  }
1719
1762
  }
1720
1763
 
1764
+ const COMMENT_TYPES = new InjectionToken('COMMENT_TYPES');
1765
+
1721
1766
  class OverlayService {
1722
1767
  constructor(overlay) {
1723
1768
  this.overlay = overlay;
@@ -1778,21 +1823,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
1778
1823
  }], ctorParameters: () => [{ type: i1.Overlay }] });
1779
1824
 
1780
1825
  class CommentPopupComponent {
1781
- constructor(editorService, overlayService) {
1826
+ constructor(editorService, overlayService, commentTypes) {
1782
1827
  this.editorService = editorService;
1783
1828
  this.overlayService = overlayService;
1829
+ this.commentTypes = commentTypes;
1784
1830
  }
1785
- addComment() {
1786
- this.editorService.addCommentAtSelection();
1831
+ addComment(type) {
1832
+ this.editorService.addCommentAtSelection(type);
1787
1833
  this.overlayService.close();
1788
1834
  }
1789
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CommentPopupComponent, deps: [{ token: EditorService }, { token: OverlayService }], target: i0.ɵɵFactoryTarget.Component }); }
1790
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: CommentPopupComponent, isStandalone: false, selector: "app-nod-comment-popup", ngImport: i0, template: "<button\n mat-stroked-button\n (click)=\"addComment()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-comment\"></mat-icon>\n</button>\n", styles: [":host{min-height:30px;border-radius:8px}button{min-width:0}.mat-icon{display:flex;justify-content:center;align-items:center;margin:0}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1835
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CommentPopupComponent, deps: [{ token: EditorService }, { token: OverlayService }, { token: COMMENT_TYPES }], target: i0.ɵɵFactoryTarget.Component }); }
1836
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: CommentPopupComponent, isStandalone: false, selector: "app-nod-comment-popup", ngImport: i0, template: "@for (type of commentTypes; track type.typeId) {\n <button\n mat-stroked-button\n [matTooltip]=\"type.nameTranslated | translate\"\n (click)=\"addComment(type)\">\n <mat-icon\n fontSet=\"noder-icon\"\n [fontIcon]=\"type.icon\"></mat-icon>\n </button>\n}\n", styles: [":host{min-height:30px;border-radius:8px;display:flex;flex-direction:column}button{min-width:0;border-radius:0;border-style:none}button:not(:last-child){border-bottom-style:solid;border-bottom-width:1px}button:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}button:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.mat-icon{display:flex;justify-content:center;align-items:center;margin:0}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
1791
1837
  }
1792
1838
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: CommentPopupComponent, decorators: [{
1793
1839
  type: Component,
1794
- args: [{ selector: 'app-nod-comment-popup', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<button\n mat-stroked-button\n (click)=\"addComment()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-comment\"></mat-icon>\n</button>\n", styles: [":host{min-height:30px;border-radius:8px}button{min-width:0}.mat-icon{display:flex;justify-content:center;align-items:center;margin:0}\n"] }]
1795
- }], ctorParameters: () => [{ type: EditorService }, { type: OverlayService }] });
1840
+ args: [{ selector: 'app-nod-comment-popup', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "@for (type of commentTypes; track type.typeId) {\n <button\n mat-stroked-button\n [matTooltip]=\"type.nameTranslated | translate\"\n (click)=\"addComment(type)\">\n <mat-icon\n fontSet=\"noder-icon\"\n [fontIcon]=\"type.icon\"></mat-icon>\n </button>\n}\n", styles: [":host{min-height:30px;border-radius:8px;display:flex;flex-direction:column}button{min-width:0;border-radius:0;border-style:none}button:not(:last-child){border-bottom-style:solid;border-bottom-width:1px}button:last-child{border-bottom-left-radius:8px;border-bottom-right-radius:8px}button:first-child{border-top-left-radius:8px;border-top-right-radius:8px}.mat-icon{display:flex;justify-content:center;align-items:center;margin:0}\n"] }]
1841
+ }], ctorParameters: () => [{ type: EditorService }, { type: OverlayService }, { type: undefined, decorators: [{
1842
+ type: Inject,
1843
+ args: [COMMENT_TYPES]
1844
+ }] }] });
1796
1845
 
1797
1846
  class CursorParagraph {
1798
1847
  constructor(row, column) {
@@ -2009,7 +2058,7 @@ class GrammarPopupComponent {
2009
2058
  this.overlayService.close();
2010
2059
  }
2011
2060
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GrammarPopupComponent, deps: [{ token: EditorService }, { token: OverlayService }], target: i0.ɵɵFactoryTarget.Component }); }
2012
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: GrammarPopupComponent, isStandalone: true, selector: "app-nod-grammar-popup", inputs: { error: "error", paragraphIndex: "paragraphIndex" }, host: { properties: { "style.height": "this.hostHeight" } }, ngImport: i0, template: "<span\n class=\"ignore\"\n (click)=\"onIgnoreClick()\">\n {{ 'NODER.LABEL.IGNORE' | translate }}\n</span>\n<span class=\"message\">{{ error.message }}</span>\n<div class=\"options\">\n @for (suggestion of error.replacements; track i; let i = $index) {\n <span\n class=\"suggestion\"\n (click)=\"onSuggestionClick(i)\">\n {{ suggestion }}\n </span>\n }\n</div>\n", styles: [":host{border-radius:8px;display:flex;flex-direction:column;padding:8px;max-width:500px;gap:5px;box-shadow:0 8px 20px #00000026,0 4px 10px #0000001a}.message{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;font-style:italic;font-size:14px;padding:0 10px;border-bottom-width:1px;border-bottom-style:solid}.options{display:flex;justify-content:center;flex-wrap:wrap;gap:5px;padding:5px 0}.suggestion{font-weight:600;cursor:pointer;text-decoration:underline;padding:3px 8px}.ignore{border-radius:4px;margin-left:auto;font-weight:600;cursor:pointer;transition:all .3s ease;padding:3px 8px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2061
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: GrammarPopupComponent, isStandalone: true, selector: "app-nod-grammar-popup", inputs: { error: "error", paragraphIndex: "paragraphIndex" }, host: { properties: { "style.height": "this.hostHeight" } }, ngImport: i0, template: "<span\n class=\"ignore\"\n (click)=\"onIgnoreClick()\">\n {{ 'NODER.LABEL.IGNORE' | translate }}\n</span>\n<span class=\"message\">{{ error.message }}</span>\n<div class=\"options\">\n @for (suggestion of error.replacements; track i; let i = $index) {\n <span\n class=\"suggestion\"\n (click)=\"onSuggestionClick(i)\">\n {{ suggestion }}\n </span>\n }\n</div>\n", styles: [":host{border-radius:8px;display:flex;flex-direction:column;padding:8px;max-width:500px;gap:5px;box-shadow:0 8px 20px #00000026,0 4px 10px #0000001a}.message{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;font-style:italic;font-size:14px;padding:0 10px;border-bottom-width:1px;border-bottom-style:solid}.options{display:flex;justify-content:center;flex-wrap:wrap;gap:5px;padding:5px 0}.suggestion{font-weight:600;cursor:pointer;text-decoration:underline;padding:3px 8px}.ignore{border-radius:4px;margin-left:auto;font-weight:600;cursor:pointer;transition:all .3s ease;padding:3px 8px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2013
2062
  }
2014
2063
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: GrammarPopupComponent, decorators: [{
2015
2064
  type: Component,
@@ -2905,7 +2954,7 @@ class RangeElementHelper {
2905
2954
  element.endIndex -= length;
2906
2955
  }
2907
2956
  else {
2908
- element.endIndex = startIndex;
2957
+ element.endIndex = startIndex - 1;
2909
2958
  }
2910
2959
  continue;
2911
2960
  }
@@ -2914,7 +2963,8 @@ class RangeElementHelper {
2914
2963
  elements.splice(i, 1);
2915
2964
  continue;
2916
2965
  }
2917
- element.startIndex = endIndex;
2966
+ element.startIndex -= element.startIndex - startIndex;
2967
+ element.endIndex -= endIndex - element.startIndex;
2918
2968
  continue;
2919
2969
  }
2920
2970
  element.startIndex -= length;
@@ -5950,24 +6000,191 @@ class PageHelper {
5950
6000
  }
5951
6001
  }
5952
6002
 
5953
- const DisplayValue = {
5954
- char: 1,
5955
- customContent: 3,
5956
- punctuation: 9,
5957
- space: 10,
5958
- trailingSpace: 11,
5959
- emptyLine: 13
5960
- };
6003
+ class NumberingDataModel {
6004
+ constructor(fields) {
6005
+ if (!fields) {
6006
+ return;
6007
+ }
6008
+ Object.assign(this, fields);
6009
+ }
6010
+ }
6011
+
6012
+ class NumberingParagraphStyleModel extends ParagraphStyleModel {
6013
+ constructor(fields) {
6014
+ super();
6015
+ this.numberingType = null;
6016
+ this.numberingLevelsStyles = null;
6017
+ if (!fields) {
6018
+ return;
6019
+ }
6020
+ Object.assign(this, fields);
6021
+ }
6022
+ }
5961
6023
 
5962
- class LineWidthHelper {
5963
- static getParagraphLineDisplayTokens(session, paragraphIndex, lineIndex) {
5964
- const docPos = session.displayData.positionToIndex(new CursorParagraph(paragraphIndex, 0), 0);
5965
- const rowWrap = session.displayData.paragraphs[paragraphIndex]?.nextLineIndexes || [];
5966
- const startWrapIndex = lineIndex > 0 ? rowWrap[lineIndex - 1] : 0;
5967
- const endIndex = rowWrap[lineIndex];
5968
- const docLine = session.displayData.getParagraphContent(paragraphIndex);
5969
- const offset = startWrapIndex ? docPos + startWrapIndex : docPos;
5970
- return session.displayData.getLineTokens(session.model, docLine.substring(startWrapIndex, endIndex || undefined), offset);
6024
+ class NumberingHelper {
6025
+ static addValueToNumberingInfo(numberingId, numberingInfo, numberingLevels) {
6026
+ if (numberingInfo[numberingId]) {
6027
+ return;
6028
+ }
6029
+ numberingInfo[numberingId] = [];
6030
+ for (let numberingLevel of numberingLevels) {
6031
+ numberingInfo[numberingId][numberingLevel.level] = {
6032
+ markerIndex: numberingLevel.startValue,
6033
+ start: numberingLevel.startValue,
6034
+ needToRecalculate: true,
6035
+ needToCalculateFirstMarker: false
6036
+ };
6037
+ }
6038
+ }
6039
+ static setNumberingNeedToRecalculate(numberingInfo, numberingId) {
6040
+ numberingInfo[numberingId].forEach(x => {
6041
+ x.needToRecalculate = true;
6042
+ x.markerIndex = x.start;
6043
+ x.needToCalculateFirstMarker = false;
6044
+ });
6045
+ }
6046
+ static setAllNumberingIsCalculated(numberingInfo) {
6047
+ for (let numberingId in numberingInfo) {
6048
+ numberingInfo[numberingId].forEach(x => {
6049
+ x.needToRecalculate = false;
6050
+ x.needToCalculateFirstMarker = false;
6051
+ });
6052
+ }
6053
+ }
6054
+ static getStyles(paragraphStyle, numberings) {
6055
+ const numberingLevels = numberings.find(x => x.numberingId === paragraphStyle.numberingId).levels;
6056
+ const numberingLevelsStyles = numberingLevels.reduce((prev, next) => `${prev}${next.marker}${next.markerType}`, '');
6057
+ const level = numberingLevels.find(x => x.level === paragraphStyle.numberingLevel);
6058
+ return new NumberingParagraphStyleModel({ ...paragraphStyle, numberingType: level.markerType, numberingLevelsStyles });
6059
+ }
6060
+ static findNumberingLevel(numberings, id, level) {
6061
+ const numbering = numberings.find(x => x.numberingId === id);
6062
+ return numbering?.levels.find(x => x.level === level);
6063
+ }
6064
+ static findNumberingLevels(numberings, id) {
6065
+ const numbering = numberings.find(x => x.numberingId === id);
6066
+ return numbering?.levels;
6067
+ }
6068
+ static calculateNumberingInfo(numberingId, level, numberingInfo, numberings) {
6069
+ const numberingModel = this.findNumberingLevel(numberings, numberingId, level);
6070
+ if (numberingModel?.markerType === NumberingMarkerType.Bullet) {
6071
+ return;
6072
+ }
6073
+ this.calculateMarkerIndexes(numberingId, level, numberingInfo);
6074
+ }
6075
+ static calculateMarkerIndexes(numberingId, level, numberingInfo) {
6076
+ if (numberingInfo[numberingId][level].needToRecalculate) {
6077
+ if (numberingInfo[numberingId][level].needToCalculateFirstMarker) {
6078
+ numberingInfo[numberingId][level].markerIndex++;
6079
+ }
6080
+ else {
6081
+ numberingInfo[numberingId][level].needToCalculateFirstMarker = true;
6082
+ }
6083
+ for (let i = level + 1; i < numberingInfo[numberingId].length; i++) {
6084
+ numberingInfo[numberingId][i].markerIndex = numberingInfo[numberingId][i].start;
6085
+ numberingInfo[numberingId][i].needToCalculateFirstMarker = false;
6086
+ }
6087
+ for (let i = 0; i < level; i++) {
6088
+ if (numberingInfo[numberingId][i].markerIndex === numberingInfo[numberingId][i].start) {
6089
+ numberingInfo[numberingId][i].needToCalculateFirstMarker = true;
6090
+ }
6091
+ }
6092
+ }
6093
+ }
6094
+ static getMarker(levelModels, level, numberingId, numberingInfo) {
6095
+ let levelMarker = levelModels[level].marker;
6096
+ let index = levelMarker.indexOf('%');
6097
+ if (index === -1) {
6098
+ return levelMarker;
6099
+ }
6100
+ const splittedMarker = levelMarker.split('.');
6101
+ return this.createMarkerString(numberingInfo, numberingId, splittedMarker);
6102
+ }
6103
+ static createDataModel(numberings, paragraphs, paragraphIndex, numberingInfo) {
6104
+ const paragraph = paragraphs[paragraphIndex];
6105
+ const numberingId = paragraph?.paragraphStyle.numberingId;
6106
+ if (!numberingId) {
6107
+ return new NumberingDataModel({ numberingId: null });
6108
+ }
6109
+ const level = paragraph.paragraphStyle.numberingLevel;
6110
+ const numberingLevelModel = this.findNumberingLevels(numberings, numberingId);
6111
+ const marker = this.getMarker(numberingLevelModel, level, numberingId, numberingInfo);
6112
+ return new NumberingDataModel({ numberingId, level, marker });
6113
+ }
6114
+ static updateMarkerData(numberings, paragraph, paragraphTextStyle, paragraphStyle) {
6115
+ const numberingLevel = NumberingHelper.findNumberingLevel(numberings, paragraph.numberingData.numberingId, paragraph.numberingData.level);
6116
+ const markerTextStyle = ContentStyleHelper.combineTextStyles(numberingLevel.markerStyle, paragraphTextStyle);
6117
+ const markerSizes = NumberingHelper.getMarkerSizes(paragraph.numberingData.marker, markerTextStyle);
6118
+ paragraph.numberingData.markerTextStyle = markerTextStyle;
6119
+ paragraph.numberingData.width = markerSizes.width;
6120
+ paragraph.numberingData.height = markerSizes.height;
6121
+ const indentLeft = paragraphStyle.indentLeft !== null ? paragraphStyle.indentLeft : numberingLevel.indentLeft;
6122
+ let indent = 0;
6123
+ if (paragraphStyle.indentHanging === null && paragraphStyle.indentFirstLine === null) {
6124
+ indent = -numberingLevel.indentHanging;
6125
+ }
6126
+ else {
6127
+ indent = paragraphStyle.indentHanging !== null ? -paragraphStyle.indentHanging : paragraphStyle.indentFirstLine;
6128
+ }
6129
+ paragraph.numberingData.paddingLeft = indentLeft + indent;
6130
+ }
6131
+ static getMarkerSizes(marker, markerStyle) {
6132
+ let width = 0;
6133
+ let height = 0;
6134
+ const markerStylesString = ContentStyleHelper.getFontStylesString(markerStyle);
6135
+ for (let char of marker) {
6136
+ const markerCharSizes = FontMetrics.measureCharSize(char, markerStylesString);
6137
+ width += markerCharSizes.width;
6138
+ if (height < markerCharSizes.height) {
6139
+ height = markerCharSizes.height;
6140
+ }
6141
+ }
6142
+ return { height, width };
6143
+ }
6144
+ static updateNumberingInfo(numberingInfo, marker, numberingId, level) {
6145
+ const markerLevels = this.getLevelInfo(marker);
6146
+ const lastMarkerLevel = markerLevels.length - 1;
6147
+ numberingInfo[numberingId][level].markerIndex = markerLevels[lastMarkerLevel];
6148
+ numberingInfo[numberingId][level].needToRecalculate = true;
6149
+ }
6150
+ static getLevelInfo(input) {
6151
+ return input
6152
+ .split('.')
6153
+ .filter(x => !!x)
6154
+ .map(x => parseInt(x));
6155
+ }
6156
+ static createMarkerString(numberingInfo, numberingId, splittedMarker) {
6157
+ const markers = splittedMarker.map(x => {
6158
+ if (x === '') {
6159
+ return '';
6160
+ }
6161
+ if (x.indexOf('%') === -1) {
6162
+ return x;
6163
+ }
6164
+ const markerLevel = parseInt(x.slice(1));
6165
+ const markerIndex = numberingInfo[numberingId][markerLevel - 1]?.markerIndex;
6166
+ return `${markerIndex}`;
6167
+ });
6168
+ return markers.join('.');
6169
+ }
6170
+ static getMarkerOffset(paragraphSettings) {
6171
+ const numberingData = paragraphSettings.numberingData;
6172
+ const info = paragraphSettings.textLinesInfo[0];
6173
+ if (numberingData.numberingId === null) {
6174
+ return { offset: 0, markerWidth: 0 };
6175
+ }
6176
+ const offset = numberingData.width + numberingData.paddingLeft;
6177
+ let markerWidth = info.indentFirstLine !== null || (offset - info.indentLeft > 0 && offset - info.indentLeft < info.indent.markerWidth)
6178
+ ? info.indent.markerWidth
6179
+ : 0;
6180
+ return { offset, markerWidth };
6181
+ }
6182
+ static getOffsetCausedByMarker(numberingData, info) {
6183
+ if (!info.isNumbering) {
6184
+ return 0;
6185
+ }
6186
+ const offset = numberingData.width + numberingData.paddingLeft - info.indentLeft;
6187
+ return info.indentFirstLine !== null || (offset > 0 && offset <= info.indent.markerWidth) ? info.indent.markerWidth : 0;
5971
6188
  }
5972
6189
  }
5973
6190
 
@@ -5995,8 +6212,8 @@ class PositionHelper {
5995
6212
  paragraphIndex,
5996
6213
  lineIndex,
5997
6214
  lineTopOffset,
5998
- indentBefore: paragraphLineInfo.offsetBefore,
5999
- lineHeight: paragraphLineInfo.height
6215
+ lineHeight: paragraphLineInfo.height,
6216
+ lineAscent: paragraphLineInfo.ascent
6000
6217
  };
6001
6218
  }
6002
6219
  static documentToScreen(session, paragraph, indexInParagraph) {
@@ -6034,34 +6251,14 @@ class PositionHelper {
6034
6251
  static screenToPixel(session, row, column) {
6035
6252
  const paragraphs = session.displayData.paragraphs;
6036
6253
  const paragraphInfo = this.getParagraphInfoByRow(paragraphs, row);
6037
- const tokens = LineWidthHelper.getParagraphLineDisplayTokens(session, paragraphInfo.paragraphIndex, paragraphInfo.lineIndex);
6038
- let size = {
6039
- width: 8,
6040
- height: paragraphInfo.lineHeight,
6041
- baseline: paragraphInfo.lineHeight,
6042
- content: paragraphInfo.lineHeight,
6043
- font: paragraphInfo.lineHeight,
6044
- line: paragraphInfo.lineHeight,
6045
- multiplier: paragraphInfo.lineHeight,
6046
- ascent: 0,
6047
- descent: 0
6048
- };
6254
+ const tokens = session.displayData.getParagraphLineTokens(paragraphInfo.paragraphIndex, paragraphInfo.lineIndex);
6049
6255
  let tokenIndex = column > 0 ? column - 1 : column;
6050
- if (tokens.length > 0) {
6051
- size = tokens[tokenIndex];
6052
- }
6053
- const sizeNext = tokens[tokenIndex + 1];
6054
- let sizeMax = { ...size };
6256
+ let sizeMax = { ...tokens[tokenIndex] };
6055
6257
  let lineWidthToPosition = session.displayData.pagesFormat[0].pageFormatModel.marginLeft; // this value is the same for all page formats.
6056
- const { paragraphIndex, lineIndex } = this.findLineInParagraphs(paragraphs, row);
6057
- const lineInfo = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[lineIndex];
6058
6258
  for (let currentColumn = 0; currentColumn < tokens.length; currentColumn++) {
6059
6259
  const currentToken = tokens[currentColumn];
6060
6260
  if (currentColumn < column) {
6061
6261
  lineWidthToPosition += currentToken.width;
6062
- if (currentToken.displayValue === DisplayValue.space && lineInfo.wordSpacing) {
6063
- lineWidthToPosition += lineInfo.wordSpacing;
6064
- }
6065
6262
  }
6066
6263
  if (sizeMax.ascent < currentToken.ascent) {
6067
6264
  sizeMax = currentToken;
@@ -6072,18 +6269,14 @@ class PositionHelper {
6072
6269
  }
6073
6270
  const paragraph = paragraphs[paragraphInfo.paragraphIndex];
6074
6271
  const paragraphTop = paragraph.paragraphSettings.distanceFromTop || 0;
6075
- const linePaddingLeft = paragraph.paragraphSettings.textLinesInfo[paragraphInfo.lineIndex].paddingLeft;
6076
- const offsetMargin = paragraph.paragraphSettings.textLinesInfo[paragraphInfo.lineIndex].offsetMargin;
6077
- const markerWidth = this.getMarkerWidth(paragraph.paragraphSettings, paragraph.paragraphSettings.textLinesInfo[0], paragraphInfo.lineIndex);
6272
+ const info = paragraph.paragraphSettings.textLinesInfo[paragraphInfo.lineIndex];
6273
+ const markerOffset = NumberingHelper.getOffsetCausedByMarker(paragraph.paragraphSettings.numberingData, info); // todo: verify (case - 1) numbering paragraph with multi-lines; 2) marker is moved far left so it not affect line offset)
6078
6274
  return {
6079
- pageX: lineWidthToPosition + linePaddingLeft + offsetMargin + markerWidth,
6275
+ pageX: lineWidthToPosition + info.paddingLeft + info.offsetMargin + markerOffset,
6080
6276
  pageY: paragraphTop + paragraphInfo.lineTopOffset - session.scrollTop,
6081
- lineHeight: paragraphInfo.lineHeight,
6082
- sizeCurrent: size,
6083
- sizeMax,
6084
- sizeNext,
6085
- firstChar: column === 0,
6086
- lastChar: column === tokens.length - 1
6277
+ width: tokens[tokenIndex].width,
6278
+ height: paragraphInfo.lineHeight,
6279
+ ascent: paragraphInfo.lineAscent
6087
6280
  };
6088
6281
  }
6089
6282
  /**
@@ -6119,24 +6312,17 @@ class PositionHelper {
6119
6312
  static mapPixelToClosestTokenMidpoint(session, xPixel, paragraphIndex, lineIndex, leftOffset) {
6120
6313
  const paragraphSettings = session.displayData.paragraphs[paragraphIndex].paragraphSettings;
6121
6314
  const marginLeft = session.displayData.pagesFormat[0].pageFormatModel.marginLeft; // this value is the same for all page formats.
6122
- const tokens = LineWidthHelper.getParagraphLineDisplayTokens(session, paragraphIndex, lineIndex);
6315
+ const tokens = session.displayData.getParagraphLineTokens(paragraphIndex, lineIndex);
6123
6316
  const lineInfo = paragraphSettings.textLinesInfo[lineIndex];
6124
6317
  const line = lineInfo.screenLine;
6125
- if (tokens[0].displayValue === DisplayValue.emptyLine) {
6318
+ if (tokens[0].isParagraph) {
6126
6319
  return { line, indexInLine: 0 };
6127
6320
  }
6128
6321
  let indexInLine = 0;
6129
- const markerWidth = this.getMarkerWidth(paragraphSettings, lineInfo, lineIndex);
6130
- let relativeX = xPixel - leftOffset - marginLeft - lineInfo.paddingLeft - lineInfo.offsetMargin - markerWidth;
6131
- const wordSpacing = lineInfo.wordSpacing ?? 0;
6132
- while (indexInLine < tokens.length) {
6133
- const token = tokens[indexInLine];
6134
- const isSpace = token.displayValue === DisplayValue.space;
6135
- const width = token.width + (isSpace ? wordSpacing : 0);
6136
- if (relativeX < width / 2) {
6137
- break;
6138
- }
6139
- relativeX -= width;
6322
+ const markerOffset = NumberingHelper.getOffsetCausedByMarker(paragraphSettings.numberingData, lineInfo);
6323
+ let relativeX = xPixel - leftOffset - marginLeft - lineInfo.paddingLeft - lineInfo.offsetMargin - markerOffset;
6324
+ while (indexInLine < tokens.length && relativeX >= tokens[indexInLine].width / 2) {
6325
+ relativeX -= tokens[indexInLine].width;
6140
6326
  indexInLine++;
6141
6327
  }
6142
6328
  return { line, indexInLine };
@@ -6147,24 +6333,17 @@ class PositionHelper {
6147
6333
  static mapPixelToNextTokenBoundary(session, xPixel, paragraphIndex, lineIndex, leftOffset) {
6148
6334
  const paragraphSettings = session.displayData.paragraphs[paragraphIndex].paragraphSettings;
6149
6335
  const marginLeft = session.displayData.pagesFormat[0].pageFormatModel.marginLeft; // this value is the same for all page formats.
6150
- const tokens = LineWidthHelper.getParagraphLineDisplayTokens(session, paragraphIndex, lineIndex);
6336
+ const tokens = session.displayData.getParagraphLineTokens(paragraphIndex, lineIndex);
6151
6337
  const lineInfo = paragraphSettings.textLinesInfo[lineIndex];
6152
6338
  const line = lineInfo.screenLine;
6153
- if (tokens[0].displayValue === DisplayValue.emptyLine) {
6339
+ if (tokens[0].isParagraph) {
6154
6340
  return { line, indexInLine: 0 };
6155
6341
  }
6156
6342
  let indexInLine = 0;
6157
- const markerWidth = this.getMarkerWidth(paragraphSettings, lineInfo, lineIndex);
6158
- let relativeX = xPixel - leftOffset - marginLeft - lineInfo.paddingLeft - lineInfo.offsetMargin - markerWidth;
6159
- const wordSpacing = lineInfo.wordSpacing ?? 0;
6160
- while (indexInLine < tokens.length) {
6161
- const token = tokens[indexInLine];
6162
- const isSpace = token.displayValue === DisplayValue.space;
6163
- const width = token.width + (isSpace ? wordSpacing : 0);
6164
- if (relativeX < width) {
6165
- break;
6166
- }
6167
- relativeX -= width;
6343
+ const markerOffset = NumberingHelper.getOffsetCausedByMarker(paragraphSettings.numberingData, lineInfo);
6344
+ let relativeX = xPixel - leftOffset - marginLeft - lineInfo.paddingLeft - lineInfo.offsetMargin - markerOffset;
6345
+ while (indexInLine < tokens.length && relativeX >= tokens[indexInLine].width) {
6346
+ relativeX -= tokens[indexInLine].width;
6168
6347
  indexInLine++;
6169
6348
  }
6170
6349
  return { line, indexInLine };
@@ -6186,38 +6365,19 @@ class PositionHelper {
6186
6365
  const paragraphs = session.displayData.paragraphs;
6187
6366
  const marginLeft = session.displayData.pagesFormat[0].pageFormatModel.marginLeft; // this value is the same for all page formats.
6188
6367
  const { paragraphIndex, lineIndex } = PositionHelper.findLineInParagraphs(paragraphs, documentLine);
6189
- let column = 0;
6190
- const tokens = LineWidthHelper.getParagraphLineDisplayTokens(session, paragraphIndex, lineIndex);
6191
- if (tokens.length === 1 && tokens[0].displayValue === DisplayValue.emptyLine) {
6192
- return column;
6193
- }
6194
- const textLineInfo = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[lineIndex];
6195
- const wordSpacing = textLineInfo.wordSpacing ?? 0;
6196
- const markerWidth = this.getMarkerWidth(paragraphs[paragraphIndex].paragraphSettings, textLineInfo, lineIndex);
6197
- let width = positionWidth - textLineInfo.paddingLeft - marginLeft - textLineInfo.offsetMargin - markerWidth;
6198
- while (column < tokens.length) {
6199
- const token = tokens[column];
6200
- if (width < token.width) {
6201
- break;
6202
- }
6203
- const isSpace = token.displayValue === DisplayValue.space;
6204
- width -= token.width + (isSpace ? wordSpacing : 0);
6205
- column++;
6368
+ const tokens = session.displayData.getParagraphLineTokens(paragraphIndex, lineIndex);
6369
+ if (tokens[0].isParagraph) {
6370
+ return 0;
6206
6371
  }
6207
- return column;
6208
- }
6209
- static getMarkerWidth(paragraphSettings, textLineInfo, lineIndex) {
6210
- const numberingOffsetLeft = paragraphSettings.numberingData.numberingId === null
6211
- ? 0
6212
- : paragraphSettings.numberingData.width + paragraphSettings.numberingData.paddingLeft;
6213
- if (textLineInfo.isNumbering &&
6214
- lineIndex === 0 &&
6215
- (textLineInfo.indentFirstLine !== null ||
6216
- (numberingOffsetLeft - textLineInfo.indentLeft > 0 &&
6217
- numberingOffsetLeft - textLineInfo.indentLeft <= textLineInfo.markerWidth))) {
6218
- return textLineInfo.markerWidth;
6372
+ let index = 0;
6373
+ const lineInfo = paragraphs[paragraphIndex].paragraphSettings.textLinesInfo[lineIndex];
6374
+ const markerOffset = NumberingHelper.getOffsetCausedByMarker(paragraphs[paragraphIndex].paragraphSettings.numberingData, lineInfo);
6375
+ let width = positionWidth - lineInfo.paddingLeft - marginLeft - lineInfo.offsetMargin - markerOffset;
6376
+ while (index < tokens.length && width >= tokens[index].width) {
6377
+ width -= tokens[index].width;
6378
+ index++;
6219
6379
  }
6220
- return 0;
6380
+ return index;
6221
6381
  }
6222
6382
  }
6223
6383
 
@@ -6268,15 +6428,6 @@ class EdgeElementModel {
6268
6428
  }
6269
6429
  }
6270
6430
 
6271
- class FormatExtModel extends FormatModel {
6272
- constructor(fields) {
6273
- super(fields);
6274
- if (fields) {
6275
- Object.assign(this, fields);
6276
- }
6277
- }
6278
- }
6279
-
6280
6431
  class ScalingHelper {
6281
6432
  static getRatio(current, original) {
6282
6433
  return parseFloat((current / original).toFixed(1));
@@ -6290,100 +6441,55 @@ class RenderingHelper {
6290
6441
  static createLineElement(lineInfo, numberingOffsetLeft, scalingRatio) {
6291
6442
  let lineEl = document.createElement('div');
6292
6443
  lineEl.className = 'noder-line';
6293
- if (lineInfo) {
6294
- const paddingLeft = ScalingHelper.scale(lineInfo.paddingLeft, scalingRatio);
6295
- const marginLeft = numberingOffsetLeft !== null ? -numberingOffsetLeft : 0;
6296
- // eslint-disable-next-line prettier/prettier
6297
- let styleString = `padding-left:${paddingLeft}px;height:${lineInfo.height + lineInfo.offsetAfter}px;margin-top:${lineInfo.offsetBefore}px;margin-bottom:${lineInfo.endPageOffset}px;margin-left:${marginLeft}px;background-color:${lineInfo.backgroundColor};`;
6298
- if (lineInfo.wordSpacing) {
6299
- styleString += `word-spacing:${lineInfo.wordSpacing}px;`;
6300
- }
6301
- lineEl.setAttribute('style', styleString);
6302
- lineEl.setAttribute('screen-index', `${lineInfo.screenLine}`);
6303
- }
6444
+ const paddingLeft = ScalingHelper.scale(lineInfo.paddingLeft, scalingRatio);
6445
+ const marginLeft = numberingOffsetLeft !== null ? -numberingOffsetLeft : 0;
6446
+ let styleString = `padding-left:${paddingLeft}px;height:${lineInfo.height + lineInfo.offsetAfter}px;margin-top:${lineInfo.offsetBefore}px;margin-bottom:${lineInfo.endPageOffset}px;margin-left:${marginLeft}px;background-color:${lineInfo.backgroundColor};`;
6447
+ lineEl.setAttribute('style', styleString);
6448
+ lineEl.setAttribute('screen-index', `${lineInfo.screenLine}`);
6304
6449
  return lineEl;
6305
6450
  }
6306
- static renderContentSimpleLine(domContent, formatsExt, rowDistance, customContentService, customComponents, lineInfo, breaks = []) {
6307
- const valueFragment = DomHelper.createFragment(domContent.currentElement);
6308
- for (const formatExt of formatsExt) {
6309
- const fragmentDocumentStartIndex = rowDistance.start > formatExt.startIndex ? rowDistance.start : formatExt.startIndex;
6310
- const fragmentDocumentEndIndex = formatExt.endIndex > rowDistance.end ? rowDistance.end : formatExt.endIndex;
6311
- const fragmentDocumentDistance = new DistanceModel({ start: fragmentDocumentStartIndex, end: fragmentDocumentEndIndex });
6312
- const fragmentStartIndex = rowDistance.start > formatExt.startIndex ? rowDistance.start - formatExt.startIndex : 0;
6313
- const fragmentEndIndex = formatExt.endIndex > rowDistance.end ? rowDistance.end - formatExt.startIndex : formatExt.endIndex - formatExt.startIndex;
6314
- const fragmentDistance = new DistanceModel({ start: fragmentStartIndex, end: fragmentEndIndex });
6315
- this.renderFormatContent(valueFragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks, lineInfo, true);
6316
- }
6317
- domContent.parentNode.appendChild(valueFragment);
6318
- }
6319
- static renderContentWrappedLine(domContent, splits, currentParagraph, formatsExt, distance, customContentService, customComponents, scalingRatio, breaks = []) {
6320
- let splitIndex = 0;
6321
- const numberingOffsetLeft = currentParagraph.numberingData.numberingId === null
6322
- ? 0
6323
- : currentParagraph.numberingData.width + currentParagraph.numberingData.paddingLeft;
6324
- let markerWidth = 0;
6325
- if (currentParagraph.textLinesInfo[0].isNumbering &&
6326
- (currentParagraph.textLinesInfo[0].indentFirstLine !== null ||
6327
- (numberingOffsetLeft - currentParagraph.textLinesInfo[0].indentLeft > 0 &&
6328
- numberingOffsetLeft - currentParagraph.textLinesInfo[0].indentLeft < currentParagraph.textLinesInfo[0].markerWidth))) {
6329
- markerWidth = currentParagraph.textLinesInfo[0].markerWidth;
6330
- }
6331
- let lineEl = RenderingHelper.createLineElement(currentParagraph.textLinesInfo[splitIndex], numberingOffsetLeft - markerWidth, scalingRatio);
6332
- domContent.parentNode.appendChild(lineEl);
6333
- const valueFragment = DomHelper.createFragment(domContent.currentElement);
6334
- let isLastLineFragment = false;
6335
- let paragraphChars = 0;
6336
- let split = splits[splitIndex];
6337
- let lineInfo = currentParagraph.textLinesInfo[splitIndex];
6338
- for (const formatExt of formatsExt) {
6339
- const beforeSplitIndex = split ? split - 1 : distance.end - distance.start;
6340
- const beforeSplitDocumentIndex = distance.start + beforeSplitIndex;
6341
- const fragmentDocumentStartIndex = distance.start + paragraphChars;
6342
- const fragmentDocumentEndIndex = formatExt.endIndex < beforeSplitDocumentIndex ? formatExt.endIndex : beforeSplitDocumentIndex;
6343
- const fragmentDocumentDistance = new DistanceModel({ start: fragmentDocumentStartIndex, end: fragmentDocumentEndIndex });
6344
- const fragmentStartIndex = distance.start > formatExt.startIndex ? distance.start - formatExt.startIndex : 0;
6345
- const fragmentEndIndex = formatExt.endIndex < beforeSplitDocumentIndex
6346
- ? fragmentStartIndex + formatExt.endIndex - formatExt.startIndex
6347
- : distance.start + beforeSplitIndex - formatExt.startIndex;
6348
- const fragmentDistance = new DistanceModel({ start: fragmentStartIndex, end: fragmentEndIndex });
6349
- isLastLineFragment = split === fragmentDocumentDistance.end + 1;
6350
- paragraphChars += this.renderFormatContent(valueFragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks, lineInfo, isLastLineFragment);
6351
- lineEl.appendChild(valueFragment);
6352
- let nextFragmentStartIndex = fragmentEndIndex + 1;
6353
- while (paragraphChars === split && nextFragmentStartIndex !== distance.end) {
6354
- split = splits[++splitIndex];
6355
- lineInfo = currentParagraph.textLinesInfo[splitIndex];
6356
- const nextFragmentDocumentStartIndex = fragmentDocumentStartIndex + nextFragmentStartIndex - fragmentStartIndex;
6357
- lineEl = RenderingHelper.createLineElement(lineInfo, numberingOffsetLeft, scalingRatio);
6358
- if (split > formatExt.endIndex) {
6359
- const nextFragmentEndIndex = formatExt.content.length - 1;
6360
- const nextFragmentDistance = new DistanceModel({ start: nextFragmentStartIndex, end: nextFragmentEndIndex });
6361
- const nextFragmentDocumentEndIndex = nextFragmentDocumentStartIndex + nextFragmentEndIndex - nextFragmentStartIndex;
6362
- const nextFragmentDocumentDistance = new DistanceModel({
6363
- start: nextFragmentDocumentStartIndex,
6364
- end: nextFragmentDocumentEndIndex
6365
- });
6366
- isLastLineFragment = split === nextFragmentDocumentDistance.end + 1;
6367
- paragraphChars += this.renderFormatContent(valueFragment, formatExt, nextFragmentDocumentDistance, nextFragmentDistance, customContentService, customComponents, breaks, lineInfo, isLastLineFragment);
6368
- lineEl.appendChild(valueFragment);
6451
+ static renderParagraph(domContent, paragraph, formats, customContentService, customComponents, scalingRatio, breaks = []) {
6452
+ const { offset, markerWidth } = NumberingHelper.getMarkerOffset(paragraph.paragraphSettings);
6453
+ const lineInfos = paragraph.paragraphSettings.textLinesInfo;
6454
+ const start = paragraph.startIndex;
6455
+ const end = paragraph.startIndex + paragraph.content.length;
6456
+ const fragment = DomHelper.createFragment(domContent.currentElement);
6457
+ let lineIndex = 0;
6458
+ let renderedCount = 0;
6459
+ let lineEl = RenderingHelper.createLineElement(paragraph.paragraphSettings.textLinesInfo[0], offset - markerWidth, scalingRatio);
6460
+ for (const format of formats) {
6461
+ do {
6462
+ const lineEnd = paragraph.nextLineIndexes[lineIndex]
6463
+ ? paragraph.startIndex + paragraph.nextLineIndexes[lineIndex] - 1
6464
+ : end;
6465
+ let fragmentEnd = format.endIndex < lineEnd ? format.endIndex : lineEnd;
6466
+ let wordSpacing = lineInfos[lineIndex].wordSpacing;
6467
+ if (wordSpacing) {
6468
+ const lineStart = lineIndex > 0 ? paragraph.nextLineIndexes[lineIndex - 1] : 0;
6469
+ const lineStartIndex = start + lineStart;
6470
+ const wordSpacingStart = lineInfos[lineIndex].wordSpacingStart;
6471
+ const wordSpacingEnd = lineInfos[lineIndex].wordSpacingEnd;
6472
+ if (renderedCount - lineStart < wordSpacingStart && lineStartIndex + wordSpacingStart < fragmentEnd) {
6473
+ fragmentEnd = lineStartIndex + wordSpacingStart;
6474
+ }
6475
+ else if (renderedCount - lineStart < wordSpacingEnd && lineStartIndex + wordSpacingEnd < fragmentEnd) {
6476
+ fragmentEnd = lineStartIndex + wordSpacingEnd;
6477
+ }
6478
+ if (renderedCount - lineStart < wordSpacingStart || renderedCount - lineStart > wordSpacingEnd) {
6479
+ wordSpacing = null;
6480
+ }
6481
+ }
6482
+ const fragmentLength = fragmentEnd - start - renderedCount + 1;
6483
+ this.renderFormatContent(fragment, format.textStyle, start + renderedCount, fragmentEnd, paragraph.content.substring(renderedCount, renderedCount + fragmentLength), customContentService, customComponents, breaks, wordSpacing);
6484
+ lineEl.appendChild(fragment);
6485
+ renderedCount += fragmentLength;
6486
+ if (paragraph.nextLineIndexes.length > lineIndex && start + renderedCount > lineEnd) {
6487
+ lineIndex++;
6369
6488
  domContent.parentNode.appendChild(lineEl);
6370
- break;
6489
+ lineEl = RenderingHelper.createLineElement(lineInfos[lineIndex], offset, scalingRatio);
6371
6490
  }
6372
- const textIndexLength = RenderingHelper.getTextIndexLengthForInsert(formatExt, nextFragmentDocumentStartIndex, distance, split, paragraphChars);
6373
- const nextFragmentDocumentEndIndex = nextFragmentDocumentStartIndex + textIndexLength;
6374
- const nextFragmentEndIndex = nextFragmentStartIndex + textIndexLength;
6375
- const nextFragmentDistance = new DistanceModel({ start: nextFragmentStartIndex, end: nextFragmentEndIndex });
6376
- const nextFragmentDocumentDistance = new DistanceModel({
6377
- start: nextFragmentDocumentStartIndex,
6378
- end: nextFragmentDocumentEndIndex
6379
- });
6380
- isLastLineFragment = split === nextFragmentDocumentDistance.end + 1;
6381
- const renderedChars = this.renderFormatContent(valueFragment, formatExt, nextFragmentDocumentDistance, nextFragmentDistance, customContentService, customComponents, breaks, lineInfo, isLastLineFragment);
6382
- lineEl.appendChild(valueFragment);
6383
- domContent.parentNode.appendChild(lineEl);
6384
- nextFragmentStartIndex += renderedChars;
6385
- paragraphChars += renderedChars;
6386
- }
6491
+ } while (renderedCount < paragraph.content.length && format.endIndex > start + renderedCount);
6492
+ domContent.parentNode.appendChild(lineEl);
6387
6493
  }
6388
6494
  }
6389
6495
  static renderNumberingMarker(paragraph, layerElement, scalingRatio) {
@@ -6400,11 +6506,7 @@ class RenderingHelper {
6400
6506
  const numberingLineEl = this.createLineElement(markerLineInfo, 0, scalingRatio);
6401
6507
  const markerFragment = DomHelper.createFragment(layerElement);
6402
6508
  const marker = paragraph.numberingData.marker;
6403
- const markerExtModel = new FormatExtModel({
6404
- textStyle: paragraph.numberingData.markerTextStyle,
6405
- content: marker
6406
- });
6407
- this.renderText(markerFragment, markerExtModel, marker);
6509
+ this.renderText(markerFragment, paragraph.numberingData.markerTextStyle, marker, null);
6408
6510
  numberingLineEl.appendChild(markerFragment);
6409
6511
  return numberingLineEl;
6410
6512
  }
@@ -6413,60 +6515,35 @@ class RenderingHelper {
6413
6515
  containerElement.className = className;
6414
6516
  return containerElement;
6415
6517
  }
6416
- static renderFormatContent(fragment, formatExt, fragmentDocumentDistance, fragmentDistance, customContentService, customComponents, breaks, lineInfo, isLastLineFragment) {
6417
- let textFragment = formatExt.content.substring(fragmentDistance.start, fragmentDistance.end + 1);
6518
+ static renderFormatContent(fragment, textStyle, start, end, textFragment, customContentService, customComponents, breaks, wordSpacing) {
6418
6519
  if (!textFragment) {
6419
- return 0;
6420
- }
6421
- const textFragmentWithoutBreaks = BreakHelper.removeBreakMarker(breaks, textFragment, fragmentDocumentDistance.start);
6422
- if (customContentService.isFragmentContainComponent(customComponents, textFragment, fragmentDocumentDistance)) {
6423
- this.renderTextWithCustomContent(fragment, formatExt, fragmentDocumentDistance, textFragmentWithoutBreaks, customContentService, customComponents, lineInfo);
6424
- }
6425
- else if (isLastLineFragment) {
6426
- this.renderTextWithSpacingHandling(fragment, formatExt, textFragmentWithoutBreaks, lineInfo);
6427
- }
6428
- else {
6429
- const paddingLeft = textFragment.startsWith(' ') && lineInfo.wordSpacing ? lineInfo.wordSpacing : null;
6430
- this.renderText(fragment, formatExt, textFragmentWithoutBreaks, paddingLeft);
6431
- }
6432
- return textFragment.length;
6433
- }
6434
- static renderTextWithCustomContent(fragment, formatExt, fragmentDocumentDistance, textFragment, customContentService, customComponents, lineInfo) {
6435
- const components = customContentService.getComponents(customComponents, fragmentDocumentDistance);
6436
- if (!components.length) {
6437
- this.renderTextWithSpacingHandling(fragment, formatExt, textFragment, lineInfo);
6438
6520
  return;
6439
6521
  }
6440
- let newTextFragmentStartIndex = fragmentDocumentDistance.start;
6441
- let nextTextFragment = textFragment;
6442
- for (const component of components) {
6443
- const textBeforeElement = nextTextFragment.substring(0, component.instance.insertIndex - newTextFragmentStartIndex);
6444
- nextTextFragment = nextTextFragment.substring(textBeforeElement.length + 1, nextTextFragment.length);
6445
- newTextFragmentStartIndex = newTextFragmentStartIndex + (textBeforeElement.length ? textBeforeElement.length + 1 : 1);
6446
- if (textBeforeElement.length) {
6447
- const paddingLeft = textBeforeElement.startsWith(' ') && lineInfo.wordSpacing ? lineInfo.wordSpacing : null;
6448
- this.renderText(fragment, formatExt, textBeforeElement, paddingLeft);
6522
+ const textFragmentWithoutBreaks = BreakHelper.removeBreakMarker(breaks, textFragment, start);
6523
+ const components = customContentService.getComponents(customComponents, start, end);
6524
+ if (components.length) {
6525
+ let newTextFragmentStartIndex = start;
6526
+ let nextTextFragment = textFragmentWithoutBreaks;
6527
+ for (const component of components) {
6528
+ const textBeforeElement = nextTextFragment.substring(0, component.instance.insertIndex - newTextFragmentStartIndex);
6529
+ nextTextFragment = nextTextFragment.substring(textBeforeElement.length + 1, nextTextFragment.length);
6530
+ newTextFragmentStartIndex = newTextFragmentStartIndex + (textBeforeElement.length ? textBeforeElement.length + 1 : 1);
6531
+ if (textBeforeElement.length) {
6532
+ this.renderText(fragment, textStyle, textBeforeElement, wordSpacing);
6533
+ }
6534
+ customContentService.componentService.attachComponent(fragment, component);
6535
+ }
6536
+ if (nextTextFragment.length) {
6537
+ this.renderText(fragment, textStyle, nextTextFragment, wordSpacing);
6449
6538
  }
6450
- this.attachComponent(fragment, component, customContentService);
6451
- }
6452
- if (nextTextFragment.length) {
6453
- this.renderTextWithSpacingHandling(fragment, formatExt, nextTextFragment, lineInfo);
6454
- }
6455
- }
6456
- static renderTextWithSpacingHandling(fragment, formatExt, textFragment, lineInfo) {
6457
- const paddingLeft = textFragment.startsWith(' ') && lineInfo.wordSpacing ? lineInfo.wordSpacing : null;
6458
- if (lineInfo.wordSpacing && textFragment.endsWith(' ')) {
6459
- this.renderText(fragment, formatExt, textFragment.slice(0, -1), paddingLeft);
6460
- this.renderText(fragment, formatExt, ' ');
6461
6539
  }
6462
6540
  else {
6463
- this.renderText(fragment, formatExt, textFragment, paddingLeft);
6541
+ this.renderText(fragment, textStyle, textFragmentWithoutBreaks, wordSpacing);
6464
6542
  }
6465
6543
  }
6466
- static renderText(fragment, formatExt, textFragment, paddingLeft = null) {
6544
+ static renderText(fragment, textStyle, content, wordSpacing) {
6467
6545
  const span = document.createElement('span');
6468
- const textStyle = new TextStyleModel({ ...formatExt.textStyle });
6469
- if (textFragment === NEW_LINE_MARKUP) {
6546
+ if (content === NEW_LINE_MARKUP) {
6470
6547
  span.className = 'paragraph-symbol';
6471
6548
  }
6472
6549
  if (textStyle.headingStyleId === HYPERLINK_HEADING_STYLE_ID) {
@@ -6481,21 +6558,14 @@ class RenderingHelper {
6481
6558
  };
6482
6559
  span.onmouseleave = () => span.classList.remove('hyperlink-hover');
6483
6560
  }
6484
- span.textContent = textFragment;
6561
+ span.textContent = content;
6485
6562
  let styleString = ContentStyleHelper.getTextStylesString(textStyle);
6486
- if (paddingLeft) {
6487
- styleString += `padding-left:${paddingLeft}px;`;
6563
+ if (wordSpacing) {
6564
+ styleString += `word-spacing:${wordSpacing}px;`;
6488
6565
  }
6489
6566
  span.setAttribute('style', styleString);
6490
6567
  fragment.appendChild(span);
6491
6568
  }
6492
- static getTextIndexLengthForInsert(formatExt, fragmentDocumentStartIndex, paragraphDistance, split, paragraphChars) {
6493
- const maxLength = Math.max(paragraphDistance.end - paragraphChars - paragraphDistance.start, 0);
6494
- return (Math.min(split - paragraphChars || Number.MAX_VALUE, maxLength, formatExt.endIndex - fragmentDocumentStartIndex + 1, formatExt.content.length) - 1);
6495
- }
6496
- static attachComponent(fragment, component, customContentService) {
6497
- customContentService.componentService.attachComponent(fragment, component);
6498
- }
6499
6569
  }
6500
6570
 
6501
6571
  class EdgesLayer {
@@ -6810,12 +6880,6 @@ class PrintPagesLayer extends PagesLayer {
6810
6880
  }
6811
6881
  }
6812
6882
 
6813
- class PrintRenderingHelper extends RenderingHelper {
6814
- static attachComponent(fragment, component, customContentService) {
6815
- customContentService.componentService.cloneAndAttachComponent(fragment, component);
6816
- }
6817
- }
6818
-
6819
6883
  class Lines {
6820
6884
  get length() {
6821
6885
  return this.cells.length;
@@ -7091,10 +7155,9 @@ class ParagraphHelper {
7091
7155
  }
7092
7156
 
7093
7157
  class TextLayer {
7094
- constructor(parentElement, session, renderingHelper = RenderingHelper) {
7158
+ constructor(parentElement, session) {
7095
7159
  this.parentElement = parentElement;
7096
7160
  this.session = session;
7097
- this.renderingHelper = renderingHelper;
7098
7161
  this.pagesCountChangedHandler = (event) => {
7099
7162
  this.lines.setSizes(event.pagesCount, event.pageHeight);
7100
7163
  };
@@ -7169,46 +7232,22 @@ class TextLayer {
7169
7232
  DomHelper.setStyle(paragraphCell.element.style, 'margin-right', `${offsetForLittlePages}px`);
7170
7233
  const paragraphSettings = this.session.displayData.getParagraphSettings(row);
7171
7234
  if (paragraphSettings.numberingData.numberingId !== null) {
7172
- const numberingElement = this.renderingHelper.renderNumberingMarker(paragraphSettings, this.element, this.session.generalProperties.scalingRatio);
7235
+ const numberingElement = RenderingHelper.renderNumberingMarker(paragraphSettings, this.element, this.session.generalProperties.scalingRatio);
7173
7236
  numberingElement.className = 'numberingMarker';
7174
7237
  paragraphCell.element.appendChild(numberingElement);
7175
7238
  }
7176
- this.renderTextLines(paragraphCell.element, row);
7239
+ this.renderParagraph(paragraphCell.element, this.session.displayData.paragraphs[row]);
7177
7240
  fragment.push(paragraphCell);
7178
7241
  }
7179
7242
  return fragment;
7180
7243
  }
7181
- renderTextLines(parent, row) {
7182
- const linesContainerElement = this.renderingHelper.createDivContainer('lines-container');
7183
- const paragraphSettings = this.session.displayData.getParagraphSettings(row);
7184
- const paragraphHeight = ParagraphHelper.getParagraphHeight(paragraphSettings.textLinesInfo);
7244
+ renderParagraph(parent, paragraph) {
7245
+ const linesContainerElement = RenderingHelper.createDivContainer('lines-container');
7246
+ const paragraphHeight = ParagraphHelper.getParagraphHeight(paragraph.paragraphSettings.textLinesInfo);
7185
7247
  DomHelper.setStyle(linesContainerElement.style, 'height', `${paragraphHeight}px`);
7186
7248
  parent.appendChild(linesContainerElement);
7187
- const startIndex = this.session.displayData.positionToIndex({ row, column: 0 });
7188
- const endIndex = this.session.displayData.positionToIndex({ row: row + 1, column: 0 }) - 1;
7189
- const combinedFormats = FormatStyleHelper.combineSection(this.session.model.formats, this.session.model.links, startIndex, endIndex).map(x => new FormatExtModel({ ...x, content: this.session.model.content.substring(x.startIndex, x.endIndex + 1) }));
7190
- const splits = this.session.displayData.paragraphs[row].nextLineIndexes;
7191
- if (splits?.length) {
7192
- const distance = new DistanceModel({ start: startIndex, end: endIndex });
7193
- this.renderingHelper.renderContentWrappedLine({ currentElement: this.element, parentNode: linesContainerElement }, splits, paragraphSettings, combinedFormats, distance, this.session.customContentService, this.session.customComponents, this.session.generalProperties.scalingRatio, this.session.model.breaks);
7194
- }
7195
- else {
7196
- const markerWidth = paragraphSettings.textLinesInfo[0].indentFirstLine ? paragraphSettings.textLinesInfo[0].markerWidth : 0;
7197
- const numberingOffsetLeft = paragraphSettings.numberingData.numberingId === null
7198
- ? 0
7199
- : paragraphSettings.numberingData.width + paragraphSettings.numberingData.paddingLeft - markerWidth;
7200
- let offset = 0;
7201
- if (paragraphSettings.textLinesInfo[0].isNumbering &&
7202
- numberingOffsetLeft - paragraphSettings.textLinesInfo[0].indentLeft > 0 &&
7203
- numberingOffsetLeft - paragraphSettings.textLinesInfo[0].indentLeft < paragraphSettings.textLinesInfo[0].markerWidth) {
7204
- offset = paragraphSettings.textLinesInfo[0].markerWidth;
7205
- }
7206
- const lineInfo = paragraphSettings.textLinesInfo[0];
7207
- const lastLineEl = this.renderingHelper.createLineElement(lineInfo, numberingOffsetLeft - offset, this.session.generalProperties.scalingRatio);
7208
- linesContainerElement.appendChild(lastLineEl);
7209
- const rowDistance = new DistanceModel({ start: startIndex, end: endIndex });
7210
- this.renderingHelper.renderContentSimpleLine({ currentElement: this.element, parentNode: lastLineEl }, combinedFormats, rowDistance, this.session.customContentService, this.session.customComponents, lineInfo, this.session.model.breaks);
7211
- }
7249
+ const combinedFormats = FormatStyleHelper.combineSection(this.session.model.formats, this.session.model.links, paragraph.startIndex, paragraph.startIndex + paragraph.content.length);
7250
+ RenderingHelper.renderParagraph({ currentElement: this.element, parentNode: linesContainerElement }, paragraph, combinedFormats, this.session.customContentService, this.session.customComponents, this.session.generalProperties.scalingRatio, this.session.model.breaks);
7212
7251
  }
7213
7252
  }
7214
7253
 
@@ -7254,7 +7293,7 @@ class PrintRenderer {
7254
7293
  this.content.className = 'noder-content print';
7255
7294
  }
7256
7295
  createLayers() {
7257
- this.textLayer = new PrintTextLayer(this.content, this.mainSession, PrintRenderingHelper);
7296
+ this.textLayer = new PrintTextLayer(this.content, this.mainSession);
7258
7297
  this.pagesLayer = new PrintPagesLayer(this.content, this.mainSession);
7259
7298
  this.edgesLayer = new EdgesLayer(this.content, this.mainSession);
7260
7299
  }
@@ -8600,7 +8639,7 @@ class Editor {
8600
8639
  this.session.applyToolbarStyles();
8601
8640
  this.onSetCommentsVisibility(!!this.model.comments.length);
8602
8641
  this.search = new Search(editorService);
8603
- this.subscriptions.push(this.changedEdgeSizeSubscription(), this.changedEdgeSubscription(), this.changedTableSizeSubscription(), this.clipboardDataSubscription(), this.copySelectedSubscription(), this.createCustomComponentSubscription(), this.replaceByCustomComponentSubscription(), this.cutSelectedSubscription(), this.disableSelectionSubscription(), this.endMousePressSubscription(), this.imageLoadedSubscription(), this.insertBreakSubscription(), this.insertImageSubscription(), this.insertLinkSubscription(), this.insertTableColumnsSubscription(), this.insertTableRowsSubscription(), this.insertTableSubscription(), this.updateTableBorderStyleSubscription(), this.updateTableBorderWidthSubscription(), this.updateTableBordersSubscription(), this.insertTextSubscription(), this.pasteFromClipboardSubscription(), this.printSubscription(), this.redoSubscription(), this.removeLeftSubscription(), this.removeNumberingsSubscription(), this.removeRightSubscription(), this.removeSelectedSubscription(), this.removeTableColumnsSubscription(), this.removeTableRowsSubscription(), this.removeTableSubscription(), this.rerenderSubscription(), this.resizeTableColumnsSubscription(), ...this.searchOptionSubscriptions(), ...this.replaceSubscription(), this.grammarReplaceSubscription(), this.ignoreGrammarErrorSubscription(), this.selectAllSubscription(), this.setImageStyleSubscription(), this.setNumberingTemplateTypeSubscription(), this.setParagraphStylesSubscription(), this.setTextStylesSubscription(), this.undoSubscription(), this.updateEdgeSubscription(), this.viewOnlyModeSubscription(), this.applyPageFormatSubscription(), this.applyRightMarginPageFormatSubscription(), this.applyLeftMarginPageFormatSubscription(), this.insertPageFormatSubscription(), this.applyDocumentPageFormatSubscription(), this.dragMoveSubscription(), this.dragDropSubscription(), this.applyFirstLinePositionSubscription(), this.applyRightIndentParagraphSubscription(), this.applyLeftIndentParagraphSubscription(), this.applyTabSettingsSubscription(), this.commandCreatedForEdges(), ...this.commentCreationSubscriptions(), this.removeCommentSubscription(), this.rerenderCommentsSubscription(), this.selectCommentSubscription(), this.setComentsVisibilitySubscription());
8642
+ this.subscriptions.push(this.changedEdgeSizeSubscription(), this.changedEdgeSubscription(), this.changedTableSizeSubscription(), this.clipboardDataSubscription(), this.copySelectedSubscription(), this.createCustomComponentSubscription(), this.replaceByCustomComponentSubscription(), this.cutSelectedSubscription(), this.disableSelectionSubscription(), this.endMousePressSubscription(), this.imageLoadedSubscription(), this.insertBreakSubscription(), this.insertImageSubscription(), this.insertLinkSubscription(), this.insertTableColumnsSubscription(), this.insertTableRowsSubscription(), this.insertTableSubscription(), this.updateTableBorderStyleSubscription(), this.updateTableBorderWidthSubscription(), this.updateTableBordersSubscription(), this.selectSpacingSubscription(), this.selectBeforeSubscription(), this.selectAfterSubscription(), this.insertTextSubscription(), this.pasteFromClipboardSubscription(), this.printSubscription(), this.redoSubscription(), this.removeLeftSubscription(), this.removeNumberingsSubscription(), this.removeRightSubscription(), this.removeSelectedSubscription(), this.removeTableColumnsSubscription(), this.removeTableRowsSubscription(), this.removeTableSubscription(), this.rerenderSubscription(), this.resizeTableColumnsSubscription(), ...this.searchOptionSubscriptions(), ...this.replaceSubscription(), this.grammarReplaceSubscription(), this.ignoreGrammarErrorSubscription(), this.selectAllSubscription(), this.setImageStyleSubscription(), this.setNumberingTemplateTypeSubscription(), this.setParagraphStylesSubscription(), this.setTextStylesSubscription(), this.undoSubscription(), this.updateEdgeSubscription(), this.viewOnlyModeSubscription(), this.applyPageFormatSubscription(), this.applyRightMarginPageFormatSubscription(), this.applyLeftMarginPageFormatSubscription(), this.insertPageFormatSubscription(), this.applyDocumentPageFormatSubscription(), this.dragMoveSubscription(), this.dragDropSubscription(), this.applyFirstLinePositionSubscription(), this.applyRightIndentParagraphSubscription(), this.applyLeftIndentParagraphSubscription(), this.applyTabSettingsSubscription(), this.commandCreatedForEdges(), ...this.commentCreationSubscriptions(), this.removeCommentSubscription(), this.rerenderCommentsSubscription(), this.selectCommentSubscription(), this.setComentsVisibilitySubscription(), this.getCommentTextSubscription(), this.replaceCommentTextSubscription());
8604
8643
  }
8605
8644
  destroy() {
8606
8645
  this.subscriptions.forEach(s => s?.unsubscribe());
@@ -8656,7 +8695,7 @@ class Editor {
8656
8695
  const cursor = PositionHelper.documentToPixel(this.session, this.session.selection.cursor);
8657
8696
  const rect = this.renderer.container.getBoundingClientRect();
8658
8697
  const x = rect.left + cursor.pageX;
8659
- const y = rect.top + cursor.pageY + cursor.lineHeight;
8698
+ const y = rect.top + cursor.pageY + cursor.height;
8660
8699
  this.overlayService.open(component, { textKey }, x, y);
8661
8700
  }
8662
8701
  cut() {
@@ -9033,9 +9072,9 @@ class Editor {
9033
9072
  const replaceModel = new ReplaceModel({ insertText, delete: deleteModel });
9034
9073
  this.saveReplaceToHistory(this.search.currentMatch.range, replaceModel);
9035
9074
  const endPosition = this.session.replace(replaceModel);
9036
- const range = new Range(this.search.currentMatch.range.start, endPosition);
9037
- let lastRow = range.start.row === range.end.row ? range.end.row : Infinity;
9038
- this.renderer.updateLines(range.start.row, lastRow);
9075
+ const matchStart = this.search.currentMatch.range.start;
9076
+ let lastRow = matchStart.row === endPosition.row ? endPosition.row : Infinity;
9077
+ this.renderer.updateLines(matchStart.row, lastRow);
9039
9078
  }
9040
9079
  else {
9041
9080
  const range = this.search.currentMatch.range;
@@ -9306,7 +9345,7 @@ class Editor {
9306
9345
  saveInsertBreakToHistory(model) {
9307
9346
  model.isOnNewParagraph =
9308
9347
  model.breakType === BreakTypes.Page &&
9309
- BreakHelper.getBreakType(this.session.model, CUSTOM_ELEMENT_MARKER, model.insertIndex - 1) !== BreakTypes.Page;
9348
+ BreakHelper.getBreakType(this.session.model.breaks, CUSTOM_ELEMENT_MARKER, model.insertIndex - 1) !== BreakTypes.Page;
9310
9349
  const count = model.isOnNewParagraph ? NEW_LINE_MARKUP.length + 1 : 1;
9311
9350
  this.history.pushInsertBreak(model, count);
9312
9351
  this.commandsService.createCommand(SaveCommandsHelper.getInsertBreakCommand(model, this.targets));
@@ -9479,8 +9518,7 @@ class Editor {
9479
9518
  this.onContentChange();
9480
9519
  }
9481
9520
  removeExternalData() {
9482
- const startIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.start);
9483
- const endIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.end) - 1;
9521
+ const { startIndex, endIndex } = ContentHelper.getSelectedPartDocumentIndexes(this.session.displayData.paragraphs, this.selection.range);
9484
9522
  const elements = IndexedElementHelper.sliceSection(this.session.model.elements, startIndex, endIndex).slice();
9485
9523
  if (elements.length) {
9486
9524
  this.editorService.removeCustomElementsData(elements);
@@ -9532,13 +9570,12 @@ class Editor {
9532
9570
  const data = this.textInput.getClipboardData(event);
9533
9571
  this.pasteData(data);
9534
9572
  }
9535
- onCreateComment() {
9536
- const startIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.start);
9537
- const endIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.end);
9573
+ onCreateComment(commentType) {
9574
+ const { startIndex, endIndex } = ContentHelper.getSelectedPartDocumentIndexes(this.session.displayData.paragraphs, this.selection.range);
9538
9575
  const reqId = Date.now();
9539
9576
  const comment = new CommentModel({ startIndex, endIndex });
9540
9577
  this.commentCreateRequests.push({ sessionId: this.session.sessionId, reqId, comment });
9541
- this.editorService.createComment(reqId);
9578
+ this.editorService.createComment(reqId, commentType);
9542
9579
  }
9543
9580
  onCommentCreated(reqId, commentId) {
9544
9581
  const request = this.commentCreateRequests.find(x => x.reqId === reqId);
@@ -9561,6 +9598,26 @@ class Editor {
9561
9598
  this.editorService.removeCommentData([id]);
9562
9599
  session.renderer.loop.schedule({ comments: true });
9563
9600
  }
9601
+ onCommentTextReplace(commentId, newText) {
9602
+ const { session, comment } = this.regulatorService.getComment(commentId);
9603
+ const paragraphRange = new Range(ContentHelper.documentIndexToParagraphIndex(session.session.displayData.paragraphs, comment.startIndex), ContentHelper.documentIndexToParagraphIndex(session.session.displayData.paragraphs, comment.endIndex + 1));
9604
+ const insertText = new InsertTextModel({ insertIndex: comment.startIndex, text: newText });
9605
+ const deleteModel = new DeleteModel({
9606
+ startIndex: comment.startIndex,
9607
+ count: comment.endIndex - comment.startIndex + 1
9608
+ });
9609
+ const replaceModel = new ReplaceModel({ insertText, delete: deleteModel });
9610
+ this.saveReplaceToHistory(paragraphRange, replaceModel);
9611
+ const endPosition = session.session.replace(replaceModel);
9612
+ let lastRow = paragraphRange.start.row === endPosition.row ? endPosition.row : Infinity;
9613
+ this.renderer.updateLines(paragraphRange.start.row, lastRow);
9614
+ this.onContentChange();
9615
+ }
9616
+ onGetCommentText(commentId, continueWith) {
9617
+ const { session, comment } = this.regulatorService.getComment(commentId);
9618
+ const text = session.session.model.content.slice(comment.startIndex, comment.endIndex + 1);
9619
+ continueWith(text);
9620
+ }
9564
9621
  onSetCommentsVisibility(value) {
9565
9622
  this.commentsVisible = value;
9566
9623
  this.regulatorService.setCommentsVisibility(value);
@@ -9900,7 +9957,7 @@ class Editor {
9900
9957
  const mainRect = this.mainRenderer.container.getBoundingClientRect();
9901
9958
  const rect = this.renderer.container.getBoundingClientRect();
9902
9959
  const hintX = mainRect.right - 20;
9903
- const hintY = rect.top + cursor.pageY + cursor.lineHeight / 2 - 20;
9960
+ const hintY = rect.top + cursor.pageY + cursor.height / 2 - 20;
9904
9961
  this.overlayService.open(CommentPopupComponent, {}, hintX, hintY);
9905
9962
  }
9906
9963
  }
@@ -9950,9 +10007,7 @@ class Editor {
9950
10007
  changedTableSize(insertIndex, sessionId) {
9951
10008
  const session = this.regulatorService.getSession(sessionId);
9952
10009
  const paragraph = ContentHelper.documentIndexToParagraphIndex(session.displayData.paragraphs, insertIndex).row;
9953
- session.displayData.resetAllNumberingInfo(paragraph);
9954
10010
  session.displayData.updateNextLineIndexes(paragraph, paragraph);
9955
- session.displayData.updateNumberingsDataOnChange(paragraph + 1);
9956
10011
  this.focus();
9957
10012
  this.onContentChange();
9958
10013
  }
@@ -10308,6 +10363,15 @@ class Editor {
10308
10363
  updateTableBordersSubscription() {
10309
10364
  return this.editorService.updateTableBorders$.subscribe(x => this.applyTableCellsStyles(x, (data, table, selection) => TableOperationsHelper.getApplyTableCellsBorders(data, table, selection)));
10310
10365
  }
10366
+ selectSpacingSubscription() {
10367
+ return this.editorService.selectSpacing$.subscribe(x => this.applyParagraphStyles(new ParagraphStyleModel({ lineSpacing: x })));
10368
+ }
10369
+ selectBeforeSubscription() {
10370
+ return this.editorService.selectBefore$.subscribe(x => this.applyParagraphStyles(new ParagraphStyleModel({ spaceBefore: x })));
10371
+ }
10372
+ selectAfterSubscription() {
10373
+ return this.editorService.selectAfter$.subscribe(x => this.applyParagraphStyles(new ParagraphStyleModel({ spaceAfter: x })));
10374
+ }
10311
10375
  insertTextSubscription() {
10312
10376
  return this.editorService.insertText$.subscribe(x => {
10313
10377
  this.insert(x);
@@ -10412,24 +10476,18 @@ class Editor {
10412
10476
  let existed = this.mainSession.customComponents.edges.headersComponents.findIndex(x => x.instance.sessionId === sessionId);
10413
10477
  if (existed !== -1) {
10414
10478
  const headers = this.mainSession.customComponents.edges.headersComponents.slice(existed + 1);
10415
- headers.forEach(x => {
10416
- x.instance.session.displayData.resetAllNumberingInfo(0);
10417
- x.instance.session.displayData.updateNextLineIndexes(0, x.instance.session.displayData.paragraphs.length - 1);
10418
- });
10479
+ headers.forEach(x => x.instance.session.displayData.updateNextLineIndexes(0, x.instance.session.displayData.paragraphs.length - 1));
10419
10480
  }
10420
10481
  else {
10421
10482
  existed = this.mainSession.customComponents.edges.footersComponents.findIndex(x => x.instance.sessionId === sessionId);
10422
10483
  const footers = this.mainSession.customComponents.edges.footersComponents.slice(existed + 1);
10423
- footers.forEach(x => {
10424
- x.instance.session.displayData.resetAllNumberingInfo(0);
10425
- x.instance.session.displayData.updateNextLineIndexes(0, x.instance.session.displayData.paragraphs.length - 1);
10426
- });
10484
+ footers.forEach(x => x.instance.session.displayData.updateNextLineIndexes(0, x.instance.session.displayData.paragraphs.length - 1));
10427
10485
  }
10428
10486
  });
10429
10487
  }
10430
10488
  commentCreationSubscriptions() {
10431
10489
  return [
10432
- this.editorService.addCommentAtSelection$.subscribe(() => this.onCreateComment()),
10490
+ this.editorService.addCommentAtSelection$.subscribe(x => this.onCreateComment(x)),
10433
10491
  this.editorService.commentCreated$.subscribe(x => this.onCommentCreated(x.reqId, x.commentId))
10434
10492
  ];
10435
10493
  }
@@ -10449,6 +10507,12 @@ class Editor {
10449
10507
  setComentsVisibilitySubscription() {
10450
10508
  return this.editorService.setCommentsVisibility$.subscribe(x => this.onSetCommentsVisibility(x));
10451
10509
  }
10510
+ getCommentTextSubscription() {
10511
+ return this.editorService.getCommentText$.subscribe(x => this.onGetCommentText(x.commentId, x.continueWith));
10512
+ }
10513
+ replaceCommentTextSubscription() {
10514
+ return this.editorService.replaceCommentText$.subscribe(x => this.onCommentTextReplace(x.commentId, x.newContent));
10515
+ }
10452
10516
  recreateMainSession() {
10453
10517
  while (this.regulatorService.sessions.length > 0) {
10454
10518
  const session = this.regulatorService.sessions[0];
@@ -10502,7 +10566,7 @@ class Editor {
10502
10566
  const mainRect = this.mainRenderer.container.getBoundingClientRect();
10503
10567
  const rect = this.renderer.container.getBoundingClientRect();
10504
10568
  const hintX = mainRect.right - 20;
10505
- const hintY = rect.top + cursor.pageY + cursor.lineHeight / 2 - 20;
10569
+ const hintY = rect.top + cursor.pageY + cursor.height / 2 - 20;
10506
10570
  this.overlayService.open(CommentPopupComponent, {}, hintX, hintY);
10507
10571
  event?.stopPropagation();
10508
10572
  }
@@ -10570,7 +10634,7 @@ class EditorSearchBarComponent {
10570
10634
  this.editorService.replaceCurrentSearchResult();
10571
10635
  }
10572
10636
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorSearchBarComponent, deps: [{ token: EditorService }, { token: i0.DestroyRef }], target: i0.ɵɵFactoryTarget.Component }); }
10573
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: EditorSearchBarComponent, isStandalone: true, selector: "app-nod-editor-search-bar", providers: [ExternalElementService], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "@let searchResultCount = searchResultCount$ | async;\n@let searchResultIndex = searchResultIndex$ | async;\n@let isViewOnly = isViewOnly$ | async;\n<div class=\"line search-form\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.SEARCH_FOR' | translate }}</mat-label>\n <input\n matInput\n #searchInput\n [formControl]=\"searchControl\"\n (keydown.enter)=\"findNext()\" />\n </mat-form-field>\n <div>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"findPrev()\">\n <mat-icon\n fontSet=\"noder-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=\"noder-icon\"\n fontIcon=\"icon-arrow-onright\"></mat-icon>\n </button>\n </div>\n</div>\n@if (isReplace) {\n <div class=\"replace-form\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.REPLACE_WITH' | translate }}</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 {{ 'NODER.LABEL.REPLACE' | translate }}\n </button>\n </div>\n}\n<div class=\"search-options\">\n <button\n type=\"button\"\n [disabled]=\"isViewOnly\"\n mat-icon-button\n matTooltip=\"Toggle Replace Mode\"\n (click)=\"setReplace()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ isReplace ? 'icon-arrow-up' : 'icon-arrow-down' }}\"></mat-icon>\n </button>\n <div class=\"counter\">\n @if (searchResultCount) {\n <span>\n {{ 'NODER.COMPLEX_LABEL.OF_COUNTER' | translate: { current: searchResultIndex, total: searchResultCount ?? 0 } }}\n </span>\n } @else {\n <span>{{ 'NODER.LABEL.NO_RESULTS' | translate }}</span>\n }\n </div>\n <button\n type=\"button\"\n mat-icon-button\n [matTooltip]=\"'NODER.LABEL.CLOSE' | translate\"\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n </button>\n</div>\n", styles: [":host{min-height:56px;max-width:100%;display:block;font-size:10px;border-style:solid;border-radius:0 0 4px 4px;border-width:1px;border-top:none}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.close-icon{position:absolute;right:1px;top:1px}.search-form,.replace-form,.search-options{margin:8px 6px 0 0;display:flex;gap:8px}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: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i5$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10637
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: EditorSearchBarComponent, isStandalone: true, selector: "app-nod-editor-search-bar", providers: [ExternalElementService], viewQueries: [{ propertyName: "searchInput", first: true, predicate: ["searchInput"], descendants: true }], ngImport: i0, template: "@let searchResultCount = searchResultCount$ | async;\n@let searchResultIndex = searchResultIndex$ | async;\n@let isViewOnly = isViewOnly$ | async;\n<div class=\"line search-form\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.SEARCH_FOR' | translate }}</mat-label>\n <input\n matInput\n #searchInput\n [formControl]=\"searchControl\"\n (keydown.enter)=\"findNext()\" />\n </mat-form-field>\n <div>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"findPrev()\">\n <mat-icon\n fontSet=\"noder-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=\"noder-icon\"\n fontIcon=\"icon-arrow-onright\"></mat-icon>\n </button>\n </div>\n</div>\n@if (isReplace) {\n <div class=\"replace-form\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.REPLACE_WITH' | translate }}</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 {{ 'NODER.LABEL.REPLACE' | translate }}\n </button>\n </div>\n}\n<div class=\"search-options\">\n <button\n type=\"button\"\n [disabled]=\"isViewOnly\"\n mat-icon-button\n matTooltip=\"Toggle Replace Mode\"\n (click)=\"setReplace()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ isReplace ? 'icon-arrow-up' : 'icon-arrow-down' }}\"></mat-icon>\n </button>\n <div class=\"counter\">\n @if (searchResultCount) {\n <span>\n {{ 'NODER.COMPLEX_LABEL.OF_COUNTER' | translate: { current: searchResultIndex, total: searchResultCount ?? 0 } }}\n </span>\n } @else {\n <span>{{ 'NODER.LABEL.NO_RESULTS' | translate }}</span>\n }\n </div>\n <button\n type=\"button\"\n mat-icon-button\n [matTooltip]=\"'NODER.LABEL.CLOSE' | translate\"\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n </button>\n</div>\n", styles: [":host{min-height:56px;max-width:100%;display:block;font-size:10px;border-style:solid;border-radius:0 0 4px 4px;border-width:1px;border-top:none}:host ::ng-deep .mat-mdc-form-field-subscript-wrapper{display:none}.close-icon{position:absolute;right:1px;top:1px}.search-form,.replace-form,.search-options{margin:8px 6px 0 0;display:flex;gap:8px}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: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "component", type: i5$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10574
10638
  }
10575
10639
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorSearchBarComponent, decorators: [{
10576
10640
  type: Component,
@@ -10687,10 +10751,47 @@ class CellSessionSourceModel {
10687
10751
  }
10688
10752
  }
10689
10753
 
10754
+ const DisplayValue = {
10755
+ char: 1,
10756
+ customContent: 3,
10757
+ table: 4,
10758
+ pageBreak: 5,
10759
+ lineBreak: 6,
10760
+ punctuation: 9,
10761
+ space: 10,
10762
+ tab: 11,
10763
+ paragraph: 13,
10764
+ hyphen: 14
10765
+ };
10766
+
10690
10767
  class DisplayToken {
10768
+ get isSpace() {
10769
+ return this.displayValue === DisplayValue.space;
10770
+ }
10771
+ get isParagraph() {
10772
+ return this.displayValue === DisplayValue.paragraph;
10773
+ }
10774
+ get isPageBreak() {
10775
+ return this.displayValue === DisplayValue.pageBreak;
10776
+ }
10777
+ get isLineBreak() {
10778
+ return this.displayValue === DisplayValue.lineBreak;
10779
+ }
10780
+ get isTab() {
10781
+ return this.displayValue === DisplayValue.tab;
10782
+ }
10783
+ get isTable() {
10784
+ return this.displayValue === DisplayValue.table;
10785
+ }
10786
+ get isWhiteSpace() {
10787
+ return this.isSpace || this.isParagraph;
10788
+ }
10691
10789
  get breaksLine() {
10692
10790
  return this.isPageBreak || this.isLineBreak;
10693
10791
  }
10792
+ get breakable() {
10793
+ return this.displayValue !== DisplayValue.char && this.displayValue !== DisplayValue.punctuation;
10794
+ }
10694
10795
  constructor(fields) {
10695
10796
  if (!fields) {
10696
10797
  return;
@@ -10699,79 +10800,28 @@ class DisplayToken {
10699
10800
  }
10700
10801
  }
10701
10802
 
10702
- class IndentModel {
10703
- constructor(firstLine, hanging, left, right) {
10704
- this.firstLine = firstLine;
10705
- this.hanging = hanging;
10706
- this.left = left;
10707
- this.right = right;
10803
+ class NoderTabComponent extends BaseNoderComponent {
10804
+ get tab() {
10805
+ return this.content;
10708
10806
  }
10709
- }
10710
-
10711
- class LineInfoModel {
10712
- constructor(fields) {
10713
- if (!fields) {
10714
- return;
10715
- }
10716
- Object.assign(this, fields);
10717
- }
10718
- }
10719
-
10720
- class DisplayTokenHelper {
10721
- static getDisplayValue(charCode) {
10722
- if (charCode === 32) {
10723
- return DisplayValue.space;
10724
- }
10725
- if ((charCode > 39 && charCode < 48) || (charCode > 57 && charCode < 64)) {
10726
- return DisplayValue.punctuation;
10727
- }
10728
- return DisplayValue.char;
10729
- }
10730
- static getLineInfoFromToken(prevToken, firstWrapToken, wrapTokens, isAfterPageBreak) {
10731
- const info = new LineInfoModel({
10732
- width: 0,
10733
- height: 0,
10734
- align: prevToken.align,
10735
- indent: new IndentModel(prevToken.indentFirstLine, prevToken.indentHanging, prevToken.indentLeft, prevToken.indentRight),
10736
- offsetBefore: prevToken.indentBefore,
10737
- offsetAfter: prevToken.indentAfter,
10738
- lineSpacing: prevToken.lineSpacing,
10739
- markerWidth: prevToken.markerWidth,
10740
- isAfterPageBreak,
10741
- isEndedByPageBreak: prevToken.isPageBreak,
10742
- isNumbering: prevToken.isNumbering
10743
- });
10744
- if (firstWrapToken) {
10745
- info.align = firstWrapToken.align;
10746
- info.indent.firstLine = firstWrapToken.indentFirstLine;
10747
- info.indent.hanging = firstWrapToken.indentHanging;
10748
- info.indent.left = firstWrapToken.indentLeft;
10749
- info.indent.right = firstWrapToken.indentRight;
10750
- info.offsetBefore = firstWrapToken.indentBefore;
10751
- info.offsetAfter = firstWrapToken.indentAfter;
10752
- info.lineSpacing = firstWrapToken.lineSpacing;
10753
- info.hasTable = firstWrapToken.isTable;
10754
- info.isNumbering = firstWrapToken.isNumbering;
10755
- info.markerWidth = firstWrapToken.markerWidth;
10756
- }
10757
- let maxAscent = 0;
10758
- let maxDescent = 0;
10759
- const tokens = isAfterPageBreak && !wrapTokens.length ? [prevToken] : wrapTokens;
10760
- for (const wrapToken of tokens) {
10761
- if (maxAscent < wrapToken.ascent) {
10762
- maxAscent = wrapToken.ascent;
10763
- }
10764
- if (maxDescent < wrapToken.descent) {
10765
- maxDescent = wrapToken.descent;
10766
- }
10767
- info.width += wrapToken.width;
10768
- }
10769
- info.maxAscent = maxAscent;
10770
- info.height = maxAscent + maxDescent;
10771
- info.offsetAfter = info.height * (info.lineSpacing - 1);
10772
- return info;
10807
+ set tab(val) {
10808
+ this.content = val;
10773
10809
  }
10810
+ initialize() {
10811
+ this.applySize(this.tab.width);
10812
+ }
10813
+ applySize(width) {
10814
+ this.width.set(ScalingHelper.scale(width, this.generalProperties.scalingRatio));
10815
+ }
10816
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTabComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
10817
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderTabComponent, isStandalone: false, selector: "app-nod-tab", host: { properties: { "style.min-width.px": "width()" } }, usesInheritance: true, ngImport: i0, template: "&emsp;\n", styles: [":host{position:relative;outline:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
10774
10818
  }
10819
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTabComponent, decorators: [{
10820
+ type: Component,
10821
+ args: [{ selector: 'app-nod-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, host: {
10822
+ '[style.min-width.px]': 'width()'
10823
+ }, template: "&emsp;\n", styles: [":host{position:relative;outline:none}\n"] }]
10824
+ }] });
10775
10825
 
10776
10826
  class CellDataModel {
10777
10827
  constructor(cell, cellContentHeight, componentRef) {
@@ -11000,7 +11050,7 @@ class NoderTableCellComponent {
11000
11050
  }, options);
11001
11051
  }
11002
11052
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTableCellComponent, deps: [{ token: EditorService }, { token: RegulatorService }], target: i0.ɵɵFactoryTarget.Component }); }
11003
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderTableCellComponent, isStandalone: false, selector: "app-nod-table-cell", inputs: { table: "table", cell: "cell", rowIndex: "rowIndex", cellIndex: "cellIndex", columnIndex: "columnIndex", width: "width", parentSessionId: "parentSessionId", generalProperties: "generalProperties", heightChanged: "heightChanged", startResizing: "startResizing" }, host: { properties: { "class.highlighted": "this.isHighlighted", "attr.data-session-id": "this.sessionId" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }], ngImport: i0, template: "<div\n *ngIf=\"cellIndex === 0\"\n class=\"resizer left-border\"\n (mousedown)=\"onStartResizing($event, resizerBorder.Left)\"></div>\n<div\n #container\n class=\"edit-container\"></div>\n<div class=\"highlight-container\"></div>\n<div\n class=\"resizer right-border\"\n (mousedown)=\"onStartResizing($event, resizerBorder.Right)\"></div>\n", styles: [".highlight-container{visibility:hidden;position:absolute;width:100%;height:100%;background-color:#5ea8f766;pointer-events:none;overflow:hidden}:host{display:flex;position:relative;min-height:19px;height:100%;background:transparent}:host.highlighted .highlight-container{visibility:visible}.edit-container{min-height:1px;overflow:hidden}.left-border{left:-6px}.resizer{cursor:col-resize;width:11px;height:100%;position:absolute;z-index:1}.right-border{right:-6px}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11053
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderTableCellComponent, isStandalone: false, selector: "app-nod-table-cell", inputs: { table: "table", cell: "cell", rowIndex: "rowIndex", cellIndex: "cellIndex", columnIndex: "columnIndex", width: "width", parentSessionId: "parentSessionId", generalProperties: "generalProperties", heightChanged: "heightChanged", startResizing: "startResizing" }, host: { properties: { "class.highlighted": "this.isHighlighted", "attr.data-session-id": "this.sessionId" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }], ngImport: i0, template: "<div\n *ngIf=\"cellIndex === 0\"\n class=\"resizer left-border\"\n (mousedown)=\"onStartResizing($event, resizerBorder.Left)\"></div>\n<div\n #container\n class=\"edit-container\"></div>\n<div class=\"highlight-container\"></div>\n<div\n class=\"resizer right-border\"\n (mousedown)=\"onStartResizing($event, resizerBorder.Right)\"></div>\n", styles: [".highlight-container{visibility:hidden;position:absolute;width:100%;height:100%;background-color:#5ea8f766;pointer-events:none;overflow:hidden}:host{display:flex;position:relative;min-height:19px;height:100%;background:transparent}:host.highlighted .highlight-container{visibility:visible}.edit-container{min-height:1px;overflow:hidden}.left-border{left:-6px}.resizer{cursor:col-resize;width:11px;height:100%;position:absolute;z-index:1}.right-border{right:-6px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11004
11054
  }
11005
11055
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTableCellComponent, decorators: [{
11006
11056
  type: Component,
@@ -11195,13 +11245,13 @@ class TableOverlayMenuComponent {
11195
11245
  this.editorService.removeTable(this.tableInsertIndex, this.sessionId);
11196
11246
  this.overlayService.close();
11197
11247
  }
11198
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableOverlayMenuComponent, deps: [{ token: EditorService }, { token: OverlayService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
11199
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: TableOverlayMenuComponent, isStandalone: false, selector: "app-nod-table-overlay-menu", inputs: { selectionRange: "selectionRange", targets: "targets", canRemoveRows: "canRemoveRows", canRemoveColumns: "canRemoveColumns", tableInsertIndex: "tableInsertIndex", sessionId: "sessionId" }, ngImport: i0, template: "<div\n class=\"menu-item\"\n (click)=\"onInsertRowsAbove()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertRowsAboveMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertRowsBelow()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertRowsBelowMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertColumnsLeft()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertColumnsLeftMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertColumnsRight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertColumnsRightMessage }}\n</div>\n<ng-container *ngIf=\"canRemoveRows || canRemoveColumns\">\n <div class=\"menu-separator\">\n <div class=\"menu-separator-top\"></div>\n <div class=\"menu-separator-bottom\"></div>\n </div>\n <div\n *ngIf=\"canRemoveRows\"\n class=\"menu-item\"\n (click)=\"onRemoveRows()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeRowsMessage }}\n </div>\n <div\n *ngIf=\"canRemoveColumns\"\n class=\"menu-item\"\n (click)=\"onRemoveColumns()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeColumnsMessage }}\n </div>\n <div\n class=\"menu-item\"\n (click)=\"onRemoveTable()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeTableMessage }}\n </div>\n</ng-container>\n", styles: [":host{position:absolute;border:1px solid transparent;border-radius:4px;box-shadow:0 2px 6px 2px #3c404326;overflow-y:auto;background:#fff;cursor:default;font-size:13px;margin:0;padding:6px 0}.menu-item{display:flex;flex-direction:row;align-items:center;cursor:pointer;min-height:20px;color:#202124;font-size:16px;letter-spacing:.2px;line-height:20px;padding:6px}.menu-item:hover{background-color:#0000001a}.mat-icon{margin-right:6px;width:20px;height:20px;font-size:20px}.menu-separator{-webkit-user-select:none;user-select:none}.menu-separator .menu-separator-top{padding:4px}.menu-separator .menu-separator-bottom{border-top:1px solid #dadce0;padding:4px}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11248
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableOverlayMenuComponent, deps: [{ token: EditorService }, { token: OverlayService }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
11249
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: TableOverlayMenuComponent, isStandalone: false, selector: "app-nod-table-overlay-menu", inputs: { selectionRange: "selectionRange", targets: "targets", canRemoveRows: "canRemoveRows", canRemoveColumns: "canRemoveColumns", tableInsertIndex: "tableInsertIndex", sessionId: "sessionId" }, ngImport: i0, template: "<div\n class=\"menu-item\"\n (click)=\"onInsertRowsAbove()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertRowsAboveMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertRowsBelow()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertRowsBelowMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertColumnsLeft()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertColumnsLeftMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertColumnsRight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertColumnsRightMessage }}\n</div>\n<ng-container *ngIf=\"canRemoveRows || canRemoveColumns\">\n <div class=\"menu-separator\">\n <div class=\"menu-separator-top\"></div>\n <div class=\"menu-separator-bottom\"></div>\n </div>\n <div\n *ngIf=\"canRemoveRows\"\n class=\"menu-item\"\n (click)=\"onRemoveRows()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeRowsMessage }}\n </div>\n <div\n *ngIf=\"canRemoveColumns\"\n class=\"menu-item\"\n (click)=\"onRemoveColumns()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeColumnsMessage }}\n </div>\n <div\n class=\"menu-item\"\n (click)=\"onRemoveTable()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeTableMessage }}\n </div>\n</ng-container>\n", styles: [":host{position:absolute;border:1px solid transparent;border-radius:4px;box-shadow:0 2px 6px 2px #3c404326;overflow-y:auto;background:#fff;cursor:default;font-size:13px;margin:0;padding:6px 0}.menu-item{display:flex;flex-direction:row;align-items:center;cursor:pointer;min-height:20px;color:#202124;font-size:16px;letter-spacing:.2px;line-height:20px;padding:6px}.menu-item:hover{background-color:#0000001a}.mat-icon{margin-right:6px;width:20px;height:20px;font-size:20px}.menu-separator{-webkit-user-select:none;user-select:none}.menu-separator .menu-separator-top{padding:4px}.menu-separator .menu-separator-bottom{border-top:1px solid #dadce0;padding:4px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
11200
11250
  }
11201
11251
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableOverlayMenuComponent, decorators: [{
11202
11252
  type: Component,
11203
11253
  args: [{ selector: 'app-nod-table-overlay-menu', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div\n class=\"menu-item\"\n (click)=\"onInsertRowsAbove()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertRowsAboveMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertRowsBelow()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertRowsBelowMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertColumnsLeft()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertColumnsLeftMessage }}\n</div>\n<div\n class=\"menu-item\"\n (click)=\"onInsertColumnsRight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n {{ insertMessages.insertColumnsRightMessage }}\n</div>\n<ng-container *ngIf=\"canRemoveRows || canRemoveColumns\">\n <div class=\"menu-separator\">\n <div class=\"menu-separator-top\"></div>\n <div class=\"menu-separator-bottom\"></div>\n </div>\n <div\n *ngIf=\"canRemoveRows\"\n class=\"menu-item\"\n (click)=\"onRemoveRows()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeRowsMessage }}\n </div>\n <div\n *ngIf=\"canRemoveColumns\"\n class=\"menu-item\"\n (click)=\"onRemoveColumns()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeColumnsMessage }}\n </div>\n <div\n class=\"menu-item\"\n (click)=\"onRemoveTable()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n {{ removeMessages.removeTableMessage }}\n </div>\n</ng-container>\n", styles: [":host{position:absolute;border:1px solid transparent;border-radius:4px;box-shadow:0 2px 6px 2px #3c404326;overflow-y:auto;background:#fff;cursor:default;font-size:13px;margin:0;padding:6px 0}.menu-item{display:flex;flex-direction:row;align-items:center;cursor:pointer;min-height:20px;color:#202124;font-size:16px;letter-spacing:.2px;line-height:20px;padding:6px}.menu-item:hover{background-color:#0000001a}.mat-icon{margin-right:6px;width:20px;height:20px;font-size:20px}.menu-separator{-webkit-user-select:none;user-select:none}.menu-separator .menu-separator-top{padding:4px}.menu-separator .menu-separator-bottom{border-top:1px solid #dadce0;padding:4px}\n"] }]
11204
- }], ctorParameters: () => [{ type: EditorService }, { type: OverlayService }, { type: i3.TranslateService }], propDecorators: { selectionRange: [{
11254
+ }], ctorParameters: () => [{ type: EditorService }, { type: OverlayService }, { type: i6.TranslateService }], propDecorators: { selectionRange: [{
11205
11255
  type: Input
11206
11256
  }], targets: [{
11207
11257
  type: Input
@@ -12008,195 +12058,156 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
12008
12058
  args: [{ selector: 'app-nod-table', template: '', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, 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"] }]
12009
12059
  }], ctorParameters: () => [{ type: ComponentService }, { type: i0.ElementRef }, { type: OverlayService }, { type: RegulatorService }] });
12010
12060
 
12011
- class NumberingDataModel {
12012
- constructor(fields) {
12013
- if (!fields) {
12014
- return;
12015
- }
12016
- Object.assign(this, fields);
12017
- }
12018
- }
12019
-
12020
- class NumberingParagraphStyleModel extends ParagraphStyleModel {
12021
- constructor(fields) {
12022
- super();
12023
- this.numberingType = null;
12024
- this.numberingLevelsStyles = null;
12025
- if (!fields) {
12026
- return;
12027
- }
12028
- Object.assign(this, fields);
12029
- }
12030
- }
12031
-
12032
- class NumberingHelper {
12033
- static getStyles(paragraphStyle, numberings) {
12034
- const numberingLevels = numberings.find(x => x.numberingId === paragraphStyle.numberingId).levels;
12035
- const numberingLevelsStyles = numberingLevels.reduce((prev, next) => `${prev}${next.marker}${next.markerType}`, '');
12036
- const level = numberingLevels.find(x => x.level === paragraphStyle.numberingLevel);
12037
- return new NumberingParagraphStyleModel({ ...paragraphStyle, numberingType: level.markerType, numberingLevelsStyles });
12038
- }
12039
- static find(numberings, id, level) {
12040
- const numbering = numberings.find(x => x.numberingId === id);
12041
- return numbering?.levels.find(x => x.level === level);
12042
- }
12043
- static calculateNumberingInfo(numberingId, level, marker, numberingInfo, numberings) {
12044
- const numberingModel = this.find(numberings, numberingId, level);
12045
- if (numberingModel?.markerType === NumberingMarkerType.Bullet) {
12046
- return;
12061
+ class DisplayTokenHelper {
12062
+ static getDisplayValue(charCode, breakType) {
12063
+ if (breakType === BreakTypes.Page) {
12064
+ return DisplayValue.pageBreak;
12047
12065
  }
12048
- this.calculateMarkerIndexes(numberingId, level, marker, numberingInfo);
12049
- }
12050
- static calculateMarkerIndexes(numberingId, level, marker, numberingInfo) {
12051
- if (!numberingId) {
12052
- return;
12066
+ if (breakType === BreakTypes.TextWrapping) {
12067
+ return DisplayValue.lineBreak;
12053
12068
  }
12054
- if (!numberingInfo[numberingId]?.length || !numberingInfo[numberingId][level]) {
12055
- numberingInfo[numberingId] ??= [];
12056
- return;
12069
+ if (charCode === 32) {
12070
+ return DisplayValue.space;
12057
12071
  }
12058
- if (!numberingInfo[numberingId][level]?.visited) {
12059
- if (!marker) {
12060
- numberingInfo[numberingId][level].markerIndex++;
12061
- return;
12062
- }
12063
- this.updateNumberingInfo(numberingInfo, marker, numberingId, level);
12072
+ if (charCode === 45) {
12073
+ return DisplayValue.hyphen;
12064
12074
  }
12065
- else {
12066
- numberingInfo[numberingId][level].markerIndex++;
12067
- for (let i = 0; i < numberingInfo[numberingId].length; i++) {
12068
- if (i >= level + 1) {
12069
- numberingInfo[numberingId][i].markerIndex = 0;
12070
- }
12071
- else {
12072
- if (numberingInfo[numberingId][i].markerIndex === 0) {
12073
- numberingInfo[numberingId][i].markerIndex++;
12074
- }
12075
- }
12076
- }
12075
+ if ((charCode > 39 && charCode < 48) || (charCode > 57 && charCode < 64)) {
12076
+ return DisplayValue.punctuation;
12077
12077
  }
12078
+ return DisplayValue.char;
12078
12079
  }
12079
- static getMarker(levelModel, numberingId, paragraphs, paragraphIndex, numberingInfo) {
12080
- let resultMarker = levelModel.marker;
12081
- let index = resultMarker.indexOf('%');
12082
- if (index === -1) {
12083
- return resultMarker;
12084
- }
12085
- if (numberingInfo[numberingId]?.length && numberingInfo[numberingId][levelModel.level]) {
12086
- return this.createMarkerString(numberingInfo, numberingId, levelModel.level);
12087
- }
12088
- while (index !== -1) {
12089
- const symbolLevelNumber = Number(resultMarker[index + 1]) - 1;
12090
- const levelIndex = this.getLevelIndex(paragraphs, paragraphIndex, numberingId, symbolLevelNumber);
12091
- const count = levelModel.startValue + levelIndex;
12092
- resultMarker = resultMarker.slice(0, index) + count.toString() + resultMarker.slice(index + 2);
12093
- index = resultMarker.indexOf('%');
12094
- }
12095
- numberingInfo[numberingId] ??= [];
12096
- this.updateNumberingInfo(numberingInfo, resultMarker, numberingId, levelModel.level);
12097
- const markerLevels = resultMarker.split('.');
12098
- if (levelModel.level !== 0 && markerLevels[markerLevels.length - 1] === '') {
12099
- return resultMarker.slice(0, -1);
12100
- }
12101
- return resultMarker;
12080
+ static getParagraphToken(paragraphSymbolStyle) {
12081
+ const size = FontMetrics.measureCharSize('0', ContentStyleHelper.getFontStylesString(paragraphSymbolStyle));
12082
+ return new DisplayToken({ ...size, displayValue: DisplayValue.paragraph });
12102
12083
  }
12103
- static createDataModel(numberings, paragraphs, paragraphIndex, numberingInfo) {
12104
- const paragraph = paragraphs[paragraphIndex];
12105
- const numberingId = paragraph?.paragraphStyle.numberingId;
12106
- if (!numberingId) {
12107
- return new NumberingDataModel({ numberingId: null });
12108
- }
12109
- const level = paragraph.paragraphStyle.numberingLevel;
12110
- const numberingLevelModel = this.find(numberings, numberingId, level);
12111
- for (let i = 0; i < level; i++) {
12112
- if (!numberingInfo[numberingId] || !numberingInfo[numberingId][i]) {
12113
- const numberingLevel = this.find(numberings, numberingId, i);
12114
- this.getMarker(numberingLevel, numberingId, paragraphs, paragraphIndex, numberingInfo);
12115
- }
12084
+ static getSymbolToken(code, size, breakType) {
12085
+ const result = new DisplayToken({ ...size, displayValue: DisplayTokenHelper.getDisplayValue(code, breakType) });
12086
+ if (result.isSpace) {
12087
+ result.ascent = 0;
12088
+ result.descent = 0;
12089
+ result.height = 0;
12116
12090
  }
12117
- const marker = this.getMarker(numberingLevelModel, numberingId, paragraphs, paragraphIndex, numberingInfo);
12118
- return new NumberingDataModel({ numberingId, level, marker });
12091
+ return result;
12119
12092
  }
12120
- static updateMarkerData(properties, paragraph, paragraphTextStyle, paragraphStyle) {
12121
- const numberingLevel = NumberingHelper.find(properties.numberings, paragraph.numberingData.numberingId, paragraph.numberingData.level);
12122
- const markerTextStyle = ContentStyleHelper.combineTextStyles(numberingLevel.markerStyle, paragraphTextStyle);
12123
- const markerSizes = NumberingHelper.getMarkerSizes(paragraph.numberingData.marker, markerTextStyle);
12124
- paragraph.numberingData.markerTextStyle = markerTextStyle;
12125
- paragraph.numberingData.width = markerSizes.width;
12126
- paragraph.numberingData.height = markerSizes.height;
12127
- const indentLeft = paragraphStyle.indentLeft !== null ? paragraphStyle.indentLeft : numberingLevel.indentLeft;
12128
- let indent = 0;
12129
- if (paragraphStyle.indentHanging === null && paragraphStyle.indentFirstLine === null) {
12130
- indent = -numberingLevel.indentHanging;
12131
- }
12132
- else {
12133
- indent = paragraphStyle.indentHanging !== null ? -paragraphStyle.indentHanging : paragraphStyle.indentFirstLine;
12134
- }
12135
- paragraph.numberingData.paddingLeft = indentLeft + indent;
12093
+ static getComponentToken(component, size) {
12094
+ const ascent = component.instance.ascent() ?? 0;
12095
+ const descent = component.instance.descent() ?? 0;
12096
+ let displayValue = component.instance instanceof NoderTabComponent ? DisplayValue.tab : DisplayValue.customContent;
12097
+ displayValue = component.instance instanceof NoderTableComponent ? DisplayValue.table : displayValue;
12098
+ return new DisplayToken({
12099
+ width: component.instance.width(),
12100
+ height: ascent + descent,
12101
+ font: size.font,
12102
+ ascent,
12103
+ descent,
12104
+ displayValue
12105
+ });
12136
12106
  }
12137
- static getMarkerSizes(marker, markerStyle) {
12138
- let width = 0;
12139
- let height = 0;
12140
- const markerStylesString = ContentStyleHelper.getFontStylesString(markerStyle);
12141
- for (let char of marker) {
12142
- const markerCharSizes = FontMetrics.measureCharSize(char, markerStylesString);
12143
- width += markerCharSizes.width;
12144
- if (height < markerCharSizes.height) {
12145
- height = markerCharSizes.height;
12146
- }
12147
- }
12148
- return { height, width };
12107
+ }
12108
+
12109
+ class IndentModel {
12110
+ constructor(firstLine, hanging, left, right, markerWidth) {
12111
+ this.firstLine = firstLine;
12112
+ this.hanging = hanging;
12113
+ this.left = left;
12114
+ this.right = right;
12115
+ this.markerWidth = markerWidth;
12149
12116
  }
12150
- static updateNumberingInfo(numberingInfo, marker, numberingId, level) {
12151
- if (!numberingInfo[numberingId]) {
12117
+ }
12118
+
12119
+ class LineInfoModel {
12120
+ constructor(fields) {
12121
+ if (!fields) {
12152
12122
  return;
12153
12123
  }
12154
- const markerLevels = this.getLevelInfo(marker);
12155
- const lastMarkerLevel = markerLevels.length - 1;
12156
- numberingInfo[numberingId][level] = {
12157
- markerIndex: markerLevels[lastMarkerLevel],
12158
- markerLevel: Math.min(lastMarkerLevel, level),
12159
- visited: true
12160
- };
12124
+ Object.assign(this, fields);
12161
12125
  }
12162
- static getLevelIndex(paragraphs, paragraphIndex, numberingId, numberingLevel) {
12163
- let index = 0;
12164
- let isOnlySubLevelsBefore = false;
12165
- for (let i = paragraphIndex; i >= 0; i--) {
12166
- if (paragraphs[i].paragraphStyle.numberingId !== numberingId) {
12167
- continue;
12168
- }
12169
- if (paragraphs[i].paragraphStyle.numberingLevel < numberingLevel) {
12170
- break;
12171
- }
12172
- if (paragraphs[i].paragraphStyle.numberingLevel > numberingLevel) {
12173
- isOnlySubLevelsBefore = true;
12126
+ }
12127
+
12128
+ class LineInfoHelper {
12129
+ static get(tokens, isAfterPageBreak, isLastLine, style, indent, isNumbering, width, defaultHeight, defaultAscent) {
12130
+ const result = new LineInfoModel({
12131
+ isAfterPageBreak,
12132
+ isEndedByPageBreak: tokens[tokens.length - 1].isPageBreak,
12133
+ backgroundColor: style.backgroundColor,
12134
+ align: style.alignment ?? DEFAULT_PARAGRAPH_STYLE.alignment,
12135
+ indent,
12136
+ offsetBefore: DEFAULT_PARAGRAPH_STYLE.spaceBefore,
12137
+ lineSpacing: style.lineSpacing ?? DEFAULT_PARAGRAPH_STYLE.lineSpacing,
12138
+ isNumbering,
12139
+ hasTable: false,
12140
+ width: 0
12141
+ });
12142
+ let maxAscent = 0;
12143
+ let maxDescent = 0;
12144
+ for (const token of tokens) {
12145
+ if (maxAscent < token.ascent) {
12146
+ maxAscent = token.ascent;
12147
+ }
12148
+ if (maxDescent < token.descent) {
12149
+ maxDescent = token.descent;
12150
+ }
12151
+ result.width += token.width;
12152
+ }
12153
+ result.height = maxAscent + maxDescent;
12154
+ result.ascent = maxAscent;
12155
+ if (result.height === 0) {
12156
+ result.height = defaultHeight;
12157
+ result.ascent = defaultAscent;
12158
+ }
12159
+ result.offsetAfter = result.height * (result.lineSpacing - 1);
12160
+ if (style.alignment === Alignment$1.justify && !isLastLine) {
12161
+ let right = tokens.length - 1;
12162
+ let adjustableWidth = result.width;
12163
+ while (right > 0 && tokens[right].isSpace) {
12164
+ adjustableWidth -= tokens[right].width;
12165
+ right--;
12166
+ }
12167
+ let left = 0;
12168
+ while (left < tokens.length - 1 && tokens[left].isSpace) {
12169
+ left++;
12170
+ }
12171
+ let spaces = 0;
12172
+ for (let i = right; i > left; i--) {
12173
+ if (tokens[i].isTab) {
12174
+ left = i;
12175
+ }
12176
+ if (tokens[i].isSpace) {
12177
+ spaces++;
12178
+ }
12174
12179
  }
12175
- else {
12176
- index++;
12177
- isOnlySubLevelsBefore = false;
12180
+ const indentWidth = (indent.left ?? 0) + (indent.right ?? 0) + (indent.firstLine ?? 0) - (indent.hanging ?? 0);
12181
+ const availableWidth = width - indentWidth - indent.markerWidth; // todo: use NumberingHelper.getOffsetCausedByMarker
12182
+ const whitespaceDeficit = availableWidth - adjustableWidth;
12183
+ if (spaces > 0 && whitespaceDeficit > 0) {
12184
+ result.wordSpacing = whitespaceDeficit / spaces;
12185
+ result.width = availableWidth;
12186
+ result.wordSpacingStart = left;
12187
+ result.wordSpacingEnd = right;
12188
+ for (let i = right; i > left; i--) {
12189
+ if (tokens[i].isSpace) {
12190
+ tokens[i].width += result.wordSpacing;
12191
+ }
12192
+ }
12178
12193
  }
12179
12194
  }
12180
- index = isOnlySubLevelsBefore ? index + 1 : index;
12181
- return index <= 0 ? 0 : index - 1;
12182
- }
12183
- static getLevelInfo(input) {
12184
- return input
12185
- .split('.')
12186
- .filter(x => !!x)
12187
- .map(x => parseInt(x));
12195
+ return result;
12188
12196
  }
12189
- static createMarkerString(numberingInfo, numberingId, level) {
12190
- if (level === 0) {
12191
- return numberingInfo[numberingId][level].markerIndex + '.';
12192
- }
12193
- let marker = [];
12194
- let { markerLevel, markerIndex } = numberingInfo[numberingId][level];
12195
- for (let i = 0; i < markerLevel; i++) {
12196
- marker.push(numberingInfo[numberingId][i].markerIndex);
12197
+ static getFirstLineIndent(model, paragraphIndex, generalProperties) {
12198
+ const paragraph = model.paragraphs[paragraphIndex];
12199
+ const paragraphStyle = paragraph.paragraphStyle;
12200
+ if (paragraphStyle.numberingId === null) {
12201
+ return new IndentModel(paragraph.paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine, paragraph.paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging, paragraph.paragraphStyle.indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight, 0);
12197
12202
  }
12198
- marker.push(markerIndex);
12199
- return marker.join('.');
12203
+ const levelsModel = NumberingHelper.findNumberingLevels(generalProperties.numberings, paragraphStyle.numberingId);
12204
+ const paragraphFormat = FormatStyleHelper.getFormatAtIndex(model.formats, paragraph.insertIndex);
12205
+ const markerTextStyle = ContentStyleHelper.combineTextStyles(levelsModel[paragraphStyle.numberingLevel].markerStyle, paragraphFormat.textStyle);
12206
+ const marker = NumberingHelper.getMarker(levelsModel, paragraphStyle.numberingLevel, paragraphStyle.numberingId, generalProperties.numberingInfo);
12207
+ const markerWidth = NumberingHelper.getMarkerSizes(marker, markerTextStyle).width;
12208
+ return new IndentModel(paragraph.paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine, DEFAULT_PARAGRAPH_STYLE.indentHanging, paragraph.paragraphStyle.indentLeft !== null
12209
+ ? paragraph.paragraphStyle.indentLeft
12210
+ : levelsModel[paragraphStyle.numberingLevel].indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight, markerWidth + markerWidth / marker.length);
12200
12211
  }
12201
12212
  }
12202
12213
 
@@ -12279,20 +12290,14 @@ class PageFormat {
12279
12290
  }
12280
12291
  }
12281
12292
 
12282
- class TextLineInfo {
12293
+ class TextLineInfo extends LineInfoModel {
12283
12294
  constructor(offsetMargin, contentWidth, align, indent, fields) {
12295
+ super(fields);
12284
12296
  this.paddingLeft = 0;
12285
12297
  this.offsetMargin = 0;
12286
- this.offsetBefore = 0;
12287
- this.offsetAfter = 0;
12288
12298
  this.firstLinePageOffset = 0; // for selection
12289
12299
  this.endPageOffset = 0; // for selection
12290
12300
  this.screenLine = 0;
12291
- this.isAfterPageBreak = false;
12292
- this.isEndedByPageBreak = false;
12293
- if (fields) {
12294
- Object.assign(this, fields);
12295
- }
12296
12301
  this.indentFirstLine = indent.firstLine;
12297
12302
  this.offsetMargin = offsetMargin;
12298
12303
  this.indentLeft = indent.left;
@@ -12414,47 +12419,6 @@ class ParagraphInfosRemoved {
12414
12419
  }
12415
12420
  }
12416
12421
 
12417
- class ParagraphStyleHelper {
12418
- static getParagraphsAtRange(paragraphs, startIndex, endIndex) {
12419
- if (!paragraphs?.length) {
12420
- return [];
12421
- }
12422
- let firstModifierIndexInRange = paragraphs.findIndex(paragraph => paragraph.insertIndex >= startIndex);
12423
- firstModifierIndexInRange = firstModifierIndexInRange === -1 ? paragraphs.length : firstModifierIndexInRange;
12424
- let lastModifierIndexInRange = paragraphs.findIndex(x => x.insertIndex >= endIndex);
12425
- lastModifierIndexInRange =
12426
- startIndex === endIndex || lastModifierIndexInRange === -1 ? firstModifierIndexInRange : lastModifierIndexInRange;
12427
- return paragraphs.slice(firstModifierIndexInRange, lastModifierIndexInRange + 1);
12428
- }
12429
- static getParagraphAtIndex(paragraphs, insertIndex) {
12430
- if (!paragraphs?.length) {
12431
- return null;
12432
- }
12433
- let startIndex = 0;
12434
- let endIndex = paragraphs.length - 1;
12435
- while (startIndex <= endIndex) {
12436
- const middleIndex = Math.round((startIndex + endIndex) / 2);
12437
- const paragraph = paragraphs[middleIndex];
12438
- if (paragraph.insertIndex < insertIndex) {
12439
- startIndex = middleIndex + 1;
12440
- }
12441
- else {
12442
- endIndex = middleIndex - 1;
12443
- }
12444
- }
12445
- return paragraphs[startIndex];
12446
- }
12447
- static isEndOfParagraph(paragraphs, endIndex) {
12448
- const paragraph = this.getParagraphAtIndex(paragraphs, endIndex);
12449
- let paragraphIndex = paragraphs.findIndex(x => x === paragraph);
12450
- const endOfParagraphIsParagraph = paragraph && endIndex === paragraph.insertIndex && paragraphs.length - 1 > paragraphIndex;
12451
- if (endOfParagraphIsParagraph) {
12452
- paragraphIndex += 1;
12453
- }
12454
- return paragraphs[paragraphIndex].insertIndex === endIndex + 1;
12455
- }
12456
- }
12457
-
12458
12422
  var TabAlignment;
12459
12423
  (function (TabAlignment) {
12460
12424
  TabAlignment[TabAlignment["Left"] = 0] = "Left";
@@ -12464,14 +12428,6 @@ var TabAlignment;
12464
12428
  TabAlignment[TabAlignment["Bar"] = 4] = "Bar";
12465
12429
  })(TabAlignment || (TabAlignment = {}));
12466
12430
 
12467
- class TabHelper {
12468
- static calculateTabWidth(rowWidth, defaultTabWidth, tabSettings) {
12469
- const tabs = tabSettings ?? [];
12470
- const nextSetting = tabs.find(x => x.position > rowWidth);
12471
- return nextSetting ? nextSetting.position - rowWidth : defaultTabWidth - (rowWidth % defaultTabWidth);
12472
- }
12473
- }
12474
-
12475
12431
  class DisplayData extends EventEmitting {
12476
12432
  get maxPageWidth() {
12477
12433
  let max = 0;
@@ -12498,7 +12454,6 @@ class DisplayData extends EventEmitting {
12498
12454
  this.paragraphs = [];
12499
12455
  this.pagesFormat = [];
12500
12456
  this.allPagesHeight = 0;
12501
- this.tabTokens = [];
12502
12457
  this.ParagraphInfoChanges = new Subject();
12503
12458
  this.lastParagraphId = 0;
12504
12459
  this.updateDataForModel();
@@ -12765,26 +12720,36 @@ class DisplayData extends EventEmitting {
12765
12720
  }
12766
12721
  if (paragraphSettings.numberingData.numberingId !== null) {
12767
12722
  const paragraphFormat = FormatStyleHelper.getFormatAtIndex(this.model.formats, this.model.paragraphs[index].insertIndex);
12768
- NumberingHelper.updateMarkerData(this.generalProperties, paragraphSettings, paragraphFormat.textStyle, this.model.paragraphs[index].paragraphStyle);
12723
+ NumberingHelper.updateMarkerData(this.generalProperties.numberings, paragraphSettings, paragraphFormat.textStyle, this.model.paragraphs[index].paragraphStyle);
12769
12724
  }
12770
12725
  }
12771
12726
  updateNextLineIndexes(firstParagraph, lastParagraph) {
12772
12727
  this.updateParagraphStartIndex(firstParagraph);
12773
12728
  let indexOfParagraphAfterPageBreak = this.getParagraphSettings(firstParagraph - 1)?.isEndedByPageBreak ? firstParagraph : -1;
12774
- let firstUsedTabIndex = this.model.tabs.findIndex(x => x.insertIndex >= this.paragraphs[firstParagraph].startIndex);
12729
+ let updateNumberingFromIndex = null;
12775
12730
  for (let i = firstParagraph; i <= lastParagraph; i++) {
12776
12731
  if (!this.paragraphs[i]) {
12777
12732
  continue;
12778
12733
  }
12779
- this.tabTokens = [];
12780
- const sameNumberingIndex = this.findSameNumberingIndex(i);
12781
- let marker = this.getParagraphSettings(sameNumberingIndex)?.numberingData.marker;
12782
- if (sameNumberingIndex < 0 && this.getParagraphSettings(i)?.numberingData.numberingId) {
12783
- marker = '0.';
12734
+ const numberingId = this.model.paragraphs[i].paragraphStyle.numberingId ?? this.getParagraphSettings(i)?.numberingData.numberingId;
12735
+ if (numberingId) {
12736
+ const numberingsLevels = NumberingHelper.findNumberingLevels(this.generalProperties.numberings, numberingId);
12737
+ NumberingHelper.addValueToNumberingInfo(numberingId, this.generalProperties.numberingInfo, numberingsLevels);
12738
+ let startNumberingParagraphIndex = i;
12739
+ while (this.isSameNumberingId(startNumberingParagraphIndex, numberingId)) {
12740
+ startNumberingParagraphIndex -= 1;
12741
+ }
12742
+ if (updateNumberingFromIndex === null || updateNumberingFromIndex > startNumberingParagraphIndex) {
12743
+ updateNumberingFromIndex = startNumberingParagraphIndex;
12744
+ }
12745
+ if (this.model.paragraphs[i].paragraphStyle.numberingId !== this.getParagraphSettings(i)?.numberingData.numberingId) {
12746
+ const updatedNumberingId = this.getParagraphSettings(i)?.numberingData.numberingId ?? this.model.paragraphs[i].paragraphStyle.numberingId;
12747
+ NumberingHelper.setNumberingNeedToRecalculate(this.generalProperties.numberingInfo, updatedNumberingId);
12748
+ }
12749
+ NumberingHelper.setNumberingNeedToRecalculate(this.generalProperties.numberingInfo, numberingId);
12784
12750
  }
12785
- NumberingHelper.calculateNumberingInfo(this.model.paragraphs[i].paragraphStyle.numberingId ?? this.getParagraphSettings(i)?.numberingData.numberingId ?? null, this.model.paragraphs[i].paragraphStyle.numberingLevel ?? this.getParagraphSettings(i)?.numberingData.level ?? null, marker, this.generalProperties.numberingInfo, this.generalProperties.numberings);
12786
12751
  const numberingData = NumberingHelper.createDataModel(this.generalProperties.numberings, this.model.paragraphs, i, this.generalProperties.numberingInfo);
12787
- const { splits, rowInfos } = this.getSplits(this.model, i);
12752
+ const { splits, rowInfos } = this.splitParagraphByLines(i);
12788
12753
  this.paragraphs[i].nextLineIndexes = splits;
12789
12754
  if (indexOfParagraphAfterPageBreak === i) {
12790
12755
  rowInfos[0].isAfterPageBreak = true;
@@ -12792,235 +12757,134 @@ class DisplayData extends EventEmitting {
12792
12757
  indexOfParagraphAfterPageBreak = rowInfos[rowInfos.length - 1].isEndedByPageBreak ? i + 1 : -1;
12793
12758
  this.setParagraphSettings(i, rowInfos, numberingData);
12794
12759
  this.updateParagraphSettingsNumberingData(i);
12795
- firstUsedTabIndex = this.updateParagraphTabs(firstUsedTabIndex, i);
12796
12760
  }
12761
+ this.updateNumberingsDataOnChange(updateNumberingFromIndex);
12797
12762
  this.getParagraphSettings(lastParagraph + 1)?.setIsAfterPageBreak(indexOfParagraphAfterPageBreak > -1);
12798
12763
  this.updateParagraphLineNumber(firstParagraph);
12799
12764
  this.processParagraphsProperties(firstParagraph);
12800
12765
  }
12766
+ isSameNumberingId(paragraphIndex, numberingId) {
12767
+ if (paragraphIndex === 0) {
12768
+ return false;
12769
+ }
12770
+ const startNumberingId = this.model.paragraphs[paragraphIndex].paragraphStyle.numberingId ??
12771
+ this.getParagraphSettings(paragraphIndex)?.numberingData.numberingId;
12772
+ return numberingId === startNumberingId;
12773
+ }
12801
12774
  updateNumberingsDataOnChange(index) {
12775
+ if (index === null) {
12776
+ return;
12777
+ }
12802
12778
  for (let i = index; i < this.paragraphs.length; i++) {
12803
12779
  const paragraphStyle = this.model.paragraphs[i].paragraphStyle;
12804
12780
  const paragraphSettings = this.getParagraphSettings(i);
12805
12781
  if (this.model.paragraphs[i].paragraphStyle.numberingId !== null) {
12806
- NumberingHelper.calculateNumberingInfo(paragraphStyle.numberingId, paragraphStyle.numberingLevel, paragraphSettings.numberingData.marker, this.generalProperties.numberingInfo, this.generalProperties.numberings);
12807
- paragraphSettings.numberingData = NumberingHelper.createDataModel(this.generalProperties.numberings, this.model.paragraphs, i, this.generalProperties.numberingInfo);
12808
- const paragraphFormat = FormatStyleHelper.getFormatAtIndex(this.model.formats, this.model.paragraphs[i].insertIndex);
12809
- NumberingHelper.updateMarkerData(this.generalProperties, paragraphSettings, paragraphFormat.textStyle, paragraphStyle);
12782
+ if (this.generalProperties.numberingInfo[paragraphStyle.numberingId][paragraphStyle.numberingLevel].needToRecalculate) {
12783
+ NumberingHelper.calculateNumberingInfo(paragraphStyle.numberingId, paragraphStyle.numberingLevel, this.generalProperties.numberingInfo, this.generalProperties.numberings);
12784
+ paragraphSettings.numberingData = NumberingHelper.createDataModel(this.generalProperties.numberings, this.model.paragraphs, i, this.generalProperties.numberingInfo);
12785
+ const paragraphFormat = FormatStyleHelper.getFormatAtIndex(this.model.formats, this.model.paragraphs[i].insertIndex);
12786
+ NumberingHelper.updateMarkerData(this.generalProperties.numberings, paragraphSettings, paragraphFormat.textStyle, paragraphStyle);
12787
+ }
12810
12788
  }
12811
12789
  const table = this.customContentService.findComponent(this.customComponents.tables, paragraphSettings.startInsertIndex);
12812
12790
  if (table) {
12813
12791
  table.instance.updateCells();
12814
12792
  }
12815
12793
  }
12794
+ NumberingHelper.setAllNumberingIsCalculated(this.generalProperties.numberingInfo);
12816
12795
  if ('pageType' in this.model) {
12817
12796
  this.editorService.updateEdges(this.sessionId);
12818
12797
  }
12819
12798
  }
12820
- resetAllNumberingInfo(paragraphIndex) {
12821
- for (let i = paragraphIndex; i < this.model.paragraphs.length; i++) {
12822
- const { numberingId } = this.model.paragraphs[i].paragraphStyle;
12823
- if (numberingId !== null && this.generalProperties.numberingInfo[numberingId]) {
12824
- this.generalProperties.numberingInfo[numberingId] = [];
12825
- }
12826
- }
12827
- }
12828
- resetNumberingInfoByTableCell(table) {
12829
- for (const element of table.instance.rowMatrix) {
12830
- for (let cell of element.cells) {
12831
- const { marker, numberingId, level } = cell.componentRef.instance.session.displayData.paragraphs[0].paragraphSettings.numberingData;
12832
- if (marker && numberingId) {
12833
- NumberingHelper.updateNumberingInfo(this.generalProperties.numberingInfo, marker, numberingId, level);
12834
- this.resetAllNumberingInfo(0);
12835
- return;
12836
- }
12837
- }
12838
- }
12839
- }
12840
- updateParagraphTabs(tabIndex, paragraphIndex) {
12841
- const paragraphContentLength = this.getParagraphContent(paragraphIndex).length;
12842
- const paragraphLastIndex = this.paragraphs[paragraphIndex].startIndex + paragraphContentLength;
12843
- if (tabIndex === -1 ||
12844
- tabIndex >= this.customComponents.tabs.length ||
12845
- this.customComponents.tabs[tabIndex].instance.insertIndex > paragraphLastIndex) {
12846
- return tabIndex;
12847
- }
12848
- const startIndex = tabIndex;
12849
- while (this.customComponents.tabs[tabIndex] && this.customComponents.tabs[tabIndex].instance.insertIndex <= paragraphLastIndex) {
12850
- this.customComponents.tabs[tabIndex].instance.applySize(this.tabTokens[tabIndex - startIndex].width);
12851
- tabIndex++;
12852
- }
12853
- return tabIndex;
12854
- }
12855
- getSplits(model, paragraphIndex) {
12856
- const paragraphContent = this.getParagraphContent(paragraphIndex);
12857
- const strTokens = this.getDisplayTokens(model, paragraphContent, this.paragraphs[paragraphIndex].startIndex);
12858
- if (!strTokens.length) {
12859
- const defaultRowInfo = new LineInfoModel({
12860
- height: (DEFAULT_FONT_SIZE * 4) / 3,
12861
- width: 0,
12862
- align: DEFAULT_PARAGRAPH_STYLE.alignment,
12863
- indent: new IndentModel(DEFAULT_PARAGRAPH_STYLE.indentFirstLine, DEFAULT_PARAGRAPH_STYLE.indentHanging, DEFAULT_PARAGRAPH_STYLE.indentLeft, DEFAULT_PARAGRAPH_STYLE.indentRight),
12864
- offsetAfter: DEFAULT_PARAGRAPH_STYLE.spaceAfter,
12865
- offsetBefore: DEFAULT_PARAGRAPH_STYLE.spaceBefore,
12866
- lineSpacing: DEFAULT_PARAGRAPH_STYLE.lineSpacing,
12867
- isAfterPageBreak: false,
12868
- isEndedByPageBreak: false,
12869
- markerWidth: 0,
12870
- isNumbering: false,
12871
- backgroundColor: DEFAULT_PARAGRAPH_STYLE.backgroundColor
12872
- });
12873
- return { splits: [], rowInfos: [defaultRowInfo] };
12874
- }
12799
+ splitParagraphByLines(paragraphIndex) {
12800
+ const paragraph = this.paragraphs[paragraphIndex];
12801
+ const { paragraphTokens, paragraphToken } = this.getParagraphTokens(paragraph);
12875
12802
  const splits = [];
12876
12803
  const rowInfos = [];
12877
- let prevToken;
12878
- let index = -1;
12879
- let initial = paragraphContent;
12880
- const pageFormat = this.getPageFormatAtPosition(this.paragraphs[paragraphIndex].startIndex);
12881
- while (index) {
12882
- initial = initial.slice(index > 0 ? index : 0);
12883
- const tokens = strTokens.slice(paragraphContent.length - initial.length);
12884
- if (!tokens.length) {
12885
- tokens.push(...this.getEmptyDisplayTokens(model, this.paragraphs[paragraphIndex].startIndex + index));
12886
- }
12887
- let wrapLimit = this.computeWrapIndex(tokens, pageFormat.contentWidth, this.generalProperties.defaultTabWidth, model.paragraphs[paragraphIndex].paragraphStyle.tabSettings);
12888
- if (tokens[tokens.length - 1].isPageBreak && wrapLimit === tokens.length && this.paragraphs.length > paragraphIndex + 1) {
12889
- wrapLimit = 0;
12890
- }
12891
- const wrapSplit = tokens[wrapLimit - 1]?.breaksLine || tokens[wrapLimit - 1]?.isTable ? wrapLimit : this.computeWrapSplit(tokens, wrapLimit);
12892
- const wrapTokens = tokens.slice(0, wrapSplit || undefined);
12893
- if (wrapTokens.length) {
12894
- prevToken = wrapTokens[wrapTokens.length - 1];
12895
- }
12896
- const isAfterPageBreak = !rowInfos.length ? false : rowInfos[rowInfos.length - 1].isEndedByPageBreak;
12897
- const lineInfo = DisplayTokenHelper.getLineInfoFromToken(prevToken, wrapTokens[0], wrapTokens, isAfterPageBreak);
12898
- const paragraphStyle = model.paragraphs[paragraphIndex].paragraphStyle;
12899
- lineInfo.backgroundColor = paragraphStyle.backgroundColor;
12900
- const isLastLineOfParagraph = !wrapLimit || prevToken.isLineBreak;
12901
- if (paragraphStyle.alignment === Alignment$1.justify && !isLastLineOfParagraph && wrapTokens.length > 1) {
12902
- let currentLineWidth = 0;
12903
- let spaceCount = wrapTokens[0].markerWidth ? 1 : 0;
12904
- for (let i = 0; i < wrapTokens.length; i++) {
12905
- const token = wrapTokens[i];
12906
- currentLineWidth += token.width;
12907
- if (token.displayValue === DisplayValue.space) {
12908
- if (i === wrapTokens.length - 1) {
12909
- token.displayValue = DisplayValue.trailingSpace;
12910
- }
12911
- else {
12912
- spaceCount++;
12913
- }
12914
- }
12804
+ const style = this.model.paragraphs[paragraphIndex].paragraphStyle;
12805
+ const pageFormat = this.getPageFormatAtPosition(paragraph.startIndex);
12806
+ const defaultHeight = paragraphToken.height;
12807
+ const defaultAscent = paragraphToken.ascent;
12808
+ let index = 0;
12809
+ let indent = LineInfoHelper.getFirstLineIndent(this.model, paragraphIndex, this.generalProperties);
12810
+ do {
12811
+ let tokens = paragraphTokens.slice(index);
12812
+ const maxWidth = pageFormat.contentWidth - indent.right - indent.markerWidth;
12813
+ let startWidth = indent.left + indent.firstLine - indent.hanging || 0;
12814
+ let last = this.computeWrapIndex(tokens, startWidth, maxWidth, style.tabSettings ?? []);
12815
+ tokens = tokens.slice(0, last + 1);
12816
+ const width = pageFormat.contentWidth;
12817
+ const isNumbering = index === 0 && !!indent.markerWidth;
12818
+ const isBreak = !rowInfos.length ? false : rowInfos[rowInfos.length - 1].isEndedByPageBreak;
12819
+ const isLast = index + last + 1 === paragraphTokens.length;
12820
+ const info = LineInfoHelper.get(tokens, isBreak, isLast, style, indent, isNumbering, width, defaultHeight, defaultAscent);
12821
+ for (let i = 0; i < tokens.length; i++) {
12822
+ if (tokens[i].isTab) {
12823
+ const tab = this.customComponents.tabs.find(x => x.instance.insertIndex === paragraph.startIndex + index + i);
12824
+ tab.instance.applySize(tokens[i].width);
12915
12825
  }
12916
- const { left, right, firstLine, hanging } = lineInfo.indent;
12917
- const indent = left + right + firstLine - hanging || 0;
12918
- const availableWidth = pageFormat.contentWidth - indent - wrapTokens[0].markerWidth;
12919
- const whitespaceDeficit = availableWidth - currentLineWidth;
12920
- if (spaceCount > 0 && whitespaceDeficit > 0) {
12921
- lineInfo.wordSpacing = whitespaceDeficit / spaceCount;
12922
- lineInfo.wordSpacingWidth = whitespaceDeficit;
12826
+ else if (tokens[i].isTable) {
12827
+ info.hasTable = true;
12923
12828
  }
12924
12829
  }
12925
- rowInfos.push(lineInfo);
12926
- if (!wrapLimit) {
12927
- break;
12830
+ rowInfos.push(info);
12831
+ index += last + 1;
12832
+ if (index < paragraphTokens.length) {
12833
+ splits.push(index);
12834
+ indent = new IndentModel(null, null, indent.left, indent.right, 0);
12928
12835
  }
12929
- index = wrapSplit;
12930
- const splitsLength = splits.length;
12931
- const splitIndex = splitsLength ? index + splits[splitsLength - 1] : index;
12932
- splits.push(splitIndex);
12933
- }
12934
- this.tabTokens.push(...strTokens.filter(x => x.isTab));
12935
- ParagraphHelper.applyParagraphIndentsToLines(rowInfos, paragraphIndex, model.paragraphs);
12836
+ } while (index < paragraphTokens.length);
12837
+ ParagraphHelper.applyParagraphIndentsToLines(rowInfos, paragraphIndex, this.model.paragraphs);
12936
12838
  return { splits, rowInfos };
12937
12839
  }
12938
- /**
12939
- * Given a string, returns an array of the display characters, including tabs and spaces and custom components.
12940
- */
12941
- getDisplayTokens(model, str, startIndex) {
12942
- if (!str.length) {
12943
- return this.getEmptyDisplayTokens(model, startIndex);
12944
- }
12945
- return this.fillLineTokens(startIndex, str, model);
12840
+ getParagraphTokens(paragraphInfo) {
12841
+ const paragraphSymbolIndex = paragraphInfo.startIndex + paragraphInfo.content.length;
12842
+ const { tokens, paragraphToken } = this.getTokens(paragraphInfo.startIndex, paragraphInfo.content, paragraphSymbolIndex);
12843
+ return { paragraphTokens: tokens, paragraphToken };
12844
+ }
12845
+ getParagraphLineTokens(paragraphIndex, lineIndex) {
12846
+ const paragraph = this.paragraphs[paragraphIndex];
12847
+ const lineStart = lineIndex > 0 ? paragraph.nextLineIndexes[lineIndex - 1] : 0;
12848
+ const lineEnd = paragraph.nextLineIndexes[lineIndex] ? paragraph.nextLineIndexes[lineIndex] : paragraph.content.length;
12849
+ const lineContent = paragraph.content.substring(lineStart, lineEnd);
12850
+ const paragraphSymbolIndex = paragraph.paragraphSettings.startInsertIndex + paragraph.content.length;
12851
+ const { tokens } = this.getTokens(lineStart + paragraph.startIndex, lineContent, paragraphSymbolIndex);
12852
+ const pageFormat = this.getPageFormatAtPosition(this.paragraphs[paragraphIndex].startIndex);
12853
+ const paragraphStyle = this.model.paragraphs[paragraphIndex].paragraphStyle;
12854
+ const lineInfo = paragraph.paragraphSettings.textLinesInfo[lineIndex];
12855
+ const maxWidth = pageFormat.contentWidth - lineInfo.indent.right - lineInfo.indent.markerWidth;
12856
+ const startWidth = lineInfo.indentLeft + lineInfo.indentFirstLine - lineInfo.indent.hanging || 0;
12857
+ this.computeWrapIndex(tokens, startWidth, maxWidth, paragraphStyle.tabSettings ?? []); // needed to proceed a tab width correction according to the tabs complex positioning
12858
+ const isLast = lineIndex === paragraph.nextLineIndexes.length;
12859
+ LineInfoHelper.get(tokens, false, isLast, paragraphStyle, lineInfo.indent, lineInfo.isNumbering, pageFormat.contentWidth, 0, 0); // needed to proceed a space width correction according to the wordSpacing in case of justify alignment
12860
+ return tokens;
12946
12861
  }
12947
- fillLineTokens(startIndex, line, model) {
12948
- const lineInfo = this.getLineInfoByBreakModifier(model, startIndex + line.length);
12862
+ getTokens(contentIndex, content, paragraphSymbolIndex) {
12949
12863
  const tokens = [];
12950
- let characters = [];
12951
- let format = FormatStyleHelper.getFormatAtIndex(model.formats, startIndex);
12952
- let prevFormat = null;
12953
- let prevCharCode = null;
12954
- let prevFontString = null;
12955
- let prevChar = null;
12956
- let fontString = ContentStyleHelper.getFontStylesString(format?.textStyle);
12957
- let symbolChange = false;
12958
- for (let i = 0; i < line.length; i++) {
12959
- const char = line[i];
12960
- const size = FontMetrics.measureCharSize(char, fontString);
12961
- const customComponent = this.getOrGenerateComponent(startIndex, char);
12962
- const breakType = BreakHelper.getBreakType(model, char, startIndex);
12963
- if (customComponent && !breakType) {
12964
- const token = this.customContentService.getTokenFromComponent(customComponent, lineInfo, DisplayValue.customContent, i === 0, size);
12965
- tokens.push(token);
12966
- prevCharCode = -1;
12967
- prevChar = '';
12968
- characters = [];
12969
- }
12970
- else {
12971
- const charCode = char.charCodeAt(0);
12972
- const displayValue = DisplayTokenHelper.getDisplayValue(charCode);
12973
- const isFirstCharacter = i === 0;
12974
- const token = new DisplayToken({
12975
- ...size,
12976
- displayValue,
12977
- align: lineInfo.align,
12978
- indentFirstLine: isFirstCharacter ? lineInfo.indent.firstLine : DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
12979
- indentHanging: isFirstCharacter && !lineInfo.isNumbering ? lineInfo.indent.hanging : DEFAULT_PARAGRAPH_STYLE.indentHanging,
12980
- indentLeft: lineInfo.indent.left,
12981
- indentRight: lineInfo.indent.right,
12982
- indentBefore: lineInfo.offsetBefore,
12983
- indentAfter: lineInfo.offsetAfter,
12984
- lineSpacing: lineInfo.lineSpacing,
12985
- markerWidth: isFirstCharacter && lineInfo.isNumbering ? lineInfo.markerWidth : 0,
12986
- isNumbering: lineInfo.isNumbering,
12987
- isPageBreak: breakType === BreakTypes.Page,
12988
- isLineBreak: breakType === BreakTypes.TextWrapping,
12989
- isTab: false
12990
- });
12991
- tokens.push(token);
12992
- if (charCode !== prevCharCode ||
12993
- !prevFormat ||
12994
- !ContentStyleHelper.areSameTextStyles(format?.textStyle, prevFormat?.textStyle)) {
12995
- symbolChange = true;
12996
- }
12997
- else if (i === line.length - 1) {
12998
- characters.push(token);
12999
- symbolChange = true;
13000
- }
13001
- else {
13002
- characters.push(token);
13003
- }
13004
- if (characters.length > 1 && symbolChange) {
13005
- this.processCharSizes(prevChar, prevFontString, characters);
13006
- characters = [token];
13007
- symbolChange = false;
13008
- }
13009
- else if (symbolChange) {
13010
- characters = [token];
13011
- }
13012
- prevCharCode = charCode;
13013
- prevChar = char;
13014
- }
13015
- prevFormat = format;
13016
- prevFontString = fontString;
13017
- startIndex++;
13018
- if (startIndex > format?.endIndex) {
13019
- format = FormatStyleHelper.getFormatAtIndex(model.formats, startIndex);
13020
- fontString = ContentStyleHelper.getFontStylesString(format?.textStyle);
13021
- }
13022
- }
13023
- return tokens;
12864
+ const prev = { char: '', style: null, size: null };
12865
+ let format = FormatStyleHelper.getFormatAtIndex(this.model.formats, contentIndex);
12866
+ let fontString = ContentStyleHelper.getFontStylesString(format.textStyle);
12867
+ for (let i = 0; i < content.length; i++) {
12868
+ if (content[i] !== prev.char || !prev.style || !ContentStyleHelper.areSameTextStyles(format.textStyle, prev.style)) {
12869
+ prev.size = FontMetrics.measureCharSize(content[i], fontString);
12870
+ prev.char = content[i];
12871
+ prev.style = format.textStyle;
12872
+ }
12873
+ const customComponent = this.getOrGenerateComponent(contentIndex, content[i]);
12874
+ const breakType = BreakHelper.getBreakType(this.model.breaks, content[i], contentIndex);
12875
+ const token = customComponent && !breakType
12876
+ ? DisplayTokenHelper.getComponentToken(customComponent, prev.size)
12877
+ : DisplayTokenHelper.getSymbolToken(content.charCodeAt(i), prev.size, breakType);
12878
+ contentIndex++;
12879
+ if (contentIndex > format.endIndex) {
12880
+ format = FormatStyleHelper.getFormatAtIndex(this.model.formats, contentIndex);
12881
+ fontString = ContentStyleHelper.getFontStylesString(format.textStyle);
12882
+ }
12883
+ tokens.push(token);
12884
+ }
12885
+ const paragraphFormat = FormatStyleHelper.getFormatAtIndex(this.model.formats, paragraphSymbolIndex);
12886
+ const paragraphToken = DisplayTokenHelper.getParagraphToken(paragraphFormat.textStyle);
12887
+ return tokens.length ? { tokens, paragraphToken } : { tokens: [paragraphToken], paragraphToken };
13024
12888
  }
13025
12889
  getOrGenerateComponent(charIndex, char) {
13026
12890
  if (!this.customContentService.isSpecialMarker(char)) {
@@ -13036,12 +12900,6 @@ class DisplayData extends EventEmitting {
13036
12900
  const pageFormat = this.getPageFormatAtPosition(charIndex);
13037
12901
  return this.customContentService.generateComponent(this.model, this.customComponents, this.sessionId, this.generalProperties, pageFormat.contentWidth, charIndex);
13038
12902
  }
13039
- processCharSizes(prevChar, prevFontString, characters) {
13040
- const newSize = FontMetrics.measureCharSize(prevChar, prevFontString);
13041
- for (let item of characters) {
13042
- Object.assign(item, newSize);
13043
- }
13044
- }
13045
12903
  getPageFormatParagraphs(pageFormatIndex) {
13046
12904
  if (pageFormatIndex === this.pagesFormat.length - 1) {
13047
12905
  return this.paragraphs.filter(x => x.startIndex >= this.pagesFormat[pageFormatIndex].pageFormatModel.insertIndex);
@@ -13072,303 +12930,65 @@ class DisplayData extends EventEmitting {
13072
12930
  }
13073
12931
  return -1;
13074
12932
  }
13075
- getLineTokens(model, line, startIndex) {
13076
- const lineInfo = this.getLineInfoFromTextLine(startIndex + line.length);
13077
- if (!line.length) {
13078
- return this.getEmptyLineTokens(model, startIndex, lineInfo);
13079
- }
13080
- const tokens = [];
13081
- let characters = [];
13082
- let format = FormatStyleHelper.getFormatAtIndex(model.formats, startIndex);
13083
- let prevFormat = null;
13084
- let prevCharCode = null;
13085
- let prevFontString = null;
13086
- let prevChar = null;
13087
- let fontString = ContentStyleHelper.getFontStylesString(format?.textStyle);
13088
- let symbolChange = false;
13089
- for (let i = 0; i < line.length; i++) {
13090
- const char = line[i];
13091
- const size = FontMetrics.measureCharSize(char, fontString);
13092
- const customComponent = this.customContentService.getComponent(this.customComponents, char, startIndex);
13093
- const breakType = BreakHelper.getBreakType(model, char, startIndex);
13094
- if (customComponent && !breakType) {
13095
- const token = this.customContentService.getTokenFromComponent(customComponent, lineInfo, DisplayValue.customContent, i === 0, size);
13096
- tokens.push(token);
13097
- prevCharCode = -1;
13098
- prevChar = '';
13099
- characters = [];
12933
+ // The index of a token which should be the last on the line
12934
+ computeWrapIndex(displayTokens, startWidth, maxWidth, tabSettings) {
12935
+ let width = startWidth;
12936
+ let lastBreakable = -1;
12937
+ const lastTab = { token: null, alignment: TabAlignment.Left, usedWidth: 0, tokenWidth: 0 };
12938
+ for (let i = 0; i < displayTokens.length; i++) {
12939
+ const token = displayTokens[i];
12940
+ if (token.breaksLine) {
12941
+ return i;
13100
12942
  }
13101
- else {
13102
- const charCode = char.charCodeAt(0);
13103
- const displayValue = DisplayTokenHelper.getDisplayValue(charCode);
13104
- const isFirstCharacter = i === 0;
13105
- const token = new DisplayToken({
13106
- ...size,
13107
- displayValue,
13108
- align: lineInfo.align,
13109
- indentFirstLine: isFirstCharacter ? lineInfo.indent.firstLine : DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
13110
- indentHanging: isFirstCharacter && !lineInfo.isNumbering ? lineInfo.indent.hanging : DEFAULT_PARAGRAPH_STYLE.indentHanging,
13111
- indentLeft: lineInfo.indent.left,
13112
- indentRight: lineInfo.indent.right,
13113
- indentBefore: lineInfo.offsetBefore,
13114
- indentAfter: lineInfo.offsetAfter,
13115
- lineSpacing: lineInfo.lineSpacing,
13116
- markerWidth: isFirstCharacter && lineInfo.isNumbering ? lineInfo.markerWidth : 0,
13117
- isPageBreak: breakType === BreakTypes.Page,
13118
- isLineBreak: breakType === BreakTypes.TextWrapping,
13119
- isTab: false,
13120
- isNumbering: lineInfo.isNumbering
13121
- });
13122
- tokens.push(token);
13123
- if (charCode !== prevCharCode ||
13124
- !prevFormat ||
13125
- !ContentStyleHelper.areSameTextStyles(format?.textStyle, prevFormat?.textStyle)) {
13126
- symbolChange = true;
12943
+ if (token.isTable) {
12944
+ return i > 0 ? i - 1 : 0;
12945
+ }
12946
+ width += this.adjustLastTab(token, width, lastTab, tabSettings);
12947
+ if (width > maxWidth && !token.isParagraph) {
12948
+ if (i > 0) {
12949
+ i--;
13127
12950
  }
13128
- else if (i === line.length - 1) {
13129
- characters.push(token);
13130
- symbolChange = true;
12951
+ while (i + 1 < displayTokens.length && displayTokens[i + 1].isWhiteSpace) {
12952
+ i++;
13131
12953
  }
13132
- else {
13133
- characters.push(token);
12954
+ if (displayTokens[i].isTab) {
12955
+ return i > 0 ? i - 1 : 0;
13134
12956
  }
13135
- if (characters.length > 1 && symbolChange) {
13136
- this.processCharSizes(prevChar, prevFontString, characters);
13137
- characters = [token];
13138
- symbolChange = false;
12957
+ const breakable = displayTokens[i].breakable && !displayTokens[i].isTab;
12958
+ if (i + 1 === displayTokens.length || breakable || displayTokens[i + 1].breakable || lastBreakable === -1) {
12959
+ return i;
13139
12960
  }
13140
- else if (symbolChange) {
13141
- characters = [token];
12961
+ if (displayTokens[lastBreakable].isTab) {
12962
+ return lastBreakable > 0 ? lastBreakable - 1 : i;
13142
12963
  }
13143
- prevCharCode = charCode;
13144
- prevChar = char;
13145
- }
13146
- prevFormat = format;
13147
- prevFontString = fontString;
13148
- startIndex++;
13149
- if (startIndex > format?.endIndex) {
13150
- format = FormatStyleHelper.getFormatAtIndex(model.formats, startIndex);
13151
- fontString = ContentStyleHelper.getFontStylesString(format?.textStyle);
13152
- }
13153
- }
13154
- return tokens;
13155
- }
13156
- findSameNumberingIndex(index) {
13157
- let sameNumberingIndex = index;
13158
- if (this.getParagraphSettings(index)?.numberingData.numberingId) {
13159
- while (sameNumberingIndex >= 0 &&
13160
- this.model.paragraphs[sameNumberingIndex].paragraphStyle.numberingId !==
13161
- this.getParagraphSettings(index)?.numberingData.numberingId) {
13162
- sameNumberingIndex--;
13163
- }
13164
- }
13165
- else if (this.model.paragraphs[index].paragraphStyle.numberingId) {
13166
- while (sameNumberingIndex < this.paragraphs.length &&
13167
- this.model.paragraphs[index].paragraphStyle.numberingId !==
13168
- this.getParagraphSettings(sameNumberingIndex)?.numberingData.numberingId) {
13169
- sameNumberingIndex++;
13170
- }
13171
- }
13172
- return sameNumberingIndex;
13173
- }
13174
- getEmptyDisplayTokens(model, startIndex) {
13175
- const lineInfo = this.getLineInfoByBreakModifier(model, startIndex);
13176
- return this.getEmptyLineTokens(model, startIndex, lineInfo);
13177
- }
13178
- getEmptyLineTokens(model, startIndex, lineInfo) {
13179
- const storedFormat = FormatStyleHelper.getFormatAtIndex(model.formats, startIndex);
13180
- if (!storedFormat) {
13181
- return [];
13182
- }
13183
- const size = FontMetrics.measureCharSize('EMPTY_LINE', ContentStyleHelper.getFontStylesString(storedFormat.textStyle));
13184
- size.width = 3;
13185
- return [
13186
- new DisplayToken({
13187
- ...size,
13188
- displayValue: DisplayValue.emptyLine,
13189
- align: lineInfo.align,
13190
- indentFirstLine: lineInfo.indent.firstLine,
13191
- indentHanging: lineInfo.isNumbering ? 0 : lineInfo.indent.hanging,
13192
- indentLeft: lineInfo.indent.left,
13193
- indentRight: lineInfo.indent.right,
13194
- indentBefore: lineInfo.offsetBefore,
13195
- indentAfter: lineInfo.offsetAfter,
13196
- markerWidth: lineInfo.markerWidth,
13197
- isNumbering: lineInfo.isNumbering,
13198
- isPageBreak: false,
13199
- isLineBreak: false,
13200
- isTab: false,
13201
- lineSpacing: lineInfo.lineSpacing
13202
- })
13203
- ];
13204
- }
13205
- getLineInfoByBreakModifier(model, index) {
13206
- const paragraph = ParagraphStyleHelper.getParagraphAtIndex(model.paragraphs, index);
13207
- if (!paragraph) {
13208
- return new LineInfoModel({
13209
- align: DEFAULT_PARAGRAPH_STYLE.alignment,
13210
- indent: new IndentModel(DEFAULT_PARAGRAPH_STYLE.indentFirstLine, DEFAULT_PARAGRAPH_STYLE.indentHanging, DEFAULT_PARAGRAPH_STYLE.indentLeft, DEFAULT_PARAGRAPH_STYLE.indentRight),
13211
- offsetBefore: DEFAULT_PARAGRAPH_STYLE.spaceBefore,
13212
- offsetAfter: DEFAULT_PARAGRAPH_STYLE.spaceAfter,
13213
- lineSpacing: DEFAULT_PARAGRAPH_STYLE.lineSpacing
13214
- });
13215
- }
13216
- const { indent, markerWidth } = this.getParagraphIndentLeft(model, paragraph);
13217
- return this.getLineInfoModel(paragraph, indent, markerWidth);
13218
- }
13219
- getParagraphIndentLeft(model, paragraph) {
13220
- const numberingId = paragraph.paragraphStyle.numberingId;
13221
- if (numberingId === null) {
13222
- return {
13223
- indent: new IndentModel(paragraph.paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine, paragraph.paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging, paragraph.paragraphStyle.indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight),
13224
- markerWidth: 0
13225
- };
13226
- }
13227
- const level = paragraph.paragraphStyle.numberingLevel;
13228
- const paragraphIndex = model.paragraphs.indexOf(paragraph);
13229
- const levelModel = NumberingHelper.find(this.generalProperties.numberings, numberingId, level);
13230
- const paragraphFormat = FormatStyleHelper.getFormatAtIndex(model.formats, paragraph.insertIndex);
13231
- const markerTextStyle = ContentStyleHelper.combineTextStyles(levelModel.markerStyle, paragraphFormat.textStyle);
13232
- const paragraphSettings = this.getParagraphSettings(paragraphIndex);
13233
- let markerWidth = paragraphSettings?.numberingData?.width;
13234
- const marker = NumberingHelper.getMarker(levelModel, numberingId, model.paragraphs, paragraphIndex, this.generalProperties.numberingInfo);
13235
- const markerSizes = NumberingHelper.getMarkerSizes(marker, markerTextStyle);
13236
- markerWidth = markerSizes.width;
13237
- let indentHanging = levelModel.indentHanging;
13238
- let indentFirstLine = DEFAULT_PARAGRAPH_STYLE.indentFirstLine;
13239
- if (paragraph.paragraphStyle.indentFirstLine !== null || paragraph.paragraphStyle.indentHanging !== null) {
13240
- if (paragraph.paragraphStyle.indentFirstLine !== null) {
13241
- indentFirstLine = paragraph.paragraphStyle.indentFirstLine;
13242
- indentHanging = null;
12964
+ return lastBreakable;
13243
12965
  }
13244
- else {
13245
- indentHanging =
13246
- paragraph.paragraphStyle.indentHanging !== null ? paragraph.paragraphStyle.indentHanging : levelModel.indentHanging;
13247
- }
13248
- }
13249
- const indent = new IndentModel(indentFirstLine, indentHanging, paragraph.paragraphStyle.indentLeft !== null ? paragraph.paragraphStyle.indentLeft : levelModel.indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight);
13250
- return { indent, markerWidth: markerWidth + markerWidth / marker.length };
13251
- }
13252
- getLineInfoFromTextLine(index) {
13253
- const paragraph = ParagraphStyleHelper.getParagraphAtIndex(this.model.paragraphs, index);
13254
- const indentLeft = this.getIndentLeftFromTextLine(index);
13255
- const indent = new IndentModel(paragraph.paragraphStyle.indentFirstLine ?? DEFAULT_PARAGRAPH_STYLE.indentFirstLine, paragraph.paragraphStyle.indentHanging ?? DEFAULT_PARAGRAPH_STYLE.indentHanging, indentLeft ?? DEFAULT_PARAGRAPH_STYLE.indentLeft, paragraph.paragraphStyle.indentRight ?? DEFAULT_PARAGRAPH_STYLE.indentRight);
13256
- return this.getLineInfoModel(paragraph, indent, 0);
13257
- }
13258
- getLineInfoModel(paragraph, indent, markerWidth) {
13259
- return new LineInfoModel({
13260
- align: paragraph.paragraphStyle.alignment ?? DEFAULT_PARAGRAPH_STYLE.alignment,
13261
- indent,
13262
- offsetBefore: DEFAULT_PARAGRAPH_STYLE.spaceBefore,
13263
- offsetAfter: DEFAULT_PARAGRAPH_STYLE.spaceAfter,
13264
- lineSpacing: paragraph.paragraphStyle.lineSpacing ?? DEFAULT_PARAGRAPH_STYLE.lineSpacing,
13265
- isNumbering: !!markerWidth,
13266
- markerWidth
13267
- });
13268
- }
13269
- getIndentLeftFromTextLine(insertIndex) {
13270
- let startIndex = 0;
13271
- let endIndex = this.paragraphs.length - 1;
13272
- while (startIndex <= endIndex) {
13273
- const middleIndex = Math.round((startIndex + endIndex) / 2);
13274
- const paragraphInfo = this.paragraphs[middleIndex];
13275
- if (paragraphInfo.startIndex > insertIndex) {
13276
- startIndex = middleIndex + 1;
13277
- }
13278
- else {
13279
- endIndex = middleIndex - 1;
12966
+ if (token.breakable) {
12967
+ lastBreakable = i;
13280
12968
  }
13281
12969
  }
13282
- const textLinesInfo = this.paragraphs[startIndex]?.paragraphSettings.textLinesInfo;
13283
- return textLinesInfo ? Math.max(...textLinesInfo.map(x => x.indentLeft)) : null;
12970
+ return displayTokens.length - 1;
13284
12971
  }
13285
- computeWrapSplit(tokens, wrapLimit) {
13286
- if (!tokens.length || tokens.length <= wrapLimit) {
13287
- return null;
12972
+ adjustLastTab(token, position, tab, tabSettings) {
12973
+ if (token.isTab) {
12974
+ tab.token = token;
12975
+ const setting = tabSettings.find(x => x.position > position);
12976
+ const defaultTabWidth = this.generalProperties.defaultTabWidth;
12977
+ tab.token.width = setting ? setting.position - position : defaultTabWidth - (position % defaultTabWidth);
12978
+ tab.alignment = setting?.alignment ?? TabAlignment.Left;
12979
+ return token.width;
13288
12980
  }
13289
- // If there is a space or tab at this split position, then making
13290
- // a split is simple.
13291
- if (wrapLimit === 0 ||
13292
- tokens[wrapLimit].displayValue === DisplayValue.customContent ||
13293
- (this.isWhiteSpace(tokens[wrapLimit - 1]) && this.isWhiteSpace(tokens[wrapLimit]))) {
13294
- return wrapLimit;
12981
+ else if (tab.alignment === TabAlignment.Center && tab.token.width > 0) {
12982
+ const width = tab.token.width > token.width / 2 ? token.width / 2 : token.width - tab.token.width;
12983
+ tab.token.width -= tab.token.width > width ? width : tab.token.width;
12984
+ return width;
13295
12985
  }
13296
- return this.calculateSplit(wrapLimit, tokens);
13297
- }
13298
- calculateSplit(index, tokens) {
13299
- for (let i = index; i >= 0; i--) {
13300
- if (this.isWhiteSpace(tokens[i]) || tokens[i].displayValue === DisplayValue.customContent) {
13301
- return i + 1;
13302
- }
12986
+ else if (tab.alignment === TabAlignment.Right && tab.token.width > 0) {
12987
+ const width = tab.token.width > token.width ? token.width : tab.token.width;
12988
+ tab.token.width -= tab.token.width > width ? width : tab.token.width;
12989
+ return token.width - width;
13303
12990
  }
13304
- return index;
13305
- }
13306
- isWhiteSpace(token) {
13307
- return [DisplayValue.space, DisplayValue.emptyLine].includes(token.displayValue);
13308
- }
13309
- /**
13310
- * Computes wrap index based on max row width
13311
- */
13312
- computeWrapIndex(displayTokens, contentWidth, defaultTabWidth, tabSettings) {
13313
- if (!displayTokens[0]) {
13314
- return 0;
13315
- }
13316
- if (displayTokens[0].isTable || (displayTokens[0].breaksLine && displayTokens.length === 1)) {
13317
- return 1;
13318
- }
13319
- const maxRowWidth = contentWidth - displayTokens[0].indentRight - displayTokens[0].markerWidth;
13320
- let sum = displayTokens[0].indentLeft + displayTokens[0].indentFirstLine - displayTokens[0].indentHanging || 0;
13321
- let prevTabIndex = null;
13322
- let tabCenter = null;
13323
- let prevTabAlignment = TabAlignment.Left;
13324
- for (let i = 0; i < displayTokens.length; i++) {
13325
- const token = displayTokens[i];
13326
- const prevToken = i > 0 ? displayTokens[i - 1] : null;
13327
- if (token.isTab) {
13328
- const tabs = tabSettings ?? [];
13329
- const nextSettingIndex = tabs.findIndex(x => x.position > sum);
13330
- const tokenWidth = TabHelper.calculateTabWidth(sum, defaultTabWidth, tabSettings);
13331
- if (nextSettingIndex >= 0 && tabs[nextSettingIndex].alignment === TabAlignment.Center) {
13332
- prevTabAlignment = TabAlignment.Center;
13333
- tabCenter = { stringWidth: 0, tokenWidth };
13334
- token.width = tokenWidth;
13335
- }
13336
- else {
13337
- prevTabAlignment = nextSettingIndex >= 0 ? tabs[nextSettingIndex].alignment : TabAlignment.Left;
13338
- token.width = tokenWidth;
13339
- tabCenter = null;
13340
- }
13341
- prevTabIndex = i;
13342
- }
13343
- if (prevTabAlignment === TabAlignment.Center && !token.isTab && tabCenter.stringWidth < tabCenter.tokenWidth) {
13344
- const tokenWidth = token.width / 2;
13345
- displayTokens[prevTabIndex].width -= tokenWidth;
13346
- tabCenter.stringWidth += tokenWidth;
13347
- sum += tokenWidth;
13348
- }
13349
- else if (prevTabAlignment === TabAlignment.Right && !token.isTab && displayTokens[prevTabIndex].width !== 0) {
13350
- if (displayTokens[prevTabIndex].width - token.width < 0) {
13351
- sum += token.width - displayTokens[prevTabIndex].width;
13352
- displayTokens[prevTabIndex].width = 0;
13353
- }
13354
- else {
13355
- displayTokens[prevTabIndex].width -= token.width;
13356
- }
13357
- }
13358
- else {
13359
- sum += token.width;
13360
- }
13361
- if (sum >= maxRowWidth) {
13362
- return i > 0 ? i - 1 : 0;
13363
- }
13364
- if (prevToken?.breaksLine || token.isTable) {
13365
- return i;
13366
- }
13367
- if (token.isLineBreak || (i === displayTokens.length - 1 && token.isPageBreak)) {
13368
- return i + 1;
13369
- }
13370
- }
13371
- return 0;
12991
+ return token.width;
13372
12992
  }
13373
12993
  getPreviousParagraphInfo(row) {
13374
12994
  if (!row || !this.paragraphs.length) {
@@ -13626,13 +13246,13 @@ class NoderEdgeComponent extends DestroyComponent {
13626
13246
  });
13627
13247
  }, options);
13628
13248
  }
13629
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderEdgeComponent, deps: [{ token: RegulatorService }, { token: EditorService }, { token: i3.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
13249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderEdgeComponent, deps: [{ token: RegulatorService }, { token: EditorService }, { token: i6.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
13630
13250
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderEdgeComponent, isStandalone: false, selector: "app-nod-edge", inputs: { model: "model", generalProperties: "generalProperties", margins: "margins", width: "width", parentSessionId: "parentSessionId", isEvenEdgesExist: "isEvenEdgesExist", type: "type" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true, static: true }, { propertyName: "typeContainer", first: true, predicate: ["locationType"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<div\n #container\n class=\"edit-container\"></div>\n<div\n #locationType\n class=\"location-type\">\n <span>{{ edgeNameByType }}</span>\n</div>\n", styles: [":host{height:100%;width:100%;background:transparent;display:block}.location-type{position:absolute;height:auto;width:auto;font-size:9pt;color:#333;background-color:#f2f2f2;border:1px solid #838282;border-radius:2px;padding:4px;margin-left:5px;z-index:2}.header-edit-mode{border-bottom:1px dashed #838282}.footer-edit-mode{border-top:1px dashed #838282}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13631
13251
  }
13632
13252
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderEdgeComponent, decorators: [{
13633
13253
  type: Component,
13634
13254
  args: [{ selector: 'app-nod-edge', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<div\n #container\n class=\"edit-container\"></div>\n<div\n #locationType\n class=\"location-type\">\n <span>{{ edgeNameByType }}</span>\n</div>\n", styles: [":host{height:100%;width:100%;background:transparent;display:block}.location-type{position:absolute;height:auto;width:auto;font-size:9pt;color:#333;background-color:#f2f2f2;border:1px solid #838282;border-radius:2px;padding:4px;margin-left:5px;z-index:2}.header-edit-mode{border-bottom:1px dashed #838282}.footer-edit-mode{border-top:1px dashed #838282}\n"] }]
13635
- }], ctorParameters: () => [{ type: RegulatorService }, { type: EditorService }, { type: i3.TranslateService }, { type: i0.ChangeDetectorRef }], propDecorators: { model: [{
13255
+ }], ctorParameters: () => [{ type: RegulatorService }, { type: EditorService }, { type: i6.TranslateService }, { type: i0.ChangeDetectorRef }], propDecorators: { model: [{
13636
13256
  type: Input
13637
13257
  }], generalProperties: [{
13638
13258
  type: Input
@@ -14144,35 +13764,47 @@ class NoderImageComponent extends BaseNoderComponent {
14144
13764
  image.style.height = `${size.height}px`;
14145
13765
  }
14146
13766
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderImageComponent, deps: [{ token: i0.ElementRef }, { token: ImageApiService }], target: i0.ɵɵFactoryTarget.Component }); }
14147
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderImageComponent, isStandalone: false, selector: "app-nod-image", usesInheritance: true, ngImport: i0, template: "<app-nod-resizer\n *ngIf=\"isFocused\"\n class=\"resizer\"\n [isDisabled]=\"isViewOnly$ | async\"\n [size]=\"size\"\n (resizeEnd)=\"onResizeEnd($event)\" />\n", styles: [":host{position:relative;outline:none}.resizer{position:absolute;z-index:1}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ResizerComponent, selector: "app-nod-resizer", inputs: ["isDisabled", "size"], outputs: ["resizeEnd"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
13767
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderImageComponent, isStandalone: false, selector: "app-nod-image", usesInheritance: true, ngImport: i0, template: "<app-nod-resizer\n *ngIf=\"isFocused\"\n class=\"resizer\"\n [isDisabled]=\"isViewOnly$ | async\"\n [size]=\"size\"\n (resizeEnd)=\"onResizeEnd($event)\" />\n", styles: [":host{position:relative;outline:none}.resizer{position:absolute;z-index:1}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ResizerComponent, selector: "app-nod-resizer", inputs: ["isDisabled", "size"], outputs: ["resizeEnd"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14148
13768
  }
14149
13769
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderImageComponent, decorators: [{
14150
13770
  type: Component,
14151
13771
  args: [{ selector: 'app-nod-image', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<app-nod-resizer\n *ngIf=\"isFocused\"\n class=\"resizer\"\n [isDisabled]=\"isViewOnly$ | async\"\n [size]=\"size\"\n (resizeEnd)=\"onResizeEnd($event)\" />\n", styles: [":host{position:relative;outline:none}.resizer{position:absolute;z-index:1}\n"] }]
14152
13772
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: ImageApiService }] });
14153
13773
 
14154
- class NoderTabComponent extends BaseNoderComponent {
14155
- get tab() {
14156
- return this.content;
14157
- }
14158
- set tab(val) {
14159
- this.content = val;
13774
+ class ParagraphStyleHelper {
13775
+ static getParagraphsAtRange(paragraphs, startIndex, endIndex) {
13776
+ let firstModifierIndexInRange = paragraphs.findIndex(paragraph => paragraph.insertIndex >= startIndex);
13777
+ firstModifierIndexInRange = firstModifierIndexInRange === -1 ? paragraphs.length : firstModifierIndexInRange;
13778
+ let lastModifierIndexInRange = paragraphs.findIndex(x => x.insertIndex >= endIndex);
13779
+ lastModifierIndexInRange =
13780
+ startIndex === endIndex || lastModifierIndexInRange === -1 ? firstModifierIndexInRange : lastModifierIndexInRange;
13781
+ return paragraphs.slice(firstModifierIndexInRange, lastModifierIndexInRange + 1);
14160
13782
  }
14161
- initialize() {
14162
- this.applySize(this.tab.width);
13783
+ static getParagraphAtIndex(paragraphs, insertIndex) {
13784
+ let startIndex = 0;
13785
+ let endIndex = paragraphs.length - 1;
13786
+ while (startIndex <= endIndex) {
13787
+ const middleIndex = Math.round((startIndex + endIndex) / 2);
13788
+ const paragraph = paragraphs[middleIndex];
13789
+ if (paragraph.insertIndex < insertIndex) {
13790
+ startIndex = middleIndex + 1;
13791
+ }
13792
+ else {
13793
+ endIndex = middleIndex - 1;
13794
+ }
13795
+ }
13796
+ return paragraphs[startIndex];
14163
13797
  }
14164
- applySize(width) {
14165
- this.width.set(ScalingHelper.scale(width, this.generalProperties.scalingRatio));
13798
+ static isEndOfParagraph(paragraphs, endIndex) {
13799
+ const paragraph = this.getParagraphAtIndex(paragraphs, endIndex);
13800
+ let paragraphIndex = paragraphs.findIndex(x => x === paragraph);
13801
+ const endOfParagraphIsParagraph = paragraph && endIndex === paragraph.insertIndex && paragraphs.length - 1 > paragraphIndex;
13802
+ if (endOfParagraphIsParagraph) {
13803
+ paragraphIndex += 1;
13804
+ }
13805
+ return paragraphs[paragraphIndex].insertIndex === endIndex + 1;
14166
13806
  }
14167
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTabComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
14168
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NoderTabComponent, isStandalone: false, selector: "app-nod-tab", host: { properties: { "style.width.px": "width()" } }, usesInheritance: true, ngImport: i0, template: "&emsp;\n", styles: [":host{position:relative;outline:none}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
14169
13807
  }
14170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NoderTabComponent, decorators: [{
14171
- type: Component,
14172
- args: [{ selector: 'app-nod-tab', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, host: {
14173
- '[style.width.px]': 'width()'
14174
- }, template: "&emsp;\n", styles: [":host{position:relative;outline:none}\n"] }]
14175
- }] });
14176
13808
 
14177
13809
  const CHARS = [
14178
13810
  // eslint-disable-next-line prettier/prettier
@@ -14377,7 +14009,6 @@ class EditSession {
14377
14009
  const endParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, endIndex).row;
14378
14010
  OperationsHelper.applyTextStyle(this.model, startIndex, endIndex, textStyle);
14379
14011
  this.provideTextStyle(startIndex, endIndex);
14380
- this.displayData.resetAllNumberingInfo(startParagraph);
14381
14012
  this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
14382
14013
  this.setTextStyle(textStyle);
14383
14014
  }
@@ -14390,36 +14021,25 @@ class EditSession {
14390
14021
  startParagraph = this.displayData.paragraphs.findIndex(x => x.paragraphSettings.numberingData.numberingId === numberingId);
14391
14022
  endParagraph = this.displayData.paragraphs.findLastIndex(x => x.paragraphSettings.numberingData.numberingId === numberingId);
14392
14023
  }
14393
- this.displayData.resetAllNumberingInfo(startParagraph);
14394
14024
  this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
14395
14025
  this.applyToolbarStyles();
14396
14026
  }
14397
14027
  rerender(insertIndex) {
14398
14028
  const paragraphIndex = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, insertIndex).row;
14399
- this.displayData.resetAllNumberingInfo(paragraphIndex);
14400
14029
  this.displayData.updateNextLineIndexes(paragraphIndex, paragraphIndex);
14401
14030
  }
14402
14031
  addNumbering(levels, startIndex, endIndex, numberingId) {
14403
14032
  const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
14404
14033
  const endParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, endIndex).row;
14405
14034
  OperationsHelper.addNumbering(this.model, this.generalProperties.numberings, startIndex, endIndex, levels, numberingId);
14406
- this.generalProperties.numberingInfo = {};
14407
14035
  this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
14408
- for (let i = startParagraph; i <= endParagraph; i++) {
14409
- if (this.displayData.getParagraphSettings(i).numberingData.numberingId !== null) {
14410
- this.displayData.updateNumberingsDataOnChange(endParagraph + 1);
14411
- break;
14412
- }
14413
- }
14414
14036
  this.applyToolbarStyles();
14415
14037
  }
14416
14038
  removeNumberings(startIndex, endIndex) {
14417
14039
  const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
14418
14040
  const endParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, endIndex).row;
14419
- this.displayData.resetAllNumberingInfo(startParagraph);
14420
14041
  OperationsHelper.removeNumberings(this.model, this.generalProperties.numberings, startIndex, endIndex);
14421
14042
  this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
14422
- this.displayData.updateNumberingsDataOnChange(endParagraph);
14423
14043
  this.applyToolbarStyles();
14424
14044
  }
14425
14045
  restoreNumberings(paragraphs, numberings) {
@@ -14427,15 +14047,8 @@ class EditSession {
14427
14047
  const endIndex = paragraphs[paragraphs.length - 1].insertIndex;
14428
14048
  const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
14429
14049
  const endPosition = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex);
14430
- this.displayData.resetAllNumberingInfo(startParagraph);
14431
14050
  OperationsHelper.restoreNumberings(this.model, this.generalProperties.numberings, paragraphs, numberings);
14432
14051
  this.displayData.updateNextLineIndexes(startParagraph, endPosition.row);
14433
- for (const paragraph of paragraphs) {
14434
- if (paragraph.paragraphStyle.numberingId !== null) {
14435
- this.displayData.updateNumberingsDataOnChange(endPosition.row + 1);
14436
- break;
14437
- }
14438
- }
14439
14052
  this.selection.placeCursor(endPosition);
14440
14053
  this.applyToolbarStyles();
14441
14054
  }
@@ -14444,7 +14057,6 @@ class EditSession {
14444
14057
  imageComponentRef.instance.resize({ width: applyImage.width, height: applyImage.height });
14445
14058
  OperationsHelper.applyImageStyle(this.model, applyImage);
14446
14059
  const start = this.displayData.indexToPosition(applyImage.insertIndex, 0);
14447
- this.displayData.resetAllNumberingInfo(start.row);
14448
14060
  this.displayData.updateNextLineIndexes(start.row, this.displayData.paragraphs.length - 1);
14449
14061
  }
14450
14062
  restoreTextStyles(formats, linkFormats) {
@@ -14454,7 +14066,6 @@ class EditSession {
14454
14066
  const endPosition = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex);
14455
14067
  OperationsHelper.restoreTextStyles(this.model, formats, linkFormats);
14456
14068
  this.provideTextStyle(startIndex, endIndex);
14457
- this.displayData.resetAllNumberingInfo(startParagraph);
14458
14069
  this.displayData.updateNextLineIndexes(startParagraph, endPosition.row);
14459
14070
  this.selection.placeCursor(endPosition);
14460
14071
  this.applyToolbarStyles();
@@ -14465,7 +14076,6 @@ class EditSession {
14465
14076
  const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
14466
14077
  const endPosition = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex);
14467
14078
  OperationsHelper.restoreParagraphStyles(this.model, paragraphs);
14468
- this.displayData.resetAllNumberingInfo(0);
14469
14079
  this.displayData.updateNextLineIndexes(startParagraph, endPosition.row);
14470
14080
  this.selection.placeCursor(endPosition);
14471
14081
  this.applyToolbarStyles();
@@ -14476,7 +14086,6 @@ class EditSession {
14476
14086
  const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
14477
14087
  const endParagraph = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex).row;
14478
14088
  OperationsHelper.applyParagraphs(this.model, paragraphs);
14479
- this.displayData.resetAllNumberingInfo(startParagraph);
14480
14089
  this.displayData.updateNextLineIndexes(startParagraph, endParagraph);
14481
14090
  this.applyToolbarStyles();
14482
14091
  }
@@ -14496,11 +14105,7 @@ class EditSession {
14496
14105
  CustomComponentHelper.applyRemovingComponents(this.customComponents.tabs, partIndexes.startIndex, partIndexes.endIndex);
14497
14106
  OperationsHelper.delete(this.model, partIndexes.startIndex, partIndexes.endIndex - partIndexes.startIndex + 1);
14498
14107
  this.selection.placeCursor(range.start);
14499
- this.displayData.resetAllNumberingInfo(range.start.row);
14500
14108
  this.displayData.updateNextLineIndexes(range.start.row, range.start.row);
14501
- if (range.end.row - range.start.row && this.type !== 'cell') {
14502
- this.displayData.updateNumberingsDataOnChange(range.start.row + 1);
14503
- }
14504
14109
  this.applyToolbarStyles();
14505
14110
  }
14506
14111
  replace(model) {
@@ -14562,11 +14167,7 @@ class EditSession {
14562
14167
  OperationsHelper.insertText(this.model, text, insertIndex);
14563
14168
  }
14564
14169
  const endPosition = this.displayData.insertText(position, text);
14565
- this.displayData.resetAllNumberingInfo(position.row);
14566
14170
  this.displayData.updateNextLineIndexes(position.row, endPosition.row);
14567
- if (endPosition.row - position.row && this.type !== 'cell') {
14568
- this.displayData.updateNumberingsDataOnChange(endPosition.row + 1);
14569
- }
14570
14171
  this.selection.placeCursor(endPosition);
14571
14172
  return endPosition;
14572
14173
  }
@@ -14589,7 +14190,6 @@ class EditSession {
14589
14190
  const model = this.model.elements.find(x => x.insertIndex === insertIndex);
14590
14191
  const type = this.customContentService.findComponentType(model.type);
14591
14192
  this.addComponent(this.customComponents.customElements, model, type);
14592
- this.displayData.resetAllNumberingInfo(position.row);
14593
14193
  this.displayData.updateNextLineIndexes(position.row, endPosition.row);
14594
14194
  this.selection.placeCursor(endPosition);
14595
14195
  return endPosition;
@@ -14597,15 +14197,11 @@ class EditSession {
14597
14197
  insertBreak(position, breakType) {
14598
14198
  const insertIndex = ContentHelper.paragraphPositionToDocumentIndex(this.displayData.paragraphs, position);
14599
14199
  const isOnNewParagraph = breakType === BreakTypes.Page &&
14600
- BreakHelper.getBreakType(this.model, CUSTOM_ELEMENT_MARKER, insertIndex - 1) !== BreakTypes.Page;
14200
+ BreakHelper.getBreakType(this.model.breaks, CUSTOM_ELEMENT_MARKER, insertIndex - 1) !== BreakTypes.Page;
14601
14201
  const text = isOnNewParagraph ? `${NEW_LINE_MARKUP}${CUSTOM_ELEMENT_MARKER}` : CUSTOM_ELEMENT_MARKER;
14602
14202
  OperationsHelper.insertBreak(this.model, text, insertIndex, breakType);
14603
14203
  const endPosition = this.displayData.insertText(position, text);
14604
- this.displayData.resetAllNumberingInfo(position.row);
14605
14204
  this.displayData.updateNextLineIndexes(position.row, endPosition.row);
14606
- if (isOnNewParagraph && endPosition.row - position.row) {
14607
- this.displayData.updateNumberingsDataOnChange(endPosition.row);
14608
- }
14609
14205
  const cursorPosition = this.displayData.getPositionAfterBreak(endPosition, breakType);
14610
14206
  this.selection.placeCursor(cursorPosition);
14611
14207
  return endPosition;
@@ -14616,7 +14212,6 @@ class EditSession {
14616
14212
  const model = this.model.tabs.find(x => x.insertIndex === insertIndex);
14617
14213
  this.addComponent(this.customComponents.tabs, model, NoderTabComponent);
14618
14214
  const endPosition = this.displayData.insertText(position, CUSTOM_ELEMENT_MARKER);
14619
- this.displayData.resetAllNumberingInfo(position.row);
14620
14215
  this.displayData.updateNextLineIndexes(position.row, position.row);
14621
14216
  this.selection.placeCursor(endPosition);
14622
14217
  return endPosition;
@@ -14627,7 +14222,6 @@ class EditSession {
14627
14222
  const model = this.model.images.find(x => x.insertIndex === insertIndex);
14628
14223
  this.addComponent(this.customComponents.images, model, NoderImageComponent);
14629
14224
  const endPosition = this.displayData.insertText(position, CUSTOM_ELEMENT_MARKER);
14630
- this.displayData.resetAllNumberingInfo(position.row);
14631
14225
  this.displayData.updateNextLineIndexes(position.row, position.row);
14632
14226
  this.selection.placeCursor(endPosition);
14633
14227
  return endPosition;
@@ -14636,7 +14230,6 @@ class EditSession {
14636
14230
  const insertIndex = ContentHelper.paragraphPositionToDocumentIndex(this.displayData.paragraphs, position);
14637
14231
  OperationsHelper.insertLink(this.model, linkData.text, linkData.link, insertIndex);
14638
14232
  const endPosition = this.displayData.insertText(position, linkData.text);
14639
- this.displayData.resetAllNumberingInfo(position.row);
14640
14233
  this.displayData.updateNextLineIndexes(position.row, position.row);
14641
14234
  this.selection.placeCursor(endPosition);
14642
14235
  return endPosition;
@@ -14647,11 +14240,7 @@ class EditSession {
14647
14240
  const model = this.model.tables.find(x => x.insertIndex >= tableModel.insertIndex);
14648
14241
  this.addComponent(this.customComponents.tables, model, NoderTableComponent);
14649
14242
  const endPosition = this.displayData.insertText(position, text);
14650
- this.displayData.resetAllNumberingInfo(position.row);
14651
14243
  this.displayData.updateNextLineIndexes(position.row, endPosition.row);
14652
- if (endPosition.row - position.row) {
14653
- this.displayData.updateNumberingsDataOnChange(endPosition.row);
14654
- }
14655
14244
  this.selection.placeCursor(endPosition);
14656
14245
  return endPosition;
14657
14246
  }
@@ -14672,11 +14261,7 @@ class EditSession {
14672
14261
  CustomComponentHelper.applyRemovingComponents(this.customComponents.tabs, moveModel.sourceStartIndex, endIndex);
14673
14262
  const restoreModel = OperationsHelper.removeMoveRange(this.model, moveModel);
14674
14263
  this.selection.placeCursor(startPosition);
14675
- this.displayData.resetAllNumberingInfo(startPosition.row);
14676
14264
  this.displayData.updateNextLineIndexes(startPosition.row, endPosition.row);
14677
- if (endPosition.row - startPosition.row && this.type !== 'cell') {
14678
- this.displayData.updateNumberingsDataOnChange(startPosition.row + 1);
14679
- }
14680
14265
  this.applyToolbarStyles();
14681
14266
  return restoreModel;
14682
14267
  }
@@ -14689,11 +14274,7 @@ class EditSession {
14689
14274
  this.restoreElementComponents(this.model.elements, moveIndex, endIndex);
14690
14275
  const startPosition = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, moveIndex);
14691
14276
  const endPosition = this.displayData.insertText(startPosition, restoreModel.text);
14692
- this.displayData.resetAllNumberingInfo(startPosition.row);
14693
14277
  this.displayData.updateNextLineIndexes(startPosition.row, endPosition.row);
14694
- if (endPosition.row - startPosition.row && this.type !== 'cell') {
14695
- this.displayData.updateNumberingsDataOnChange(endPosition.row);
14696
- }
14697
14278
  this.selection.placeCursor(endPosition);
14698
14279
  this.applyToolbarStyles();
14699
14280
  const newStartPosition = this.displayData.indexToPosition(moveIndex, 0);
@@ -14784,11 +14365,7 @@ class EditSession {
14784
14365
  this.restoreComponents(this.model.images, this.customComponents.images, NoderImageComponent, model.insertIndex, restoreEndIndex);
14785
14366
  this.restoreComponents(this.model.tabs, this.customComponents.tabs, NoderTabComponent, model.insertIndex, restoreEndIndex);
14786
14367
  this.restoreElementComponents(this.model.elements, model.insertIndex, restoreEndIndex);
14787
- this.displayData.resetAllNumberingInfo(paragraphPosition.row);
14788
14368
  this.displayData.updateNextLineIndexes(paragraphPosition.row, endPoint.row);
14789
- if (endPoint.row - paragraphPosition.row && this.type !== 'cell') {
14790
- this.displayData.updateNumberingsDataOnChange(endPoint.row + 1);
14791
- }
14792
14369
  this.selection.placeCursor(endPoint);
14793
14370
  this.applyToolbarStyles();
14794
14371
  }
@@ -14821,33 +14398,28 @@ class EditSession {
14821
14398
  }
14822
14399
  insertTableRows(insertIndex, rowsCount, targetIndex, inheritIndex) {
14823
14400
  const table = this.customComponents.tables.find(x => x.instance.insertIndex === insertIndex);
14824
- this.displayData.resetNumberingInfoByTableCell(table);
14825
14401
  OperationsHelper.insertTableRows(this.model, insertIndex, rowsCount, targetIndex, inheritIndex);
14826
14402
  table.instance.updateTable();
14827
14403
  }
14828
14404
  insertTableColumns(insertIndex, columnsCount, targetIndex, inheritIndex) {
14829
14405
  const table = this.customComponents.tables.find(x => x.instance.insertIndex === insertIndex);
14830
14406
  const pageFormat = this.displayData.getPageFormatAtPosition(insertIndex);
14831
- this.displayData.resetNumberingInfoByTableCell(table);
14832
14407
  OperationsHelper.insertTableColumns(this.model, insertIndex, columnsCount, targetIndex, inheritIndex, pageFormat.contentWidth);
14833
14408
  table.instance.updateTable();
14834
14409
  }
14835
14410
  removeTableRows(insertIndex, startIndex, endIndex) {
14836
14411
  const table = this.customComponents.tables.find(x => x.instance.insertIndex === insertIndex);
14837
- this.displayData.resetNumberingInfoByTableCell(table);
14838
14412
  OperationsHelper.removeTableRows(this.model, insertIndex, startIndex, endIndex);
14839
14413
  table.instance.updateTable();
14840
14414
  }
14841
14415
  removeTableColumns(insertIndex, startIndex, endIndex) {
14842
14416
  const table = this.customComponents.tables.find(x => x.instance.insertIndex === insertIndex);
14843
- this.displayData.resetNumberingInfoByTableCell(table);
14844
14417
  const pageFormat = this.displayData.getPageFormatAtPosition(insertIndex);
14845
14418
  OperationsHelper.removeTableColumns(this.model, insertIndex, startIndex, endIndex, pageFormat.contentWidth);
14846
14419
  table.instance.updateTable();
14847
14420
  }
14848
14421
  resizeTableColumns(resizeTableColumns) {
14849
14422
  const table = this.customComponents.tables.find(x => x.instance.insertIndex === resizeTableColumns.insertIndex);
14850
- this.displayData.resetNumberingInfoByTableCell(table);
14851
14423
  OperationsHelper.resizeTableColumns(this.model, resizeTableColumns);
14852
14424
  table.instance.updateTable();
14853
14425
  }
@@ -15099,26 +14671,16 @@ class HighlightLayer {
15099
14671
  const results = [];
15100
14672
  for (let i = 0; i < textLinesInfo.length; i++) {
15101
14673
  const lineInfo = textLinesInfo[i].textLinesInfo;
15102
- const paragraphLineIndex = textLinesInfo[i].paragraphSettings.textLinesInfo.findIndex(x => x === textLinesInfo[i].textLinesInfo);
15103
14674
  if (i !== 0) {
15104
14675
  top += lineInfo.firstLinePageOffset;
15105
14676
  top += lineInfo.offsetBefore;
15106
14677
  }
15107
- let markerWidth = 0;
15108
- const numberingOffsetLeft = textLinesInfo[i].paragraphSettings.numberingData.numberingId === null
15109
- ? 0
15110
- : textLinesInfo[i].paragraphSettings.numberingData.width + textLinesInfo[i].paragraphSettings.numberingData.paddingLeft;
15111
- if (paragraphLineIndex === 0 &&
15112
- lineInfo.isNumbering &&
15113
- (lineInfo.indentFirstLine ||
15114
- (numberingOffsetLeft - lineInfo.indentLeft > 0 && numberingOffsetLeft - lineInfo.indentLeft <= lineInfo.markerWidth))) {
15115
- markerWidth = lineInfo.markerWidth;
15116
- }
15117
- const left = lineInfo.paddingLeft + padding + lineInfo.offsetMargin + markerWidth;
14678
+ const markerOffset = NumberingHelper.getOffsetCausedByMarker(textLinesInfo[i].paragraphSettings.numberingData, lineInfo);
14679
+ const left = lineInfo.paddingLeft + padding + lineInfo.offsetMargin + markerOffset;
15118
14680
  let style;
15119
14681
  if (i === 0) {
15120
14682
  const rangeInfo = this.getRangeInfo(this.session, range);
15121
- const width = lineInfo.width - rangeInfo.leftPos + left + (lineInfo.wordSpacingWidth ?? 0);
14683
+ const width = lineInfo.width - rangeInfo.leftPos + left;
15122
14684
  style = this.getMarkerStyle(lineInfo.height, width, top, rangeInfo.leftPos);
15123
14685
  }
15124
14686
  else if (i === textLinesInfo.length - 1) {
@@ -15127,7 +14689,7 @@ class HighlightLayer {
15127
14689
  style = this.getMarkerStyle(lineInfo.height, rangeInfo.screenWidth, top, left);
15128
14690
  }
15129
14691
  else {
15130
- let width = lineInfo.width + (lineInfo.wordSpacingWidth ?? 0);
14692
+ let width = lineInfo.width;
15131
14693
  style = this.getMarkerStyle(lineInfo.height, width, top, left);
15132
14694
  }
15133
14695
  const result = this.renderHighlight(style, cssClass);
@@ -15157,7 +14719,7 @@ class HighlightLayer {
15157
14719
  }
15158
14720
  const top = this.getTop(screenParentRange.start.row);
15159
14721
  const info = this.getRangeInfo(this.session, screenParentRange);
15160
- this.renderHighlight(this.getMarkerStyle(elementInfo.location.height, elementInfo.location.width, top + lineInfo.maxAscent - elementInfo.location.height + elementInfo.location.top, info.leftPos + elementInfo.location.left), cssClass);
14722
+ this.renderHighlight(this.getMarkerStyle(elementInfo.location.height, elementInfo.location.width, top + lineInfo.ascent - elementInfo.location.height + elementInfo.location.top, info.leftPos + elementInfo.location.left), cssClass);
15161
14723
  }
15162
14724
  getRangeInfo(session, range) {
15163
14725
  const start = range.start;
@@ -15195,7 +14757,7 @@ class CommentHighlightLayer extends HighlightLayer {
15195
14757
  const commentRenderRequests = [];
15196
14758
  for (const comment of comments) {
15197
14759
  const startPosition = ContentHelper.documentIndexToParagraphIndex(this.session.displayData.paragraphs, comment.startIndex);
15198
- const endPosition = ContentHelper.documentIndexToParagraphIndex(this.session.displayData.paragraphs, comment.endIndex);
14760
+ const endPosition = ContentHelper.documentIndexToParagraphIndex(this.session.displayData.paragraphs, comment.endIndex + 1);
15199
14761
  const range = new Range(startPosition, endPosition);
15200
14762
  const screenRange = range.toScreenRange(this.session);
15201
14763
  if (config.visibleRange &&
@@ -15297,16 +14859,9 @@ class CursorLayer {
15297
14859
  fontSize: textStyle.fontSize,
15298
14860
  fontFamily: textStyle.fontFamily
15299
14861
  })));
15300
- const fontMetricHeight = metricSize.ascent + metricSize.descent;
15301
- const maxHeight = this.cursorPosition.sizeMax.ascent + this.cursorPosition.sizeMax.descent;
15302
- const fontShoulders = fontMetricHeight - metricSize.font;
15303
- const offset = metricSize.descent - fontShoulders;
15304
- let top = this.cursorPosition.pageY + this.cursorPosition.sizeMax.ascent - metricSize.font + offset;
15305
- if (fontMetricHeight !== maxHeight && maxHeight >= this.cursorPosition.lineHeight) {
15306
- top -= maxHeight - this.cursorPosition.lineHeight;
15307
- }
15308
- DomHelper.setStyle(this.cursor.style, 'top', `${top < 0 ? 0 : top}px`);
15309
- DomHelper.setStyle(this.cursor.style, 'height', `${fontMetricHeight}px`);
14862
+ const top = this.cursorPosition.pageY + this.cursorPosition.ascent - metricSize.ascent;
14863
+ DomHelper.setStyle(this.cursor.style, 'top', `${top}px`);
14864
+ DomHelper.setStyle(this.cursor.style, 'height', `${metricSize.height}px`);
15310
14865
  }
15311
14866
  restartAnimation() {
15312
14867
  this.removeAnimationClass();
@@ -15322,9 +14877,8 @@ class CursorLayer {
15322
14877
  return;
15323
14878
  }
15324
14879
  DomHelper.setStyle(this.cursor.style, 'display', 'block');
15325
- const currentSize = this.cursorPosition.sizeCurrent;
15326
14880
  DomHelper.setStyle(this.cursor.style, 'left', `${this.cursorPosition.pageX}px`);
15327
- DomHelper.setStyle(this.cursor.style, 'width', `${currentSize.width}px`);
14881
+ DomHelper.setStyle(this.cursor.style, 'width', `${this.cursorPosition.width}px`);
15328
14882
  this.addTextStylesToCursor();
15329
14883
  }
15330
14884
  removeAnimationClass() {
@@ -15639,7 +15193,7 @@ class Renderer extends EventEmitting {
15639
15193
  this.session = session;
15640
15194
  this.layerConfig = {
15641
15195
  width: 1,
15642
- contentRange: new DistanceModel({ start: 0, end: 0 }),
15196
+ contentRange: new DistanceModel({ start: 0, end: 0 }), // paragraphs
15643
15197
  maxHeight: 1,
15644
15198
  offset: 0,
15645
15199
  height: 1,
@@ -16396,11 +15950,11 @@ class VirtualRenderer {
16396
15950
  this.scrollBar.setScrollTop(top);
16397
15951
  this.loop.schedule({ scroll: true });
16398
15952
  }
16399
- else if (this.scrollBar.scrollTop + this.container.scrollHeight < top + position.lineHeight) {
15953
+ else if (this.scrollBar.scrollTop + this.container.scrollHeight < top + position.height) {
16400
15954
  if (offset) {
16401
15955
  top += offset * this.container.scrollHeight;
16402
15956
  }
16403
- top += position.lineHeight - this.container.scrollHeight;
15957
+ top += position.height - this.container.scrollHeight;
16404
15958
  this.scrollBar.setScrollTop(top);
16405
15959
  this.loop.schedule({ scroll: true });
16406
15960
  }
@@ -16569,22 +16123,11 @@ class CustomContentService {
16569
16123
  }
16570
16124
  return null;
16571
16125
  }
16572
- isFragmentContainComponent(components, textFragment, fragmentDistance) {
16573
- if (textFragment.includes(CUSTOM_ELEMENT_MARKER)) {
16574
- return (this.isFragmentContainComponents(components.images, fragmentDistance) ||
16575
- this.isFragmentContainComponents(components.tabs, fragmentDistance) ||
16576
- this.isFragmentContainComponents(components.customElements, fragmentDistance));
16577
- }
16578
- if (textFragment.includes(TABLE_MARKER)) {
16579
- return this.isFragmentContainComponents(components.tables, fragmentDistance);
16580
- }
16581
- return false;
16582
- }
16583
- getComponents(components, distance) {
16584
- const images = components.images.filter(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
16585
- const tables = components.tables.filter(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
16586
- const tabs = components.tabs.filter(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
16587
- const custom = components.customElements.filter(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
16126
+ getComponents(components, start, end) {
16127
+ const images = components.images.filter(x => x.instance.insertIndex >= start && x.instance.insertIndex <= end);
16128
+ const tables = components.tables.filter(x => x.instance.insertIndex >= start && x.instance.insertIndex <= end);
16129
+ const tabs = components.tabs.filter(x => x.instance.insertIndex >= start && x.instance.insertIndex <= end);
16130
+ const custom = components.customElements.filter(x => x.instance.insertIndex >= start && x.instance.insertIndex <= end);
16588
16131
  return [...images, ...tables, ...tabs, ...custom].sort((a, b) => a.instance.insertIndex - b.instance.insertIndex);
16589
16132
  }
16590
16133
  getComponent(components, char, charIndex) {
@@ -16595,45 +16138,12 @@ class CustomContentService {
16595
16138
  }
16596
16139
  return this.findComponent(components.tables, charIndex);
16597
16140
  }
16598
- getTokenFromComponent(component, lineInfo, displayValue, isFirst, size) {
16599
- const ascent = component.instance.ascent() ?? 0;
16600
- const descent = component.instance.descent() ?? 0;
16601
- return new DisplayToken({
16602
- width: component.instance.width(),
16603
- height: ascent + descent,
16604
- baseline: 0,
16605
- content: 0,
16606
- font: size.font,
16607
- ascent,
16608
- descent,
16609
- line: 0,
16610
- lineSpacing: lineInfo.lineSpacing,
16611
- multiplier: 0,
16612
- align: lineInfo.align,
16613
- indentFirstLine: isFirst ? lineInfo.indent.firstLine : DEFAULT_PARAGRAPH_STYLE.indentFirstLine,
16614
- indentHanging: isFirst && !lineInfo.isNumbering ? lineInfo.indent.hanging : DEFAULT_PARAGRAPH_STYLE.indentHanging,
16615
- indentLeft: lineInfo.indent.left,
16616
- indentRight: lineInfo.indent.right,
16617
- indentBefore: lineInfo.offsetBefore,
16618
- indentAfter: lineInfo.offsetAfter,
16619
- markerWidth: isFirst && lineInfo.isNumbering ? lineInfo.markerWidth : 0,
16620
- isNumbering: lineInfo.isNumbering,
16621
- isPageBreak: false,
16622
- isLineBreak: false,
16623
- displayValue,
16624
- isTab: component.instance instanceof NoderTabComponent,
16625
- isTable: component.instance instanceof NoderTableComponent
16626
- });
16627
- }
16628
16141
  findComponentType(type) {
16629
16142
  return this.elements.find(x => x.type === type).componentType;
16630
16143
  }
16631
16144
  findComponent(components, insertIndex) {
16632
16145
  return components.find((x) => x.instance.insertIndex === insertIndex);
16633
16146
  }
16634
- isFragmentContainComponents(components, distance) {
16635
- return components.some(x => x.instance.insertIndex >= distance.start && x.instance.insertIndex <= distance.end);
16636
- }
16637
16147
  isSpecialMarker(char) {
16638
16148
  return char === CUSTOM_ELEMENT_MARKER || char === TABLE_MARKER;
16639
16149
  }
@@ -16926,6 +16436,16 @@ class RegulatorService {
16926
16436
  }
16927
16437
  return null;
16928
16438
  }
16439
+ getComment(commentId) {
16440
+ let comment = null;
16441
+ for (const session of this.sessions) {
16442
+ comment = session.session.model.comments.find(x => x.commentId === commentId);
16443
+ if (comment) {
16444
+ return { session, comment };
16445
+ }
16446
+ }
16447
+ return null;
16448
+ }
16929
16449
  setCommentsVisibility(value) {
16930
16450
  for (const sessionModel of this.sessions) {
16931
16451
  sessionModel.renderer.setCommentsVisibility(value);
@@ -17078,7 +16598,7 @@ class TabSettingsDialogComponent {
17078
16598
  });
17079
16599
  }
17080
16600
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TabSettingsDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$1.MatDialogRef }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
17081
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: TabSettingsDialogComponent, isStandalone: true, selector: "app-nod-tab-settings-dialog", host: { properties: { "class.noder-modal": "this.modal" } }, ngImport: i0, template: "<div class=\"columns\">\n <span class=\"position\">{{ 'NODER.LABEL.POSITION' | translate }}</span>\n <span class=\"alignment\">{{ 'NODER.LABEL.ALIGNMENT' | translate }}</span>\n</div>\n<form\n [formGroup]=\"form\"\n class=\"form\">\n <div\n class=\"tabs\"\n formArrayName=\"tabs\">\n @for (tabCtrl of tabsArray().controls; let i = $index; track i) {\n <div\n class=\"item\"\n [formGroupName]=\"i\">\n <div class=\"tab\">\n <mat-form-field class=\"position\">\n <input\n matInput\n type=\"number\"\n formControlName=\"position\" />\n </mat-form-field>\n <mat-form-field class=\"alignment\">\n <mat-select formControlName=\"alignment\">\n @for (alignment of alignments; track alignment) {\n <mat-option [value]=\"alignment.type\">\n {{ alignment.title | translate }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <button\n id=\"tab-setting-dialog-delete-btn\"\n mat-icon-button\n type=\"button\"\n (click)=\"onRemove(i)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n </button>\n </div>\n </div>\n }\n </div>\n</form>\n<div class=\"tab-actions\">\n <button\n id=\"tab-setting-dialog-add-btn\"\n mat-stroked-button\n (click)=\"onAddTab()\">\n {{ 'NODER.LABEL.ADD' | translate }}\n </button>\n <button\n id=\"tab-setting-dialog-clear-all-btn\"\n mat-stroked-button\n (click)=\"tabsArray().clear()\">\n {{ 'NODER.LABEL.CLEAR_ALL' | translate }}\n </button>\n</div>\n<div class=\"actions\">\n <button\n id=\"tab-setting-dialog-cancel-btn\"\n mat-stroked-button\n (click)=\"onClose()\">\n {{ 'NODER.LABEL.CANCEL' | translate }}\n </button>\n <button\n id=\"tab-setting-dialog-ok-btn\"\n mat-stroked-button\n (click)=\"onSave()\">\n {{ 'NODER.LABEL.SAVE' | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:550px;width:360px;padding:20px 0 20px 20px;gap:20px}.tabs{flex:1;overflow:hidden auto;display:flex;flex-direction:column}.form{height:350px;display:flex}.item{display:flex}.tab{display:flex;flex:1;gap:20px}.mat-mdc-form-field{width:120px}.columns{display:flex;gap:30%}.columns .position,.columns .alignment{font-weight:700}.tab-actions{display:flex;justify-content:start;gap:10px}.actions{display:flex;justify-content:end;gap:10px;margin-right:20px}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.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", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { 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", "disabledInteractive"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
16601
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: TabSettingsDialogComponent, isStandalone: true, selector: "app-nod-tab-settings-dialog", host: { properties: { "class.noder-modal": "this.modal" } }, ngImport: i0, template: "<div class=\"columns\">\n <span class=\"position\">{{ 'NODER.LABEL.POSITION' | translate }}</span>\n <span class=\"alignment\">{{ 'NODER.LABEL.ALIGNMENT' | translate }}</span>\n</div>\n<form\n [formGroup]=\"form\"\n class=\"form\">\n <div\n class=\"tabs\"\n formArrayName=\"tabs\">\n @for (tabCtrl of tabsArray().controls; let i = $index; track i) {\n <div\n class=\"item\"\n [formGroupName]=\"i\">\n <div class=\"tab\">\n <mat-form-field class=\"position\">\n <input\n matInput\n type=\"number\"\n formControlName=\"position\" />\n </mat-form-field>\n <mat-form-field class=\"alignment\">\n <mat-select formControlName=\"alignment\">\n @for (alignment of alignments; track alignment) {\n <mat-option [value]=\"alignment.type\">\n {{ alignment.title | translate }}\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n <button\n id=\"tab-setting-dialog-delete-btn\"\n mat-icon-button\n type=\"button\"\n (click)=\"onRemove(i)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n </button>\n </div>\n </div>\n }\n </div>\n</form>\n<div class=\"tab-actions\">\n <button\n id=\"tab-setting-dialog-add-btn\"\n mat-stroked-button\n (click)=\"onAddTab()\">\n {{ 'NODER.LABEL.ADD' | translate }}\n </button>\n <button\n id=\"tab-setting-dialog-clear-all-btn\"\n mat-stroked-button\n (click)=\"tabsArray().clear()\">\n {{ 'NODER.LABEL.CLEAR_ALL' | translate }}\n </button>\n</div>\n<div class=\"actions\">\n <button\n id=\"tab-setting-dialog-cancel-btn\"\n mat-stroked-button\n (click)=\"onClose()\">\n {{ 'NODER.LABEL.CANCEL' | translate }}\n </button>\n <button\n id=\"tab-setting-dialog-ok-btn\"\n mat-stroked-button\n (click)=\"onSave()\">\n {{ 'NODER.LABEL.SAVE' | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:550px;width:360px;padding:20px 0 20px 20px;gap:20px}.tabs{flex:1;overflow:hidden auto;display:flex;flex-direction:column}.form{height:350px;display:flex}.item{display:flex}.tab{display:flex;flex:1;gap:20px}.mat-mdc-form-field{width:120px}.columns{display:flex;gap:30%}.columns .position,.columns .alignment{font-weight:700}.tab-actions{display:flex;justify-content:start;gap:10px}.actions{display:flex;justify-content:end;gap:10px;margin-right:20px}\n"], dependencies: [{ kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.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", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i2.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i2.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17082
16602
  }
17083
16603
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TabSettingsDialogComponent, decorators: [{
17084
16604
  type: Component,
@@ -17497,13 +17017,13 @@ class EditorComponent {
17497
17017
  this.componentService.removeComponent(this.sidenavComponentRef);
17498
17018
  this.sidenavComponentRef = null;
17499
17019
  }
17500
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: ComponentService }, { token: EditorService }, { token: OverlayService }, { token: i0.Injector }, { token: RegulatorService }, { token: CommandsService }, { token: i6$1.Clipboard }, { token: InsertOverlays }], target: i0.ɵɵFactoryTarget.Component }); }
17501
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: EditorComponent, isStandalone: false, selector: "app-nod-editor", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: false, isRequired: false, transformFunction: null }, externalElementTagNames: { classPropertyName: "externalElementTagNames", publicName: "externalElementTagNames", isSignal: false, isRequired: false, transformFunction: null }, customPageWidth: { classPropertyName: "customPageWidth", publicName: "customPageWidth", isSignal: false, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: false, isRequired: false, transformFunction: null }, rulerUnit: { classPropertyName: "rulerUnit", publicName: "rulerUnit", isSignal: true, isRequired: true, transformFunction: null } }, 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 }, { propertyName: "searchBar", first: true, predicate: EditorSearchBarComponent, descendants: true }], ngImport: i0, template: "<mat-drawer-container\n class=\"sidenav-container\"\n [hasBackdrop]=\"sidenavProperties.hasBackdrop\">\n <mat-drawer-content>\n <div class=\"editor\">\n <app-nod-editor-ruler\n [unit]=\"rulerUnit()\"\n [disabled]=\"isViewOnly$ | async\" />\n @if (showSearchBar) {\n <app-nod-editor-search-bar />\n }\n <div class=\"container\">\n <div\n #container\n class=\"edit-container\"></div>\n </div>\n </div>\n </mat-drawer-content>\n <mat-drawer\n #drawer\n [class.drawer-mobile]=\"isMobile\"\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;overflow:hidden}.sidenav-container{width:100%}.mat-drawer-content{overflow:auto hidden;position:initial}.container{display:inline-block;height:calc(100% - 22px)}.editor{display:inline-block;height:100%;min-width:100%;text-align:center}.drawer-container{height:100%}.drawer-mobile{width:100%}app-nod-editor-search-bar{position:absolute;right:15px;top:0;z-index:3}\n"], dependencies: [{ kind: "component", type: EditorRulerComponent, selector: "app-nod-editor-ruler", inputs: ["unit", "disabled"] }, { kind: "component", type: EditorSearchBarComponent, selector: "app-nod-editor-search-bar" }, { kind: "component", type: i10.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i10.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i10.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17020
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: ComponentService }, { token: EditorService }, { token: OverlayService }, { token: i0.Injector }, { token: RegulatorService }, { token: CommandsService }, { token: i6$2.Clipboard }, { token: InsertOverlays }], target: i0.ɵɵFactoryTarget.Component }); }
17021
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: EditorComponent, isStandalone: false, selector: "app-nod-editor", inputs: { isMobile: { classPropertyName: "isMobile", publicName: "isMobile", isSignal: false, isRequired: false, transformFunction: null }, externalElementTagNames: { classPropertyName: "externalElementTagNames", publicName: "externalElementTagNames", isSignal: false, isRequired: false, transformFunction: null }, customPageWidth: { classPropertyName: "customPageWidth", publicName: "customPageWidth", isSignal: false, isRequired: false, transformFunction: null }, content: { classPropertyName: "content", publicName: "content", isSignal: false, isRequired: false, transformFunction: null }, rulerUnit: { classPropertyName: "rulerUnit", publicName: "rulerUnit", isSignal: true, isRequired: true, transformFunction: null } }, 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 }, { propertyName: "searchBar", first: true, predicate: EditorSearchBarComponent, descendants: true }], ngImport: i0, template: "<mat-drawer-container\n class=\"sidenav-container\"\n [hasBackdrop]=\"sidenavProperties.hasBackdrop\">\n <mat-drawer-content>\n <div class=\"editor\">\n <app-nod-editor-ruler\n [unit]=\"rulerUnit()\"\n [disabled]=\"isViewOnly$ | async\" />\n @if (showSearchBar) {\n <app-nod-editor-search-bar />\n }\n <div class=\"container\">\n <div\n #container\n class=\"edit-container\"></div>\n </div>\n </div>\n </mat-drawer-content>\n <mat-drawer\n #drawer\n [class.drawer-mobile]=\"isMobile\"\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;overflow:hidden}.sidenav-container{width:100%}.mat-drawer-content{overflow:auto hidden;position:initial}.container{display:inline-block;height:calc(100% - 22px)}.editor{display:inline-block;height:100%;min-width:100%;text-align:center}.drawer-container{height:100%}.drawer-mobile{width:100%}app-nod-editor-search-bar{position:absolute;right:15px;top:0;z-index:3}\n"], dependencies: [{ kind: "component", type: EditorRulerComponent, selector: "app-nod-editor-ruler", inputs: ["unit", "disabled"] }, { kind: "component", type: EditorSearchBarComponent, selector: "app-nod-editor-search-bar" }, { kind: "component", type: i10.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i10.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i10.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17502
17022
  }
17503
17023
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorComponent, decorators: [{
17504
17024
  type: Component,
17505
17025
  args: [{ selector: 'app-nod-editor', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: "<mat-drawer-container\n class=\"sidenav-container\"\n [hasBackdrop]=\"sidenavProperties.hasBackdrop\">\n <mat-drawer-content>\n <div class=\"editor\">\n <app-nod-editor-ruler\n [unit]=\"rulerUnit()\"\n [disabled]=\"isViewOnly$ | async\" />\n @if (showSearchBar) {\n <app-nod-editor-search-bar />\n }\n <div class=\"container\">\n <div\n #container\n class=\"edit-container\"></div>\n </div>\n </div>\n </mat-drawer-content>\n <mat-drawer\n #drawer\n [class.drawer-mobile]=\"isMobile\"\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;overflow:hidden}.sidenav-container{width:100%}.mat-drawer-content{overflow:auto hidden;position:initial}.container{display:inline-block;height:calc(100% - 22px)}.editor{display:inline-block;height:100%;min-width:100%;text-align:center}.drawer-container{height:100%}.drawer-mobile{width:100%}app-nod-editor-search-bar{position:absolute;right:15px;top:0;z-index:3}\n"] }]
17506
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: ComponentService }, { type: EditorService }, { type: OverlayService }, { type: i0.Injector }, { type: RegulatorService }, { type: CommandsService }, { type: i6$1.Clipboard }, { type: InsertOverlays }], propDecorators: { isMobile: [{
17026
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: ComponentService }, { type: EditorService }, { type: OverlayService }, { type: i0.Injector }, { type: RegulatorService }, { type: CommandsService }, { type: i6$2.Clipboard }, { type: InsertOverlays }], propDecorators: { isMobile: [{
17507
17027
  type: Input
17508
17028
  }], externalElementTagNames: [{
17509
17029
  type: Input
@@ -17550,6 +17070,7 @@ class EditorModule {
17550
17070
  providers: [
17551
17071
  { provide: EXTERNAL_ELEMENT_SIDENAV, useValue: new ExternalSidenavModel(options?.sidenav) },
17552
17072
  { provide: EXTERNAL_ELEMENT_SERVICE, useClass: options?.elementService ?? ExternalElementService },
17073
+ { provide: COMMENT_TYPES, useValue: options?.commentTypes ?? [] },
17553
17074
  { provide: InsertOverlays, useValue: new InsertOverlays(options?.insertOverlays) },
17554
17075
  { provide: ImageApiService, useClass: options?.imageApiService ?? DefaultImageApiService },
17555
17076
  {
@@ -17707,13 +17228,13 @@ class EditorTitleComponent {
17707
17228
  sel.addRange(range);
17708
17229
  element.focus();
17709
17230
  }
17710
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorTitleComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
17711
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorTitleComponent, isStandalone: true, selector: "app-nod-editor-title", inputs: { selectedMode: "selectedMode", showTitle: "showTitle", title: "title", defaultFileName: "defaultFileName", rename$: "rename$" }, outputs: { changeMode: "changeMode", renameDocumentTitle: "renameDocumentTitle" }, viewQueries: [{ propertyName: "titleSpan", first: true, predicate: ["titleSpan"], descendants: true, static: true }], ngImport: i0, template: "<div\n *ngIf=\"showTitle\"\n class=\"menu-header\">\n <div class=\"file-name\">\n <span\n #titleSpan\n class=\"title\"\n [matTooltip]=\"'NODER.LABEL.DOUBLE_CLICK_TO_RENAME' | translate\"\n (blur)=\"onRenameTitle($event)\"\n (keydown.enter)=\"$event.target.blur()\"\n (dblclick)=\"onFocus($event)\">\n {{ title }}\n </span>\n </div>\n</div>\n<div class=\"editor-mode\">\n <button\n *ngFor=\"let mode of modeOptions\"\n mat-icon-button\n [class.selected-mode]=\"selectedMode === mode.id\"\n [matTooltip]=\"mode.text\"\n (click)=\"selectedMode = mode.id; changeMode.emit(mode.id)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ mode.icon }}\" />\n </button>\n</div>\n", styles: [":host{display:flex;position:relative;align-items:center;width:100%}.menu-header{width:35%;line-height:0;z-index:1}.file-name{display:block;margin:0 8px;overflow:hidden}.title{font-size:18px;font-weight:400;line-height:normal;outline:none;display:inline-block;white-space:nowrap;min-width:1px;overflow:hidden;max-width:100%;-webkit-user-select:none;user-select:none}.title:not(:focus){text-overflow:ellipsis}.editor-mode{display:flex;position:absolute;justify-content:center;width:100%}.mdc-icon-button{min-width:40px;min-height:40px;width:40px;height:40px;padding:8px}.mdc-icon-button:not(:first-child){margin-left:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17231
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorTitleComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
17232
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorTitleComponent, isStandalone: true, selector: "app-nod-editor-title", inputs: { selectedMode: "selectedMode", showTitle: "showTitle", title: "title", defaultFileName: "defaultFileName", rename$: "rename$" }, outputs: { changeMode: "changeMode", renameDocumentTitle: "renameDocumentTitle" }, viewQueries: [{ propertyName: "titleSpan", first: true, predicate: ["titleSpan"], descendants: true, static: true }], ngImport: i0, template: "<div\n *ngIf=\"showTitle\"\n class=\"menu-header\">\n <div class=\"file-name\">\n <span\n #titleSpan\n class=\"title\"\n [matTooltip]=\"'NODER.LABEL.DOUBLE_CLICK_TO_RENAME' | translate\"\n (blur)=\"onRenameTitle($event)\"\n (keydown.enter)=\"$event.target.blur()\"\n (dblclick)=\"onFocus($event)\">\n {{ title }}\n </span>\n </div>\n</div>\n<div class=\"editor-mode\">\n <button\n *ngFor=\"let mode of modeOptions\"\n mat-icon-button\n [class.selected-mode]=\"selectedMode === mode.id\"\n [matTooltip]=\"mode.text\"\n (click)=\"selectedMode = mode.id; changeMode.emit(mode.id)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ mode.icon }}\" />\n </button>\n</div>\n", styles: [":host{display:flex;position:relative;align-items:center;width:100%}.menu-header{width:35%;line-height:0;z-index:1}.file-name{display:block;margin:0 8px;overflow:hidden}.title{font-size:18px;font-weight:400;line-height:normal;outline:none;display:inline-block;white-space:nowrap;min-width:1px;overflow:hidden;max-width:100%;-webkit-user-select:none;user-select:none}.title:not(:focus){text-overflow:ellipsis}.editor-mode{display:flex;position:absolute;justify-content:center;width:100%}.mdc-icon-button{min-width:40px;min-height:40px;width:40px;height:40px;padding:8px}.mdc-icon-button:not(:first-child){margin-left:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17712
17233
  }
17713
17234
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorTitleComponent, decorators: [{
17714
17235
  type: Component,
17715
17236
  args: [{ imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule, TranslateModule], selector: 'app-nod-editor-title', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n *ngIf=\"showTitle\"\n class=\"menu-header\">\n <div class=\"file-name\">\n <span\n #titleSpan\n class=\"title\"\n [matTooltip]=\"'NODER.LABEL.DOUBLE_CLICK_TO_RENAME' | translate\"\n (blur)=\"onRenameTitle($event)\"\n (keydown.enter)=\"$event.target.blur()\"\n (dblclick)=\"onFocus($event)\">\n {{ title }}\n </span>\n </div>\n</div>\n<div class=\"editor-mode\">\n <button\n *ngFor=\"let mode of modeOptions\"\n mat-icon-button\n [class.selected-mode]=\"selectedMode === mode.id\"\n [matTooltip]=\"mode.text\"\n (click)=\"selectedMode = mode.id; changeMode.emit(mode.id)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ mode.icon }}\" />\n </button>\n</div>\n", styles: [":host{display:flex;position:relative;align-items:center;width:100%}.menu-header{width:35%;line-height:0;z-index:1}.file-name{display:block;margin:0 8px;overflow:hidden}.title{font-size:18px;font-weight:400;line-height:normal;outline:none;display:inline-block;white-space:nowrap;min-width:1px;overflow:hidden;max-width:100%;-webkit-user-select:none;user-select:none}.title:not(:focus){text-overflow:ellipsis}.editor-mode{display:flex;position:absolute;justify-content:center;width:100%}.mdc-icon-button{min-width:40px;min-height:40px;width:40px;height:40px;padding:8px}.mdc-icon-button:not(:first-child){margin-left:10px}\n"] }]
17716
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i3.TranslateService }], propDecorators: { selectedMode: [{
17237
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i6.TranslateService }], propDecorators: { selectedMode: [{
17717
17238
  type: Input
17718
17239
  }], showTitle: [{
17719
17240
  type: Input
@@ -17734,7 +17255,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
17734
17255
 
17735
17256
  class EditorTitleMobileComponent extends EditorTitleComponent {
17736
17257
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorTitleMobileComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
17737
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorTitleMobileComponent, isStandalone: true, selector: "app-nod-editor-title-mobile", usesInheritance: true, ngImport: i0, template: "<div\n *ngIf=\"showTitle\"\n class=\"menu-header\">\n <div class=\"file-name\">\n <span\n #titleSpan\n class=\"title\"\n [matTooltip]=\"'NODER.LABEL.DOUBLE_CLICK_TO_RENAME' | translate\"\n (blur)=\"onRenameTitle($event)\"\n (keydown.enter)=\"$event.target.blur()\"\n (click)=\"onFocus($event)\">\n {{ title }}\n </span>\n </div>\n</div>\n<div class=\"editor-mode\">\n <div class=\"circles\">\n <div class=\"circle\"></div>\n <div class=\"circle\"></div>\n <div class=\"circle\"></div>\n </div>\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"modeMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ modeOptions[selectedMode].icon }}\" />\n </button>\n <mat-menu\n #modeMenu=\"matMenu\"\n class=\"noder-editor-title-mobile-menu\"\n yPosition=\"above\">\n <ng-container *ngFor=\"let mode of modeOptions\">\n <button\n *ngIf=\"selectedMode !== mode.id\"\n mat-icon-button\n (click)=\"selectedMode = mode.id; changeMode.emit(mode.id)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ mode.icon }}\" />\n </button>\n </ng-container>\n </mat-menu>\n</div>\n", styles: [":host{display:flex;position:relative;align-items:center;width:100%}.menu-header{width:calc(100% - 48px);line-height:0;z-index:1}.file-name{display:block;margin:0 8px;overflow:hidden}.title{font-size:18px;font-weight:400;line-height:normal;outline:none;display:inline-block;white-space:nowrap;min-width:1px;overflow:hidden;max-width:100%;-webkit-user-select:none;user-select:none}.title:not(:focus){text-overflow:ellipsis}.editor-mode{display:flex;flex-direction:column;position:relative}.circles{display:flex;flex-direction:row;justify-content:center;width:100%;position:absolute;top:-8px}.circle{width:4px;height:4px;border-radius:50%}.circle:not(:last-child){margin-right:5px}.mdc-icon-button{min-width:40px;min-height:40px;width:40px;height:40px;padding:8px}::ng-deep .noder-editor-title-mobile-menu{min-width:auto!important;min-height:auto!important;overflow:hidden!important}::ng-deep .noder-editor-title-mobile-menu .mat-mdc-menu-content{display:flex;flex-direction:column-reverse}::ng-deep .noder-editor-title-mobile-menu .mdc-icon-button{margin-bottom:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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: "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: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17258
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorTitleMobileComponent, isStandalone: true, selector: "app-nod-editor-title-mobile", usesInheritance: true, ngImport: i0, template: "<div\n *ngIf=\"showTitle\"\n class=\"menu-header\">\n <div class=\"file-name\">\n <span\n #titleSpan\n class=\"title\"\n [matTooltip]=\"'NODER.LABEL.DOUBLE_CLICK_TO_RENAME' | translate\"\n (blur)=\"onRenameTitle($event)\"\n (keydown.enter)=\"$event.target.blur()\"\n (click)=\"onFocus($event)\">\n {{ title }}\n </span>\n </div>\n</div>\n<div class=\"editor-mode\">\n <div class=\"circles\">\n <div class=\"circle\"></div>\n <div class=\"circle\"></div>\n <div class=\"circle\"></div>\n </div>\n <button\n mat-icon-button\n [matMenuTriggerFor]=\"modeMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ modeOptions[selectedMode].icon }}\" />\n </button>\n <mat-menu\n #modeMenu=\"matMenu\"\n class=\"noder-editor-title-mobile-menu\"\n yPosition=\"above\">\n <ng-container *ngFor=\"let mode of modeOptions\">\n <button\n *ngIf=\"selectedMode !== mode.id\"\n mat-icon-button\n (click)=\"selectedMode = mode.id; changeMode.emit(mode.id)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ mode.icon }}\" />\n </button>\n </ng-container>\n </mat-menu>\n</div>\n", styles: [":host{display:flex;position:relative;align-items:center;width:100%}.menu-header{width:calc(100% - 48px);line-height:0;z-index:1}.file-name{display:block;margin:0 8px;overflow:hidden}.title{font-size:18px;font-weight:400;line-height:normal;outline:none;display:inline-block;white-space:nowrap;min-width:1px;overflow:hidden;max-width:100%;-webkit-user-select:none;user-select:none}.title:not(:focus){text-overflow:ellipsis}.editor-mode{display:flex;flex-direction:column;position:relative}.circles{display:flex;flex-direction:row;justify-content:center;width:100%;position:absolute;top:-8px}.circle{width:4px;height:4px;border-radius:50%}.circle:not(:last-child){margin-right:5px}.mdc-icon-button{min-width:40px;min-height:40px;width:40px;height:40px;padding:8px}::ng-deep .noder-editor-title-mobile-menu{min-width:auto!important;min-height:auto!important;overflow:hidden!important}::ng-deep .noder-editor-title-mobile-menu .mat-mdc-menu-content{display:flex;flex-direction:column-reverse}::ng-deep .noder-editor-title-mobile-menu .mdc-icon-button{margin-bottom:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { 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: "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: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17738
17259
  }
17739
17260
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorTitleMobileComponent, decorators: [{
17740
17261
  type: Component,
@@ -17814,7 +17335,7 @@ class MenuDropdownsMobileComponent {
17814
17335
  this.elements = this.injector.get(EXTERNAL_ELEMENT_SERVICE).elements;
17815
17336
  }
17816
17337
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MenuDropdownsMobileComponent, deps: [{ token: i0.Injector }, { token: EditorService }, { token: ToolbarCoreService }], target: i0.ɵɵFactoryTarget.Component }); }
17817
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: MenuDropdownsMobileComponent, isStandalone: false, selector: "app-nod-menu-dropdowns-mobile", ngImport: i0, template: "<ng-container\n *ngIf=\"{\n isViewOnly: editorService.isViewOnly$ | async\n } as data\">\n <mat-accordion>\n <mat-expansion-panel hideToggle>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'NODER.LABEL.FILE' | translate }}</mat-panel-title>\n <mat-panel-description>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-content\">\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-mobile-item-new\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.new(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add-new\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NEW' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-mobile-item-open-from\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.openFrom(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-open-from\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.OPEN_FROM' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-mobile-item-save-as\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.saveAs(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-mobile-item-rename\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.rename(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-rename\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RENAME' | translate }}</span>\n </div>\n </button>\n <button\n class=\"hidden\"\n id=\"menu-dropdowns-mobile-item-print\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.print(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PRINT' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-mobile-item-delete\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.delete(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </div>\n </mat-expansion-panel>\n <ng-container *ngIf=\"!data.isViewOnly\">\n <mat-expansion-panel hideToggle>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'NODER.LABEL.INSERT' | translate }}</mat-panel-title>\n <mat-panel-description>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-content\">\n <button\n id=\"menu-dropdowns-mobile-item-image\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertImage(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.IMAGE' | translate }}</span>\n </div>\n </button>\n <div class=\"composition-button\">\n <button\n id=\"menu-dropdowns-mobile-item-table\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertTable()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\" />\n {{ 'NODER.LABEL.TABLE' | translate }}\n </button>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </div>\n <div class=\"composition-button\">\n <button\n id=\"menu-dropdowns-mobile-item-link\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertLink()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LINK' | translate }}</span>\n </div>\n </button>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </div>\n <button\n *ngFor=\"let element of elements\"\n id=\"menu-dropdowns-mobile-item-{{ element.nameId }}\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertCustomElement(element); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\" />\n <span class=\"menu-item-text\">{{ element.nameTranslate | translate }}</span>\n </div>\n </button>\n <div class=\"composition-button hidden\">\n <button\n id=\"menu-dropdowns-mobile-item-headers-footers\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </div>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel hideToggle>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'NODER.LABEL.LAYOUT' | translate }}</mat-panel-title>\n <mat-panel-description>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-content\">\n <button\n id=\"menu-dropdowns-mobile-item-page-break\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertPageBreak(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-page-break\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_BREAK' | translate }}</span>\n </div>\n </button>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel hideToggle>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'NODER.LABEL.FORMAT' | translate }}</mat-panel-title>\n <mat-panel-description>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-content\">\n <div class=\"composition-button\">\n <button\n id=\"menu-dropdowns-mobile-text-format\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.textFormat()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.TEXT_FORMAT' | translate }}</span>\n </div>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </button>\n </div>\n <div class=\"composition-button hidden\">\n <button\n id=\"menu-dropdowns-mobile-header-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </button>\n </div>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </mat-accordion>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;padding:25px}mat-expansion-panel.mat-expansion-panel ::ng-deep{box-shadow:none;border-bottom-width:1px;border-bottom-style:solid}mat-expansion-panel.mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding:0 18px}mat-panel-description{margin:0;justify-content:flex-end}.mat-expansion-panel-spacing{margin:0}.mat-expansion-panel-header,.mat-expansion-panel-header.mat-expanded{height:48px;padding-right:10px}.mat-expansion-panel-header.mat-expanded .mat-expansion-panel-header-description .mat-icon{transform:rotate(180deg)}.heading-menu{display:inline-flex;width:100%}.menu-item-text{white-space:nowrap;align-self:center}.composition-button{display:flex;flex-direction:row;align-items:center;position:relative}.composition-icon{position:absolute;right:0;transform:rotate(270deg)}.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4$2.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i4$2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i4$2.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17338
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: MenuDropdownsMobileComponent, isStandalone: false, selector: "app-nod-menu-dropdowns-mobile", ngImport: i0, template: "<ng-container\n *ngIf=\"{\n isViewOnly: editorService.isViewOnly$ | async\n } as data\">\n <mat-accordion>\n <mat-expansion-panel hideToggle>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'NODER.LABEL.FILE' | translate }}</mat-panel-title>\n <mat-panel-description>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-content\">\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-mobile-item-new\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.new(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add-new\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NEW' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-mobile-item-open-from\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.openFrom(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-open-from\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.OPEN_FROM' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-mobile-item-save-as\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.saveAs(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-mobile-item-rename\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.rename(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-rename\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RENAME' | translate }}</span>\n </div>\n </button>\n <button\n class=\"hidden\"\n id=\"menu-dropdowns-mobile-item-print\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.print(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PRINT' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-mobile-item-delete\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.delete(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </div>\n </mat-expansion-panel>\n <ng-container *ngIf=\"!data.isViewOnly\">\n <mat-expansion-panel hideToggle>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'NODER.LABEL.INSERT' | translate }}</mat-panel-title>\n <mat-panel-description>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-content\">\n <button\n id=\"menu-dropdowns-mobile-item-image\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertImage(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.IMAGE' | translate }}</span>\n </div>\n </button>\n <div class=\"composition-button\">\n <button\n id=\"menu-dropdowns-mobile-item-table\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertTable()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\" />\n {{ 'NODER.LABEL.TABLE' | translate }}\n </button>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </div>\n <div class=\"composition-button\">\n <button\n id=\"menu-dropdowns-mobile-item-link\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertLink()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LINK' | translate }}</span>\n </div>\n </button>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </div>\n <button\n *ngFor=\"let element of elements\"\n id=\"menu-dropdowns-mobile-item-{{ element.nameId }}\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertCustomElement(element); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\" />\n <span class=\"menu-item-text\">{{ element.nameTranslate | translate }}</span>\n </div>\n </button>\n <div class=\"composition-button hidden\">\n <button\n id=\"menu-dropdowns-mobile-item-headers-footers\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </div>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel hideToggle>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'NODER.LABEL.LAYOUT' | translate }}</mat-panel-title>\n <mat-panel-description>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-content\">\n <button\n id=\"menu-dropdowns-mobile-item-page-break\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.insertPageBreak(); toolbarCoreService.reset()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-page-break\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_BREAK' | translate }}</span>\n </div>\n </button>\n </div>\n </mat-expansion-panel>\n <mat-expansion-panel hideToggle>\n <mat-expansion-panel-header>\n <mat-panel-title>{{ 'NODER.LABEL.FORMAT' | translate }}</mat-panel-title>\n <mat-panel-description>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </mat-panel-description>\n </mat-expansion-panel-header>\n <div class=\"expansion-panel-content\">\n <div class=\"composition-button\">\n <button\n id=\"menu-dropdowns-mobile-text-format\"\n mat-menu-item\n (click)=\"toolbarCoreService.actions.textFormat()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.TEXT_FORMAT' | translate }}</span>\n </div>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </button>\n </div>\n <div class=\"composition-button hidden\">\n <button\n id=\"menu-dropdowns-mobile-header-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\" />\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n <mat-icon\n class=\"composition-icon\"\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\" />\n </button>\n </div>\n </div>\n </mat-expansion-panel>\n </ng-container>\n </mat-accordion>\n</ng-container>\n", styles: [":host{display:flex;flex-direction:column;padding:25px}mat-expansion-panel.mat-expansion-panel ::ng-deep{box-shadow:none;border-bottom-width:1px;border-bottom-style:solid}mat-expansion-panel.mat-expansion-panel ::ng-deep .mat-expansion-panel-body{padding:0 18px}mat-panel-description{margin:0;justify-content:flex-end}.mat-expansion-panel-spacing{margin:0}.mat-expansion-panel-header,.mat-expansion-panel-header.mat-expanded{height:48px;padding-right:10px}.mat-expansion-panel-header.mat-expanded .mat-expansion-panel-header-description .mat-icon{transform:rotate(180deg)}.heading-menu{display:inline-flex;width:100%}.menu-item-text{white-space:nowrap;align-self:center}.composition-button{display:flex;flex-direction:row;align-items:center;position:relative}.composition-icon{position:absolute;right:0;transform:rotate(270deg)}.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4$2.MatAccordion, selector: "mat-accordion", inputs: ["hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i4$2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["hideToggle", "togglePosition"], outputs: ["afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i4$2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["expandedHeight", "collapsedHeight", "tabIndex"] }, { kind: "directive", type: i4$2.MatExpansionPanelTitle, selector: "mat-panel-title" }, { kind: "directive", type: i4$2.MatExpansionPanelDescription, selector: "mat-panel-description" }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17818
17339
  }
17819
17340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MenuDropdownsMobileComponent, decorators: [{
17820
17341
  type: Component,
@@ -18080,6 +17601,9 @@ class BaseToolbarComponent extends DestroyComponent {
18080
17601
  this.updateTableBorderStyle = new EventEmitter();
18081
17602
  this.updateTableBorderWidth = new EventEmitter();
18082
17603
  this.updateTableBorders = new EventEmitter();
17604
+ this.selectSpacing = new EventEmitter();
17605
+ this.selectBefore = new EventEmitter();
17606
+ this.selectAfter = new EventEmitter();
18083
17607
  this.elements = this.injector.get(EXTERNAL_ELEMENT_SERVICE).elements;
18084
17608
  this.customIconService.register();
18085
17609
  this.historyInfoSubscription();
@@ -18139,7 +17663,7 @@ class BaseToolbarComponent extends DestroyComponent {
18139
17663
  });
18140
17664
  }
18141
17665
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BaseToolbarComponent, deps: [{ token: CustomIconService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: EditorService }], target: i0.ɵɵFactoryTarget.Directive }); }
18142
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.5", type: BaseToolbarComponent, isStandalone: true, outputs: { print: "print", redo: "redo", undo: "undo", createElement: "createElement", changeTextStyle: "changeTextStyle", changeParagraphStyle: "changeParagraphStyle", setNumberingTemplateType: "setNumberingTemplateType", removeNumberings: "removeNumberings", insertImage: "insertImage", insertLink: "insertLink", insertTable: "insertTable", updateTableBorderStyle: "updateTableBorderStyle", updateTableBorderWidth: "updateTableBorderWidth", updateTableBorders: "updateTableBorders" }, usesInheritance: true, ngImport: i0 }); }
17666
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.5", type: BaseToolbarComponent, isStandalone: true, outputs: { print: "print", redo: "redo", undo: "undo", createElement: "createElement", changeTextStyle: "changeTextStyle", changeParagraphStyle: "changeParagraphStyle", setNumberingTemplateType: "setNumberingTemplateType", removeNumberings: "removeNumberings", insertImage: "insertImage", insertLink: "insertLink", insertTable: "insertTable", updateTableBorderStyle: "updateTableBorderStyle", updateTableBorderWidth: "updateTableBorderWidth", updateTableBorders: "updateTableBorders", selectSpacing: "selectSpacing", selectBefore: "selectBefore", selectAfter: "selectAfter" }, usesInheritance: true, ngImport: i0 }); }
18143
17667
  }
18144
17668
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: BaseToolbarComponent, decorators: [{
18145
17669
  type: Directive
@@ -18171,6 +17695,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
18171
17695
  type: Output
18172
17696
  }], updateTableBorders: [{
18173
17697
  type: Output
17698
+ }], selectSpacing: [{
17699
+ type: Output
17700
+ }], selectBefore: [{
17701
+ type: Output
17702
+ }], selectAfter: [{
17703
+ type: Output
18174
17704
  }] } });
18175
17705
 
18176
17706
  class InsertTableComponent {
@@ -18214,7 +17744,7 @@ class InsertTableComponent {
18214
17744
  return arrayValues;
18215
17745
  }
18216
17746
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: InsertTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18217
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: InsertTableComponent, isStandalone: true, selector: "app-nod-insert-table", outputs: { selectSizes: "selectSizes" }, ngImport: i0, template: "<div class=\"table-size-container\">\n <ng-container *ngFor=\"let row of rows\">\n <div class=\"row\">\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"cell-container\"\n (mouseenter)=\"onCellHover(row, column)\"\n (click)=\"onCreateTable(row, column)\">\n <div\n class=\"cell\"\n [class.highlighted]=\"row <= currentRow && column <= currentColumn\"></div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"table-size\">{{ currentColumn }} x {{ currentRow }}</div>\n</div>\n", styles: [":host{border-radius:4px}.table-size-container{padding:14px 10px 8px}.row{display:flex;flex-direction:row}.cell-container{padding:2px}.cell{height:16px;width:16px}.table-size{display:flex;justify-content:center;padding-top:14px;font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17747
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: InsertTableComponent, isStandalone: true, selector: "app-nod-insert-table", outputs: { selectSizes: "selectSizes" }, ngImport: i0, template: "<div class=\"table-size-container\">\n <ng-container *ngFor=\"let row of rows\">\n <div class=\"row\">\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"cell-container\"\n (mouseenter)=\"onCellHover(row, column)\"\n (click)=\"onCreateTable(row, column)\">\n <div\n class=\"cell\"\n [class.highlighted]=\"row <= currentRow && column <= currentColumn\"></div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n <div class=\"table-size\">{{ currentColumn }} x {{ currentRow }}</div>\n</div>\n", styles: [":host{border-radius:4px}.table-size-container{padding:14px 10px 8px}.row{display:flex;flex-direction:row}.cell-container{padding:2px}.cell{height:16px;width:16px}.table-size{display:flex;justify-content:center;padding-top:14px;font-size:14px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18218
17748
  }
18219
17749
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: InsertTableComponent, decorators: [{
18220
17750
  type: Component,
@@ -18273,7 +17803,7 @@ class MenuDropdownsComponent extends BaseToolbarComponent {
18273
17803
  });
18274
17804
  }
18275
17805
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MenuDropdownsComponent, deps: [{ token: CustomIconService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
18276
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: MenuDropdownsComponent, isStandalone: false, selector: "app-nod-menu-dropdowns", inputs: { showFile: "showFile", showEdit: "showEdit", showInsert: "showInsert", showLayout: "showLayout", showFormat: "showFormat" }, outputs: { openFileFromDisk: "openFileFromDisk", saveAs: "saveAs", saveAsTemplate: "saveAsTemplate", downloadPdf: "downloadPdf", insertPageBreak: "insertPageBreak", createDocument: "createDocument", pageSetup: "pageSetup", rename: "rename", delete: "delete", openEditMenu: "openEditMenu", cutSelected: "cutSelected", copySelected: "copySelected", pasteClipboardData: "pasteClipboardData", selectAll: "selectAll", removeSelected: "removeSelected" }, viewQueries: [{ propertyName: "tableInsertMenu", first: true, predicate: ["tableInsert"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngIf=\"{\n clipboardData: editorService.clipboardData$ | async,\n hasSelection: editorService.hasSelection$ | async,\n isViewOnly: editorService.isViewOnly$ | async\n } as data\">\n <button\n *ngIf=\"showFile\"\n id=\"menu-dropdowns-menu-file\"\n mat-button\n [matMenuTriggerFor]=\"fileMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FILE' | translate }}\n </button>\n <mat-menu\n #fileMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"createDocument.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-new\"\n mat-menu-item\n (click)=\"createDocument.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add-new\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NEW' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-menu-page-setup\"\n mat-menu-item\n (click)=\"pageSetup.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-system-file\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"openFileFromDisk.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-open-from\"\n mat-menu-item\n (click)=\"openFileFromDisk.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-open-from\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.OPEN_FROM' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+O</span>\n </div>\n </button>\n <button\n *ngIf=\"saveAs.observed\"\n id=\"menu-dropdowns-menu-item-save-as\"\n mat-menu-item\n (click)=\"saveAs.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS' | translate }}</span>\n </div>\n </button>\n @if (saveAsTemplate.observed) {\n <button\n id=\"menu-dropdowns-menu-item-save-as-template\"\n mat-menu-item\n (click)=\"saveAsTemplate.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS_TEMPLATE' | translate }}</span>\n </div>\n </button>\n }\n <button\n *ngIf=\"downloadPdf.observed\"\n id=\"menu-dropdowns-menu-item-download-pdf\"\n mat-menu-item\n (click)=\"downloadPdf.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DOWNLOAD_PDF' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"rename.observed\"\n id=\"menu-dropdowns-menu-item-rename\"\n mat-menu-item\n (click)=\"rename.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-rename\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RENAME' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"print.observed\"\n id=\"menu-dropdowns-menu-item-print\"\n mat-menu-item\n (click)=\"print.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PRINT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+P</span>\n </div>\n </button>\n <button\n *ngIf=\"delete.observed\"\n id=\"menu-dropdowns-menu-item-delete\"\n mat-menu-item\n (click)=\"delete.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showEdit\"\n id=\"menu-dropdowns-menu-edit\"\n mat-button\n [matMenuTriggerFor]=\"editMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"openEditMenu.emit()\">\n {{ 'NODER.LABEL.EDIT' | translate }}\n </button>\n <mat-menu\n #editMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"undo.observed\"\n id=\"menu-dropdowns-menu-item-undo\"\n mat-menu-item\n [disabled]=\"!canUndo\"\n (click)=\"undo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Z</span>\n </div>\n </button>\n <button\n *ngIf=\"redo.observed\"\n id=\"menu-dropdowns-menu-item-redo\"\n mat-menu-item\n [disabled]=\"!canRedo\"\n (click)=\"redo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.REDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Y</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"cutSelected.observed\"\n id=\"menu-dropdowns-menu-item-cut\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"cutSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-cut\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CUT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+X</span>\n </div>\n </button>\n <button\n *ngIf=\"copySelected.observed\"\n id=\"menu-dropdowns-menu-item-copy\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"copySelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-file-copy\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.COPY' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+C</span>\n </div>\n </button>\n <button\n *ngIf=\"pasteClipboardData.observed\"\n id=\"menu-dropdowns-menu-item-paste\"\n mat-menu-item\n [disabled]=\"!data.clipboardData?.length\"\n (click)=\"pasteClipboardData.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-paste\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PASTE' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+V</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"selectAll.observed\"\n id=\"menu-dropdowns-menu-item-select-all\"\n mat-menu-item\n (click)=\"selectAll.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-select-all\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SELECT_ALL' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+A</span>\n </div>\n </button>\n <button\n *ngIf=\"removeSelected.observed\"\n id=\"menu-dropdowns-menu-item-delete-text\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"removeSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showInsert && !data.isViewOnly\"\n #insertMenuTrigger=\"matMenuTrigger\"\n id=\"menu-dropdowns-menu-insert\"\n mat-button\n [matMenuTriggerFor]=\"insertMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.INSERT' | translate }}\n </button>\n <mat-menu\n #insertMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertImage.observed\"\n id=\"menu-dropdowns-menu-item-image\"\n mat-menu-item\n (click)=\"insertImage.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.IMAGE' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-table\"\n mat-menu-item\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\"></mat-icon>\n {{ 'NODER.LABEL.TABLE' | translate }}\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"insertLink.observed\"\n id=\"menu-dropdowns-menu-item-link\"\n mat-menu-item\n (click)=\"insertLink.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LINK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+K</span>\n </div>\n </button>\n <button\n *ngFor=\"let element of elements\"\n id=\"menu-dropdowns-menu-item-{{ element.nameId }}\"\n mat-menu-item\n (click)=\"onCreateElement(element)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n <span class=\"menu-item-text\">{{ element.nameTranslate | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-headers-footers\"\n mat-menu-item\n class=\"hidden\"\n [matMenuTriggerFor]=\"listHeadersFootersMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listHeadersFootersMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-header\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-header\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADER' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-bottom\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.FOOTER' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n </mat-menu>\n <button\n *ngIf=\"showLayout && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-layout\"\n mat-button\n [matMenuTriggerFor]=\"layoutMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.LAYOUT' | translate }}\n </button>\n <mat-menu\n #layoutMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertPageBreak.observed\"\n id=\"menu-dropdowns-menu-item-page-break\"\n mat-menu-item\n (click)=\"insertPageBreak.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-page-break\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_BREAK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Enter</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showFormat && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-format\"\n mat-button\n [matMenuTriggerFor]=\"formatMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FORMAT' | translate }}\n </button>\n <mat-menu\n #formatMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align\"\n mat-menu-item\n [matMenuTriggerFor]=\"listAlignMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ALIGN' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listAlignMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align-left\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Left)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LEFT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+L</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-center\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Center)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CENTER' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+E</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-right\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Right)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RIGHT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+R</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-bullets-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletsNumberingMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLETS_AND_NUMBERING' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletsNumberingMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bullets\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLET_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList6)\"></mat-icon>\n </div>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listNumberedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NUMBERED_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList6)\"></mat-icon>\n </div>\n </mat-menu>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-text\"\n mat-menu-item\n [matMenuTriggerFor]=\"listTextMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.TEXT' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listTextMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bold\"\n mat-menu-item\n (click)=\"onApplyBold()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BOLD' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+B</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-italic\"\n mat-menu-item\n (click)=\"onApplyItalic()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ITALIC' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+I</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-underlined\"\n mat-menu-item\n (click)=\"onApplyUnderline()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDERLINED' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+U</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-header-footer\"\n mat-menu-item\n class=\"hidden\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n </mat-menu>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:100%}button.mat-mdc-button{letter-spacing:0}.menu-buttons mat-icon{width:24px;height:24px;font-size:24px}.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}.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-icon .selected:hover,.list-number .selected,.list-number .selected:hover{border-width:2px;border-style:solid}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InsertTableComponent, selector: "app-nod-insert-table", outputs: ["selectSizes"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.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"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17806
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: MenuDropdownsComponent, isStandalone: false, selector: "app-nod-menu-dropdowns", inputs: { showFile: "showFile", showEdit: "showEdit", showInsert: "showInsert", showLayout: "showLayout", showFormat: "showFormat" }, outputs: { openFileFromDisk: "openFileFromDisk", saveAs: "saveAs", saveAsTemplate: "saveAsTemplate", downloadPdf: "downloadPdf", insertPageBreak: "insertPageBreak", createDocument: "createDocument", pageSetup: "pageSetup", rename: "rename", delete: "delete", openEditMenu: "openEditMenu", cutSelected: "cutSelected", copySelected: "copySelected", pasteClipboardData: "pasteClipboardData", selectAll: "selectAll", removeSelected: "removeSelected" }, viewQueries: [{ propertyName: "tableInsertMenu", first: true, predicate: ["tableInsert"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<ng-container\n *ngIf=\"{\n clipboardData: editorService.clipboardData$ | async,\n hasSelection: editorService.hasSelection$ | async,\n isViewOnly: editorService.isViewOnly$ | async\n } as data\">\n <button\n *ngIf=\"showFile\"\n id=\"menu-dropdowns-menu-file\"\n mat-button\n [matMenuTriggerFor]=\"fileMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FILE' | translate }}\n </button>\n <mat-menu\n #fileMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"createDocument.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-new\"\n mat-menu-item\n (click)=\"createDocument.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add-new\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NEW' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"!data.isViewOnly\"\n id=\"menu-dropdowns-menu-page-setup\"\n mat-menu-item\n (click)=\"pageSetup.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-system-file\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"openFileFromDisk.observed && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-item-open-from\"\n mat-menu-item\n (click)=\"openFileFromDisk.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-open-from\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.OPEN_FROM' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+O</span>\n </div>\n </button>\n <button\n *ngIf=\"saveAs.observed\"\n id=\"menu-dropdowns-menu-item-save-as\"\n mat-menu-item\n (click)=\"saveAs.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS' | translate }}</span>\n </div>\n </button>\n @if (saveAsTemplate.observed) {\n <button\n id=\"menu-dropdowns-menu-item-save-as-template\"\n mat-menu-item\n (click)=\"saveAsTemplate.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SAVE_AS_TEMPLATE' | translate }}</span>\n </div>\n </button>\n }\n <button\n *ngIf=\"downloadPdf.observed\"\n id=\"menu-dropdowns-menu-item-download-pdf\"\n mat-menu-item\n (click)=\"downloadPdf.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-save\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DOWNLOAD_PDF' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"rename.observed\"\n id=\"menu-dropdowns-menu-item-rename\"\n mat-menu-item\n (click)=\"rename.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-rename\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RENAME' | translate }}</span>\n </div>\n </button>\n <button\n *ngIf=\"print.observed\"\n id=\"menu-dropdowns-menu-item-print\"\n mat-menu-item\n (click)=\"print.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PRINT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+P</span>\n </div>\n </button>\n <button\n *ngIf=\"delete.observed\"\n id=\"menu-dropdowns-menu-item-delete\"\n mat-menu-item\n (click)=\"delete.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showEdit\"\n id=\"menu-dropdowns-menu-edit\"\n mat-button\n [matMenuTriggerFor]=\"editMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n (menuOpened)=\"openEditMenu.emit()\">\n {{ 'NODER.LABEL.EDIT' | translate }}\n </button>\n <mat-menu\n #editMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"undo.observed\"\n id=\"menu-dropdowns-menu-item-undo\"\n mat-menu-item\n [disabled]=\"!canUndo\"\n (click)=\"undo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Z</span>\n </div>\n </button>\n <button\n *ngIf=\"redo.observed\"\n id=\"menu-dropdowns-menu-item-redo\"\n mat-menu-item\n [disabled]=\"!canRedo\"\n (click)=\"redo.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.REDO' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Y</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"cutSelected.observed\"\n id=\"menu-dropdowns-menu-item-cut\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"cutSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-cut\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CUT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+X</span>\n </div>\n </button>\n <button\n *ngIf=\"copySelected.observed\"\n id=\"menu-dropdowns-menu-item-copy\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"copySelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-file-copy\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.COPY' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+C</span>\n </div>\n </button>\n <button\n *ngIf=\"pasteClipboardData.observed\"\n id=\"menu-dropdowns-menu-item-paste\"\n mat-menu-item\n [disabled]=\"!data.clipboardData?.length\"\n (click)=\"pasteClipboardData.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-content-paste\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PASTE' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+V</span>\n </div>\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"selectAll.observed\"\n id=\"menu-dropdowns-menu-item-select-all\"\n mat-menu-item\n (click)=\"selectAll.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-select-all\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.SELECT_ALL' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+A</span>\n </div>\n </button>\n <button\n *ngIf=\"removeSelected.observed\"\n id=\"menu-dropdowns-menu-item-delete-text\"\n mat-menu-item\n [disabled]=\"!data.hasSelection\"\n (click)=\"removeSelected.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-delete\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.DELETE' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showInsert && !data.isViewOnly\"\n #insertMenuTrigger=\"matMenuTrigger\"\n id=\"menu-dropdowns-menu-insert\"\n mat-button\n [matMenuTriggerFor]=\"insertMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.INSERT' | translate }}\n </button>\n <mat-menu\n #insertMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertImage.observed\"\n id=\"menu-dropdowns-menu-item-image\"\n mat-menu-item\n (click)=\"insertImage.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.IMAGE' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-table\"\n mat-menu-item\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\"></mat-icon>\n {{ 'NODER.LABEL.TABLE' | translate }}\n </button>\n <hr class=\"noder-divider\" />\n <button\n *ngIf=\"insertLink.observed\"\n id=\"menu-dropdowns-menu-item-link\"\n mat-menu-item\n (click)=\"insertLink.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LINK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+K</span>\n </div>\n </button>\n <button\n *ngFor=\"let element of elements\"\n id=\"menu-dropdowns-menu-item-{{ element.nameId }}\"\n mat-menu-item\n (click)=\"onCreateElement(element)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n <span class=\"menu-item-text\">{{ element.nameTranslate | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-headers-footers\"\n mat-menu-item\n class=\"hidden\"\n [matMenuTriggerFor]=\"listHeadersFootersMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listHeadersFootersMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-header\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-header\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADER' | translate }}</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-footer\"\n mat-menu-item>\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-bottom\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.FOOTER' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n </mat-menu>\n <button\n *ngIf=\"showLayout && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-layout\"\n mat-button\n [matMenuTriggerFor]=\"layoutMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.LAYOUT' | translate }}\n </button>\n <mat-menu\n #layoutMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n *ngIf=\"insertPageBreak.observed\"\n id=\"menu-dropdowns-menu-item-page-break\"\n mat-menu-item\n (click)=\"insertPageBreak.emit()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-page-break\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.PAGE_BREAK' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+Enter</span>\n </div>\n </button>\n </mat-menu>\n <button\n *ngIf=\"showFormat && !data.isViewOnly\"\n id=\"menu-dropdowns-menu-format\"\n mat-button\n [matMenuTriggerFor]=\"formatMenu\"\n [matMenuTriggerRestoreFocus]=\"false\">\n {{ 'NODER.LABEL.FORMAT' | translate }}\n </button>\n <mat-menu\n #formatMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align\"\n mat-menu-item\n [matMenuTriggerFor]=\"listAlignMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ALIGN' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listAlignMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-align-left\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Left)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.LEFT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+L</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-center\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Center)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.CENTER' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+E</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-align-right\"\n mat-menu-item\n (click)=\"onSelectFormat(alignments.Right)\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.RIGHT' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+R</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-bullets-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletsNumberingMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLETS_AND_NUMBERING' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletsNumberingMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bullets\"\n mat-menu-item\n [matMenuTriggerFor]=\"listBulletedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bulleted\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BULLET_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-marker\">\n <mat-icon\n svgIcon=\"marker-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"marker-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.BulletList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.BulletList6)\"></mat-icon>\n </div>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-numbering\"\n mat-menu-item\n [matMenuTriggerFor]=\"listNumberedMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-numbered\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.NUMBERED_LIST_MENU' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\n yPosition=\"below\">\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-1\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList1\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList1)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-2\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList2\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList2)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-3\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList3\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList3)\"></mat-icon>\n </div>\n <div class=\"list-icon list-number\">\n <mat-icon\n svgIcon=\"number-4\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList4\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList4)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-5\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList5\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList5)\"></mat-icon>\n <mat-icon\n svgIcon=\"number-6\"\n [class.selected]=\"numberingTemplateType === numberingTemplateTypes.NumberList6\"\n (click)=\"onSelectNumberingTemplate(numberingTemplateTypes.NumberList6)\"></mat-icon>\n </div>\n </mat-menu>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-text\"\n mat-menu-item\n [matMenuTriggerFor]=\"listTextMenu\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.TEXT' | translate }}</span>\n </div>\n </button>\n <mat-menu\n #listTextMenu=\"matMenu\"\n class=\"noder-modal\">\n <button\n id=\"menu-dropdowns-menu-item-bold\"\n mat-menu-item\n (click)=\"onApplyBold()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.BOLD' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+B</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-italic\"\n mat-menu-item\n (click)=\"onApplyItalic()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.ITALIC' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+I</span>\n </div>\n </button>\n <button\n id=\"menu-dropdowns-menu-item-underlined\"\n mat-menu-item\n (click)=\"onApplyUnderline()\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.UNDERLINED' | translate }}</span>\n <span class=\"hot-keys\">Ctrl+U</span>\n </div>\n </button>\n </mat-menu>\n <button\n id=\"menu-dropdowns-menu-item-header-footer\"\n mat-menu-item\n class=\"hidden\">\n <div class=\"heading-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-headers-footers\"></mat-icon>\n <span class=\"menu-item-text\">{{ 'NODER.LABEL.HEADERS_AND_FOOTERS' | translate }}</span>\n </div>\n </button>\n </mat-menu>\n <mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n </mat-menu>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:100%}button.mat-mdc-button{letter-spacing:0}.menu-buttons mat-icon{width:24px;height:24px;font-size:24px}.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}.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-icon .selected:hover,.list-number .selected,.list-number .selected:hover{border-width:2px;border-style:solid}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: InsertTableComponent, selector: "app-nod-insert-table", outputs: ["selectSizes"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.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"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18277
17807
  }
18278
17808
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: MenuDropdownsComponent, decorators: [{
18279
17809
  type: Component,
@@ -18348,7 +17878,7 @@ class FontComponent {
18348
17878
  this.selectFont.emit(font);
18349
17879
  }
18350
17880
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FontComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18351
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FontComponent, isStandalone: true, selector: "app-nod-font", inputs: { isDisabled: "isDisabled", styles: "styles" }, outputs: { selectFont: "selectFont" }, ngImport: i0, template: "<button\n mat-button\n [matMenuTriggerFor]=\"fontMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matTooltip]=\"'NODER.TOOLTIP.FONT' | translate\"\n matTooltipPosition=\"below\">\n <div class=\"font-menu\">\n <span>{{ font }}</span>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu\n #fontMenu=\"matMenu\"\n class=\"noder-modal\">\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: [".font-menu{display:flex;justify-content:space-between;align-items:center;width:130px}span{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:start}button{margin:0 4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17881
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FontComponent, isStandalone: true, selector: "app-nod-font", inputs: { isDisabled: "isDisabled", styles: "styles" }, outputs: { selectFont: "selectFont" }, ngImport: i0, template: "<button\n mat-button\n [matMenuTriggerFor]=\"fontMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matTooltip]=\"'NODER.TOOLTIP.FONT' | translate\"\n matTooltipPosition=\"below\">\n <div class=\"font-menu\">\n <span>{{ font }}</span>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu\n #fontMenu=\"matMenu\"\n class=\"noder-modal\">\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: [".font-menu{display:flex;justify-content:space-between;align-items:center;width:130px}span{flex:1;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;text-align:start}button{margin:0 4px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18352
17882
  }
18353
17883
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FontComponent, decorators: [{
18354
17884
  type: Component,
@@ -18420,7 +17950,7 @@ class FontSizeComponent {
18420
17950
  }
18421
17951
  }
18422
17952
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FontSizeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18423
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FontSizeComponent, isStandalone: true, selector: "app-nod-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 [matTooltip]=\"'NODER.TOOLTIP.DECREMENT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-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 [matTooltip]=\"'NODER.TOOLTIP.FONTSIZE' | translate\"\n matTooltipPosition=\"below\" />\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 [matTooltip]=\"'NODER.TOOLTIP.INCREMENT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n</button>\n", styles: ["input{width:48px;height:32px;text-align:center;border-color:transparent}button.mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;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: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i2$2.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: i3$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17953
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FontSizeComponent, isStandalone: true, selector: "app-nod-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 [matTooltip]=\"'NODER.TOOLTIP.DECREMENT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-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 [matTooltip]=\"'NODER.TOOLTIP.FONTSIZE' | translate\"\n matTooltipPosition=\"below\" />\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 [matTooltip]=\"'NODER.TOOLTIP.INCREMENT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n</button>\n", styles: ["input{width:48px;height:32px;text-align:center;border-color:transparent}button.mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;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: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i2$2.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: i3$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18424
17954
  }
18425
17955
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FontSizeComponent, decorators: [{
18426
17956
  type: Component,
@@ -18453,7 +17983,7 @@ class TableBordersComponent {
18453
17983
  this.updateTableBorders = new EventEmitter();
18454
17984
  }
18455
17985
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableBordersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18456
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: TableBordersComponent, isStandalone: true, selector: "app-nod-table-borders", inputs: { isDisabled: "isDisabled" }, outputs: { updateTableBorders: "updateTableBorders" }, ngImport: i0, template: "<button\n mat-button\n [disabled]=\"isDisabled\"\n [class.active-button]=\"active\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matMenuTriggerFor]=\"menu\"\n (menuOpened)=\"active = true\"\n (menuClosed)=\"active = false\"\n [matTooltip]=\"'NODER.LABEL.BORDERS' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-bottom\" />\n</button>\n<mat-menu\n #menu=\"matMenu\"\n yPosition=\"below\">\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Bottom)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-bottom\" />\n <div class=\"label\">{{ 'NODER.LABEL.BOTTOM_BORDER' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Top)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-top\" />\n <div class=\"label\">{{ 'NODER.LABEL.TOP_BORDER' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Left)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-left\" />\n <div class=\"label\">{{ 'NODER.LABEL.LEFT_BORDER' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Right)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-right\" />\n <div class=\"label\">{{ 'NODER.LABEL.RIGHT_BORDER' | translate }}</div>\n </div>\n <mat-divider />\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Empty)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-none\" />\n <div class=\"label\">{{ 'NODER.LABEL.NO_BORDER' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.All)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-all\" />\n <div class=\"label\">{{ 'NODER.LABEL.ALL_BORDERS' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Outside)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-outside\" />\n <div class=\"label\">{{ 'NODER.LABEL.OUTSIDE_BORDERS' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Inside)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-inside\" />\n <div class=\"label\">{{ 'NODER.LABEL.INSIDE_BORDERS' | translate }}</div>\n </div>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.label{font-size:14px;font-style:normal;font-weight:400;line-height:normal}.mat-divider{margin:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i2$3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
17986
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: TableBordersComponent, isStandalone: true, selector: "app-nod-table-borders", inputs: { isDisabled: "isDisabled" }, outputs: { updateTableBorders: "updateTableBorders" }, ngImport: i0, template: "<button\n mat-button\n [disabled]=\"isDisabled\"\n [class.active-button]=\"active\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matMenuTriggerFor]=\"menu\"\n (menuOpened)=\"active = true\"\n (menuClosed)=\"active = false\"\n [matTooltip]=\"'NODER.LABEL.BORDERS' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-bottom\" />\n</button>\n<mat-menu\n #menu=\"matMenu\"\n yPosition=\"below\">\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Bottom)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-bottom\" />\n <div class=\"label\">{{ 'NODER.LABEL.BOTTOM_BORDER' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Top)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-top\" />\n <div class=\"label\">{{ 'NODER.LABEL.TOP_BORDER' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Left)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-left\" />\n <div class=\"label\">{{ 'NODER.LABEL.LEFT_BORDER' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Right)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-right\" />\n <div class=\"label\">{{ 'NODER.LABEL.RIGHT_BORDER' | translate }}</div>\n </div>\n <mat-divider />\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Empty)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-none\" />\n <div class=\"label\">{{ 'NODER.LABEL.NO_BORDER' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.All)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-all\" />\n <div class=\"label\">{{ 'NODER.LABEL.ALL_BORDERS' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Outside)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-outside\" />\n <div class=\"label\">{{ 'NODER.LABEL.OUTSIDE_BORDERS' | translate }}</div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorders.emit(borders.Inside)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-inside\" />\n <div class=\"label\">{{ 'NODER.LABEL.INSIDE_BORDERS' | translate }}</div>\n </div>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.label{font-size:14px;font-style:normal;font-weight:400;line-height:normal}.mat-divider{margin:0 8px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i2$3.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18457
17987
  }
18458
17988
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableBordersComponent, decorators: [{
18459
17989
  type: Component,
@@ -18472,7 +18002,7 @@ class TableBorderStyleComponent {
18472
18002
  this.updateTableBorderStyle = new EventEmitter();
18473
18003
  }
18474
18004
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableBorderStyleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18475
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: TableBorderStyleComponent, isStandalone: true, selector: "app-nod-table-border-style", inputs: { isDisabled: "isDisabled" }, outputs: { updateTableBorderStyle: "updateTableBorderStyle" }, ngImport: i0, template: "<button\n mat-button\n [disabled]=\"isDisabled\"\n [class.active-button]=\"active\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matMenuTriggerFor]=\"menu\"\n (menuOpened)=\"active = true\"\n (menuClosed)=\"active = false\"\n [matTooltip]=\"'NODER.TOOLTIP.BORDER_STYLE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-dash\" />\n</button>\n<mat-menu\n #menu=\"matMenu\"\n yPosition=\"below\">\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorderStyle.emit(lineStyles.Single)\">\n <div class=\"solid-border\"></div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorderStyle.emit(lineStyles.Dashed)\">\n <div class=\"dashed-border\"></div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorderStyle.emit(lineStyles.Dotted)\">\n <div class=\"dotted-border\"></div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorderStyle.emit(lineStyles.Double)\">\n <div class=\"double-border\"></div>\n </div>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.solid-border{border-bottom:1px solid}.dashed-border{border-bottom:1px dashed}.dotted-border{border-bottom:1px dotted}.double-border{border-bottom:4px double}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18005
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: TableBorderStyleComponent, isStandalone: true, selector: "app-nod-table-border-style", inputs: { isDisabled: "isDisabled" }, outputs: { updateTableBorderStyle: "updateTableBorderStyle" }, ngImport: i0, template: "<button\n mat-button\n [disabled]=\"isDisabled\"\n [class.active-button]=\"active\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matMenuTriggerFor]=\"menu\"\n (menuOpened)=\"active = true\"\n (menuClosed)=\"active = false\"\n [matTooltip]=\"'NODER.TOOLTIP.BORDER_STYLE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-dash\" />\n</button>\n<mat-menu\n #menu=\"matMenu\"\n yPosition=\"below\">\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorderStyle.emit(lineStyles.Single)\">\n <div class=\"solid-border\"></div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorderStyle.emit(lineStyles.Dashed)\">\n <div class=\"dashed-border\"></div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorderStyle.emit(lineStyles.Dotted)\">\n <div class=\"dotted-border\"></div>\n </div>\n <div\n mat-menu-item\n class=\"border\"\n (click)=\"updateTableBorderStyle.emit(lineStyles.Double)\">\n <div class=\"double-border\"></div>\n </div>\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.solid-border{border-bottom:1px solid}.dashed-border{border-bottom:1px dashed}.dotted-border{border-bottom:1px dotted}.double-border{border-bottom:4px double}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18476
18006
  }
18477
18007
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableBorderStyleComponent, decorators: [{
18478
18008
  type: Component,
@@ -18491,7 +18021,7 @@ class TableBorderWidthComponent {
18491
18021
  this.updateTableBorderWidth = new EventEmitter();
18492
18022
  }
18493
18023
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableBorderWidthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18494
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: TableBorderWidthComponent, isStandalone: true, selector: "app-nod-table-border-width", inputs: { isDisabled: "isDisabled" }, outputs: { updateTableBorderWidth: "updateTableBorderWidth" }, ngImport: i0, template: "<button\n mat-button\n [disabled]=\"isDisabled\"\n [class.active-button]=\"active\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matMenuTriggerFor]=\"menu\"\n (menuOpened)=\"active = true\"\n (menuClosed)=\"active = false\"\n [matTooltip]=\"'NODER.TOOLTIP.BORDER_WIDTH' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-width\" />\n</button>\n<mat-menu\n #menu=\"matMenu\"\n yPosition=\"below\">\n @for (width of widths; track $index) {\n <div\n mat-menu-item\n class=\"border-width\"\n (click)=\"updateTableBorderWidth.emit(width)\">\n {{ width }} pt\n </div>\n }\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.border-width{font-size:14px;font-style:normal;font-weight:400;line-height:normal}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18024
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: TableBorderWidthComponent, isStandalone: true, selector: "app-nod-table-border-width", inputs: { isDisabled: "isDisabled" }, outputs: { updateTableBorderWidth: "updateTableBorderWidth" }, ngImport: i0, template: "<button\n mat-button\n [disabled]=\"isDisabled\"\n [class.active-button]=\"active\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matMenuTriggerFor]=\"menu\"\n (menuOpened)=\"active = true\"\n (menuClosed)=\"active = false\"\n [matTooltip]=\"'NODER.TOOLTIP.BORDER_WIDTH' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-border-width\" />\n</button>\n<mat-menu\n #menu=\"matMenu\"\n yPosition=\"below\">\n @for (width of widths; track $index) {\n <div\n mat-menu-item\n class=\"border-width\"\n (click)=\"updateTableBorderWidth.emit(width)\">\n {{ width }} pt\n </div>\n }\n</mat-menu>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.border-width{font-size:14px;font-style:normal;font-weight:400;line-height:normal}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { 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: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18495
18025
  }
18496
18026
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TableBorderWidthComponent, decorators: [{
18497
18027
  type: Component,
@@ -18510,7 +18040,7 @@ class ColorPickerComponent {
18510
18040
  this.colorChange.emit(color);
18511
18041
  }
18512
18042
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18513
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ColorPickerComponent, isStandalone: true, selector: "app-nod-color-picker", inputs: { color: "color", icon: "icon", isDisabled: "isDisabled", palette: "palette", tooltip: "tooltip" }, outputs: { colorChange: "colorChange" }, ngImport: i0, template: "<button\n mat-button\n ngx-colors-trigger\n overlayClassName=\"noder-color-picker-overlay\"\n [disabled]=\"isDisabled\"\n [(ngModel)]=\"color\"\n [palette]=\"palette\"\n [hideTextInput]=\"true\"\n [attachTo]=\"icon\"\n (input)=\"onChangeColor(color)\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"below\">\n <div class=\"color-text\">\n <mat-icon\n fontSet=\"noder-icon\"\n [ngStyle]=\"{ color: color && color !== 'transparent' ? color : 'inherit' }\"\n [fontIcon]=\"icon\"></mat-icon>\n </div>\n</button>\n", styles: ["button{margin:0 3px}.color-text{display:inline-flex;height:22px}.mdc-button{min-width:32px;height:32px;width:32px;padding:0}.mdc-button mat-icon{height:24px;width:24px;font-size:22px}.mdc-button::ng-deep .mdc-button__label{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: NgxColorsModule }, { kind: "directive", type: i5$3.NgxColorsTriggerDirective, selector: "[ngx-colors-trigger]", inputs: ["colorsAnimation", "palette", "format", "formats", "position", "hideTextInput", "hideColorPicker", "attachTo", "overlayClassName", "colorPickerControls", "acceptLabel", "cancelLabel"], outputs: ["change", "input", "slider", "close", "open"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18043
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ColorPickerComponent, isStandalone: true, selector: "app-nod-color-picker", inputs: { color: "color", icon: "icon", isDisabled: "isDisabled", palette: "palette", tooltip: "tooltip" }, outputs: { colorChange: "colorChange" }, ngImport: i0, template: "<button\n mat-button\n ngx-colors-trigger\n overlayClassName=\"noder-color-picker-overlay\"\n [disabled]=\"isDisabled\"\n [(ngModel)]=\"color\"\n [palette]=\"palette\"\n [hideTextInput]=\"true\"\n [attachTo]=\"icon\"\n (input)=\"onChangeColor(color)\"\n [matTooltip]=\"tooltip\"\n matTooltipPosition=\"below\">\n <div class=\"color-text\">\n <mat-icon\n fontSet=\"noder-icon\"\n [ngStyle]=\"{ color: color && color !== 'transparent' ? color : 'inherit' }\"\n [fontIcon]=\"icon\"></mat-icon>\n </div>\n</button>\n", styles: ["button{margin:0 3px}.color-text{display:inline-flex;height:22px}.mdc-button{min-width:32px;height:32px;width:32px;padding:0}.mdc-button mat-icon{height:24px;width:24px;font-size:22px}.mdc-button::ng-deep .mdc-button__label{display:flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: NgxColorsModule }, { kind: "directive", type: i5$3.NgxColorsTriggerDirective, selector: "[ngx-colors-trigger]", inputs: ["colorsAnimation", "palette", "format", "formats", "position", "hideTextInput", "hideColorPicker", "attachTo", "overlayClassName", "colorPickerControls", "acceptLabel", "cancelLabel"], outputs: ["change", "input", "slider", "close", "open"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18514
18044
  }
18515
18045
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ColorPickerComponent, decorators: [{
18516
18046
  type: Component,
@@ -18574,7 +18104,7 @@ class FontStyleComponent {
18574
18104
  this.selectHighlightColor.emit(color);
18575
18105
  }
18576
18106
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FontStyleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18577
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FontStyleComponent, isStandalone: false, selector: "app-nod-font-style", inputs: { isDisabled: "isDisabled", bold: "bold", italic: "italic", underline: "underline", fontColor: "fontColor", highlightColor: "highlightColor" }, outputs: { toggleBold: "toggleBold", toggleItalic: "toggleItalic", toggleUnderline: "toggleUnderline", selectFontColor: "selectFontColor", selectHighlightColor: "selectHighlightColor" }, ngImport: i0, template: "<mat-button-toggle-group\n multiple\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\">\n <mat-button-toggle\n [disabled]=\"isDisabled\"\n [checked]=\"bold\"\n (click)=\"onToggleBold()\"\n [matTooltip]=\"'NODER.TOOLTIP.BOLD' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\" />\n </mat-button-toggle>\n <mat-button-toggle\n [disabled]=\"isDisabled\"\n [checked]=\"italic\"\n (click)=\"onToggleItalic()\"\n [matTooltip]=\"'NODER.TOOLTIP.ITALIC' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\" />\n </mat-button-toggle>\n <mat-button-toggle\n [disabled]=\"isDisabled\"\n [checked]=\"underline\"\n (click)=\"onToggleUnderline()\"\n [matTooltip]=\"'NODER.TOOLTIP.UNDERLINE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\" />\n </mat-button-toggle>\n</mat-button-toggle-group>\n<app-nod-color-picker\n *ngIf=\"selectFontColor.observed\"\n id=\"icon-format-colortext\"\n class=\"text-color\"\n [color]=\"fontColor\"\n [isDisabled]=\"isDisabled\"\n icon=\"icon-format-colortext\"\n [palette]=\"textColorPalette\"\n (colorChange)=\"onSelectFontColor($event)\"\n [tooltip]=\"'NODER.TOOLTIP.FONTCOLOR' | translate\" />\n<app-nod-color-picker\n *ngIf=\"selectHighlightColor.observed\"\n id=\"icon-link-highlighter\"\n class=\"highlight-color\"\n [color]=\"highlightColor\"\n [isDisabled]=\"isDisabled\"\n icon=\"icon-link-highlighter\"\n [palette]=\"highlightColorPalette\"\n (colorChange)=\"onSelectHighlightColor($event)\"\n [tooltip]=\"'NODER.TOOLTIP.HIGHLIGHTCOLOR' | translate\" />\n", styles: ["mat-button-toggle,button{margin:0 4px}.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}:host{display:flex;align-items:center}:host ::ng-deep #format-color-highlight .circle.button:first-child,:host ::ng-deep #format-color-highlight .circle.wrapper.color:first-child{flex:100%;width:100%;background:no-repeat left/20px url(https://cdn3.iconfinder.com/data/icons/google-material-design-icons/48/ic_format_color_reset_48px-512.png);border-radius:unset}:host ::ng-deep #format-color-highlight .circle.button:first-child .circle.color.circle-border,:host ::ng-deep #format-color-highlight .circle.wrapper.color:first-child .circle.color.circle-border{width:100%;border:unset}:host ::ng-deep #format-color-highlight .circle.button:first-child .circle.color.circle-border .selected,:host ::ng-deep #format-color-highlight .circle.wrapper.color:first-child .circle.color.circle-border .selected{display:none}\n"], dependencies: [{ kind: "component", type: ColorPickerComponent, selector: "app-nod-color-picker", inputs: ["color", "icon", "isDisabled", "palette", "tooltip"], outputs: ["colorChange"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18107
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FontStyleComponent, isStandalone: false, selector: "app-nod-font-style", inputs: { isDisabled: "isDisabled", bold: "bold", italic: "italic", underline: "underline", fontColor: "fontColor", highlightColor: "highlightColor" }, outputs: { toggleBold: "toggleBold", toggleItalic: "toggleItalic", toggleUnderline: "toggleUnderline", selectFontColor: "selectFontColor", selectHighlightColor: "selectHighlightColor" }, ngImport: i0, template: "<mat-button-toggle-group\n multiple\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\">\n <mat-button-toggle\n [disabled]=\"isDisabled\"\n [checked]=\"bold\"\n (click)=\"onToggleBold()\"\n [matTooltip]=\"'NODER.TOOLTIP.BOLD' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\" />\n </mat-button-toggle>\n <mat-button-toggle\n [disabled]=\"isDisabled\"\n [checked]=\"italic\"\n (click)=\"onToggleItalic()\"\n [matTooltip]=\"'NODER.TOOLTIP.ITALIC' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\" />\n </mat-button-toggle>\n <mat-button-toggle\n [disabled]=\"isDisabled\"\n [checked]=\"underline\"\n (click)=\"onToggleUnderline()\"\n [matTooltip]=\"'NODER.TOOLTIP.UNDERLINE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\" />\n </mat-button-toggle>\n</mat-button-toggle-group>\n<app-nod-color-picker\n *ngIf=\"selectFontColor.observed\"\n id=\"icon-format-colortext\"\n class=\"text-color\"\n [color]=\"fontColor\"\n [isDisabled]=\"isDisabled\"\n icon=\"icon-format-colortext\"\n [palette]=\"textColorPalette\"\n (colorChange)=\"onSelectFontColor($event)\"\n [tooltip]=\"'NODER.TOOLTIP.FONTCOLOR' | translate\" />\n<app-nod-color-picker\n *ngIf=\"selectHighlightColor.observed\"\n id=\"icon-link-highlighter\"\n class=\"highlight-color\"\n [color]=\"highlightColor\"\n [isDisabled]=\"isDisabled\"\n icon=\"icon-link-highlighter\"\n [palette]=\"highlightColorPalette\"\n (colorChange)=\"onSelectHighlightColor($event)\"\n [tooltip]=\"'NODER.TOOLTIP.HIGHLIGHTCOLOR' | translate\" />\n", styles: ["mat-button-toggle,button{margin:0 4px}.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}:host{display:flex;align-items:center}:host ::ng-deep #format-color-highlight .circle.button:first-child,:host ::ng-deep #format-color-highlight .circle.wrapper.color:first-child{flex:100%;width:100%;background:no-repeat left/20px url(https://cdn3.iconfinder.com/data/icons/google-material-design-icons/48/ic_format_color_reset_48px-512.png);border-radius:unset}:host ::ng-deep #format-color-highlight .circle.button:first-child .circle.color.circle-border,:host ::ng-deep #format-color-highlight .circle.wrapper.color:first-child .circle.color.circle-border{width:100%;border:unset}:host ::ng-deep #format-color-highlight .circle.button:first-child .circle.color.circle-border .selected,:host ::ng-deep #format-color-highlight .circle.wrapper.color:first-child .circle.color.circle-border .selected{display:none}\n"], dependencies: [{ kind: "component", type: ColorPickerComponent, selector: "app-nod-color-picker", inputs: ["color", "icon", "isDisabled", "palette", "tooltip"], outputs: ["colorChange"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18578
18108
  }
18579
18109
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FontStyleComponent, decorators: [{
18580
18110
  type: Component,
@@ -18613,7 +18143,7 @@ class FormatComponent {
18613
18143
  this.selectAlignment.emit(format);
18614
18144
  }
18615
18145
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FormatComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18616
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FormatComponent, isStandalone: false, selector: "app-nod-format", inputs: { isDisabled: "isDisabled", alignment: "alignment" }, outputs: { selectAlignment: "selectAlignment" }, ngImport: i0, template: "<mat-button-toggle-group\n name=\"format\"\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [disabled]=\"isDisabled\"\n [value]=\"alignment\"\n (change)=\"onSelectFormat($event.value)\">\n <mat-button-toggle\n [value]=\"alignments.Left\"\n [matTooltip]=\"'NODER.TOOLTIP.LEFT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n [value]=\"alignments.Center\"\n [matTooltip]=\"'NODER.TOOLTIP.CENTER' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n [value]=\"alignments.Right\"\n [matTooltip]=\"'NODER.TOOLTIP.RIGHT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n [value]=\"alignments.Justify\"\n [matTooltip]=\"'NODER.TOOLTIP.JUSTIFY' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-align\"></mat-icon>\n </mat-button-toggle>\n</mat-button-toggle-group>\n", styles: [":host{display:flex;align-items:center}mat-button-toggle{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}\n"], dependencies: [{ kind: "directive", type: i3$3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18146
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: FormatComponent, isStandalone: false, selector: "app-nod-format", inputs: { isDisabled: "isDisabled", alignment: "alignment" }, outputs: { selectAlignment: "selectAlignment" }, ngImport: i0, template: "<mat-button-toggle-group\n name=\"format\"\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [disabled]=\"isDisabled\"\n [value]=\"alignment\"\n (change)=\"onSelectFormat($event.value)\">\n <mat-button-toggle\n [value]=\"alignments.Left\"\n [matTooltip]=\"'NODER.TOOLTIP.LEFT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n [value]=\"alignments.Center\"\n [matTooltip]=\"'NODER.TOOLTIP.CENTER' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n [value]=\"alignments.Right\"\n [matTooltip]=\"'NODER.TOOLTIP.RIGHT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n [value]=\"alignments.Justify\"\n [matTooltip]=\"'NODER.TOOLTIP.JUSTIFY' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-align\"></mat-icon>\n </mat-button-toggle>\n</mat-button-toggle-group>\n", styles: [":host{display:flex;align-items:center}mat-button-toggle{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}\n"], dependencies: [{ kind: "directive", type: i3$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18617
18147
  }
18618
18148
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: FormatComponent, decorators: [{
18619
18149
  type: Component,
@@ -18654,7 +18184,7 @@ class NumberingComponent {
18654
18184
  this.selectNumberingTemplate.emit(numberingTemplateType);
18655
18185
  }
18656
18186
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NumberingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18657
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NumberingComponent, isStandalone: false, selector: "app-nod-numbering", inputs: { isDisabled: "isDisabled", selectedNumberingType: "selectedNumberingType", selectedNumberingTemplate: "selectedNumberingTemplate" }, outputs: { selectNumberingTemplate: "selectNumberingTemplate", removeNumberings: "removeNumberings" }, ngImport: i0, template: "<mat-button-toggle-group\n name=\"format\"\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [disabled]=\"isDisabled\">\n <mat-button-toggle\n (click)=\"onToggleBulletedNumbering()\"\n [value]=\"numberingType.Bullet\"\n [checked]=\"selectedNumberingType === numberingType.Bullet\"\n [matTooltip]=\"'NODER.TOOLTIP.BULLETED_LIST' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-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 [matTooltip]=\"'NODER.TOOLTIP.BULLETED_MENU' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\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 [matTooltip]=\"'NODER.TOOLTIP.NUMBERED_LIST' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-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=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\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:32px;min-height:32px;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:32px;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-width:2px;border-style:solid}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i3$3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i5.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"] }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18187
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: NumberingComponent, isStandalone: false, selector: "app-nod-numbering", inputs: { isDisabled: "isDisabled", selectedNumberingType: "selectedNumberingType", selectedNumberingTemplate: "selectedNumberingTemplate" }, outputs: { selectNumberingTemplate: "selectNumberingTemplate", removeNumberings: "removeNumberings" }, ngImport: i0, template: "<mat-button-toggle-group\n name=\"format\"\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [disabled]=\"isDisabled\">\n <mat-button-toggle\n (click)=\"onToggleBulletedNumbering()\"\n [value]=\"numberingType.Bullet\"\n [checked]=\"selectedNumberingType === numberingType.Bullet\"\n [matTooltip]=\"'NODER.TOOLTIP.BULLETED_LIST' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-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 [matTooltip]=\"'NODER.TOOLTIP.BULLETED_MENU' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </button>\n <mat-menu\n #listBulletedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\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 [matTooltip]=\"'NODER.TOOLTIP.NUMBERED_LIST' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-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=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </button>\n <mat-menu\n #listNumberedMenu=\"matMenu\"\n class=\"dropdown-numbering-overlay noder-modal\"\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:32px;min-height:32px;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:32px;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-width:2px;border-style:solid}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i3$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i5.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"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18658
18188
  }
18659
18189
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: NumberingComponent, decorators: [{
18660
18190
  type: Component,
@@ -18676,7 +18206,7 @@ class PrintComponent {
18676
18206
  this.print = new EventEmitter();
18677
18207
  }
18678
18208
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PrintComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18679
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: PrintComponent, isStandalone: false, selector: "app-nod-print", outputs: { print: "print" }, ngImport: i0, template: "<button\n mat-button\n (click)=\"print.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.PRINT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n</button>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18209
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: PrintComponent, isStandalone: false, selector: "app-nod-print", outputs: { print: "print" }, ngImport: i0, template: "<button\n mat-button\n (click)=\"print.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.PRINT' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-print\"></mat-icon>\n</button>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18680
18210
  }
18681
18211
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PrintComponent, decorators: [{
18682
18212
  type: Component,
@@ -18685,6 +18215,34 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
18685
18215
  type: Output
18686
18216
  }] } });
18687
18217
 
18218
+ class SpacingComponent {
18219
+ constructor() {
18220
+ this.isDisabled = input(false);
18221
+ this.spacing = input(1);
18222
+ this.before = input(0);
18223
+ this.after = input(0);
18224
+ this.selectSpacing = output();
18225
+ this.selectBefore = output();
18226
+ this.selectAfter = output();
18227
+ this.spacings = ['1.0', '1.15', '1.5', '2.0', '2.5', '3'];
18228
+ }
18229
+ onSelectSpacing(value) {
18230
+ this.selectSpacing.emit(value);
18231
+ }
18232
+ onSelectBefore(value) {
18233
+ this.selectBefore.emit(value);
18234
+ }
18235
+ onSelectAfter(value) {
18236
+ this.selectAfter.emit(value);
18237
+ }
18238
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SpacingComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18239
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: SpacingComponent, isStandalone: false, selector: "app-nod-spacing", inputs: { isDisabled: { classPropertyName: "isDisabled", publicName: "isDisabled", isSignal: true, isRequired: false, transformFunction: null }, spacing: { classPropertyName: "spacing", publicName: "spacing", isSignal: true, isRequired: false, transformFunction: null }, before: { classPropertyName: "before", publicName: "before", isSignal: true, isRequired: false, transformFunction: null }, after: { classPropertyName: "after", publicName: "after", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectSpacing: "selectSpacing", selectBefore: "selectBefore", selectAfter: "selectAfter" }, ngImport: i0, template: "<button\n mat-button\n class=\"spacing-button\"\n [matMenuTriggerFor]=\"spacingMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matTooltip]=\"'NODER.TOOLTIP.FONT' | translate\"\n matTooltipPosition=\"below\">\n <div class=\"spacing-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-spacing\"></mat-icon>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu\n #spacingMenu=\"matMenu\"\n class=\"noder-modal noder-spacing-modal-menu\">\n <ng-container *ngFor=\"let value of spacings\">\n <button\n mat-menu-item\n class=\"spacing-option\"\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectSpacing(+value)\">\n {{ value }}\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\"\n class=\"hidden\"\n [class.selected]=\"spacing() === +value\"></mat-icon>\n </button>\n </ng-container>\n <span class=\"spacing-label\">{{ 'NODER.LABEL.LINE_SPACING_OPTIONS' | translate }}</span>\n <hr class=\"noder-divider\" />\n @if (before()) {\n <button\n mat-menu-item\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectBefore(0)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-space-before\"></mat-icon>\n {{ 'NODER.LABEL.REMOVE_SPACE_BEFORE_PARAGRAPH' | translate }}\n </button>\n } @else {\n <button\n mat-menu-item\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectBefore(16)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-space-before\"></mat-icon>\n {{ 'NODER.LABEL.ADD_SPACE_BEFORE_PARAGRAPH' | translate }}\n </button>\n }\n @if (after()) {\n <button\n mat-menu-item\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectAfter(0)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-space-after\"></mat-icon>\n {{ 'NODER.LABEL.REMOVE_SPACE_AFTER_PARAGRAPH' | translate }}\n </button>\n } @else {\n <button\n mat-menu-item\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectAfter(16)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-space-after\"></mat-icon>\n {{ 'NODER.LABEL.ADD_SPACE_AFTER_PARAGRAPH' | translate }}\n </button>\n }\n</mat-menu>\n", styles: [".spacing-button{height:32px;margin:0 4px}button:not(.spacing-button){padding-left:4px;padding-right:8px}button.spacing-option{padding-left:8px}.spacing-menu{display:flex;justify-content:space-between;align-items:center}mat-icon{align-self:center}mat-icon.hidden:not(.selected){display:none}mat-icon.selected{position:absolute;right:0}.spacing-label{font-size:12px;padding-left:8px;cursor:default}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.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"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18240
+ }
18241
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: SpacingComponent, decorators: [{
18242
+ type: Component,
18243
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-spacing', standalone: false, template: "<button\n mat-button\n class=\"spacing-button\"\n [matMenuTriggerFor]=\"spacingMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [matTooltip]=\"'NODER.TOOLTIP.FONT' | translate\"\n matTooltipPosition=\"below\">\n <div class=\"spacing-menu\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-spacing\"></mat-icon>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-arrow-dropdown\"></mat-icon>\n </div>\n</button>\n<mat-menu\n #spacingMenu=\"matMenu\"\n class=\"noder-modal noder-spacing-modal-menu\">\n <ng-container *ngFor=\"let value of spacings\">\n <button\n mat-menu-item\n class=\"spacing-option\"\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectSpacing(+value)\">\n {{ value }}\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\"\n class=\"hidden\"\n [class.selected]=\"spacing() === +value\"></mat-icon>\n </button>\n </ng-container>\n <span class=\"spacing-label\">{{ 'NODER.LABEL.LINE_SPACING_OPTIONS' | translate }}</span>\n <hr class=\"noder-divider\" />\n @if (before()) {\n <button\n mat-menu-item\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectBefore(0)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-space-before\"></mat-icon>\n {{ 'NODER.LABEL.REMOVE_SPACE_BEFORE_PARAGRAPH' | translate }}\n </button>\n } @else {\n <button\n mat-menu-item\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectBefore(16)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-space-before\"></mat-icon>\n {{ 'NODER.LABEL.ADD_SPACE_BEFORE_PARAGRAPH' | translate }}\n </button>\n }\n @if (after()) {\n <button\n mat-menu-item\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectAfter(0)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-space-after\"></mat-icon>\n {{ 'NODER.LABEL.REMOVE_SPACE_AFTER_PARAGRAPH' | translate }}\n </button>\n } @else {\n <button\n mat-menu-item\n [disabled]=\"isDisabled()\"\n (click)=\"onSelectAfter(16)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-space-after\"></mat-icon>\n {{ 'NODER.LABEL.ADD_SPACE_AFTER_PARAGRAPH' | translate }}\n </button>\n }\n</mat-menu>\n", styles: [".spacing-button{height:32px;margin:0 4px}button:not(.spacing-button){padding-left:4px;padding-right:8px}button.spacing-option{padding-left:8px}.spacing-menu{display:flex;justify-content:space-between;align-items:center}mat-icon{align-self:center}mat-icon.hidden:not(.selected){display:none}mat-icon.selected{position:absolute;right:0}.spacing-label{font-size:12px;padding-left:8px;cursor:default}\n"] }]
18244
+ }] });
18245
+
18688
18246
  class UndoRedoComponent {
18689
18247
  constructor() {
18690
18248
  this.canUndo = false;
@@ -18693,7 +18251,7 @@ class UndoRedoComponent {
18693
18251
  this.redo = new EventEmitter();
18694
18252
  }
18695
18253
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: UndoRedoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
18696
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: UndoRedoComponent, isStandalone: false, selector: "app-nod-undo-redo", inputs: { canUndo: "canUndo", canRedo: "canRedo" }, outputs: { undo: "undo", redo: "redo" }, ngImport: i0, template: "<button\n mat-button\n [disabled]=\"!canUndo\"\n (click)=\"undo.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.UNDO' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n</button>\n<button\n mat-button\n [disabled]=\"!canRedo\"\n (click)=\"redo.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.REDO' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n</button>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18254
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: UndoRedoComponent, isStandalone: false, selector: "app-nod-undo-redo", inputs: { canUndo: "canUndo", canRedo: "canRedo" }, outputs: { undo: "undo", redo: "redo" }, ngImport: i0, template: "<button\n mat-button\n [disabled]=\"!canUndo\"\n (click)=\"undo.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.UNDO' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-undo\"></mat-icon>\n</button>\n<button\n mat-button\n [disabled]=\"!canRedo\"\n (click)=\"redo.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.REDO' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-redo\"></mat-icon>\n</button>\n", styles: [":host{display:flex;align-items:center}.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}\n"], dependencies: [{ kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18697
18255
  }
18698
18256
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: UndoRedoComponent, decorators: [{
18699
18257
  type: Component,
@@ -18729,6 +18287,15 @@ class ToolbarActionsComponent extends BaseToolbarComponent {
18729
18287
  onApplyAlignment(alignment) {
18730
18288
  this.changeParagraphStyle.emit(new ParagraphStyleModel({ alignment }));
18731
18289
  }
18290
+ onApplySpacing(value) {
18291
+ this.selectSpacing.emit(value);
18292
+ }
18293
+ onApplyBefore(value) {
18294
+ this.selectBefore.emit(value);
18295
+ }
18296
+ onApplyAfter(value) {
18297
+ this.selectAfter.emit(value);
18298
+ }
18732
18299
  onSetNumberingTemplateType(templateType) {
18733
18300
  const templateLevels = NumberingTemplates.find(x => x.templateType === templateType).levels;
18734
18301
  this.setNumberingTemplateType.emit(templateLevels);
@@ -18742,11 +18309,11 @@ class ToolbarActionsComponent extends BaseToolbarComponent {
18742
18309
  });
18743
18310
  }
18744
18311
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ToolbarActionsComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: CustomIconService }, { token: i0.Injector }, { token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
18745
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ToolbarActionsComponent, isStandalone: false, selector: "app-nod-toolbar-actions", viewQueries: [{ propertyName: "tableInsertMenu", first: true, predicate: ["tableInsert"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@let isViewOnly = editorService.isViewOnly$ | async;\n@let isTableSelected = editorService.isTableSelected$ | async;\n<app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n<app-nod-print\n class=\"hidden\"\n (print)=\"print.emit()\" />\n<div class=\"separator\"></div>\n<app-nod-font\n [isDisabled]=\"isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n<div class=\"separator\"></div>\n<app-nod-font-size\n [isDisabled]=\"isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n<div class=\"separator\"></div>\n<app-nod-font-style\n [isDisabled]=\"isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n [fontColor]=\"styles.fontColor\"\n [highlightColor]=\"styles.highlightColor\"\n (selectFontColor)=\"onApplyFontColor($event)\"\n (toggleBold)=\"onApplyBold()\"\n (toggleItalic)=\"onApplyItalic()\"\n (toggleUnderline)=\"onApplyUnderline()\"\n (selectHighlightColor)=\"onApplyHighlightColor($event)\" />\n<div class=\"separator\"></div>\n<app-nod-format\n [isDisabled]=\"isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n<div class=\"separator\"></div>\n<app-nod-numbering\n [isDisabled]=\"isViewOnly\"\n [selectedNumberingType]=\"numberingType\"\n [selectedNumberingTemplate]=\"numberingTemplateType\"\n (selectNumberingTemplate)=\"onSetNumberingTemplateType($event)\"\n (removeNumberings)=\"removeNumberings.emit()\" />\n<div class=\"separator\"></div>\n<div class=\"insert-buttons\">\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-image\"\n [disabled]=\"isViewOnly\"\n (click)=\"insertImage.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_IMAGE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\" />\n </button>\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-table\"\n [class.active-button]=\"showInsertTableMenu\"\n [disabled]=\"isViewOnly\"\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_TABLE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\" />\n </button>\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-link\"\n [disabled]=\"isViewOnly\"\n (click)=\"insertLink.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_LINK' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\" />\n </button>\n</div>\n@if (isTableSelected) {\n <div class=\"separator\"></div>\n <app-nod-table-borders\n [isDisabled]=\"isViewOnly\"\n (updateTableBorders)=\"updateTableBorders.emit($event)\" />\n <app-nod-table-border-width\n [isDisabled]=\"isViewOnly\"\n (updateTableBorderWidth)=\"updateTableBorderWidth.emit($event)\" />\n <app-nod-table-border-style\n [isDisabled]=\"isViewOnly\"\n (updateTableBorderStyle)=\"updateTableBorderStyle.emit($event)\" />\n}\n<div\n *ngIf=\"elements.length\"\n class=\"separator\"></div>\n<div\n *ngIf=\"elements.length\"\n class=\"custom-elements\">\n <button\n *ngFor=\"let element of elements\"\n mat-button\n [disabled]=\"isViewOnly\"\n (click)=\"onCreateElement(element)\"\n [matTooltip]=\"element.tooltip | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n </button>\n</div>\n<mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n</mat-menu>\n", styles: [":host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;display:flex;align-items:center;justify-content:center;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.separator{border-left:2px solid;height:24px;margin:0 8px}.mdc-button{width:28px;height:28px;padding:0}.mat-mdc-button>.mat-icon{margin-right:0}.do-action{padding-right:1px;justify-content:center;display:flex}.custom-elements,.insert-buttons{display:flex;align-items:center;height:100%}.custom-elements .mdc-button,.insert-buttons .mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.custom-elements .mdc-button>.mat-icon,.insert-buttons .mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FontComponent, selector: "app-nod-font", inputs: ["isDisabled", "styles"], outputs: ["selectFont"] }, { kind: "component", type: FontSizeComponent, selector: "app-nod-font-size", inputs: ["isDisabled", "fontSize"], outputs: ["selectFontSize"] }, { kind: "component", type: InsertTableComponent, selector: "app-nod-insert-table", outputs: ["selectSizes"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.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"] }, { kind: "directive", type: i5$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: TableBordersComponent, selector: "app-nod-table-borders", inputs: ["isDisabled"], outputs: ["updateTableBorders"] }, { kind: "component", type: TableBorderStyleComponent, selector: "app-nod-table-border-style", inputs: ["isDisabled"], outputs: ["updateTableBorderStyle"] }, { kind: "component", type: TableBorderWidthComponent, selector: "app-nod-table-border-width", inputs: ["isDisabled"], outputs: ["updateTableBorderWidth"] }, { kind: "component", type: FontStyleComponent, selector: "app-nod-font-style", inputs: ["isDisabled", "bold", "italic", "underline", "fontColor", "highlightColor"], outputs: ["toggleBold", "toggleItalic", "toggleUnderline", "selectFontColor", "selectHighlightColor"] }, { kind: "component", type: FormatComponent, selector: "app-nod-format", inputs: ["isDisabled", "alignment"], outputs: ["selectAlignment"] }, { kind: "component", type: NumberingComponent, selector: "app-nod-numbering", inputs: ["isDisabled", "selectedNumberingType", "selectedNumberingTemplate"], outputs: ["selectNumberingTemplate", "removeNumberings"] }, { kind: "component", type: PrintComponent, selector: "app-nod-print", outputs: ["print"] }, { kind: "component", type: UndoRedoComponent, selector: "app-nod-undo-redo", inputs: ["canUndo", "canRedo"], outputs: ["undo", "redo"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18312
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: ToolbarActionsComponent, isStandalone: false, selector: "app-nod-toolbar-actions", viewQueries: [{ propertyName: "tableInsertMenu", first: true, predicate: ["tableInsert"], descendants: true }], usesInheritance: true, ngImport: i0, template: "@let isViewOnly = editorService.isViewOnly$ | async;\n@let isTableSelected = editorService.isTableSelected$ | async;\n<app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n<app-nod-print\n class=\"hidden\"\n (print)=\"print.emit()\" />\n<div class=\"separator\"></div>\n<app-nod-font\n [isDisabled]=\"isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n<div class=\"separator\"></div>\n<app-nod-font-size\n [isDisabled]=\"isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n<div class=\"separator\"></div>\n<app-nod-font-style\n [isDisabled]=\"isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n [fontColor]=\"styles.fontColor\"\n [highlightColor]=\"styles.highlightColor\"\n (selectFontColor)=\"onApplyFontColor($event)\"\n (toggleBold)=\"onApplyBold()\"\n (toggleItalic)=\"onApplyItalic()\"\n (toggleUnderline)=\"onApplyUnderline()\"\n (selectHighlightColor)=\"onApplyHighlightColor($event)\" />\n<div class=\"separator\"></div>\n<app-nod-format\n [isDisabled]=\"isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n<div class=\"separator\"></div>\n<app-nod-spacing\n [isDisabled]=\"isViewOnly\"\n [spacing]=\"styles.lineSpacing\"\n [before]=\"styles.spaceBefore\"\n [after]=\"styles.spaceAfter\"\n (selectSpacing)=\"onApplySpacing($event)\"\n (selectBefore)=\"onApplyBefore($event)\"\n (selectAfter)=\"onApplyAfter($event)\" />\n<div class=\"separator\"></div>\n<app-nod-numbering\n [isDisabled]=\"isViewOnly\"\n [selectedNumberingType]=\"numberingType\"\n [selectedNumberingTemplate]=\"numberingTemplateType\"\n (selectNumberingTemplate)=\"onSetNumberingTemplateType($event)\"\n (removeNumberings)=\"removeNumberings.emit()\" />\n<div class=\"separator\"></div>\n<div class=\"insert-buttons\">\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-image\"\n [disabled]=\"isViewOnly\"\n (click)=\"insertImage.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_IMAGE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\" />\n </button>\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-table\"\n [class.active-button]=\"showInsertTableMenu\"\n [disabled]=\"isViewOnly\"\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_TABLE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\" />\n </button>\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-link\"\n [disabled]=\"isViewOnly\"\n (click)=\"insertLink.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_LINK' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\" />\n </button>\n</div>\n@if (isTableSelected) {\n <div class=\"separator\"></div>\n <app-nod-table-borders\n [isDisabled]=\"isViewOnly\"\n (updateTableBorders)=\"updateTableBorders.emit($event)\" />\n <app-nod-table-border-width\n [isDisabled]=\"isViewOnly\"\n (updateTableBorderWidth)=\"updateTableBorderWidth.emit($event)\" />\n <app-nod-table-border-style\n [isDisabled]=\"isViewOnly\"\n (updateTableBorderStyle)=\"updateTableBorderStyle.emit($event)\" />\n}\n<div\n *ngIf=\"elements.length\"\n class=\"separator\"></div>\n<div\n *ngIf=\"elements.length\"\n class=\"custom-elements\">\n <button\n *ngFor=\"let element of elements\"\n mat-button\n [disabled]=\"isViewOnly\"\n (click)=\"onCreateElement(element)\"\n [matTooltip]=\"element.tooltip | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n </button>\n</div>\n<mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n</mat-menu>\n", styles: [":host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;display:flex;align-items:center;justify-content:center;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.separator{border-left:2px solid;height:24px;margin:0 8px}.mdc-button{width:28px;height:28px;padding:0}.mat-mdc-button>.mat-icon{margin-right:0}.do-action{padding-right:1px;justify-content:center;display:flex}.custom-elements,.insert-buttons{display:flex;align-items:center;height:100%}.custom-elements .mdc-button,.insert-buttons .mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.custom-elements .mdc-button>.mat-icon,.insert-buttons .mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.hidden{display:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: FontComponent, selector: "app-nod-font", inputs: ["isDisabled", "styles"], outputs: ["selectFont"] }, { kind: "component", type: FontSizeComponent, selector: "app-nod-font-size", inputs: ["isDisabled", "fontSize"], outputs: ["selectFontSize"] }, { kind: "component", type: InsertTableComponent, selector: "app-nod-insert-table", outputs: ["selectSizes"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.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"] }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: TableBordersComponent, selector: "app-nod-table-borders", inputs: ["isDisabled"], outputs: ["updateTableBorders"] }, { kind: "component", type: TableBorderStyleComponent, selector: "app-nod-table-border-style", inputs: ["isDisabled"], outputs: ["updateTableBorderStyle"] }, { kind: "component", type: TableBorderWidthComponent, selector: "app-nod-table-border-width", inputs: ["isDisabled"], outputs: ["updateTableBorderWidth"] }, { kind: "component", type: FontStyleComponent, selector: "app-nod-font-style", inputs: ["isDisabled", "bold", "italic", "underline", "fontColor", "highlightColor"], outputs: ["toggleBold", "toggleItalic", "toggleUnderline", "selectFontColor", "selectHighlightColor"] }, { kind: "component", type: FormatComponent, selector: "app-nod-format", inputs: ["isDisabled", "alignment"], outputs: ["selectAlignment"] }, { kind: "component", type: NumberingComponent, selector: "app-nod-numbering", inputs: ["isDisabled", "selectedNumberingType", "selectedNumberingTemplate"], outputs: ["selectNumberingTemplate", "removeNumberings"] }, { kind: "component", type: PrintComponent, selector: "app-nod-print", outputs: ["print"] }, { kind: "component", type: SpacingComponent, selector: "app-nod-spacing", inputs: ["isDisabled", "spacing", "before", "after"], outputs: ["selectSpacing", "selectBefore", "selectAfter"] }, { kind: "component", type: UndoRedoComponent, selector: "app-nod-undo-redo", inputs: ["canUndo", "canRedo"], outputs: ["undo", "redo"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18746
18313
  }
18747
18314
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ToolbarActionsComponent, decorators: [{
18748
18315
  type: Component,
18749
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-toolbar-actions', standalone: false, template: "@let isViewOnly = editorService.isViewOnly$ | async;\n@let isTableSelected = editorService.isTableSelected$ | async;\n<app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n<app-nod-print\n class=\"hidden\"\n (print)=\"print.emit()\" />\n<div class=\"separator\"></div>\n<app-nod-font\n [isDisabled]=\"isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n<div class=\"separator\"></div>\n<app-nod-font-size\n [isDisabled]=\"isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n<div class=\"separator\"></div>\n<app-nod-font-style\n [isDisabled]=\"isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n [fontColor]=\"styles.fontColor\"\n [highlightColor]=\"styles.highlightColor\"\n (selectFontColor)=\"onApplyFontColor($event)\"\n (toggleBold)=\"onApplyBold()\"\n (toggleItalic)=\"onApplyItalic()\"\n (toggleUnderline)=\"onApplyUnderline()\"\n (selectHighlightColor)=\"onApplyHighlightColor($event)\" />\n<div class=\"separator\"></div>\n<app-nod-format\n [isDisabled]=\"isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n<div class=\"separator\"></div>\n<app-nod-numbering\n [isDisabled]=\"isViewOnly\"\n [selectedNumberingType]=\"numberingType\"\n [selectedNumberingTemplate]=\"numberingTemplateType\"\n (selectNumberingTemplate)=\"onSetNumberingTemplateType($event)\"\n (removeNumberings)=\"removeNumberings.emit()\" />\n<div class=\"separator\"></div>\n<div class=\"insert-buttons\">\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-image\"\n [disabled]=\"isViewOnly\"\n (click)=\"insertImage.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_IMAGE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\" />\n </button>\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-table\"\n [class.active-button]=\"showInsertTableMenu\"\n [disabled]=\"isViewOnly\"\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_TABLE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\" />\n </button>\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-link\"\n [disabled]=\"isViewOnly\"\n (click)=\"insertLink.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_LINK' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\" />\n </button>\n</div>\n@if (isTableSelected) {\n <div class=\"separator\"></div>\n <app-nod-table-borders\n [isDisabled]=\"isViewOnly\"\n (updateTableBorders)=\"updateTableBorders.emit($event)\" />\n <app-nod-table-border-width\n [isDisabled]=\"isViewOnly\"\n (updateTableBorderWidth)=\"updateTableBorderWidth.emit($event)\" />\n <app-nod-table-border-style\n [isDisabled]=\"isViewOnly\"\n (updateTableBorderStyle)=\"updateTableBorderStyle.emit($event)\" />\n}\n<div\n *ngIf=\"elements.length\"\n class=\"separator\"></div>\n<div\n *ngIf=\"elements.length\"\n class=\"custom-elements\">\n <button\n *ngFor=\"let element of elements\"\n mat-button\n [disabled]=\"isViewOnly\"\n (click)=\"onCreateElement(element)\"\n [matTooltip]=\"element.tooltip | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n </button>\n</div>\n<mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n</mat-menu>\n", styles: [":host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;display:flex;align-items:center;justify-content:center;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.separator{border-left:2px solid;height:24px;margin:0 8px}.mdc-button{width:28px;height:28px;padding:0}.mat-mdc-button>.mat-icon{margin-right:0}.do-action{padding-right:1px;justify-content:center;display:flex}.custom-elements,.insert-buttons{display:flex;align-items:center;height:100%}.custom-elements .mdc-button,.insert-buttons .mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.custom-elements .mdc-button>.mat-icon,.insert-buttons .mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.hidden{display:none}\n"] }]
18316
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-toolbar-actions', standalone: false, template: "@let isViewOnly = editorService.isViewOnly$ | async;\n@let isTableSelected = editorService.isTableSelected$ | async;\n<app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n<app-nod-print\n class=\"hidden\"\n (print)=\"print.emit()\" />\n<div class=\"separator\"></div>\n<app-nod-font\n [isDisabled]=\"isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n<div class=\"separator\"></div>\n<app-nod-font-size\n [isDisabled]=\"isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n<div class=\"separator\"></div>\n<app-nod-font-style\n [isDisabled]=\"isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n [fontColor]=\"styles.fontColor\"\n [highlightColor]=\"styles.highlightColor\"\n (selectFontColor)=\"onApplyFontColor($event)\"\n (toggleBold)=\"onApplyBold()\"\n (toggleItalic)=\"onApplyItalic()\"\n (toggleUnderline)=\"onApplyUnderline()\"\n (selectHighlightColor)=\"onApplyHighlightColor($event)\" />\n<div class=\"separator\"></div>\n<app-nod-format\n [isDisabled]=\"isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n<div class=\"separator\"></div>\n<app-nod-spacing\n [isDisabled]=\"isViewOnly\"\n [spacing]=\"styles.lineSpacing\"\n [before]=\"styles.spaceBefore\"\n [after]=\"styles.spaceAfter\"\n (selectSpacing)=\"onApplySpacing($event)\"\n (selectBefore)=\"onApplyBefore($event)\"\n (selectAfter)=\"onApplyAfter($event)\" />\n<div class=\"separator\"></div>\n<app-nod-numbering\n [isDisabled]=\"isViewOnly\"\n [selectedNumberingType]=\"numberingType\"\n [selectedNumberingTemplate]=\"numberingTemplateType\"\n (selectNumberingTemplate)=\"onSetNumberingTemplateType($event)\"\n (removeNumberings)=\"removeNumberings.emit()\" />\n<div class=\"separator\"></div>\n<div class=\"insert-buttons\">\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-image\"\n [disabled]=\"isViewOnly\"\n (click)=\"insertImage.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_IMAGE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-image\" />\n </button>\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-table\"\n [class.active-button]=\"showInsertTableMenu\"\n [disabled]=\"isViewOnly\"\n [matMenuTriggerFor]=\"tableInsert\"\n (menuOpened)=\"showInsertTableMenu = true\"\n (menuClosed)=\"onTableInsertMenuClosed()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_TABLE' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table\" />\n </button>\n <button\n mat-button\n id=\"toolbar-actions-menu-item-insert-link\"\n [disabled]=\"isViewOnly\"\n (click)=\"insertLink.emit()\"\n [matTooltip]=\"'NODER.TOOLTIP.INSERT_LINK' | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-link-on\" />\n </button>\n</div>\n@if (isTableSelected) {\n <div class=\"separator\"></div>\n <app-nod-table-borders\n [isDisabled]=\"isViewOnly\"\n (updateTableBorders)=\"updateTableBorders.emit($event)\" />\n <app-nod-table-border-width\n [isDisabled]=\"isViewOnly\"\n (updateTableBorderWidth)=\"updateTableBorderWidth.emit($event)\" />\n <app-nod-table-border-style\n [isDisabled]=\"isViewOnly\"\n (updateTableBorderStyle)=\"updateTableBorderStyle.emit($event)\" />\n}\n<div\n *ngIf=\"elements.length\"\n class=\"separator\"></div>\n<div\n *ngIf=\"elements.length\"\n class=\"custom-elements\">\n <button\n *ngFor=\"let element of elements\"\n mat-button\n [disabled]=\"isViewOnly\"\n (click)=\"onCreateElement(element)\"\n [matTooltip]=\"element.tooltip | translate\"\n matTooltipPosition=\"below\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ element.icon }}\"></mat-icon>\n </button>\n</div>\n<mat-menu\n #tableInsert=\"matMenu\"\n class=\"insert-table noder-modal\">\n <app-nod-insert-table\n *ngIf=\"showInsertTableMenu\"\n (selectSizes)=\"insertTable.emit($event)\" />\n</mat-menu>\n", styles: [":host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;display:flex;align-items:center;justify-content:center;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.separator{border-left:2px solid;height:24px;margin:0 8px}.mdc-button{width:28px;height:28px;padding:0}.mat-mdc-button>.mat-icon{margin-right:0}.do-action{padding-right:1px;justify-content:center;display:flex}.custom-elements,.insert-buttons{display:flex;align-items:center;height:100%}.custom-elements .mdc-button,.insert-buttons .mdc-button{min-width:32px;min-height:32px;width:32px;height:32px;padding:0}.custom-elements .mdc-button>.mat-icon,.insert-buttons .mdc-button>.mat-icon{margin-right:0;font-size:24px;height:24px;width:24px}.hidden{display:none}\n"] }]
18750
18317
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: CustomIconService }, { type: i0.Injector }, { type: EditorService }], propDecorators: { tableInsertMenu: [{
18751
18318
  type: ViewChild,
18752
18319
  args: ['tableInsert']
@@ -18808,13 +18375,13 @@ class EditorMobileToolbarComponent extends ToolbarActionsComponent {
18808
18375
  textFormat: () => this.onTextFormat()
18809
18376
  };
18810
18377
  }
18811
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorMobileToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: CustomIconService }, { token: EditorService }, { token: i0.Injector }, { token: ToolbarCoreService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
18812
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorMobileToolbarComponent, isStandalone: false, selector: "app-nod-editor-mobile-toolbar", outputs: { openFileFromDisk: "openFileFromDisk", createDocument: "createDocument", saveAs: "saveAs", downloadPdf: "downloadPdf", rename: "rename", delete: "delete", insertPageBreak: "insertPageBreak", textFormat: "textFormat" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"{ mode: toolbarCoreService.mode$ | async, isViewOnly: editorService.isViewOnly$ | async } as data\">\n <div class=\"menu-action\">\n <button\n *ngIf=\"data.mode === editorToolbarMode.Base; else back\"\n mat-button\n id=\"editor-mobile-toolbar-sandwich\"\n (click)=\"toolbarCoreService.openBurgerMenu()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-sandwich\" />\n </button>\n <ng-template #back>\n <div class=\"back-container\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-back\"\n (click)=\"toolbarCoreService.back()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-back\" />\n </button>\n <div class=\"back-title\">{{ toolbarCoreService.backTitle }}</div>\n </div>\n </ng-template>\n </div>\n <div\n *ngIf=\"styles && !data.isViewOnly && actionsMenuMods.includes(data.mode)\"\n class=\"actions\">\n <app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n <div class=\"separator\"></div>\n <div\n class=\"main-actions\"\n [ngSwitch]=\"data.mode\">\n <ng-container *ngSwitchCase=\"editorToolbarMode.Base\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-text-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.TextFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-style-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.StyleFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-combined\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-align-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.AlignFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\" />\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.TextFormat\">\n <app-nod-font\n [isDisabled]=\"data.isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <div class=\"separator\"></div>\n <app-nod-font-size\n [isDisabled]=\"data.isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.StyleFormat\">\n <app-nod-font-style\n [isDisabled]=\"data.isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n (toggleBold)=\"onApplyBold($event)\"\n (toggleItalic)=\"onApplyItalic($event)\"\n (toggleUnderline)=\"onApplyUnderline($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.AlignFormat\">\n <app-nod-format\n [isDisabled]=\"data.isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: ["button.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}button.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}:host::ng-deep{display:flex;position:relative;width:100%;height:32px}:host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.menu-action{display:flex;align-items:center;z-index:1}.actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}.main-actions{display:flex;align-items:center;height:100%}.separator{border-left:1px solid;opacity:.1;height:100%;margin:0 8px}app-nod-font{max-width:142px}.back-container{display:flex}.back-title{font-size:14px;font-weight:400;padding-left:10px}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: FontComponent, selector: "app-nod-font", inputs: ["isDisabled", "styles"], outputs: ["selectFont"] }, { kind: "component", type: FontSizeComponent, selector: "app-nod-font-size", inputs: ["isDisabled", "fontSize"], outputs: ["selectFontSize"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FontStyleComponent, selector: "app-nod-font-style", inputs: ["isDisabled", "bold", "italic", "underline", "fontColor", "highlightColor"], outputs: ["toggleBold", "toggleItalic", "toggleUnderline", "selectFontColor", "selectHighlightColor"] }, { kind: "component", type: FormatComponent, selector: "app-nod-format", inputs: ["isDisabled", "alignment"], outputs: ["selectAlignment"] }, { kind: "component", type: UndoRedoComponent, selector: "app-nod-undo-redo", inputs: ["canUndo", "canRedo"], outputs: ["undo", "redo"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18378
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorMobileToolbarComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: CustomIconService }, { token: EditorService }, { token: i0.Injector }, { token: ToolbarCoreService }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
18379
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorMobileToolbarComponent, isStandalone: false, selector: "app-nod-editor-mobile-toolbar", outputs: { openFileFromDisk: "openFileFromDisk", createDocument: "createDocument", saveAs: "saveAs", downloadPdf: "downloadPdf", rename: "rename", delete: "delete", insertPageBreak: "insertPageBreak", textFormat: "textFormat" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"{ mode: toolbarCoreService.mode$ | async, isViewOnly: editorService.isViewOnly$ | async } as data\">\n <div class=\"menu-action\">\n <button\n *ngIf=\"data.mode === editorToolbarMode.Base; else back\"\n mat-button\n id=\"editor-mobile-toolbar-sandwich\"\n (click)=\"toolbarCoreService.openBurgerMenu()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-sandwich\" />\n </button>\n <ng-template #back>\n <div class=\"back-container\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-back\"\n (click)=\"toolbarCoreService.back()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-back\" />\n </button>\n <div class=\"back-title\">{{ toolbarCoreService.backTitle }}</div>\n </div>\n </ng-template>\n </div>\n <div\n *ngIf=\"styles && !data.isViewOnly && actionsMenuMods.includes(data.mode)\"\n class=\"actions\">\n <app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n <div class=\"separator\"></div>\n <div\n class=\"main-actions\"\n [ngSwitch]=\"data.mode\">\n <ng-container *ngSwitchCase=\"editorToolbarMode.Base\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-text-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.TextFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-style-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.StyleFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-combined\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-align-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.AlignFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\" />\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.TextFormat\">\n <app-nod-font\n [isDisabled]=\"data.isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <div class=\"separator\"></div>\n <app-nod-font-size\n [isDisabled]=\"data.isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.StyleFormat\">\n <app-nod-font-style\n [isDisabled]=\"data.isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n (toggleBold)=\"onApplyBold($event)\"\n (toggleItalic)=\"onApplyItalic($event)\"\n (toggleUnderline)=\"onApplyUnderline($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.AlignFormat\">\n <app-nod-format\n [isDisabled]=\"data.isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: ["button.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}button.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}:host::ng-deep{display:flex;position:relative;width:100%;height:32px}:host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.menu-action{display:flex;align-items:center;z-index:1}.actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}.main-actions{display:flex;align-items:center;height:100%}.separator{border-left:1px solid;opacity:.1;height:100%;margin:0 8px}app-nod-font{max-width:142px}.back-container{display:flex}.back-title{font-size:14px;font-weight:400;padding-left:10px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "component", type: FontComponent, selector: "app-nod-font", inputs: ["isDisabled", "styles"], outputs: ["selectFont"] }, { kind: "component", type: FontSizeComponent, selector: "app-nod-font-size", inputs: ["isDisabled", "fontSize"], outputs: ["selectFontSize"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FontStyleComponent, selector: "app-nod-font-style", inputs: ["isDisabled", "bold", "italic", "underline", "fontColor", "highlightColor"], outputs: ["toggleBold", "toggleItalic", "toggleUnderline", "selectFontColor", "selectHighlightColor"] }, { kind: "component", type: FormatComponent, selector: "app-nod-format", inputs: ["isDisabled", "alignment"], outputs: ["selectAlignment"] }, { kind: "component", type: UndoRedoComponent, selector: "app-nod-undo-redo", inputs: ["canUndo", "canRedo"], outputs: ["undo", "redo"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18813
18380
  }
18814
18381
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorMobileToolbarComponent, decorators: [{
18815
18382
  type: Component,
18816
18383
  args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-mobile-toolbar', standalone: false, template: "<ng-container *ngIf=\"{ mode: toolbarCoreService.mode$ | async, isViewOnly: editorService.isViewOnly$ | async } as data\">\n <div class=\"menu-action\">\n <button\n *ngIf=\"data.mode === editorToolbarMode.Base; else back\"\n mat-button\n id=\"editor-mobile-toolbar-sandwich\"\n (click)=\"toolbarCoreService.openBurgerMenu()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-sandwich\" />\n </button>\n <ng-template #back>\n <div class=\"back-container\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-back\"\n (click)=\"toolbarCoreService.back()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-back\" />\n </button>\n <div class=\"back-title\">{{ toolbarCoreService.backTitle }}</div>\n </div>\n </ng-template>\n </div>\n <div\n *ngIf=\"styles && !data.isViewOnly && actionsMenuMods.includes(data.mode)\"\n class=\"actions\">\n <app-nod-undo-redo\n [canUndo]=\"canUndo\"\n [canRedo]=\"canRedo\"\n (undo)=\"undo.emit()\"\n (redo)=\"redo.emit()\" />\n <div class=\"separator\"></div>\n <div\n class=\"main-actions\"\n [ngSwitch]=\"data.mode\">\n <ng-container *ngSwitchCase=\"editorToolbarMode.Base\">\n <button\n mat-button\n id=\"editor-mobile-toolbar-text-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.TextFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-text\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-style-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.StyleFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-combined\" />\n </button>\n <button\n mat-button\n id=\"editor-mobile-toolbar-align-format\"\n (click)=\"toolbarCoreService.mode = editorToolbarMode.AlignFormat\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\" />\n </button>\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.TextFormat\">\n <app-nod-font\n [isDisabled]=\"data.isViewOnly\"\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <div class=\"separator\"></div>\n <app-nod-font-size\n [isDisabled]=\"data.isViewOnly\"\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.StyleFormat\">\n <app-nod-font-style\n [isDisabled]=\"data.isViewOnly\"\n [bold]=\"styles.bold\"\n [italic]=\"styles.italic\"\n [underline]=\"styles.underline\"\n (toggleBold)=\"onApplyBold($event)\"\n (toggleItalic)=\"onApplyItalic($event)\"\n (toggleUnderline)=\"onApplyUnderline($event)\" />\n </ng-container>\n <ng-container *ngSwitchCase=\"editorToolbarMode.AlignFormat\">\n <app-nod-format\n [isDisabled]=\"data.isViewOnly\"\n [alignment]=\"styles.alignment\"\n (selectAlignment)=\"onApplyAlignment($event)\" />\n </ng-container>\n </div>\n </div>\n</ng-container>\n", styles: ["button.mdc-button{min-width:28px;min-height:28px;height:28px;padding:0;margin:0 4px}button.mdc-button mat-icon{font-size:24px;height:24px;width:24px;margin:0}:host::ng-deep{display:flex;position:relative;width:100%;height:32px}:host::ng-deep mat-button-toggle,:host::ng-deep .mat-button-toggle-button{height:32px;width:32px;border-radius:4px}:host::ng-deep mat-button-toggle mat-icon,:host::ng-deep .mat-button-toggle-button mat-icon{font-size:24px;height:24px;width:24px;border-radius:4px}:host::ng-deep mat-button-toggle .mat-button-toggle-label-content,:host::ng-deep .mat-button-toggle-button .mat-button-toggle-label-content{padding:0 2px}.menu-action{display:flex;align-items:center;z-index:1}.actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}.main-actions{display:flex;align-items:center;height:100%}.separator{border-left:1px solid;opacity:.1;height:100%;margin:0 8px}app-nod-font{max-width:142px}.back-container{display:flex}.back-title{font-size:14px;font-weight:400;padding-left:10px}\n"] }]
18817
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: CustomIconService }, { type: EditorService }, { type: i0.Injector }, { type: ToolbarCoreService }, { type: i3.TranslateService }], propDecorators: { openFileFromDisk: [{
18384
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: CustomIconService }, { type: EditorService }, { type: i0.Injector }, { type: ToolbarCoreService }, { type: i6.TranslateService }], propDecorators: { openFileFromDisk: [{
18818
18385
  type: Output
18819
18386
  }], createDocument: [{
18820
18387
  type: Output
@@ -18867,7 +18434,7 @@ class EditorToolbarComponent {
18867
18434
  this.updateTableBorders = new EventEmitter();
18868
18435
  }
18869
18436
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorToolbarComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
18870
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorToolbarComponent, isStandalone: false, selector: "app-nod-editor-toolbar", outputs: { openFileFromDisk: "openFileFromDisk", addCustomElement: "addCustomElement", saveAs: "saveAs", saveAsTemplate: "saveAsTemplate", downloadPdf: "downloadPdf", print: "print", insertPageBreak: "insertPageBreak", createDocument: "createDocument", pageSetup: "pageSetup", insertImage: "insertImage", rename: "rename", delete: "delete", openEditMenu: "openEditMenu", redo: "redo", undo: "undo", cutSelected: "cutSelected", copySelected: "copySelected", pasteClipboardData: "pasteClipboardData", selectAll: "selectAll", removeSelected: "removeSelected", insertLink: "insertLink", createElement: "createElement", changeParagraphStyle: "changeParagraphStyle", changeTextStyle: "changeTextStyle", setNumberingTemplateType: "setNumberingTemplateType", removeNumberings: "removeNumberings", insertTable: "insertTable", updateTableBorderStyle: "updateTableBorderStyle", updateTableBorderWidth: "updateTableBorderWidth", updateTableBorders: "updateTableBorders" }, ngImport: i0, template: "<app-nod-menu-dropdowns\n (openFileFromDisk)=\"openFileFromDisk.emit()\"\n (saveAs)=\"saveAs.emit()\"\n (saveAsTemplate)=\"saveAsTemplate.emit()\"\n (downloadPdf)=\"downloadPdf.emit()\"\n (print)=\"print.emit()\"\n (insertPageBreak)=\"insertPageBreak.emit()\"\n (createDocument)=\"createDocument.emit()\"\n (pageSetup)=\"pageSetup.emit()\"\n (insertImage)=\"insertImage.emit()\"\n (rename)=\"rename.emit()\"\n (delete)=\"delete.emit()\"\n (openEditMenu)=\"openEditMenu.emit()\"\n (redo)=\"redo.emit()\"\n (undo)=\"undo.emit()\"\n (cutSelected)=\"cutSelected.emit()\"\n (copySelected)=\"copySelected.emit()\"\n (pasteClipboardData)=\"pasteClipboardData.emit()\"\n (selectAll)=\"selectAll.emit()\"\n (removeSelected)=\"removeSelected.emit()\"\n (insertLink)=\"insertLink.emit()\"\n (createElement)=\"createElement.emit($event)\"\n (changeParagraphStyle)=\"changeParagraphStyle.emit($event)\"\n (changeTextStyle)=\"changeTextStyle.emit($event)\"\n (setNumberingTemplateType)=\"setNumberingTemplateType.emit($event)\"\n (removeNumberings)=\"removeNumberings.emit()\"\n (insertTable)=\"insertTable.emit($event)\" />\n<app-nod-toolbar-actions\n *ngIf=\"(editorService.styles$ | async) && (editorService.isViewOnly$ | async) === false\"\n (print)=\"print.emit()\"\n (redo)=\"redo.emit()\"\n (undo)=\"undo.emit()\"\n (changeParagraphStyle)=\"changeParagraphStyle.emit($event)\"\n (changeTextStyle)=\"changeTextStyle.emit($event)\"\n (setNumberingTemplateType)=\"setNumberingTemplateType.emit($event)\"\n (removeNumberings)=\"removeNumberings.emit()\"\n (createElement)=\"createElement.emit($event)\"\n (insertImage)=\"insertImage.emit()\"\n (insertLink)=\"insertLink.emit()\"\n (insertTable)=\"insertTable.emit($event)\"\n (updateTableBorders)=\"updateTableBorders.emit($event)\"\n (updateTableBorderWidth)=\"updateTableBorderWidth.emit($event)\"\n (updateTableBorderStyle)=\"updateTableBorderStyle.emit($event)\" />\n", styles: [":host ::ng-deep{display:flex;position:relative;width:100%;height:32px}app-nod-toolbar-actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MenuDropdownsComponent, selector: "app-nod-menu-dropdowns", inputs: ["showFile", "showEdit", "showInsert", "showLayout", "showFormat"], outputs: ["openFileFromDisk", "saveAs", "saveAsTemplate", "downloadPdf", "insertPageBreak", "createDocument", "pageSetup", "rename", "delete", "openEditMenu", "cutSelected", "copySelected", "pasteClipboardData", "selectAll", "removeSelected"] }, { kind: "component", type: ToolbarActionsComponent, selector: "app-nod-toolbar-actions" }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18437
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorToolbarComponent, isStandalone: false, selector: "app-nod-editor-toolbar", outputs: { openFileFromDisk: "openFileFromDisk", addCustomElement: "addCustomElement", saveAs: "saveAs", saveAsTemplate: "saveAsTemplate", downloadPdf: "downloadPdf", print: "print", insertPageBreak: "insertPageBreak", createDocument: "createDocument", pageSetup: "pageSetup", insertImage: "insertImage", rename: "rename", delete: "delete", openEditMenu: "openEditMenu", redo: "redo", undo: "undo", cutSelected: "cutSelected", copySelected: "copySelected", pasteClipboardData: "pasteClipboardData", selectAll: "selectAll", removeSelected: "removeSelected", insertLink: "insertLink", createElement: "createElement", changeParagraphStyle: "changeParagraphStyle", changeTextStyle: "changeTextStyle", setNumberingTemplateType: "setNumberingTemplateType", removeNumberings: "removeNumberings", insertTable: "insertTable", updateTableBorderStyle: "updateTableBorderStyle", updateTableBorderWidth: "updateTableBorderWidth", updateTableBorders: "updateTableBorders" }, ngImport: i0, template: "<app-nod-menu-dropdowns\n (openFileFromDisk)=\"openFileFromDisk.emit()\"\n (saveAs)=\"saveAs.emit()\"\n (saveAsTemplate)=\"saveAsTemplate.emit()\"\n (downloadPdf)=\"downloadPdf.emit()\"\n (print)=\"print.emit()\"\n (insertPageBreak)=\"insertPageBreak.emit()\"\n (createDocument)=\"createDocument.emit()\"\n (pageSetup)=\"pageSetup.emit()\"\n (insertImage)=\"insertImage.emit()\"\n (rename)=\"rename.emit()\"\n (delete)=\"delete.emit()\"\n (openEditMenu)=\"openEditMenu.emit()\"\n (redo)=\"redo.emit()\"\n (undo)=\"undo.emit()\"\n (cutSelected)=\"cutSelected.emit()\"\n (copySelected)=\"copySelected.emit()\"\n (pasteClipboardData)=\"pasteClipboardData.emit()\"\n (selectAll)=\"selectAll.emit()\"\n (removeSelected)=\"removeSelected.emit()\"\n (insertLink)=\"insertLink.emit()\"\n (createElement)=\"createElement.emit($event)\"\n (changeParagraphStyle)=\"changeParagraphStyle.emit($event)\"\n (changeTextStyle)=\"changeTextStyle.emit($event)\"\n (setNumberingTemplateType)=\"setNumberingTemplateType.emit($event)\"\n (removeNumberings)=\"removeNumberings.emit()\"\n (insertTable)=\"insertTable.emit($event)\" />\n<app-nod-toolbar-actions\n *ngIf=\"(editorService.styles$ | async) && (editorService.isViewOnly$ | async) === false\"\n (print)=\"print.emit()\"\n (redo)=\"redo.emit()\"\n (undo)=\"undo.emit()\"\n (changeParagraphStyle)=\"changeParagraphStyle.emit($event)\"\n (changeTextStyle)=\"changeTextStyle.emit($event)\"\n (setNumberingTemplateType)=\"setNumberingTemplateType.emit($event)\"\n (removeNumberings)=\"removeNumberings.emit()\"\n (createElement)=\"createElement.emit($event)\"\n (insertImage)=\"insertImage.emit()\"\n (insertLink)=\"insertLink.emit()\"\n (insertTable)=\"insertTable.emit($event)\"\n (updateTableBorders)=\"updateTableBorders.emit($event)\"\n (updateTableBorderWidth)=\"updateTableBorderWidth.emit($event)\"\n (updateTableBorderStyle)=\"updateTableBorderStyle.emit($event)\" />\n", styles: [":host ::ng-deep{display:flex;position:relative;width:100%;height:32px}app-nod-toolbar-actions{display:flex;position:absolute;align-items:center;justify-content:center;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: MenuDropdownsComponent, selector: "app-nod-menu-dropdowns", inputs: ["showFile", "showEdit", "showInsert", "showLayout", "showFormat"], outputs: ["openFileFromDisk", "saveAs", "saveAsTemplate", "downloadPdf", "insertPageBreak", "createDocument", "pageSetup", "rename", "delete", "openEditMenu", "cutSelected", "copySelected", "pasteClipboardData", "selectAll", "removeSelected"] }, { kind: "component", type: ToolbarActionsComponent, selector: "app-nod-toolbar-actions" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18871
18438
  }
18872
18439
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorToolbarComponent, decorators: [{
18873
18440
  type: Component,
@@ -19018,7 +18585,7 @@ class InsertTableMobileComponent {
19018
18585
  control.setValue(newValue);
19019
18586
  }
19020
18587
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: InsertTableMobileComponent, deps: [{ token: EditorService }, { token: i2.FormBuilder }, { token: ToolbarCoreService }], target: i0.ɵɵFactoryTarget.Component }); }
19021
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: InsertTableMobileComponent, isStandalone: true, selector: "app-nod-insert-table-mobile", ngImport: i0, template: "<div class=\"content\">\n <div class=\"title\">{{ 'NODER.LABEL.TABLE_OPTIONS' | translate }}</div>\n <div\n class=\"inputs\"\n [formGroup]=\"form\">\n <div class=\"rows\">\n <div class=\"input-title\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table-rows\" />\n {{ 'NODER.LABEL.ROWS' | translate }}:\n </div>\n <mat-form-field appearance=\"outline\">\n <button\n mat-fab\n (click)=\"onChangeRows(-1)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\" />\n </button>\n <input\n matInput\n required\n type=\"number\"\n [formControl]=\"form.controls.rows\"\n (change)=\"onChangeInputRow()\" />\n <button\n mat-fab\n (click)=\"onChangeRows(1)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\" />\n </button>\n <mat-error>{{ 'NODER.LABEL.THE_ROW_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n </div>\n <div class=\"columns\">\n <div class=\"input-title\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table-columns\" />\n {{ 'NODER.LABEL.COLUMNS' | translate }}:\n </div>\n <mat-form-field appearance=\"outline\">\n <button\n mat-fab\n (click)=\"onChangeColumns(-1)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\" />\n </button>\n <input\n matInput\n required\n type=\"number\"\n [formControl]=\"form.controls.columns\"\n (change)=\"onChangeInputColumn()\" />\n <button\n mat-fab\n (click)=\"onChangeColumns(1)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\" />\n </button>\n <mat-error>{{ 'NODER.LABEL.THE_COLUMN_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n </div>\n </div>\n <div class=\"quick-select\">\n <div class=\"quick-select-header\">\n <div class=\"separator\"></div>\n <div class=\"quick-select-title\">{{ 'NODER.LABEL.QUICK_SELECT' | translate }}</div>\n <div class=\"separator\"></div>\n </div>\n <div class=\"selection\">\n <ng-container *ngFor=\"let row of rows\">\n <div class=\"row\">\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"cell-container\"\n (click)=\"onSetTable(row, column)\">\n <div\n class=\"cell\"\n [class.highlighted]=\"row <= form.controls.rows.value && column <= form.controls.columns.value\"></div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n<div class=\"actions\">\n <button\n mat-mini-fab\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-mini-fab\n [disabled]=\"form.invalid\"\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;padding:30px;justify-content:space-between;overflow:hidden}.title{font-size:16px;font-weight:500;padding-bottom:10px}.inputs{display:flex;justify-content:space-between;padding-top:10px;padding-bottom:0}.rows,.columns{display:flex;flex-direction:column;width:45%}.input-title{display:flex;align-items:center;font-size:14px;font-weight:400;padding-bottom:10px}.input-title .mat-icon{margin-right:10px}.quick-select{display:flex;flex-direction:column}.quick-select-header{display:flex;padding-bottom:20px}.quick-select-title{padding:0 10px;font-size:10px;font-weight:500;letter-spacing:1px;text-transform:uppercase}.separator{flex:1;align-self:center;border-bottom-width:1px;border-bottom-style:solid}.row{display:flex;flex-direction:row}.cell-container{width:10%;aspect-ratio:1/1;padding:2px}.cell{height:100%;width:100%;border-width:1px;border-style:solid}.mat-mdc-form-field ::ng-deep .mat-mdc-text-field-wrapper{padding:0}.mat-mdc-form-field ::ng-deep .mat-mdc-form-field-infix{display:flex;flex-direction:row;padding:0}.mat-mdc-form-field ::ng-deep .mdc-fab{width:48px;height:48px}.mat-mdc-input-element{text-align:center}.actions{text-align:end}.actions .mdc-fab:first-child{margin-right:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["extended"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18588
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: InsertTableMobileComponent, isStandalone: true, selector: "app-nod-insert-table-mobile", ngImport: i0, template: "<div class=\"content\">\n <div class=\"title\">{{ 'NODER.LABEL.TABLE_OPTIONS' | translate }}</div>\n <div\n class=\"inputs\"\n [formGroup]=\"form\">\n <div class=\"rows\">\n <div class=\"input-title\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table-rows\" />\n {{ 'NODER.LABEL.ROWS' | translate }}:\n </div>\n <mat-form-field appearance=\"outline\">\n <button\n mat-fab\n (click)=\"onChangeRows(-1)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\" />\n </button>\n <input\n matInput\n required\n type=\"number\"\n [formControl]=\"form.controls.rows\"\n (change)=\"onChangeInputRow()\" />\n <button\n mat-fab\n (click)=\"onChangeRows(1)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\" />\n </button>\n <mat-error>{{ 'NODER.LABEL.THE_ROW_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n </div>\n <div class=\"columns\">\n <div class=\"input-title\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-table-columns\" />\n {{ 'NODER.LABEL.COLUMNS' | translate }}:\n </div>\n <mat-form-field appearance=\"outline\">\n <button\n mat-fab\n (click)=\"onChangeColumns(-1)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\" />\n </button>\n <input\n matInput\n required\n type=\"number\"\n [formControl]=\"form.controls.columns\"\n (change)=\"onChangeInputColumn()\" />\n <button\n mat-fab\n (click)=\"onChangeColumns(1)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\" />\n </button>\n <mat-error>{{ 'NODER.LABEL.THE_COLUMN_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n </div>\n </div>\n <div class=\"quick-select\">\n <div class=\"quick-select-header\">\n <div class=\"separator\"></div>\n <div class=\"quick-select-title\">{{ 'NODER.LABEL.QUICK_SELECT' | translate }}</div>\n <div class=\"separator\"></div>\n </div>\n <div class=\"selection\">\n <ng-container *ngFor=\"let row of rows\">\n <div class=\"row\">\n <ng-container *ngFor=\"let column of columns\">\n <div\n class=\"cell-container\"\n (click)=\"onSetTable(row, column)\">\n <div\n class=\"cell\"\n [class.highlighted]=\"row <= form.controls.rows.value && column <= form.controls.columns.value\"></div>\n </div>\n </ng-container>\n </div>\n </ng-container>\n </div>\n </div>\n</div>\n<div class=\"actions\">\n <button\n mat-mini-fab\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-mini-fab\n [disabled]=\"form.invalid\"\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;padding:30px;justify-content:space-between;overflow:hidden}.title{font-size:16px;font-weight:500;padding-bottom:10px}.inputs{display:flex;justify-content:space-between;padding-top:10px;padding-bottom:0}.rows,.columns{display:flex;flex-direction:column;width:45%}.input-title{display:flex;align-items:center;font-size:14px;font-weight:400;padding-bottom:10px}.input-title .mat-icon{margin-right:10px}.quick-select{display:flex;flex-direction:column}.quick-select-header{display:flex;padding-bottom:20px}.quick-select-title{padding:0 10px;font-size:10px;font-weight:500;letter-spacing:1px;text-transform:uppercase}.separator{flex:1;align-self:center;border-bottom-width:1px;border-bottom-style:solid}.row{display:flex;flex-direction:row}.cell-container{width:10%;aspect-ratio:1/1;padding:2px}.cell{height:100%;width:100%;border-width:1px;border-style:solid}.mat-mdc-form-field ::ng-deep .mat-mdc-text-field-wrapper{padding:0}.mat-mdc-form-field ::ng-deep .mat-mdc-form-field-infix{display:flex;flex-direction:row;padding:0}.mat-mdc-form-field ::ng-deep .mdc-fab{width:48px;height:48px}.mat-mdc-input-element{text-align:center}.actions{text-align:end}.actions .mdc-fab:first-child{margin-right:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "component", type: i4.MatFabButton, selector: "button[mat-fab]", inputs: ["extended"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19022
18589
  }
19023
18590
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: InsertTableMobileComponent, decorators: [{
19024
18591
  type: Component,
@@ -19119,7 +18686,7 @@ class TextFormatMobileComponent {
19119
18686
  this.styles = { ...this.styles, ...style };
19120
18687
  }
19121
18688
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TextFormatMobileComponent, deps: [{ token: CustomIconService }, { token: EditorService }, { token: ToolbarCoreService }], target: i0.ɵɵFactoryTarget.Component }); }
19122
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: TextFormatMobileComponent, isStandalone: true, selector: "app-nod-text-format-mobile", ngImport: i0, template: "<div class=\"content\">\n <div class=\"content-container\">\n <div class=\"title\">{{ 'NODER.LABEL.FONT' | translate }}</div>\n <div class=\"font\">\n <app-nod-font\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <app-nod-font-size\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </div>\n </div>\n <div class=\"content-container\">\n <div class=\"title\">{{ 'NODER.LABEL.TEXT_STYLE' | translate }}</div>\n <div class=\"text-style-container\">\n <mat-button-toggle\n [checked]=\"styles.bold\"\n (click)=\"onToggleBold()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\" />\n </mat-button-toggle>\n <mat-button-toggle\n [checked]=\"styles.italic\"\n (click)=\"onToggleItalic()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\" />\n </mat-button-toggle>\n <mat-button-toggle\n [checked]=\"styles.underline\"\n (click)=\"onToggleUnderline()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\" />\n </mat-button-toggle>\n <app-nod-color-picker\n id=\"icon-format-colortext\"\n class=\"text-color\"\n icon=\"icon-format-colortext\"\n [color]=\"styles.fontColor\"\n [palette]=\"textColorPalette\"\n (colorChange)=\"onSelectFontColor($event)\" />\n <app-nod-color-picker\n id=\"icon-link-highlighter\"\n class=\"highlight-color\"\n icon=\"icon-link-highlighter\"\n [color]=\"styles.highlightColor\"\n [palette]=\"highlightColorPalette\"\n (colorChange)=\"onSelectHighlightColor($event)\" />\n </div>\n </div>\n <div class=\"content-container\">\n <div class=\"title\">{{ 'NODER.LABEL.ALIGNMENT' | translate }}</div>\n <mat-button-toggle-group\n name=\"format\"\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [value]=\"styles.alignment\"\n (change)=\"onApplyAlignment($event.value)\">\n <mat-button-toggle [value]=\"alignments.Left\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle [value]=\"alignments.Center\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle [value]=\"alignments.Right\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n class=\"hide\"\n [value]=\"alignments.Justify\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-align\"></mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div class=\"content-container\">\n <div class=\"title\">{{ 'NODER.LABEL.BULLETED_AND_NUMBERED_LIST' | translate }}</div>\n <div class=\"numbering-container\">\n <div class=\"numbering-line\">\n <div\n class=\"empty-numbering\"\n [class.selected]=\"selectedNumberingTemplate === null\"\n (click)=\"selectedNumberingTemplate = null\">\n {{ 'NODER.LABEL.NONE' | translate }}\n </div>\n <mat-icon\n svgIcon=\"marker-1\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList1\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList1\" />\n <mat-icon\n svgIcon=\"marker-2\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList2\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList2\" />\n <mat-icon\n svgIcon=\"marker-3\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList3\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList3\" />\n </div>\n <div class=\"numbering-line\">\n <mat-icon\n svgIcon=\"marker-4\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList4\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList4\" />\n <mat-icon\n svgIcon=\"marker-5\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList5\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList5\" />\n <mat-icon\n svgIcon=\"marker-6\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList6\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList6\" />\n <mat-icon\n svgIcon=\"number-1\"\n class=\"list-number\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList1\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.NumberList1\" />\n </div>\n </div>\n </div>\n</div>\n<div class=\"actions\">\n <button\n mat-mini-fab\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-mini-fab\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;padding:30px;justify-content:space-between;overflow:hidden}.content-container{padding-bottom:30px}.title{font-size:16px;font-weight:500;padding-bottom:10px}.font{display:flex;justify-content:space-between}.numbering-container{display:flex;flex-direction:column}.numbering-container .mat-icon{width:102px;height:120px;border-width:1px;border-style:solid}app-nod-font{width:65%}app-nod-font ::ng-deep .mat-mdc-button{height:48px;width:100%}app-nod-font ::ng-deep .mat-mdc-button .mdc-button__label{width:100%}app-nod-font ::ng-deep .mat-mdc-button .font-menu span{padding-left:5px}app-nod-font ::ng-deep .mat-mdc-button .mat-icon{margin:0}app-nod-font-size{display:flex;align-items:center;width:30%;border:1px solid;border-radius:4px;margin:0}app-nod-font-size ::ng-deep .mdc-button.mat-mdc-button{border:none}app-nod-font-size ::ng-deep input{flex:1}mat-button-toggle-group{display:flex;justify-content:space-between;border:none;box-shadow:none}mat-button-toggle-group .mat-button-toggle{width:102px;height:48px;border:none}.text-style-container{display:flex;justify-content:space-between}.text-style-container ::ng-deep .mdc-button.mat-mdc-button{border:none}.text-style-container ::ng-deep .mat-button-toggle,.text-style-container ::ng-deep .mat-mdc-button{width:80px;height:48px;margin:0;border:none}.empty-numbering{display:flex;justify-content:center;align-items:center;text-transform:uppercase;font-size:13;font-weight:400;border-width:1px;border-style:solid;width:102px;height:120px}.numbering-line{display:flex;flex-direction:row;justify-content:space-between;padding-bottom:10px}.actions{text-align:end}.actions .mdc-fab:first-child{margin-right:10px}.hide{display:none}\n"], dependencies: [{ kind: "component", type: ColorPickerComponent, selector: "app-nod-color-picker", inputs: ["color", "icon", "isDisabled", "palette", "tooltip"], outputs: ["colorChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: FontComponent, selector: "app-nod-font", inputs: ["isDisabled", "styles"], outputs: ["selectFont"] }, { kind: "component", type: FontSizeComponent, selector: "app-nod-font-size", inputs: ["isDisabled", "fontSize"], outputs: ["selectFontSize"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i3$3.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$3.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18689
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: TextFormatMobileComponent, isStandalone: true, selector: "app-nod-text-format-mobile", ngImport: i0, template: "<div class=\"content\">\n <div class=\"content-container\">\n <div class=\"title\">{{ 'NODER.LABEL.FONT' | translate }}</div>\n <div class=\"font\">\n <app-nod-font\n [styles]=\"styles\"\n (selectFont)=\"onApplyFontFamily($event)\" />\n <app-nod-font-size\n [fontSize]=\"styles.fontSize\"\n (selectFontSize)=\"onApplyFontSize($event)\" />\n </div>\n </div>\n <div class=\"content-container\">\n <div class=\"title\">{{ 'NODER.LABEL.TEXT_STYLE' | translate }}</div>\n <div class=\"text-style-container\">\n <mat-button-toggle\n [checked]=\"styles.bold\"\n (click)=\"onToggleBold()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-bold\" />\n </mat-button-toggle>\n <mat-button-toggle\n [checked]=\"styles.italic\"\n (click)=\"onToggleItalic()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-italic\" />\n </mat-button-toggle>\n <mat-button-toggle\n [checked]=\"styles.underline\"\n (click)=\"onToggleUnderline()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-underlined\" />\n </mat-button-toggle>\n <app-nod-color-picker\n id=\"icon-format-colortext\"\n class=\"text-color\"\n icon=\"icon-format-colortext\"\n [color]=\"styles.fontColor\"\n [palette]=\"textColorPalette\"\n (colorChange)=\"onSelectFontColor($event)\" />\n <app-nod-color-picker\n id=\"icon-link-highlighter\"\n class=\"highlight-color\"\n icon=\"icon-link-highlighter\"\n [color]=\"styles.highlightColor\"\n [palette]=\"highlightColorPalette\"\n (colorChange)=\"onSelectHighlightColor($event)\" />\n </div>\n </div>\n <div class=\"content-container\">\n <div class=\"title\">{{ 'NODER.LABEL.ALIGNMENT' | translate }}</div>\n <mat-button-toggle-group\n name=\"format\"\n [hideMultipleSelectionIndicator]=\"true\"\n [hideSingleSelectionIndicator]=\"true\"\n [value]=\"styles.alignment\"\n (change)=\"onApplyAlignment($event.value)\">\n <mat-button-toggle [value]=\"alignments.Left\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignleft\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle [value]=\"alignments.Center\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-aligncenter\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle [value]=\"alignments.Right\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-alignright\"></mat-icon>\n </mat-button-toggle>\n <mat-button-toggle\n class=\"hide\"\n [value]=\"alignments.Justify\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-format-align\"></mat-icon>\n </mat-button-toggle>\n </mat-button-toggle-group>\n </div>\n <div class=\"content-container\">\n <div class=\"title\">{{ 'NODER.LABEL.BULLETED_AND_NUMBERED_LIST' | translate }}</div>\n <div class=\"numbering-container\">\n <div class=\"numbering-line\">\n <div\n class=\"empty-numbering\"\n [class.selected]=\"selectedNumberingTemplate === null\"\n (click)=\"selectedNumberingTemplate = null\">\n {{ 'NODER.LABEL.NONE' | translate }}\n </div>\n <mat-icon\n svgIcon=\"marker-1\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList1\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList1\" />\n <mat-icon\n svgIcon=\"marker-2\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList2\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList2\" />\n <mat-icon\n svgIcon=\"marker-3\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList3\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList3\" />\n </div>\n <div class=\"numbering-line\">\n <mat-icon\n svgIcon=\"marker-4\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList4\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList4\" />\n <mat-icon\n svgIcon=\"marker-5\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList5\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList5\" />\n <mat-icon\n svgIcon=\"marker-6\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.BulletList6\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.BulletList6\" />\n <mat-icon\n svgIcon=\"number-1\"\n class=\"list-number\"\n [class.selected]=\"selectedNumberingTemplate === numberingTemplateType.NumberList1\"\n (click)=\"selectedNumberingTemplate = numberingTemplateType.NumberList1\" />\n </div>\n </div>\n </div>\n</div>\n<div class=\"actions\">\n <button\n mat-mini-fab\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-mini-fab\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;padding:30px;justify-content:space-between;overflow:hidden}.content-container{padding-bottom:30px}.title{font-size:16px;font-weight:500;padding-bottom:10px}.font{display:flex;justify-content:space-between}.numbering-container{display:flex;flex-direction:column}.numbering-container .mat-icon{width:102px;height:120px;border-width:1px;border-style:solid}app-nod-font{width:65%}app-nod-font ::ng-deep .mat-mdc-button{height:48px;width:100%}app-nod-font ::ng-deep .mat-mdc-button .mdc-button__label{width:100%}app-nod-font ::ng-deep .mat-mdc-button .font-menu span{padding-left:5px}app-nod-font ::ng-deep .mat-mdc-button .mat-icon{margin:0}app-nod-font-size{display:flex;align-items:center;width:30%;border:1px solid;border-radius:4px;margin:0}app-nod-font-size ::ng-deep .mdc-button.mat-mdc-button{border:none}app-nod-font-size ::ng-deep input{flex:1}mat-button-toggle-group{display:flex;justify-content:space-between;border:none;box-shadow:none}mat-button-toggle-group .mat-button-toggle{width:102px;height:48px;border:none}.text-style-container{display:flex;justify-content:space-between}.text-style-container ::ng-deep .mdc-button.mat-mdc-button{border:none}.text-style-container ::ng-deep .mat-button-toggle,.text-style-container ::ng-deep .mat-mdc-button{width:80px;height:48px;margin:0;border:none}.empty-numbering{display:flex;justify-content:center;align-items:center;text-transform:uppercase;font-size:13;font-weight:400;border-width:1px;border-style:solid;width:102px;height:120px}.numbering-line{display:flex;flex-direction:row;justify-content:space-between;padding-bottom:10px}.actions{text-align:end}.actions .mdc-fab:first-child{margin-right:10px}.hide{display:none}\n"], dependencies: [{ kind: "component", type: ColorPickerComponent, selector: "app-nod-color-picker", inputs: ["color", "icon", "isDisabled", "palette", "tooltip"], outputs: ["colorChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "component", type: FontComponent, selector: "app-nod-font", inputs: ["isDisabled", "styles"], outputs: ["selectFont"] }, { kind: "component", type: FontSizeComponent, selector: "app-nod-font-size", inputs: ["isDisabled", "fontSize"], outputs: ["selectFontSize"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i3$2.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled", "disabledInteractive", "hideSingleSelectionIndicator", "hideMultipleSelectionIndicator"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i3$2.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled", "disabledInteractive"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19123
18690
  }
19124
18691
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: TextFormatMobileComponent, decorators: [{
19125
18692
  type: Component,
@@ -19187,7 +18754,7 @@ class ZoomComponent {
19187
18754
  trigger.panelOpen ? trigger.closePanel() : trigger.openPanel();
19188
18755
  }
19189
18756
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ZoomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19190
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ZoomComponent, isStandalone: false, selector: "app-nod-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=\"noder-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: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$2.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: i3$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18757
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ZoomComponent, isStandalone: false, selector: "app-nod-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=\"noder-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: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2$2.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: i3$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i2$2.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19191
18758
  }
19192
18759
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ZoomComponent, decorators: [{
19193
18760
  type: Component,
@@ -19207,6 +18774,7 @@ class EditorToolbarModule {
19207
18774
  MenuDropdownsMobileComponent,
19208
18775
  NumberingComponent,
19209
18776
  PrintComponent,
18777
+ SpacingComponent,
19210
18778
  ToolbarActionsComponent,
19211
18779
  UndoRedoComponent,
19212
18780
  ZoomComponent], imports: [ColorPickerComponent,
@@ -19264,6 +18832,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
19264
18832
  MenuDropdownsMobileComponent,
19265
18833
  NumberingComponent,
19266
18834
  PrintComponent,
18835
+ SpacingComponent,
19267
18836
  ToolbarActionsComponent,
19268
18837
  UndoRedoComponent,
19269
18838
  ZoomComponent
@@ -19717,8 +19286,8 @@ class PageSetupComponent {
19717
19286
  });
19718
19287
  return customPageSize;
19719
19288
  }
19720
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PageSetupComponent, deps: [{ token: EditorService }, { token: ToolbarCoreService }, { token: i3.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
19721
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: PageSetupComponent, isStandalone: true, selector: "app-nod-page-setup", viewQueries: [{ propertyName: "pageSizeForm", first: true, predicate: ["pageSizeForm"], descendants: true }], ngImport: i0, template: "<div class=\"title\">\n <mat-icon\n fontSet=\"noder-icon\"\n (click)=\"onClose()\"\n fontIcon=\"icon-arrow-forward\" />\n <span>{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n</div>\n<form #pageSizeForm=\"ngForm\">\n <div class=\"content\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.APPLY_TO' | translate }}</mat-label>\n <mat-select [(value)]=\"selectedDocumentArea\">\n <mat-option [value]=\"documentAreas.WholeDocument\">{{ 'NODER.LABEL.WHOLE_DOCUMENT' | translate }}</mat-option>\n <mat-option [value]=\"documentAreas.ThisSection\">{{ 'NODER.LABEL.THIS_SECTION' | translate }}</mat-option>\n @if (hasSelection$ | async) {\n <mat-option [value]=\"documentAreas.SelectedText\">{{ 'NODER.LABEL.SELECTED_TEXT' | translate }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n <div class=\"orientation\">\n <div class=\"label\">{{ 'NODER.LABEL.ORIENTATION' | translate }}</div>\n <mat-radio-group\n aria-label=\"Select an option\"\n [(ngModel)]=\"pageSize.orientation\"\n name=\"orientation\"\n (change)=\"onPageOrientationChanged()\">\n <mat-radio-button [value]=\"pageOrientations.Portrait\">\n <span>{{ 'NODER.LABEL.PORTRAIT' | translate }}</span>\n </mat-radio-button>\n <mat-radio-button [value]=\"pageOrientations.Landscape\">\n <span>{{ 'NODER.LABEL.LANDSCAPE' | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n </div>\n <div class=\"page-format\">\n <div class=\"page-format-tile\">\n <div class=\"label\">{{ 'NODER.LABEL.PAGE_FORMAT' | translate }}</div>\n <div class=\"checkbox-area\">\n <div class=\"checkbox-label\">{{ 'NODER.LABEL.CUSTOM_SIZE' | translate }}</div>\n <mat-checkbox\n [checked]=\"pageSize.isCustom\"\n (change)=\"toggleCustomSize($event)\" />\n </div>\n </div>\n @if (!pageSize.isCustom) {\n <div class=\"page-size\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.SIZE' | translate }}</mat-label>\n <mat-select\n [(value)]=\"pageSizeName\"\n (selectionChange)=\"onPageSizeChange()\">\n @for (option of pageSizes; track option) {\n <mat-option [value]=\"option.name\">\n <div class=\"size-option\">\n <span class=\"option-name\">{{ option.name + ' ' }}</span>\n <span class=\"option-size\">{{ option.size }}</span>\n </div>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"page-custom-size\">\n <mat-form-field\n appearance=\"outline\"\n class=\"size-unit\">\n <mat-label>{{ 'NODER.LABEL.MEASURE' | translate }}</mat-label>\n <mat-select\n [(ngModel)]=\"pageSize.unit\"\n name=\"unit\"\n (valueChange)=\"onUnitChanged($event)\">\n <mat-option [value]=\"sizeUnits.Millimeters\">{{ 'NODER.LABEL.MILLIMETERS' | translate }}</mat-option>\n <mat-option [value]=\"sizeUnits.Inches\">{{ 'NODER.LABEL.INCHES' | translate }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"size-panel\">\n <mat-form-field\n appearance=\"outline\"\n class=\"custom-width\">\n <mat-label>{{ ('NODER.LABEL.WIDTH' | translate) + currentUnit }}</mat-label>\n <input\n matInput\n [(ngModel)]=\"pageSize.customWidth\"\n name=\"customWidth\" />\n </mat-form-field>\n <button\n mat-button\n (click)=\"onIncrementWidth()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n </button>\n <button\n mat-button\n (click)=\"onDecrementWidth()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\"></mat-icon>\n </button>\n </div>\n <div class=\"size-panel\">\n <mat-form-field\n appearance=\"outline\"\n class=\"custom-height\">\n <mat-label>{{ ('NODER.LABEL.HEIGHT' | translate) + currentUnit }}</mat-label>\n <input\n matInput\n [(ngModel)]=\"pageSize.customHeight\"\n name=\"customHeight\" />\n </mat-form-field>\n <button\n mat-button\n (click)=\"onIncrementHeight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n </button>\n <button\n mat-button\n (click)=\"onDecrementHeight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\"></mat-icon>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"actions\">\n <button\n mat-stroked-button\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"onApply()\"\n [disabled]=\"pageSizeForm.pristine\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n </div>\n</form>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:400px}.title{margin:12px 16px;height:32px;display:flex;align-items:center;gap:8px}.title span{overflow:hidden;text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:500;line-height:normal}.content{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:8px 16px 0;gap:24px}.actions{display:flex;justify-content:flex-end;margin:0 16px 16px;gap:10px}.actions .mdc-button{width:32px;height:32px;min-width:32px;padding:0}.actions .mdc-button .mat-icon{margin-right:0;margin-left:0}.orientation{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.orientation mat-radio-group{display:flex;width:100%;gap:16px}.label{font-size:14px;font-style:normal;font-weight:400;line-height:normal}.page-format{display:flex;flex-direction:column;gap:16px}.page-format-tile{display:flex;align-items:center;justify-content:space-between}.page-format-tile .checkbox-area{display:flex;align-items:center}.checkbox-label{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.custom-width,.custom-height,.size-unit{width:120px}.page-custom-size{display:flex;flex-direction:column}.size-panel{display:flex;gap:10px}.size-panel .mdc-button{width:40px;height:40px;min-width:40px;padding:0}.size-panel .mdc-button .mat-icon{margin-right:0;margin-left:0}.size-option{display:flex;flex-direction:column}.option-name{font-weight:400}.option-size{font-size:12px}form{display:flex;flex-direction:column;flex:1}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.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: i5$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.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", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3$2.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19289
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PageSetupComponent, deps: [{ token: EditorService }, { token: ToolbarCoreService }, { token: i6.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
19290
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: PageSetupComponent, isStandalone: true, selector: "app-nod-page-setup", viewQueries: [{ propertyName: "pageSizeForm", first: true, predicate: ["pageSizeForm"], descendants: true }], ngImport: i0, template: "<div class=\"title\">\n <mat-icon\n fontSet=\"noder-icon\"\n (click)=\"onClose()\"\n fontIcon=\"icon-arrow-forward\" />\n <span>{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n</div>\n<form #pageSizeForm=\"ngForm\">\n <div class=\"content\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.APPLY_TO' | translate }}</mat-label>\n <mat-select [(value)]=\"selectedDocumentArea\">\n <mat-option [value]=\"documentAreas.WholeDocument\">{{ 'NODER.LABEL.WHOLE_DOCUMENT' | translate }}</mat-option>\n <mat-option [value]=\"documentAreas.ThisSection\">{{ 'NODER.LABEL.THIS_SECTION' | translate }}</mat-option>\n @if (hasSelection$ | async) {\n <mat-option [value]=\"documentAreas.SelectedText\">{{ 'NODER.LABEL.SELECTED_TEXT' | translate }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n <div class=\"orientation\">\n <div class=\"label\">{{ 'NODER.LABEL.ORIENTATION' | translate }}</div>\n <mat-radio-group\n aria-label=\"Select an option\"\n [(ngModel)]=\"pageSize.orientation\"\n name=\"orientation\"\n (change)=\"onPageOrientationChanged()\">\n <mat-radio-button [value]=\"pageOrientations.Portrait\">\n <span>{{ 'NODER.LABEL.PORTRAIT' | translate }}</span>\n </mat-radio-button>\n <mat-radio-button [value]=\"pageOrientations.Landscape\">\n <span>{{ 'NODER.LABEL.LANDSCAPE' | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n </div>\n <div class=\"page-format\">\n <div class=\"page-format-tile\">\n <div class=\"label\">{{ 'NODER.LABEL.PAGE_FORMAT' | translate }}</div>\n <div class=\"checkbox-area\">\n <div class=\"checkbox-label\">{{ 'NODER.LABEL.CUSTOM_SIZE' | translate }}</div>\n <mat-checkbox\n [checked]=\"pageSize.isCustom\"\n (change)=\"toggleCustomSize($event)\" />\n </div>\n </div>\n @if (!pageSize.isCustom) {\n <div class=\"page-size\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.SIZE' | translate }}</mat-label>\n <mat-select\n [(value)]=\"pageSizeName\"\n (selectionChange)=\"onPageSizeChange()\">\n @for (option of pageSizes; track option) {\n <mat-option [value]=\"option.name\">\n <div class=\"size-option\">\n <span class=\"option-name\">{{ option.name + ' ' }}</span>\n <span class=\"option-size\">{{ option.size }}</span>\n </div>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"page-custom-size\">\n <mat-form-field\n appearance=\"outline\"\n class=\"size-unit\">\n <mat-label>{{ 'NODER.LABEL.MEASURE' | translate }}</mat-label>\n <mat-select\n [(ngModel)]=\"pageSize.unit\"\n name=\"unit\"\n (valueChange)=\"onUnitChanged($event)\">\n <mat-option [value]=\"sizeUnits.Millimeters\">{{ 'NODER.LABEL.MILLIMETERS' | translate }}</mat-option>\n <mat-option [value]=\"sizeUnits.Inches\">{{ 'NODER.LABEL.INCHES' | translate }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"size-panel\">\n <mat-form-field\n appearance=\"outline\"\n class=\"custom-width\">\n <mat-label>{{ ('NODER.LABEL.WIDTH' | translate) + currentUnit }}</mat-label>\n <input\n matInput\n [(ngModel)]=\"pageSize.customWidth\"\n name=\"customWidth\" />\n </mat-form-field>\n <button\n mat-button\n (click)=\"onIncrementWidth()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n </button>\n <button\n mat-button\n (click)=\"onDecrementWidth()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\"></mat-icon>\n </button>\n </div>\n <div class=\"size-panel\">\n <mat-form-field\n appearance=\"outline\"\n class=\"custom-height\">\n <mat-label>{{ ('NODER.LABEL.HEIGHT' | translate) + currentUnit }}</mat-label>\n <input\n matInput\n [(ngModel)]=\"pageSize.customHeight\"\n name=\"customHeight\" />\n </mat-form-field>\n <button\n mat-button\n (click)=\"onIncrementHeight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n </button>\n <button\n mat-button\n (click)=\"onDecrementHeight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\"></mat-icon>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"actions\">\n <button\n mat-stroked-button\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"onApply()\"\n [disabled]=\"pageSizeForm.pristine\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n </div>\n</form>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:400px}.title{margin:12px 16px;height:32px;display:flex;align-items:center;gap:8px}.title span{overflow:hidden;text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:500;line-height:normal}.content{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:8px 16px 0;gap:24px}.actions{display:flex;justify-content:flex-end;margin:0 16px 16px;gap:10px}.actions .mdc-button{width:32px;height:32px;min-width:32px;padding:0}.actions .mdc-button .mat-icon{margin-right:0;margin-left:0}.orientation{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.orientation mat-radio-group{display:flex;width:100%;gap:16px}.label{font-size:14px;font-style:normal;font-weight:400;line-height:normal}.page-format{display:flex;flex-direction:column;gap:16px}.page-format-tile{display:flex;align-items:center;justify-content:space-between}.page-format-tile .checkbox-area{display:flex;align-items:center}.checkbox-label{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.custom-width,.custom-height,.size-unit{width:120px}.page-custom-size{display:flex;flex-direction:column}.size-panel{display:flex;gap:10px}.size-panel .mdc-button{width:40px;height:40px;min-width:40px;padding:0}.size-panel .mdc-button .mat-icon{margin-right:0;margin-left:0}.size-option{display:flex;flex-direction:column}.option-name{font-weight:400}.option-size{font-size:12px}form{display:flex;flex-direction:column;flex:1}\n"], dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.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: i5$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$2.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i7.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", "canSelectNullableOptions"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i3$1.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i10$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i12.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i12.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19722
19291
  }
19723
19292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PageSetupComponent, decorators: [{
19724
19293
  type: Component,
@@ -19734,7 +19303,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
19734
19303
  FormsModule,
19735
19304
  MatRadioModule
19736
19305
  ], selector: 'app-nod-page-setup', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"title\">\n <mat-icon\n fontSet=\"noder-icon\"\n (click)=\"onClose()\"\n fontIcon=\"icon-arrow-forward\" />\n <span>{{ 'NODER.LABEL.PAGE_SETUP' | translate }}</span>\n</div>\n<form #pageSizeForm=\"ngForm\">\n <div class=\"content\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.APPLY_TO' | translate }}</mat-label>\n <mat-select [(value)]=\"selectedDocumentArea\">\n <mat-option [value]=\"documentAreas.WholeDocument\">{{ 'NODER.LABEL.WHOLE_DOCUMENT' | translate }}</mat-option>\n <mat-option [value]=\"documentAreas.ThisSection\">{{ 'NODER.LABEL.THIS_SECTION' | translate }}</mat-option>\n @if (hasSelection$ | async) {\n <mat-option [value]=\"documentAreas.SelectedText\">{{ 'NODER.LABEL.SELECTED_TEXT' | translate }}</mat-option>\n }\n </mat-select>\n </mat-form-field>\n <div class=\"orientation\">\n <div class=\"label\">{{ 'NODER.LABEL.ORIENTATION' | translate }}</div>\n <mat-radio-group\n aria-label=\"Select an option\"\n [(ngModel)]=\"pageSize.orientation\"\n name=\"orientation\"\n (change)=\"onPageOrientationChanged()\">\n <mat-radio-button [value]=\"pageOrientations.Portrait\">\n <span>{{ 'NODER.LABEL.PORTRAIT' | translate }}</span>\n </mat-radio-button>\n <mat-radio-button [value]=\"pageOrientations.Landscape\">\n <span>{{ 'NODER.LABEL.LANDSCAPE' | translate }}</span>\n </mat-radio-button>\n </mat-radio-group>\n </div>\n <div class=\"page-format\">\n <div class=\"page-format-tile\">\n <div class=\"label\">{{ 'NODER.LABEL.PAGE_FORMAT' | translate }}</div>\n <div class=\"checkbox-area\">\n <div class=\"checkbox-label\">{{ 'NODER.LABEL.CUSTOM_SIZE' | translate }}</div>\n <mat-checkbox\n [checked]=\"pageSize.isCustom\"\n (change)=\"toggleCustomSize($event)\" />\n </div>\n </div>\n @if (!pageSize.isCustom) {\n <div class=\"page-size\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.SIZE' | translate }}</mat-label>\n <mat-select\n [(value)]=\"pageSizeName\"\n (selectionChange)=\"onPageSizeChange()\">\n @for (option of pageSizes; track option) {\n <mat-option [value]=\"option.name\">\n <div class=\"size-option\">\n <span class=\"option-name\">{{ option.name + ' ' }}</span>\n <span class=\"option-size\">{{ option.size }}</span>\n </div>\n </mat-option>\n }\n </mat-select>\n </mat-form-field>\n </div>\n } @else {\n <div class=\"page-custom-size\">\n <mat-form-field\n appearance=\"outline\"\n class=\"size-unit\">\n <mat-label>{{ 'NODER.LABEL.MEASURE' | translate }}</mat-label>\n <mat-select\n [(ngModel)]=\"pageSize.unit\"\n name=\"unit\"\n (valueChange)=\"onUnitChanged($event)\">\n <mat-option [value]=\"sizeUnits.Millimeters\">{{ 'NODER.LABEL.MILLIMETERS' | translate }}</mat-option>\n <mat-option [value]=\"sizeUnits.Inches\">{{ 'NODER.LABEL.INCHES' | translate }}</mat-option>\n </mat-select>\n </mat-form-field>\n <div class=\"size-panel\">\n <mat-form-field\n appearance=\"outline\"\n class=\"custom-width\">\n <mat-label>{{ ('NODER.LABEL.WIDTH' | translate) + currentUnit }}</mat-label>\n <input\n matInput\n [(ngModel)]=\"pageSize.customWidth\"\n name=\"customWidth\" />\n </mat-form-field>\n <button\n mat-button\n (click)=\"onIncrementWidth()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n </button>\n <button\n mat-button\n (click)=\"onDecrementWidth()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\"></mat-icon>\n </button>\n </div>\n <div class=\"size-panel\">\n <mat-form-field\n appearance=\"outline\"\n class=\"custom-height\">\n <mat-label>{{ ('NODER.LABEL.HEIGHT' | translate) + currentUnit }}</mat-label>\n <input\n matInput\n [(ngModel)]=\"pageSize.customHeight\"\n name=\"customHeight\" />\n </mat-form-field>\n <button\n mat-button\n (click)=\"onIncrementHeight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-add\"></mat-icon>\n </button>\n <button\n mat-button\n (click)=\"onDecrementHeight()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-remove\"></mat-icon>\n </button>\n </div>\n </div>\n }\n </div>\n </div>\n <div class=\"actions\">\n <button\n mat-stroked-button\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-flat-button\n color=\"primary\"\n (click)=\"onApply()\"\n [disabled]=\"pageSizeForm.pristine\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n </div>\n</form>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:400px}.title{margin:12px 16px;height:32px;display:flex;align-items:center;gap:8px}.title span{overflow:hidden;text-overflow:ellipsis;font-size:16px;font-style:normal;font-weight:500;line-height:normal}.content{display:flex;flex-direction:column;height:100%;overflow:hidden;padding:8px 16px 0;gap:24px}.actions{display:flex;justify-content:flex-end;margin:0 16px 16px;gap:10px}.actions .mdc-button{width:32px;height:32px;min-width:32px;padding:0}.actions .mdc-button .mat-icon{margin-right:0;margin-left:0}.orientation{display:flex;flex-direction:column;align-items:flex-start;gap:8px}.orientation mat-radio-group{display:flex;width:100%;gap:16px}.label{font-size:14px;font-style:normal;font-weight:400;line-height:normal}.page-format{display:flex;flex-direction:column;gap:16px}.page-format-tile{display:flex;align-items:center;justify-content:space-between}.page-format-tile .checkbox-area{display:flex;align-items:center}.checkbox-label{font-size:12px;font-style:normal;font-weight:400;line-height:normal}.custom-width,.custom-height,.size-unit{width:120px}.page-custom-size{display:flex;flex-direction:column}.size-panel{display:flex;gap:10px}.size-panel .mdc-button{width:40px;height:40px;min-width:40px;padding:0}.size-panel .mdc-button .mat-icon{margin-right:0;margin-left:0}.size-option{display:flex;flex-direction:column}.option-name{font-weight:400}.option-size{font-size:12px}form{display:flex;flex-direction:column;flex:1}\n"] }]
19737
- }], ctorParameters: () => [{ type: EditorService }, { type: ToolbarCoreService }, { type: i3.TranslateService }], propDecorators: { pageSizeForm: [{
19306
+ }], ctorParameters: () => [{ type: EditorService }, { type: ToolbarCoreService }, { type: i6.TranslateService }], propDecorators: { pageSizeForm: [{
19738
19307
  type: ViewChild,
19739
19308
  args: ['pageSizeForm']
19740
19309
  }] } });
@@ -19824,7 +19393,7 @@ class AddLinkDialogComponent {
19824
19393
  this.dialogRef.close({ text: this.form.controls.text.value, link: this.form.controls.link.value });
19825
19394
  }
19826
19395
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AddLinkDialogComponent, deps: [{ token: i1$1.MatDialogRef }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
19827
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: AddLinkDialogComponent, isStandalone: true, selector: "app-nod-add-link-dialog", host: { listeners: { "keydown.esc": "onClose()", "keydown.enter": "onApply()" }, properties: { "class.noder-modal": "this.modal" } }, ngImport: i0, template: "<div mat-dialog-title>{{ 'NODER.LABEL.ADD_LINK' | translate }}</div>\n<div\n mat-dialog-content\n [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.TEXT' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.text\"\n required />\n <mat-error>{{ 'NODER.LABEL.THE_TEXT_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.LINK' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.link\"\n required />\n <mat-error>{{ 'NODER.LABEL.THE_LINK_IS_REQUIRED' | translate }}.</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=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n {{ 'NODER.LABEL.CANCEL' | translate }}\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=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n {{ 'NODER.LABEL.APPLY' | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:300px;width:430px;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!important;padding-bottom:0}.mat-mdc-dialog-actions{display:flex;justify-content:center;padding-top:5px;height:40px;margin-bottom:30px}.mat-mdc-dialog-actions button{width:30%;height:100%;letter-spacing:1px;border-radius:8px;text-transform:uppercase}.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: i4.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$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19396
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: AddLinkDialogComponent, isStandalone: true, selector: "app-nod-add-link-dialog", host: { listeners: { "keydown.esc": "onClose()", "keydown.enter": "onApply()" }, properties: { "class.noder-modal": "this.modal" } }, ngImport: i0, template: "<div mat-dialog-title>{{ 'NODER.LABEL.ADD_LINK' | translate }}</div>\n<div\n mat-dialog-content\n [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.TEXT' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.text\"\n required />\n <mat-error>{{ 'NODER.LABEL.THE_TEXT_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.LINK' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.link\"\n required />\n <mat-error>{{ 'NODER.LABEL.THE_LINK_IS_REQUIRED' | translate }}.</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=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n {{ 'NODER.LABEL.CANCEL' | translate }}\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=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n {{ 'NODER.LABEL.APPLY' | translate }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:300px;width:430px;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!important;padding-bottom:0}.mat-mdc-dialog-actions{display:flex;justify-content:center;padding-top:5px;height:40px;margin-bottom:30px}.mat-mdc-dialog-actions button{width:30%;height:100%;letter-spacing:1px;border-radius:8px;text-transform:uppercase}.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: i4.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$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19828
19397
  }
19829
19398
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AddLinkDialogComponent, decorators: [{
19830
19399
  type: Component,
@@ -19873,7 +19442,7 @@ class AddLinkMobileComponent {
19873
19442
  this.onApply();
19874
19443
  }
19875
19444
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AddLinkMobileComponent, deps: [{ token: EditorService }, { token: i2.FormBuilder }, { token: ToolbarCoreService }], target: i0.ɵɵFactoryTarget.Component }); }
19876
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: AddLinkMobileComponent, isStandalone: true, selector: "app-nod-add-link-mobile", ngImport: i0, template: "<div class=\"content\">\n <div class=\"title\">{{ 'NODER.LABEL.LINK_OPTIONS' | translate }}</div>\n <div\n class=\"inputs\"\n [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.TEXT' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.text\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>{{ 'NODER.LABEL.THE_TEXT_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.LINK' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.link\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>{{ 'NODER.LABEL.THE_LINK_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n </div>\n</div>\n<div class=\"actions\">\n <button\n mat-mini-fab\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-mini-fab\n [disabled]=\"form.invalid\"\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;padding:30px;justify-content:space-between;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}.title{font-size:16px;font-weight:500}mat-form-field{width:100%}.inputs{padding-top:10px;padding-bottom:0}.actions{text-align:end}.actions .mdc-fab:first-child{margin-right:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.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", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19445
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: AddLinkMobileComponent, isStandalone: true, selector: "app-nod-add-link-mobile", ngImport: i0, template: "<div class=\"content\">\n <div class=\"title\">{{ 'NODER.LABEL.LINK_OPTIONS' | translate }}</div>\n <div\n class=\"inputs\"\n [formGroup]=\"form\">\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.TEXT' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.text\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>{{ 'NODER.LABEL.THE_TEXT_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n <mat-form-field appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.LINK' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"form.controls.link\"\n (keydown.enter)=\"onEnter()\"\n required />\n <mat-error>{{ 'NODER.LABEL.THE_LINK_IS_REQUIRED' | translate }}.</mat-error>\n </mat-form-field>\n </div>\n</div>\n<div class=\"actions\">\n <button\n mat-mini-fab\n (click)=\"onClose()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\" />\n </button>\n <button\n mat-mini-fab\n [disabled]=\"form.invalid\"\n (click)=\"onApply()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\" />\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;width:100%;height:100%;padding:30px;justify-content:space-between;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}.title{font-size:16px;font-weight:500}mat-form-field{width:100%}.inputs{padding-top:10px;padding-bottom:0}.actions{text-align:end}.actions .mdc-fab:first-child{margin-right:10px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatMiniFabButton, selector: "button[mat-mini-fab]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$2.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$2.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5$2.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i6$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.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.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
19877
19446
  }
19878
19447
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AddLinkMobileComponent, decorators: [{
19879
19448
  type: Component,
@@ -19890,7 +19459,7 @@ class ConfirmDialogComponent {
19890
19459
  this.ref.close(status);
19891
19460
  }
19892
19461
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ConfirmDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
19893
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ConfirmDialogComponent, isStandalone: true, selector: "app-nod-confirm-dialog", host: { properties: { "class.noder-modal": "this.modal" } }, ngImport: i0, template: "<p class=\"title\">{{ data.title ? data.title : ('NODER.LABEL.CONFIRMATION' | translate) }}</p>\n<div class=\"content\">\n <p>{{ data.message }}</p>\n</div>\n<div class=\"actions\">\n <button\n id=\"confirm-dialog-cancel-btn\"\n mat-button\n (click)=\"onClose(false)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n {{ data.cancel ? data.cancel : ('NODER.LABEL.CANCEL' | translate) }}\n </button>\n <button\n id=\"confirm-dialog-confirm-btn\"\n mat-raised-button\n class=\"delete-btn\"\n color=\"primary\"\n (click)=\"onClose(true)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\"></mat-icon>\n {{ data.confirm ? data.confirm : ('NODER.LABEL.DELETE' | translate) }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;min-width:400px;max-width:440px;min-height:208px}.title{font-size:18px;font-weight:700;text-transform:capitalize;padding:24px 24px 12px;margin:0;border-bottom-width:1px;border-bottom-style:solid}.content{display:flex;flex:1;font-size:16px;line-height:20px;padding:20px 24px 16px}.content p{margin:0;overflow:hidden;text-overflow:ellipsis}.actions{display:flex;justify-content:center;margin-bottom:24px;gap:8px}.actions button{height:40px;width:120px;text-transform:uppercase}.actions button mat-icon{font-size:24px;height:24px;width:24px}.actions button .mat-button-toggle-label-content{padding:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }] }); }
19462
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: ConfirmDialogComponent, isStandalone: true, selector: "app-nod-confirm-dialog", host: { properties: { "class.noder-modal": "this.modal" } }, ngImport: i0, template: "<p class=\"title\">{{ data.title ? data.title : ('NODER.LABEL.CONFIRMATION' | translate) }}</p>\n<div class=\"content\">\n <p>{{ data.message }}</p>\n</div>\n<div class=\"actions\">\n <button\n id=\"confirm-dialog-cancel-btn\"\n mat-button\n (click)=\"onClose(false)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-cancel-thin\"></mat-icon>\n {{ data.cancel ? data.cancel : ('NODER.LABEL.CANCEL' | translate) }}\n </button>\n <button\n id=\"confirm-dialog-confirm-btn\"\n mat-raised-button\n class=\"delete-btn\"\n color=\"primary\"\n (click)=\"onClose(true)\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-done-thin\"></mat-icon>\n {{ data.confirm ? data.confirm : ('NODER.LABEL.DELETE' | translate) }}\n </button>\n</div>\n", styles: [":host{display:flex;flex-direction:column;min-width:400px;max-width:440px;min-height:208px}.title{font-size:18px;font-weight:700;text-transform:capitalize;padding:24px 24px 12px;margin:0;border-bottom-width:1px;border-bottom-style:solid}.content{display:flex;flex:1;font-size:16px;line-height:20px;padding:20px 24px 16px}.content p{margin:0;overflow:hidden;text-overflow:ellipsis}.actions{display:flex;justify-content:center;margin-bottom:24px;gap:8px}.actions button{height:40px;width:120px;text-transform:uppercase}.actions button mat-icon{font-size:24px;height:24px;width:24px}.actions button .mat-button-toggle-label-content{padding:0 2px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i6.TranslatePipe, name: "translate" }] }); }
19894
19463
  }
19895
19464
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: ConfirmDialogComponent, decorators: [{
19896
19465
  type: Component,
@@ -19973,5 +19542,5 @@ class OperationModel {
19973
19542
  * Generated bundle index. Do not edit.
19974
19543
  */
19975
19544
 
19976
- export { AddLinkDialogComponent, AddLinkMobileComponent, Alignment, BaseCommentComponent, BaseNoderComponent, Borders, BreakTypes, CommandModel, CommandType, CommandsService, ConfirmDialogComponent, DEFAULT_BACKGROUND_COLOR, DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER, DEFAULT_FONT_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_HEADINGS, DEFAULT_HEADING_STYLE_ID, DEFAULT_OFFSET_AFTER_NUMBERING_MARKER, DEFAULT_PARAGRAPH_STYLE, DEFAULT_TABLE_MARGINS, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE, DEFAULT_TOOLBAR_STYLES, DefaultImageApiService, DestroyComponent, DocumentInfo, DocumentModel, DocumentNameModel, DocxModel, DomHelper, EditorComponent, EditorMobileToolbarComponent, EditorModule, EditorService, EditorTitleComponent, EditorTitleMobileComponent, EditorToolbarComponent, EditorToolbarMode, EditorToolbarModule, EditorToolbarService, ElementDataModel, ElementModel, ExternalComponent, ExternalElementModel, ExternalElementService, FileSourceModel, FontMetrics, FormatStyleHelper, GrammarService, HYPERLINK_FONT_COLOR, HYPERLINK_HEADING_STYLE_ID, ImageApiService, ImageDataModel, LastDocumentRevisionModel, LineStyles, MenuDropdownsComponent, MenuDropdownsMobileComponent, Mode, NEW_LINE_MARKUP, NoderTranslateLoader, NumberingLevelModel, OperationModel, OperationsHistoryInfoModel, PageSetupComponent, PageType, ParagraphStyleModel, RevisionHelper, RevisionModel, SearchResultLocation, TextFormatMobileComponent, TextStyleModel, ToolbarActionsComponent };
19545
+ export { AddLinkDialogComponent, AddLinkMobileComponent, Alignment, BaseCommentComponent, BaseNoderComponent, Borders, BreakTypes, CommandModel, CommandType, CommandsService, CommentTypeModel, ConfirmDialogComponent, DEFAULT_BACKGROUND_COLOR, DEFAULT_EDGE_MAX_HEIGHT_MULTIPLIER, DEFAULT_FONT_COLOR, DEFAULT_FONT_FAMILY, DEFAULT_FONT_SIZE, DEFAULT_HEADINGS, DEFAULT_HEADING_STYLE_ID, DEFAULT_OFFSET_AFTER_NUMBERING_MARKER, DEFAULT_PARAGRAPH_STYLE, DEFAULT_TABLE_MARGINS, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE, DEFAULT_TOOLBAR_STYLES, DefaultImageApiService, DestroyComponent, DocumentInfo, DocumentModel, DocumentNameModel, DocxModel, DomHelper, EditorComponent, EditorMobileToolbarComponent, EditorModule, EditorService, EditorTitleComponent, EditorTitleMobileComponent, EditorToolbarComponent, EditorToolbarMode, EditorToolbarModule, EditorToolbarService, ElementDataModel, ElementModel, ExternalComponent, ExternalElementModel, ExternalElementService, FileSourceModel, FontMetrics, FormatStyleHelper, GrammarService, HYPERLINK_FONT_COLOR, HYPERLINK_HEADING_STYLE_ID, ImageApiService, ImageDataModel, LastDocumentRevisionModel, LineStyles, MenuDropdownsComponent, MenuDropdownsMobileComponent, Mode, NEW_LINE_MARKUP, NoderTranslateLoader, NumberingLevelModel, OperationModel, OperationsHistoryInfoModel, PageSetupComponent, PageType, ParagraphStyleModel, RevisionHelper, RevisionModel, SearchResultLocation, TextFormatMobileComponent, TextStyleModel, ToolbarActionsComponent };
19977
19546
  //# sourceMappingURL=talrace-ngx-noder.mjs.map