@flogeez/angular-tiptap-editor 3.1.2 → 3.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +2 -2
- package/esm2022/flogeez-angular-tiptap-editor.mjs +5 -0
- package/esm2022/lib/ate-editor.provider.mjs +38 -0
- package/esm2022/lib/components/bubble-menus/base/ate-base-bubble-menu.mjs +207 -0
- package/esm2022/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.mjs +137 -0
- package/esm2022/lib/components/bubble-menus/color/ate-color-bubble-menu.component.mjs +365 -0
- package/esm2022/lib/components/bubble-menus/image/ate-image-bubble-menu.component.mjs +309 -0
- package/esm2022/lib/components/bubble-menus/link/ate-link-bubble-menu.component.mjs +247 -0
- package/esm2022/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.mjs +126 -0
- package/esm2022/lib/components/bubble-menus/table/ate-table-bubble-menu.component.mjs +271 -0
- package/esm2022/lib/components/bubble-menus/text/ate-bubble-menu.component.mjs +272 -0
- package/esm2022/lib/components/color-picker/ate-color-picker.component.mjs +123 -0
- package/esm2022/lib/components/edit-toggle/ate-edit-toggle.component.mjs +42 -0
- package/esm2022/lib/components/editor/angular-tiptap-editor.component.mjs +1031 -0
- package/esm2022/lib/components/editor/ate-block-controls.component.mjs +256 -0
- package/esm2022/lib/components/slash-commands/ate-slash-commands.component.mjs +328 -0
- package/esm2022/lib/components/toolbar/ate-toolbar.component.mjs +531 -0
- package/esm2022/lib/components/ui/ate-button.component.mjs +91 -0
- package/esm2022/lib/components/ui/ate-separator.component.mjs +11 -0
- package/esm2022/lib/config/ate-editor.config.mjs +133 -0
- package/esm2022/lib/config/ate-global-config.token.mjs +6 -0
- package/esm2022/lib/config/ate-slash-commands.config.mjs +130 -0
- package/esm2022/lib/directives/ate-noop-value-accessor.directive.mjs +40 -0
- package/esm2022/lib/directives/ate-tooltip.directive.mjs +138 -0
- package/esm2022/lib/extensions/ate-block-controls.extension.mjs +156 -0
- package/esm2022/lib/extensions/ate-link-click-behavior.extension.mjs +32 -0
- package/esm2022/lib/extensions/ate-resizable-image.extension.mjs +277 -0
- package/esm2022/lib/extensions/ate-table.extension.mjs +27 -0
- package/esm2022/lib/extensions/ate-tiptap-state.extension.mjs +85 -0
- package/esm2022/lib/extensions/ate-upload-progress.extension.mjs +195 -0
- package/esm2022/lib/extensions/calculators/ate-discovery.calculator.mjs +62 -0
- package/esm2022/lib/extensions/calculators/ate-image.calculator.mjs +8 -0
- package/esm2022/lib/extensions/calculators/ate-marks.calculator.mjs +75 -0
- package/esm2022/lib/extensions/calculators/ate-selection.calculator.mjs +35 -0
- package/esm2022/lib/extensions/calculators/ate-structure.calculator.mjs +34 -0
- package/esm2022/lib/extensions/calculators/ate-table.calculator.mjs +38 -0
- package/esm2022/lib/models/ate-bubble-menu.model.mjs +53 -0
- package/esm2022/lib/models/ate-editor-config.model.mjs +2 -0
- package/esm2022/lib/models/ate-editor-state.model.mjs +90 -0
- package/esm2022/lib/models/ate-image.model.mjs +2 -0
- package/esm2022/lib/models/ate-slash-command.model.mjs +2 -0
- package/esm2022/lib/models/ate-toolbar.model.mjs +35 -0
- package/esm2022/lib/node-view/ate-angular-node-view.mjs +97 -0
- package/esm2022/lib/node-view/ate-injector.registry.mjs +16 -0
- package/esm2022/lib/node-view/ate-node-view.factory.mjs +125 -0
- package/esm2022/lib/node-view/ate-node-view.models.mjs +2 -0
- package/esm2022/lib/node-view/ate-node-view.renderer.mjs +154 -0
- package/esm2022/lib/node-view/ate-register-angular-component.mjs +49 -0
- package/esm2022/lib/services/ate-color-picker.service.mjs +194 -0
- package/esm2022/lib/services/ate-editor-commands.service.mjs +474 -0
- package/esm2022/lib/services/ate-i18n.service.mjs +422 -0
- package/esm2022/lib/services/ate-image.service.mjs +459 -0
- package/esm2022/lib/services/ate-link.service.mjs +99 -0
- package/esm2022/lib/utils/ate-color.utils.mjs +60 -0
- package/esm2022/public-api.mjs +40 -0
- package/fesm2022/flogeez-angular-tiptap-editor.mjs +321 -354
- package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
- package/index.d.ts +3 -1734
- package/lib/ate-editor.provider.d.ts +21 -0
- package/lib/components/bubble-menus/base/ate-base-bubble-menu.d.ts +71 -0
- package/lib/components/bubble-menus/base/ate-base-sub-bubble-menu.d.ts +60 -0
- package/lib/components/bubble-menus/color/ate-color-bubble-menu.component.d.ts +77 -0
- package/lib/components/bubble-menus/image/ate-image-bubble-menu.component.d.ts +49 -0
- package/lib/components/bubble-menus/link/ate-link-bubble-menu.component.d.ts +55 -0
- package/lib/components/bubble-menus/table/ate-cell-bubble-menu.component.d.ts +16 -0
- package/lib/components/bubble-menus/table/ate-table-bubble-menu.component.d.ts +25 -0
- package/lib/components/bubble-menus/text/ate-bubble-menu.component.d.ts +53 -0
- package/lib/components/color-picker/ate-color-picker.component.d.ts +54 -0
- package/lib/components/edit-toggle/ate-edit-toggle.component.d.ts +13 -0
- package/lib/components/editor/angular-tiptap-editor.component.d.ts +242 -0
- package/lib/components/editor/ate-block-controls.component.d.ts +44 -0
- package/lib/components/slash-commands/ate-slash-commands.component.d.ts +34 -0
- package/lib/components/toolbar/ate-toolbar.component.d.ts +47 -0
- package/lib/components/ui/ate-button.component.d.ts +25 -0
- package/lib/components/ui/ate-separator.component.d.ts +5 -0
- package/lib/config/ate-editor.config.d.ts +19 -0
- package/lib/config/ate-global-config.token.d.ts +6 -0
- package/lib/config/ate-slash-commands.config.d.ts +41 -0
- package/lib/directives/ate-noop-value-accessor.directive.d.ts +13 -0
- package/lib/directives/ate-tooltip.directive.d.ts +30 -0
- package/lib/extensions/ate-block-controls.extension.d.ts +10 -0
- package/lib/extensions/ate-link-click-behavior.extension.d.ts +2 -0
- package/lib/extensions/ate-resizable-image.extension.d.ts +27 -0
- package/lib/extensions/ate-table.extension.d.ts +2 -0
- package/lib/extensions/ate-tiptap-state.extension.d.ts +7 -0
- package/lib/extensions/ate-upload-progress.extension.d.ts +7 -0
- package/lib/extensions/calculators/ate-discovery.calculator.d.ts +7 -0
- package/lib/extensions/calculators/ate-image.calculator.d.ts +2 -0
- package/lib/extensions/calculators/ate-marks.calculator.d.ts +2 -0
- package/lib/extensions/calculators/ate-selection.calculator.d.ts +2 -0
- package/lib/extensions/calculators/ate-structure.calculator.d.ts +2 -0
- package/lib/extensions/calculators/ate-table.calculator.d.ts +2 -0
- package/lib/models/ate-bubble-menu.model.d.ts +33 -0
- package/lib/models/ate-editor-config.model.d.ts +113 -0
- package/lib/models/ate-editor-state.model.d.ts +109 -0
- package/lib/models/ate-image.model.d.ts +104 -0
- package/lib/models/ate-slash-command.model.d.ts +17 -0
- package/lib/models/ate-toolbar.model.d.ts +18 -0
- package/lib/node-view/ate-angular-node-view.d.ts +115 -0
- package/lib/node-view/ate-injector.registry.d.ts +3 -0
- package/lib/node-view/ate-node-view.factory.d.ts +10 -0
- package/lib/node-view/ate-node-view.models.d.ts +138 -0
- package/lib/node-view/ate-node-view.renderer.d.ts +23 -0
- package/lib/node-view/ate-register-angular-component.d.ts +35 -0
- package/lib/services/ate-color-picker.service.d.ts +65 -0
- package/lib/services/ate-editor-commands.service.d.ts +75 -0
- package/lib/services/ate-i18n.service.d.ts +406 -0
- package/lib/services/ate-image.service.d.ts +82 -0
- package/lib/services/ate-link.service.d.ts +42 -0
- package/lib/utils/ate-color.utils.d.ts +12 -0
- package/package.json +3 -1
- package/public-api.d.ts +31 -0
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import { ElementRef, OnDestroy, AfterViewInit } from "@angular/core";
|
|
2
|
+
import { Editor, EditorOptions, Extension, Node, Mark, JSONContent } from "@tiptap/core";
|
|
3
|
+
import { Node as PMNode } from "@tiptap/pm/model";
|
|
4
|
+
import { AteCustomSlashCommands } from "../../models/ate-slash-command.model";
|
|
5
|
+
import { AteI18nService, SupportedLocale } from "../../services/ate-i18n.service";
|
|
6
|
+
import { AteEditorCommandsService } from "../../services/ate-editor-commands.service";
|
|
7
|
+
import { AteStateCalculator } from "../../models/ate-editor-state.model";
|
|
8
|
+
import { AteSlashCommandsConfig } from "../../config/ate-slash-commands.config";
|
|
9
|
+
import { AteToolbarConfig } from "../../models/ate-toolbar.model";
|
|
10
|
+
import { AteBubbleMenuConfig } from "../../models/ate-bubble-menu.model";
|
|
11
|
+
import { AteEditorConfig, AteAngularNode, AteBlockControlsMode, AteAutofocusMode } from "../../models/ate-editor-config.model";
|
|
12
|
+
import { AteImageUploadHandler, AteImageUploadOptions } from "../../models/ate-image.model";
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "../../directives/ate-noop-value-accessor.directive";
|
|
15
|
+
/**
|
|
16
|
+
* The main rich-text editor component for Angular.
|
|
17
|
+
*
|
|
18
|
+
* Powered by Tiptap and built with a native Signal-based architecture, it provides
|
|
19
|
+
* a seamless, high-performance editing experience. Supports automatic registration
|
|
20
|
+
* of Angular components as interactive nodes ('Angular Nodes'), full Reactive Forms
|
|
21
|
+
* integration, and extensive customization via the AteEditorConfig.
|
|
22
|
+
*/
|
|
23
|
+
export declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
|
|
24
|
+
/** Configuration globale de l'éditeur */
|
|
25
|
+
config: import("@angular/core").InputSignal<AteEditorConfig>;
|
|
26
|
+
content: import("@angular/core").InputSignal<string>;
|
|
27
|
+
placeholder: import("@angular/core").InputSignal<string | undefined>;
|
|
28
|
+
editable: import("@angular/core").InputSignal<boolean | undefined>;
|
|
29
|
+
disabled: import("@angular/core").InputSignal<boolean | undefined>;
|
|
30
|
+
minHeight: import("@angular/core").InputSignal<string | number | undefined>;
|
|
31
|
+
height: import("@angular/core").InputSignal<string | number | undefined>;
|
|
32
|
+
maxHeight: import("@angular/core").InputSignal<string | number | undefined>;
|
|
33
|
+
fillContainer: import("@angular/core").InputSignal<boolean | undefined>;
|
|
34
|
+
showToolbar: import("@angular/core").InputSignal<boolean | undefined>;
|
|
35
|
+
showFooter: import("@angular/core").InputSignal<boolean | undefined>;
|
|
36
|
+
showCharacterCount: import("@angular/core").InputSignal<boolean | undefined>;
|
|
37
|
+
showWordCount: import("@angular/core").InputSignal<boolean | undefined>;
|
|
38
|
+
maxCharacters: import("@angular/core").InputSignal<number | undefined>;
|
|
39
|
+
enableOfficePaste: import("@angular/core").InputSignal<boolean | undefined>;
|
|
40
|
+
enableSlashCommands: import("@angular/core").InputSignal<boolean | undefined>;
|
|
41
|
+
slashCommands: import("@angular/core").InputSignal<AteSlashCommandsConfig | undefined>;
|
|
42
|
+
customSlashCommands: import("@angular/core").InputSignal<AteCustomSlashCommands | undefined>;
|
|
43
|
+
blockControls: import("@angular/core").InputSignal<AteBlockControlsMode | undefined>;
|
|
44
|
+
locale: import("@angular/core").InputSignal<SupportedLocale | undefined>;
|
|
45
|
+
autofocus: import("@angular/core").InputSignal<AteAutofocusMode | undefined>;
|
|
46
|
+
seamless: import("@angular/core").InputSignal<boolean | undefined>;
|
|
47
|
+
floatingToolbar: import("@angular/core").InputSignal<boolean | undefined>;
|
|
48
|
+
showEditToggle: import("@angular/core").InputSignal<boolean | undefined>;
|
|
49
|
+
spellcheck: import("@angular/core").InputSignal<boolean | undefined>;
|
|
50
|
+
tiptapExtensions: import("@angular/core").InputSignal<(Mark<any, any> | Node<any, any> | Extension<any, any>)[] | undefined>;
|
|
51
|
+
tiptapOptions: import("@angular/core").InputSignal<Partial<EditorOptions> | undefined>;
|
|
52
|
+
showBubbleMenu: import("@angular/core").InputSignal<boolean | undefined>;
|
|
53
|
+
bubbleMenu: import("@angular/core").InputSignal<Partial<AteBubbleMenuConfig> | undefined>;
|
|
54
|
+
showImageBubbleMenu: import("@angular/core").InputSignal<boolean | undefined>;
|
|
55
|
+
imageBubbleMenu: import("@angular/core").InputSignal<Partial<Partial<Record<"separator" | "alignLeft" | "alignCenter" | "alignRight" | "changeImage" | "downloadImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>>> | undefined>;
|
|
56
|
+
toolbar: import("@angular/core").InputSignal<Partial<AteToolbarConfig> | undefined>;
|
|
57
|
+
showTableBubbleMenu: import("@angular/core").InputSignal<boolean | undefined>;
|
|
58
|
+
tableBubbleMenu: import("@angular/core").InputSignal<Partial<Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>>> | undefined>;
|
|
59
|
+
showCellBubbleMenu: import("@angular/core").InputSignal<boolean | undefined>;
|
|
60
|
+
cellBubbleMenu: import("@angular/core").InputSignal<Partial<Partial<Record<"mergeCells" | "splitCell", boolean>>> | undefined>;
|
|
61
|
+
/**
|
|
62
|
+
* Additionnal state calculators to extend the reactive editor state.
|
|
63
|
+
*/
|
|
64
|
+
stateCalculators: import("@angular/core").InputSignal<AteStateCalculator[] | undefined>;
|
|
65
|
+
imageUpload: import("@angular/core").InputSignal<Partial<AteImageUploadOptions> | undefined>;
|
|
66
|
+
/**
|
|
67
|
+
* Custom handler for image uploads.
|
|
68
|
+
* When provided, images will be processed through this handler instead of being converted to base64.
|
|
69
|
+
* This allows you to upload images to your own server/storage and use the returned URL.
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* myUploadHandler: ImageUploadHandler = async (context) => {
|
|
74
|
+
* const formData = new FormData();
|
|
75
|
+
* formData.append('image', context.file);
|
|
76
|
+
* const response = await fetch('/api/upload', { method: 'POST', body: formData });
|
|
77
|
+
* const data = await response.json();
|
|
78
|
+
* return { src: data.imageUrl };
|
|
79
|
+
* };
|
|
80
|
+
*
|
|
81
|
+
* // In template:
|
|
82
|
+
* // <angular-tiptap-editor [imageUploadHandler]="myUploadHandler" />
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
imageUploadHandler: import("@angular/core").InputSignal<AteImageUploadHandler | undefined>;
|
|
86
|
+
contentChange: import("@angular/core").OutputEmitterRef<string>;
|
|
87
|
+
editorCreated: import("@angular/core").OutputEmitterRef<Editor>;
|
|
88
|
+
editorUpdate: import("@angular/core").OutputEmitterRef<{
|
|
89
|
+
editor: Editor;
|
|
90
|
+
transaction: unknown;
|
|
91
|
+
}>;
|
|
92
|
+
editorFocus: import("@angular/core").OutputEmitterRef<{
|
|
93
|
+
editor: Editor;
|
|
94
|
+
event: FocusEvent;
|
|
95
|
+
}>;
|
|
96
|
+
editorBlur: import("@angular/core").OutputEmitterRef<{
|
|
97
|
+
editor: Editor;
|
|
98
|
+
event: FocusEvent;
|
|
99
|
+
}>;
|
|
100
|
+
editableChange: import("@angular/core").OutputEmitterRef<boolean>;
|
|
101
|
+
editorElement: import("@angular/core").Signal<ElementRef<any>>;
|
|
102
|
+
hideBubbleMenus(): void;
|
|
103
|
+
showBubbleMenus(): void;
|
|
104
|
+
private _editor;
|
|
105
|
+
private _characterCount;
|
|
106
|
+
private _wordCount;
|
|
107
|
+
private _isDragOver;
|
|
108
|
+
private _editorFullyInitialized;
|
|
109
|
+
private _hoveredBlock;
|
|
110
|
+
private lastEmittedHtml;
|
|
111
|
+
readonly editor: import("@angular/core").Signal<Editor | null>;
|
|
112
|
+
readonly characterCount: import("@angular/core").Signal<number>;
|
|
113
|
+
readonly wordCount: import("@angular/core").Signal<number>;
|
|
114
|
+
readonly isDragOver: import("@angular/core").Signal<boolean>;
|
|
115
|
+
readonly editorFullyInitialized: import("@angular/core").Signal<boolean>;
|
|
116
|
+
readonly hoveredBlock: import("@angular/core").Signal<{
|
|
117
|
+
node: PMNode;
|
|
118
|
+
element: HTMLElement;
|
|
119
|
+
pos: number;
|
|
120
|
+
} | null>;
|
|
121
|
+
private _isFormControlDisabled;
|
|
122
|
+
readonly isFormControlDisabled: import("@angular/core").Signal<boolean>;
|
|
123
|
+
readonly mergedDisabled: import("@angular/core").Signal<boolean>;
|
|
124
|
+
isEditorReady: import("@angular/core").Signal<boolean>;
|
|
125
|
+
readonly finalSeamless: import("@angular/core").Signal<boolean>;
|
|
126
|
+
readonly finalEditable: import("@angular/core").Signal<boolean>;
|
|
127
|
+
readonly finalPlaceholder: import("@angular/core").Signal<string>;
|
|
128
|
+
readonly finalFillContainer: import("@angular/core").Signal<boolean | undefined>;
|
|
129
|
+
readonly finalShowFooter: import("@angular/core").Signal<boolean>;
|
|
130
|
+
readonly finalShowEditToggle: import("@angular/core").Signal<boolean>;
|
|
131
|
+
readonly finalHeight: import("@angular/core").Signal<string | undefined>;
|
|
132
|
+
readonly finalMinHeight: import("@angular/core").Signal<string | undefined>;
|
|
133
|
+
readonly finalMaxHeight: import("@angular/core").Signal<string | undefined>;
|
|
134
|
+
readonly finalSpellcheck: import("@angular/core").Signal<boolean>;
|
|
135
|
+
readonly finalEnableOfficePaste: import("@angular/core").Signal<boolean>;
|
|
136
|
+
readonly finalShowToolbar: import("@angular/core").Signal<boolean>;
|
|
137
|
+
readonly finalToolbarConfig: import("@angular/core").Signal<AteToolbarConfig>;
|
|
138
|
+
readonly finalFloatingToolbar: import("@angular/core").Signal<boolean>;
|
|
139
|
+
readonly finalShowBubbleMenu: import("@angular/core").Signal<boolean>;
|
|
140
|
+
readonly finalBubbleMenuConfig: import("@angular/core").Signal<AteBubbleMenuConfig>;
|
|
141
|
+
readonly finalShowImageBubbleMenu: import("@angular/core").Signal<boolean>;
|
|
142
|
+
readonly finalImageBubbleMenuConfig: import("@angular/core").Signal<Partial<Record<"separator" | "alignLeft" | "alignCenter" | "alignRight" | "changeImage" | "downloadImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>>>;
|
|
143
|
+
readonly finalShowTableBubbleMenu: import("@angular/core").Signal<boolean>;
|
|
144
|
+
readonly finalTableBubbleMenuConfig: import("@angular/core").Signal<Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>>>;
|
|
145
|
+
readonly finalShowCellBubbleMenu: import("@angular/core").Signal<boolean>;
|
|
146
|
+
readonly finalCellBubbleMenuConfig: import("@angular/core").Signal<Partial<Record<"mergeCells" | "splitCell", boolean>>>;
|
|
147
|
+
readonly finalEnableSlashCommands: import("@angular/core").Signal<boolean>;
|
|
148
|
+
readonly finalSlashCommandsConfig: import("@angular/core").Signal<AteCustomSlashCommands>;
|
|
149
|
+
readonly finalAutofocus: import("@angular/core").Signal<AteAutofocusMode | undefined>;
|
|
150
|
+
readonly finalMaxCharacters: import("@angular/core").Signal<number | undefined>;
|
|
151
|
+
readonly finalBlockControls: import("@angular/core").Signal<AteBlockControlsMode>;
|
|
152
|
+
readonly finalShowCharacterCount: import("@angular/core").Signal<boolean>;
|
|
153
|
+
readonly finalShowWordCount: import("@angular/core").Signal<boolean>;
|
|
154
|
+
readonly finalLocale: import("@angular/core").Signal<SupportedLocale>;
|
|
155
|
+
readonly finalTiptapExtensions: import("@angular/core").Signal<(Mark<any, any> | Node<any, any> | Extension<any, any>)[]>;
|
|
156
|
+
readonly finalTiptapOptions: import("@angular/core").Signal<Partial<EditorOptions>>;
|
|
157
|
+
readonly finalStateCalculators: import("@angular/core").Signal<AteStateCalculator[]>;
|
|
158
|
+
readonly finalAngularNodesConfig: import("@angular/core").Signal<AteAngularNode[]>;
|
|
159
|
+
readonly finalImageUploadConfig: import("@angular/core").Signal<{
|
|
160
|
+
maxSize: number;
|
|
161
|
+
quality?: number | undefined;
|
|
162
|
+
maxWidth?: number | undefined;
|
|
163
|
+
maxHeight?: number | undefined;
|
|
164
|
+
allowedTypes?: string[] | undefined;
|
|
165
|
+
handler?: AteImageUploadHandler | undefined;
|
|
166
|
+
}>;
|
|
167
|
+
readonly finalImageUploadHandler: import("@angular/core").Signal<AteImageUploadHandler | undefined>;
|
|
168
|
+
readonly currentTranslations: import("@angular/core").Signal<import("../../services/ate-i18n.service").AteTranslations>;
|
|
169
|
+
private _destroyRef;
|
|
170
|
+
private ngControl;
|
|
171
|
+
readonly i18nService: AteI18nService;
|
|
172
|
+
readonly editorCommandsService: AteEditorCommandsService;
|
|
173
|
+
readonly editorState: import("@angular/core").Signal<import("../../models/ate-editor-state.model").AteEditorStateSnapshot>;
|
|
174
|
+
private injector;
|
|
175
|
+
private globalConfig;
|
|
176
|
+
/**
|
|
177
|
+
* Final merged configuration.
|
|
178
|
+
* Priority: Input [config] > Global config via provideAteEditor()
|
|
179
|
+
*/
|
|
180
|
+
readonly effectiveConfig: import("@angular/core").Signal<{
|
|
181
|
+
theme?: "auto" | "light" | "dark" | undefined;
|
|
182
|
+
mode?: "classic" | "seamless" | undefined;
|
|
183
|
+
height?: string | number | undefined;
|
|
184
|
+
autofocus?: AteAutofocusMode | undefined;
|
|
185
|
+
placeholder?: string | undefined;
|
|
186
|
+
editable?: boolean | undefined;
|
|
187
|
+
minHeight?: string | number | undefined;
|
|
188
|
+
maxHeight?: string | number | undefined;
|
|
189
|
+
fillContainer?: boolean | undefined;
|
|
190
|
+
disabled?: boolean | undefined;
|
|
191
|
+
locale?: string | undefined;
|
|
192
|
+
spellcheck?: boolean | undefined;
|
|
193
|
+
enableOfficePaste?: boolean | undefined;
|
|
194
|
+
showToolbar?: boolean | undefined;
|
|
195
|
+
showFooter?: boolean | undefined;
|
|
196
|
+
showCharacterCount?: boolean | undefined;
|
|
197
|
+
showWordCount?: boolean | undefined;
|
|
198
|
+
showEditToggle?: boolean | undefined;
|
|
199
|
+
showBubbleMenu?: boolean | undefined;
|
|
200
|
+
showImageBubbleMenu?: boolean | undefined;
|
|
201
|
+
showTableMenu?: boolean | undefined;
|
|
202
|
+
showCellMenu?: boolean | undefined;
|
|
203
|
+
downloadImage?: boolean | undefined;
|
|
204
|
+
enableSlashCommands?: boolean | undefined;
|
|
205
|
+
maxCharacters?: number | undefined;
|
|
206
|
+
blockControls?: AteBlockControlsMode | undefined;
|
|
207
|
+
toolbar?: AteToolbarConfig | undefined;
|
|
208
|
+
bubbleMenu?: AteBubbleMenuConfig | undefined;
|
|
209
|
+
imageBubbleMenu?: Partial<Record<"separator" | "alignLeft" | "alignCenter" | "alignRight" | "changeImage" | "downloadImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>> | undefined;
|
|
210
|
+
tableBubbleMenu?: Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>> | undefined;
|
|
211
|
+
cellBubbleMenu?: Partial<Record<"mergeCells" | "splitCell", boolean>> | undefined;
|
|
212
|
+
slashCommands?: AteSlashCommandsConfig | undefined;
|
|
213
|
+
floatingToolbar?: boolean | undefined;
|
|
214
|
+
imageUpload?: import("../../models/ate-image.model").AteImageUploadConfig | undefined;
|
|
215
|
+
angularNodes?: AteAngularNode[] | undefined;
|
|
216
|
+
tiptapExtensions?: (Mark<any, any> | Node<any, any> | Extension<any, any>)[] | undefined;
|
|
217
|
+
tiptapOptions?: Partial<EditorOptions> | undefined;
|
|
218
|
+
stateCalculators?: AteStateCalculator[] | undefined;
|
|
219
|
+
customSlashCommands?: AteCustomSlashCommands | undefined;
|
|
220
|
+
}>;
|
|
221
|
+
constructor();
|
|
222
|
+
ngAfterViewInit(): void;
|
|
223
|
+
ngOnDestroy(): void;
|
|
224
|
+
private initEditor;
|
|
225
|
+
toggleEditMode(event: Event): void;
|
|
226
|
+
private updateCharacterCount;
|
|
227
|
+
onDragOver(event: DragEvent): void;
|
|
228
|
+
onDrop(event: DragEvent): void;
|
|
229
|
+
private getImageUploadOptions;
|
|
230
|
+
getHTML(): string;
|
|
231
|
+
getJSON(): JSONContent | undefined;
|
|
232
|
+
getText(): string;
|
|
233
|
+
setContent(content: string, emitUpdate?: boolean): void;
|
|
234
|
+
focus(): void;
|
|
235
|
+
blur(): void;
|
|
236
|
+
clearContent(): void;
|
|
237
|
+
getEditor(): Editor | null;
|
|
238
|
+
private setupFormControlSubscription;
|
|
239
|
+
onEditorClick(event: Event): void;
|
|
240
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AngularTiptapEditorComponent, never>;
|
|
241
|
+
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; }; "blockControls": { "alias": "blockControls"; "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: {}; }]>;
|
|
242
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { ElementRef, OnDestroy, AfterViewInit } from "@angular/core";
|
|
2
|
+
import { Editor } from "@tiptap/core";
|
|
3
|
+
import { Node as PMNode } from "@tiptap/pm/model";
|
|
4
|
+
import { AteI18nService } from "../../services/ate-i18n.service";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
/**
|
|
7
|
+
* Component providing Notion-like block controls (Plus button and Drag Handle).
|
|
8
|
+
*/
|
|
9
|
+
export declare class AteBlockControlsComponent implements AfterViewInit, OnDestroy {
|
|
10
|
+
protected readonly i18n: AteI18nService;
|
|
11
|
+
editor: import("@angular/core").InputSignal<Editor>;
|
|
12
|
+
hoveredData: import("@angular/core").InputSignal<{
|
|
13
|
+
node: PMNode;
|
|
14
|
+
element: HTMLElement;
|
|
15
|
+
pos: number;
|
|
16
|
+
} | null>;
|
|
17
|
+
menuRef: import("@angular/core").Signal<ElementRef<HTMLDivElement>>;
|
|
18
|
+
protected isInteracting: import("@angular/core").WritableSignal<boolean>;
|
|
19
|
+
private lastValidData;
|
|
20
|
+
private lastValidRect;
|
|
21
|
+
private tippyInstance;
|
|
22
|
+
private updateTimeout;
|
|
23
|
+
constructor();
|
|
24
|
+
ngAfterViewInit(): void;
|
|
25
|
+
ngOnDestroy(): void;
|
|
26
|
+
private initTippy;
|
|
27
|
+
private updateMenu;
|
|
28
|
+
private showTippy;
|
|
29
|
+
private hideTippy;
|
|
30
|
+
private getSelectionRect;
|
|
31
|
+
onMouseEnter(): void;
|
|
32
|
+
onMouseLeave(): void;
|
|
33
|
+
onContainerMouseDown(event: MouseEvent): void;
|
|
34
|
+
onButtonMouseDown(event: MouseEvent): void;
|
|
35
|
+
/**
|
|
36
|
+
* Selection strategy to avoid partial node dragging (ghost table issue).
|
|
37
|
+
*/
|
|
38
|
+
onDragHandleMouseDown(event: MouseEvent): void;
|
|
39
|
+
addBlock(event: MouseEvent): void;
|
|
40
|
+
onDragStart(event: DragEvent): void;
|
|
41
|
+
onDragEnd(): void;
|
|
42
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AteBlockControlsComponent, never>;
|
|
43
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AteBlockControlsComponent, "ate-block-controls", never, { "editor": { "alias": "editor"; "required": true; "isSignal": true; }; "hoveredData": { "alias": "hoveredData"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
44
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ElementRef, OnDestroy, AfterViewInit } from "@angular/core";
|
|
2
|
+
import { Editor } from "@tiptap/core";
|
|
3
|
+
import { AteI18nService } from "../../services/ate-i18n.service";
|
|
4
|
+
import { AteSlashCommandItem, AteCustomSlashCommands } from "../../models/ate-slash-command.model";
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class AteSlashCommandsComponent implements AfterViewInit, OnDestroy {
|
|
7
|
+
readonly i18nService: AteI18nService;
|
|
8
|
+
editor: import("@angular/core").InputSignal<Editor>;
|
|
9
|
+
config: import("@angular/core").InputSignal<AteCustomSlashCommands | undefined>;
|
|
10
|
+
menuRef: import("@angular/core").Signal<ElementRef<HTMLDivElement>>;
|
|
11
|
+
private tippyInstance;
|
|
12
|
+
private editorCommands;
|
|
13
|
+
private isActive;
|
|
14
|
+
private currentQuery;
|
|
15
|
+
private slashRange;
|
|
16
|
+
selectedIndex: import("@angular/core").WritableSignal<number>;
|
|
17
|
+
private readonly isToolbarInteracting;
|
|
18
|
+
commands: import("@angular/core").Signal<AteSlashCommandItem[]>;
|
|
19
|
+
filteredCommands: import("@angular/core").Signal<AteSlashCommandItem[]>;
|
|
20
|
+
constructor();
|
|
21
|
+
ngAfterViewInit(): void;
|
|
22
|
+
ngOnDestroy(): void;
|
|
23
|
+
private initTippy;
|
|
24
|
+
private getSlashRect;
|
|
25
|
+
updateMenu: () => void;
|
|
26
|
+
handleBlur: () => void;
|
|
27
|
+
private scrollToSelected;
|
|
28
|
+
private showTippy;
|
|
29
|
+
private hideTippy;
|
|
30
|
+
executeCommand(command: AteSlashCommandItem): void;
|
|
31
|
+
private addKeyboardPlugin;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AteSlashCommandsComponent, never>;
|
|
33
|
+
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>;
|
|
34
|
+
}
|
|
@@ -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").AteEditorStateSnapshot>;
|
|
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,5 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
export declare class AteSeparatorComponent {
|
|
3
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AteSeparatorComponent, never>;
|
|
4
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AteSeparatorComponent, "ate-separator", never, {}, {}, never, never, true, never>;
|
|
5
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AteToolbarConfig } from "../models/ate-toolbar.model";
|
|
2
|
+
import { AteBubbleMenuConfig, AteImageBubbleMenuConfig, AteTableBubbleMenuConfig, AteCellBubbleMenuConfig } from "../models/ate-bubble-menu.model";
|
|
3
|
+
import { AteImageUploadConfig } from "../models/ate-image.model";
|
|
4
|
+
export declare const ATE_DEFAULT_TOOLBAR_CONFIG: AteToolbarConfig;
|
|
5
|
+
export declare const ATE_DEFAULT_BUBBLE_MENU_CONFIG: AteBubbleMenuConfig;
|
|
6
|
+
export declare const ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG: AteImageBubbleMenuConfig;
|
|
7
|
+
export declare const ATE_DEFAULT_TABLE_MENU_CONFIG: AteTableBubbleMenuConfig;
|
|
8
|
+
export declare const ATE_DEFAULT_CELL_MENU_CONFIG: AteCellBubbleMenuConfig;
|
|
9
|
+
export declare const ATE_DEFAULT_IMAGE_UPLOAD_CONFIG: AteImageUploadConfig;
|
|
10
|
+
import { AteEditorConfig } from "../models/ate-editor-config.model";
|
|
11
|
+
/**
|
|
12
|
+
* Ultimate default configuration for the Angular Tiptap Editor.
|
|
13
|
+
* This serves as the 'Level 4' fallback in the configuration hierarchy:
|
|
14
|
+
* 1. Component Inputs (Le Roi)
|
|
15
|
+
* 2. Component [config] (Le Prince)
|
|
16
|
+
* 3. Global provideAteEditor() (Le Duc)
|
|
17
|
+
* 4. ATE_DEFAULT_CONFIG (Le Peuple)
|
|
18
|
+
*/
|
|
19
|
+
export declare const ATE_DEFAULT_CONFIG: AteEditorConfig;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AteSlashCommandItem } from "../models/ate-slash-command.model";
|
|
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,30 @@
|
|
|
1
|
+
import { OnDestroy } from "@angular/core";
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class AteTooltipDirective implements OnDestroy {
|
|
4
|
+
private readonly el;
|
|
5
|
+
private tippyInstance;
|
|
6
|
+
content: import("@angular/core").InputSignal<string | null>;
|
|
7
|
+
placement: import("@angular/core").InputSignal<import("@popperjs/core").Placement>;
|
|
8
|
+
delay: import("@angular/core").InputSignal<number | [number, number]>;
|
|
9
|
+
disabled: import("@angular/core").InputSignal<boolean>;
|
|
10
|
+
/**
|
|
11
|
+
* Computed logic for ARIA shortcuts.
|
|
12
|
+
*/
|
|
13
|
+
protected readonly ariaShortcut: import("@angular/core").Signal<string | null>;
|
|
14
|
+
/**
|
|
15
|
+
* Computed logic for Tippy content.
|
|
16
|
+
* Includes strict escaping of dynamic content to prevent XSS.
|
|
17
|
+
*/
|
|
18
|
+
private readonly processedTooltip;
|
|
19
|
+
constructor();
|
|
20
|
+
ngOnDestroy(): void;
|
|
21
|
+
/**
|
|
22
|
+
* Basic HTML escaping for security.
|
|
23
|
+
* Effectively neutralizes scripts or malicious HTML tags.
|
|
24
|
+
*/
|
|
25
|
+
private escapeHtml;
|
|
26
|
+
private initTippy;
|
|
27
|
+
private destroyTippy;
|
|
28
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<AteTooltipDirective, never>;
|
|
29
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<AteTooltipDirective, "[ateTooltip]", never, { "content": { "alias": "ateTooltip"; "required": false; "isSignal": true; }; "placement": { "alias": "ateTooltipPlacement"; "required": false; "isSignal": true; }; "delay": { "alias": "ateTooltipDelay"; "required": false; "isSignal": true; }; "disabled": { "alias": "ateTooltipDisabled"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
30
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Extension } from "@tiptap/core";
|
|
2
|
+
import { Node } from "@tiptap/pm/model";
|
|
3
|
+
export interface AteBlockControlsOptions {
|
|
4
|
+
onHover?: (data: {
|
|
5
|
+
node: Node;
|
|
6
|
+
element: HTMLElement;
|
|
7
|
+
pos: number;
|
|
8
|
+
} | null) => void;
|
|
9
|
+
}
|
|
10
|
+
export declare const AteBlockControlsExtension: Extension<AteBlockControlsOptions, 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,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;
|