@flogeez/angular-tiptap-editor 2.4.0 → 2.4.1

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 (104) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/esm2022/flogeez-angular-tiptap-editor.mjs +5 -0
  3. package/esm2022/lib/ate-editor.provider.mjs +38 -0
  4. package/esm2022/lib/components/bubble-menus/base/ate-base-bubble-menu.mjs +207 -0
  5. package/esm2022/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.mjs +133 -0
  6. package/esm2022/lib/components/bubble-menus/color/ate-color-bubble-menu.component.mjs +365 -0
  7. package/esm2022/lib/components/bubble-menus/image/ate-image-bubble-menu.component.mjs +226 -0
  8. package/esm2022/lib/components/bubble-menus/link/ate-link-bubble-menu.component.mjs +247 -0
  9. package/esm2022/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.mjs +121 -0
  10. package/esm2022/lib/components/bubble-menus/table/ate-table-bubble-menu.component.mjs +266 -0
  11. package/esm2022/lib/components/bubble-menus/text/ate-bubble-menu.component.mjs +294 -0
  12. package/esm2022/lib/components/color-picker/ate-color-picker.component.mjs +122 -0
  13. package/esm2022/lib/components/edit-toggle/ate-edit-toggle.component.mjs +42 -0
  14. package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +953 -0
  15. package/esm2022/lib/components/slash-commands/ate-slash-commands.component.mjs +329 -0
  16. package/esm2022/lib/components/toolbar/ate-toolbar.component.mjs +531 -0
  17. package/esm2022/lib/components/ui/ate-button.component.mjs +90 -0
  18. package/esm2022/lib/components/ui/ate-separator.component.mjs +31 -0
  19. package/esm2022/lib/config/ate-editor.config.mjs +76 -0
  20. package/esm2022/lib/config/ate-global-config.token.mjs +6 -0
  21. package/esm2022/lib/config/ate-slash-commands.config.mjs +130 -0
  22. package/esm2022/lib/directives/ate-noop-value-accessor.directive.mjs +40 -0
  23. package/esm2022/lib/extensions/ate-link-click-behavior.extension.mjs +32 -0
  24. package/esm2022/lib/extensions/ate-resizable-image.extension.mjs +270 -0
  25. package/esm2022/lib/extensions/ate-table.extension.mjs +29 -0
  26. package/esm2022/lib/extensions/ate-tiptap-state.extension.mjs +85 -0
  27. package/esm2022/lib/extensions/ate-upload-progress.extension.mjs +195 -0
  28. package/esm2022/lib/extensions/calculators/ate-discovery.calculator.mjs +62 -0
  29. package/esm2022/lib/extensions/calculators/ate-image.calculator.mjs +8 -0
  30. package/esm2022/lib/extensions/calculators/ate-marks.calculator.mjs +75 -0
  31. package/esm2022/lib/extensions/calculators/ate-selection.calculator.mjs +35 -0
  32. package/esm2022/lib/extensions/calculators/ate-structure.calculator.mjs +34 -0
  33. package/esm2022/lib/extensions/calculators/ate-table.calculator.mjs +38 -0
  34. package/esm2022/lib/models/ate-bubble-menu.model.mjs +49 -0
  35. package/esm2022/lib/models/ate-editor-config.model.mjs +2 -0
  36. package/esm2022/lib/models/ate-editor-state.model.mjs +90 -0
  37. package/esm2022/lib/models/ate-image.model.mjs +2 -0
  38. package/esm2022/lib/models/ate-toolbar.model.mjs +35 -0
  39. package/esm2022/lib/node-view/ate-angular-node-view.mjs +97 -0
  40. package/esm2022/lib/node-view/ate-injector.registry.mjs +16 -0
  41. package/esm2022/lib/node-view/ate-node-view.factory.mjs +125 -0
  42. package/esm2022/lib/node-view/ate-node-view.models.mjs +2 -0
  43. package/esm2022/lib/node-view/ate-node-view.renderer.mjs +154 -0
  44. package/esm2022/lib/node-view/ate-register-angular-component.mjs +49 -0
  45. package/esm2022/lib/services/ate-color-picker.service.mjs +193 -0
  46. package/esm2022/lib/services/ate-editor-commands.service.mjs +465 -0
  47. package/esm2022/lib/services/ate-i18n.service.mjs +410 -0
  48. package/esm2022/lib/services/ate-image.service.mjs +368 -0
  49. package/esm2022/lib/services/ate-link.service.mjs +97 -0
  50. package/esm2022/lib/utils/ate-color.utils.mjs +60 -0
  51. package/esm2022/public-api.mjs +93 -0
  52. package/fesm2022/flogeez-angular-tiptap-editor.mjs +313 -346
  53. package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
  54. package/index.d.ts +3 -1673
  55. package/lib/ate-editor.provider.d.ts +21 -0
  56. package/lib/components/bubble-menus/base/ate-base-bubble-menu.d.ts +71 -0
  57. package/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.d.ts +60 -0
  58. package/lib/components/bubble-menus/color/ate-color-bubble-menu.component.d.ts +77 -0
  59. package/lib/components/bubble-menus/image/ate-image-bubble-menu.component.d.ts +52 -0
  60. package/lib/components/bubble-menus/link/ate-link-bubble-menu.component.d.ts +55 -0
  61. package/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.d.ts +12 -0
  62. package/lib/components/bubble-menus/table/ate-table-bubble-menu.component.d.ts +24 -0
  63. package/lib/components/bubble-menus/text/ate-bubble-menu.component.d.ts +53 -0
  64. package/lib/components/color-picker/ate-color-picker.component.d.ts +54 -0
  65. package/lib/components/edit-toggle/ate-edit-toggle.component.d.ts +13 -0
  66. package/lib/components/editor/angular-tiptap-editor.component.d.ts +235 -0
  67. package/lib/components/slash-commands/ate-slash-commands.component.d.ts +43 -0
  68. package/lib/components/toolbar/ate-toolbar.component.d.ts +47 -0
  69. package/lib/components/ui/ate-button.component.d.ts +25 -0
  70. package/lib/components/ui/ate-separator.component.d.ts +7 -0
  71. package/lib/config/ate-editor.config.d.ts +7 -0
  72. package/lib/config/ate-global-config.token.d.ts +6 -0
  73. package/lib/config/ate-slash-commands.config.d.ts +41 -0
  74. package/lib/directives/ate-noop-value-accessor.directive.d.ts +13 -0
  75. package/lib/extensions/ate-link-click-behavior.extension.d.ts +2 -0
  76. package/lib/extensions/ate-resizable-image.extension.d.ts +27 -0
  77. package/lib/extensions/ate-table.extension.d.ts +2 -0
  78. package/lib/extensions/ate-tiptap-state.extension.d.ts +7 -0
  79. package/lib/extensions/ate-upload-progress.extension.d.ts +7 -0
  80. package/lib/extensions/calculators/ate-discovery.calculator.d.ts +7 -0
  81. package/lib/extensions/calculators/ate-image.calculator.d.ts +2 -0
  82. package/lib/extensions/calculators/ate-marks.calculator.d.ts +2 -0
  83. package/lib/extensions/calculators/ate-selection.calculator.d.ts +2 -0
  84. package/lib/extensions/calculators/ate-structure.calculator.d.ts +2 -0
  85. package/lib/extensions/calculators/ate-table.calculator.d.ts +2 -0
  86. package/lib/models/ate-bubble-menu.model.d.ts +33 -0
  87. package/lib/models/ate-editor-config.model.d.ts +100 -0
  88. package/lib/models/ate-editor-state.model.d.ts +109 -0
  89. package/lib/models/ate-image.model.d.ts +104 -0
  90. package/lib/models/ate-toolbar.model.d.ts +18 -0
  91. package/lib/node-view/ate-angular-node-view.d.ts +115 -0
  92. package/lib/node-view/ate-injector.registry.d.ts +3 -0
  93. package/lib/node-view/ate-node-view.factory.d.ts +10 -0
  94. package/lib/node-view/ate-node-view.models.d.ts +138 -0
  95. package/lib/node-view/ate-node-view.renderer.d.ts +23 -0
  96. package/lib/node-view/ate-register-angular-component.d.ts +35 -0
  97. package/lib/services/ate-color-picker.service.d.ts +65 -0
  98. package/lib/services/ate-editor-commands.service.d.ts +72 -0
  99. package/lib/services/ate-i18n.service.d.ts +394 -0
  100. package/lib/services/ate-image.service.d.ts +71 -0
  101. package/lib/services/ate-link.service.d.ts +42 -0
  102. package/lib/utils/ate-color.utils.d.ts +12 -0
  103. package/package.json +3 -1
  104. package/public-api.d.ts +112 -0
@@ -0,0 +1,235 @@
1
+ import { ElementRef, OnDestroy, AfterViewInit } from "@angular/core";
2
+ import { Editor, EditorOptions, Extension, Node, Mark, JSONContent } from "@tiptap/core";
3
+ import { AteCustomSlashCommands } from "../slash-commands/ate-slash-commands.component";
4
+ import { AteI18nService, SupportedLocale } from "../../services/ate-i18n.service";
5
+ import { AteEditorCommandsService } from "../../services/ate-editor-commands.service";
6
+ import { AteStateCalculator } from "../../models/ate-editor-state.model";
7
+ import { AteSlashCommandsConfig } from "../../config/ate-slash-commands.config";
8
+ import { AteToolbarConfig } from "../../models/ate-toolbar.model";
9
+ import { AteBubbleMenuConfig } from "../../models/ate-bubble-menu.model";
10
+ import { AteEditorConfig } from "../../models/ate-editor-config.model";
11
+ import { AteImageUploadHandler, AteImageUploadOptions } from "../../models/ate-image.model";
12
+ import * as i0 from "@angular/core";
13
+ import * as i1 from "../../directives/ate-noop-value-accessor.directive";
14
+ /**
15
+ * The main rich-text editor component for Angular.
16
+ *
17
+ * Powered by Tiptap and built with a native Signal-based architecture, it provides
18
+ * a seamless, high-performance editing experience. Supports automatic registration
19
+ * of Angular components as interactive nodes ('Angular Nodes'), full Reactive Forms
20
+ * integration, and extensive customization via the AteEditorConfig.
21
+ */
22
+ export declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
23
+ /** Configuration globale de l'éditeur */
24
+ config: import("@angular/core").InputSignal<AteEditorConfig>;
25
+ content: import("@angular/core").InputSignal<string>;
26
+ placeholder: import("@angular/core").InputSignal<string>;
27
+ editable: import("@angular/core").InputSignal<boolean>;
28
+ disabled: import("@angular/core").InputSignal<boolean>;
29
+ minHeight: import("@angular/core").InputSignal<number>;
30
+ height: import("@angular/core").InputSignal<number | undefined>;
31
+ maxHeight: import("@angular/core").InputSignal<number | undefined>;
32
+ fillContainer: import("@angular/core").InputSignal<boolean>;
33
+ showToolbar: import("@angular/core").InputSignal<boolean>;
34
+ showFooter: import("@angular/core").InputSignal<boolean>;
35
+ showCharacterCount: import("@angular/core").InputSignal<boolean>;
36
+ showWordCount: import("@angular/core").InputSignal<boolean>;
37
+ maxCharacters: import("@angular/core").InputSignal<number | undefined>;
38
+ enableOfficePaste: import("@angular/core").InputSignal<boolean>;
39
+ enableSlashCommands: import("@angular/core").InputSignal<boolean>;
40
+ slashCommands: import("@angular/core").InputSignal<AteSlashCommandsConfig>;
41
+ customSlashCommands: import("@angular/core").InputSignal<AteCustomSlashCommands | undefined>;
42
+ locale: import("@angular/core").InputSignal<SupportedLocale | undefined>;
43
+ autofocus: import("@angular/core").InputSignal<number | boolean | "start" | "end" | "all">;
44
+ seamless: import("@angular/core").InputSignal<boolean>;
45
+ floatingToolbar: import("@angular/core").InputSignal<boolean>;
46
+ showEditToggle: import("@angular/core").InputSignal<boolean>;
47
+ spellcheck: import("@angular/core").InputSignal<boolean>;
48
+ tiptapExtensions: import("@angular/core").InputSignal<(Node<any, any> | Mark<any, any> | Extension<any, any>)[]>;
49
+ tiptapOptions: import("@angular/core").InputSignal<Partial<EditorOptions>>;
50
+ showBubbleMenu: import("@angular/core").InputSignal<boolean>;
51
+ bubbleMenu: import("@angular/core").InputSignal<Partial<AteBubbleMenuConfig>>;
52
+ showImageBubbleMenu: import("@angular/core").InputSignal<boolean>;
53
+ imageBubbleMenu: import("@angular/core").InputSignal<Partial<Partial<Record<"separator" | "changeImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>>>>;
54
+ toolbar: import("@angular/core").InputSignal<Partial<AteToolbarConfig>>;
55
+ showTableBubbleMenu: import("@angular/core").InputSignal<boolean>;
56
+ tableBubbleMenu: import("@angular/core").InputSignal<Partial<Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>>>>;
57
+ showCellBubbleMenu: import("@angular/core").InputSignal<boolean>;
58
+ cellBubbleMenu: import("@angular/core").InputSignal<Partial<Partial<Record<"mergeCells" | "splitCell", boolean>>>>;
59
+ /**
60
+ * Additionnal state calculators to extend the reactive editor state.
61
+ */
62
+ stateCalculators: import("@angular/core").InputSignal<AteStateCalculator[]>;
63
+ imageUpload: import("@angular/core").InputSignal<Partial<AteImageUploadOptions>>;
64
+ /**
65
+ * Custom handler for image uploads.
66
+ * When provided, images will be processed through this handler instead of being converted to base64.
67
+ * This allows you to upload images to your own server/storage and use the returned URL.
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * myUploadHandler: ImageUploadHandler = async (context) => {
72
+ * const formData = new FormData();
73
+ * formData.append('image', context.file);
74
+ * const response = await fetch('/api/upload', { method: 'POST', body: formData });
75
+ * const data = await response.json();
76
+ * return { src: data.imageUrl };
77
+ * };
78
+ *
79
+ * // In template:
80
+ * // <angular-tiptap-editor [imageUploadHandler]="myUploadHandler" />
81
+ * ```
82
+ */
83
+ imageUploadHandler: import("@angular/core").InputSignal<AteImageUploadHandler | undefined>;
84
+ contentChange: import("@angular/core").OutputEmitterRef<string>;
85
+ editorCreated: import("@angular/core").OutputEmitterRef<Editor>;
86
+ editorUpdate: import("@angular/core").OutputEmitterRef<{
87
+ editor: Editor;
88
+ transaction: unknown;
89
+ }>;
90
+ editorFocus: import("@angular/core").OutputEmitterRef<{
91
+ editor: Editor;
92
+ event: FocusEvent;
93
+ }>;
94
+ editorBlur: import("@angular/core").OutputEmitterRef<{
95
+ editor: Editor;
96
+ event: FocusEvent;
97
+ }>;
98
+ editableChange: import("@angular/core").OutputEmitterRef<boolean>;
99
+ editorElement: import("@angular/core").Signal<ElementRef<any>>;
100
+ hideBubbleMenus(): void;
101
+ showBubbleMenus(): void;
102
+ private _editor;
103
+ private _characterCount;
104
+ private _wordCount;
105
+ private _isDragOver;
106
+ private _editorFullyInitialized;
107
+ private lastEmittedHtml;
108
+ readonly editor: import("@angular/core").Signal<Editor | null>;
109
+ readonly characterCount: import("@angular/core").Signal<number>;
110
+ readonly wordCount: import("@angular/core").Signal<number>;
111
+ readonly isDragOver: import("@angular/core").Signal<boolean>;
112
+ readonly editorFullyInitialized: import("@angular/core").Signal<boolean>;
113
+ private _isFormControlDisabled;
114
+ readonly isFormControlDisabled: import("@angular/core").Signal<boolean>;
115
+ readonly mergedDisabled: import("@angular/core").Signal<boolean>;
116
+ isEditorReady: import("@angular/core").Signal<boolean>;
117
+ readonly finalSeamless: import("@angular/core").Signal<boolean>;
118
+ readonly finalEditable: import("@angular/core").Signal<boolean>;
119
+ readonly finalPlaceholder: import("@angular/core").Signal<string>;
120
+ readonly finalFillContainer: import("@angular/core").Signal<boolean>;
121
+ readonly finalShowFooter: import("@angular/core").Signal<boolean>;
122
+ readonly finalShowEditToggle: import("@angular/core").Signal<boolean>;
123
+ readonly finalHeight: import("@angular/core").Signal<string | undefined>;
124
+ readonly finalMinHeight: import("@angular/core").Signal<string | undefined>;
125
+ readonly finalMaxHeight: import("@angular/core").Signal<string | undefined>;
126
+ readonly finalSpellcheck: import("@angular/core").Signal<boolean>;
127
+ readonly finalEnableOfficePaste: import("@angular/core").Signal<boolean>;
128
+ readonly finalShowToolbar: import("@angular/core").Signal<boolean>;
129
+ readonly finalToolbarConfig: import("@angular/core").Signal<AteToolbarConfig>;
130
+ readonly finalFloatingToolbar: import("@angular/core").Signal<boolean>;
131
+ readonly finalShowBubbleMenu: import("@angular/core").Signal<boolean>;
132
+ readonly finalBubbleMenuConfig: import("@angular/core").Signal<AteBubbleMenuConfig>;
133
+ readonly finalShowImageBubbleMenu: import("@angular/core").Signal<boolean>;
134
+ readonly finalImageBubbleMenuConfig: import("@angular/core").Signal<Partial<Record<"separator" | "changeImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>>>;
135
+ readonly finalShowTableBubbleMenu: import("@angular/core").Signal<boolean>;
136
+ readonly finalTableBubbleMenuConfig: import("@angular/core").Signal<Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>>>;
137
+ readonly finalShowCellBubbleMenu: import("@angular/core").Signal<boolean>;
138
+ readonly finalCellBubbleMenuConfig: import("@angular/core").Signal<Partial<Record<"mergeCells" | "splitCell", boolean>>>;
139
+ readonly finalEnableSlashCommands: import("@angular/core").Signal<boolean>;
140
+ readonly finalSlashCommandsConfig: import("@angular/core").Signal<AteCustomSlashCommands>;
141
+ readonly finalAutofocus: import("@angular/core").Signal<number | boolean | "start" | "end" | "all">;
142
+ readonly finalMaxCharacters: import("@angular/core").Signal<number | undefined>;
143
+ readonly finalShowCharacterCount: import("@angular/core").Signal<boolean>;
144
+ readonly finalShowWordCount: import("@angular/core").Signal<boolean>;
145
+ readonly finalLocale: import("@angular/core").Signal<SupportedLocale>;
146
+ readonly finalTiptapExtensions: import("@angular/core").Signal<(Node<any, any> | Mark<any, any> | Extension<any, any>)[]>;
147
+ readonly finalTiptapOptions: import("@angular/core").Signal<Partial<EditorOptions>>;
148
+ readonly finalStateCalculators: import("@angular/core").Signal<AteStateCalculator[]>;
149
+ readonly finalAngularNodesConfig: import("@angular/core").Signal<import("../../models/ate-editor-config.model").AteAngularNode[]>;
150
+ readonly finalImageUploadConfig: import("@angular/core").Signal<{
151
+ maxSize: number;
152
+ handler?: AteImageUploadHandler | undefined;
153
+ quality: number;
154
+ maxWidth: number;
155
+ maxHeight: number;
156
+ allowedTypes: string[];
157
+ enableDragDrop: boolean;
158
+ showPreview: boolean;
159
+ multiple: boolean;
160
+ compressImages: boolean;
161
+ }>;
162
+ readonly finalImageUploadHandler: import("@angular/core").Signal<AteImageUploadHandler | undefined>;
163
+ readonly currentTranslations: import("@angular/core").Signal<import("../../services/ate-i18n.service").AteTranslations>;
164
+ private _destroyRef;
165
+ private ngControl;
166
+ readonly i18nService: AteI18nService;
167
+ readonly editorCommandsService: AteEditorCommandsService;
168
+ readonly editorState: import("@angular/core").Signal<import("../../models/ate-editor-state.model").AteEditorStateSnapshot>;
169
+ private injector;
170
+ private globalConfig;
171
+ /**
172
+ * Final merged configuration.
173
+ * Priority: Input [config] > Global config via provideAteEditor()
174
+ */
175
+ readonly effectiveConfig: import("@angular/core").Signal<{
176
+ theme?: "auto" | "light" | "dark" | undefined;
177
+ mode?: "classic" | "seamless" | undefined;
178
+ height?: string | undefined;
179
+ autofocus?: number | boolean | "start" | "end" | "all" | undefined;
180
+ placeholder?: string | undefined;
181
+ editable?: boolean | undefined;
182
+ minHeight?: string | undefined;
183
+ maxHeight?: string | undefined;
184
+ fillContainer?: boolean | undefined;
185
+ disabled?: boolean | undefined;
186
+ locale?: string | undefined;
187
+ spellcheck?: boolean | undefined;
188
+ enableOfficePaste?: boolean | undefined;
189
+ showToolbar?: boolean | undefined;
190
+ showFooter?: boolean | undefined;
191
+ showCharacterCount?: boolean | undefined;
192
+ showWordCount?: boolean | undefined;
193
+ showEditToggle?: boolean | undefined;
194
+ showBubbleMenu?: boolean | undefined;
195
+ showImageBubbleMenu?: boolean | undefined;
196
+ showTableMenu?: boolean | undefined;
197
+ showCellMenu?: boolean | undefined;
198
+ enableSlashCommands?: boolean | undefined;
199
+ maxCharacters?: number | undefined;
200
+ toolbar?: AteToolbarConfig | undefined;
201
+ bubbleMenu?: AteBubbleMenuConfig | undefined;
202
+ imageBubbleMenu?: Partial<Record<"separator" | "changeImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>> | undefined;
203
+ tableBubbleMenu?: Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>> | undefined;
204
+ cellBubbleMenu?: Partial<Record<"mergeCells" | "splitCell", boolean>> | undefined;
205
+ slashCommands?: AteSlashCommandsConfig | undefined;
206
+ floatingToolbar?: boolean | undefined;
207
+ imageUpload?: import("../../models/ate-image.model").AteImageUploadConfig | undefined;
208
+ angularNodes?: import("../../models/ate-editor-config.model").AteAngularNode[] | undefined;
209
+ tiptapExtensions?: (Node<any, any> | Mark<any, any> | Extension<any, any>)[] | undefined;
210
+ tiptapOptions?: Partial<EditorOptions> | undefined;
211
+ stateCalculators?: AteStateCalculator[] | undefined;
212
+ customSlashCommands?: AteCustomSlashCommands | undefined;
213
+ }>;
214
+ constructor();
215
+ ngAfterViewInit(): void;
216
+ ngOnDestroy(): void;
217
+ private initEditor;
218
+ toggleEditMode(event: Event): void;
219
+ private updateCharacterCount;
220
+ onDragOver(event: DragEvent): void;
221
+ onDrop(event: DragEvent): void;
222
+ private insertImageFromFile;
223
+ getHTML(): string;
224
+ getJSON(): JSONContent | undefined;
225
+ getText(): string;
226
+ setContent(content: string, emitUpdate?: boolean): void;
227
+ focus(): void;
228
+ blur(): void;
229
+ clearContent(): void;
230
+ getEditor(): Editor | null;
231
+ private setupFormControlSubscription;
232
+ onEditorClick(event: Event): void;
233
+ static ɵfac: i0.ɵɵFactoryDeclaration<AngularTiptapEditorComponent, never>;
234
+ static ɵcmp: i0.ɵɵComponentDeclaration<AngularTiptapEditorComponent, "angular-tiptap-editor", never, { "config": { "alias": "config"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "minHeight": { "alias": "minHeight"; "required": false; "isSignal": true; }; "height": { "alias": "height"; "required": false; "isSignal": true; }; "maxHeight": { "alias": "maxHeight"; "required": false; "isSignal": true; }; "fillContainer": { "alias": "fillContainer"; "required": false; "isSignal": true; }; "showToolbar": { "alias": "showToolbar"; "required": false; "isSignal": true; }; "showFooter": { "alias": "showFooter"; "required": false; "isSignal": true; }; "showCharacterCount": { "alias": "showCharacterCount"; "required": false; "isSignal": true; }; "showWordCount": { "alias": "showWordCount"; "required": false; "isSignal": true; }; "maxCharacters": { "alias": "maxCharacters"; "required": false; "isSignal": true; }; "enableOfficePaste": { "alias": "enableOfficePaste"; "required": false; "isSignal": true; }; "enableSlashCommands": { "alias": "enableSlashCommands"; "required": false; "isSignal": true; }; "slashCommands": { "alias": "slashCommands"; "required": false; "isSignal": true; }; "customSlashCommands": { "alias": "customSlashCommands"; "required": false; "isSignal": true; }; "locale": { "alias": "locale"; "required": false; "isSignal": true; }; "autofocus": { "alias": "autofocus"; "required": false; "isSignal": true; }; "seamless": { "alias": "seamless"; "required": false; "isSignal": true; }; "floatingToolbar": { "alias": "floatingToolbar"; "required": false; "isSignal": true; }; "showEditToggle": { "alias": "showEditToggle"; "required": false; "isSignal": true; }; "spellcheck": { "alias": "spellcheck"; "required": false; "isSignal": true; }; "tiptapExtensions": { "alias": "tiptapExtensions"; "required": false; "isSignal": true; }; "tiptapOptions": { "alias": "tiptapOptions"; "required": false; "isSignal": true; }; "showBubbleMenu": { "alias": "showBubbleMenu"; "required": false; "isSignal": true; }; "bubbleMenu": { "alias": "bubbleMenu"; "required": false; "isSignal": true; }; "showImageBubbleMenu": { "alias": "showImageBubbleMenu"; "required": false; "isSignal": true; }; "imageBubbleMenu": { "alias": "imageBubbleMenu"; "required": false; "isSignal": true; }; "toolbar": { "alias": "toolbar"; "required": false; "isSignal": true; }; "showTableBubbleMenu": { "alias": "showTableBubbleMenu"; "required": false; "isSignal": true; }; "tableBubbleMenu": { "alias": "tableBubbleMenu"; "required": false; "isSignal": true; }; "showCellBubbleMenu": { "alias": "showCellBubbleMenu"; "required": false; "isSignal": true; }; "cellBubbleMenu": { "alias": "cellBubbleMenu"; "required": false; "isSignal": true; }; "stateCalculators": { "alias": "stateCalculators"; "required": false; "isSignal": true; }; "imageUpload": { "alias": "imageUpload"; "required": false; "isSignal": true; }; "imageUploadHandler": { "alias": "imageUploadHandler"; "required": false; "isSignal": true; }; }, { "contentChange": "contentChange"; "editorCreated": "editorCreated"; "editorUpdate": "editorUpdate"; "editorFocus": "editorFocus"; "editorBlur": "editorBlur"; "editableChange": "editableChange"; }, never, never, true, [{ directive: typeof i1.AteNoopValueAccessorDirective; inputs: {}; outputs: {}; }]>;
235
+ }
@@ -0,0 +1,43 @@
1
+ import { ElementRef, OnInit, OnDestroy } from "@angular/core";
2
+ import { Editor } from "@tiptap/core";
3
+ import { AteI18nService } from "../../services/ate-i18n.service";
4
+ import * as i0 from "@angular/core";
5
+ export interface AteSlashCommandItem {
6
+ title: string;
7
+ description: string;
8
+ icon: string;
9
+ keywords: string[];
10
+ command: (editor: Editor) => void;
11
+ }
12
+ export interface AteCustomSlashCommands {
13
+ commands?: AteSlashCommandItem[];
14
+ }
15
+ export declare class AteSlashCommandsComponent implements OnInit, OnDestroy {
16
+ readonly i18nService: AteI18nService;
17
+ editor: import("@angular/core").InputSignal<Editor>;
18
+ config: import("@angular/core").InputSignal<AteCustomSlashCommands | undefined>;
19
+ menuRef: import("@angular/core").Signal<ElementRef<HTMLDivElement>>;
20
+ private tippyInstance;
21
+ private editorCommands;
22
+ private isActive;
23
+ private currentQuery;
24
+ private slashRange;
25
+ selectedIndex: import("@angular/core").WritableSignal<number>;
26
+ private readonly isToolbarInteracting;
27
+ commands: import("@angular/core").Signal<AteSlashCommandItem[]>;
28
+ filteredCommands: import("@angular/core").Signal<AteSlashCommandItem[]>;
29
+ constructor();
30
+ ngOnInit(): void;
31
+ ngOnDestroy(): void;
32
+ private initTippy;
33
+ private getSlashRect;
34
+ updateMenu: () => void;
35
+ handleBlur: () => void;
36
+ private scrollToSelected;
37
+ private showTippy;
38
+ private hideTippy;
39
+ executeCommand(command: AteSlashCommandItem): void;
40
+ private addKeyboardPlugin;
41
+ static ɵfac: i0.ɵɵFactoryDeclaration<AteSlashCommandsComponent, never>;
42
+ static ɵcmp: i0.ɵɵComponentDeclaration<AteSlashCommandsComponent, "ate-slash-commands", never, { "editor": { "alias": "editor"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
43
+ }
@@ -0,0 +1,47 @@
1
+ import { Editor } from "@tiptap/core";
2
+ import { AteToolbarConfig } from "../../models/ate-toolbar.model";
3
+ import * as i0 from "@angular/core";
4
+ export declare class AteToolbarComponent {
5
+ editor: import("@angular/core").InputSignal<Editor>;
6
+ config: import("@angular/core").InputSignal<AteToolbarConfig>;
7
+ imageUpload: import("@angular/core").InputSignal<Record<string, unknown>>;
8
+ floating: import("@angular/core").InputSignal<boolean>;
9
+ private i18nService;
10
+ private editorCommands;
11
+ readonly t: import("@angular/core").Signal<{
12
+ bold: string;
13
+ italic: string;
14
+ underline: string;
15
+ strike: string;
16
+ code: string;
17
+ codeBlock: string;
18
+ superscript: string;
19
+ subscript: string;
20
+ highlight: string;
21
+ highlightPicker: string;
22
+ heading1: string;
23
+ heading2: string;
24
+ heading3: string;
25
+ bulletList: string;
26
+ orderedList: string;
27
+ blockquote: string;
28
+ alignLeft: string;
29
+ alignCenter: string;
30
+ alignRight: string;
31
+ alignJustify: string;
32
+ link: string;
33
+ image: string;
34
+ horizontalRule: string;
35
+ table: string;
36
+ undo: string;
37
+ redo: string;
38
+ clear: string;
39
+ textColor: string;
40
+ customColor: string;
41
+ presets: string;
42
+ }>;
43
+ readonly state: import("@angular/core").Signal<import("@flogeez/angular-tiptap-editor").EditorStateSnapshot>;
44
+ onCommand(command: string, ...args: unknown[]): void;
45
+ static ɵfac: i0.ɵɵFactoryDeclaration<AteToolbarComponent, never>;
46
+ static ɵcmp: i0.ɵɵComponentDeclaration<AteToolbarComponent, "ate-toolbar", never, { "editor": { "alias": "editor"; "required": true; "isSignal": true; }; "config": { "alias": "config"; "required": true; "isSignal": true; }; "imageUpload": { "alias": "imageUpload"; "required": false; "isSignal": true; }; "floating": { "alias": "floating"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
47
+ }
@@ -0,0 +1,25 @@
1
+ import * as i0 from "@angular/core";
2
+ export interface AteButtonConfig {
3
+ icon: string;
4
+ title: string;
5
+ active?: boolean;
6
+ disabled?: boolean;
7
+ variant?: "default" | "text" | "danger";
8
+ size?: "small" | "medium" | "large";
9
+ iconSize?: "small" | "medium" | "large";
10
+ }
11
+ export declare class AteButtonComponent {
12
+ icon: import("@angular/core").InputSignal<string>;
13
+ title: import("@angular/core").InputSignal<string>;
14
+ active: import("@angular/core").InputSignal<boolean>;
15
+ disabled: import("@angular/core").InputSignal<boolean>;
16
+ color: import("@angular/core").InputSignal<string | undefined>;
17
+ backgroundColor: import("@angular/core").InputSignal<string | undefined>;
18
+ variant: import("@angular/core").InputSignal<"text" | "default" | "danger">;
19
+ size: import("@angular/core").InputSignal<"small" | "medium" | "large">;
20
+ iconSize: import("@angular/core").InputSignal<"small" | "medium" | "large">;
21
+ buttonClick: import("@angular/core").OutputEmitterRef<Event>;
22
+ onMouseDown(event: MouseEvent): void;
23
+ static ɵfac: i0.ɵɵFactoryDeclaration<AteButtonComponent, never>;
24
+ static ɵcmp: i0.ɵɵComponentDeclaration<AteButtonComponent, "ate-button", never, { "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": true; "isSignal": true; }; "active": { "alias": "active"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "backgroundColor": { "alias": "backgroundColor"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "iconSize": { "alias": "iconSize"; "required": false; "isSignal": true; }; }, { "buttonClick": "buttonClick"; }, never, ["*"], true, never>;
25
+ }
@@ -0,0 +1,7 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class AteSeparatorComponent {
3
+ orientation: import("@angular/core").InputSignal<"vertical" | "horizontal">;
4
+ size: import("@angular/core").InputSignal<"small" | "medium" | "large">;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<AteSeparatorComponent, never>;
6
+ static ɵcmp: i0.ɵɵComponentDeclaration<AteSeparatorComponent, "ate-separator", never, { "orientation": { "alias": "orientation"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7
+ }
@@ -0,0 +1,7 @@
1
+ import { AteToolbarConfig } from "../models/ate-toolbar.model";
2
+ import { AteBubbleMenuConfig, AteImageBubbleMenuConfig, AteTableBubbleMenuConfig, AteCellBubbleMenuConfig } from "../models/ate-bubble-menu.model";
3
+ export declare const ATE_DEFAULT_TOOLBAR_CONFIG: AteToolbarConfig;
4
+ export declare const ATE_DEFAULT_BUBBLE_MENU_CONFIG: AteBubbleMenuConfig;
5
+ export declare const ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG: AteImageBubbleMenuConfig;
6
+ export declare const ATE_DEFAULT_TABLE_MENU_CONFIG: AteTableBubbleMenuConfig;
7
+ export declare const ATE_DEFAULT_CELL_MENU_CONFIG: AteCellBubbleMenuConfig;
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ import { AteEditorConfig } from "../models/ate-editor-config.model";
3
+ /**
4
+ * Injection Token for global editor configuration.
5
+ */
6
+ export declare const ATE_GLOBAL_CONFIG: InjectionToken<AteEditorConfig>;
@@ -0,0 +1,41 @@
1
+ import { AteSlashCommandItem } from "../components/slash-commands/ate-slash-commands.component";
2
+ import { AteI18nService } from "../services/ate-i18n.service";
3
+ import { AteEditorCommandsService } from "../services/ate-editor-commands.service";
4
+ /**
5
+ * Clés des commandes natives dans l'ordre d'affichage
6
+ */
7
+ export declare const ATE_SLASH_COMMAND_KEYS: readonly ["heading1", "heading2", "heading3", "bulletList", "orderedList", "blockquote", "code", "image", "horizontalRule", "table"];
8
+ export type AteSlashCommandKey = (typeof ATE_SLASH_COMMAND_KEYS)[number];
9
+ /**
10
+ * Configuration simplifiée pour activer/désactiver les slash commands natives.
11
+ * Permet aussi d'ajouter des commandes personnalisées.
12
+ */
13
+ export interface AteSlashCommandsConfig extends Partial<Record<AteSlashCommandKey, boolean>> {
14
+ /**
15
+ * Liste de commandes supplémentaires à ajouter à la fin du menu
16
+ */
17
+ custom?: AteSlashCommandItem[];
18
+ }
19
+ /**
20
+ * Configuration par défaut : toutes les commandes natives sont activées
21
+ */
22
+ export declare const ATE_DEFAULT_SLASH_COMMANDS_CONFIG: AteSlashCommandsConfig;
23
+ /**
24
+ * Factory pour créer les commandes natives avec leurs traductions et leur logique d'exécution.
25
+ * Utilise les services de l'éditeur pour garantir une cohérence de comportement.
26
+ */
27
+ export declare function createDefaultSlashCommands(i18n: AteI18nService, commands: AteEditorCommandsService, imageOptions?: {
28
+ quality?: number;
29
+ maxWidth?: number;
30
+ maxHeight?: number;
31
+ allowedTypes?: string[];
32
+ }): AteSlashCommandItem[];
33
+ /**
34
+ * Filtre et assemble les commandes selon la configuration fournie.
35
+ */
36
+ export declare function filterSlashCommands(config: AteSlashCommandsConfig, i18n: AteI18nService, commands: AteEditorCommandsService, imageOptions?: {
37
+ quality?: number;
38
+ maxWidth?: number;
39
+ maxHeight?: number;
40
+ allowedTypes?: string[];
41
+ }): AteSlashCommandItem[];
@@ -0,0 +1,13 @@
1
+ import { ControlValueAccessor } from "@angular/forms";
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Noop Value Accessor Directive
5
+ * @link https://medium.com/netanelbasal/forwarding-form-controls-to-custom-control-components-in-angular-701e8406cc55
6
+ */
7
+ export declare class AteNoopValueAccessorDirective implements ControlValueAccessor {
8
+ writeValue(_obj: unknown): void;
9
+ registerOnChange(_fn: unknown): void;
10
+ registerOnTouched(_fn: unknown): void;
11
+ static ɵfac: i0.ɵɵFactoryDeclaration<AteNoopValueAccessorDirective, never>;
12
+ static ɵdir: i0.ɵɵDirectiveDeclaration<AteNoopValueAccessorDirective, never, never, {}, {}, never, never, true, never>;
13
+ }
@@ -0,0 +1,2 @@
1
+ import { Extension } from "@tiptap/core";
2
+ export declare const AteLinkClickBehavior: Extension<any, any>;
@@ -0,0 +1,27 @@
1
+ import { Node } from "@tiptap/core";
2
+ export interface AteResizableImageOptions {
3
+ inline: boolean;
4
+ allowBase64: boolean;
5
+ HTMLAttributes: Record<string, unknown>;
6
+ }
7
+ declare module "@tiptap/core" {
8
+ interface Commands<ReturnType> {
9
+ resizableImage: {
10
+ setResizableImage: (options: {
11
+ src: string;
12
+ alt?: string;
13
+ title?: string;
14
+ width?: number;
15
+ height?: number;
16
+ }) => ReturnType;
17
+ updateResizableImage: (options: {
18
+ src?: string;
19
+ alt?: string;
20
+ title?: string;
21
+ width?: number;
22
+ height?: number;
23
+ }) => ReturnType;
24
+ };
25
+ }
26
+ }
27
+ export declare const AteResizableImage: Node<AteResizableImageOptions, any>;
@@ -0,0 +1,2 @@
1
+ import { Extension } from "@tiptap/core";
2
+ export declare const AteTableExtension: Extension<any, any>;
@@ -0,0 +1,7 @@
1
+ import { Extension } from "@tiptap/core";
2
+ import { AteEditorStateSnapshot, AteStateCalculator } from "../models/ate-editor-state.model";
3
+ export interface AteTiptapStateOptions {
4
+ onUpdate?: (state: AteEditorStateSnapshot) => void;
5
+ calculators: AteStateCalculator[];
6
+ }
7
+ export declare const AteTiptapStateExtension: Extension<AteTiptapStateOptions, any>;
@@ -0,0 +1,7 @@
1
+ import { Extension } from "@tiptap/core";
2
+ export interface AteUploadProgressOptions {
3
+ isUploading: () => boolean;
4
+ uploadProgress: () => number;
5
+ uploadMessage: () => string;
6
+ }
7
+ export declare const AteUploadProgress: Extension<AteUploadProgressOptions, any>;
@@ -0,0 +1,7 @@
1
+ import { AteStateCalculator } from "../../models/ate-editor-state.model";
2
+ /**
3
+ * DiscoveryCalculator automatically detects and tracks the state of any TipTap extension.
4
+ * It provides a "fallback" reactive state for any mark or node not explicitly handled
5
+ * by specialized calculators.
6
+ */
7
+ export declare const AteDiscoveryCalculator: AteStateCalculator;
@@ -0,0 +1,2 @@
1
+ import { AteStateCalculator } from "../../models/ate-editor-state.model";
2
+ export declare const AteImageCalculator: AteStateCalculator;
@@ -0,0 +1,2 @@
1
+ import { AteStateCalculator } from "../../models/ate-editor-state.model";
2
+ export declare const AteMarksCalculator: AteStateCalculator;
@@ -0,0 +1,2 @@
1
+ import { AteStateCalculator } from "../../models/ate-editor-state.model";
2
+ export declare const AteSelectionCalculator: AteStateCalculator;
@@ -0,0 +1,2 @@
1
+ import { AteStateCalculator } from "../../models/ate-editor-state.model";
2
+ export declare const AteStructureCalculator: AteStateCalculator;
@@ -0,0 +1,2 @@
1
+ import { AteStateCalculator } from "../../models/ate-editor-state.model";
2
+ export declare const AteTableCalculator: AteStateCalculator;
@@ -0,0 +1,33 @@
1
+ import { Editor } from "@tiptap/core";
2
+ /**
3
+ * Clés des options du menu bulle de texte
4
+ */
5
+ export declare const ATE_BUBBLE_MENU_KEYS: readonly ["bold", "italic", "underline", "strike", "code", "superscript", "subscript", "highlight", "highlightPicker", "textColor", "link", "separator"];
6
+ export type AteBubbleMenuKey = (typeof ATE_BUBBLE_MENU_KEYS)[number];
7
+ export interface AteBubbleMenuConfig extends Partial<Record<AteBubbleMenuKey, boolean>> {
8
+ custom?: AteCustomBubbleMenuItem[];
9
+ }
10
+ export interface AteCustomBubbleMenuItem {
11
+ key: string;
12
+ label: string;
13
+ icon: string;
14
+ command: (editor: Editor) => void | Promise<void>;
15
+ }
16
+ /**
17
+ * Clés des options du menu bulle d'image
18
+ */
19
+ export declare const ATE_IMAGE_BUBBLE_MENU_KEYS: readonly ["changeImage", "resizeSmall", "resizeMedium", "resizeLarge", "resizeOriginal", "deleteImage", "separator"];
20
+ export type AteImageBubbleMenuKey = (typeof ATE_IMAGE_BUBBLE_MENU_KEYS)[number];
21
+ export type AteImageBubbleMenuConfig = Partial<Record<AteImageBubbleMenuKey, boolean>>;
22
+ /**
23
+ * Clés des options du menu de table
24
+ */
25
+ export declare const ATE_TABLE_BUBBLE_MENU_KEYS: readonly ["addRowBefore", "addRowAfter", "deleteRow", "addColumnBefore", "addColumnAfter", "deleteColumn", "deleteTable", "toggleHeaderRow", "toggleHeaderColumn", "separator"];
26
+ export type AteTableBubbleMenuKey = (typeof ATE_TABLE_BUBBLE_MENU_KEYS)[number];
27
+ export type AteTableBubbleMenuConfig = Partial<Record<AteTableBubbleMenuKey, boolean>>;
28
+ /**
29
+ * Clés des options du menu de cellule
30
+ */
31
+ export declare const ATE_CELL_BUBBLE_MENU_KEYS: readonly ["mergeCells", "splitCell"];
32
+ export type AteCellBubbleMenuKey = (typeof ATE_CELL_BUBBLE_MENU_KEYS)[number];
33
+ export type AteCellBubbleMenuConfig = Partial<Record<AteCellBubbleMenuKey, boolean>>;