@flogeez/angular-tiptap-editor 3.0.3 → 3.1.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
@@ -2,8 +2,8 @@ import * as _flogeez_angular_tiptap_editor from '@flogeez/angular-tiptap-editor'
2
2
  import * as _angular_core from '@angular/core';
3
3
  import { Injector, Type, AfterViewInit, OnDestroy, ElementRef, EnvironmentProviders, InjectionToken, Signal } from '@angular/core';
4
4
  import { Editor, NodeConfig, Extension, Node as Node$2, Mark, EditorOptions, JSONContent } from '@tiptap/core';
5
- import { Observable } from 'rxjs';
6
5
  import { Node as Node$1 } from '@tiptap/pm/model';
6
+ import { Observable } from 'rxjs';
7
7
  import { ControlValueAccessor } from '@angular/forms';
8
8
  import * as _popperjs_core from '@popperjs/core';
9
9
  import { Decoration, EditorView, NodeView } from '@tiptap/pm/view';
@@ -184,6 +184,8 @@ interface AteTranslations {
184
184
  confirmDelete: string;
185
185
  toggleEdit: string;
186
186
  viewMode: string;
187
+ blockAdd: string;
188
+ blockDrag: string;
187
189
  };
188
190
  common: {
189
191
  cancel: string;
@@ -362,6 +364,8 @@ declare class AteI18nService {
362
364
  confirmDelete: string;
363
365
  toggleEdit: string;
364
366
  viewMode: string;
367
+ blockAdd: string;
368
+ blockDrag: string;
365
369
  }>;
366
370
  readonly common: _angular_core.Signal<{
367
371
  cancel: string;
@@ -941,6 +945,10 @@ interface RegisterAngularComponentOptions<T = unknown> {
941
945
  * Can be a direct Component class or a full registration options object.
942
946
  */
943
947
  type AteAngularNode = Type<unknown> | RegisterAngularComponentOptions<unknown>;
948
+ /** Possible display modes for block level controls */
949
+ type AteBlockControlsMode = "inside" | "outside" | "none";
950
+ /** Possible values for editor autofocus */
951
+ type AteAutofocusMode = "start" | "end" | "all" | boolean | number;
944
952
  /**
945
953
  * Global configuration interface for Angular Tiptap Editor.
946
954
  * Uses a flat structure for common settings and objects for complex configurations.
@@ -953,7 +961,7 @@ interface AteEditorConfig {
953
961
  /** Editor height (e.g., '300px', 300, 'auto') */
954
962
  height?: string | number;
955
963
  /** Focus position on initialization */
956
- autofocus?: "start" | "end" | "all" | boolean | number;
964
+ autofocus?: AteAutofocusMode;
957
965
  /** Placeholder text displayed when the editor is empty */
958
966
  placeholder?: string;
959
967
  /** Initial editing state (if false, the editor is read-only) */
@@ -996,6 +1004,13 @@ interface AteEditorConfig {
996
1004
  enableSlashCommands?: boolean;
997
1005
  /** Maximum number of characters allowed */
998
1006
  maxCharacters?: number;
1007
+ /**
1008
+ * Block level controls (plus button and drag handle) display mode.
1009
+ * - 'inside': Elements are placed inside the editor (reserves space via padding).
1010
+ * - 'outside': Elements float outside the editor boundary (no layout shift).
1011
+ * - 'none': Disabled (not displayed).
1012
+ */
1013
+ blockControls?: AteBlockControlsMode;
999
1014
  /** Detailed toolbar configuration (items, groups) */
1000
1015
  toolbar?: AteToolbarConfig;
1001
1016
  /** Text context menu configuration */
@@ -1070,8 +1085,9 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
1070
1085
  enableSlashCommands: _angular_core.InputSignal<boolean | undefined>;
1071
1086
  slashCommands: _angular_core.InputSignal<AteSlashCommandsConfig | undefined>;
1072
1087
  customSlashCommands: _angular_core.InputSignal<AteCustomSlashCommands | undefined>;
1088
+ blockControls: _angular_core.InputSignal<AteBlockControlsMode | undefined>;
1073
1089
  locale: _angular_core.InputSignal<SupportedLocale | undefined>;
1074
- autofocus: _angular_core.InputSignal<number | boolean | "start" | "end" | "all" | undefined>;
1090
+ autofocus: _angular_core.InputSignal<AteAutofocusMode | undefined>;
1075
1091
  seamless: _angular_core.InputSignal<boolean | undefined>;
1076
1092
  floatingToolbar: _angular_core.InputSignal<boolean | undefined>;
1077
1093
  showEditToggle: _angular_core.InputSignal<boolean | undefined>;
@@ -1135,12 +1151,18 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
1135
1151
  private _wordCount;
1136
1152
  private _isDragOver;
1137
1153
  private _editorFullyInitialized;
1154
+ private _hoveredBlock;
1138
1155
  private lastEmittedHtml;
1139
1156
  readonly editor: _angular_core.Signal<Editor | null>;
1140
1157
  readonly characterCount: _angular_core.Signal<number>;
1141
1158
  readonly wordCount: _angular_core.Signal<number>;
1142
1159
  readonly isDragOver: _angular_core.Signal<boolean>;
1143
1160
  readonly editorFullyInitialized: _angular_core.Signal<boolean>;
1161
+ readonly hoveredBlock: _angular_core.Signal<{
1162
+ node: Node$1;
1163
+ element: HTMLElement;
1164
+ pos: number;
1165
+ } | null>;
1144
1166
  private _isFormControlDisabled;
1145
1167
  readonly isFormControlDisabled: _angular_core.Signal<boolean>;
1146
1168
  readonly mergedDisabled: _angular_core.Signal<boolean>;
@@ -1169,8 +1191,9 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
1169
1191
  readonly finalCellBubbleMenuConfig: _angular_core.Signal<Partial<Record<"mergeCells" | "splitCell", boolean>>>;
1170
1192
  readonly finalEnableSlashCommands: _angular_core.Signal<boolean>;
1171
1193
  readonly finalSlashCommandsConfig: _angular_core.Signal<AteCustomSlashCommands>;
1172
- readonly finalAutofocus: _angular_core.Signal<number | boolean | "start" | "end" | "all" | undefined>;
1194
+ readonly finalAutofocus: _angular_core.Signal<AteAutofocusMode | undefined>;
1173
1195
  readonly finalMaxCharacters: _angular_core.Signal<number | undefined>;
1196
+ readonly finalBlockControls: _angular_core.Signal<AteBlockControlsMode>;
1174
1197
  readonly finalShowCharacterCount: _angular_core.Signal<boolean>;
1175
1198
  readonly finalShowWordCount: _angular_core.Signal<boolean>;
1176
1199
  readonly finalLocale: _angular_core.Signal<SupportedLocale>;
@@ -1203,7 +1226,7 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
1203
1226
  theme?: "light" | "dark" | "auto";
1204
1227
  mode?: "classic" | "seamless";
1205
1228
  height?: string | number;
1206
- autofocus?: "start" | "end" | "all" | boolean | number;
1229
+ autofocus?: AteAutofocusMode;
1207
1230
  placeholder?: string;
1208
1231
  editable?: boolean;
1209
1232
  minHeight?: string | number;
@@ -1225,6 +1248,7 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
1225
1248
  downloadImage?: boolean;
1226
1249
  enableSlashCommands?: boolean;
1227
1250
  maxCharacters?: number;
1251
+ blockControls?: AteBlockControlsMode;
1228
1252
  toolbar?: AteToolbarConfig;
1229
1253
  bubbleMenu?: AteBubbleMenuConfig;
1230
1254
  imageBubbleMenu?: AteImageBubbleMenuConfig;
@@ -1259,7 +1283,7 @@ declare class AngularTiptapEditorComponent implements AfterViewInit, OnDestroy {
1259
1283
  private setupFormControlSubscription;
1260
1284
  onEditorClick(event: Event): void;
1261
1285
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<AngularTiptapEditorComponent, never>;
1262
- 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: {}; }]>;
1286
+ 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; }; "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 AteNoopValueAccessorDirective; inputs: {}; outputs: {}; }]>;
1263
1287
  }
1264
1288
 
1265
1289
  /**
@@ -1698,4 +1722,4 @@ declare function createAngularComponentExtension<T = unknown>(injector: Injector
1698
1722
  declare function registerAngularComponent<T = unknown>(injectorOrOptions: Injector | RegisterAngularComponentOptions<T>, maybeOptions?: RegisterAngularComponentOptions<T>): Node$2;
1699
1723
 
1700
1724
  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_IMAGE_UPLOAD_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, AteTooltipDirective, createAngularComponentExtension, createDefaultSlashCommands, filterSlashCommands, provideAteEditor, registerAngularComponent };
1701
- 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 };
1725
+ export type { AteAngularNode, AteAutofocusMode, AteBlockControlsMode, 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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flogeez/angular-tiptap-editor",
3
- "version": "3.0.3",
3
+ "version": "3.1.0",
4
4
  "description": "A modern, customizable rich-text editor for Angular (18+), built with Tiptap and featuring complete internationalization support",
5
5
  "keywords": [
6
6
  "angular",