@flogeez/angular-tiptap-editor 2.3.0 → 3.0.0

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/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import * as _flogeez_angular_tiptap_editor from '@flogeez/angular-tiptap-editor';
2
- import { Editor, Node as Node$1, Mark, Extension, EditorOptions, JSONContent, NodeConfig } from '@tiptap/core';
3
2
  import * as _angular_core from '@angular/core';
4
- import { AfterViewInit, OnDestroy, ElementRef, Signal, Injector, Type } from '@angular/core';
3
+ import { Injector, Type, AfterViewInit, OnDestroy, ElementRef, EnvironmentProviders, InjectionToken, Signal } from '@angular/core';
4
+ import { Editor, NodeConfig, Extension, Node as Node$2, Mark, EditorOptions, JSONContent } from '@tiptap/core';
5
5
  import { Observable } from 'rxjs';
6
+ import { Node as Node$1 } from '@tiptap/pm/model';
6
7
  import { ControlValueAccessor } from '@angular/forms';
7
- import { Node as Node$2 } from '@tiptap/pm/model';
8
8
  import { Decoration, EditorView, NodeView } from '@tiptap/pm/view';
9
9
 
10
10
  type SupportedLocale = "en" | "fr" | (string & {});
@@ -784,6 +784,147 @@ declare const ATE_CELL_BUBBLE_MENU_KEYS: readonly ["mergeCells", "splitCell"];
784
784
  type AteCellBubbleMenuKey = (typeof ATE_CELL_BUBBLE_MENU_KEYS)[number];
785
785
  type AteCellBubbleMenuConfig = Partial<Record<AteCellBubbleMenuKey, boolean>>;
786
786
 
787
+ /**
788
+ * Common options for rendering any Angular component as a TipTap NodeView
789
+ */
790
+ interface AteComponentRenderOptions {
791
+ /**
792
+ * Angular injector to use for creating the component
793
+ */
794
+ injector: Injector;
795
+ /**
796
+ * Additional inputs to pass to the component
797
+ */
798
+ inputs?: Record<string, unknown>;
799
+ /**
800
+ * Custom wrapper element tag (default: 'div')
801
+ */
802
+ wrapperTag?: string;
803
+ /**
804
+ * CSS classes to add to the wrapper element
805
+ */
806
+ wrapperClass?: string;
807
+ /**
808
+ * Whether the node should be treated as an atom (not editable)
809
+ * Default: true
810
+ */
811
+ atom?: boolean;
812
+ /**
813
+ * Enables editable content for <ng-content>.
814
+ * If true, TipTap will treat the component's content as editable.
815
+ * @default false
816
+ */
817
+ editableContent?: boolean;
818
+ /**
819
+ * Optional CSS selector to target an internal element of the component as the editable area.
820
+ */
821
+ contentSelector?: string;
822
+ /**
823
+ * Type of content allowed in the editable area.
824
+ */
825
+ contentMode?: "block" | "inline";
826
+ /**
827
+ * Whether to ignore mutations in the component's DOM.
828
+ * If true, TipTap won't try to sync changes from the component's DOM back to the editor state.
829
+ * @default true
830
+ */
831
+ ignoreMutation?: boolean | ((mutation: MutationRecord | {
832
+ type: "selection";
833
+ target: Node;
834
+ }) => boolean);
835
+ /**
836
+ * Callback called when an Output event is emitted by the component.
837
+ */
838
+ onOutput?: (outputName: string, value: unknown) => void;
839
+ /**
840
+ * Callback called when the node is updated.
841
+ */
842
+ onUpdate?: (node: Node$1) => void;
843
+ /**
844
+ * Callback called when the component is destroyed.
845
+ */
846
+ onDestroy?: () => void;
847
+ }
848
+ /**
849
+ * Unified configuration for registering an Angular component as an interactive 'Angular Node'.
850
+ * This provides high-level options to map Angular component logic (inputs, outputs, lifestyle)
851
+ * directly to TipTap's document structure.
852
+ */
853
+ interface RegisterAngularComponentOptions<T = unknown> {
854
+ /**
855
+ * The Angular component to register
856
+ */
857
+ component: Type<T>;
858
+ /**
859
+ * Unique name for the TipTap node
860
+ */
861
+ name?: string;
862
+ /**
863
+ * Default inputs (for standard components)
864
+ */
865
+ defaultInputs?: Record<string, unknown>;
866
+ /**
867
+ * TipTap attributes (for TipTap-aware components)
868
+ */
869
+ attributes?: Record<string, {
870
+ default?: unknown;
871
+ parseHTML?: (element: HTMLElement) => unknown;
872
+ renderHTML?: (attributes: Record<string, unknown>) => Record<string, unknown> | null;
873
+ }>;
874
+ /**
875
+ * CSS selector for the editable area inside the component
876
+ */
877
+ contentSelector?: string;
878
+ /**
879
+ * Content mode for the editable area
880
+ */
881
+ contentMode?: "block" | "inline";
882
+ /**
883
+ * Enable editable content via <ng-content> or contentSelector
884
+ * @default false
885
+ */
886
+ editableContent?: boolean;
887
+ /**
888
+ * Node group (block or inline)
889
+ * @default 'block'
890
+ */
891
+ group?: "block" | "inline";
892
+ /**
893
+ * Is the node draggable?
894
+ * @default true
895
+ */
896
+ draggable?: boolean;
897
+ /**
898
+ * Whether to ignore mutations in the component's DOM.
899
+ * @default true
900
+ */
901
+ ignoreMutation?: boolean | ((mutation: MutationRecord | {
902
+ type: "selection";
903
+ target: Node;
904
+ }) => boolean);
905
+ /**
906
+ * Custom HTML attributes for the wrapper
907
+ */
908
+ HTMLAttributes?: Record<string, unknown>;
909
+ /**
910
+ * Custom parseHTML rules
911
+ */
912
+ parseHTML?: NodeConfig["parseHTML"];
913
+ /**
914
+ * Custom renderHTML function
915
+ */
916
+ renderHTML?: NodeConfig["renderHTML"];
917
+ /**
918
+ * Callback called when an Output event is emitted by the component.
919
+ */
920
+ onOutput?: (outputName: string, value: unknown) => void;
921
+ }
922
+
923
+ /**
924
+ * Type representing an Angular component that can be registered as an editor node.
925
+ * Can be a direct Component class or a full registration options object.
926
+ */
927
+ type AteAngularNode = Type<unknown> | RegisterAngularComponentOptions<unknown>;
787
928
  /**
788
929
  * Global configuration interface for Angular Tiptap Editor.
789
930
  * Uses a flat structure for common settings and objects for complex configurations.
@@ -793,18 +934,18 @@ interface AteEditorConfig {
793
934
  theme?: "light" | "dark" | "auto";
794
935
  /** Display mode: classic or seamless (no borders/background) */
795
936
  mode?: "classic" | "seamless";
796
- /** Editor height (e.g., '300px', 'auto') */
797
- height?: string;
937
+ /** Editor height (e.g., '300px', 300, 'auto') */
938
+ height?: string | number;
798
939
  /** Focus position on initialization */
799
940
  autofocus?: "start" | "end" | "all" | boolean | number;
800
941
  /** Placeholder text displayed when the editor is empty */
801
942
  placeholder?: string;
802
943
  /** Initial editing state (if false, the editor is read-only) */
803
944
  editable?: boolean;
804
- /** Minimum editor height (e.g., '200px') */
805
- minHeight?: string;
806
- /** Maximum editor height (e.g., '500px') */
807
- maxHeight?: string;
945
+ /** Minimum editor height (e.g., '200px', 200) */
946
+ minHeight?: string | number;
947
+ /** Maximum editor height (e.g., '500px', 500) */
948
+ maxHeight?: string | number;
808
949
  /** If true, the editor takes 100% of the parent container's height */
809
950
  fillContainer?: boolean;
810
951
  /** Disabled state (often used with forms) */
@@ -853,6 +994,22 @@ interface AteEditorConfig {
853
994
  floatingToolbar?: boolean;
854
995
  /** Technical configuration for image uploads */
855
996
  imageUpload?: AteImageUploadConfig;
997
+ /**
998
+ * List of Angular components to automatically register as interactive editor nodes.
999
+ * This is the preferred way to extend the editor with custom Angular logic.
1000
+ */
1001
+ angularNodes?: AteAngularNode[];
1002
+ /** Standard TipTap extensions (Nodes, Marks, or Plugins) */
1003
+ tiptapExtensions?: (Extension | Node$2 | Mark)[];
1004
+ /** Raw TipTap editor options (e.g., enableInputRules, injectCSS, etc.) */
1005
+ tiptapOptions?: Partial<EditorOptions>;
1006
+ /** Reactive state calculators to extend the editor's live state */
1007
+ stateCalculators?: AteStateCalculator[];
1008
+ /**
1009
+ * Fully custom slash commands configuration.
1010
+ * When provided, it replaces the default groups based on toolbar toggles.
1011
+ */
1012
+ customSlashCommands?: AteCustomSlashCommands;
856
1013
  }
857
1014
 
858
1015
  /**
@@ -867,48 +1024,56 @@ declare class AteNoopValueAccessorDirective implements ControlValueAccessor {
867
1024
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AteNoopValueAccessorDirective, never, never, {}, {}, never, never, true, never>;
868
1025
  }
869
1026
 
1027
+ /**
1028
+ * The main rich-text editor component for Angular.
1029
+ *
1030
+ * Powered by Tiptap and built with a native Signal-based architecture, it provides
1031
+ * a seamless, high-performance editing experience. Supports automatic registration
1032
+ * of Angular components as interactive nodes ('Angular Nodes'), full Reactive Forms
1033
+ * integration, and extensive customization via the AteEditorConfig.
1034
+ */
870
1035
  declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
871
1036
  /** Configuration globale de l'éditeur */
872
1037
  config: _angular_core.InputSignal<AteEditorConfig>;
873
1038
  content: _angular_core.InputSignal<string>;
874
- placeholder: _angular_core.InputSignal<string>;
875
- editable: _angular_core.InputSignal<boolean>;
876
- disabled: _angular_core.InputSignal<boolean>;
877
- minHeight: _angular_core.InputSignal<number>;
878
- height: _angular_core.InputSignal<number | undefined>;
879
- maxHeight: _angular_core.InputSignal<number | undefined>;
880
- fillContainer: _angular_core.InputSignal<boolean>;
881
- showToolbar: _angular_core.InputSignal<boolean>;
882
- showFooter: _angular_core.InputSignal<boolean>;
883
- showCharacterCount: _angular_core.InputSignal<boolean>;
884
- showWordCount: _angular_core.InputSignal<boolean>;
1039
+ placeholder: _angular_core.InputSignal<string | undefined>;
1040
+ editable: _angular_core.InputSignal<boolean | undefined>;
1041
+ disabled: _angular_core.InputSignal<boolean | undefined>;
1042
+ minHeight: _angular_core.InputSignal<string | number | undefined>;
1043
+ height: _angular_core.InputSignal<string | number | undefined>;
1044
+ maxHeight: _angular_core.InputSignal<string | number | undefined>;
1045
+ fillContainer: _angular_core.InputSignal<boolean | undefined>;
1046
+ showToolbar: _angular_core.InputSignal<boolean | undefined>;
1047
+ showFooter: _angular_core.InputSignal<boolean | undefined>;
1048
+ showCharacterCount: _angular_core.InputSignal<boolean | undefined>;
1049
+ showWordCount: _angular_core.InputSignal<boolean | undefined>;
885
1050
  maxCharacters: _angular_core.InputSignal<number | undefined>;
886
- enableOfficePaste: _angular_core.InputSignal<boolean>;
887
- enableSlashCommands: _angular_core.InputSignal<boolean>;
888
- slashCommands: _angular_core.InputSignal<AteSlashCommandsConfig>;
1051
+ enableOfficePaste: _angular_core.InputSignal<boolean | undefined>;
1052
+ enableSlashCommands: _angular_core.InputSignal<boolean | undefined>;
1053
+ slashCommands: _angular_core.InputSignal<AteSlashCommandsConfig | undefined>;
889
1054
  customSlashCommands: _angular_core.InputSignal<AteCustomSlashCommands | undefined>;
890
1055
  locale: _angular_core.InputSignal<SupportedLocale | undefined>;
891
- autofocus: _angular_core.InputSignal<number | boolean | "start" | "end" | "all">;
892
- seamless: _angular_core.InputSignal<boolean>;
893
- floatingToolbar: _angular_core.InputSignal<boolean>;
894
- showEditToggle: _angular_core.InputSignal<boolean>;
895
- spellcheck: _angular_core.InputSignal<boolean>;
896
- tiptapExtensions: _angular_core.InputSignal<(Node$1<any, any> | Mark<any, any> | Extension<any, any>)[]>;
897
- tiptapOptions: _angular_core.InputSignal<Partial<EditorOptions>>;
898
- showBubbleMenu: _angular_core.InputSignal<boolean>;
899
- bubbleMenu: _angular_core.InputSignal<Partial<AteBubbleMenuConfig>>;
900
- showImageBubbleMenu: _angular_core.InputSignal<boolean>;
901
- imageBubbleMenu: _angular_core.InputSignal<Partial<Partial<Record<"separator" | "changeImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>>>>;
902
- toolbar: _angular_core.InputSignal<Partial<AteToolbarConfig>>;
903
- showTableBubbleMenu: _angular_core.InputSignal<boolean>;
904
- tableBubbleMenu: _angular_core.InputSignal<Partial<Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>>>>;
905
- showCellBubbleMenu: _angular_core.InputSignal<boolean>;
906
- cellBubbleMenu: _angular_core.InputSignal<Partial<Partial<Record<"mergeCells" | "splitCell", boolean>>>>;
1056
+ autofocus: _angular_core.InputSignal<number | boolean | "start" | "end" | "all" | undefined>;
1057
+ seamless: _angular_core.InputSignal<boolean | undefined>;
1058
+ floatingToolbar: _angular_core.InputSignal<boolean | undefined>;
1059
+ showEditToggle: _angular_core.InputSignal<boolean | undefined>;
1060
+ spellcheck: _angular_core.InputSignal<boolean | undefined>;
1061
+ tiptapExtensions: _angular_core.InputSignal<(Mark<any, any> | Node$2<any, any> | Extension<any, any>)[] | undefined>;
1062
+ tiptapOptions: _angular_core.InputSignal<Partial<EditorOptions> | undefined>;
1063
+ showBubbleMenu: _angular_core.InputSignal<boolean | undefined>;
1064
+ bubbleMenu: _angular_core.InputSignal<Partial<AteBubbleMenuConfig> | undefined>;
1065
+ showImageBubbleMenu: _angular_core.InputSignal<boolean | undefined>;
1066
+ imageBubbleMenu: _angular_core.InputSignal<Partial<Partial<Record<"separator" | "changeImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>>> | undefined>;
1067
+ toolbar: _angular_core.InputSignal<Partial<AteToolbarConfig> | undefined>;
1068
+ showTableBubbleMenu: _angular_core.InputSignal<boolean | undefined>;
1069
+ tableBubbleMenu: _angular_core.InputSignal<Partial<Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>>> | undefined>;
1070
+ showCellBubbleMenu: _angular_core.InputSignal<boolean | undefined>;
1071
+ cellBubbleMenu: _angular_core.InputSignal<Partial<Partial<Record<"mergeCells" | "splitCell", boolean>>> | undefined>;
907
1072
  /**
908
1073
  * Additionnal state calculators to extend the reactive editor state.
909
1074
  */
910
- stateCalculators: _angular_core.InputSignal<AteStateCalculator[]>;
911
- imageUpload: _angular_core.InputSignal<Partial<AteImageUploadOptions>>;
1075
+ stateCalculators: _angular_core.InputSignal<AteStateCalculator[] | undefined>;
1076
+ imageUpload: _angular_core.InputSignal<Partial<AteImageUploadOptions> | undefined>;
912
1077
  /**
913
1078
  * Custom handler for image uploads.
914
1079
  * When provided, images will be processed through this handler instead of being converted to base64.
@@ -960,56 +1125,56 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
960
1125
  readonly editorFullyInitialized: _angular_core.Signal<boolean>;
961
1126
  private _isFormControlDisabled;
962
1127
  readonly isFormControlDisabled: _angular_core.Signal<boolean>;
963
- readonly mergedDisabled: _angular_core.Signal<boolean>;
1128
+ readonly mergedDisabled: _angular_core.Signal<any>;
964
1129
  isEditorReady: _angular_core.Signal<boolean>;
965
1130
  readonly finalSeamless: _angular_core.Signal<boolean>;
966
- readonly finalEditable: _angular_core.Signal<boolean>;
967
- readonly finalPlaceholder: _angular_core.Signal<string>;
968
- readonly finalFillContainer: _angular_core.Signal<boolean>;
969
- readonly finalShowFooter: _angular_core.Signal<boolean>;
970
- readonly finalShowEditToggle: _angular_core.Signal<boolean>;
971
- readonly finalHeight: _angular_core.Signal<string | undefined>;
972
- readonly finalMinHeight: _angular_core.Signal<string | undefined>;
973
- readonly finalMaxHeight: _angular_core.Signal<string | undefined>;
974
- readonly finalSpellcheck: _angular_core.Signal<boolean>;
975
- readonly finalEnableOfficePaste: _angular_core.Signal<boolean>;
976
- readonly finalShowToolbar: _angular_core.Signal<boolean>;
977
- readonly finalToolbarConfig: _angular_core.Signal<AteToolbarConfig>;
978
- readonly finalFloatingToolbar: _angular_core.Signal<boolean>;
979
- readonly finalShowBubbleMenu: _angular_core.Signal<boolean>;
980
- readonly finalBubbleMenuConfig: _angular_core.Signal<AteBubbleMenuConfig>;
981
- readonly finalShowImageBubbleMenu: _angular_core.Signal<boolean>;
982
- readonly finalImageBubbleMenuConfig: _angular_core.Signal<Partial<Record<"separator" | "changeImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>>>;
983
- readonly finalShowTableBubbleMenu: _angular_core.Signal<boolean>;
984
- readonly finalTableBubbleMenuConfig: _angular_core.Signal<Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>>>;
985
- readonly finalShowCellBubbleMenu: _angular_core.Signal<boolean>;
986
- readonly finalCellBubbleMenuConfig: _angular_core.Signal<Partial<Record<"mergeCells" | "splitCell", boolean>>>;
987
- readonly finalEnableSlashCommands: _angular_core.Signal<boolean>;
988
- readonly finalSlashCommandsConfig: _angular_core.Signal<AteCustomSlashCommands>;
989
- readonly finalAutofocus: _angular_core.Signal<number | boolean | "start" | "end" | "all">;
990
- readonly finalMaxCharacters: _angular_core.Signal<number | undefined>;
991
- readonly finalShowCharacterCount: _angular_core.Signal<boolean>;
992
- readonly finalShowWordCount: _angular_core.Signal<boolean>;
1131
+ readonly finalEditable: _angular_core.Signal<any>;
1132
+ readonly finalPlaceholder: _angular_core.Signal<any>;
1133
+ readonly finalFillContainer: _angular_core.Signal<any>;
1134
+ readonly finalShowFooter: _angular_core.Signal<any>;
1135
+ readonly finalShowEditToggle: _angular_core.Signal<any>;
1136
+ readonly finalHeight: _angular_core.Signal<any>;
1137
+ readonly finalMinHeight: _angular_core.Signal<any>;
1138
+ readonly finalMaxHeight: _angular_core.Signal<any>;
1139
+ readonly finalSpellcheck: _angular_core.Signal<any>;
1140
+ readonly finalEnableOfficePaste: _angular_core.Signal<any>;
1141
+ readonly finalShowToolbar: _angular_core.Signal<any>;
1142
+ readonly finalToolbarConfig: _angular_core.Signal<any>;
1143
+ readonly finalFloatingToolbar: _angular_core.Signal<any>;
1144
+ readonly finalShowBubbleMenu: _angular_core.Signal<any>;
1145
+ readonly finalBubbleMenuConfig: _angular_core.Signal<any>;
1146
+ readonly finalShowImageBubbleMenu: _angular_core.Signal<any>;
1147
+ readonly finalImageBubbleMenuConfig: _angular_core.Signal<any>;
1148
+ readonly finalShowTableBubbleMenu: _angular_core.Signal<any>;
1149
+ readonly finalTableBubbleMenuConfig: _angular_core.Signal<any>;
1150
+ readonly finalShowCellBubbleMenu: _angular_core.Signal<any>;
1151
+ readonly finalCellBubbleMenuConfig: _angular_core.Signal<any>;
1152
+ readonly finalEnableSlashCommands: _angular_core.Signal<any>;
1153
+ readonly finalSlashCommandsConfig: _angular_core.Signal<any>;
1154
+ readonly finalAutofocus: _angular_core.Signal<any>;
1155
+ readonly finalMaxCharacters: _angular_core.Signal<any>;
1156
+ readonly finalShowCharacterCount: _angular_core.Signal<any>;
1157
+ readonly finalShowWordCount: _angular_core.Signal<any>;
993
1158
  readonly finalLocale: _angular_core.Signal<SupportedLocale>;
994
- readonly finalImageUploadConfig: _angular_core.Signal<{
995
- maxSize: number;
996
- handler?: AteImageUploadHandler;
997
- quality: number;
998
- maxWidth: number;
999
- maxHeight: number;
1000
- allowedTypes: string[];
1001
- enableDragDrop: boolean;
1002
- showPreview: boolean;
1003
- multiple: boolean;
1004
- compressImages: boolean;
1005
- }>;
1006
- readonly finalImageUploadHandler: _angular_core.Signal<AteImageUploadHandler | undefined>;
1159
+ readonly finalTiptapExtensions: _angular_core.Signal<any>;
1160
+ readonly finalTiptapOptions: _angular_core.Signal<any>;
1161
+ readonly finalStateCalculators: _angular_core.Signal<any>;
1162
+ readonly finalAngularNodesConfig: _angular_core.Signal<any>;
1163
+ readonly finalImageUploadConfig: _angular_core.Signal<any>;
1164
+ readonly finalImageUploadHandler: _angular_core.Signal<any>;
1007
1165
  readonly currentTranslations: _angular_core.Signal<_flogeez_angular_tiptap_editor.AteTranslations>;
1008
1166
  private _destroyRef;
1009
1167
  private ngControl;
1010
1168
  readonly i18nService: AteI18nService;
1011
1169
  readonly editorCommandsService: AteEditorCommandsService;
1012
- readonly editorState: _angular_core.Signal<_flogeez_angular_tiptap_editor.EditorStateSnapshot>;
1170
+ readonly editorState: _angular_core.Signal<_flogeez_angular_tiptap_editor.AteEditorStateSnapshot>;
1171
+ private injector;
1172
+ private globalConfig;
1173
+ /**
1174
+ * Final merged configuration.
1175
+ * Priority: Input [config] > Global config via provideAteEditor()
1176
+ */
1177
+ readonly effectiveConfig: _angular_core.Signal<any>;
1013
1178
  constructor();
1014
1179
  ngAfterViewInit(): void;
1015
1180
  ngOnDestroy(): void;
@@ -1033,6 +1198,26 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
1033
1198
  static ɵcmp: _angular_core.ɵɵ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 AteNoopValueAccessorDirective; inputs: {}; outputs: {}; }]>;
1034
1199
  }
1035
1200
 
1201
+ /**
1202
+ * Provides the necessary configuration and initialization for the Angular TipTap Editor.
1203
+ * This should be called in your app.config.ts (for standalone) or main.ts.
1204
+ *
1205
+ * This provider is essential for 'Angular Nodes' to work correctly, as it captures the
1206
+ * root Injector required to instantiate custom Angular components within the editor.
1207
+ * @example
1208
+ * ```ts
1209
+ * bootstrapApplication(AppComponent, {
1210
+ * providers: [
1211
+ * provideAteEditor({
1212
+ * theme: 'dark',
1213
+ * mode: 'seamless'
1214
+ * })
1215
+ * ]
1216
+ * });
1217
+ * ```
1218
+ */
1219
+ declare function provideAteEditor(config?: AteEditorConfig): EnvironmentProviders;
1220
+
1036
1221
  declare class AteImageService {
1037
1222
  /** Signals for image state */
1038
1223
  selectedImage: _angular_core.WritableSignal<AteImageData | null>;
@@ -1229,13 +1414,27 @@ declare const ATE_DEFAULT_BUBBLE_MENU_CONFIG: AteBubbleMenuConfig;
1229
1414
  declare const ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG: AteImageBubbleMenuConfig;
1230
1415
  declare const ATE_DEFAULT_TABLE_MENU_CONFIG: AteTableBubbleMenuConfig;
1231
1416
  declare const ATE_DEFAULT_CELL_MENU_CONFIG: AteCellBubbleMenuConfig;
1417
+ /**
1418
+ * Ultimate default configuration for the Angular Tiptap Editor.
1419
+ * This serves as the 'Level 4' fallback in the configuration hierarchy:
1420
+ * 1. Component Inputs (Le Roi)
1421
+ * 2. Component [config] (Le Prince)
1422
+ * 3. Global provideAteEditor() (Le Duc)
1423
+ * 4. ATE_DEFAULT_CONFIG (Le Peuple)
1424
+ */
1425
+ declare const ATE_DEFAULT_CONFIG: any;
1426
+
1427
+ /**
1428
+ * Injection Token for global editor configuration.
1429
+ */
1430
+ declare const ATE_GLOBAL_CONFIG: InjectionToken<AteEditorConfig>;
1232
1431
 
1233
1432
  /**
1234
1433
  * Props that are injected into Angular NodeView components
1235
1434
  */
1236
1435
  interface AteAngularNodeViewProps {
1237
1436
  editor: Editor;
1238
- node: Node$2;
1437
+ node: Node$1;
1239
1438
  decorations: readonly Decoration[];
1240
1439
  selected: boolean;
1241
1440
  extension: unknown;
@@ -1244,9 +1443,10 @@ interface AteAngularNodeViewProps {
1244
1443
  deleteNode: () => void;
1245
1444
  }
1246
1445
  /**
1247
- * Base abstract class for Angular components used as TipTap NodeViews.
1446
+ * Base abstract class for custom 'Angular Nodes'.
1248
1447
  *
1249
- * Extend this class in your custom components to get access to the TipTap node properties.
1448
+ * Extend this class in your custom components to automatically receive TipTap editor
1449
+ * properties (node attributes, selection state, etc.) as reactive Signals.
1250
1450
  *
1251
1451
  * @example
1252
1452
  * ```typescript
@@ -1274,7 +1474,7 @@ declare abstract class AteAngularNodeView {
1274
1474
  /**
1275
1475
  * The ProseMirror node
1276
1476
  */
1277
- node: Signal<Node$2>;
1477
+ node: Signal<Node$1>;
1278
1478
  /**
1279
1479
  * Decorations applied to this node
1280
1480
  */
@@ -1321,7 +1521,7 @@ declare abstract class AteAngularNodeView {
1321
1521
  *
1322
1522
  * @internal
1323
1523
  */
1324
- _updateNodeView(node: Node$2, decorations: readonly Decoration[]): void;
1524
+ _updateNodeView(node: Node$1, decorations: readonly Decoration[]): void;
1325
1525
  /**
1326
1526
  * Internal method to update the selection state.
1327
1527
  * This is called by the AngularNodeViewRenderer.
@@ -1340,140 +1540,6 @@ declare abstract class AteAngularNodeView {
1340
1540
  static ɵdir: _angular_core.ɵɵDirectiveDeclaration<AteAngularNodeView, never, never, {}, {}, never, never, true, never>;
1341
1541
  }
1342
1542
 
1343
- /**
1344
- * Common options for rendering any Angular component as a TipTap NodeView
1345
- */
1346
- interface AteComponentRenderOptions {
1347
- /**
1348
- * Angular injector to use for creating the component
1349
- */
1350
- injector: Injector;
1351
- /**
1352
- * Additional inputs to pass to the component
1353
- */
1354
- inputs?: Record<string, unknown>;
1355
- /**
1356
- * Custom wrapper element tag (default: 'div')
1357
- */
1358
- wrapperTag?: string;
1359
- /**
1360
- * CSS classes to add to the wrapper element
1361
- */
1362
- wrapperClass?: string;
1363
- /**
1364
- * Whether the node should be treated as an atom (not editable)
1365
- * Default: true
1366
- */
1367
- atom?: boolean;
1368
- /**
1369
- * Enables editable content for <ng-content>.
1370
- * If true, TipTap will treat the component's content as editable.
1371
- * @default false
1372
- */
1373
- editableContent?: boolean;
1374
- /**
1375
- * Optional CSS selector to target an internal element of the component as the editable area.
1376
- */
1377
- contentSelector?: string;
1378
- /**
1379
- * Type of content allowed in the editable area.
1380
- */
1381
- contentMode?: "block" | "inline";
1382
- /**
1383
- * Whether to ignore mutations in the component's DOM.
1384
- * If true, TipTap won't try to sync changes from the component's DOM back to the editor state.
1385
- * @default true
1386
- */
1387
- ignoreMutation?: boolean | ((mutation: MutationRecord | {
1388
- type: "selection";
1389
- target: Node;
1390
- }) => boolean);
1391
- /**
1392
- * Callback called when an Output event is emitted by the component.
1393
- */
1394
- onOutput?: (outputName: string, value: unknown) => void;
1395
- /**
1396
- * Callback called when the node is updated.
1397
- */
1398
- onUpdate?: (node: Node$2) => void;
1399
- /**
1400
- * Callback called when the component is destroyed.
1401
- */
1402
- onDestroy?: () => void;
1403
- }
1404
- /**
1405
- * Unified configuration for registering ANY Angular component.
1406
- */
1407
- interface RegisterAngularComponentOptions<T = unknown> {
1408
- /**
1409
- * The Angular component to register
1410
- */
1411
- component: Type<T>;
1412
- /**
1413
- * Unique name for the TipTap node
1414
- */
1415
- name?: string;
1416
- /**
1417
- * Default inputs (for standard components)
1418
- */
1419
- defaultInputs?: Record<string, unknown>;
1420
- /**
1421
- * TipTap attributes (for TipTap-aware components)
1422
- */
1423
- attributes?: Record<string, {
1424
- default?: unknown;
1425
- parseHTML?: (element: HTMLElement) => unknown;
1426
- renderHTML?: (attributes: Record<string, unknown>) => Record<string, unknown> | null;
1427
- }>;
1428
- /**
1429
- * CSS selector for the editable area inside the component
1430
- */
1431
- contentSelector?: string;
1432
- /**
1433
- * Content mode for the editable area
1434
- */
1435
- contentMode?: "block" | "inline";
1436
- /**
1437
- * Enable editable content via <ng-content> or contentSelector
1438
- * @default false
1439
- */
1440
- editableContent?: boolean;
1441
- /**
1442
- * Node group (block or inline)
1443
- * @default 'block'
1444
- */
1445
- group?: "block" | "inline";
1446
- /**
1447
- * Is the node draggable?
1448
- * @default true
1449
- */
1450
- draggable?: boolean;
1451
- /**
1452
- * Whether to ignore mutations in the component's DOM.
1453
- * @default true
1454
- */
1455
- ignoreMutation?: boolean | ((mutation: MutationRecord | {
1456
- type: "selection";
1457
- target: Node;
1458
- }) => boolean);
1459
- /**
1460
- * Custom HTML attributes for the wrapper
1461
- */
1462
- HTMLAttributes?: Record<string, unknown>;
1463
- /**
1464
- * Custom parseHTML rules
1465
- */
1466
- parseHTML?: NodeConfig["parseHTML"];
1467
- /**
1468
- * Custom renderHTML function
1469
- */
1470
- renderHTML?: NodeConfig["renderHTML"];
1471
- /**
1472
- * Callback called when an Output event is emitted by the component.
1473
- */
1474
- onOutput?: (outputName: string, value: unknown) => void;
1475
- }
1476
-
1477
1543
  /**
1478
1544
  * Universal Renderer for Angular Components as TipTap NodeViews.
1479
1545
  *
@@ -1485,7 +1551,7 @@ interface RegisterAngularComponentOptions<T = unknown> {
1485
1551
  * - Unified lifecycle and event management
1486
1552
  */
1487
1553
  declare function AteNodeViewRenderer<T>(component: Type<T>, options: AteComponentRenderOptions): (props: {
1488
- node: Node$2;
1554
+ node: Node$1;
1489
1555
  view: EditorView;
1490
1556
  getPos: () => number | undefined;
1491
1557
  decorations: readonly Decoration[];
@@ -1499,7 +1565,7 @@ declare function AteNodeViewRenderer<T>(component: Type<T>, options: AteComponen
1499
1565
  *
1500
1566
  * @internal
1501
1567
  */
1502
- declare function createAngularComponentExtension<T = unknown>(injector: Injector, options: RegisterAngularComponentOptions<T>): Node$1;
1568
+ declare function createAngularComponentExtension<T = unknown>(injector: Injector, options: RegisterAngularComponentOptions<T>): Node$2;
1503
1569
 
1504
1570
  /**
1505
1571
  * Registers ANY Angular component as a TipTap node extension.
@@ -1514,51 +1580,25 @@ declare function createAngularComponentExtension<T = unknown>(injector: Injector
1514
1580
  * Allows using any existing Angular component. Its `@Input()` properties are automatically
1515
1581
  * synchronized with TipTap node attributes.
1516
1582
  *
1517
- * @param injector - The Angular Injector (obtained via `inject(Injector)`)
1518
- * @param options - Configuration options for the component extension
1583
+ * @param injectorOrOptions - The Angular Injector OR the configuration options
1584
+ * @param maybeOptions - Configuration options (if the first param was an injector)
1519
1585
  * @returns A TipTap Node extension ready to be used
1520
1586
  *
1521
1587
  * @example
1522
1588
  * ```typescript
1523
- * registerAngularComponent(injector, {
1589
+ * // Modern way (requires provideAteEditor())
1590
+ * registerAngularComponent({
1524
1591
  * component: MyComponent,
1525
- * name: 'myComponent',
1526
- * defaultInputs: { color: 'blue' }
1592
+ * name: 'myComponent'
1593
+ * });
1594
+ *
1595
+ * // Classic way
1596
+ * registerAngularComponent(injector, {
1597
+ * component: MyComponent
1527
1598
  * });
1528
1599
  * ```
1529
1600
  */
1530
- declare function registerAngularComponent<T = unknown>(injector: Injector, options: RegisterAngularComponentOptions<T>): Node$1;
1531
-
1532
- /** @deprecated Renamed to `ATE_INITIAL_EDITOR_STATE`. This alias will be removed in v3.0.0. */
1533
- declare const INITIAL_EDITOR_STATE: AteEditorStateSnapshot;
1534
-
1535
- /** @deprecated Renamed to `ATE_SLASH_COMMAND_KEYS`. This alias will be removed in v3.0.0. */
1536
- declare const SLASH_COMMAND_KEYS: readonly ["heading1", "heading2", "heading3", "bulletList", "orderedList", "blockquote", "code", "image", "horizontalRule", "table"];
1537
- /** @deprecated Renamed to `ATE_DEFAULT_SLASH_COMMANDS_CONFIG`. This alias will be removed in v3.0.0. */
1538
- declare const DEFAULT_SLASH_COMMANDS_CONFIG: AteSlashCommandsConfig;
1539
-
1540
- /** @deprecated Renamed to `AteDiscoveryCalculator`. This alias will be removed in v3.0.0. */
1541
- declare const DiscoveryCalculator: _flogeez_angular_tiptap_editor.AteStateCalculator;
1542
- /** @deprecated Renamed to `AteImageCalculator`. This alias will be removed in v3.0.0. */
1543
- declare const ImageCalculator: _flogeez_angular_tiptap_editor.AteStateCalculator;
1544
- /** @deprecated Renamed to `AteMarksCalculator`. This alias will be removed in v3.0.0. */
1545
- declare const MarksCalculator: _flogeez_angular_tiptap_editor.AteStateCalculator;
1546
- /** @deprecated Renamed to `AteSelectionCalculator`. This alias will be removed in v3.0.0. */
1547
- declare const SelectionCalculator: _flogeez_angular_tiptap_editor.AteStateCalculator;
1548
- /** @deprecated Renamed to `AteStructureCalculator`. This alias will be removed in v3.0.0. */
1549
- declare const StructureCalculator: _flogeez_angular_tiptap_editor.AteStateCalculator;
1550
- /** @deprecated Renamed to `AteTableCalculator`. This alias will be removed in v3.0.0. */
1551
- declare const TableCalculator: _flogeez_angular_tiptap_editor.AteStateCalculator;
1552
- /** @deprecated Renamed to `ATE_DEFAULT_TOOLBAR_CONFIG`. This alias will be removed in v3.0.0. */
1553
- declare const DEFAULT_TOOLBAR_CONFIG: AteToolbarConfig;
1554
- /** @deprecated Renamed to `ATE_DEFAULT_BUBBLE_MENU_CONFIG`. This alias will be removed in v3.0.0. */
1555
- declare const DEFAULT_BUBBLE_MENU_CONFIG: AteBubbleMenuConfig;
1556
- /** @deprecated Renamed to `ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG`. This alias will be removed in v3.0.0. */
1557
- declare const DEFAULT_IMAGE_BUBBLE_MENU_CONFIG: Partial<Record<"separator" | "changeImage" | "resizeSmall" | "resizeMedium" | "resizeLarge" | "resizeOriginal" | "deleteImage", boolean>>;
1558
- /** @deprecated Renamed to `ATE_DEFAULT_TABLE_MENU_CONFIG`. This alias will be removed in v3.0.0. */
1559
- declare const DEFAULT_TABLE_MENU_CONFIG: Partial<Record<"addColumnBefore" | "addColumnAfter" | "deleteColumn" | "addRowBefore" | "addRowAfter" | "deleteRow" | "deleteTable" | "toggleHeaderColumn" | "toggleHeaderRow" | "separator", boolean>>;
1560
- /** @deprecated Renamed to `ATE_DEFAULT_CELL_MENU_CONFIG`. This alias will be removed in v3.0.0. */
1561
- declare const DEFAULT_CELL_MENU_CONFIG: Partial<Record<"mergeCells" | "splitCell", boolean>>;
1601
+ declare function registerAngularComponent<T = unknown>(injectorOrOptions: Injector | RegisterAngularComponentOptions<T>, maybeOptions?: RegisterAngularComponentOptions<T>): Node$2;
1562
1602
 
1563
- export { ATE_BUBBLE_MENU_KEYS, ATE_CELL_BUBBLE_MENU_KEYS, ATE_DEFAULT_BUBBLE_MENU_CONFIG, ATE_DEFAULT_CELL_MENU_CONFIG, ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG, ATE_DEFAULT_SLASH_COMMANDS_CONFIG, ATE_DEFAULT_TABLE_MENU_CONFIG, ATE_DEFAULT_TOOLBAR_CONFIG, ATE_IMAGE_BUBBLE_MENU_KEYS, ATE_INITIAL_EDITOR_STATE, ATE_SLASH_COMMAND_KEYS, ATE_TABLE_BUBBLE_MENU_KEYS, ATE_TOOLBAR_KEYS, AngularTiptapEditorComponent, AteAngularNodeView, AteColorPickerService, AteDiscoveryCalculator, AteEditorCommandsService, AteI18nService, AteImageCalculator, AteImageService, AteLinkService, AteMarksCalculator, AteNodeViewRenderer, AteNoopValueAccessorDirective, AteSelectionCalculator, AteStructureCalculator, AteTableCalculator, AteColorPickerService as ColorPickerService, DEFAULT_BUBBLE_MENU_CONFIG, DEFAULT_CELL_MENU_CONFIG, DEFAULT_IMAGE_BUBBLE_MENU_CONFIG, DEFAULT_SLASH_COMMANDS_CONFIG, DEFAULT_TABLE_MENU_CONFIG, DEFAULT_TOOLBAR_CONFIG, DiscoveryCalculator, AteEditorCommandsService as EditorCommandsService, INITIAL_EDITOR_STATE, ImageCalculator, AteImageService as ImageService, AteLinkService as LinkService, MarksCalculator, SLASH_COMMAND_KEYS, SelectionCalculator, StructureCalculator, TableCalculator, AteI18nService as TiptapI18nService, createAngularComponentExtension, createDefaultSlashCommands, filterSlashCommands, registerAngularComponent };
1564
- export type { AteAngularNodeViewProps, AteBubbleMenuConfig, AteBubbleMenuKey, AteCellBubbleMenuConfig, AteCellBubbleMenuKey, AteColorEditMode, AteColorPickerSelection, AteComponentRenderOptions, AteCustomBubbleMenuItem, AteCustomSlashCommands, AteCustomToolbarItem, AteEditorConfig, AteEditorStateSnapshot, AteImageBubbleMenuConfig, AteImageBubbleMenuKey, AteImageData, AteImageUploadConfig, AteImageUploadContext, AteImageUploadHandler, AteImageUploadHandlerResult, AteImageUploadOptions, AteImageUploadResult, AteResizeOptions, AteSlashCommandItem, AteSlashCommandKey, AteSlashCommandsConfig, AteStateCalculator, AteTableBubbleMenuConfig, AteTableBubbleMenuKey, AteToolbarConfig, AteToolbarKey, AteTranslations, AteBubbleMenuConfig as BubbleMenuConfig, AteCellBubbleMenuConfig as CellBubbleMenuConfig, AteCustomSlashCommands as CustomSlashCommands, AteEditorConfig as EditorConfig, AteEditorStateSnapshot as EditorStateSnapshot, AteImageBubbleMenuConfig as ImageBubbleMenuConfig, AteImageData as ImageData, AteImageUploadHandler as ImageUploadHandler, AteImageUploadOptions as ImageUploadOptions, AteImageUploadResult as ImageUploadResult, RegisterAngularComponentOptions, AteResizeOptions as ResizeOptions, AteSlashCommandItem as SlashCommandItem, AteSlashCommandKey as SlashCommandKey, AteSlashCommandsConfig as SlashCommandsConfig, SupportedLocale, AteTableBubbleMenuConfig as TableBubbleMenuConfig, AteToolbarConfig as ToolbarConfig };
1603
+ export { ATE_BUBBLE_MENU_KEYS, ATE_CELL_BUBBLE_MENU_KEYS, ATE_DEFAULT_BUBBLE_MENU_CONFIG, ATE_DEFAULT_CELL_MENU_CONFIG, ATE_DEFAULT_CONFIG, ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG, ATE_DEFAULT_SLASH_COMMANDS_CONFIG, ATE_DEFAULT_TABLE_MENU_CONFIG, ATE_DEFAULT_TOOLBAR_CONFIG, ATE_GLOBAL_CONFIG, ATE_IMAGE_BUBBLE_MENU_KEYS, ATE_INITIAL_EDITOR_STATE, ATE_SLASH_COMMAND_KEYS, ATE_TABLE_BUBBLE_MENU_KEYS, ATE_TOOLBAR_KEYS, AngularTiptapEditorComponent, AteAngularNodeView, AteColorPickerService, AteDiscoveryCalculator, AteEditorCommandsService, AteI18nService, AteImageCalculator, AteImageService, AteLinkService, AteMarksCalculator, AteNodeViewRenderer, AteNoopValueAccessorDirective, AteSelectionCalculator, AteStructureCalculator, AteTableCalculator, createAngularComponentExtension, createDefaultSlashCommands, filterSlashCommands, provideAteEditor, registerAngularComponent };
1604
+ export type { AteAngularNode, AteBubbleMenuConfig, AteBubbleMenuKey, AteCellBubbleMenuConfig, AteCellBubbleMenuKey, AteColorEditMode, AteColorPickerSelection, AteComponentRenderOptions, AteCustomBubbleMenuItem, AteCustomSlashCommands, AteCustomToolbarItem, AteEditorConfig, AteEditorStateSnapshot, AteImageBubbleMenuConfig, AteImageBubbleMenuKey, AteImageData, AteImageUploadConfig, AteImageUploadContext, AteImageUploadHandler, AteImageUploadHandlerResult, AteImageUploadOptions, AteImageUploadResult, AteResizeOptions, AteSlashCommandItem, AteSlashCommandKey, AteSlashCommandsConfig, AteStateCalculator, AteTableBubbleMenuConfig, AteTableBubbleMenuKey, AteToolbarConfig, AteToolbarKey, AteTranslations, RegisterAngularComponentOptions, SupportedLocale };