@talrace/ngx-noder 0.0.44 → 0.0.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/assets/i18n/noder.en.json +8 -1
  2. package/assets/i18n/noder.es.json +8 -1
  3. package/assets/i18n/noder.ru.json +8 -1
  4. package/fesm2022/talrace-ngx-noder.mjs +942 -291
  5. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  6. package/lib/apart-components/editor-ruler/editor-ruler.component.d.ts +9 -2
  7. package/lib/apart-components/editor-toolbar/shared/enums/tab-alignment.enum.d.ts +7 -0
  8. package/lib/apart-components/tab-settings-dialog/tab-settings-dialog.component.d.ts +33 -0
  9. package/lib/editor/components/editor.component.d.ts +4 -1
  10. package/lib/editor/components/external-element/external.component.d.ts +2 -0
  11. package/lib/editor/components/shared/abstract/base.component.d.ts +2 -2
  12. package/lib/editor/components/tab/tab.component.d.ts +1 -3
  13. package/lib/editor/components/tab/tab.helper.d.ts +2 -1
  14. package/lib/editor/content/display-data/display-data.d.ts +8 -1
  15. package/lib/editor/content/display-data/models/paragraph-info-added.model.d.ts +5 -0
  16. package/lib/editor/content/display-data/models/paragraph-info-content-changed.model.d.ts +7 -0
  17. package/lib/editor/content/display-data/models/paragraph-info-content-inserted.model.d.ts +7 -0
  18. package/lib/editor/content/display-data/models/paragraph-info.model.d.ts +1 -0
  19. package/lib/editor/content/display-data/models/paragraphs-infos-removed.model.d.ts +4 -0
  20. package/lib/editor/display/layers/grammar-highlight.layer.d.ts +12 -0
  21. package/lib/editor/display/render-changes.interface.d.ts +1 -0
  22. package/lib/editor/display/render-changes.model.d.ts +1 -0
  23. package/lib/editor/display/renderer.d.ts +6 -0
  24. package/lib/editor/display/virtual.renderer.d.ts +4 -0
  25. package/lib/editor/execution/edit.session.d.ts +1 -0
  26. package/lib/editor/execution/editor.d.ts +10 -1
  27. package/lib/editor/execution/regulator.service.d.ts +5 -1
  28. package/lib/editor/gadgets/grammar/grammar-checker.d.ts +21 -0
  29. package/lib/editor/gadgets/grammar/grammar-popup/grammar-popup.component.d.ts +16 -0
  30. package/lib/editor/gadgets/grammar/grammar.const.d.ts +1 -0
  31. package/lib/editor/gadgets/grammar/grammar.service.d.ts +25 -0
  32. package/lib/editor/interaction/editor.service.d.ts +21 -2
  33. package/lib/models/generated/form-interfaces/tab-setting-form.interface.d.ts +5 -0
  34. package/lib/models/generated/grammar-error.d.ts +9 -0
  35. package/lib/models/generated/paragraph-style.model.d.ts +2 -0
  36. package/lib/models/generated/tab-setting.model.d.ts +5 -0
  37. package/package.json +1 -1
  38. package/public-api.d.ts +1 -0
  39. package/src/_ngx-noder.theme.scss +7 -1
  40. package/src/lib/editor/gadgets/grammar/grammar-popup/_theme.scss +26 -0
  41. package/src/scss/base-editor.scss +6 -0
@@ -1,8 +1,10 @@
1
1
  import { ElementRef } from '@angular/core';
2
+ import { MatDialog } from '@angular/material/dialog';
2
3
  import { EditorService } from '../../editor/interaction/editor.service';
4
+ import { TabSettingModel } from '../../models/generated/tab-setting.model';
3
5
  import * as i0 from "@angular/core";
4
6
  export type RulerUnit = 'cm' | 'inch';
5
- type DragTarget = 'leftIndent' | 'first' | 'rightIndent' | 'leftMarginPageFormat' | 'rightMarginPageFormat';
7
+ type DragTarget = 'leftIndent' | 'first' | 'rightIndent' | 'leftMarginPageFormat' | 'rightMarginPageFormat' | 'tabs';
6
8
  interface Tick {
7
9
  position: number;
8
10
  originalPaddings: number;
@@ -14,6 +16,7 @@ export declare class EditorRulerComponent {
14
16
  rulerContainer: ElementRef<HTMLDivElement>;
15
17
  unit: import("@angular/core").InputSignal<RulerUnit>;
16
18
  readonly editorService: EditorService;
19
+ readonly dialog: MatDialog;
17
20
  readonly defaultPaddingCm = 2.5;
18
21
  readonly pageWidth$: import("rxjs").Observable<number>;
19
22
  private readonly snapInch;
@@ -30,6 +33,8 @@ export declare class EditorRulerComponent {
30
33
  readonly rightMarginPageFormatPx: import("@angular/core").WritableSignal<number>;
31
34
  readonly guideX: import("@angular/core").WritableSignal<number>;
32
35
  readonly showGuide: import("@angular/core").WritableSignal<boolean>;
36
+ readonly tabSettings: import("@angular/core").WritableSignal<TabSettingModel[]>;
37
+ draggableTabIndex: number;
33
38
  containerWidthPx: number;
34
39
  ticks: Tick[];
35
40
  private dragging;
@@ -37,6 +42,7 @@ export declare class EditorRulerComponent {
37
42
  constructor();
38
43
  afterViewInit(): void;
39
44
  onResize(): void;
45
+ onOpenDialog(): void;
40
46
  private recalcGeometry;
41
47
  private cmToPx;
42
48
  private pxToCm;
@@ -45,7 +51,8 @@ export declare class EditorRulerComponent {
45
51
  private snapPx;
46
52
  private buildTicksCm;
47
53
  private buildTicksInch;
48
- startDrag(ev: MouseEvent | TouchEvent, target: DragTarget): void;
54
+ addTab(event: MouseEvent | TouchEvent): void;
55
+ startDrag(event: MouseEvent | TouchEvent, target: DragTarget, tabIndex?: number): void;
49
56
  private readonly onMove;
50
57
  private readonly onUp;
51
58
  private getClientX;
@@ -0,0 +1,7 @@
1
+ export declare enum TabAlignment {
2
+ Left = 0,
3
+ Center = 1,
4
+ Right = 2,
5
+ Decimal = 3,
6
+ Bar = 4
7
+ }
@@ -0,0 +1,33 @@
1
+ import { FormArray, FormBuilder, FormGroup } from '@angular/forms';
2
+ import { MatDialogRef } from '@angular/material/dialog';
3
+ import { RulerUnit } from '../editor-ruler/editor-ruler.component';
4
+ import { TabAlignment } from '../editor-toolbar/shared/enums/tab-alignment.enum';
5
+ import { TabSettingFormInterface } from '../../models/generated/form-interfaces/tab-setting-form.interface';
6
+ import { TabSettingModel } from '../../models/generated/tab-setting.model';
7
+ import * as i0 from "@angular/core";
8
+ export interface TabDialogData {
9
+ tabs: TabSettingModel[];
10
+ unit: RulerUnit;
11
+ }
12
+ interface TabAlignmentExt {
13
+ title: string;
14
+ type: TabAlignment;
15
+ }
16
+ export declare class TabSettingsDialogComponent {
17
+ data: TabDialogData;
18
+ private ref;
19
+ private fb;
20
+ modal: boolean;
21
+ readonly alignments: TabAlignmentExt[];
22
+ form: FormGroup;
23
+ constructor(data: TabDialogData, ref: MatDialogRef<TabSettingsDialogComponent>, fb: FormBuilder);
24
+ tabsArray(): FormArray<FormGroup<TabSettingFormInterface>>;
25
+ onRemove(index: number): void;
26
+ onClose(): void;
27
+ onSave(): void;
28
+ onAddTab(): void;
29
+ private createTabGroup;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<TabSettingsDialogComponent, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<TabSettingsDialogComponent, "app-nod-tab-settings-dialog", never, {}, {}, never, never, true, never>;
32
+ }
33
+ export {};
@@ -9,6 +9,7 @@ import { Editor } from '../execution/editor';
9
9
  import { EditorSearchBarComponent } from '../../apart-components/editor-search-bar/editor-search-bar.component';
10
10
  import { EditorService } from '../interaction/editor.service';
11
11
  import { ExternalSidenavModel } from './external-element/models/external-sidenav.model';
12
+ import { OverlayService } from './shared/services/overlay.service';
12
13
  import { RegulatorService } from '../execution/regulator.service';
13
14
  import { RulerUnit } from '../../apart-components/editor-ruler/editor-ruler.component';
14
15
  import * as i0 from "@angular/core";
@@ -16,6 +17,7 @@ export declare class EditorComponent implements OnDestroy {
16
17
  private cdr;
17
18
  private componentService;
18
19
  private editorService;
20
+ private overlayService;
19
21
  private injector;
20
22
  private regulatorService;
21
23
  private commandsService;
@@ -38,11 +40,12 @@ export declare class EditorComponent implements OnDestroy {
38
40
  sidenavProperties: ExternalSidenavModel;
39
41
  readonly subscriptions: Subscription[];
40
42
  private sidenavComponentRef;
41
- constructor(cdr: ChangeDetectorRef, componentService: ComponentService, editorService: EditorService, injector: Injector, regulatorService: RegulatorService, commandsService: CommandsService, clipboard: Clipboard);
43
+ constructor(cdr: ChangeDetectorRef, componentService: ComponentService, editorService: EditorService, overlayService: OverlayService, injector: Injector, regulatorService: RegulatorService, commandsService: CommandsService, clipboard: Clipboard);
42
44
  ngOnDestroy(): void;
43
45
  initEditor(content: DocxModel): void;
44
46
  toggleSidenavSubscription(): Subscription;
45
47
  searchBarSubscription(): Subscription;
48
+ displayGrammarErrorPopupSubscription(): Subscription;
46
49
  removeSidenavComponent(): void;
47
50
  static ɵfac: i0.ɵɵFactoryDeclaration<EditorComponent, never>;
48
51
  static ɵcmp: i0.ɵɵComponentDeclaration<EditorComponent, "app-nod-editor", never, { "isMobile": { "alias": "isMobile"; "required": false; }; "externalElementTagNames": { "alias": "externalElementTagNames"; "required": false; }; "customPageWidth": { "alias": "customPageWidth"; "required": false; }; "content": { "alias": "content"; "required": false; }; "rulerUnit": { "alias": "rulerUnit"; "required": true; "isSignal": true; }; }, {}, never, never, false, never>;
@@ -6,6 +6,8 @@ import * as i0 from "@angular/core";
6
6
  export declare abstract class ExternalComponent extends BaseNoderComponent {
7
7
  content: ElementModel;
8
8
  protected abstract sidenavComponent: Type<ExternalSidenavInterface>;
9
+ protected focusSidenav: boolean;
10
+ protected skipSidenav(): boolean;
9
11
  focus(): void;
10
12
  blur(): void;
11
13
  static ɵfac: i0.ɵɵFactoryDeclaration<ExternalComponent, never>;
@@ -14,8 +14,8 @@ export declare abstract class BaseNoderComponent extends DestroyComponent {
14
14
  set insertIndex(val: number);
15
15
  contentWidth: number;
16
16
  generalProperties: GeneralPropertiesModel;
17
- height: number;
18
- width: number;
17
+ height: import("@angular/core").WritableSignal<number>;
18
+ width: import("@angular/core").WritableSignal<number>;
19
19
  protected _isFocused: boolean;
20
20
  get isFocused(): boolean;
21
21
  protected readonly cdr: ChangeDetectorRef;
@@ -2,12 +2,10 @@ import { BaseNoderComponent } from '../shared/abstract/base.component';
2
2
  import { TabModel } from '../../../models/generated/tab.model';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class NoderTabComponent extends BaseNoderComponent {
5
- width: number;
6
- height: number;
7
5
  get tab(): TabModel;
8
6
  set tab(val: TabModel);
9
7
  initialize(): void;
10
- protected calculateProperties(): void;
8
+ applySize(width: number, font: number): void;
11
9
  static ɵfac: i0.ɵɵFactoryDeclaration<NoderTabComponent, never>;
12
10
  static ɵcmp: i0.ɵɵComponentDeclaration<NoderTabComponent, "app-nod-tab", never, {}, {}, never, never, false, never>;
13
11
  }
@@ -1,3 +1,4 @@
1
+ import { TabSettingModel } from '../../../models/generated/tab-setting.model';
1
2
  export declare class TabHelper {
2
- static calculateTabWidth(rowWidth: number, defaultTabWidth: number): number;
3
+ static calculateTabWidth(rowWidth: number, defaultTabWidth: number, tabSettings: TabSettingModel[] | null): number;
3
4
  }
@@ -14,7 +14,11 @@ import { NumberingDataModel } from '../../gadgets/numbering/numbering-data.model
14
14
  import { PageFormat } from './page-format';
15
15
  import { PageFormatModel } from '../../../models/generated/page-format.model';
16
16
  import { Paragraph } from './paragraph';
17
+ import { ParagraphInfoAdded } from './models/paragraph-info-added.model';
18
+ import { ParagraphInfoContentChanged } from './models/paragraph-info-content-changed.model';
19
+ import { ParagraphInfoContentInserted } from './models/paragraph-info-content-inserted.model';
17
20
  import { ParagraphInfoModel } from './models/paragraph-info.model';
21
+ import { ParagraphInfosRemoved } from './models/paragraphs-infos-removed.model';
18
22
  import { Range } from '../../positioning/range';
19
23
  import { VisibleRange } from '../../display/visible-range.interface';
20
24
  export declare class DisplayData extends EventEmitting {
@@ -31,9 +35,12 @@ export declare class DisplayData extends EventEmitting {
31
35
  allPagesHeight: number;
32
36
  tabTokens: DisplayToken[];
33
37
  get maxPageWidth(): number;
38
+ private readonly ParagraphInfoChanges;
39
+ get ParagraphInfoChanges$(): import("rxjs").Observable<ParagraphInfoAdded | ParagraphInfoContentChanged | ParagraphInfoContentInserted | ParagraphInfosRemoved>;
40
+ private lastParagraphId;
34
41
  constructor(model: ContentType, generalProperties: GeneralPropertiesModel, sessionId: number, pageFormatModels: PageFormatModel[], pagesSpace: number, customComponents: ICustomComponents, customContentService: CustomContentService, editorService: EditorService);
35
42
  updateDataForModel(): void;
36
- recreatePageFormatsNotMainSession(width: number): void;
43
+ emitAllParagraphs(): void;
37
44
  insertText(position: CursorParagraph, text: string): CursorParagraph;
38
45
  removeRange(range: Range): void;
39
46
  getParagraphContent(index: number): string;
@@ -0,0 +1,5 @@
1
+ import { ParagraphInfoModel } from './paragraph-info.model';
2
+ export declare class ParagraphInfoAdded {
3
+ paragraph: ParagraphInfoModel;
4
+ constructor(paragraph: ParagraphInfoModel);
5
+ }
@@ -0,0 +1,7 @@
1
+ import { ParagraphInfoModel } from './paragraph-info.model';
2
+ export declare class ParagraphInfoContentChanged {
3
+ paragraph: ParagraphInfoModel;
4
+ index: number;
5
+ length: number;
6
+ constructor(paragraph: ParagraphInfoModel, index: number, length: number);
7
+ }
@@ -0,0 +1,7 @@
1
+ import { ParagraphInfoModel } from './paragraph-info.model';
2
+ export declare class ParagraphInfoContentInserted {
3
+ paragraph: ParagraphInfoModel;
4
+ index: number;
5
+ length: number;
6
+ constructor(paragraph: ParagraphInfoModel, index: number, length: number);
7
+ }
@@ -5,5 +5,6 @@ export declare class ParagraphInfoModel {
5
5
  paragraphSettings: Paragraph;
6
6
  startIndex: number;
7
7
  lineNumber: number;
8
+ id: number;
8
9
  constructor(fields?: Partial<ParagraphInfoModel>);
9
10
  }
@@ -0,0 +1,4 @@
1
+ export declare class ParagraphInfosRemoved {
2
+ ids: number[];
3
+ constructor(id: number[]);
4
+ }
@@ -0,0 +1,12 @@
1
+ import { EditSession } from '../../execution/edit.session';
2
+ import { GrammarError } from '../../../models/generated/grammar-error';
3
+ import { HighlightLayer } from './highlight.layer';
4
+ import { ILayerConfig } from './layer.config';
5
+ export declare class GrammarHighlightLayer extends HighlightLayer {
6
+ private readonly className;
7
+ private readonly errorsByParagraph;
8
+ constructor(parentEl: HTMLElement, cssClass: string, session: EditSession);
9
+ update(config: ILayerConfig): void;
10
+ setErrors(paragraphId: number, errors: GrammarError[]): void;
11
+ removeParagraphHighlights(paragraphId: number): void;
12
+ }
@@ -9,5 +9,6 @@ export interface IRenderChanges {
9
9
  text?: boolean;
10
10
  dragAndDrop?: boolean;
11
11
  search?: boolean;
12
+ grammar?: boolean;
12
13
  visibilityChanged?: boolean;
13
14
  }
@@ -6,6 +6,7 @@ export declare class RenderChangesModel implements IRenderChanges {
6
6
  marker: boolean;
7
7
  selection: boolean;
8
8
  search: boolean;
9
+ grammar: boolean;
9
10
  scroll: boolean;
10
11
  size: boolean;
11
12
  text: boolean;
@@ -3,6 +3,8 @@ import { CursorParagraph } from '../positioning/cursor-paragraph';
3
3
  import { CustomElementInfo } from './custom-element-info.model';
4
4
  import { EditSession } from '../execution/edit.session';
5
5
  import { EventEmitting } from '../core/event-emitting';
6
+ import { GrammarError } from '../../models/generated/grammar-error';
7
+ import { GrammarHighlightLayer } from './layers/grammar-highlight.layer';
6
8
  import { ILayerConfig } from './layers/layer.config';
7
9
  import { Range } from '../positioning/range';
8
10
  import { RenderChangesModel } from './render-changes.model';
@@ -19,6 +21,7 @@ export declare class Renderer extends EventEmitting {
19
21
  selectionLayer: SelectionLayer;
20
22
  dragAndDropSelectionLayer: SelectionLayer;
21
23
  searchHighlightLayer: SearchHighlightLayer;
24
+ grammarHighlightLayer: GrammarHighlightLayer;
22
25
  loop: RenderLoop;
23
26
  textarea: HTMLElement;
24
27
  layerConfig: ILayerConfig;
@@ -39,6 +42,8 @@ export declare class Renderer extends EventEmitting {
39
42
  updateSearchHighlights(ranges: Range[]): void;
40
43
  updateCustomElementHighlights(ranges: CustomElementInfo[]): void;
41
44
  updateActiveSearchHighlight(active: Range | CustomElementInfo): void;
45
+ updateGrammarHighlights(paragraphId: number, errors: GrammarError[]): void;
46
+ removeGrammarHighlights(paragraphId: number): void;
42
47
  updateDragAndDropSelection(range: Range | null): void;
43
48
  clearDragAndDropSelection(): void;
44
49
  setVisibility(isVisible: boolean): void;
@@ -66,6 +71,7 @@ export declare class Renderer extends EventEmitting {
66
71
  renderCursor(): void;
67
72
  renderSelection(): void;
68
73
  renderSearchHighlights(): void;
74
+ renderGrammarHighlights(): void;
69
75
  renderDragAndDropSelection(): void;
70
76
  private computeLayerConfig;
71
77
  private pagesCountChangedHandler;
@@ -3,6 +3,7 @@ import { CursorParagraph } from '../positioning/cursor-paragraph';
3
3
  import { CustomElementInfo } from './custom-element-info.model';
4
4
  import { EdgesLayer } from './layers/edges.layer';
5
5
  import { EditSession } from '../execution/edit.session';
6
+ import { GrammarError } from '../../models/generated/grammar-error';
6
7
  import { ILayerConfig } from './layers/layer.config';
7
8
  import { PagesLayer } from './layers/pages.layer';
8
9
  import { Range } from '../positioning/range';
@@ -50,6 +51,8 @@ export declare class VirtualRenderer {
50
51
  updateSearchHighlights(ranges: Range[]): void;
51
52
  updateCustomElementHighlights(ranges: CustomElementInfo[]): void;
52
53
  updateActiveSearchHighlight(active: Range | CustomElementInfo): void;
54
+ updateGrammarHighlights(paragraphIndex: number, errors: GrammarError[]): void;
55
+ removeGrammarHighlights(paragraphIndex: number): void;
53
56
  updateDragAndDropSelection(range: Range): void;
54
57
  clearDragAndDropSelection(): void;
55
58
  /**
@@ -81,5 +84,6 @@ export declare class VirtualRenderer {
81
84
  private renderCursor;
82
85
  private renderSelection;
83
86
  private renderSearchHighlights;
87
+ private renderGrammarHighlights;
84
88
  private renderDragAndDropSelection;
85
89
  }
@@ -55,6 +55,7 @@ export declare class EditSession {
55
55
  nonTokenRe: RegExp;
56
56
  get scrollTop(): number;
57
57
  get scrollBarHeight(): number;
58
+ get paragraphInfoChanges$(): import("rxjs").Observable<import("../content/display-data/models/paragraph-info-added.model").ParagraphInfoAdded | import("../content/display-data/models/paragraph-info-content-changed.model").ParagraphInfoContentChanged | import("../content/display-data/models/paragraph-info-content-inserted.model").ParagraphInfoContentInserted | import("../content/display-data/models/paragraphs-infos-removed.model").ParagraphInfosRemoved>;
58
59
  constructor(displayData: DisplayData, sessionId: number, customContentService: CustomContentService, model: ContentType, selection: Selection, generalProperties: GeneralPropertiesModel, editorService: EditorService, customComponents: ICustomComponents, type: 'cell' | 'edge' | 'main' | 'cellWithinEdge', scrollBar?: ScrollBar, edgeType?: EdgeType);
59
60
  destroy(): void;
60
61
  getRowLength(row: number): number;
@@ -12,6 +12,8 @@ import { EdgeType } from '../components/edges/edge-type.enum';
12
12
  import { EditorService } from '../interaction/editor.service';
13
13
  import { EditSession } from './edit.session';
14
14
  import { ElementDataModel } from '../components/external-element/models/element-data.model';
15
+ import { GrammarChecker } from '../gadgets/grammar/grammar-checker';
16
+ import { GrammarError } from '../../models/generated/grammar-error';
15
17
  import { ImageDataModel } from '../../models/generated/image-data.model';
16
18
  import { ImageModel } from '../../models/generated/image.model';
17
19
  import { InputHandler } from '../interaction/input.handler';
@@ -28,6 +30,7 @@ import { MoveRangeModel } from '../../models/generated/move-range.model';
28
30
  import { NumberingLevelModel } from '../../models/generated/numbering-level.model';
29
31
  import { Operation } from '../gadgets/history/operation.type';
30
32
  import { OperationHistory } from '../gadgets/history/operation-history';
33
+ import { OverlayService } from '../components/shared/services/overlay.service';
31
34
  import { PageFormatModel } from '../../models/generated/page-format.model';
32
35
  import { PageType } from '../components/edges/page-type.enum';
33
36
  import { ParagraphModel } from '../../models/generated/paragraph.model';
@@ -49,6 +52,7 @@ export declare class Editor {
49
52
  private model;
50
53
  private container;
51
54
  private editorService;
55
+ private overlayService;
52
56
  private regulatorService;
53
57
  private commandsService;
54
58
  private clipboard;
@@ -67,6 +71,7 @@ export declare class Editor {
67
71
  get renderer(): Renderer | VirtualRenderer;
68
72
  get isViewOnly(): boolean;
69
73
  get targets(): TargetModel[];
74
+ get grammarChecker(): GrammarChecker;
70
75
  selection: Selection;
71
76
  mouseHandler: MouseHandler;
72
77
  touchHandler: TouchHandler;
@@ -80,7 +85,7 @@ export declare class Editor {
80
85
  private textInput;
81
86
  private clipboardData;
82
87
  private isRerenderSubscriptionOpen;
83
- constructor(model: DocxModel, container: ElementRef<HTMLElement>, editorService: EditorService, regulatorService: RegulatorService, commandsService: CommandsService, clipboard: Clipboard, externalElementTagNames: string[], customPageWidth?: number);
88
+ constructor(model: DocxModel, container: ElementRef<HTMLElement>, editorService: EditorService, overlayService: OverlayService, regulatorService: RegulatorService, commandsService: CommandsService, clipboard: Clipboard, externalElementTagNames: string[], customPageWidth?: number);
84
89
  destroy(): void;
85
90
  selectPageDown(): void;
86
91
  selectPageUp(): void;
@@ -205,6 +210,7 @@ export declare class Editor {
205
210
  applyPageFormat(model: PageFormatModel): void;
206
211
  insertPageFormat(model: PageFormatModel): void;
207
212
  applyDocumentPageFormat(model: PageFormatModel): void;
213
+ applyGrammarSuggestion(error: GrammarError, paragraphIndex: number, suggestionIndex: number): void;
208
214
  receiveTextStyleSubscription(): Subscription;
209
215
  viewOnlyModeSubscription(): Subscription;
210
216
  applyLeftMarginPageFormatSubscription(): Subscription;
@@ -214,6 +220,8 @@ export declare class Editor {
214
220
  applyDocumentPageFormatSubscription(): Subscription;
215
221
  searchOptionSubscriptions(): Subscription[];
216
222
  replaceSubscription(): Subscription[];
223
+ grammarReplaceSubscription(): Subscription;
224
+ ignoreGrammarErrorSubscription(): Subscription;
217
225
  setTextStylesSubscription(): Subscription;
218
226
  setParagraphStylesSubscription(): Subscription;
219
227
  setNumberingTemplateTypeSubscription(): Subscription;
@@ -221,6 +229,7 @@ export declare class Editor {
221
229
  applyFirstLinePositionSubscription(): Subscription;
222
230
  applyRightIndentParagraphSubscription(): Subscription;
223
231
  applyLeftIndentParagraphSubscription(): Subscription;
232
+ applyTabSettingsSubscription(): Subscription;
224
233
  setImageStyleSubscription(): Subscription;
225
234
  rerenderSubscription(): Subscription;
226
235
  createCustomComponentSubscription(): Subscription;
@@ -5,6 +5,8 @@ import { DocxModel } from '../../models/generated/docx.model';
5
5
  import { EditorService } from '../interaction/editor.service';
6
6
  import { EditSession } from './edit.session';
7
7
  import { GeneralPropertiesModel } from '../content/display-data/general-properties.model';
8
+ import { GrammarChecker } from '../gadgets/grammar/grammar-checker';
9
+ import { GrammarService } from '../gadgets/grammar/grammar.service';
8
10
  import { MarginModel } from '../content/margin.model';
9
11
  import { NoderEdgeComponent } from '../components/edges/edge.component';
10
12
  import { NoderTableCellComponent } from '../components/table/components/table-cell.component';
@@ -17,12 +19,14 @@ export declare class RegulatorService {
17
19
  private customContentService;
18
20
  private editorService;
19
21
  private componentService;
22
+ private grammarService;
20
23
  mainSession: SessionModel;
21
24
  sessions: SessionModel[];
22
25
  currentSession: SessionModel;
23
26
  selection: Selection;
24
27
  sessionIdIncrement: number;
25
- constructor(customContentService: CustomContentService, editorService: EditorService, componentService: ComponentService);
28
+ readonly grammarChecker: GrammarChecker;
29
+ constructor(customContentService: CustomContentService, editorService: EditorService, componentService: ComponentService, grammarService: GrammarService);
26
30
  addMainSession(model: DocxModel, scalingRatio: number, container: ElementRef<HTMLElement>): void;
27
31
  addCellSession(table: TableModel, margins: MarginModel, component: NoderTableCellComponent, properties: GeneralPropertiesModel): SessionModel;
28
32
  addEdgeSession(component: NoderEdgeComponent): SessionModel;
@@ -0,0 +1,21 @@
1
+ import { GrammarError } from '../../../models/generated/grammar-error';
2
+ import { GrammarService } from './grammar.service';
3
+ import { SessionModel } from '../../../editor/execution/targeting/session.model';
4
+ export declare class GrammarChecker {
5
+ private readonly grammarService;
6
+ private readonly ignoreKey;
7
+ private readonly paragraphSessionMap;
8
+ private readonly paragraphErrorMap;
9
+ private readonly sessionSubscriptions;
10
+ private readonly sessions;
11
+ private readonly ignoreList;
12
+ private readonly checkResultsSubscription;
13
+ constructor(grammarService: GrammarService);
14
+ registerSession(session: SessionModel): void;
15
+ unregisterSession(sessionId: number): void;
16
+ getError(sessionId: number, paragraphId: number, cursorIndex: number): GrammarError | null;
17
+ addErrorToIgnoreList(grammarError: GrammarError): void;
18
+ filterErrors(grammarErrors: GrammarError[]): GrammarError[];
19
+ destroy(): void;
20
+ private adjustHighlights;
21
+ }
@@ -0,0 +1,16 @@
1
+ import { EditorService } from '../../../interaction/editor.service';
2
+ import { GrammarError } from '../../../../models/generated/grammar-error';
3
+ import { OverlayService } from '../../../components/shared/services/overlay.service';
4
+ import * as i0 from "@angular/core";
5
+ export declare class GrammarPopupComponent {
6
+ private readonly editorService;
7
+ private readonly overlayService;
8
+ hostHeight: string;
9
+ error: GrammarError;
10
+ paragraphIndex: number;
11
+ constructor(editorService: EditorService, overlayService: OverlayService);
12
+ onSuggestionClick(index: number): void;
13
+ onIgnoreClick(): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<GrammarPopupComponent, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<GrammarPopupComponent, "app-nod-grammar-popup", never, { "error": { "alias": "error"; "required": false; }; "paragraphIndex": { "alias": "paragraphIndex"; "required": false; }; }, {}, never, never, true, never>;
16
+ }
@@ -0,0 +1 @@
1
+ export declare const POPUP_HEIGHT = 150;
@@ -0,0 +1,25 @@
1
+ import { GrammarError } from '../../../models/generated/grammar-error';
2
+ import { ParagraphInfoModel } from '../../../editor/content/display-data/models/paragraph-info.model';
3
+ import * as i0 from "@angular/core";
4
+ export declare class GrammarService {
5
+ private readonly debounceTime;
6
+ private readonly paragraphSubjects;
7
+ private readonly debounceSubscriptions;
8
+ private readonly grammarCheckRequests;
9
+ get grammarCheckRequests$(): import("rxjs").Observable<{
10
+ id: string;
11
+ paragraph: string;
12
+ }>;
13
+ private readonly grammarCheckResults;
14
+ get grammarCheckResults$(): import("rxjs").Observable<{
15
+ paragraphId: string;
16
+ errors: GrammarError[];
17
+ }>;
18
+ updateParagraphContent(sessionId: number, paragraph: ParagraphInfoModel): void;
19
+ removeParagraph(sessionId: number, paragraphId: number): void;
20
+ publishGrammarCheckResults(paragraphId: string, errors: GrammarError[]): void;
21
+ destroy(): void;
22
+ private registerParagraph;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<GrammarService, never>;
24
+ static ɵprov: i0.ɵɵInjectableDeclaration<GrammarService>;
25
+ }
@@ -6,6 +6,7 @@ import { EdgeType } from '../components/edges/edge-type.enum';
6
6
  import { ElementDataModel } from '../components/external-element/models/element-data.model';
7
7
  import { ElementModel } from '../../models/generated/element.model';
8
8
  import { ExternalSidenavInterface } from '../components/external-element/external-sidenav.interface';
9
+ import { GrammarError } from '../../models/generated/grammar-error';
9
10
  import { ImageDataModel } from '../../models/generated/image-data.model';
10
11
  import { ImageModel } from '../../models/generated/image.model';
11
12
  import { IToolbarStyles } from '../content/display-data/toolbar-styles.interface';
@@ -15,6 +16,7 @@ import { PageFormatModel } from '../../models/generated/page-format.model';
15
16
  import { PageType } from '../components/edges/page-type.enum';
16
17
  import { ParagraphStyleModel } from '../../models/generated/paragraph-style.model';
17
18
  import { ResizeTableColumnsModel } from '../../models/generated/resize-table-columns.model';
19
+ import { TabSettingModel } from '../../models/generated/tab-setting.model';
18
20
  import { TextStyleModel } from '../../models/generated/text-style.model';
19
21
  import * as i0 from "@angular/core";
20
22
  export declare class EditorService {
@@ -38,9 +40,20 @@ export declare class EditorService {
38
40
  get toggleSidenav$(): Observable<{
39
41
  open: boolean;
40
42
  component: Type<any>;
43
+ focus: boolean;
41
44
  data?: object;
42
45
  }>;
43
46
  private readonly _toggleSidenav$;
47
+ get displayGrammarError$(): Observable<GrammarError>;
48
+ private readonly _displayGrammarError$;
49
+ get applyGrammarSuggestion$(): Observable<{
50
+ error: GrammarError;
51
+ suggestionIndex: number;
52
+ paragraphIndex: number;
53
+ }>;
54
+ private readonly _applyGrammarSuggestion$;
55
+ get ignoreGrammarError$(): Observable<GrammarError>;
56
+ private readonly _ignoreGrammarError$;
44
57
  get displaySearchBar$(): Observable<boolean>;
45
58
  private readonly _displaySearchBar$;
46
59
  get searchTerm$(): Observable<string>;
@@ -199,10 +212,13 @@ export declare class EditorService {
199
212
  private readonly _firstLinePosition$;
200
213
  get leftIndentParagraph$(): Observable<number>;
201
214
  private readonly _leftIndentParagraph$;
215
+ get tabSettings$(): Observable<TabSettingModel[]>;
216
+ private readonly _tabSettings$;
202
217
  get rightIndentParagraph$(): Observable<number>;
203
218
  private readonly _rightIndentParagraph$;
204
219
  get paragraphStyle$(): Observable<ParagraphStyleModel>;
205
220
  private readonly _paragraphStyle$;
221
+ tabSettings(value: TabSettingModel[]): void;
206
222
  applyFirstLinePosition(value: number): void;
207
223
  applyLeftIndentParagraph(value: number): void;
208
224
  applyRightIndentParagraph(value: number): void;
@@ -231,8 +247,8 @@ export declare class EditorService {
231
247
  insertLink(text: string, link: string): void;
232
248
  endMousePress(): void;
233
249
  disableSelection(): void;
234
- openElementSidenav(component: Type<ExternalSidenavInterface>, model: ElementModel, contentWidth: number): void;
235
- openSidenav(component: Type<any>): void;
250
+ openElementSidenav(component: Type<ExternalSidenavInterface>, model: ElementModel, contentWidth: number, focus: boolean): void;
251
+ openSidenav(component: Type<any>, focus: boolean): void;
236
252
  closeSidenav(): void;
237
253
  changedTableSize(insertIndex: number, sessionId: number): void;
238
254
  changedEdgeSize(edgeType: EdgeType, pageType: PageType, pageWidth: number, pageHeight: number): void;
@@ -271,6 +287,9 @@ export declare class EditorService {
271
287
  setDisplaySearchBar(show: boolean): void;
272
288
  setSearchResultCount(count: number): void;
273
289
  setCurrentSearchResultIndex(index: number): void;
290
+ showGrammarError(error: GrammarError): void;
291
+ applyGrammarSuggestion(error: GrammarError, suggestionIndex: number, paragraphIndex: number): void;
292
+ ignoreGrammarSuggestion(error: GrammarError): void;
274
293
  static ɵfac: i0.ɵɵFactoryDeclaration<EditorService, never>;
275
294
  static ɵprov: i0.ɵɵInjectableDeclaration<EditorService>;
276
295
  }
@@ -0,0 +1,5 @@
1
+ import { FormControl } from '@angular/forms';
2
+ export interface TabSettingFormInterface {
3
+ alignment: any;
4
+ position: FormControl<number>;
5
+ }
@@ -0,0 +1,9 @@
1
+ export declare class GrammarError {
2
+ length: number;
3
+ message: string;
4
+ offset: number;
5
+ replacements: string[];
6
+ text: string;
7
+ type: string;
8
+ constructor(fields?: Partial<GrammarError>);
9
+ }
@@ -1,3 +1,4 @@
1
+ import { TabSettingModel } from './tab-setting.model';
1
2
  export declare class ParagraphStyleModel {
2
3
  afterAutospacing: boolean;
3
4
  alignment: any;
@@ -14,5 +15,6 @@ export declare class ParagraphStyleModel {
14
15
  numberingLevel: number;
15
16
  spaceAfter: number;
16
17
  spaceBefore: number;
18
+ tabSettings: TabSettingModel[];
17
19
  constructor(fields?: Partial<ParagraphStyleModel>);
18
20
  }
@@ -0,0 +1,5 @@
1
+ export declare class TabSettingModel {
2
+ alignment: any;
3
+ position: number;
4
+ constructor(fields?: Partial<TabSettingModel>);
5
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talrace/ngx-noder",
3
- "version": "0.0.44",
3
+ "version": "0.0.46",
4
4
  "license": "MIT",
5
5
  "peerDependencies": {
6
6
  "@angular/common": "^19.0.5",
package/public-api.d.ts CHANGED
@@ -16,6 +16,7 @@ export * from './lib/editor/components/shared/abstract/base.component';
16
16
  export * from './lib/editor/components/shared/abstract/destroy.component';
17
17
  export * from './lib/editor/interaction/editor.service';
18
18
  export * from './lib/editor/gadgets/history/operations-history-info.model';
19
+ export * from './lib/editor/gadgets/grammar/grammar.service';
19
20
  export * from './lib/editor/operations/enums/command-type.enum';
20
21
  export * from './lib/editor/components/editor.component';
21
22
  export * from './lib/editor/editor.module';