@talrace/ngx-noder 0.0.40 → 0.0.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/i18n/noder.en.json +2 -1
- package/assets/i18n/noder.es.json +2 -1
- package/assets/i18n/noder.ru.json +2 -1
- package/fesm2022/talrace-ngx-noder.mjs +788 -482
- package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
- package/lib/apart-components/editor-ruler/editor-ruler.component.d.ts +28 -14
- package/lib/apart-components/editor-search-bar/editor-search-bar.component.d.ts +26 -0
- package/lib/editor/components/editor.component.d.ts +7 -1
- package/lib/editor/display/layers/highlight.layer.d.ts +16 -0
- package/lib/editor/display/layers/search-highlight.layer.d.ts +12 -0
- package/lib/editor/display/layers/selection.layer.d.ts +3 -11
- package/lib/editor/display/render-changes.interface.d.ts +1 -0
- package/lib/editor/display/render-changes.model.d.ts +1 -0
- package/lib/editor/display/renderer.d.ts +5 -0
- package/lib/editor/display/virtual.renderer.d.ts +4 -1
- package/lib/editor/editor.module.d.ts +10 -9
- package/lib/editor/execution/edit.session.d.ts +1 -0
- package/lib/editor/execution/editor.d.ts +21 -8
- package/lib/editor/gadgets/history/operation-history.d.ts +1 -0
- package/lib/editor/gadgets/history/operation.type.d.ts +2 -1
- package/lib/editor/gadgets/search/search-result.interface.d.ts +5 -0
- package/lib/editor/gadgets/search/search.d.ts +14 -30
- package/lib/editor/interaction/editor.service.d.ts +48 -16
- package/lib/editor/operations/enums/command-type.enum.d.ts +2 -1
- package/lib/editor/operations/helpers/paragraph-operations.helper.d.ts +1 -0
- package/lib/editor/operations/operations-helper.helper.d.ts +1 -0
- package/lib/editor/operations/save-commands.helper.d.ts +1 -0
- package/lib/models/generated/apply-paragraphs.model.d.ts +5 -0
- package/lib/models/generated/command.model.d.ts +2 -0
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/src/_ngx-noder.theme.scss +2 -0
- package/src/lib/apart-components/editor-search-bar/_theme.scss +28 -0
- package/src/scss/base-editor.scss +13 -3
- package/lib/apart-components/editor-search/editor-search-dialog.component.d.ts +0 -23
- package/lib/editor/gadgets/search/replace.interface.d.ts +0 -4
- package/lib/editor/gadgets/search/search-iteration.interface.d.ts +0 -4
|
@@ -1,41 +1,42 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Directive, Injectable, inject, ChangeDetectorRef, HostBinding, Input,
|
|
3
|
-
import { Subject, BehaviorSubject, fromEvent, throttleTime, take, filter, startWith, takeUntil,
|
|
2
|
+
import { Directive, Injectable, inject, ChangeDetectorRef, HostBinding, Input, Component, ChangeDetectionStrategy, ViewChild, InjectionToken, createComponent, EventEmitter, Output, HostListener, input, signal, computed, effect, NgModule, Inject } from '@angular/core';
|
|
3
|
+
import { Subject, BehaviorSubject, fromEvent, throttleTime, take, filter, debounceTime, distinctUntilChanged, startWith, takeUntil, tap, map, catchError } from 'rxjs';
|
|
4
4
|
import * as i1$1 from '@angular/common/http';
|
|
5
5
|
import { HttpHeaders } from '@angular/common/http';
|
|
6
6
|
import * as i3 from '@angular/common';
|
|
7
7
|
import { CommonModule, AsyncPipe } from '@angular/common';
|
|
8
|
+
import * as i2 from '@angular/forms';
|
|
9
|
+
import { FormControl, FormsModule, ReactiveFormsModule, Validators } from '@angular/forms';
|
|
10
|
+
import * as i4 from '@angular/material/button';
|
|
11
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
12
|
+
import * as i5 from '@angular/material/icon';
|
|
13
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
14
|
+
import * as i6 from '@angular/material/input';
|
|
15
|
+
import { MatInputModule } from '@angular/material/input';
|
|
16
|
+
import * as i5$2 from '@angular/material/tooltip';
|
|
17
|
+
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
18
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
19
|
+
import * as i3$1 from '@ngx-translate/core';
|
|
20
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
21
|
+
import * as i5$1 from '@angular/material/form-field';
|
|
22
|
+
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
8
23
|
import { ComponentPortal } from '@angular/cdk/portal';
|
|
9
24
|
import * as i1 from '@angular/cdk/overlay';
|
|
10
25
|
import { OverlayConfig } from '@angular/cdk/overlay';
|
|
11
|
-
import * as
|
|
12
|
-
import
|
|
13
|
-
import * as i5 from '@angular/material/icon';
|
|
14
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
15
|
-
import * as i5$1 from '@angular/cdk/clipboard';
|
|
16
|
-
import * as i7 from '@angular/material/sidenav';
|
|
26
|
+
import * as i5$3 from '@angular/cdk/clipboard';
|
|
27
|
+
import * as i8 from '@angular/material/sidenav';
|
|
17
28
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
18
|
-
import * as i4 from '@angular/material/button';
|
|
19
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
20
29
|
import * as i1$2 from '@angular/material/dialog';
|
|
21
30
|
import { MatDialogModule, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
22
|
-
import * as i5$2 from '@angular/material/tooltip';
|
|
23
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
24
|
-
import * as i2 from '@angular/forms';
|
|
25
|
-
import { ReactiveFormsModule, FormControl, FormsModule, Validators } from '@angular/forms';
|
|
26
31
|
import { TranslateHttpLoader } from '@ngx-translate/http-loader';
|
|
27
32
|
import * as i4$1 from '@angular/material/menu';
|
|
28
33
|
import { MatMenuModule } from '@angular/material/menu';
|
|
29
|
-
import * as i6 from '@angular/material/input';
|
|
30
|
-
import { MatInputModule } from '@angular/material/input';
|
|
31
|
-
import * as i5$3 from '@angular/material/form-field';
|
|
32
|
-
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
33
34
|
import * as i4$2 from '@angular/material/expansion';
|
|
34
35
|
import { MatExpansionModule } from '@angular/material/expansion';
|
|
35
36
|
import * as i2$1 from '@angular/platform-browser';
|
|
36
37
|
import * as i2$2 from '@angular/material/autocomplete';
|
|
37
38
|
import { MatAutocompleteModule } from '@angular/material/autocomplete';
|
|
38
|
-
import * as i8 from '@angular/material/select';
|
|
39
|
+
import * as i8$1 from '@angular/material/select';
|
|
39
40
|
import { MatSelectModule } from '@angular/material/select';
|
|
40
41
|
import * as i3$2 from '@angular/material/core';
|
|
41
42
|
import * as i5$4 from 'ngx-colors';
|
|
@@ -53,9 +54,9 @@ const DocumentInfo = {
|
|
|
53
54
|
height: 1123,
|
|
54
55
|
pagesSpace: 8,
|
|
55
56
|
paddingTop: 96,
|
|
56
|
-
paddingRight:
|
|
57
|
+
paddingRight: 96,
|
|
57
58
|
paddingBottom: 96,
|
|
58
|
-
paddingLeft:
|
|
59
|
+
paddingLeft: 96,
|
|
59
60
|
paddingHeader: 48,
|
|
60
61
|
paddingFooter: 48
|
|
61
62
|
};
|
|
@@ -431,6 +432,14 @@ class OperationsHistoryInfoModel {
|
|
|
431
432
|
}
|
|
432
433
|
}
|
|
433
434
|
|
|
435
|
+
class PageFormatModel {
|
|
436
|
+
constructor(fields) {
|
|
437
|
+
if (fields) {
|
|
438
|
+
Object.assign(this, fields);
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
}
|
|
442
|
+
|
|
434
443
|
class EditorService {
|
|
435
444
|
constructor() {
|
|
436
445
|
this._styles$ = new BehaviorSubject({});
|
|
@@ -441,10 +450,15 @@ class EditorService {
|
|
|
441
450
|
this._hasSelection$ = new BehaviorSubject(false);
|
|
442
451
|
this._historyInfo$ = new BehaviorSubject(new OperationsHistoryInfoModel(-1, -1));
|
|
443
452
|
this._toggleSidenav$ = new Subject();
|
|
444
|
-
this.
|
|
445
|
-
this.
|
|
446
|
-
this.
|
|
447
|
-
this.
|
|
453
|
+
this._displaySearchBar$ = new Subject();
|
|
454
|
+
this._searchTerm$ = new Subject();
|
|
455
|
+
this._dialogSearchTerm$ = new Subject();
|
|
456
|
+
this._replaceTerm$ = new Subject();
|
|
457
|
+
this._searchPrevious$ = new Subject();
|
|
458
|
+
this._searchNext$ = new Subject();
|
|
459
|
+
this._replaceCurrent$ = new Subject();
|
|
460
|
+
this._currentSearchResultIndex$ = new Subject();
|
|
461
|
+
this._searchResultCount$ = new Subject();
|
|
448
462
|
this._setTextStyles$ = new Subject();
|
|
449
463
|
this._setParagraphStyles$ = new Subject();
|
|
450
464
|
this._setNumberingTemplateType$ = new Subject();
|
|
@@ -487,6 +501,13 @@ class EditorService {
|
|
|
487
501
|
this._applyDocumentPageFormat$ = new Subject();
|
|
488
502
|
this._insertPageFormat$ = new Subject();
|
|
489
503
|
this._applyPageFormat$ = new Subject();
|
|
504
|
+
this._pageFormat$ = new BehaviorSubject(new PageFormatModel());
|
|
505
|
+
this._leftMarginPageFormat$ = new Subject();
|
|
506
|
+
this._rightMarginPageFormat$ = new Subject();
|
|
507
|
+
this._firstLinePosition$ = new Subject();
|
|
508
|
+
this._leftIndentParagraph$ = new Subject();
|
|
509
|
+
this._rightIndentParagraph$ = new Subject();
|
|
510
|
+
this._paragraphStyle$ = new BehaviorSubject(new ParagraphStyleModel());
|
|
490
511
|
}
|
|
491
512
|
set styles(value) {
|
|
492
513
|
this._styles$.next({ ...value });
|
|
@@ -521,29 +542,35 @@ class EditorService {
|
|
|
521
542
|
get toggleSidenav$() {
|
|
522
543
|
return this._toggleSidenav$.asObservable();
|
|
523
544
|
}
|
|
524
|
-
|
|
525
|
-
this.
|
|
545
|
+
get displaySearchBar$() {
|
|
546
|
+
return this._displaySearchBar$.asObservable();
|
|
547
|
+
}
|
|
548
|
+
get searchTerm$() {
|
|
549
|
+
return this._searchTerm$.asObservable();
|
|
526
550
|
}
|
|
527
|
-
get
|
|
528
|
-
return this.
|
|
551
|
+
get dialogSearchTerm$() {
|
|
552
|
+
return this._dialogSearchTerm$.asObservable();
|
|
529
553
|
}
|
|
530
|
-
|
|
531
|
-
this.
|
|
554
|
+
get replaceTerm$() {
|
|
555
|
+
return this._replaceTerm$.asObservable();
|
|
532
556
|
}
|
|
533
|
-
get
|
|
534
|
-
return this.
|
|
557
|
+
get searchPrevious$() {
|
|
558
|
+
return this._searchPrevious$.asObservable();
|
|
535
559
|
}
|
|
536
|
-
|
|
537
|
-
this.
|
|
560
|
+
get searchNext$() {
|
|
561
|
+
return this._searchNext$.asObservable();
|
|
538
562
|
}
|
|
539
|
-
get
|
|
540
|
-
return this.
|
|
563
|
+
get replaceCurrent$() {
|
|
564
|
+
return this._replaceCurrent$.asObservable();
|
|
541
565
|
}
|
|
542
|
-
|
|
543
|
-
this.
|
|
566
|
+
get currentSearchResultIndex$() {
|
|
567
|
+
return this._currentSearchResultIndex$.asObservable();
|
|
544
568
|
}
|
|
545
|
-
|
|
546
|
-
|
|
569
|
+
set searchResultCount(value) {
|
|
570
|
+
this._searchResultCount$.next(value);
|
|
571
|
+
}
|
|
572
|
+
get searchResultCount$() {
|
|
573
|
+
return this._searchResultCount$.asObservable();
|
|
547
574
|
}
|
|
548
575
|
get setTextStyles$() {
|
|
549
576
|
return this._setTextStyles$.asObservable();
|
|
@@ -679,22 +706,61 @@ class EditorService {
|
|
|
679
706
|
return this._applyPageFormat$.asObservable();
|
|
680
707
|
}
|
|
681
708
|
get pageFormat() {
|
|
682
|
-
return this._pageFormat;
|
|
709
|
+
return this._pageFormat$.value;
|
|
710
|
+
}
|
|
711
|
+
get pageFormat$() {
|
|
712
|
+
return this._pageFormat$.asObservable();
|
|
713
|
+
}
|
|
714
|
+
get leftMarginPageFormat$() {
|
|
715
|
+
return this._leftMarginPageFormat$.asObservable();
|
|
716
|
+
}
|
|
717
|
+
get rightMarginPageFormat$() {
|
|
718
|
+
return this._rightMarginPageFormat$.asObservable();
|
|
719
|
+
}
|
|
720
|
+
get firstLinePosition$() {
|
|
721
|
+
return this._firstLinePosition$.asObservable();
|
|
722
|
+
}
|
|
723
|
+
get leftIndentParagraph$() {
|
|
724
|
+
return this._leftIndentParagraph$.asObservable();
|
|
725
|
+
}
|
|
726
|
+
get rightIndentParagraph$() {
|
|
727
|
+
return this._rightIndentParagraph$.asObservable();
|
|
728
|
+
}
|
|
729
|
+
get paragraphStyle$() {
|
|
730
|
+
return this._paragraphStyle$.asObservable();
|
|
731
|
+
}
|
|
732
|
+
applyFirstLinePosition(value) {
|
|
733
|
+
this._firstLinePosition$.next(value);
|
|
734
|
+
}
|
|
735
|
+
applyLeftIndentParagraph(value) {
|
|
736
|
+
this._leftIndentParagraph$.next(value);
|
|
737
|
+
}
|
|
738
|
+
applyRightIndentParagraph(value) {
|
|
739
|
+
this._rightIndentParagraph$.next(value);
|
|
740
|
+
}
|
|
741
|
+
paragraphStyle(value) {
|
|
742
|
+
this._paragraphStyle$.next(value);
|
|
743
|
+
}
|
|
744
|
+
applyRightMarginPageFormat(value) {
|
|
745
|
+
this._rightMarginPageFormat$.next(value);
|
|
746
|
+
}
|
|
747
|
+
applyLeftMarginPageFormat(value) {
|
|
748
|
+
this._leftMarginPageFormat$.next(value);
|
|
683
749
|
}
|
|
684
750
|
applyDocumentPageFormat(value) {
|
|
685
|
-
this.
|
|
751
|
+
this.setPageFormat(value);
|
|
686
752
|
this._applyDocumentPageFormat$.next(value);
|
|
687
753
|
}
|
|
688
754
|
applyPageFormat(value) {
|
|
689
|
-
this.
|
|
755
|
+
this.setPageFormat(value);
|
|
690
756
|
this._applyPageFormat$.next(value);
|
|
691
757
|
}
|
|
692
758
|
insertPageFormat(value) {
|
|
693
|
-
this.
|
|
759
|
+
this.setPageFormat(value);
|
|
694
760
|
this._insertPageFormat$.next(value);
|
|
695
761
|
}
|
|
696
762
|
setPageFormat(value) {
|
|
697
|
-
this._pageFormat
|
|
763
|
+
this._pageFormat$.next(value);
|
|
698
764
|
}
|
|
699
765
|
setLastPageNumber(value) {
|
|
700
766
|
if (this.lastPageNumber === value) {
|
|
@@ -844,6 +910,33 @@ class EditorService {
|
|
|
844
910
|
removeCustomElementsData(elements) {
|
|
845
911
|
this._removeCustomElementsData$.next(elements);
|
|
846
912
|
}
|
|
913
|
+
setNewSearchTerm(term) {
|
|
914
|
+
this._searchTerm$.next(term);
|
|
915
|
+
}
|
|
916
|
+
setNewReplaceTerm(term) {
|
|
917
|
+
this._replaceTerm$.next(term);
|
|
918
|
+
}
|
|
919
|
+
setDialogSearchTerm(term) {
|
|
920
|
+
this._dialogSearchTerm$.next(term);
|
|
921
|
+
}
|
|
922
|
+
goNextSearchResult() {
|
|
923
|
+
this._searchNext$.next();
|
|
924
|
+
}
|
|
925
|
+
goPreviousSearchResult() {
|
|
926
|
+
this._searchPrevious$.next();
|
|
927
|
+
}
|
|
928
|
+
replaceCurrentSearchResult() {
|
|
929
|
+
this._replaceCurrent$.next();
|
|
930
|
+
}
|
|
931
|
+
setDisplaySearchBar(show) {
|
|
932
|
+
this._displaySearchBar$.next(show);
|
|
933
|
+
}
|
|
934
|
+
setSearchResultCount(count) {
|
|
935
|
+
this._searchResultCount$.next(count);
|
|
936
|
+
}
|
|
937
|
+
setCurrentSearchResultIndex(index) {
|
|
938
|
+
this._currentSearchResultIndex$.next(index);
|
|
939
|
+
}
|
|
847
940
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
848
941
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorService }); }
|
|
849
942
|
}
|
|
@@ -1008,6 +1101,7 @@ var CommandType;
|
|
|
1008
1101
|
CommandType[CommandType["InsertPageFormat"] = 33] = "InsertPageFormat";
|
|
1009
1102
|
CommandType[CommandType["RemoveInsertedPageFormat"] = 34] = "RemoveInsertedPageFormat";
|
|
1010
1103
|
CommandType[CommandType["RestorePageFormats"] = 35] = "RestorePageFormats";
|
|
1104
|
+
CommandType[CommandType["ApplyParagraphs"] = 36] = "ApplyParagraphs";
|
|
1011
1105
|
})(CommandType || (CommandType = {}));
|
|
1012
1106
|
|
|
1013
1107
|
class PageNumbersModel {
|
|
@@ -1037,14 +1131,6 @@ class AddNumberingModel {
|
|
|
1037
1131
|
}
|
|
1038
1132
|
}
|
|
1039
1133
|
|
|
1040
|
-
class PageFormatModel {
|
|
1041
|
-
constructor(fields) {
|
|
1042
|
-
if (fields) {
|
|
1043
|
-
Object.assign(this, fields);
|
|
1044
|
-
}
|
|
1045
|
-
}
|
|
1046
|
-
}
|
|
1047
|
-
|
|
1048
1134
|
class ApplyDocumentPageFormatModel {
|
|
1049
1135
|
constructor(fields) {
|
|
1050
1136
|
if (fields) {
|
|
@@ -1075,6 +1161,14 @@ class ApplyPageFormatModel {
|
|
|
1075
1161
|
}
|
|
1076
1162
|
}
|
|
1077
1163
|
|
|
1164
|
+
class ApplyParagraphsModel {
|
|
1165
|
+
constructor(fields) {
|
|
1166
|
+
if (fields) {
|
|
1167
|
+
Object.assign(this, fields);
|
|
1168
|
+
}
|
|
1169
|
+
}
|
|
1170
|
+
}
|
|
1171
|
+
|
|
1078
1172
|
class ApplyParagraphStyleModel {
|
|
1079
1173
|
constructor(fields) {
|
|
1080
1174
|
if (fields) {
|
|
@@ -1859,6 +1953,11 @@ class OperationHistory {
|
|
|
1859
1953
|
const undoStep = new RestoreParagraphStylesModel({ paragraphs });
|
|
1860
1954
|
this.addToHistory(undoStep, redoStep);
|
|
1861
1955
|
}
|
|
1956
|
+
pushApplyParagraphs(oldParagraphs, updatedParagraphs) {
|
|
1957
|
+
const redoStep = new ApplyParagraphsModel({ paragraphs: updatedParagraphs });
|
|
1958
|
+
const undoStep = new ApplyParagraphsModel({ paragraphs: oldParagraphs });
|
|
1959
|
+
this.addToHistory(undoStep, redoStep);
|
|
1960
|
+
}
|
|
1862
1961
|
pushInsertTableRows(insertIndex, rowsCount, targetIndex, inheritIndex) {
|
|
1863
1962
|
const redoStep = new InsertTableRowsModel({ insertIndex, count: rowsCount, targetIndex, inheritIndex });
|
|
1864
1963
|
const undoStep = new RemoveTableRowsModel({ insertIndex, startIndex: targetIndex, endIndex: targetIndex + rowsCount - 1 });
|
|
@@ -3857,6 +3956,11 @@ class ParagraphOperationsHelper {
|
|
|
3857
3956
|
this.applyParagraphStyles(paragraphs[index].paragraphStyle, style);
|
|
3858
3957
|
}
|
|
3859
3958
|
}
|
|
3959
|
+
static applyParagraphs(paragraphs, updatedParagraphs) {
|
|
3960
|
+
for (const paragraph of updatedParagraphs) {
|
|
3961
|
+
this.applySingle(paragraphs, paragraph.insertIndex, paragraph.paragraphStyle);
|
|
3962
|
+
}
|
|
3963
|
+
}
|
|
3860
3964
|
static applyParagraphStyles(target, value) {
|
|
3861
3965
|
target.alignment = value.alignment ?? target.alignment;
|
|
3862
3966
|
target.backgroundColor = value.backgroundColor ?? target.backgroundColor;
|
|
@@ -4500,6 +4604,11 @@ class OperationsHelper {
|
|
|
4500
4604
|
this.restore(document, model.restore);
|
|
4501
4605
|
break;
|
|
4502
4606
|
}
|
|
4607
|
+
case CommandType.ApplyParagraphs: {
|
|
4608
|
+
const model = command.applyParagraphs;
|
|
4609
|
+
this.applyParagraphs(contents, model.paragraphs);
|
|
4610
|
+
break;
|
|
4611
|
+
}
|
|
4503
4612
|
}
|
|
4504
4613
|
});
|
|
4505
4614
|
}
|
|
@@ -4777,6 +4886,9 @@ class OperationsHelper {
|
|
|
4777
4886
|
static applyParagraphStyle(document, startIndex, endIndex, style) {
|
|
4778
4887
|
ParagraphOperationsHelper.apply(document.paragraphs, startIndex, endIndex, style);
|
|
4779
4888
|
}
|
|
4889
|
+
static applyParagraphs(document, paragraphs) {
|
|
4890
|
+
ParagraphOperationsHelper.applyParagraphs(document.paragraphs, paragraphs);
|
|
4891
|
+
}
|
|
4780
4892
|
static applyImageStyle(document, image) {
|
|
4781
4893
|
ImageOperationsHelper.apply(document.images, image);
|
|
4782
4894
|
}
|
|
@@ -6183,6 +6295,9 @@ class Range {
|
|
|
6183
6295
|
this.end = end;
|
|
6184
6296
|
}
|
|
6185
6297
|
isEqual(range) {
|
|
6298
|
+
if (this == null || range == null) {
|
|
6299
|
+
return this == null && range == null;
|
|
6300
|
+
}
|
|
6186
6301
|
return (this.start.row === range.start.row &&
|
|
6187
6302
|
this.end.row === range.end.row &&
|
|
6188
6303
|
this.start.column === range.start.column &&
|
|
@@ -6359,6 +6474,9 @@ class CommandModel {
|
|
|
6359
6474
|
if (fields.applyPageFormat) {
|
|
6360
6475
|
fields.applyPageFormat = new ApplyPageFormatModel(fields.applyPageFormat);
|
|
6361
6476
|
}
|
|
6477
|
+
if (fields.applyParagraphs) {
|
|
6478
|
+
fields.applyParagraphs = new ApplyParagraphsModel(fields.applyParagraphs);
|
|
6479
|
+
}
|
|
6362
6480
|
if (fields.applyParagraphStyle) {
|
|
6363
6481
|
fields.applyParagraphStyle = new ApplyParagraphStyleModel(fields.applyParagraphStyle);
|
|
6364
6482
|
}
|
|
@@ -6538,6 +6656,10 @@ class SaveCommandsHelper {
|
|
|
6538
6656
|
const restoreParagraphStyles = new RestoreParagraphStylesModel({ paragraphs });
|
|
6539
6657
|
return new CommandModel({ commandType: CommandType.RestoreParagraphStyles, restoreParagraphStyles, targets });
|
|
6540
6658
|
}
|
|
6659
|
+
static getApplyParagraphsCommand(paragraphs, targets) {
|
|
6660
|
+
const applyParagraphs = new ApplyParagraphsModel({ paragraphs });
|
|
6661
|
+
return new CommandModel({ commandType: CommandType.ApplyParagraphs, applyParagraphs, targets });
|
|
6662
|
+
}
|
|
6541
6663
|
static getRestoreCommand(restore, targets) {
|
|
6542
6664
|
return new CommandModel({ commandType: CommandType.Restore, restore, targets });
|
|
6543
6665
|
}
|
|
@@ -6586,233 +6708,85 @@ class SaveCommandsHelper {
|
|
|
6586
6708
|
}
|
|
6587
6709
|
}
|
|
6588
6710
|
|
|
6589
|
-
class SearchOptions {
|
|
6590
|
-
}
|
|
6591
6711
|
class Search {
|
|
6592
6712
|
constructor() {
|
|
6593
|
-
this.
|
|
6713
|
+
this.term = '';
|
|
6594
6714
|
}
|
|
6595
|
-
|
|
6596
|
-
this.
|
|
6715
|
+
get currentMatchIndex() {
|
|
6716
|
+
return this.currentIndex + 1;
|
|
6597
6717
|
}
|
|
6598
|
-
|
|
6599
|
-
|
|
6600
|
-
this.setMatchIterator(session, options);
|
|
6601
|
-
const iterator = this.forEach;
|
|
6602
|
-
if (!iterator) {
|
|
6603
|
-
return null;
|
|
6604
|
-
}
|
|
6605
|
-
let firstRange = null;
|
|
6606
|
-
iterator((startRow, startColumn, endRow, endColumn) => {
|
|
6607
|
-
firstRange = new Range(new CursorParagraph(startRow, startColumn), new CursorParagraph(endRow, endColumn));
|
|
6608
|
-
if (startColumn === endColumn &&
|
|
6609
|
-
options.start instanceof Range &&
|
|
6610
|
-
options.start.start &&
|
|
6611
|
-
options.skipCurrent !== false &&
|
|
6612
|
-
firstRange.isEqual(options.start)) {
|
|
6613
|
-
firstRange = null;
|
|
6614
|
-
return false;
|
|
6615
|
-
}
|
|
6616
|
-
return true;
|
|
6617
|
-
});
|
|
6618
|
-
return firstRange;
|
|
6718
|
+
get currentMatch() {
|
|
6719
|
+
return this.currentIndex < 0 ? null : this.allMatches[this.currentIndex];
|
|
6619
6720
|
}
|
|
6620
|
-
|
|
6621
|
-
|
|
6622
|
-
|
|
6623
|
-
|
|
6624
|
-
|
|
6625
|
-
|
|
6626
|
-
|
|
6627
|
-
|
|
6628
|
-
if (options.isMultiLine) {
|
|
6629
|
-
options.regex = this.assembleMultilineRegExp(needle, modifier);
|
|
6630
|
-
return options.regex;
|
|
6721
|
+
setSearchTerm(term) {
|
|
6722
|
+
this.term = term;
|
|
6723
|
+
}
|
|
6724
|
+
findAll(sessions) {
|
|
6725
|
+
this.allMatches = [];
|
|
6726
|
+
this.assembleRegExp(this.term);
|
|
6727
|
+
if (!this.regex) {
|
|
6728
|
+
return;
|
|
6631
6729
|
}
|
|
6632
|
-
|
|
6633
|
-
|
|
6634
|
-
|
|
6730
|
+
for (const { session, sessionId, renderer } of sessions) {
|
|
6731
|
+
const sessionHighlights = [];
|
|
6732
|
+
for (let i = 0; i < session.displayData.paragraphs.length; i++) {
|
|
6733
|
+
const paragraph = session.displayData.paragraphs[i];
|
|
6734
|
+
const matches = paragraph.content.matchAll(this.regex);
|
|
6735
|
+
for (const match of matches) {
|
|
6736
|
+
const range = new Range(new CursorParagraph(i, match.index), new CursorParagraph(i, match.index + match[0].length));
|
|
6737
|
+
this.allMatches.push({ sessionId, range });
|
|
6738
|
+
sessionHighlights.push(range);
|
|
6739
|
+
}
|
|
6740
|
+
}
|
|
6741
|
+
renderer.updateSearchHighlights(sessionHighlights);
|
|
6635
6742
|
}
|
|
6636
|
-
|
|
6637
|
-
|
|
6743
|
+
if (!this.allMatches.length) {
|
|
6744
|
+
this.currentIndex = -1;
|
|
6745
|
+
return;
|
|
6638
6746
|
}
|
|
6639
|
-
|
|
6640
|
-
return options.regex;
|
|
6747
|
+
this.currentIndex = this.currentIndex > this.allMatches.length - 1 ? this.allMatches.length - 1 : this.currentIndex;
|
|
6641
6748
|
}
|
|
6642
|
-
|
|
6643
|
-
|
|
6644
|
-
|
|
6645
|
-
for (const element of parts) {
|
|
6646
|
-
try {
|
|
6647
|
-
regex.push(new RegExp(element, modifier));
|
|
6648
|
-
}
|
|
6649
|
-
catch {
|
|
6650
|
-
return [];
|
|
6651
|
-
}
|
|
6749
|
+
goNext(selection, currentSessionId) {
|
|
6750
|
+
if (!this.allMatches?.length) {
|
|
6751
|
+
return;
|
|
6652
6752
|
}
|
|
6653
|
-
|
|
6753
|
+
let newIndex = this.allMatches.findIndex(x => (x.sessionId === currentSessionId &&
|
|
6754
|
+
x.range.start.row === selection.cursor.row &&
|
|
6755
|
+
x.range.start.column > selection.cursor.column) ||
|
|
6756
|
+
(x.sessionId === currentSessionId && x.range.start.row > selection.cursor.row) ||
|
|
6757
|
+
x.sessionId > currentSessionId);
|
|
6758
|
+
this.currentIndex = newIndex < 0 ? 0 : newIndex;
|
|
6654
6759
|
}
|
|
6655
|
-
|
|
6656
|
-
|
|
6657
|
-
if (!regex) {
|
|
6658
|
-
return null;
|
|
6659
|
-
}
|
|
6660
|
-
const backwards = options.backwards ?? false;
|
|
6661
|
-
const skipCurrent = options.skipCurrent ?? false;
|
|
6662
|
-
let start = options.start;
|
|
6663
|
-
if (!start) {
|
|
6664
|
-
start = session.selection.range;
|
|
6665
|
-
}
|
|
6666
|
-
let startParagraphPosition;
|
|
6667
|
-
if (start instanceof Range && start.start) {
|
|
6668
|
-
startParagraphPosition = start[skipCurrent !== backwards ? 'end' : 'start'];
|
|
6669
|
-
}
|
|
6670
|
-
let firstRow = 0;
|
|
6671
|
-
let lastRow = session.displayData.paragraphs.length - 2;
|
|
6672
|
-
this.setForEach(backwards, startParagraphPosition, options, firstRow, lastRow);
|
|
6673
|
-
const singleRe = regex;
|
|
6674
|
-
this.setForEachInLine(regex, options, backwards, session, singleRe);
|
|
6675
|
-
}
|
|
6676
|
-
setForEach(backwards, startParagraphPosition, options, firstRow, lastRow) {
|
|
6677
|
-
if (backwards) {
|
|
6678
|
-
this.setForEachForBackwards(startParagraphPosition, options, firstRow, lastRow);
|
|
6760
|
+
goPrevious(selection, currentSessionId) {
|
|
6761
|
+
if (!this.allMatches?.length) {
|
|
6679
6762
|
return;
|
|
6680
6763
|
}
|
|
6681
|
-
|
|
6682
|
-
|
|
6683
|
-
|
|
6684
|
-
|
|
6685
|
-
|
|
6686
|
-
|
|
6687
|
-
|
|
6688
|
-
|
|
6689
|
-
|
|
6690
|
-
|
|
6691
|
-
return;
|
|
6692
|
-
}
|
|
6693
|
-
}
|
|
6694
|
-
if (options.wrap === false) {
|
|
6695
|
-
return;
|
|
6696
|
-
}
|
|
6697
|
-
for (row = firstRow, lastRow = startParagraphPosition.row; row <= lastRow; row++) {
|
|
6698
|
-
if (this.forEachInLine(row, 0, callback)) {
|
|
6699
|
-
return;
|
|
6700
|
-
}
|
|
6701
|
-
}
|
|
6702
|
-
};
|
|
6703
|
-
}
|
|
6704
|
-
setForEachForBackwards(startParagraphPosition, options, firstRow, lastRow) {
|
|
6705
|
-
this.forEach = callback => {
|
|
6706
|
-
let row = startParagraphPosition.row;
|
|
6707
|
-
if (this.forEachInLine(row, startParagraphPosition.column, callback)) {
|
|
6708
|
-
return;
|
|
6709
|
-
}
|
|
6710
|
-
for (row--; row >= firstRow; row--) {
|
|
6711
|
-
if (this.forEachInLine(row, Number.MAX_VALUE, callback)) {
|
|
6712
|
-
return;
|
|
6713
|
-
}
|
|
6714
|
-
}
|
|
6715
|
-
if (options.wrap === false) {
|
|
6716
|
-
return;
|
|
6717
|
-
}
|
|
6718
|
-
for (row = lastRow, firstRow = startParagraphPosition.row; row >= firstRow; row--) {
|
|
6719
|
-
if (this.forEachInLine(row, Number.MAX_VALUE, callback)) {
|
|
6720
|
-
return;
|
|
6721
|
-
}
|
|
6764
|
+
let prevIndex = -1;
|
|
6765
|
+
for (let i = this.allMatches.length - 1; i >= 0; i--) {
|
|
6766
|
+
const match = this.allMatches[i];
|
|
6767
|
+
if ((match.sessionId === currentSessionId &&
|
|
6768
|
+
match.range.start.row === selection.cursor.row &&
|
|
6769
|
+
match.range.start.column < selection.cursor.column) ||
|
|
6770
|
+
(match.sessionId === currentSessionId && match.range.start.row < selection.cursor.row) ||
|
|
6771
|
+
match.sessionId < currentSessionId) {
|
|
6772
|
+
prevIndex = i;
|
|
6773
|
+
break;
|
|
6722
6774
|
}
|
|
6723
|
-
}
|
|
6775
|
+
}
|
|
6776
|
+
this.currentIndex = prevIndex >= 0 ? prevIndex : this.allMatches.length - 1;
|
|
6724
6777
|
}
|
|
6725
|
-
|
|
6726
|
-
if (
|
|
6727
|
-
this.
|
|
6778
|
+
assembleRegExp(term) {
|
|
6779
|
+
if (!term) {
|
|
6780
|
+
this.regex = null;
|
|
6781
|
+
return;
|
|
6728
6782
|
}
|
|
6729
|
-
|
|
6730
|
-
this.
|
|
6783
|
+
try {
|
|
6784
|
+
this.regex = new RegExp(term, 'gmi');
|
|
6731
6785
|
}
|
|
6732
|
-
|
|
6733
|
-
this.
|
|
6786
|
+
catch {
|
|
6787
|
+
this.regex = null;
|
|
6734
6788
|
}
|
|
6735
6789
|
}
|
|
6736
|
-
setForEachInLineForRegArray(regex, backwards, session) {
|
|
6737
|
-
let regularLength = regex.length;
|
|
6738
|
-
this.forEachInLine = (row, offset, callback) => {
|
|
6739
|
-
let startRow = backwards ? row - regularLength + 1 : row;
|
|
6740
|
-
if (startRow < 0) {
|
|
6741
|
-
return false;
|
|
6742
|
-
}
|
|
6743
|
-
let line = session.displayData.getParagraphContent(startRow);
|
|
6744
|
-
let startIndex = line.search(regex[0]);
|
|
6745
|
-
if ((!backwards && startIndex < offset) || startIndex === -1) {
|
|
6746
|
-
return false;
|
|
6747
|
-
}
|
|
6748
|
-
for (let i = 1; i < regularLength; i++) {
|
|
6749
|
-
line = session.displayData.getParagraphContent(startRow + i);
|
|
6750
|
-
if (line.search(regex[i]) === -1) {
|
|
6751
|
-
return false;
|
|
6752
|
-
}
|
|
6753
|
-
}
|
|
6754
|
-
let endIndex = line.match(regex[regularLength - 1])[0].length;
|
|
6755
|
-
if (backwards && endIndex > offset) {
|
|
6756
|
-
return false;
|
|
6757
|
-
}
|
|
6758
|
-
if (callback(startRow, startIndex, startRow + regularLength - 1, endIndex)) {
|
|
6759
|
-
return true;
|
|
6760
|
-
}
|
|
6761
|
-
return false;
|
|
6762
|
-
};
|
|
6763
|
-
}
|
|
6764
|
-
setForEachInLineForBackwards(session, singleRe) {
|
|
6765
|
-
this.forEachInLine = (row, endIndex, callback) => {
|
|
6766
|
-
let line = session.displayData.getParagraphContent(row);
|
|
6767
|
-
let matches = [];
|
|
6768
|
-
let regexResult, last = 0;
|
|
6769
|
-
singleRe.lastIndex = 0;
|
|
6770
|
-
while ((regexResult = singleRe.exec(line))) {
|
|
6771
|
-
let length = regexResult[0].length;
|
|
6772
|
-
last = regexResult.index;
|
|
6773
|
-
if (!length) {
|
|
6774
|
-
if (last >= line.length) {
|
|
6775
|
-
break;
|
|
6776
|
-
}
|
|
6777
|
-
singleRe.lastIndex = last + 1;
|
|
6778
|
-
}
|
|
6779
|
-
if (regexResult.index + length > endIndex) {
|
|
6780
|
-
break;
|
|
6781
|
-
}
|
|
6782
|
-
matches.push(regexResult.index, length);
|
|
6783
|
-
}
|
|
6784
|
-
for (let i = matches.length - 1; i >= 0; i -= 2) {
|
|
6785
|
-
let column = matches[i - 1];
|
|
6786
|
-
let length = matches[i];
|
|
6787
|
-
if (callback(row, column, row, column + length)) {
|
|
6788
|
-
return true;
|
|
6789
|
-
}
|
|
6790
|
-
}
|
|
6791
|
-
return false;
|
|
6792
|
-
};
|
|
6793
|
-
}
|
|
6794
|
-
setDefaultForEachInLine(session, singleRe) {
|
|
6795
|
-
this.forEachInLine = (row, startIndex, callback) => {
|
|
6796
|
-
let line = session.displayData.getParagraphContent(row);
|
|
6797
|
-
let last;
|
|
6798
|
-
let regexResult;
|
|
6799
|
-
singleRe.lastIndex = startIndex;
|
|
6800
|
-
while ((regexResult = singleRe.exec(line))) {
|
|
6801
|
-
let length = regexResult[0].length;
|
|
6802
|
-
last = regexResult.index;
|
|
6803
|
-
if (callback(row, last, row, last + length)) {
|
|
6804
|
-
return true;
|
|
6805
|
-
}
|
|
6806
|
-
if (!length) {
|
|
6807
|
-
singleRe.lastIndex = last += 1;
|
|
6808
|
-
if (last >= line.length) {
|
|
6809
|
-
return false;
|
|
6810
|
-
}
|
|
6811
|
-
}
|
|
6812
|
-
}
|
|
6813
|
-
return false;
|
|
6814
|
-
};
|
|
6815
|
-
}
|
|
6816
6790
|
}
|
|
6817
6791
|
|
|
6818
6792
|
class Selection {
|
|
@@ -7306,8 +7280,7 @@ class Editor {
|
|
|
7306
7280
|
this.focus();
|
|
7307
7281
|
this.session.applyToolbarStyles();
|
|
7308
7282
|
this.search = new Search();
|
|
7309
|
-
this.
|
|
7310
|
-
this.subscriptions.push(this.changedEdgeSizeSubscription(), this.changedEdgeSubscription(), this.changedTableSizeSubscription(), this.clipboardDataSubscription(), this.copySelectedSubscription(), this.createCustomComponentSubscription(), this.cutSelectedSubscription(), this.disableSelectionSubscription(), this.endMousePressSubscription(), this.imageLoadedSubscription(), this.insertBreakSubscription(), this.insertImageSubscription(), this.insertLinkSubscription(), this.insertTableColumnsSubscription(), this.insertTableRowsSubscription(), this.insertTableSubscription(), this.insertTextSubscription(), this.pasteFromClipboardSubscription(), this.printSubscription(), this.redoSubscription(), this.removeLeftSubscription(), this.removeNumberingsSubscription(), this.removeRightSubscription(), this.removeSelectedSubscription(), this.removeTableColumnsSubscription(), this.removeTableRowsSubscription(), this.removeTableSubscription(), this.replaceSubscription(), this.rerenderSubscription(), this.resizeTableColumnsSubscription(), this.searchOptionSubscription(), this.selectAllSubscription(), this.setImageStyleSubscription(), this.setNumberingTemplateTypeSubscription(), this.setParagraphStylesSubscription(), this.setTextStylesSubscription(), this.undoSubscription(), this.updateEdgeSubscription(), this.viewOnlyModeSubscription(), this.applyPageFormatSubscription(), this.insertPageFormatSubscription(), this.applyDocumentPageFormatSubscription(), this.dragMoveSubscription(), this.dragDropSubscription());
|
|
7283
|
+
this.subscriptions.push(this.changedEdgeSizeSubscription(), this.changedEdgeSubscription(), this.changedTableSizeSubscription(), this.clipboardDataSubscription(), this.copySelectedSubscription(), this.createCustomComponentSubscription(), this.cutSelectedSubscription(), this.disableSelectionSubscription(), this.endMousePressSubscription(), this.imageLoadedSubscription(), this.insertBreakSubscription(), this.insertImageSubscription(), this.insertLinkSubscription(), this.insertTableColumnsSubscription(), this.insertTableRowsSubscription(), this.insertTableSubscription(), 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.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());
|
|
7311
7284
|
}
|
|
7312
7285
|
destroy() {
|
|
7313
7286
|
this.subscriptions.forEach(s => s?.unsubscribe());
|
|
@@ -7379,6 +7352,7 @@ class Editor {
|
|
|
7379
7352
|
}
|
|
7380
7353
|
this.session.insertText(position, text, textStyle);
|
|
7381
7354
|
this.onSelectionChange();
|
|
7355
|
+
this.onContentChange();
|
|
7382
7356
|
}
|
|
7383
7357
|
removeLeft() {
|
|
7384
7358
|
if (this.selection.isEmpty) {
|
|
@@ -7433,6 +7407,7 @@ class Editor {
|
|
|
7433
7407
|
const endPoint = this.session.insertTab(this.selection.cursor);
|
|
7434
7408
|
this.onDocumentChange(new Range(this.selection.cursor, endPoint));
|
|
7435
7409
|
this.onSelectionChange();
|
|
7410
|
+
this.onContentChange();
|
|
7436
7411
|
}
|
|
7437
7412
|
insertImage(imageData) {
|
|
7438
7413
|
const insertIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.start);
|
|
@@ -7496,6 +7471,7 @@ class Editor {
|
|
|
7496
7471
|
const endPosition = this.session.replace(model);
|
|
7497
7472
|
this.onDocumentChange(new Range(this.selection.cursor, endPosition));
|
|
7498
7473
|
this.onSelectionChange();
|
|
7474
|
+
this.onContentChange();
|
|
7499
7475
|
}
|
|
7500
7476
|
removeToLineStart() {
|
|
7501
7477
|
if (this.selection.isEmpty) {
|
|
@@ -7560,6 +7536,20 @@ class Editor {
|
|
|
7560
7536
|
this.session.applyParagraphStyle(startIndex, endIndex, paragraphStyle);
|
|
7561
7537
|
this.renderer.updateCursor();
|
|
7562
7538
|
}
|
|
7539
|
+
applyParagraphsMargin(value) {
|
|
7540
|
+
const range = this.selection.range;
|
|
7541
|
+
const startIndex = this.session.model.paragraphs[range.start.row].insertIndex;
|
|
7542
|
+
const endIndex = this.session.model.paragraphs[range.end.row].insertIndex;
|
|
7543
|
+
const paragraphs = IndexedElementHelper.sliceSection(this.session.model.paragraphs, startIndex, endIndex);
|
|
7544
|
+
const paragraphsDeepCopy = paragraphs.map(x => new ParagraphModel({ insertIndex: x.insertIndex, paragraphStyle: new ParagraphStyleModel({ ...x.paragraphStyle }) }));
|
|
7545
|
+
const updatedParagraphs = paragraphs.map(x => new ParagraphModel({
|
|
7546
|
+
insertIndex: x.insertIndex,
|
|
7547
|
+
paragraphStyle: new ParagraphStyleModel({ ...x.paragraphStyle, ...value })
|
|
7548
|
+
}));
|
|
7549
|
+
this.saveApplyParagraphsToHistory(paragraphsDeepCopy, updatedParagraphs);
|
|
7550
|
+
this.session.applyParagraphs(updatedParagraphs);
|
|
7551
|
+
this.renderer.updateCursor();
|
|
7552
|
+
}
|
|
7563
7553
|
setNumberingTemplate(templateLevels) {
|
|
7564
7554
|
const range = this.selection.range;
|
|
7565
7555
|
const startIndex = this.session.model.paragraphs[range.start.row].insertIndex;
|
|
@@ -7588,74 +7578,74 @@ class Editor {
|
|
|
7588
7578
|
}
|
|
7589
7579
|
}
|
|
7590
7580
|
openSearch() {
|
|
7591
|
-
this.editorService.
|
|
7581
|
+
this.editorService.setDisplaySearchBar(true);
|
|
7582
|
+
const selectedText = this.getSelectedText();
|
|
7583
|
+
if (selectedText) {
|
|
7584
|
+
setTimeout(() => {
|
|
7585
|
+
this.editorService.setDialogSearchTerm(selectedText);
|
|
7586
|
+
});
|
|
7587
|
+
}
|
|
7592
7588
|
}
|
|
7593
|
-
find(
|
|
7594
|
-
|
|
7595
|
-
|
|
7596
|
-
|
|
7597
|
-
|
|
7598
|
-
range = this.session.getWordRange(range.start.row, range.start.column);
|
|
7599
|
-
term = this.session.displayData.getTextRange(range);
|
|
7589
|
+
find(term, focusNext = false) {
|
|
7590
|
+
if (!term?.length) {
|
|
7591
|
+
for (const session of this.regulatorService.sessions) {
|
|
7592
|
+
session.renderer.updateSearchHighlights([]);
|
|
7593
|
+
session.renderer.updateActiveSearchHighlight(null);
|
|
7600
7594
|
}
|
|
7601
|
-
|
|
7595
|
+
this.editorService.setSearchResultCount(0);
|
|
7596
|
+
return;
|
|
7602
7597
|
}
|
|
7603
|
-
|
|
7604
|
-
|
|
7598
|
+
this.search.setSearchTerm(term);
|
|
7599
|
+
this.search.findAll(this.regulatorService.sessions);
|
|
7600
|
+
this.editorService.setSearchResultCount(this.search.allMatches.length);
|
|
7601
|
+
if (focusNext && this.search.allMatches?.length) {
|
|
7602
|
+
this.search.goNext(this.selection, this.regulatorService.currentSession.sessionId);
|
|
7603
|
+
this.updateActiveSearchHighlight();
|
|
7604
|
+
this.mainRenderer.scrollCursorIntoView(new CursorParagraph(this.search.currentMatch.range.start.row, this.search.currentMatch.range.start.column));
|
|
7605
7605
|
}
|
|
7606
|
-
|
|
7607
|
-
|
|
7608
|
-
if (newRange) {
|
|
7609
|
-
this.selection.placeSelection(range.start, range.end);
|
|
7610
|
-
this.onSelectionChange();
|
|
7611
|
-
if (this.session === this.mainSession) {
|
|
7612
|
-
this.mainRenderer.scrollSelectionIntoView(range.start, range.end, 0.5);
|
|
7613
|
-
}
|
|
7614
|
-
return newRange;
|
|
7606
|
+
else {
|
|
7607
|
+
this.updateActiveSearchHighlight();
|
|
7615
7608
|
}
|
|
7616
|
-
range.end = range.start;
|
|
7617
|
-
this.selection.placeCursor(range.start);
|
|
7618
|
-
this.onSelectionChange();
|
|
7619
|
-
return null;
|
|
7620
7609
|
}
|
|
7621
|
-
|
|
7622
|
-
|
|
7623
|
-
|
|
7624
|
-
let current = 0;
|
|
7625
|
-
if (!regex) {
|
|
7626
|
-
return { current: 0, total: 0 };
|
|
7627
|
-
}
|
|
7628
|
-
const value = this.session.displayData.getAllParagraphsContent().join('\n');
|
|
7629
|
-
let offset = this.session.displayData.positionToIndex(this.selection.range.start);
|
|
7630
|
-
regex.lastIndex = 0;
|
|
7631
|
-
let regexResult;
|
|
7632
|
-
while ((regexResult = regex.exec(value))) {
|
|
7633
|
-
all++;
|
|
7634
|
-
let last = regexResult.index;
|
|
7635
|
-
if (last <= offset) {
|
|
7636
|
-
current++;
|
|
7637
|
-
}
|
|
7638
|
-
if (all > this.MAX_COUNT) {
|
|
7639
|
-
break;
|
|
7640
|
-
}
|
|
7610
|
+
findNext() {
|
|
7611
|
+
if (!this.search.allMatches?.length) {
|
|
7612
|
+
return;
|
|
7641
7613
|
}
|
|
7642
|
-
|
|
7614
|
+
this.search.goNext(this.selection, this.regulatorService.currentSession.sessionId);
|
|
7615
|
+
this.setCursorAtSearchResult();
|
|
7616
|
+
this.updateActiveSearchHighlight();
|
|
7643
7617
|
}
|
|
7644
|
-
|
|
7645
|
-
if (this.
|
|
7618
|
+
findPrevious() {
|
|
7619
|
+
if (!this.search.allMatches?.length) {
|
|
7646
7620
|
return;
|
|
7647
7621
|
}
|
|
7648
|
-
|
|
7649
|
-
|
|
7650
|
-
|
|
7651
|
-
|
|
7652
|
-
|
|
7653
|
-
|
|
7654
|
-
|
|
7655
|
-
this.removeSelected();
|
|
7656
|
-
}
|
|
7622
|
+
this.search.goPrevious(this.selection, this.regulatorService.currentSession.sessionId);
|
|
7623
|
+
this.updateActiveSearchHighlight();
|
|
7624
|
+
this.setCursorAtSearchResult();
|
|
7625
|
+
}
|
|
7626
|
+
replace() {
|
|
7627
|
+
if (!this.search.allMatches?.length || this.search.term === this.replaceTerm) {
|
|
7628
|
+
return;
|
|
7657
7629
|
}
|
|
7658
|
-
this.
|
|
7630
|
+
if (this.replaceTerm) {
|
|
7631
|
+
const insertIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.search.currentMatch.range.start);
|
|
7632
|
+
const insertText = new InsertTextModel({ insertIndex, text: this.replaceTerm });
|
|
7633
|
+
const partIndexes = ContentHelper.getSelectedPartDocumentIndexes(this.session.displayData.paragraphs, this.search.currentMatch.range);
|
|
7634
|
+
const deleteModel = new DeleteModel({
|
|
7635
|
+
startIndex: partIndexes.startIndex,
|
|
7636
|
+
count: partIndexes.endIndex - partIndexes.startIndex + 1
|
|
7637
|
+
});
|
|
7638
|
+
const replaceModel = new ReplaceModel({ insertText, delete: deleteModel });
|
|
7639
|
+
this.saveReplaceToHistory(this.search.currentMatch.range, replaceModel);
|
|
7640
|
+
const endPosition = this.session.replace(replaceModel);
|
|
7641
|
+
this.onDocumentChange(new Range(this.search.currentMatch.range.start, endPosition));
|
|
7642
|
+
}
|
|
7643
|
+
else {
|
|
7644
|
+
const range = this.search.currentMatch.range;
|
|
7645
|
+
this.saveRemoveToHistory(range);
|
|
7646
|
+
this.session.remove(range);
|
|
7647
|
+
}
|
|
7648
|
+
this.find(this.search.term);
|
|
7659
7649
|
}
|
|
7660
7650
|
undo() {
|
|
7661
7651
|
const undo = this.history.popUndoOperation();
|
|
@@ -7666,6 +7656,7 @@ class Editor {
|
|
|
7666
7656
|
this.applyOperation(undo.operation);
|
|
7667
7657
|
this.selection.placeSelection(undo.cursor, undo.anchor);
|
|
7668
7658
|
this.onSelectionChange();
|
|
7659
|
+
this.onContentChange();
|
|
7669
7660
|
}
|
|
7670
7661
|
redo() {
|
|
7671
7662
|
const redo = this.history.popRedoOperation();
|
|
@@ -7676,6 +7667,7 @@ class Editor {
|
|
|
7676
7667
|
this.selection.placeSelection(redo.cursor, redo.anchor);
|
|
7677
7668
|
this.applyOperation(redo.operation);
|
|
7678
7669
|
this.onSelectionChange();
|
|
7670
|
+
this.onContentChange();
|
|
7679
7671
|
}
|
|
7680
7672
|
applyOperation(operation) {
|
|
7681
7673
|
let command = null;
|
|
@@ -7843,6 +7835,11 @@ class Editor {
|
|
|
7843
7835
|
this.session.replaceByRestore(structuredClone(operation));
|
|
7844
7836
|
command = SaveCommandsHelper.getReplaceByRestoreCommand(structuredClone(operation), this.targets);
|
|
7845
7837
|
}
|
|
7838
|
+
else if (operation instanceof ApplyParagraphsModel) {
|
|
7839
|
+
const deepCopy = structuredClone(operation);
|
|
7840
|
+
this.session.applyParagraphs(deepCopy.paragraphs);
|
|
7841
|
+
command = SaveCommandsHelper.getApplyParagraphsCommand(deepCopy.paragraphs, this.targets);
|
|
7842
|
+
}
|
|
7846
7843
|
else {
|
|
7847
7844
|
throw new Error('Undo/redo is not implemented for the Operation');
|
|
7848
7845
|
}
|
|
@@ -7906,6 +7903,10 @@ class Editor {
|
|
|
7906
7903
|
this.history.pushApplyTextStyle(startIndex, endIndex, textStyle, formats, linkFormats);
|
|
7907
7904
|
this.commandsService.createCommand(SaveCommandsHelper.getApplyTextStyleCommand(startIndex, endIndex, textStyle, this.targets));
|
|
7908
7905
|
}
|
|
7906
|
+
saveApplyParagraphsToHistory(oldParagraphs, updatedParagraphs) {
|
|
7907
|
+
this.history.pushApplyParagraphs(oldParagraphs, updatedParagraphs);
|
|
7908
|
+
this.commandsService.createCommand(SaveCommandsHelper.getApplyParagraphsCommand(updatedParagraphs, this.targets));
|
|
7909
|
+
}
|
|
7909
7910
|
saveApplyParagraphStyleToHistory(startIndex, endIndex, paragraphStyle) {
|
|
7910
7911
|
const paragraphs = IndexedElementHelper.sliceSection(this.session.model.paragraphs, startIndex, endIndex);
|
|
7911
7912
|
const paragraphsDeepCopy = paragraphs.map(x => new ParagraphModel({ insertIndex: x.insertIndex, paragraphStyle: new ParagraphStyleModel({ ...x.paragraphStyle }) }));
|
|
@@ -7985,6 +7986,7 @@ class Editor {
|
|
|
7985
7986
|
const endPoint = this.session.insertElement(this.selection.cursor, data);
|
|
7986
7987
|
this.onDocumentChange(new Range(this.selection.cursor, endPoint));
|
|
7987
7988
|
this.onSelectionChange();
|
|
7989
|
+
this.onContentChange();
|
|
7988
7990
|
}
|
|
7989
7991
|
removeSelected() {
|
|
7990
7992
|
const range = this.selection.range;
|
|
@@ -7997,6 +7999,7 @@ class Editor {
|
|
|
7997
7999
|
this.selection.placeCursor(range.end);
|
|
7998
8000
|
this.removeNumberingsFromParagraphs();
|
|
7999
8001
|
this.onSelectionChange();
|
|
8002
|
+
this.onContentChange();
|
|
8000
8003
|
this.focus();
|
|
8001
8004
|
return;
|
|
8002
8005
|
}
|
|
@@ -8008,6 +8011,7 @@ class Editor {
|
|
|
8008
8011
|
this.removeCustomElementsData();
|
|
8009
8012
|
this.session.remove(range);
|
|
8010
8013
|
this.onSelectionChange();
|
|
8014
|
+
this.onContentChange();
|
|
8011
8015
|
}
|
|
8012
8016
|
this.focus();
|
|
8013
8017
|
}
|
|
@@ -8028,6 +8032,7 @@ class Editor {
|
|
|
8028
8032
|
this.removeCustomElementsData();
|
|
8029
8033
|
this.session.removeWithParagraph(operation);
|
|
8030
8034
|
this.onSelectionChange();
|
|
8035
|
+
this.onContentChange();
|
|
8031
8036
|
}
|
|
8032
8037
|
removeCustomElementsData() {
|
|
8033
8038
|
const startIndex = ContentHelper.paragraphPositionToDocumentIndex(this.session.displayData.paragraphs, this.selection.range.start);
|
|
@@ -8252,6 +8257,7 @@ class Editor {
|
|
|
8252
8257
|
if (sourceSession.sessionId === this.session.sessionId && sourceStartIndex <= targetIndex && sourceEndIndex >= targetIndex) {
|
|
8253
8258
|
this.selection.placeSelection(sourceRange.start, sourceRange.end);
|
|
8254
8259
|
this.onSelectionChange();
|
|
8260
|
+
this.onContentChange();
|
|
8255
8261
|
return;
|
|
8256
8262
|
}
|
|
8257
8263
|
const model = new MoveRangeModel({
|
|
@@ -8264,6 +8270,7 @@ class Editor {
|
|
|
8264
8270
|
this.moveRange(model);
|
|
8265
8271
|
this.saveMoveRangeToHistory(model, sourceSession, sourceRange);
|
|
8266
8272
|
this.onSelectionChange();
|
|
8273
|
+
this.onContentChange();
|
|
8267
8274
|
}
|
|
8268
8275
|
moveRange(model) {
|
|
8269
8276
|
this.regulatorService.setTargetedSessionAsCurrent(model.targetTargets);
|
|
@@ -8353,6 +8360,7 @@ class Editor {
|
|
|
8353
8360
|
this.container.nativeElement.style.maxWidth = `${pageWidth}px`;
|
|
8354
8361
|
const scalingRatio = this.customPageWidth ? ScalingHelper.getRatio(this.customPageWidth, pageWidth) : 1;
|
|
8355
8362
|
this.editorService.setPageFormat(this.model.pageFormats[0]);
|
|
8363
|
+
this.editorService.paragraphStyle(this.model.paragraphs[0].paragraphStyle);
|
|
8356
8364
|
this.regulatorService.addMainSession(this.model, pageWidth, scalingRatio, this.container);
|
|
8357
8365
|
}
|
|
8358
8366
|
onSelectionChange() {
|
|
@@ -8362,8 +8370,17 @@ class Editor {
|
|
|
8362
8370
|
this.renderer.updateCursor();
|
|
8363
8371
|
}
|
|
8364
8372
|
this.editorService.setHasSelection(!this.selection.isEmpty);
|
|
8373
|
+
const position = this.mainSession.displayData.positionToIndex(this.selection.selectedRange.start);
|
|
8374
|
+
const pageFormat = this.mainSession.displayData.getPageFormatAtPosition(position);
|
|
8375
|
+
this.editorService.paragraphStyle(this.session.model.paragraphs[this.selection.selectedRange.start.row].paragraphStyle);
|
|
8376
|
+
this.editorService.setPageFormat(pageFormat.pageFormatModel);
|
|
8365
8377
|
this.rerenderMarker();
|
|
8366
8378
|
}
|
|
8379
|
+
onContentChange() {
|
|
8380
|
+
if (this.search.term) {
|
|
8381
|
+
this.find(this.search.term);
|
|
8382
|
+
}
|
|
8383
|
+
}
|
|
8367
8384
|
enableSelection() {
|
|
8368
8385
|
if (!this.selection.isDisabled) {
|
|
8369
8386
|
return;
|
|
@@ -8485,6 +8502,24 @@ class Editor {
|
|
|
8485
8502
|
}
|
|
8486
8503
|
return null;
|
|
8487
8504
|
}
|
|
8505
|
+
applyLeftMarginPageFormat(value) {
|
|
8506
|
+
const position = this.selection.cursor;
|
|
8507
|
+
const startIndex = ContentHelper.paragraphToDocumentIndex(this.session.displayData.paragraphs, position.row, position.column);
|
|
8508
|
+
const oldPageFormat = this.mainSession.displayData.getPageFormatAtPosition(startIndex).pageFormatModel;
|
|
8509
|
+
const newPageFormat = new PageFormatModel({ ...oldPageFormat, marginLeft: value });
|
|
8510
|
+
this.saveApplyPageFormatToHistory(oldPageFormat, newPageFormat);
|
|
8511
|
+
OperationsHelper.updatePageFormat(this.model, newPageFormat);
|
|
8512
|
+
this.recreateMainSession();
|
|
8513
|
+
}
|
|
8514
|
+
applyRightMarginPageFormat(value) {
|
|
8515
|
+
const position = this.selection.cursor;
|
|
8516
|
+
const startIndex = ContentHelper.paragraphToDocumentIndex(this.session.displayData.paragraphs, position.row, position.column);
|
|
8517
|
+
const oldPageFormat = this.mainSession.displayData.getPageFormatAtPosition(startIndex).pageFormatModel;
|
|
8518
|
+
const newPageFormat = new PageFormatModel({ ...oldPageFormat, marginRight: value });
|
|
8519
|
+
this.saveApplyPageFormatToHistory(oldPageFormat, newPageFormat);
|
|
8520
|
+
OperationsHelper.updatePageFormat(this.model, newPageFormat);
|
|
8521
|
+
this.recreateMainSession();
|
|
8522
|
+
}
|
|
8488
8523
|
applyPageFormat(model) {
|
|
8489
8524
|
const position = this.selection.cursor;
|
|
8490
8525
|
const startIndex = ContentHelper.paragraphToDocumentIndex(this.session.displayData.paragraphs, position.row, position.column);
|
|
@@ -8525,6 +8560,12 @@ class Editor {
|
|
|
8525
8560
|
this.selection?.clearSelection();
|
|
8526
8561
|
});
|
|
8527
8562
|
}
|
|
8563
|
+
applyLeftMarginPageFormatSubscription() {
|
|
8564
|
+
return this.editorService.leftMarginPageFormat$.subscribe(value => this.applyLeftMarginPageFormat(value));
|
|
8565
|
+
}
|
|
8566
|
+
applyRightMarginPageFormatSubscription() {
|
|
8567
|
+
return this.editorService.rightMarginPageFormat$.subscribe(value => this.applyRightMarginPageFormat(value));
|
|
8568
|
+
}
|
|
8528
8569
|
applyPageFormatSubscription() {
|
|
8529
8570
|
return this.editorService.applyPageFormat$.subscribe(pageFormat => this.applyPageFormat(pageFormat));
|
|
8530
8571
|
}
|
|
@@ -8534,17 +8575,18 @@ class Editor {
|
|
|
8534
8575
|
applyDocumentPageFormatSubscription() {
|
|
8535
8576
|
return this.editorService.applyDocumentPageFormat$.subscribe(pageFormat => this.applyDocumentPageFormat(pageFormat));
|
|
8536
8577
|
}
|
|
8537
|
-
|
|
8538
|
-
return
|
|
8539
|
-
this.find(
|
|
8540
|
-
this.editorService.
|
|
8541
|
-
|
|
8578
|
+
searchOptionSubscriptions() {
|
|
8579
|
+
return [
|
|
8580
|
+
this.editorService.searchTerm$.subscribe(searchTerm => this.find(searchTerm, true)),
|
|
8581
|
+
this.editorService.searchNext$.subscribe(() => this.findNext()),
|
|
8582
|
+
this.editorService.searchPrevious$.subscribe(() => this.findPrevious())
|
|
8583
|
+
];
|
|
8542
8584
|
}
|
|
8543
8585
|
replaceSubscription() {
|
|
8544
|
-
return
|
|
8545
|
-
this.
|
|
8546
|
-
this.editorService.
|
|
8547
|
-
|
|
8586
|
+
return [
|
|
8587
|
+
this.editorService.replaceTerm$.subscribe(x => (this.replaceTerm = x)),
|
|
8588
|
+
this.editorService.replaceCurrent$.subscribe(() => this.replace())
|
|
8589
|
+
];
|
|
8548
8590
|
}
|
|
8549
8591
|
setTextStylesSubscription() {
|
|
8550
8592
|
return this.editorService.setTextStyles$.subscribe(textStyles => {
|
|
@@ -8570,6 +8612,18 @@ class Editor {
|
|
|
8570
8612
|
this.focus();
|
|
8571
8613
|
});
|
|
8572
8614
|
}
|
|
8615
|
+
applyFirstLinePositionSubscription() {
|
|
8616
|
+
return this.editorService.firstLinePosition$.subscribe(x => {
|
|
8617
|
+
const value = x > 0 ? { indentFirstLine: x, indentHanging: 0 } : { indentHanging: Math.abs(x), indentFirstLine: 0 };
|
|
8618
|
+
this.applyParagraphsMargin(value);
|
|
8619
|
+
});
|
|
8620
|
+
}
|
|
8621
|
+
applyRightIndentParagraphSubscription() {
|
|
8622
|
+
return this.editorService.rightIndentParagraph$.subscribe(indentRight => this.applyParagraphsMargin({ indentRight }));
|
|
8623
|
+
}
|
|
8624
|
+
applyLeftIndentParagraphSubscription() {
|
|
8625
|
+
return this.editorService.leftIndentParagraph$.subscribe(indentLeft => this.applyParagraphsMargin({ indentLeft }));
|
|
8626
|
+
}
|
|
8573
8627
|
setImageStyleSubscription() {
|
|
8574
8628
|
return this.editorService.setImageStyle$.subscribe(image => this.applyImageStyles(image));
|
|
8575
8629
|
}
|
|
@@ -8819,10 +8873,97 @@ class Editor {
|
|
|
8819
8873
|
changeCellsWidth(rows, widthScale) {
|
|
8820
8874
|
rows.forEach(row => row.cells.forEach(cell => (cell.width = Math.round(cell.width / widthScale))));
|
|
8821
8875
|
}
|
|
8876
|
+
updateActiveSearchHighlight() {
|
|
8877
|
+
this.editorService.setCurrentSearchResultIndex(this.search.currentMatchIndex);
|
|
8878
|
+
if (!this.search.currentMatch) {
|
|
8879
|
+
for (const session of this.regulatorService.sessions) {
|
|
8880
|
+
session.renderer.updateActiveSearchHighlight(null);
|
|
8881
|
+
}
|
|
8882
|
+
return;
|
|
8883
|
+
}
|
|
8884
|
+
for (const session of this.regulatorService.sessions) {
|
|
8885
|
+
if (session.sessionId === this.search.currentMatch.sessionId) {
|
|
8886
|
+
session.renderer.updateActiveSearchHighlight(this.search.currentMatch.range);
|
|
8887
|
+
continue;
|
|
8888
|
+
}
|
|
8889
|
+
session.renderer.updateActiveSearchHighlight(null);
|
|
8890
|
+
}
|
|
8891
|
+
}
|
|
8892
|
+
setCursorAtSearchResult() {
|
|
8893
|
+
this.regulatorService.setCurrentSessionById(this.search.currentMatch.sessionId);
|
|
8894
|
+
const resultCursor = new CursorParagraph(this.search.currentMatch.range.start.row, this.search.currentMatch.range.start.column);
|
|
8895
|
+
this.selection.placeCursor(resultCursor);
|
|
8896
|
+
this.mainRenderer.scrollCursorIntoView(resultCursor);
|
|
8897
|
+
}
|
|
8822
8898
|
}
|
|
8823
8899
|
|
|
8824
8900
|
const EDITOR_VERSION = '2';
|
|
8825
8901
|
|
|
8902
|
+
class EditorSearchBarComponent {
|
|
8903
|
+
constructor(editorService, destroyRef) {
|
|
8904
|
+
this.editorService = editorService;
|
|
8905
|
+
this.destroyRef = destroyRef;
|
|
8906
|
+
this.searchControl = new FormControl('');
|
|
8907
|
+
this.replaceControl = new FormControl('');
|
|
8908
|
+
this.isReplace = false;
|
|
8909
|
+
this.searchResultCount$ = editorService.searchResultCount$;
|
|
8910
|
+
this.searchResultIndex$ = editorService.currentSearchResultIndex$;
|
|
8911
|
+
}
|
|
8912
|
+
ngOnInit() {
|
|
8913
|
+
this.searchControl.valueChanges
|
|
8914
|
+
.pipe(debounceTime(300), distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))
|
|
8915
|
+
.subscribe(() => this.editorService.setNewSearchTerm(this.searchControl.value));
|
|
8916
|
+
this.replaceControl.valueChanges
|
|
8917
|
+
.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))
|
|
8918
|
+
.subscribe(() => this.editorService.setNewReplaceTerm(this.replaceControl.value));
|
|
8919
|
+
this.editorService.dialogSearchTerm$
|
|
8920
|
+
.pipe(distinctUntilChanged(), takeUntilDestroyed(this.destroyRef))
|
|
8921
|
+
.subscribe(x => this.searchControl.setValue(x));
|
|
8922
|
+
}
|
|
8923
|
+
ngOnDestroy() {
|
|
8924
|
+
this.editorService.setNewSearchTerm('');
|
|
8925
|
+
}
|
|
8926
|
+
onClose() {
|
|
8927
|
+
this.editorService.setDisplaySearchBar(false);
|
|
8928
|
+
}
|
|
8929
|
+
focusInput() {
|
|
8930
|
+
setTimeout(() => {
|
|
8931
|
+
this.searchInput?.nativeElement?.focus();
|
|
8932
|
+
this.searchInput?.nativeElement?.select();
|
|
8933
|
+
});
|
|
8934
|
+
}
|
|
8935
|
+
findNext() {
|
|
8936
|
+
this.editorService.goNextSearchResult();
|
|
8937
|
+
}
|
|
8938
|
+
findPrev() {
|
|
8939
|
+
this.editorService.goPreviousSearchResult();
|
|
8940
|
+
}
|
|
8941
|
+
setReplace() {
|
|
8942
|
+
this.isReplace = !this.isReplace;
|
|
8943
|
+
}
|
|
8944
|
+
replace() {
|
|
8945
|
+
this.editorService.replaceCurrentSearchResult();
|
|
8946
|
+
}
|
|
8947
|
+
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 }); }
|
|
8948
|
+
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<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<div\n class=\"replace-form\"\n *ngIf=\"isReplace\">\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<div class=\"search-options\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Toggle Replace Mode\"\n (click)=\"setReplace()\">\n <mat-icon\n fontSet=\"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: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.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$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
8949
|
+
}
|
|
8950
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorSearchBarComponent, decorators: [{
|
|
8951
|
+
type: Component,
|
|
8952
|
+
args: [{ imports: [
|
|
8953
|
+
CommonModule,
|
|
8954
|
+
FormsModule,
|
|
8955
|
+
MatButtonModule,
|
|
8956
|
+
MatIconModule,
|
|
8957
|
+
MatInputModule,
|
|
8958
|
+
MatTooltipModule,
|
|
8959
|
+
ReactiveFormsModule,
|
|
8960
|
+
TranslateModule
|
|
8961
|
+
], providers: [ExternalElementService], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-search-bar', template: "@let searchResultCount = searchResultCount$ | async;\n@let searchResultIndex = searchResultIndex$ | 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<div\n class=\"replace-form\"\n *ngIf=\"isReplace\">\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<div class=\"search-options\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Toggle Replace Mode\"\n (click)=\"setReplace()\">\n <mat-icon\n fontSet=\"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"] }]
|
|
8962
|
+
}], ctorParameters: () => [{ type: EditorService }, { type: i0.DestroyRef }], propDecorators: { searchInput: [{
|
|
8963
|
+
type: ViewChild,
|
|
8964
|
+
args: ['searchInput']
|
|
8965
|
+
}] } });
|
|
8966
|
+
|
|
8826
8967
|
const EXTERNAL_ELEMENT_SIDENAV = new InjectionToken('EXTERNAL_ELEMENT_SIDENAV');
|
|
8827
8968
|
const EXTERNAL_ELEMENT_SERVICE = new InjectionToken('EXTERNAL_ELEMENT_SERVICE');
|
|
8828
8969
|
|
|
@@ -10541,7 +10682,7 @@ class TextLineInfo {
|
|
|
10541
10682
|
}
|
|
10542
10683
|
switch (align) {
|
|
10543
10684
|
case Alignment$1.center:
|
|
10544
|
-
this.paddingLeft = indent.left + (diff - indent.left - indent.right) / 2;
|
|
10685
|
+
this.paddingLeft = indent.left + (diff - indent.left - indent.right) / 2 + (indent.hanging - indent.firstLine) / 2;
|
|
10545
10686
|
break;
|
|
10546
10687
|
case Alignment$1.right:
|
|
10547
10688
|
this.paddingLeft = diff - indent.right;
|
|
@@ -12565,6 +12706,15 @@ class EditSession {
|
|
|
12565
12706
|
this.selection.placeCursor(endPosition);
|
|
12566
12707
|
this.applyToolbarStyles();
|
|
12567
12708
|
}
|
|
12709
|
+
applyParagraphs(paragraphs) {
|
|
12710
|
+
const startIndex = paragraphs[0].insertIndex;
|
|
12711
|
+
const endIndex = paragraphs[paragraphs.length - 1].insertIndex;
|
|
12712
|
+
const startParagraph = ContentHelper.documentIndexToParagraphIndex(this.displayData.paragraphs, startIndex).row;
|
|
12713
|
+
const endPosition = ContentHelper.documentIndexToParagraphWithOffset(this.displayData.paragraphs, endIndex);
|
|
12714
|
+
OperationsHelper.applyParagraphs(this.model, paragraphs);
|
|
12715
|
+
this.displayData.updateNextLineIndexes(startParagraph, endPosition.row);
|
|
12716
|
+
this.applyToolbarStyles();
|
|
12717
|
+
}
|
|
12568
12718
|
setTextStyle(textStyle) {
|
|
12569
12719
|
const result = { ...this.editorService.styles };
|
|
12570
12720
|
for (let key of Object.keys(textStyle)) {
|
|
@@ -13062,6 +13212,7 @@ class RenderChangesModel {
|
|
|
13062
13212
|
this.lines ||
|
|
13063
13213
|
this.marker ||
|
|
13064
13214
|
this.selection ||
|
|
13215
|
+
this.search ||
|
|
13065
13216
|
this.scroll ||
|
|
13066
13217
|
this.size ||
|
|
13067
13218
|
this.text ||
|
|
@@ -13073,6 +13224,7 @@ class RenderChangesModel {
|
|
|
13073
13224
|
this.lines = false;
|
|
13074
13225
|
this.marker = false;
|
|
13075
13226
|
this.selection = false;
|
|
13227
|
+
this.search = false;
|
|
13076
13228
|
this.scroll = false;
|
|
13077
13229
|
this.size = false;
|
|
13078
13230
|
this.text = false;
|
|
@@ -13131,15 +13283,14 @@ class RenderLoop {
|
|
|
13131
13283
|
}
|
|
13132
13284
|
}
|
|
13133
13285
|
|
|
13134
|
-
class
|
|
13286
|
+
class HighlightLayer {
|
|
13135
13287
|
constructor(parentEl, cssClass, session) {
|
|
13136
13288
|
this.session = session;
|
|
13137
|
-
this.marker = null;
|
|
13138
13289
|
this.element = document.createElement('div');
|
|
13139
|
-
this.element.className = `noder-layer noder-
|
|
13290
|
+
this.element.className = `noder-layer noder-highlight-layer ${cssClass}`;
|
|
13140
13291
|
parentEl.appendChild(this.element);
|
|
13141
13292
|
}
|
|
13142
|
-
|
|
13293
|
+
renderHighlight(cssPosition, cssClass) {
|
|
13143
13294
|
let selectionElement = this.selectionIndex !== -1 ? this.element.childNodes[this.selectionIndex] : null;
|
|
13144
13295
|
if (!selectionElement) {
|
|
13145
13296
|
selectionElement = document.createElement('div');
|
|
@@ -13149,32 +13300,8 @@ class SelectionLayer {
|
|
|
13149
13300
|
else {
|
|
13150
13301
|
this.selectionIndex++;
|
|
13151
13302
|
}
|
|
13152
|
-
selectionElement.style.cssText =
|
|
13153
|
-
selectionElement.className =
|
|
13154
|
-
}
|
|
13155
|
-
update(config) {
|
|
13156
|
-
if (!config) {
|
|
13157
|
-
return;
|
|
13158
|
-
}
|
|
13159
|
-
this.config = config;
|
|
13160
|
-
this.selectionIndex = 0;
|
|
13161
|
-
if (this.marker) {
|
|
13162
|
-
let range = this.marker.clipRows(config.contentRange.start, config.contentRange.end);
|
|
13163
|
-
if (!range.isEmpty) {
|
|
13164
|
-
range = range.toScreenRange(this.session);
|
|
13165
|
-
if (range.isSingleLine) {
|
|
13166
|
-
this.drawSingleLineMarker(range);
|
|
13167
|
-
}
|
|
13168
|
-
else {
|
|
13169
|
-
this.drawMultiLineMarker(range);
|
|
13170
|
-
}
|
|
13171
|
-
}
|
|
13172
|
-
}
|
|
13173
|
-
if (this.selectionIndex !== -1) {
|
|
13174
|
-
while (this.selectionIndex < this.element.childElementCount) {
|
|
13175
|
-
this.element.removeChild(this.element.lastChild);
|
|
13176
|
-
}
|
|
13177
|
-
}
|
|
13303
|
+
selectionElement.style.cssText = cssPosition;
|
|
13304
|
+
selectionElement.className = cssClass;
|
|
13178
13305
|
}
|
|
13179
13306
|
getTop(row) {
|
|
13180
13307
|
const paragraphs = this.session.displayData.paragraphs;
|
|
@@ -13184,7 +13311,7 @@ class SelectionLayer {
|
|
|
13184
13311
|
this.session.scrollTop);
|
|
13185
13312
|
}
|
|
13186
13313
|
// Draws a multi line marker, where lines span the full width
|
|
13187
|
-
drawMultiLineMarker(range) {
|
|
13314
|
+
drawMultiLineMarker(range, cssClass) {
|
|
13188
13315
|
// from selection start to the end of the line
|
|
13189
13316
|
const start = range.start.row;
|
|
13190
13317
|
const end = range.end.row;
|
|
@@ -13220,19 +13347,19 @@ class SelectionLayer {
|
|
|
13220
13347
|
let width = lineInfo.width + (lineInfo.wordSpacingWidth ?? 0);
|
|
13221
13348
|
style = this.getMarkerStyle(lineInfo.height, width, top, left);
|
|
13222
13349
|
}
|
|
13223
|
-
this.
|
|
13350
|
+
this.renderHighlight(style, cssClass);
|
|
13224
13351
|
top += lineInfo.height + lineInfo.offsetAfter + lineInfo.endPageOffset;
|
|
13225
13352
|
}
|
|
13226
13353
|
}
|
|
13227
13354
|
// Draws a marker which covers part or whole width of a single screen line
|
|
13228
|
-
drawSingleLineMarker(range) {
|
|
13355
|
+
drawSingleLineMarker(range, cssClass) {
|
|
13229
13356
|
const rangeInfo = this.getRangeInfo(this.session, range);
|
|
13230
13357
|
const paragraphInfo = PositionHelper.getParagraphInfoByRow(this.session.displayData.paragraphs, range.start.row);
|
|
13231
13358
|
const height = rangeInfo.screenHeight || paragraphInfo.lineHeight;
|
|
13232
13359
|
const width = rangeInfo.screenWidth;
|
|
13233
13360
|
const top = this.getTop(range.start.row);
|
|
13234
13361
|
const left = rangeInfo.leftPos;
|
|
13235
|
-
this.
|
|
13362
|
+
this.renderHighlight(this.getMarkerStyle(height, width, top, left), cssClass);
|
|
13236
13363
|
}
|
|
13237
13364
|
getRangeInfo(session, range) {
|
|
13238
13365
|
const start = range.start;
|
|
@@ -13250,6 +13377,91 @@ class SelectionLayer {
|
|
|
13250
13377
|
}
|
|
13251
13378
|
}
|
|
13252
13379
|
|
|
13380
|
+
class SearchHighlightLayer extends HighlightLayer {
|
|
13381
|
+
constructor(parentEl, cssClass, session) {
|
|
13382
|
+
super(parentEl, cssClass, session);
|
|
13383
|
+
this.className = 'noder-highlight';
|
|
13384
|
+
this.selectedClassName = 'noder-selected-highlight';
|
|
13385
|
+
this.markers = [];
|
|
13386
|
+
}
|
|
13387
|
+
update(config) {
|
|
13388
|
+
if (!config) {
|
|
13389
|
+
return;
|
|
13390
|
+
}
|
|
13391
|
+
this.config = config;
|
|
13392
|
+
this.selectionIndex = 0;
|
|
13393
|
+
if (this.active) {
|
|
13394
|
+
const screenRange = this.active.toScreenRange(this.session);
|
|
13395
|
+
if (!screenRange.isEmpty &&
|
|
13396
|
+
(!config.visibleRange ||
|
|
13397
|
+
(screenRange.start.row >= config.visibleRange.startScreenLine &&
|
|
13398
|
+
screenRange.end.row <= config.visibleRange.endScreenLine))) {
|
|
13399
|
+
if (screenRange.isSingleLine) {
|
|
13400
|
+
this.drawSingleLineMarker(screenRange, this.selectedClassName);
|
|
13401
|
+
}
|
|
13402
|
+
else {
|
|
13403
|
+
this.drawMultiLineMarker(screenRange, this.selectedClassName);
|
|
13404
|
+
}
|
|
13405
|
+
}
|
|
13406
|
+
}
|
|
13407
|
+
if (this.markers) {
|
|
13408
|
+
const ranges = this.markers
|
|
13409
|
+
.map(x => x.toScreenRange(this.session))
|
|
13410
|
+
.filter(x => !x.isEmpty &&
|
|
13411
|
+
(!config.visibleRange ||
|
|
13412
|
+
(x.start.row >= config.visibleRange.startScreenLine && x.end.row <= config.visibleRange.endScreenLine)) &&
|
|
13413
|
+
!x.isEqual(this.active));
|
|
13414
|
+
for (const range of ranges) {
|
|
13415
|
+
if (!range.isEmpty) {
|
|
13416
|
+
if (range.isSingleLine) {
|
|
13417
|
+
this.drawSingleLineMarker(range, this.className);
|
|
13418
|
+
}
|
|
13419
|
+
else {
|
|
13420
|
+
this.drawMultiLineMarker(range, this.className);
|
|
13421
|
+
}
|
|
13422
|
+
}
|
|
13423
|
+
}
|
|
13424
|
+
}
|
|
13425
|
+
if (this.selectionIndex !== -1) {
|
|
13426
|
+
while (this.selectionIndex < this.element.childElementCount) {
|
|
13427
|
+
this.element.removeChild(this.element.lastChild);
|
|
13428
|
+
}
|
|
13429
|
+
}
|
|
13430
|
+
}
|
|
13431
|
+
}
|
|
13432
|
+
|
|
13433
|
+
class SelectionLayer extends HighlightLayer {
|
|
13434
|
+
constructor(parentEl, cssClass, session) {
|
|
13435
|
+
super(parentEl, cssClass, session);
|
|
13436
|
+
this.className = 'noder-selection';
|
|
13437
|
+
this.marker = null;
|
|
13438
|
+
}
|
|
13439
|
+
update(config) {
|
|
13440
|
+
if (!config) {
|
|
13441
|
+
return;
|
|
13442
|
+
}
|
|
13443
|
+
this.config = config;
|
|
13444
|
+
this.selectionIndex = 0;
|
|
13445
|
+
if (this.marker) {
|
|
13446
|
+
let range = this.marker.clipRows(config.contentRange.start, config.contentRange.end);
|
|
13447
|
+
if (!range.isEmpty) {
|
|
13448
|
+
range = range.toScreenRange(this.session);
|
|
13449
|
+
if (range.isSingleLine) {
|
|
13450
|
+
this.drawSingleLineMarker(range, this.className);
|
|
13451
|
+
}
|
|
13452
|
+
else {
|
|
13453
|
+
this.drawMultiLineMarker(range, this.className);
|
|
13454
|
+
}
|
|
13455
|
+
}
|
|
13456
|
+
}
|
|
13457
|
+
if (this.selectionIndex !== -1) {
|
|
13458
|
+
while (this.selectionIndex < this.element.childElementCount) {
|
|
13459
|
+
this.element.removeChild(this.element.lastChild);
|
|
13460
|
+
}
|
|
13461
|
+
}
|
|
13462
|
+
}
|
|
13463
|
+
}
|
|
13464
|
+
|
|
13253
13465
|
class Renderer extends EventEmitting {
|
|
13254
13466
|
constructor(parentContainer, session) {
|
|
13255
13467
|
super();
|
|
@@ -13286,6 +13498,7 @@ class Renderer extends EventEmitting {
|
|
|
13286
13498
|
this.createContentContainer();
|
|
13287
13499
|
this.textLayer = new TextLayer(this.content, this.session);
|
|
13288
13500
|
this.selectionLayer = new SelectionLayer(this.content, 'text-selection', this.session);
|
|
13501
|
+
this.searchHighlightLayer = new SearchHighlightLayer(this.content, 'text-search-highlight', this.session);
|
|
13289
13502
|
this.cursorLayer = new CursorLayer(this.content, this.session);
|
|
13290
13503
|
this.dragAndDropSelectionLayer = new SelectionLayer(this.content, 'drag-and-drop-selection', this.session);
|
|
13291
13504
|
this.loop = new RenderLoop(changes => this.renderChanges(changes));
|
|
@@ -13319,6 +13532,9 @@ class Renderer extends EventEmitting {
|
|
|
13319
13532
|
if (changes.marker || changes.selection) {
|
|
13320
13533
|
this.renderSelection();
|
|
13321
13534
|
}
|
|
13535
|
+
if (changes.search) {
|
|
13536
|
+
this.renderSearchHighlights();
|
|
13537
|
+
}
|
|
13322
13538
|
if (changes.dragAndDrop) {
|
|
13323
13539
|
this.renderDragAndDropSelection();
|
|
13324
13540
|
}
|
|
@@ -13363,6 +13579,19 @@ class Renderer extends EventEmitting {
|
|
|
13363
13579
|
this.loop.schedule({ selection: true });
|
|
13364
13580
|
}
|
|
13365
13581
|
}
|
|
13582
|
+
updateSearchHighlights(ranges) {
|
|
13583
|
+
if (this.searchHighlightLayer.markers.length !== ranges.length ||
|
|
13584
|
+
!this.searchHighlightLayer.markers.every(x => ranges.some(y => x.isEqual(y)))) {
|
|
13585
|
+
this.searchHighlightLayer.markers = ranges;
|
|
13586
|
+
this.loop.schedule({ search: true });
|
|
13587
|
+
}
|
|
13588
|
+
}
|
|
13589
|
+
updateActiveSearchHighlight(active) {
|
|
13590
|
+
if (!this.searchHighlightLayer.active?.isEqual(active)) {
|
|
13591
|
+
this.searchHighlightLayer.active = active;
|
|
13592
|
+
this.loop.schedule({ search: true });
|
|
13593
|
+
}
|
|
13594
|
+
}
|
|
13366
13595
|
updateDragAndDropSelection(range) {
|
|
13367
13596
|
if (range.isEmpty && this.dragAndDropSelectionLayer.marker) {
|
|
13368
13597
|
this.dragAndDropSelectionLayer.marker = null;
|
|
@@ -13424,6 +13653,7 @@ class Renderer extends EventEmitting {
|
|
|
13424
13653
|
renderFull() {
|
|
13425
13654
|
this.textLayer.updateLines(this.layerConfig);
|
|
13426
13655
|
this.selectionLayer.update(this.layerConfig);
|
|
13656
|
+
this.searchHighlightLayer.update(this.layerConfig);
|
|
13427
13657
|
this.cursorLayer.update(this.layerConfig);
|
|
13428
13658
|
this.moveTextAreaToCursor();
|
|
13429
13659
|
this.session.onRendered();
|
|
@@ -13440,6 +13670,9 @@ class Renderer extends EventEmitting {
|
|
|
13440
13670
|
this.selectionLayer.update(this.layerConfig);
|
|
13441
13671
|
this.cursorLayer.detectVisibility();
|
|
13442
13672
|
}
|
|
13673
|
+
renderSearchHighlights() {
|
|
13674
|
+
this.searchHighlightLayer.update(this.layerConfig);
|
|
13675
|
+
}
|
|
13443
13676
|
renderDragAndDropSelection() {
|
|
13444
13677
|
this.dragAndDropSelectionLayer.update(this.layerConfig);
|
|
13445
13678
|
}
|
|
@@ -13641,6 +13874,9 @@ class VirtualRenderer {
|
|
|
13641
13874
|
if (changes.marker || changes.selection) {
|
|
13642
13875
|
this.renderSelection();
|
|
13643
13876
|
}
|
|
13877
|
+
if (changes.search) {
|
|
13878
|
+
this.renderSearchHighlights();
|
|
13879
|
+
}
|
|
13644
13880
|
if (changes.dragAndDrop) {
|
|
13645
13881
|
this.renderDragAndDropSelection();
|
|
13646
13882
|
}
|
|
@@ -13707,6 +13943,12 @@ class VirtualRenderer {
|
|
|
13707
13943
|
updateSelection(range) {
|
|
13708
13944
|
this.renderer.updateSelection(range);
|
|
13709
13945
|
}
|
|
13946
|
+
updateSearchHighlights(ranges) {
|
|
13947
|
+
this.renderer.updateSearchHighlights(ranges);
|
|
13948
|
+
}
|
|
13949
|
+
updateActiveSearchHighlight(active) {
|
|
13950
|
+
this.renderer.updateActiveSearchHighlight(active);
|
|
13951
|
+
}
|
|
13710
13952
|
updateDragAndDropSelection(range) {
|
|
13711
13953
|
this.renderer.updateDragAndDropSelection(range);
|
|
13712
13954
|
}
|
|
@@ -13830,6 +14072,7 @@ class VirtualRenderer {
|
|
|
13830
14072
|
this.renderer.textLayer.scrollLines(this.layerConfig);
|
|
13831
14073
|
}
|
|
13832
14074
|
this.renderer.selectionLayer.update(this.layerConfig);
|
|
14075
|
+
this.renderer.searchHighlightLayer.update(this.layerConfig);
|
|
13833
14076
|
if (!this.renderer.cursorLayer.isVisible) {
|
|
13834
14077
|
return;
|
|
13835
14078
|
}
|
|
@@ -13851,6 +14094,9 @@ class VirtualRenderer {
|
|
|
13851
14094
|
renderSelection() {
|
|
13852
14095
|
this.renderer.renderSelection();
|
|
13853
14096
|
}
|
|
14097
|
+
renderSearchHighlights() {
|
|
14098
|
+
this.renderer.renderSearchHighlights();
|
|
14099
|
+
}
|
|
13854
14100
|
renderDragAndDropSelection() {
|
|
13855
14101
|
this.renderer.renderDragAndDropSelection();
|
|
13856
14102
|
}
|
|
@@ -14203,17 +14449,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
14203
14449
|
|
|
14204
14450
|
class EditorRulerComponent {
|
|
14205
14451
|
constructor() {
|
|
14206
|
-
this.
|
|
14452
|
+
this.unit = input.required();
|
|
14453
|
+
this.editorService = inject(EditorService);
|
|
14454
|
+
this.defaultPaddingCm = 2.5;
|
|
14455
|
+
this.pageWidth$ = this.editorService.pageFormat$.pipe(distinctUntilChanged(), tap(x => {
|
|
14456
|
+
this.recalcGeometry(x.pageWidth);
|
|
14457
|
+
this.unit() === 'inch' ? this.buildTicksInch() : this.buildTicksCm();
|
|
14458
|
+
this.rightMarginPageFormatPx.set(x.pageWidth - x.marginRight);
|
|
14459
|
+
this.leftMarginPageFormatPx.set(x.marginLeft);
|
|
14460
|
+
}), map(x => x.pageWidth));
|
|
14461
|
+
this.snapInch = 0.125;
|
|
14207
14462
|
this.snapCm = 0.25;
|
|
14208
|
-
this.
|
|
14209
|
-
this.
|
|
14210
|
-
this.
|
|
14211
|
-
this.
|
|
14212
|
-
this.
|
|
14213
|
-
this.
|
|
14214
|
-
this.
|
|
14463
|
+
this.pxPerCm = 37.8; // 96dpi / 2.54
|
|
14464
|
+
this.pxPerInch = 96;
|
|
14465
|
+
this.firstLine = signal(this.defaultPaddingCm * this.pxPerCm);
|
|
14466
|
+
this.leftIndent = signal(this.defaultPaddingCm * this.pxPerCm);
|
|
14467
|
+
this.rightIndent = signal(0);
|
|
14468
|
+
this.leftIndentPx = computed(() => this.leftIndent() + this.leftMarginPageFormatPx());
|
|
14469
|
+
this.firstLinePx = computed(() => this.firstLine() + this.leftIndentPx());
|
|
14470
|
+
this.rightIndentPx = computed(() => this.rightMarginPageFormatPx() - this.rightIndent());
|
|
14471
|
+
this.leftMarginPageFormatPx = signal(this.defaultPaddingCm * this.pxPerCm);
|
|
14472
|
+
this.rightMarginPageFormatPx = signal(0);
|
|
14215
14473
|
this.guideX = signal(0);
|
|
14216
14474
|
this.showGuide = signal(false);
|
|
14475
|
+
this.containerWidthPx = 0;
|
|
14476
|
+
this.ticks = [];
|
|
14217
14477
|
this.dragging = null;
|
|
14218
14478
|
this.dragOffsetX = 0;
|
|
14219
14479
|
this.onMove = (ev) => {
|
|
@@ -14224,22 +14484,43 @@ class EditorRulerComponent {
|
|
|
14224
14484
|
const pointX = this.getClientX(ev);
|
|
14225
14485
|
const rect = this.rulerContainer.nativeElement.getBoundingClientRect();
|
|
14226
14486
|
let x = pointX - rect.left - this.dragOffsetX;
|
|
14227
|
-
if (x < -1 || x > this.
|
|
14487
|
+
if (x < -1 || x > this.containerWidthPx) {
|
|
14228
14488
|
return;
|
|
14229
14489
|
}
|
|
14230
14490
|
x = this.snapPx(x);
|
|
14231
|
-
if (this.dragging === '
|
|
14232
|
-
this.
|
|
14491
|
+
if (this.dragging === 'leftMarginPageFormat') {
|
|
14492
|
+
this.leftMarginPageFormatPx.set(x);
|
|
14233
14493
|
}
|
|
14234
14494
|
else if (this.dragging === 'first') {
|
|
14235
|
-
this.
|
|
14495
|
+
this.firstLine.set(x - this.leftIndentPx());
|
|
14236
14496
|
}
|
|
14237
|
-
else {
|
|
14238
|
-
this.
|
|
14497
|
+
else if (this.dragging === 'rightMarginPageFormat') {
|
|
14498
|
+
this.rightMarginPageFormatPx.set(x);
|
|
14499
|
+
}
|
|
14500
|
+
else if (this.dragging === 'leftIndent') {
|
|
14501
|
+
this.leftIndent.set(x - this.leftMarginPageFormatPx());
|
|
14502
|
+
}
|
|
14503
|
+
else if (this.dragging === 'rightIndent') {
|
|
14504
|
+
this.rightIndent.set(this.rightMarginPageFormatPx() - x);
|
|
14239
14505
|
}
|
|
14240
14506
|
this.guideX.set(x);
|
|
14241
14507
|
};
|
|
14242
14508
|
this.onUp = () => {
|
|
14509
|
+
if (this.dragging === 'leftMarginPageFormat') {
|
|
14510
|
+
this.editorService.applyLeftMarginPageFormat(Math.round(this.leftMarginPageFormatPx()));
|
|
14511
|
+
}
|
|
14512
|
+
else if (this.dragging === 'first') {
|
|
14513
|
+
this.editorService.applyFirstLinePosition(Math.round(this.firstLine()));
|
|
14514
|
+
}
|
|
14515
|
+
else if (this.dragging === 'leftIndent') {
|
|
14516
|
+
this.editorService.applyLeftIndentParagraph(Math.round(this.leftIndent()));
|
|
14517
|
+
}
|
|
14518
|
+
else if (this.dragging === 'rightIndent') {
|
|
14519
|
+
this.editorService.applyRightIndentParagraph(Math.round(this.rightIndent()));
|
|
14520
|
+
}
|
|
14521
|
+
else if (this.dragging === 'rightMarginPageFormat') {
|
|
14522
|
+
this.editorService.applyRightMarginPageFormat(Math.round(this.containerWidthPx - this.rightMarginPageFormatPx()));
|
|
14523
|
+
}
|
|
14243
14524
|
this.dragging = null;
|
|
14244
14525
|
this.showGuide.set(false);
|
|
14245
14526
|
window.removeEventListener('mousemove', this.onMove);
|
|
@@ -14247,19 +14528,25 @@ class EditorRulerComponent {
|
|
|
14247
14528
|
window.removeEventListener('touchmove', this.onMove);
|
|
14248
14529
|
window.removeEventListener('touchend', this.onUp);
|
|
14249
14530
|
};
|
|
14531
|
+
this.editorService.paragraphStyle$.pipe(takeUntilDestroyed()).subscribe(x => {
|
|
14532
|
+
this.firstLine.set(x.indentHanging ? -x.indentHanging : x.indentFirstLine);
|
|
14533
|
+
this.leftIndent.set(x.indentLeft);
|
|
14534
|
+
this.rightIndent.set(x.indentRight);
|
|
14535
|
+
});
|
|
14536
|
+
effect(() => (this.unit() === 'inch' ? this.buildTicksInch() : this.buildTicksCm()));
|
|
14250
14537
|
}
|
|
14251
|
-
|
|
14538
|
+
afterViewInit() {
|
|
14252
14539
|
this.recalcGeometry();
|
|
14253
|
-
this.
|
|
14254
|
-
this.
|
|
14540
|
+
this.unit() === 'inch' ? this.buildTicksInch() : this.buildTicksCm();
|
|
14541
|
+
this.rightMarginPageFormatPx.set(this.containerWidthPx - this.cmToPx(2.5));
|
|
14542
|
+
this.rightIndent.set(0);
|
|
14255
14543
|
}
|
|
14256
14544
|
onResize() {
|
|
14257
14545
|
this.recalcGeometry();
|
|
14258
|
-
this.
|
|
14546
|
+
this.buildTicksCm();
|
|
14259
14547
|
}
|
|
14260
|
-
recalcGeometry() {
|
|
14261
|
-
|
|
14262
|
-
this.containerWidthPx = rect.width - 10; // because padding 5px
|
|
14548
|
+
recalcGeometry(width = null) {
|
|
14549
|
+
this.containerWidthPx = width ?? this.rulerContainer.nativeElement.getBoundingClientRect().width;
|
|
14263
14550
|
}
|
|
14264
14551
|
cmToPx(cm) {
|
|
14265
14552
|
return cm * this.pxPerCm;
|
|
@@ -14267,42 +14554,80 @@ class EditorRulerComponent {
|
|
|
14267
14554
|
pxToCm(px) {
|
|
14268
14555
|
return px / this.pxPerCm;
|
|
14269
14556
|
}
|
|
14557
|
+
inchToPx(cm) {
|
|
14558
|
+
return cm * this.pxPerInch;
|
|
14559
|
+
}
|
|
14560
|
+
pxToInch(px) {
|
|
14561
|
+
return px / this.pxPerInch;
|
|
14562
|
+
}
|
|
14270
14563
|
snapPx(px) {
|
|
14271
|
-
|
|
14272
|
-
|
|
14273
|
-
|
|
14564
|
+
if (this.unit() === 'inch') {
|
|
14565
|
+
const inch = this.pxToInch(px);
|
|
14566
|
+
const snapped = Math.round(inch / this.snapInch) * this.snapInch;
|
|
14567
|
+
return this.inchToPx(snapped);
|
|
14568
|
+
}
|
|
14569
|
+
else {
|
|
14570
|
+
const cm = this.pxToCm(px);
|
|
14571
|
+
const snapped = Math.round(cm / this.snapCm) * this.snapCm;
|
|
14572
|
+
return this.cmToPx(snapped);
|
|
14573
|
+
}
|
|
14274
14574
|
}
|
|
14275
|
-
|
|
14575
|
+
buildTicksCm() {
|
|
14276
14576
|
const totalCm = Math.ceil(this.pxToCm(this.containerWidthPx));
|
|
14277
|
-
this.maxRulePosition = (totalCm - 1) * this.pxPerCm;
|
|
14278
14577
|
const ticks = [
|
|
14279
14578
|
{
|
|
14280
|
-
position: this.cmToPx(0)
|
|
14579
|
+
position: this.cmToPx(0),
|
|
14281
14580
|
major: false,
|
|
14282
14581
|
half: true,
|
|
14283
14582
|
label: null,
|
|
14284
14583
|
originalPaddings: -2.5
|
|
14285
14584
|
},
|
|
14286
14585
|
{
|
|
14287
|
-
position: this.cmToPx(
|
|
14586
|
+
position: this.cmToPx(this.snapCm),
|
|
14288
14587
|
major: false,
|
|
14289
14588
|
half: false,
|
|
14290
14589
|
label: null,
|
|
14291
14590
|
originalPaddings: -2.25
|
|
14292
14591
|
}
|
|
14293
14592
|
];
|
|
14294
|
-
for (let cm = 1; cm
|
|
14295
|
-
const position = this.cmToPx(cm)
|
|
14593
|
+
for (let cm = 1; cm <= totalCm; cm++) {
|
|
14594
|
+
const position = this.cmToPx(cm) - this.pxPerCm / 2;
|
|
14296
14595
|
ticks.push({ position, major: true, half: false, label: Math.abs(cm - 3), originalPaddings: cm - 3 }); // -3 because we start the line with 2.5
|
|
14297
|
-
if (cm
|
|
14596
|
+
if (cm <= totalCm) {
|
|
14298
14597
|
for (let i = 1; i < 4; i++) {
|
|
14299
|
-
|
|
14300
|
-
|
|
14301
|
-
|
|
14302
|
-
|
|
14303
|
-
|
|
14304
|
-
|
|
14305
|
-
|
|
14598
|
+
const tickPosition = position + this.cmToPx(i * this.snapCm);
|
|
14599
|
+
if (tickPosition < this.containerWidthPx) {
|
|
14600
|
+
ticks.push({
|
|
14601
|
+
position: tickPosition,
|
|
14602
|
+
major: false,
|
|
14603
|
+
half: i === 2,
|
|
14604
|
+
label: null,
|
|
14605
|
+
originalPaddings: cm - 3 + i * this.snapCm
|
|
14606
|
+
});
|
|
14607
|
+
}
|
|
14608
|
+
}
|
|
14609
|
+
}
|
|
14610
|
+
}
|
|
14611
|
+
this.ticks = ticks;
|
|
14612
|
+
}
|
|
14613
|
+
buildTicksInch() {
|
|
14614
|
+
const totalInch = Math.ceil(this.pxToInch(this.containerWidthPx));
|
|
14615
|
+
const ticks = [];
|
|
14616
|
+
for (let inch = 0; inch <= totalInch; inch++) {
|
|
14617
|
+
const position = this.inchToPx(inch);
|
|
14618
|
+
ticks.push({ position, major: true, half: false, label: Math.abs(inch - 1), originalPaddings: inch - 1 }); // -1
|
|
14619
|
+
if (inch <= totalInch) {
|
|
14620
|
+
for (let i = 1; i < 8; i++) {
|
|
14621
|
+
const tickPosition = position + this.inchToPx(i * this.snapInch);
|
|
14622
|
+
if (tickPosition < this.containerWidthPx) {
|
|
14623
|
+
ticks.push({
|
|
14624
|
+
position: tickPosition,
|
|
14625
|
+
major: false,
|
|
14626
|
+
half: i === 4,
|
|
14627
|
+
label: null,
|
|
14628
|
+
originalPaddings: inch - 1 + i * this.snapInch
|
|
14629
|
+
});
|
|
14630
|
+
}
|
|
14306
14631
|
}
|
|
14307
14632
|
}
|
|
14308
14633
|
}
|
|
@@ -14313,14 +14638,20 @@ class EditorRulerComponent {
|
|
|
14313
14638
|
const pointX = this.getClientX(ev);
|
|
14314
14639
|
const rect = this.rulerContainer.nativeElement.getBoundingClientRect();
|
|
14315
14640
|
this.dragging = target;
|
|
14316
|
-
if (target === '
|
|
14317
|
-
this.dragOffsetX = pointX - rect.left - this.
|
|
14641
|
+
if (target === 'leftMarginPageFormat') {
|
|
14642
|
+
this.dragOffsetX = pointX - rect.left - this.leftMarginPageFormatPx();
|
|
14318
14643
|
}
|
|
14319
14644
|
else if (target === 'first') {
|
|
14320
14645
|
this.dragOffsetX = pointX - rect.left - this.firstLinePx();
|
|
14321
14646
|
}
|
|
14322
|
-
else {
|
|
14323
|
-
this.dragOffsetX = pointX - rect.left - this.
|
|
14647
|
+
else if (target === 'rightMarginPageFormat') {
|
|
14648
|
+
this.dragOffsetX = pointX - rect.left - this.rightMarginPageFormatPx();
|
|
14649
|
+
}
|
|
14650
|
+
else if (target === 'leftIndent') {
|
|
14651
|
+
this.dragOffsetX = pointX - rect.left - this.leftIndentPx();
|
|
14652
|
+
}
|
|
14653
|
+
else if (target === 'rightIndent') {
|
|
14654
|
+
this.dragOffsetX = pointX - rect.left - this.rightIndentPx();
|
|
14324
14655
|
}
|
|
14325
14656
|
this.showGuide.set(true);
|
|
14326
14657
|
this.guideX.set(this.getCurrentDraggedPx());
|
|
@@ -14337,21 +14668,25 @@ class EditorRulerComponent {
|
|
|
14337
14668
|
}
|
|
14338
14669
|
getCurrentDraggedPx() {
|
|
14339
14670
|
switch (this.dragging) {
|
|
14340
|
-
case '
|
|
14341
|
-
return this.
|
|
14671
|
+
case 'leftMarginPageFormat':
|
|
14672
|
+
return this.leftMarginPageFormatPx();
|
|
14342
14673
|
case 'first':
|
|
14343
14674
|
return this.firstLinePx();
|
|
14344
|
-
case '
|
|
14345
|
-
return this.
|
|
14675
|
+
case 'rightMarginPageFormat':
|
|
14676
|
+
return this.rightMarginPageFormatPx();
|
|
14677
|
+
case 'leftIndent':
|
|
14678
|
+
return this.leftIndentPx();
|
|
14679
|
+
case 'rightIndent':
|
|
14680
|
+
return this.rightIndentPx();
|
|
14346
14681
|
}
|
|
14347
14682
|
}
|
|
14348
14683
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorRulerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14349
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: EditorRulerComponent, isStandalone: true, selector: "app-nod-editor-ruler", host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "rulerContainer", first: true, predicate: ["rulerContainer"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"ruler-container\"\n #rulerContainer>\n <div\n class=\"left-area\"\n [style.width.px]=\"
|
|
14684
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.5", type: EditorRulerComponent, isStandalone: true, selector: "app-nod-editor-ruler", inputs: { unit: { classPropertyName: "unit", publicName: "unit", isSignal: true, isRequired: true, transformFunction: null } }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "rulerContainer", first: true, predicate: ["rulerContainer"], descendants: true, static: true }], ngImport: i0, template: "<div\n class=\"ruler-container\"\n [style.width.px]=\"pageWidth$ | async\"\n #rulerContainer>\n <div\n class=\"left-area\"\n [style.width.px]=\"leftMarginPageFormatPx()\"></div>\n <div\n class=\"right-area\"\n [style.width.px]=\"containerWidthPx - rightMarginPageFormatPx()\"></div>\n <div\n class=\"separator left-page-format\"\n [style.left.px]=\"leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'leftMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'leftMarginPageFormat')\"></div>\n <div\n class=\"separator right-page-format\"\n [style.left.px]=\"rightMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'rightMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'rightMarginPageFormat')\"></div>\n\n <div class=\"ruler-track\">\n @for (tick of ticks; track tick) {\n <div\n class=\"tick\"\n [style.left.px]=\"tick.position\"\n [class.major]=\"tick.major\"\n [class.half]=\"tick.half\">\n @if (tick.label !== null) {\n <span class=\"label\">\n {{ tick.label }}\n </span>\n }\n </div>\n }\n </div>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"leftIndentPx()\"\n (mousedown)=\"startDrag($event, 'leftIndent')\"\n (touchstart)=\"startDrag($event, 'leftIndent')\" />\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-down\"\n class=\"paragraph-marker\"\n [style.left.px]=\"firstLinePx()\"\n (mousedown)=\"startDrag($event, 'first')\"\n (touchstart)=\"startDrag($event, 'first')\" />\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"rightIndentPx()\"\n (mousedown)=\"startDrag($event, 'rightIndent')\"\n (touchstart)=\"startDrag($event, 'rightIndent')\" />\n @if (showGuide()) {\n <div\n class=\"drag-guide\"\n [style.left.px]=\"guideX()\"></div>\n }\n</div>\n", styles: [":host{display:flex;width:100%;height:22px;justify-content:center;align-items:center}.ruler-container{position:relative;height:18px;border-bottom-width:1px;border-bottom-style:solid;border-top-width:1px;border-top-style:solid;-webkit-user-select:none;user-select:none}.ruler-track{position:absolute;left:0;right:0;bottom:0;height:18px;overflow:hidden}.tick{position:absolute;top:50%;transform:translateY(-50%);width:1px;height:4px}.major{height:0}.half{height:8px}.label{position:absolute;top:50%;transform:translate(-50%,-50%);font-size:10px}mat-icon{position:absolute;width:17px;height:17px;font-size:18px;font-weight:700;cursor:grab;z-index:2;transform:translate(-50%)}.drag-guide{position:absolute;height:2000px;top:10px;width:1px;z-index:9999;pointer-events:none;will-change:left}.paragraph-marker{top:-6px;z-index:2}.page-marker{bottom:-6px;z-index:2}.left-area,.right-area,.separator{position:absolute;height:18px}.separator{width:5px;transform:translate(-50%);background-color:transparent;cursor:ew-resize;z-index:2}.left-area{left:0}.right-area{right:0}\n"], dependencies: [{ kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
14350
14685
|
}
|
|
14351
14686
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorRulerComponent, decorators: [{
|
|
14352
14687
|
type: Component,
|
|
14353
|
-
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-ruler', imports: [MatIconModule], template: "<div\n class=\"ruler-container\"\n #rulerContainer>\n <div\n class=\"left-area\"\n [style.width.px]=\"
|
|
14354
|
-
}], propDecorators: { rulerContainer: [{
|
|
14688
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-ruler', imports: [MatIconModule, AsyncPipe], template: "<div\n class=\"ruler-container\"\n [style.width.px]=\"pageWidth$ | async\"\n #rulerContainer>\n <div\n class=\"left-area\"\n [style.width.px]=\"leftMarginPageFormatPx()\"></div>\n <div\n class=\"right-area\"\n [style.width.px]=\"containerWidthPx - rightMarginPageFormatPx()\"></div>\n <div\n class=\"separator left-page-format\"\n [style.left.px]=\"leftMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'leftMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'leftMarginPageFormat')\"></div>\n <div\n class=\"separator right-page-format\"\n [style.left.px]=\"rightMarginPageFormatPx()\"\n (mousedown)=\"startDrag($event, 'rightMarginPageFormat')\"\n (touchstart)=\"startDrag($event, 'rightMarginPageFormat')\"></div>\n\n <div class=\"ruler-track\">\n @for (tick of ticks; track tick) {\n <div\n class=\"tick\"\n [style.left.px]=\"tick.position\"\n [class.major]=\"tick.major\"\n [class.half]=\"tick.half\">\n @if (tick.label !== null) {\n <span class=\"label\">\n {{ tick.label }}\n </span>\n }\n </div>\n }\n </div>\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"leftIndentPx()\"\n (mousedown)=\"startDrag($event, 'leftIndent')\"\n (touchstart)=\"startDrag($event, 'leftIndent')\" />\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-down\"\n class=\"paragraph-marker\"\n [style.left.px]=\"firstLinePx()\"\n (mousedown)=\"startDrag($event, 'first')\"\n (touchstart)=\"startDrag($event, 'first')\" />\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"icon-field-up\"\n class=\"page-marker\"\n [style.left.px]=\"rightIndentPx()\"\n (mousedown)=\"startDrag($event, 'rightIndent')\"\n (touchstart)=\"startDrag($event, 'rightIndent')\" />\n @if (showGuide()) {\n <div\n class=\"drag-guide\"\n [style.left.px]=\"guideX()\"></div>\n }\n</div>\n", styles: [":host{display:flex;width:100%;height:22px;justify-content:center;align-items:center}.ruler-container{position:relative;height:18px;border-bottom-width:1px;border-bottom-style:solid;border-top-width:1px;border-top-style:solid;-webkit-user-select:none;user-select:none}.ruler-track{position:absolute;left:0;right:0;bottom:0;height:18px;overflow:hidden}.tick{position:absolute;top:50%;transform:translateY(-50%);width:1px;height:4px}.major{height:0}.half{height:8px}.label{position:absolute;top:50%;transform:translate(-50%,-50%);font-size:10px}mat-icon{position:absolute;width:17px;height:17px;font-size:18px;font-weight:700;cursor:grab;z-index:2;transform:translate(-50%)}.drag-guide{position:absolute;height:2000px;top:10px;width:1px;z-index:9999;pointer-events:none;will-change:left}.paragraph-marker{top:-6px;z-index:2}.page-marker{bottom:-6px;z-index:2}.left-area,.right-area,.separator{position:absolute;height:18px}.separator{width:5px;transform:translate(-50%);background-color:transparent;cursor:ew-resize;z-index:2}.left-area{left:0}.right-area{right:0}\n"] }]
|
|
14689
|
+
}], ctorParameters: () => [], propDecorators: { rulerContainer: [{
|
|
14355
14690
|
type: ViewChild,
|
|
14356
14691
|
args: ['rulerContainer', { static: true }]
|
|
14357
14692
|
}], onResize: [{
|
|
@@ -14383,6 +14718,7 @@ class EditorComponent {
|
|
|
14383
14718
|
this.clipboard = clipboard;
|
|
14384
14719
|
this.isMobile = false;
|
|
14385
14720
|
this.externalElementTagNames = ['APP-NODER-INPUT', 'APP-NODER-SIGNATURE', 'APP-NODER-DATEPICKER'];
|
|
14721
|
+
this.rulerUnit = input.required();
|
|
14386
14722
|
this.class = 'base-editor';
|
|
14387
14723
|
this.subscriptions = [];
|
|
14388
14724
|
this.sidenavComponentRef = null;
|
|
@@ -14398,7 +14734,7 @@ class EditorComponent {
|
|
|
14398
14734
|
initEditor(content) {
|
|
14399
14735
|
this.ngOnDestroy();
|
|
14400
14736
|
this.editor = new Editor(content, this.container, this.editorService, this.regulatorService, this.commandsService, this.clipboard, this.externalElementTagNames, this.customPageWidth);
|
|
14401
|
-
this.subscriptions.push(this.toggleSidenavSubscription());
|
|
14737
|
+
this.subscriptions.push(this.toggleSidenavSubscription(), this.searchBarSubscription());
|
|
14402
14738
|
}
|
|
14403
14739
|
toggleSidenavSubscription() {
|
|
14404
14740
|
return this.editorService.toggleSidenav$.subscribe(data => {
|
|
@@ -14423,6 +14759,17 @@ class EditorComponent {
|
|
|
14423
14759
|
this.cdr.markForCheck();
|
|
14424
14760
|
});
|
|
14425
14761
|
}
|
|
14762
|
+
searchBarSubscription() {
|
|
14763
|
+
return this.editorService.displaySearchBar$.subscribe(x => {
|
|
14764
|
+
this.showSearchBar = x;
|
|
14765
|
+
if (this.showSearchBar) {
|
|
14766
|
+
setTimeout(() => {
|
|
14767
|
+
this.searchBar?.focusInput();
|
|
14768
|
+
});
|
|
14769
|
+
}
|
|
14770
|
+
this.cdr.markForCheck();
|
|
14771
|
+
});
|
|
14772
|
+
}
|
|
14426
14773
|
removeSidenavComponent() {
|
|
14427
14774
|
if (!this.sidenavComponentRef) {
|
|
14428
14775
|
return;
|
|
@@ -14430,13 +14777,13 @@ class EditorComponent {
|
|
|
14430
14777
|
this.componentService.removeComponent(this.sidenavComponentRef);
|
|
14431
14778
|
this.sidenavComponentRef = null;
|
|
14432
14779
|
}
|
|
14433
|
-
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: i0.Injector }, { token: RegulatorService }, { token: CommandsService }, { token: i5$
|
|
14434
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
14780
|
+
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: i0.Injector }, { token: RegulatorService }, { token: CommandsService }, { token: i5$3.Clipboard }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14781
|
+
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 <app-nod-editor-ruler [unit]=\"rulerUnit()\" />\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 </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}.sidenav-container{width:100%}.mat-drawer-content{overflow:hidden}.container{height:100%;display:flex;justify-content:center}.drawer-container{height:100%}.drawer-mobile{width:100%}app-nod-editor-search-bar{position:absolute;right:15px;top:0}\n"], dependencies: [{ kind: "component", type: EditorRulerComponent, selector: "app-nod-editor-ruler", inputs: ["unit"] }, { kind: "component", type: EditorSearchBarComponent, selector: "app-nod-editor-search-bar" }, { kind: "component", type: i8.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i8.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i8.MatDrawerContent, selector: "mat-drawer-content" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
14435
14782
|
}
|
|
14436
14783
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorComponent, decorators: [{
|
|
14437
14784
|
type: Component,
|
|
14438
|
-
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 <app-nod-editor-ruler />\n <div class=\"container\">\n <div\n #container\n class=\"edit-container\"></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}.sidenav-container{width:100%}.mat-drawer-content{overflow:hidden}.container{height:100%;display:flex;justify-content:center}.drawer-container{height:100%}.drawer-mobile{width:100%}\n"] }]
|
|
14439
|
-
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: ComponentService }, { type: EditorService }, { type: i0.Injector }, { type: RegulatorService }, { type: CommandsService }, { type: i5$
|
|
14785
|
+
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 <app-nod-editor-ruler [unit]=\"rulerUnit()\" />\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 </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}.sidenav-container{width:100%}.mat-drawer-content{overflow:hidden}.container{height:100%;display:flex;justify-content:center}.drawer-container{height:100%}.drawer-mobile{width:100%}app-nod-editor-search-bar{position:absolute;right:15px;top:0}\n"] }]
|
|
14786
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: ComponentService }, { type: EditorService }, { type: i0.Injector }, { type: RegulatorService }, { type: CommandsService }, { type: i5$3.Clipboard }], propDecorators: { isMobile: [{
|
|
14440
14787
|
type: Input
|
|
14441
14788
|
}], externalElementTagNames: [{
|
|
14442
14789
|
type: Input
|
|
@@ -14453,6 +14800,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
14453
14800
|
}], sidenav: [{
|
|
14454
14801
|
type: ViewChild,
|
|
14455
14802
|
args: ['drawer', { static: true }]
|
|
14803
|
+
}], searchBar: [{
|
|
14804
|
+
type: ViewChild,
|
|
14805
|
+
args: [EditorSearchBarComponent]
|
|
14456
14806
|
}], class: [{
|
|
14457
14807
|
type: HostBinding,
|
|
14458
14808
|
args: ['class']
|
|
@@ -14493,19 +14843,21 @@ class EditorModule {
|
|
|
14493
14843
|
NoderTableComponent,
|
|
14494
14844
|
ResizerComponent,
|
|
14495
14845
|
TableOverlayMenuComponent], imports: [CommonModule,
|
|
14846
|
+
EditorRulerComponent,
|
|
14847
|
+
EditorSearchBarComponent,
|
|
14496
14848
|
MatButtonModule,
|
|
14497
14849
|
MatDialogModule,
|
|
14498
14850
|
MatIconModule,
|
|
14499
|
-
EditorRulerComponent,
|
|
14500
14851
|
MatSidenavModule,
|
|
14501
14852
|
MatTooltipModule,
|
|
14502
14853
|
ReactiveFormsModule,
|
|
14503
14854
|
TranslateModule], exports: [EditorComponent] }); }
|
|
14504
14855
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorModule, providers: [ComponentService, CustomContentService, OverlayService, RegulatorService, ExternalElementService, CommandsService], imports: [CommonModule,
|
|
14856
|
+
EditorRulerComponent,
|
|
14857
|
+
EditorSearchBarComponent,
|
|
14505
14858
|
MatButtonModule,
|
|
14506
14859
|
MatDialogModule,
|
|
14507
14860
|
MatIconModule,
|
|
14508
|
-
EditorRulerComponent,
|
|
14509
14861
|
MatSidenavModule,
|
|
14510
14862
|
MatTooltipModule,
|
|
14511
14863
|
ReactiveFormsModule,
|
|
@@ -14526,10 +14878,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
14526
14878
|
],
|
|
14527
14879
|
imports: [
|
|
14528
14880
|
CommonModule,
|
|
14881
|
+
EditorRulerComponent,
|
|
14882
|
+
EditorSearchBarComponent,
|
|
14529
14883
|
MatButtonModule,
|
|
14530
14884
|
MatDialogModule,
|
|
14531
14885
|
MatIconModule,
|
|
14532
|
-
EditorRulerComponent,
|
|
14533
14886
|
MatSidenavModule,
|
|
14534
14887
|
MatTooltipModule,
|
|
14535
14888
|
ReactiveFormsModule,
|
|
@@ -14655,60 +15008,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImpor
|
|
|
14655
15008
|
args: [{ imports: [CommonModule, MatButtonModule, MatIconModule, MatTooltipModule, MatMenuModule, TranslateModule], selector: 'app-nod-editor-title-mobile', 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 (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"] }]
|
|
14656
15009
|
}] });
|
|
14657
15010
|
|
|
14658
|
-
class EditorSearchDialogComponent extends DestroyComponent {
|
|
14659
|
-
constructor(editorService) {
|
|
14660
|
-
super();
|
|
14661
|
-
this.editorService = editorService;
|
|
14662
|
-
this.searchControl = new FormControl('');
|
|
14663
|
-
this.replaceControl = new FormControl('');
|
|
14664
|
-
this.isReplace = false;
|
|
14665
|
-
this.searchIteration$ = this.editorService.searchIteration$;
|
|
14666
|
-
}
|
|
14667
|
-
ngOnInit() {
|
|
14668
|
-
this.searchControl.valueChanges
|
|
14669
|
-
.pipe(debounceTime(300), distinctUntilChanged(), takeUntil(this.destroy$))
|
|
14670
|
-
.subscribe(() => (this.editorService.searchOptions = { term: this.searchControl.value, skipCurrent: false, backwards: false }));
|
|
14671
|
-
}
|
|
14672
|
-
onClose() {
|
|
14673
|
-
this.editorService.openSearchDialog = false;
|
|
14674
|
-
}
|
|
14675
|
-
findNext() {
|
|
14676
|
-
this.editorService.searchOptions = {
|
|
14677
|
-
term: this.searchControl.value,
|
|
14678
|
-
skipCurrent: true,
|
|
14679
|
-
backwards: false
|
|
14680
|
-
};
|
|
14681
|
-
}
|
|
14682
|
-
findPrev() {
|
|
14683
|
-
this.editorService.searchOptions = {
|
|
14684
|
-
term: this.searchControl.value,
|
|
14685
|
-
skipCurrent: true,
|
|
14686
|
-
backwards: true
|
|
14687
|
-
};
|
|
14688
|
-
}
|
|
14689
|
-
setReplace() {
|
|
14690
|
-
this.isReplace = !this.isReplace;
|
|
14691
|
-
}
|
|
14692
|
-
replace() {
|
|
14693
|
-
this.editorService.replace = { replaceValue: this.replaceControl.value, searchValue: this.searchControl.value };
|
|
14694
|
-
}
|
|
14695
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorSearchDialogComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
14696
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.5", type: EditorSearchDialogComponent, isStandalone: true, selector: "app-nod-editor-search-dialog", providers: [ExternalElementService], usesInheritance: true, ngImport: i0, template: "<div class=\"line search-form\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>{{ 'NODER.LABEL.SEARCH_FOR' | translate }}</mat-label>\n <input\n matInput\n [formControl]=\"searchControl\"\n (keydown.enter)=\"findNext()\" />\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"findPrev()\">\n <mat-icon\n fontSet=\"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<ng-container *ngIf=\"{ searchIteration: searchIteration$ | async } as data\">\n <div\n class=\"replace-form\"\n *ngIf=\"isReplace\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>{{ '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 <div class=\"search-options\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Toggle Replace Mode\"\n (click)=\"setReplace()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ isReplace ? 'icon-arrow-up' : 'icon-arrow-down' }}\"></mat-icon>\n </button>\n <div class=\"counter\">\n <span>\n {{\n 'NODER.COMPLEX_LABEL.OF_COUNTER'\n | translate: { current: data.searchIteration?.current ?? 0, total: data.searchIteration?.total ?? 0 }\n }}\n </span>\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</ng-container>\n", styles: [":host{min-height:56px;max-width:100%;display:block;font-size:10px;padding:3px}.close-icon{position:absolute;right:1px;top:1px}.search-form,.replace-form,.search-options{display:flex}mat-form-field{padding-left:10px}.mdc-button{font-size:12px;padding:0 8px;min-width:unset}.search-options{line-height:40px}.search-options .counter{text-align:center;flex:1}.mat-mdc-input-element{font-size:10px}.replace-form .mdc-button{width:80px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.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$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$3.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$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
14697
|
-
}
|
|
14698
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: EditorSearchDialogComponent, decorators: [{
|
|
14699
|
-
type: Component,
|
|
14700
|
-
args: [{ imports: [
|
|
14701
|
-
CommonModule,
|
|
14702
|
-
FormsModule,
|
|
14703
|
-
MatButtonModule,
|
|
14704
|
-
MatIconModule,
|
|
14705
|
-
MatInputModule,
|
|
14706
|
-
MatTooltipModule,
|
|
14707
|
-
ReactiveFormsModule,
|
|
14708
|
-
TranslateModule
|
|
14709
|
-
], providers: [ExternalElementService], changeDetection: ChangeDetectionStrategy.OnPush, selector: 'app-nod-editor-search-dialog', template: "<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 [formControl]=\"searchControl\"\n (keydown.enter)=\"findNext()\" />\n </mat-form-field>\n <button\n type=\"button\"\n mat-icon-button\n (click)=\"findPrev()\">\n <mat-icon\n fontSet=\"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<ng-container *ngIf=\"{ searchIteration: searchIteration$ | async } as data\">\n <div\n class=\"replace-form\"\n *ngIf=\"isReplace\">\n <mat-form-field\n color=\"accent\"\n floatLabel=\"auto\"\n appearance=\"outline\">\n <mat-label>{{ '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 <div class=\"search-options\">\n <button\n type=\"button\"\n mat-icon-button\n matTooltip=\"Toggle Replace Mode\"\n (click)=\"setReplace()\">\n <mat-icon\n fontSet=\"noder-icon\"\n fontIcon=\"{{ isReplace ? 'icon-arrow-up' : 'icon-arrow-down' }}\"></mat-icon>\n </button>\n <div class=\"counter\">\n <span>\n {{\n 'NODER.COMPLEX_LABEL.OF_COUNTER'\n | translate: { current: data.searchIteration?.current ?? 0, total: data.searchIteration?.total ?? 0 }\n }}\n </span>\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</ng-container>\n", styles: [":host{min-height:56px;max-width:100%;display:block;font-size:10px;padding:3px}.close-icon{position:absolute;right:1px;top:1px}.search-form,.replace-form,.search-options{display:flex}mat-form-field{padding-left:10px}.mdc-button{font-size:12px;padding:0 8px;min-width:unset}.search-options{line-height:40px}.search-options .counter{text-align:center;flex:1}.mat-mdc-input-element{font-size:10px}.replace-form .mdc-button{width:80px}\n"] }]
|
|
14710
|
-
}], ctorParameters: () => [{ type: EditorService }] });
|
|
14711
|
-
|
|
14712
15011
|
var EditorToolbarMode;
|
|
14713
15012
|
(function (EditorToolbarMode) {
|
|
14714
15013
|
EditorToolbarMode[EditorToolbarMode["Base"] = 0] = "Base";
|
|
@@ -15905,7 +16204,7 @@ class InsertTableMobileComponent {
|
|
|
15905
16204
|
control.setValue(newValue);
|
|
15906
16205
|
}
|
|
15907
16206
|
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 }); }
|
|
15908
|
-
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$
|
|
16207
|
+
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$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$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
15909
16208
|
}
|
|
15910
16209
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: InsertTableMobileComponent, decorators: [{
|
|
15911
16210
|
type: Component,
|
|
@@ -16547,11 +16846,18 @@ class PageSetupComponent {
|
|
|
16547
16846
|
this.pageSize.width = Math.round(this.pageSize.customWidth * rate);
|
|
16548
16847
|
this.pageSize.height = Math.round(this.pageSize.customHeight * rate);
|
|
16549
16848
|
}
|
|
16849
|
+
const pageMargin = new MarginModel();
|
|
16550
16850
|
const pageFormat = new PageFormatModel({
|
|
16551
16851
|
pageHeight: this.pageSize.orientation == PageOrientations.Portrait ? this.pageSize.height : this.pageSize.width,
|
|
16552
16852
|
pageWidth: this.pageSize.orientation == PageOrientations.Portrait ? this.pageSize.width : this.pageSize.height,
|
|
16553
16853
|
unit: this.pageSize.unit,
|
|
16554
|
-
pageOrientation: this.pageSize.orientation
|
|
16854
|
+
pageOrientation: this.pageSize.orientation,
|
|
16855
|
+
marginBottom: pageMargin.bottom,
|
|
16856
|
+
marginFooter: pageMargin.footer,
|
|
16857
|
+
marginHeader: pageMargin.header,
|
|
16858
|
+
marginLeft: pageMargin.left,
|
|
16859
|
+
marginRight: pageMargin.right,
|
|
16860
|
+
marginTop: pageMargin.top
|
|
16555
16861
|
});
|
|
16556
16862
|
switch (this.selectedDocumentArea) {
|
|
16557
16863
|
case DocumentAreas.SelectedText:
|
|
@@ -16589,7 +16895,7 @@ class PageSetupComponent {
|
|
|
16589
16895
|
return customPageSize;
|
|
16590
16896
|
}
|
|
16591
16897
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PageSetupComponent, deps: [{ token: EditorService }, { token: ToolbarCoreService }, { token: i3$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16592
|
-
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$3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5$3.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$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8.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.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 }); }
|
|
16898
|
+
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$1.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i8$1.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth", "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.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 }); }
|
|
16593
16899
|
}
|
|
16594
16900
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: PageSetupComponent, decorators: [{
|
|
16595
16901
|
type: Component,
|
|
@@ -16740,7 +17046,7 @@ class AddLinkDialogComponent {
|
|
|
16740
17046
|
this.dialogRef.close({ text: this.form.controls.text.value, link: this.form.controls.link.value });
|
|
16741
17047
|
}
|
|
16742
17048
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AddLinkDialogComponent, deps: [{ token: i1$2.MatDialogRef }, { token: i2.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
16743
|
-
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$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i5$
|
|
17049
|
+
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$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1$2.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$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
16744
17050
|
}
|
|
16745
17051
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AddLinkDialogComponent, decorators: [{
|
|
16746
17052
|
type: Component,
|
|
@@ -16789,7 +17095,7 @@ class AddLinkMobileComponent {
|
|
|
16789
17095
|
this.onApply();
|
|
16790
17096
|
}
|
|
16791
17097
|
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 }); }
|
|
16792
|
-
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$
|
|
17098
|
+
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$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
16793
17099
|
}
|
|
16794
17100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.5", ngImport: i0, type: AddLinkMobileComponent, decorators: [{
|
|
16795
17101
|
type: Component,
|
|
@@ -16880,5 +17186,5 @@ class OperationModel {
|
|
|
16880
17186
|
* Generated bundle index. Do not edit.
|
|
16881
17187
|
*/
|
|
16882
17188
|
|
|
16883
|
-
export { AddLinkDialogComponent, AddLinkMobileComponent, Alignment, BaseNoderComponent, 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_PARAGRAPH_STYLE, DEFAULT_TAB_WIDTH, DEFAULT_TEXT_STYLE, DEFAULT_TOOLBAR_STYLES, DefaultImageApiService, DestroyComponent, DocumentInfo, DocumentModel, DocumentNameModel, DocxModel, DomHelper, EditorComponent, EditorMobileToolbarComponent, EditorModule,
|
|
17189
|
+
export { AddLinkDialogComponent, AddLinkMobileComponent, Alignment, BaseNoderComponent, 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_PARAGRAPH_STYLE, 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, FormatStyleHelper, HYPERLINK_FONT_COLOR, HYPERLINK_HEADING_STYLE_ID, ImageApiService, ImageDataModel, LastDocumentRevisionModel, MenuDropdownsComponent, MenuDropdownsMobileComponent, Mode, NEW_LINE_MARKUP, NoderTranslateLoader, NumberingLevelModel, OperationModel, OperationsHistoryInfoModel, PageSetupComponent, PageType, ParagraphStyleModel, RevisionHelper, RevisionModel, TextFormatMobileComponent, TextStyleModel, ToolbarActionsComponent };
|
|
16884
17190
|
//# sourceMappingURL=talrace-ngx-noder.mjs.map
|