@flogeez/angular-tiptap-editor 0.6.0 → 2.0.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.
- package/CHANGELOG.md +35 -0
- package/README.md +93 -31
- package/fesm2022/flogeez-angular-tiptap-editor.mjs +283 -207
- package/fesm2022/flogeez-angular-tiptap-editor.mjs.map +1 -1
- package/index.d.ts +25 -19
- package/package.json +1 -1
- package/src/lib/styles/bubble-menu.global.css +3 -4
package/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { Editor, Node, Mark, Extension, EditorOptions } from '@tiptap/core';
|
|
|
5
5
|
import { Observable } from 'rxjs';
|
|
6
6
|
import { ControlValueAccessor } from '@angular/forms';
|
|
7
7
|
|
|
8
|
-
type SupportedLocale = "en" | "fr";
|
|
8
|
+
type SupportedLocale = "en" | "fr" | (string & {});
|
|
9
9
|
interface TiptapTranslations {
|
|
10
10
|
toolbar: {
|
|
11
11
|
bold: string;
|
|
@@ -13,6 +13,7 @@ interface TiptapTranslations {
|
|
|
13
13
|
underline: string;
|
|
14
14
|
strike: string;
|
|
15
15
|
code: string;
|
|
16
|
+
codeBlock: string;
|
|
16
17
|
superscript: string;
|
|
17
18
|
subscript: string;
|
|
18
19
|
highlight: string;
|
|
@@ -174,6 +175,8 @@ declare class TiptapI18nService {
|
|
|
174
175
|
private _currentLocale;
|
|
175
176
|
private _translations;
|
|
176
177
|
readonly currentLocale: _angular_core.Signal<SupportedLocale>;
|
|
178
|
+
/** All loaded translations (useful for dynamic key access) */
|
|
179
|
+
readonly allTranslations: _angular_core.Signal<Record<SupportedLocale, TiptapTranslations>>;
|
|
177
180
|
readonly translations: _angular_core.Signal<TiptapTranslations>;
|
|
178
181
|
readonly t: _angular_core.Signal<TiptapTranslations>;
|
|
179
182
|
readonly toolbar: _angular_core.Signal<{
|
|
@@ -182,6 +185,7 @@ declare class TiptapI18nService {
|
|
|
182
185
|
underline: string;
|
|
183
186
|
strike: string;
|
|
184
187
|
code: string;
|
|
188
|
+
codeBlock: string;
|
|
185
189
|
superscript: string;
|
|
186
190
|
subscript: string;
|
|
187
191
|
highlight: string;
|
|
@@ -342,7 +346,7 @@ declare class TiptapI18nService {
|
|
|
342
346
|
setLocale(locale: SupportedLocale): void;
|
|
343
347
|
autoDetectLocale(): void;
|
|
344
348
|
getSupportedLocales(): SupportedLocale[];
|
|
345
|
-
addTranslations(locale:
|
|
349
|
+
addTranslations(locale: string, translations: TiptapTranslations | Partial<TiptapTranslations>): void;
|
|
346
350
|
private detectBrowserLanguage;
|
|
347
351
|
getToolbarTitle(key: keyof TiptapTranslations["toolbar"]): string;
|
|
348
352
|
getBubbleMenuTitle(key: keyof TiptapTranslations["bubbleMenu"]): string;
|
|
@@ -581,6 +585,7 @@ interface EditorStateSnapshot {
|
|
|
581
585
|
computedColor: string | null;
|
|
582
586
|
background: string | null;
|
|
583
587
|
computedBackground: string | null;
|
|
588
|
+
linkOpenOnClick: boolean;
|
|
584
589
|
};
|
|
585
590
|
/** Capability states (canExecute) */
|
|
586
591
|
can: {
|
|
@@ -616,6 +621,7 @@ interface EditorStateSnapshot {
|
|
|
616
621
|
toggleBulletList: boolean;
|
|
617
622
|
toggleOrderedList: boolean;
|
|
618
623
|
toggleBlockquote: boolean;
|
|
624
|
+
toggleCodeBlock: boolean;
|
|
619
625
|
setTextAlignLeft: boolean;
|
|
620
626
|
setTextAlignCenter: boolean;
|
|
621
627
|
setTextAlignRight: boolean;
|
|
@@ -686,6 +692,7 @@ declare class EditorCommandsService {
|
|
|
686
692
|
toggleItalic(editor: Editor): void;
|
|
687
693
|
toggleStrike(editor: Editor): void;
|
|
688
694
|
toggleCode(editor: Editor): void;
|
|
695
|
+
toggleCodeBlock(editor: Editor): void;
|
|
689
696
|
toggleUnderline(editor: Editor): void;
|
|
690
697
|
toggleSuperscript(editor: Editor): void;
|
|
691
698
|
toggleSubscript(editor: Editor): void;
|
|
@@ -776,6 +783,7 @@ interface ToolbarConfig {
|
|
|
776
783
|
underline?: boolean;
|
|
777
784
|
strike?: boolean;
|
|
778
785
|
code?: boolean;
|
|
786
|
+
codeBlock?: boolean;
|
|
779
787
|
superscript?: boolean;
|
|
780
788
|
subscript?: boolean;
|
|
781
789
|
highlight?: boolean;
|
|
@@ -853,11 +861,13 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
|
|
|
853
861
|
content: _angular_core.InputSignal<string>;
|
|
854
862
|
placeholder: _angular_core.InputSignal<string>;
|
|
855
863
|
editable: _angular_core.InputSignal<boolean>;
|
|
864
|
+
disabled: _angular_core.InputSignal<boolean>;
|
|
856
865
|
minHeight: _angular_core.InputSignal<number>;
|
|
857
866
|
height: _angular_core.InputSignal<number | undefined>;
|
|
858
867
|
maxHeight: _angular_core.InputSignal<number | undefined>;
|
|
859
868
|
fillContainer: _angular_core.InputSignal<boolean>;
|
|
860
869
|
showToolbar: _angular_core.InputSignal<boolean>;
|
|
870
|
+
showFooter: _angular_core.InputSignal<boolean>;
|
|
861
871
|
showCharacterCount: _angular_core.InputSignal<boolean>;
|
|
862
872
|
showWordCount: _angular_core.InputSignal<boolean>;
|
|
863
873
|
maxCharacters: _angular_core.InputSignal<number | undefined>;
|
|
@@ -867,6 +877,8 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
|
|
|
867
877
|
customSlashCommands: _angular_core.InputSignal<CustomSlashCommands | undefined>;
|
|
868
878
|
locale: _angular_core.InputSignal<SupportedLocale | undefined>;
|
|
869
879
|
autofocus: _angular_core.InputSignal<number | boolean | "start" | "end" | "all">;
|
|
880
|
+
seamless: _angular_core.InputSignal<boolean>;
|
|
881
|
+
floatingToolbar: _angular_core.InputSignal<boolean>;
|
|
870
882
|
tiptapExtensions: _angular_core.InputSignal<(Node<any, any> | Mark<any, any> | Extension<any, any>)[]>;
|
|
871
883
|
tiptapOptions: _angular_core.InputSignal<Partial<EditorOptions>>;
|
|
872
884
|
showBubbleMenu: _angular_core.InputSignal<boolean>;
|
|
@@ -874,6 +886,10 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
|
|
|
874
886
|
showImageBubbleMenu: _angular_core.InputSignal<boolean>;
|
|
875
887
|
imageBubbleMenu: _angular_core.InputSignal<Partial<ImageBubbleMenuConfig>>;
|
|
876
888
|
toolbar: _angular_core.InputSignal<Partial<ToolbarConfig>>;
|
|
889
|
+
showTableBubbleMenu: _angular_core.InputSignal<boolean>;
|
|
890
|
+
tableBubbleMenu: _angular_core.InputSignal<Partial<TableBubbleMenuConfig>>;
|
|
891
|
+
showCellBubbleMenu: _angular_core.InputSignal<boolean>;
|
|
892
|
+
cellBubbleMenu: _angular_core.InputSignal<Partial<CellBubbleMenuConfig>>;
|
|
877
893
|
/**
|
|
878
894
|
* Additionnal state calculators to extend the reactive editor state.
|
|
879
895
|
*/
|
|
@@ -927,25 +943,15 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
|
|
|
927
943
|
readonly wordCount: _angular_core.Signal<number>;
|
|
928
944
|
readonly isDragOver: _angular_core.Signal<boolean>;
|
|
929
945
|
readonly editorFullyInitialized: _angular_core.Signal<boolean>;
|
|
946
|
+
private _isFormControlDisabled;
|
|
947
|
+
readonly isFormControlDisabled: _angular_core.Signal<boolean>;
|
|
948
|
+
readonly mergedDisabled: _angular_core.Signal<boolean>;
|
|
930
949
|
isEditorReady: _angular_core.Signal<boolean>;
|
|
931
950
|
toolbarConfig: _angular_core.Signal<ToolbarConfig>;
|
|
932
951
|
bubbleMenuConfig: _angular_core.Signal<BubbleMenuConfig>;
|
|
933
952
|
imageBubbleMenuConfig: _angular_core.Signal<ImageBubbleMenuConfig>;
|
|
934
|
-
tableBubbleMenuConfig: _angular_core.Signal<
|
|
935
|
-
|
|
936
|
-
addRowAfter: boolean;
|
|
937
|
-
deleteRow: boolean;
|
|
938
|
-
addColumnBefore: boolean;
|
|
939
|
-
addColumnAfter: boolean;
|
|
940
|
-
deleteColumn: boolean;
|
|
941
|
-
deleteTable: boolean;
|
|
942
|
-
toggleHeaderRow: boolean;
|
|
943
|
-
toggleHeaderColumn: boolean;
|
|
944
|
-
}>;
|
|
945
|
-
cellBubbleMenuConfig: _angular_core.Signal<{
|
|
946
|
-
mergeCells: boolean;
|
|
947
|
-
splitCell: boolean;
|
|
948
|
-
}>;
|
|
953
|
+
tableBubbleMenuConfig: _angular_core.Signal<TableBubbleMenuConfig>;
|
|
954
|
+
cellBubbleMenuConfig: _angular_core.Signal<CellBubbleMenuConfig>;
|
|
949
955
|
imageUploadConfig: _angular_core.Signal<{
|
|
950
956
|
maxSize: number;
|
|
951
957
|
maxWidth: number;
|
|
@@ -958,6 +964,7 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
|
|
|
958
964
|
quality: number;
|
|
959
965
|
}>;
|
|
960
966
|
slashCommandsConfigComputed: _angular_core.Signal<CustomSlashCommands>;
|
|
967
|
+
readonly currentTranslations: _angular_core.Signal<_flogeez_angular_tiptap_editor.TiptapTranslations>;
|
|
961
968
|
private _destroyRef;
|
|
962
969
|
private ngControl;
|
|
963
970
|
readonly i18nService: TiptapI18nService;
|
|
@@ -980,10 +987,9 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
|
|
|
980
987
|
clearContent(): void;
|
|
981
988
|
getEditor(): Editor | null;
|
|
982
989
|
private setupFormControlSubscription;
|
|
983
|
-
setDisabledState(isDisabled: boolean): void;
|
|
984
990
|
onEditorClick(event: MouseEvent): void;
|
|
985
991
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<AngularTiptapEditorComponent, never>;
|
|
986
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AngularTiptapEditorComponent, "angular-tiptap-editor", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "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; }; "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; }; "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; }; "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"; }, never, never, true, [{ directive: typeof NoopValueAccessorDirective; inputs: {}; outputs: {}; }]>;
|
|
992
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<AngularTiptapEditorComponent, "angular-tiptap-editor", never, { "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; }; "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"; }, never, never, true, [{ directive: typeof NoopValueAccessorDirective; inputs: {}; outputs: {}; }]>;
|
|
987
993
|
}
|
|
988
994
|
|
|
989
995
|
interface ColorPickerSelection {
|
package/package.json
CHANGED
|
@@ -15,11 +15,10 @@
|
|
|
15
15
|
display: flex !important;
|
|
16
16
|
align-items: center;
|
|
17
17
|
gap: 6px;
|
|
18
|
-
background: var(--ate-menu-bg,
|
|
19
|
-
backdrop-filter: blur(var(--ate-menu-blur, 12px));
|
|
18
|
+
background: var(--ate-menu-bg, rgb(255, 255, 255)) !important;
|
|
20
19
|
border: 1px solid var(--ate-menu-border, rgba(0, 0, 0, 0.1));
|
|
21
|
-
border-radius: var(--ate-border-radius, 16px);
|
|
22
|
-
padding:
|
|
20
|
+
border-radius: var(--ate-menu-border-radius, 16px);
|
|
21
|
+
padding: var(--ate-menu-padding, 6px);
|
|
23
22
|
box-shadow: var(--ate-menu-shadow, 0 8px 32px rgba(0, 0, 0, 0.12));
|
|
24
23
|
z-index: 1000;
|
|
25
24
|
animation: slideUp 0.18s cubic-bezier(0, 0, 0.2, 1);
|