@talrace/ngx-noder 0.0.45 → 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 (31) hide show
  1. package/assets/i18n/noder.en.json +1 -0
  2. package/assets/i18n/noder.es.json +1 -0
  3. package/assets/i18n/noder.ru.json +1 -0
  4. package/fesm2022/talrace-ngx-noder.mjs +656 -193
  5. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  6. package/lib/editor/components/editor.component.d.ts +4 -1
  7. package/lib/editor/content/display-data/display-data.d.ts +8 -0
  8. package/lib/editor/content/display-data/models/paragraph-info-added.model.d.ts +5 -0
  9. package/lib/editor/content/display-data/models/paragraph-info-content-changed.model.d.ts +7 -0
  10. package/lib/editor/content/display-data/models/paragraph-info-content-inserted.model.d.ts +7 -0
  11. package/lib/editor/content/display-data/models/paragraph-info.model.d.ts +1 -0
  12. package/lib/editor/content/display-data/models/paragraphs-infos-removed.model.d.ts +4 -0
  13. package/lib/editor/display/layers/grammar-highlight.layer.d.ts +12 -0
  14. package/lib/editor/display/render-changes.interface.d.ts +1 -0
  15. package/lib/editor/display/render-changes.model.d.ts +1 -0
  16. package/lib/editor/display/renderer.d.ts +6 -0
  17. package/lib/editor/display/virtual.renderer.d.ts +4 -0
  18. package/lib/editor/execution/edit.session.d.ts +1 -0
  19. package/lib/editor/execution/editor.d.ts +9 -1
  20. package/lib/editor/execution/regulator.service.d.ts +5 -1
  21. package/lib/editor/gadgets/grammar/grammar-checker.d.ts +21 -0
  22. package/lib/editor/gadgets/grammar/grammar-popup/grammar-popup.component.d.ts +16 -0
  23. package/lib/editor/gadgets/grammar/grammar.const.d.ts +1 -0
  24. package/lib/editor/gadgets/grammar/grammar.service.d.ts +25 -0
  25. package/lib/editor/interaction/editor.service.d.ts +14 -0
  26. package/lib/models/generated/grammar-error.d.ts +9 -0
  27. package/package.json +1 -1
  28. package/public-api.d.ts +1 -0
  29. package/src/_ngx-noder.theme.scss +7 -1
  30. package/src/lib/editor/gadgets/grammar/grammar-popup/_theme.scss +26 -0
  31. package/src/scss/base-editor.scss +6 -0
@@ -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>;
@@ -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,8 +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;
43
+ emitAllParagraphs(): void;
36
44
  insertText(position: CursorParagraph, text: string): CursorParagraph;
37
45
  removeRange(range: Range): void;
38
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;
@@ -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';
@@ -43,6 +44,16 @@ export declare class EditorService {
43
44
  data?: object;
44
45
  }>;
45
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$;
46
57
  get displaySearchBar$(): Observable<boolean>;
47
58
  private readonly _displaySearchBar$;
48
59
  get searchTerm$(): Observable<string>;
@@ -276,6 +287,9 @@ export declare class EditorService {
276
287
  setDisplaySearchBar(show: boolean): void;
277
288
  setSearchResultCount(count: number): void;
278
289
  setCurrentSearchResultIndex(index: number): void;
290
+ showGrammarError(error: GrammarError): void;
291
+ applyGrammarSuggestion(error: GrammarError, suggestionIndex: number, paragraphIndex: number): void;
292
+ ignoreGrammarSuggestion(error: GrammarError): void;
279
293
  static ɵfac: i0.ɵɵFactoryDeclaration<EditorService, never>;
280
294
  static ɵprov: i0.ɵɵInjectableDeclaration<EditorService>;
281
295
  }
@@ -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
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@talrace/ngx-noder",
3
- "version": "0.0.45",
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';
@@ -4,11 +4,12 @@
4
4
  @use 'lib/apart-components/editor-title-mobile/editor-title-mobile.theme' as *;
5
5
  @use 'lib/apart-components/editor-title/editor-title.theme' as *;
6
6
  @use 'lib/apart-components/editor-toolbar/theme' as *;
7
- @use 'lib/apart-components//editor-search-bar/theme' as *;
7
+ @use 'lib/apart-components/editor-search-bar/theme' as *;
8
8
  @use 'lib/apart-components/editor-ruler/theme' as *;
9
9
  @use 'lib/apart-components/insert-table-mobile/insert-table-mobile.theme' as *;
10
10
  @use 'lib/apart-components/insert-table/insert-table.theme' as *;
11
11
  @use 'lib/apart-components/text-format-mobile/text-format-mobile.theme' as *;
12
+ @use 'lib/editor/gadgets/grammar/grammar-popup/theme' as *;
12
13
  @use 'lib/editor/theme' as *;
13
14
 
14
15
  @mixin ngx-noder-theme($theme) {
@@ -19,6 +20,7 @@
19
20
  @include ngx-noder-toolbar-theme($theme);
20
21
  @include ngx-noder-insert-table-theme($theme);
21
22
  @include ngx-noder-editor-theme($theme);
23
+ @include ngx-noder-grammar-theme($theme);
22
24
  }
23
25
 
24
26
  @mixin ngx-noder-editor-theme($theme) {
@@ -39,6 +41,10 @@
39
41
  @include confirm-dialog-theme($theme);
40
42
  }
41
43
 
44
+ @mixin ngx-noder-grammar-theme($theme) {
45
+ @include grammar-popup-theme($theme);
46
+ }
47
+
42
48
  @mixin ngx-noder-title-theme($theme) {
43
49
  @include editor-title-component-theme($theme);
44
50
  @include editor-title-mobile-component-theme($theme);
@@ -0,0 +1,26 @@
1
+ @use '@angular/material' as mat;
2
+ @use 'sass:map';
3
+
4
+ @mixin grammar-popup-theme($theme) {
5
+ app-nod-grammar-popup {
6
+ background: map.get($theme, background-palette, dialog);
7
+
8
+ .message {
9
+ color: map.get($theme, foreground-palette, text);
10
+ border-bottom-color: map.get($theme, foreground-palette, noder-divider);
11
+ }
12
+
13
+ .suggestion {
14
+ color: map.get($theme, foreground-palette, grammar-suggestion);
15
+ }
16
+
17
+ .ignore {
18
+ color: map.get($theme, foreground-palette, secondary-text);
19
+
20
+ &:hover {
21
+ background-color: map.get($theme, foreground-palette, secondary-text);
22
+ color: map.get($theme, foreground-palette, noder-editor-header-text);
23
+ }
24
+ }
25
+ }
26
+ }
@@ -282,6 +282,12 @@ div.ngx-colors-overlay.noder-color-picker-overlay .opened .colors {
282
282
  }
283
283
  }
284
284
 
285
+ &.grammar-highlight {
286
+ >.noder-highlight {
287
+ border-bottom: dashed rgb(255, 18, 18) 1px;
288
+ }
289
+ }
290
+
285
291
  &.text-search-highlight {
286
292
  >.noder-highlight {
287
293
  background-color: rgb(255, 255, 0, 0.4);