@flogeez/angular-tiptap-editor 2.4.0 → 3.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 CHANGED
@@ -5,6 +5,28 @@ All notable changes to `@flogeez/angular-tiptap-editor` will be documented in th
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html), with the exception that the major version is specifically aligned with the major version of [Tiptap](https://tiptap.dev).
7
7
 
8
+ ## [3.0.1] - 2026-02-06
9
+
10
+ ### Fixed
11
+
12
+ - **Link & Underline extensions**: Native `Link` and `Underline` extensions are now utilized directly from `StarterKit` instead of being loaded as separate extensions.
13
+
14
+ ## [3.0.0] - 2026-02-05
15
+
16
+ ### Changed
17
+
18
+ - **Upgrade to Tiptap v3**: Full migration from Tiptap v2 to v3, aligning with the latest stable ecosystem.
19
+ - **Consolidated Dependencies**: Transitioned to the unified `@tiptap/extensions` package instead of individual packages, simplifying dependency management and improving performance.
20
+ - **Refined Configuration Hierarchy**: Implemented a more intuitive configuration cascade: **Component Inputs > [config] Object > Global Configuration > Defaults**. Direct inputs now have absolute priority for better DX.
21
+ - **Flexible Height Types**: `height`, `minHeight`, and `maxHeight` inputs now accept both `number` (pixels) and `string` (CSS values like '80vh') interchangeably.
22
+
23
+ ### Breaking Changes
24
+
25
+ - **Peer Dependencies**: The library now requires `@tiptap/core`, `@tiptap/pm`, and associated extensions to be at version `^3.0.0`.
26
+ - **Input Defaults**: All optional component inputs (except `content`) now default to `undefined` to allow proper inheritance from global or instance-level configurations.
27
+ - **Removal of Deprecated Aliases**: Definitive removal of legacy exported names (without the `Ate` prefix) that were deprecated in v2.2.0.
28
+ - **Office Paste**: Updated `@intevation/tiptap-extension-office-paste` to `^0.1.2` for Tiptap v3 compatibility.
29
+
8
30
  ## [2.4.0] - 2026-01-29
9
31
 
10
32
  ### Added
package/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Angular Tiptap Editor
2
2
 
3
+ > [!IMPORTANT]
4
+ > **New Version Available**: v3.0.0 uses Tiptap v3. If you need to stay on Tiptap v2, please use version `^2.4.0`.
5
+
3
6
  A modern, customizable rich-text editor for Angular, built with Tiptap.
4
7
 
5
8
  [![NPM Version](https://img.shields.io/npm/v/@flogeez/angular-tiptap-editor?style=for-the-badge&logo=npm)](https://www.npmjs.com/package/@flogeez/angular-tiptap-editor) [![Demo](https://img.shields.io/badge/Demo-Live-brightgreen?style=for-the-badge&logo=google-chrome)](https://flogeez.github.io/angular-tiptap-editor/) [![Try it on StackBlitz](https://img.shields.io/badge/Try%20it-StackBlitz-blue?style=for-the-badge&logo=stackblitz)](https://stackblitz.com/edit/angular-tiptap-editor)
@@ -3,23 +3,17 @@ import { input, output, ChangeDetectionStrategy, Component, signal, computed, In
3
3
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
4
4
  import { Node as Node$1, nodeInputRule, mergeAttributes, Extension, getAttributes, Editor } from '@tiptap/core';
5
5
  import StarterKit from '@tiptap/starter-kit';
6
- import Placeholder from '@tiptap/extension-placeholder';
7
- import CharacterCount from '@tiptap/extension-character-count';
8
- import Underline from '@tiptap/extension-underline';
9
- import Superscript from '@tiptap/extension-superscript';
10
- import Subscript from '@tiptap/extension-subscript';
11
- import TextAlign from '@tiptap/extension-text-align';
12
- import Link from '@tiptap/extension-link';
13
- import Highlight from '@tiptap/extension-highlight';
14
- import TextStyle from '@tiptap/extension-text-style';
15
- import Color from '@tiptap/extension-color';
6
+ import { Placeholder, CharacterCount } from '@tiptap/extensions';
7
+ import { Superscript } from '@tiptap/extension-superscript';
8
+ import { Subscript } from '@tiptap/extension-subscript';
9
+ import { TextAlign } from '@tiptap/extension-text-align';
10
+ import { Highlight } from '@tiptap/extension-highlight';
11
+ import { TextStyle } from '@tiptap/extension-text-style';
12
+ import { Color } from '@tiptap/extension-color';
16
13
  import OfficePaste from '@intevation/tiptap-extension-office-paste';
17
14
  import { Plugin, PluginKey, TextSelection, NodeSelection } from '@tiptap/pm/state';
18
15
  import { DecorationSet, Decoration } from '@tiptap/pm/view';
19
- import Table from '@tiptap/extension-table';
20
- import TableRow from '@tiptap/extension-table-row';
21
- import TableCell from '@tiptap/extension-table-cell';
22
- import TableHeader from '@tiptap/extension-table-header';
16
+ import { Table, TableRow, TableHeader, TableCell } from '@tiptap/extension-table';
23
17
  import { isObservable, firstValueFrom, Subscription, concat, defer, of, tap } from 'rxjs';
24
18
  import { CommonModule } from '@angular/common';
25
19
  import tippy, { sticky } from 'tippy.js';
@@ -1679,7 +1673,8 @@ class AteColorPickerService {
1679
1673
  let trigger;
1680
1674
  if (event && typeof event !== "string") {
1681
1675
  const target = event.target;
1682
- trigger = event.currentTarget || target?.closest("button") || target;
1676
+ trigger =
1677
+ event.currentTarget || target?.closest("button") || target;
1683
1678
  }
1684
1679
  this.open(mode, trigger);
1685
1680
  }
@@ -1883,7 +1878,9 @@ class AteLinkService {
1883
1878
  if (urlOrEvent && typeof urlOrEvent !== "string") {
1884
1879
  const target = urlOrEvent.target;
1885
1880
  trigger =
1886
- urlOrEvent.currentTarget || target?.closest("button") || target;
1881
+ urlOrEvent.currentTarget ||
1882
+ target?.closest("button") ||
1883
+ target;
1887
1884
  }
1888
1885
  // Open the edit menu
1889
1886
  this.open(trigger);
@@ -2375,7 +2372,7 @@ class AteEditorCommandsService {
2375
2372
  if (!editor) {
2376
2373
  return;
2377
2374
  }
2378
- editor.commands.setContent(content, emitUpdate);
2375
+ editor.commands.setContent(content, { emitUpdate });
2379
2376
  }
2380
2377
  setEditable(editor, editable) {
2381
2378
  if (!editor) {
@@ -3138,7 +3135,7 @@ class AteBaseBubbleMenu {
3138
3135
  content: this.menuRef().nativeElement,
3139
3136
  trigger: "manual",
3140
3137
  placement: "top-start",
3141
- appendTo: () => (ed ? ed.options.element : document.body),
3138
+ appendTo: () => ed?.options?.element || document.body,
3142
3139
  interactive: true,
3143
3140
  hideOnClick: false,
3144
3141
  arrow: false,
@@ -3151,7 +3148,7 @@ class AteBaseBubbleMenu {
3151
3148
  {
3152
3149
  name: "preventOverflow",
3153
3150
  options: {
3154
- boundary: this.editor().options.element,
3151
+ boundary: this.editor().options.element || document.body,
3155
3152
  padding: 8,
3156
3153
  },
3157
3154
  },
@@ -3808,7 +3805,9 @@ class AteTableBubbleMenuComponent extends AteBaseBubbleMenu {
3808
3805
  // 1. Direct ProseMirror approach: get DOM node at position
3809
3806
  const dom = ed.view.domAtPos(from).node;
3810
3807
  // Find closest table element
3811
- const tableElement = dom instanceof HTMLElement ? dom.closest("table") : dom.parentElement?.closest("table");
3808
+ const tableElement = dom instanceof HTMLElement
3809
+ ? dom.closest("table")
3810
+ : dom.parentElement?.closest("table");
3812
3811
  if (tableElement) {
3813
3812
  return tableElement.getBoundingClientRect();
3814
3813
  }
@@ -4209,7 +4208,7 @@ class AteBaseSubBubbleMenu {
4209
4208
  content: this.menuRef().nativeElement,
4210
4209
  trigger: "manual",
4211
4210
  placement: "bottom-start",
4212
- appendTo: () => ed.options.element,
4211
+ appendTo: () => ed?.options?.element || document.body,
4213
4212
  interactive: true,
4214
4213
  arrow: false,
4215
4214
  offset: [0, 8],
@@ -4221,7 +4220,10 @@ class AteBaseSubBubbleMenu {
4221
4220
  modifiers: [
4222
4221
  {
4223
4222
  name: "preventOverflow",
4224
- options: { boundary: ed.options.element, padding: 8 },
4223
+ options: {
4224
+ boundary: ed?.options?.element || document.body,
4225
+ padding: 8,
4226
+ },
4225
4227
  },
4226
4228
  {
4227
4229
  name: "flip",
@@ -5134,7 +5136,7 @@ class AteSlashCommandsComponent {
5134
5136
  {
5135
5137
  name: "preventOverflow",
5136
5138
  options: {
5137
- boundary: this.editor().options.element,
5139
+ boundary: this.editor().options.element || document.body,
5138
5140
  padding: 8,
5139
5141
  },
5140
5142
  },
@@ -6180,6 +6182,48 @@ const ATE_DEFAULT_CELL_MENU_CONFIG = {
6180
6182
  mergeCells: true,
6181
6183
  splitCell: true,
6182
6184
  };
6185
+ /**
6186
+ * Ultimate default configuration for the Angular Tiptap Editor.
6187
+ * This serves as the 'Level 4' fallback in the configuration hierarchy:
6188
+ * 1. Component Inputs (Le Roi)
6189
+ * 2. Component [config] (Le Prince)
6190
+ * 3. Global provideAteEditor() (Le Duc)
6191
+ * 4. ATE_DEFAULT_CONFIG (Le Peuple)
6192
+ */
6193
+ const ATE_DEFAULT_CONFIG = {
6194
+ theme: "auto",
6195
+ mode: "classic",
6196
+ height: "auto",
6197
+ minHeight: "200px",
6198
+ maxHeight: "none",
6199
+ fillContainer: false,
6200
+ autofocus: false,
6201
+ editable: true,
6202
+ disabled: false,
6203
+ spellcheck: true,
6204
+ enableOfficePaste: true,
6205
+ showToolbar: true,
6206
+ showFooter: true,
6207
+ showCharacterCount: true,
6208
+ showWordCount: true,
6209
+ showEditToggle: false,
6210
+ showBubbleMenu: true,
6211
+ showImageBubbleMenu: true,
6212
+ showTableMenu: true,
6213
+ showCellMenu: true,
6214
+ enableSlashCommands: true,
6215
+ floatingToolbar: false,
6216
+ toolbar: ATE_DEFAULT_TOOLBAR_CONFIG,
6217
+ bubbleMenu: ATE_DEFAULT_BUBBLE_MENU_CONFIG,
6218
+ imageBubbleMenu: ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG,
6219
+ tableBubbleMenu: ATE_DEFAULT_TABLE_MENU_CONFIG,
6220
+ cellBubbleMenu: ATE_DEFAULT_CELL_MENU_CONFIG,
6221
+ slashCommands: {},
6222
+ tiptapExtensions: [],
6223
+ tiptapOptions: {},
6224
+ stateCalculators: [],
6225
+ angularNodes: [],
6226
+ };
6183
6227
 
6184
6228
  // Slash commands configuration is handled dynamically via slashCommandsConfigComputed
6185
6229
  /**
@@ -6204,48 +6248,48 @@ class AngularTiptapEditorComponent {
6204
6248
  /** Configuration globale de l'éditeur */
6205
6249
  this.config = input({}, ...(ngDevMode ? [{ debugName: "config" }] : []));
6206
6250
  this.content = input("", ...(ngDevMode ? [{ debugName: "content" }] : []));
6207
- this.placeholder = input("", ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
6208
- this.editable = input(true, ...(ngDevMode ? [{ debugName: "editable" }] : []));
6209
- this.disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
6210
- this.minHeight = input(200, ...(ngDevMode ? [{ debugName: "minHeight" }] : []));
6251
+ this.placeholder = input(undefined, ...(ngDevMode ? [{ debugName: "placeholder" }] : []));
6252
+ this.editable = input(undefined, ...(ngDevMode ? [{ debugName: "editable" }] : []));
6253
+ this.disabled = input(undefined, ...(ngDevMode ? [{ debugName: "disabled" }] : []));
6254
+ this.minHeight = input(undefined, ...(ngDevMode ? [{ debugName: "minHeight" }] : []));
6211
6255
  this.height = input(undefined, ...(ngDevMode ? [{ debugName: "height" }] : []));
6212
6256
  this.maxHeight = input(undefined, ...(ngDevMode ? [{ debugName: "maxHeight" }] : []));
6213
- this.fillContainer = input(false, ...(ngDevMode ? [{ debugName: "fillContainer" }] : []));
6214
- this.showToolbar = input(true, ...(ngDevMode ? [{ debugName: "showToolbar" }] : []));
6215
- this.showFooter = input(true, ...(ngDevMode ? [{ debugName: "showFooter" }] : []));
6216
- this.showCharacterCount = input(true, ...(ngDevMode ? [{ debugName: "showCharacterCount" }] : []));
6217
- this.showWordCount = input(true, ...(ngDevMode ? [{ debugName: "showWordCount" }] : []));
6257
+ this.fillContainer = input(undefined, ...(ngDevMode ? [{ debugName: "fillContainer" }] : []));
6258
+ this.showToolbar = input(undefined, ...(ngDevMode ? [{ debugName: "showToolbar" }] : []));
6259
+ this.showFooter = input(undefined, ...(ngDevMode ? [{ debugName: "showFooter" }] : []));
6260
+ this.showCharacterCount = input(undefined, ...(ngDevMode ? [{ debugName: "showCharacterCount" }] : []));
6261
+ this.showWordCount = input(undefined, ...(ngDevMode ? [{ debugName: "showWordCount" }] : []));
6218
6262
  this.maxCharacters = input(undefined, ...(ngDevMode ? [{ debugName: "maxCharacters" }] : []));
6219
- this.enableOfficePaste = input(true, ...(ngDevMode ? [{ debugName: "enableOfficePaste" }] : []));
6220
- this.enableSlashCommands = input(true, ...(ngDevMode ? [{ debugName: "enableSlashCommands" }] : []));
6221
- this.slashCommands = input({}, ...(ngDevMode ? [{ debugName: "slashCommands" }] : []));
6263
+ this.enableOfficePaste = input(undefined, ...(ngDevMode ? [{ debugName: "enableOfficePaste" }] : []));
6264
+ this.enableSlashCommands = input(undefined, ...(ngDevMode ? [{ debugName: "enableSlashCommands" }] : []));
6265
+ this.slashCommands = input(undefined, ...(ngDevMode ? [{ debugName: "slashCommands" }] : []));
6222
6266
  this.customSlashCommands = input(undefined, ...(ngDevMode ? [{ debugName: "customSlashCommands" }] : []));
6223
6267
  this.locale = input(undefined, ...(ngDevMode ? [{ debugName: "locale" }] : []));
6224
- this.autofocus = input(false, ...(ngDevMode ? [{ debugName: "autofocus" }] : []));
6225
- this.seamless = input(false, ...(ngDevMode ? [{ debugName: "seamless" }] : []));
6226
- this.floatingToolbar = input(false, ...(ngDevMode ? [{ debugName: "floatingToolbar" }] : []));
6227
- this.showEditToggle = input(false, ...(ngDevMode ? [{ debugName: "showEditToggle" }] : []));
6228
- this.spellcheck = input(true, ...(ngDevMode ? [{ debugName: "spellcheck" }] : []));
6229
- this.tiptapExtensions = input([], ...(ngDevMode ? [{ debugName: "tiptapExtensions" }] : []));
6230
- this.tiptapOptions = input({}, ...(ngDevMode ? [{ debugName: "tiptapOptions" }] : []));
6268
+ this.autofocus = input(undefined, ...(ngDevMode ? [{ debugName: "autofocus" }] : []));
6269
+ this.seamless = input(undefined, ...(ngDevMode ? [{ debugName: "seamless" }] : []));
6270
+ this.floatingToolbar = input(undefined, ...(ngDevMode ? [{ debugName: "floatingToolbar" }] : []));
6271
+ this.showEditToggle = input(undefined, ...(ngDevMode ? [{ debugName: "showEditToggle" }] : []));
6272
+ this.spellcheck = input(undefined, ...(ngDevMode ? [{ debugName: "spellcheck" }] : []));
6273
+ this.tiptapExtensions = input(undefined, ...(ngDevMode ? [{ debugName: "tiptapExtensions" }] : []));
6274
+ this.tiptapOptions = input(undefined, ...(ngDevMode ? [{ debugName: "tiptapOptions" }] : []));
6231
6275
  // Nouveaux inputs pour les bubble menus
6232
- this.showBubbleMenu = input(true, ...(ngDevMode ? [{ debugName: "showBubbleMenu" }] : []));
6233
- this.bubbleMenu = input(ATE_DEFAULT_BUBBLE_MENU_CONFIG, ...(ngDevMode ? [{ debugName: "bubbleMenu" }] : []));
6234
- this.showImageBubbleMenu = input(true, ...(ngDevMode ? [{ debugName: "showImageBubbleMenu" }] : []));
6235
- this.imageBubbleMenu = input(ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG, ...(ngDevMode ? [{ debugName: "imageBubbleMenu" }] : []));
6276
+ this.showBubbleMenu = input(undefined, ...(ngDevMode ? [{ debugName: "showBubbleMenu" }] : []));
6277
+ this.bubbleMenu = input(undefined, ...(ngDevMode ? [{ debugName: "bubbleMenu" }] : []));
6278
+ this.showImageBubbleMenu = input(undefined, ...(ngDevMode ? [{ debugName: "showImageBubbleMenu" }] : []));
6279
+ this.imageBubbleMenu = input(undefined, ...(ngDevMode ? [{ debugName: "imageBubbleMenu" }] : []));
6236
6280
  // Configuration de la toolbar
6237
- this.toolbar = input({}, ...(ngDevMode ? [{ debugName: "toolbar" }] : []));
6281
+ this.toolbar = input(undefined, ...(ngDevMode ? [{ debugName: "toolbar" }] : []));
6238
6282
  // Configuration des menus de table
6239
- this.showTableBubbleMenu = input(true, ...(ngDevMode ? [{ debugName: "showTableBubbleMenu" }] : []));
6240
- this.tableBubbleMenu = input(ATE_DEFAULT_TABLE_MENU_CONFIG, ...(ngDevMode ? [{ debugName: "tableBubbleMenu" }] : []));
6241
- this.showCellBubbleMenu = input(true, ...(ngDevMode ? [{ debugName: "showCellBubbleMenu" }] : []));
6242
- this.cellBubbleMenu = input(ATE_DEFAULT_CELL_MENU_CONFIG, ...(ngDevMode ? [{ debugName: "cellBubbleMenu" }] : []));
6283
+ this.showTableBubbleMenu = input(undefined, ...(ngDevMode ? [{ debugName: "showTableBubbleMenu" }] : []));
6284
+ this.tableBubbleMenu = input(undefined, ...(ngDevMode ? [{ debugName: "tableBubbleMenu" }] : []));
6285
+ this.showCellBubbleMenu = input(undefined, ...(ngDevMode ? [{ debugName: "showCellBubbleMenu" }] : []));
6286
+ this.cellBubbleMenu = input(undefined, ...(ngDevMode ? [{ debugName: "cellBubbleMenu" }] : []));
6243
6287
  /**
6244
6288
  * Additionnal state calculators to extend the reactive editor state.
6245
6289
  */
6246
- this.stateCalculators = input([], ...(ngDevMode ? [{ debugName: "stateCalculators" }] : []));
6290
+ this.stateCalculators = input(undefined, ...(ngDevMode ? [{ debugName: "stateCalculators" }] : []));
6247
6291
  // Nouveau input pour la configuration de l'upload d'images
6248
- this.imageUpload = input({}, ...(ngDevMode ? [{ debugName: "imageUpload" }] : []));
6292
+ this.imageUpload = input(undefined, ...(ngDevMode ? [{ debugName: "imageUpload" }] : []));
6249
6293
  /**
6250
6294
  * Custom handler for image uploads.
6251
6295
  * When provided, images will be processed through this handler instead of being converted to base64.
@@ -6292,7 +6336,7 @@ class AngularTiptapEditorComponent {
6292
6336
  this._isFormControlDisabled = signal(false, ...(ngDevMode ? [{ debugName: "_isFormControlDisabled" }] : []));
6293
6337
  this.isFormControlDisabled = this._isFormControlDisabled.asReadonly();
6294
6338
  // Combined disabled state (Input + FormControl)
6295
- this.mergedDisabled = computed(() => (this.effectiveConfig().disabled ?? this.disabled()) || this.isFormControlDisabled(), ...(ngDevMode ? [{ debugName: "mergedDisabled" }] : []));
6339
+ this.mergedDisabled = computed(() => (this.disabled() ?? this.effectiveConfig().disabled) || this.isFormControlDisabled(), ...(ngDevMode ? [{ debugName: "mergedDisabled" }] : []));
6296
6340
  // Computed for editor states
6297
6341
  this.isEditorReady = computed(() => this.editor() !== null, ...(ngDevMode ? [{ debugName: "isEditorReady" }] : []));
6298
6342
  // ============================================
@@ -6300,109 +6344,133 @@ class AngularTiptapEditorComponent {
6300
6344
  // ============================================
6301
6345
  // Appearance & Fundamentals
6302
6346
  this.finalSeamless = computed(() => {
6303
- const fromConfig = this.effectiveConfig().mode;
6304
- if (fromConfig !== undefined) {
6305
- return fromConfig === "seamless";
6347
+ const inputVal = this.seamless();
6348
+ if (inputVal !== undefined) {
6349
+ return inputVal;
6306
6350
  }
6307
- return this.seamless();
6351
+ const fromConfig = this.effectiveConfig().mode;
6352
+ return fromConfig === "seamless";
6308
6353
  }, ...(ngDevMode ? [{ debugName: "finalSeamless" }] : []));
6309
- this.finalEditable = computed(() => this.effectiveConfig().editable ?? this.editable(), ...(ngDevMode ? [{ debugName: "finalEditable" }] : []));
6310
- this.finalPlaceholder = computed(() => this.effectiveConfig().placeholder ??
6311
- (this.placeholder() || this.currentTranslations().editor.placeholder), ...(ngDevMode ? [{ debugName: "finalPlaceholder" }] : []));
6312
- this.finalFillContainer = computed(() => this.effectiveConfig().fillContainer ?? this.fillContainer(), ...(ngDevMode ? [{ debugName: "finalFillContainer" }] : []));
6313
- this.finalShowFooter = computed(() => this.effectiveConfig().showFooter ?? this.showFooter(), ...(ngDevMode ? [{ debugName: "finalShowFooter" }] : []));
6314
- this.finalShowEditToggle = computed(() => this.effectiveConfig().showEditToggle ?? this.showEditToggle(), ...(ngDevMode ? [{ debugName: "finalShowEditToggle" }] : []));
6315
- this.finalHeight = computed(() => this.effectiveConfig().height ?? (this.height() ? `${this.height()}px` : undefined), ...(ngDevMode ? [{ debugName: "finalHeight" }] : []));
6316
- this.finalMinHeight = computed(() => this.effectiveConfig().minHeight ?? (this.minHeight() ? `${this.minHeight()}px` : undefined), ...(ngDevMode ? [{ debugName: "finalMinHeight" }] : []));
6317
- this.finalMaxHeight = computed(() => this.effectiveConfig().maxHeight ?? (this.maxHeight() ? `${this.maxHeight()}px` : undefined), ...(ngDevMode ? [{ debugName: "finalMaxHeight" }] : []));
6318
- this.finalSpellcheck = computed(() => this.effectiveConfig().spellcheck ?? this.spellcheck(), ...(ngDevMode ? [{ debugName: "finalSpellcheck" }] : []));
6319
- this.finalEnableOfficePaste = computed(() => this.effectiveConfig().enableOfficePaste ?? this.enableOfficePaste(), ...(ngDevMode ? [{ debugName: "finalEnableOfficePaste" }] : []));
6354
+ this.finalEditable = computed(() => this.editable() ?? this.effectiveConfig().editable ?? true, ...(ngDevMode ? [{ debugName: "finalEditable" }] : []));
6355
+ this.finalPlaceholder = computed(() => this.placeholder() ??
6356
+ this.effectiveConfig().placeholder ??
6357
+ this.currentTranslations().editor.placeholder, ...(ngDevMode ? [{ debugName: "finalPlaceholder" }] : []));
6358
+ this.finalFillContainer = computed(() => this.fillContainer() ?? this.effectiveConfig().fillContainer, ...(ngDevMode ? [{ debugName: "finalFillContainer" }] : []));
6359
+ this.finalShowFooter = computed(() => this.showFooter() ?? this.effectiveConfig().showFooter ?? true, ...(ngDevMode ? [{ debugName: "finalShowFooter" }] : []));
6360
+ this.finalShowEditToggle = computed(() => this.showEditToggle() ?? this.effectiveConfig().showEditToggle ?? false, ...(ngDevMode ? [{ debugName: "finalShowEditToggle" }] : []));
6361
+ this.finalHeight = computed(() => {
6362
+ const h = this.height() ?? this.effectiveConfig().height;
6363
+ return typeof h === "number" ? `${h}px` : h;
6364
+ }, ...(ngDevMode ? [{ debugName: "finalHeight" }] : []));
6365
+ this.finalMinHeight = computed(() => {
6366
+ const mh = this.minHeight() ?? this.effectiveConfig().minHeight;
6367
+ return typeof mh === "number" ? `${mh}px` : mh;
6368
+ }, ...(ngDevMode ? [{ debugName: "finalMinHeight" }] : []));
6369
+ this.finalMaxHeight = computed(() => {
6370
+ const mh = this.maxHeight() ?? this.effectiveConfig().maxHeight;
6371
+ return typeof mh === "number" ? `${mh}px` : mh;
6372
+ }, ...(ngDevMode ? [{ debugName: "finalMaxHeight" }] : []));
6373
+ this.finalSpellcheck = computed(() => this.spellcheck() ?? this.effectiveConfig().spellcheck ?? true, ...(ngDevMode ? [{ debugName: "finalSpellcheck" }] : []));
6374
+ this.finalEnableOfficePaste = computed(() => this.enableOfficePaste() ?? this.effectiveConfig().enableOfficePaste ?? true, ...(ngDevMode ? [{ debugName: "finalEnableOfficePaste" }] : []));
6320
6375
  // Features
6321
- this.finalShowToolbar = computed(() => this.effectiveConfig().showToolbar ?? this.showToolbar(), ...(ngDevMode ? [{ debugName: "finalShowToolbar" }] : []));
6376
+ this.finalShowToolbar = computed(() => this.showToolbar() ?? this.effectiveConfig().showToolbar ?? true, ...(ngDevMode ? [{ debugName: "finalShowToolbar" }] : []));
6322
6377
  this.finalToolbarConfig = computed(() => {
6378
+ const fromInput = this.toolbar();
6323
6379
  const fromConfig = this.effectiveConfig().toolbar;
6324
6380
  const base = ATE_DEFAULT_TOOLBAR_CONFIG;
6381
+ if (fromInput && Object.keys(fromInput).length > 0) {
6382
+ return { ...base, ...fromInput };
6383
+ }
6325
6384
  if (fromConfig) {
6326
6385
  return { ...base, ...fromConfig };
6327
6386
  }
6328
- const fromInput = this.toolbar();
6329
- return Object.keys(fromInput).length === 0 ? base : { ...base, ...fromInput };
6387
+ return base;
6330
6388
  }, ...(ngDevMode ? [{ debugName: "finalToolbarConfig" }] : []));
6331
- this.finalFloatingToolbar = computed(() => this.effectiveConfig().floatingToolbar ?? this.floatingToolbar(), ...(ngDevMode ? [{ debugName: "finalFloatingToolbar" }] : []));
6332
- this.finalShowBubbleMenu = computed(() => this.effectiveConfig().showBubbleMenu ?? this.showBubbleMenu(), ...(ngDevMode ? [{ debugName: "finalShowBubbleMenu" }] : []));
6389
+ this.finalFloatingToolbar = computed(() => this.floatingToolbar() ?? this.effectiveConfig().floatingToolbar ?? false, ...(ngDevMode ? [{ debugName: "finalFloatingToolbar" }] : []));
6390
+ this.finalShowBubbleMenu = computed(() => this.showBubbleMenu() ?? this.effectiveConfig().showBubbleMenu ?? true, ...(ngDevMode ? [{ debugName: "finalShowBubbleMenu" }] : []));
6333
6391
  this.finalBubbleMenuConfig = computed(() => {
6392
+ const fromInput = this.bubbleMenu();
6334
6393
  const fromConfig = this.effectiveConfig().bubbleMenu;
6335
6394
  const base = ATE_DEFAULT_BUBBLE_MENU_CONFIG;
6395
+ if (fromInput && Object.keys(fromInput).length > 0) {
6396
+ return { ...base, ...fromInput };
6397
+ }
6336
6398
  if (fromConfig) {
6337
6399
  return { ...base, ...fromConfig };
6338
6400
  }
6339
- return Object.keys(this.bubbleMenu()).length === 0 ? base : { ...base, ...this.bubbleMenu() };
6401
+ return base;
6340
6402
  }, ...(ngDevMode ? [{ debugName: "finalBubbleMenuConfig" }] : []));
6341
- this.finalShowImageBubbleMenu = computed(() => this.effectiveConfig().showImageBubbleMenu ?? this.showImageBubbleMenu(), ...(ngDevMode ? [{ debugName: "finalShowImageBubbleMenu" }] : []));
6403
+ this.finalShowImageBubbleMenu = computed(() => this.showImageBubbleMenu() ?? this.effectiveConfig().showImageBubbleMenu ?? true, ...(ngDevMode ? [{ debugName: "finalShowImageBubbleMenu" }] : []));
6342
6404
  this.finalImageBubbleMenuConfig = computed(() => {
6405
+ const fromInput = this.imageBubbleMenu();
6343
6406
  const fromConfig = this.effectiveConfig().imageBubbleMenu;
6344
6407
  const base = ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG;
6408
+ if (fromInput && Object.keys(fromInput).length > 0) {
6409
+ return { ...base, ...fromInput };
6410
+ }
6345
6411
  if (fromConfig) {
6346
6412
  return { ...base, ...fromConfig };
6347
6413
  }
6348
- return Object.keys(this.imageBubbleMenu()).length === 0
6349
- ? base
6350
- : { ...base, ...this.imageBubbleMenu() };
6414
+ return base;
6351
6415
  }, ...(ngDevMode ? [{ debugName: "finalImageBubbleMenuConfig" }] : []));
6352
- this.finalShowTableBubbleMenu = computed(() => this.effectiveConfig().showTableMenu ?? this.showTableBubbleMenu(), ...(ngDevMode ? [{ debugName: "finalShowTableBubbleMenu" }] : []));
6416
+ this.finalShowTableBubbleMenu = computed(() => this.showTableBubbleMenu() ?? this.effectiveConfig().showTableMenu ?? true, ...(ngDevMode ? [{ debugName: "finalShowTableBubbleMenu" }] : []));
6353
6417
  this.finalTableBubbleMenuConfig = computed(() => {
6418
+ const fromInput = this.tableBubbleMenu();
6354
6419
  const fromConfig = this.effectiveConfig().tableBubbleMenu;
6355
6420
  const base = ATE_DEFAULT_TABLE_MENU_CONFIG;
6421
+ if (fromInput && Object.keys(fromInput).length > 0) {
6422
+ return { ...base, ...fromInput };
6423
+ }
6356
6424
  if (fromConfig) {
6357
6425
  return { ...base, ...fromConfig };
6358
6426
  }
6359
- return Object.keys(this.tableBubbleMenu()).length === 0
6360
- ? base
6361
- : { ...base, ...this.tableBubbleMenu() };
6427
+ return base;
6362
6428
  }, ...(ngDevMode ? [{ debugName: "finalTableBubbleMenuConfig" }] : []));
6363
- this.finalShowCellBubbleMenu = computed(() => this.effectiveConfig().showCellMenu ?? this.showCellBubbleMenu(), ...(ngDevMode ? [{ debugName: "finalShowCellBubbleMenu" }] : []));
6429
+ this.finalShowCellBubbleMenu = computed(() => this.showCellBubbleMenu() ?? this.effectiveConfig().showCellMenu ?? true, ...(ngDevMode ? [{ debugName: "finalShowCellBubbleMenu" }] : []));
6364
6430
  this.finalCellBubbleMenuConfig = computed(() => {
6431
+ const fromInput = this.cellBubbleMenu();
6365
6432
  const fromConfig = this.effectiveConfig().cellBubbleMenu;
6366
6433
  const base = ATE_DEFAULT_CELL_MENU_CONFIG;
6434
+ if (fromInput && Object.keys(fromInput).length > 0) {
6435
+ return { ...base, ...fromInput };
6436
+ }
6367
6437
  if (fromConfig) {
6368
6438
  return { ...base, ...fromConfig };
6369
6439
  }
6370
- return Object.keys(this.cellBubbleMenu()).length === 0
6371
- ? base
6372
- : { ...base, ...this.cellBubbleMenu() };
6440
+ return base;
6373
6441
  }, ...(ngDevMode ? [{ debugName: "finalCellBubbleMenuConfig" }] : []));
6374
- this.finalEnableSlashCommands = computed(() => this.effectiveConfig().enableSlashCommands ?? this.enableSlashCommands(), ...(ngDevMode ? [{ debugName: "finalEnableSlashCommands" }] : []));
6442
+ this.finalEnableSlashCommands = computed(() => this.enableSlashCommands() ?? this.effectiveConfig().enableSlashCommands ?? true, ...(ngDevMode ? [{ debugName: "finalEnableSlashCommands" }] : []));
6375
6443
  this.finalSlashCommandsConfig = computed(() => {
6376
- const fromConfig = this.effectiveConfig().slashCommands;
6377
- const fromGlobalCustom = this.effectiveConfig().customSlashCommands;
6378
- const fromInputCustom = this.customSlashCommands();
6379
- const customConfig = fromInputCustom ?? fromGlobalCustom;
6444
+ const fromInputComponent = this.customSlashCommands();
6445
+ const fromConfigComponent = this.effectiveConfig().customSlashCommands;
6446
+ const customConfig = fromInputComponent ?? fromConfigComponent;
6380
6447
  if (customConfig) {
6381
6448
  return customConfig;
6382
6449
  }
6383
- let baseConfig = this.slashCommands();
6384
- if (fromConfig) {
6385
- baseConfig = fromConfig;
6386
- }
6450
+ const fromInputOptions = this.slashCommands();
6451
+ const fromConfigOptions = this.effectiveConfig().slashCommands;
6452
+ const baseConfig = fromInputOptions && Object.keys(fromInputOptions).length > 0
6453
+ ? fromInputOptions
6454
+ : fromConfigOptions;
6387
6455
  return {
6388
- commands: filterSlashCommands(baseConfig, this.i18nService, this.editorCommandsService, this.finalImageUploadConfig()),
6456
+ commands: filterSlashCommands(baseConfig || {}, this.i18nService, this.editorCommandsService, this.finalImageUploadConfig()),
6389
6457
  };
6390
6458
  }, ...(ngDevMode ? [{ debugName: "finalSlashCommandsConfig" }] : []));
6391
6459
  // Behavior
6392
- this.finalAutofocus = computed(() => this.effectiveConfig().autofocus ?? this.autofocus(), ...(ngDevMode ? [{ debugName: "finalAutofocus" }] : []));
6393
- this.finalMaxCharacters = computed(() => this.effectiveConfig().maxCharacters ?? this.maxCharacters(), ...(ngDevMode ? [{ debugName: "finalMaxCharacters" }] : []));
6394
- this.finalShowCharacterCount = computed(() => this.effectiveConfig().showCharacterCount ?? this.showCharacterCount(), ...(ngDevMode ? [{ debugName: "finalShowCharacterCount" }] : []));
6395
- this.finalShowWordCount = computed(() => this.effectiveConfig().showWordCount ?? this.showWordCount(), ...(ngDevMode ? [{ debugName: "finalShowWordCount" }] : []));
6396
- this.finalLocale = computed(() => this.effectiveConfig().locale ?? this.locale(), ...(ngDevMode ? [{ debugName: "finalLocale" }] : []));
6460
+ this.finalAutofocus = computed(() => this.autofocus() ?? this.effectiveConfig().autofocus, ...(ngDevMode ? [{ debugName: "finalAutofocus" }] : []));
6461
+ this.finalMaxCharacters = computed(() => this.maxCharacters() ?? this.effectiveConfig().maxCharacters, ...(ngDevMode ? [{ debugName: "finalMaxCharacters" }] : []));
6462
+ this.finalShowCharacterCount = computed(() => this.showCharacterCount() ?? this.effectiveConfig().showCharacterCount ?? true, ...(ngDevMode ? [{ debugName: "finalShowCharacterCount" }] : []));
6463
+ this.finalShowWordCount = computed(() => this.showWordCount() ?? this.effectiveConfig().showWordCount ?? true, ...(ngDevMode ? [{ debugName: "finalShowWordCount" }] : []));
6464
+ this.finalLocale = computed(() => this.locale() ?? this.effectiveConfig().locale, ...(ngDevMode ? [{ debugName: "finalLocale" }] : []));
6397
6465
  // Extensions & Options
6398
- this.finalTiptapExtensions = computed(() => this.effectiveConfig().tiptapExtensions ?? this.tiptapExtensions() ?? [], ...(ngDevMode ? [{ debugName: "finalTiptapExtensions" }] : []));
6399
- this.finalTiptapOptions = computed(() => this.effectiveConfig().tiptapOptions ?? this.tiptapOptions() ?? {}, ...(ngDevMode ? [{ debugName: "finalTiptapOptions" }] : []));
6400
- this.finalStateCalculators = computed(() => this.effectiveConfig().stateCalculators ?? this.stateCalculators() ?? [], ...(ngDevMode ? [{ debugName: "finalStateCalculators" }] : []));
6466
+ this.finalTiptapExtensions = computed(() => this.tiptapExtensions() ?? this.effectiveConfig().tiptapExtensions ?? [], ...(ngDevMode ? [{ debugName: "finalTiptapExtensions" }] : []));
6467
+ this.finalTiptapOptions = computed(() => this.tiptapOptions() ?? this.effectiveConfig().tiptapOptions ?? {}, ...(ngDevMode ? [{ debugName: "finalTiptapOptions" }] : []));
6468
+ this.finalStateCalculators = computed(() => this.stateCalculators() ?? this.effectiveConfig().stateCalculators ?? [], ...(ngDevMode ? [{ debugName: "finalStateCalculators" }] : []));
6401
6469
  this.finalAngularNodesConfig = computed(() => this.effectiveConfig().angularNodes ?? [], ...(ngDevMode ? [{ debugName: "finalAngularNodesConfig" }] : []));
6402
6470
  // Image Upload
6403
6471
  this.finalImageUploadConfig = computed(() => {
6404
- const fromConfig = this.effectiveConfig().imageUpload;
6405
6472
  const fromInput = this.imageUpload();
6473
+ const fromConfig = this.effectiveConfig().imageUpload;
6406
6474
  const merged = {
6407
6475
  maxSize: 5, // Default 5MB
6408
6476
  maxWidth: 1920,
@@ -6413,15 +6481,15 @@ class AngularTiptapEditorComponent {
6413
6481
  multiple: false,
6414
6482
  compressImages: true,
6415
6483
  quality: 0.8,
6416
- ...fromInput,
6417
6484
  ...fromConfig,
6485
+ ...fromInput,
6418
6486
  };
6419
6487
  return {
6420
6488
  ...merged,
6421
6489
  maxSize: merged.maxSize * 1024 * 1024, // Convert MB to bytes for internal service
6422
6490
  };
6423
6491
  }, ...(ngDevMode ? [{ debugName: "finalImageUploadConfig" }] : []));
6424
- this.finalImageUploadHandler = computed(() => this.effectiveConfig().imageUpload?.handler ?? this.imageUploadHandler(), ...(ngDevMode ? [{ debugName: "finalImageUploadHandler" }] : []));
6492
+ this.finalImageUploadHandler = computed(() => this.imageUploadHandler() ?? this.effectiveConfig().imageUpload?.handler, ...(ngDevMode ? [{ debugName: "finalImageUploadHandler" }] : []));
6425
6493
  // Computed for current translations (allows per-instance override via config or input)
6426
6494
  this.currentTranslations = computed(() => {
6427
6495
  const localeOverride = this.finalLocale();
@@ -6447,7 +6515,7 @@ class AngularTiptapEditorComponent {
6447
6515
  this.effectiveConfig = computed(() => {
6448
6516
  const fromInput = this.config();
6449
6517
  const fromGlobal = this.globalConfig || {};
6450
- return { ...fromGlobal, ...fromInput };
6518
+ return { ...ATE_DEFAULT_CONFIG, ...fromGlobal, ...fromInput };
6451
6519
  }, ...(ngDevMode ? [{ debugName: "effectiveConfig" }] : []));
6452
6520
  // Effect to update editor content (with anti-echo)
6453
6521
  effect(() => {
@@ -6470,7 +6538,7 @@ class AngularTiptapEditorComponent {
6470
6538
  if (hasFormControl && !content) {
6471
6539
  return;
6472
6540
  }
6473
- editor.commands.setContent(content, false);
6541
+ editor.commands.setContent(content, { emitUpdate: false });
6474
6542
  });
6475
6543
  });
6476
6544
  // Effect to update height properties
@@ -6550,7 +6618,14 @@ class AngularTiptapEditorComponent {
6550
6618
  }
6551
6619
  initEditor() {
6552
6620
  const extensions = [
6553
- StarterKit,
6621
+ StarterKit.configure({
6622
+ link: {
6623
+ openOnClick: false,
6624
+ HTMLAttributes: {
6625
+ class: "ate-link",
6626
+ },
6627
+ },
6628
+ }),
6554
6629
  TextStyle,
6555
6630
  Color.configure({
6556
6631
  types: ["textStyle"],
@@ -6558,18 +6633,11 @@ class AngularTiptapEditorComponent {
6558
6633
  Placeholder.configure({
6559
6634
  placeholder: this.finalPlaceholder(),
6560
6635
  }),
6561
- Underline,
6562
6636
  Superscript,
6563
6637
  Subscript,
6564
6638
  TextAlign.configure({
6565
6639
  types: ["heading", "paragraph"],
6566
6640
  }),
6567
- Link.configure({
6568
- openOnClick: false,
6569
- HTMLAttributes: {
6570
- class: "ate-link",
6571
- },
6572
- }),
6573
6641
  AteLinkClickBehavior,
6574
6642
  Highlight.configure({
6575
6643
  multicolor: true,
@@ -6618,7 +6686,7 @@ class AngularTiptapEditorComponent {
6618
6686
  }
6619
6687
  // Register automatic node views from config
6620
6688
  const autoNodeViews = this.finalAngularNodesConfig();
6621
- autoNodeViews.forEach(reg => {
6689
+ autoNodeViews.forEach((reg) => {
6622
6690
  const options = typeof reg === "function"
6623
6691
  ? { component: reg }
6624
6692
  : reg;
@@ -6634,9 +6702,9 @@ class AngularTiptapEditorComponent {
6634
6702
  const customExtensions = this.finalTiptapExtensions();
6635
6703
  if (customExtensions.length > 0) {
6636
6704
  const existingNames = new Set(extensions
6637
- .map(ext => ext?.name)
6705
+ .map((ext) => ext?.name)
6638
6706
  .filter((name) => !!name));
6639
- const toAdd = customExtensions.filter(ext => {
6707
+ const toAdd = customExtensions.filter((ext) => {
6640
6708
  const name = ext?.name;
6641
6709
  return !name || !existingNames.has(name);
6642
6710
  });
@@ -7203,38 +7271,10 @@ const ATE_CELL_BUBBLE_MENU_KEYS = ["mergeCells", "splitCell"];
7203
7271
  * Public API Surface of tiptap-editor
7204
7272
  */
7205
7273
  // Main component & Provider
7206
- /** @deprecated Renamed to `ATE_INITIAL_EDITOR_STATE`. This alias will be removed in v3.0.0. */
7207
- const INITIAL_EDITOR_STATE = ATE_INITIAL_EDITOR_STATE;
7208
- /** @deprecated Renamed to `ATE_SLASH_COMMAND_KEYS`. This alias will be removed in v3.0.0. */
7209
- const SLASH_COMMAND_KEYS = ATE_SLASH_COMMAND_KEYS;
7210
- /** @deprecated Renamed to `ATE_DEFAULT_SLASH_COMMANDS_CONFIG`. This alias will be removed in v3.0.0. */
7211
- const DEFAULT_SLASH_COMMANDS_CONFIG = ATE_DEFAULT_SLASH_COMMANDS_CONFIG;
7212
- /** @deprecated Renamed to `AteDiscoveryCalculator`. This alias will be removed in v3.0.0. */
7213
- const DiscoveryCalculator = AteDiscoveryCalculator;
7214
- /** @deprecated Renamed to `AteImageCalculator`. This alias will be removed in v3.0.0. */
7215
- const ImageCalculator = AteImageCalculator;
7216
- /** @deprecated Renamed to `AteMarksCalculator`. This alias will be removed in v3.0.0. */
7217
- const MarksCalculator = AteMarksCalculator;
7218
- /** @deprecated Renamed to `AteSelectionCalculator`. This alias will be removed in v3.0.0. */
7219
- const SelectionCalculator = AteSelectionCalculator;
7220
- /** @deprecated Renamed to `AteStructureCalculator`. This alias will be removed in v3.0.0. */
7221
- const StructureCalculator = AteStructureCalculator;
7222
- /** @deprecated Renamed to `AteTableCalculator`. This alias will be removed in v3.0.0. */
7223
- const TableCalculator = AteTableCalculator;
7224
- /** @deprecated Renamed to `ATE_DEFAULT_TOOLBAR_CONFIG`. This alias will be removed in v3.0.0. */
7225
- const DEFAULT_TOOLBAR_CONFIG = ATE_DEFAULT_TOOLBAR_CONFIG;
7226
- /** @deprecated Renamed to `ATE_DEFAULT_BUBBLE_MENU_CONFIG`. This alias will be removed in v3.0.0. */
7227
- const DEFAULT_BUBBLE_MENU_CONFIG = ATE_DEFAULT_BUBBLE_MENU_CONFIG;
7228
- /** @deprecated Renamed to `ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG`. This alias will be removed in v3.0.0. */
7229
- const DEFAULT_IMAGE_BUBBLE_MENU_CONFIG = ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG;
7230
- /** @deprecated Renamed to `ATE_DEFAULT_TABLE_MENU_CONFIG`. This alias will be removed in v3.0.0. */
7231
- const DEFAULT_TABLE_MENU_CONFIG = ATE_DEFAULT_TABLE_MENU_CONFIG;
7232
- /** @deprecated Renamed to `ATE_DEFAULT_CELL_MENU_CONFIG`. This alias will be removed in v3.0.0. */
7233
- const DEFAULT_CELL_MENU_CONFIG = ATE_DEFAULT_CELL_MENU_CONFIG;
7234
7274
 
7235
7275
  /**
7236
7276
  * Generated bundle index. Do not edit.
7237
7277
  */
7238
7278
 
7239
- 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_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, 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, provideAteEditor, registerAngularComponent };
7279
+ 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 };
7240
7280
  //# sourceMappingURL=flogeez-angular-tiptap-editor.mjs.map