@flogeez/angular-tiptap-editor 2.2.0 → 2.2.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,12 @@ 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
+ ## [2.2.1] - 2026-01-25
9
+
10
+ ### Added
11
+
12
+ - **Custom Menu Items**: Added support for custom items in both the `Toolbar` and the `Bubble Menu` via the `custom` property in `AteToolbarConfig` and `AteBubbleMenuConfig`. This allows developers to easily extend the editor's UI with project-specific actions.
13
+
8
14
  ## [2.2.0] - 2026-01-21
9
15
 
10
16
  ### Changed
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  A modern, customizable rich-text editor for Angular applications, built with Tiptap and featuring complete internationalization support.
4
4
 
5
- [![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)
5
+ [![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)
6
6
 
7
7
  ## 🚀 Features
8
8
 
@@ -16,7 +16,7 @@ A modern, customizable rich-text editor for Angular applications, built with Tip
16
16
  - **Built-in i18n**: English & French support with a reactive, extensible locale system.
17
17
  - **Word/Character Count**: Real-time statistics with proper pluralization support.
18
18
  - **Office-Ready**: Cleaned-up pasting from Microsoft Word and Excel to maintain layout integrity.
19
- - **Service Driven**: Deep programmatic control via `EditorCommandsService` and isolated instances.
19
+ - **Service Driven**: Deep programmatic control via `AteEditorCommandsService` and isolated instances.
20
20
  - **A11y First**: Built with accessibility best practices and full keyboard navigation.
21
21
 
22
22
  ## 💎 Why this editor?
@@ -87,7 +87,11 @@ The editor can be fully configured using a single `[config]` object, which provi
87
87
 
88
88
  ```typescript
89
89
  import { Component } from "@angular/core";
90
- import { AngularTiptapEditorComponent, AteEditorConfig, DEFAULT_TOOLBAR_CONFIG } from "@flogeez/angular-tiptap-editor";
90
+ import {
91
+ AngularTiptapEditorComponent,
92
+ AteEditorConfig,
93
+ ATE_DEFAULT_TOOLBAR_CONFIG,
94
+ } from "@flogeez/angular-tiptap-editor";
91
95
 
92
96
  @Component({
93
97
  selector: "app-advanced",
@@ -109,7 +113,7 @@ export class AdvancedComponent {
109
113
 
110
114
  // Customize the toolbar by enabling specific features
111
115
  toolbar: {
112
- ...DEFAULT_TOOLBAR_CONFIG,
116
+ ...ATE_DEFAULT_TOOLBAR_CONFIG,
113
117
  clear: true, // Enable the 'Clear' button
114
118
  highlight: false, // Disable the highlight button
115
119
  },
@@ -187,7 +191,7 @@ export class FormComponent {
187
191
 
188
192
  ```typescript
189
193
  import { Component, inject } from "@angular/core";
190
- import { EditorCommandsService } from "@flogeez/angular-tiptap-editor";
194
+ import { AteEditorCommandsService } from "@flogeez/angular-tiptap-editor";
191
195
 
192
196
  @Component({
193
197
  selector: "app-commands",
@@ -205,7 +209,7 @@ import { EditorCommandsService } from "@flogeez/angular-tiptap-editor";
205
209
  `,
206
210
  })
207
211
  export class CommandsComponent {
208
- private editorCommandsService = inject(EditorCommandsService);
212
+ private editorCommandsService = inject(AteEditorCommandsService);
209
213
  private editor: Editor | null = null;
210
214
 
211
215
  onEditorCreated(editor: Editor) {
@@ -247,13 +251,13 @@ Any TipTap **Mark** or **Node** you add to `tiptapExtensions` is automatically t
247
251
 
248
252
  If you need to extract complex data (like attributes, depth, or custom logic), you can provide a custom `StateCalculator`.
249
253
 
250
- 1. **Define a Calculator**:
254
+ 1. **Define a Calculator**:
251
255
 
252
256
  ```typescript
253
- import { StateCalculator } from "@flogeez/angular-tiptap-editor";
257
+ import { AteStateCalculator } from "@flogeez/angular-tiptap-editor";
254
258
 
255
259
  // This function will be called on every editor update
256
- export const MyCustomCalculator: StateCalculator = editor => {
260
+ export const MyCustomCalculator: AteStateCalculator = editor => {
257
261
  return {
258
262
  custom: {
259
263
  hasHighPriority: editor.isActive("priority"),
@@ -264,18 +268,18 @@ export const MyCustomCalculator: StateCalculator = editor => {
264
268
  };
265
269
  ```
266
270
 
267
- 2. **Register it in the Template**:
271
+ 2. **Register it in the Template**:
268
272
 
269
273
  ```html
270
274
  <angular-tiptap-editor [stateCalculators]="[MyCustomCalculator]" />
271
275
  ```
272
276
 
273
- 3. **Consume it anywhere**:
277
+ 3. **Consume it anywhere**:
274
278
 
275
279
  ```typescript
276
280
  @Component({ ... })
277
281
  export class MyToolbarComponent {
278
- private editorCommands = inject(EditorCommandsService);
282
+ private editorCommands = inject(AteEditorCommandsService);
279
283
 
280
284
  // Access your custom data reactively!
281
285
  isHighPriority = computed(() => this.editorCommands.editorState().custom?.hasHighPriority);
@@ -309,9 +313,9 @@ Quick content insertion with slash commands:
309
313
  The `slashCommands` object also allows you to add completely custom command items:
310
314
 
311
315
  ```typescript
312
- import { SlashCommandsConfig } from "@flogeez/angular-tiptap-editor";
316
+ import { AteSlashCommandsConfig } from "@flogeez/angular-tiptap-editor";
313
317
 
314
- slashCommands: SlashCommandsConfig = {
318
+ slashCommands: AteSlashCommandsConfig = {
315
319
  // Toggle native commands
316
320
  heading1: true,
317
321
  image: false,
@@ -351,7 +355,7 @@ The handler can return either an **Observable** or a **Promise**.
351
355
  import { Component, inject } from "@angular/core";
352
356
  import { HttpClient } from "@angular/common/http";
353
357
  import { map } from "rxjs/operators";
354
- import { AngularTiptapEditorComponent, ImageUploadHandler } from "@flogeez/angular-tiptap-editor";
358
+ import { AngularTiptapEditorComponent, AteImageUploadHandler } from "@flogeez/angular-tiptap-editor";
355
359
 
356
360
  @Component({
357
361
  selector: "app-custom-upload",
@@ -368,7 +372,7 @@ export class CustomUploadComponent {
368
372
  private http = inject(HttpClient);
369
373
  content = "";
370
374
 
371
- uploadHandler: ImageUploadHandler = ctx => {
375
+ uploadHandler: AteImageUploadHandler = ctx => {
372
376
  const formData = new FormData();
373
377
  formData.append("image", ctx.file);
374
378
 
@@ -384,7 +388,7 @@ export class CustomUploadComponent {
384
388
  #### Using Promise (async/await)
385
389
 
386
390
  ```typescript
387
- uploadHandler: ImageUploadHandler = async ctx => {
391
+ uploadHandler: AteImageUploadHandler = async ctx => {
388
392
  const formData = new FormData();
389
393
  formData.append("image", ctx.file);
390
394
 
@@ -463,11 +467,11 @@ Open [http://localhost:4200](http://localhost:4200) to view the demo.
463
467
  | `enableOfficePaste` | `boolean` | `true` | Enable smart Office pasting |
464
468
  | `showCharacterCount` | `boolean` | `true` | Show character counter |
465
469
  | `showWordCount` | `boolean` | `true` | Show word counter |
466
- | `toolbar` | `ToolbarConfig` | All enabled | Detailed toolbar configuration |
467
- | `bubbleMenu` | `BubbleMenuConfig` | All enabled | Detailed bubble menu configuration |
468
- | `slashCommands` | `SlashCommandsConfig` | All enabled | Detailed slash commands config |
469
- | `imageUploadHandler` | `ImageUploadHandler` | `undefined` | Custom image upload function |
470
- | `stateCalculators` | `StateCalculator[]` | `[]` | Custom reactive state logic |
470
+ | `toolbar` | `AteToolbarConfig` | All enabled | Detailed toolbar configuration |
471
+ | `bubbleMenu` | `AteBubbleMenuConfig` | All enabled | Detailed bubble menu configuration |
472
+ | `slashCommands` | `AteSlashCommandsConfig` | All enabled | Detailed slash commands config |
473
+ | `imageUploadHandler` | `AteImageUploadHandler` | `undefined` | Custom image upload function |
474
+ | `stateCalculators` | `AteStateCalculator[]` | `[]` | Custom reactive state logic |
471
475
  | `tiptapExtensions` | `(Extension \| Node \| Mark)[]` | `[]` | Additional Tiptap extensions |
472
476
  | `tiptapOptions` | `Partial<EditorOptions>` | `{}` | Additional Tiptap editor options |
473
477
 
@@ -507,12 +511,12 @@ export interface AteEditorConfig {
507
511
  maxCharacters?: number;
508
512
 
509
513
  // Complex Modules
510
- toolbar?: ToolbarConfig;
511
- bubbleMenu?: BubbleMenuConfig;
512
- imageBubbleMenu?: ImageBubbleMenuConfig;
513
- tableBubbleMenu?: TableBubbleMenuConfig;
514
- cellBubbleMenu?: CellBubbleMenuConfig;
515
- slashCommands?: SlashCommandsConfig;
514
+ toolbar?: AteToolbarConfig;
515
+ bubbleMenu?: AteBubbleMenuConfig;
516
+ imageBubbleMenu?: AteImageBubbleMenuConfig;
517
+ tableBubbleMenu?: AteTableBubbleMenuConfig;
518
+ cellBubbleMenu?: AteCellBubbleMenuConfig;
519
+ slashCommands?: AteSlashCommandsConfig;
516
520
  imageUpload?: AteImageUploadConfig;
517
521
  }
518
522
  ```
@@ -524,7 +528,7 @@ The `imageUpload` property in `AteEditorConfig` provides fine-grained control ov
524
528
  ```typescript
525
529
  export interface AteImageUploadConfig {
526
530
  /** Custom handler to upload files to a server */
527
- handler?: ImageUploadHandler;
531
+ handler?: AteImageUploadHandler;
528
532
  /** Maximum file size in bytes (default: 10MB) */
529
533
  maxFileSize?: number;
530
534
  /** Accepted file types (default: 'image/*') */
@@ -560,14 +564,14 @@ The editor comes with built-in support for **English (en)** and **French (fr)**,
560
564
 
561
565
  ### Adding Custom Languages
562
566
 
563
- You can easily extend the editor with new languages or override existing labels using the `TiptapI18nService`:
567
+ You can easily extend the editor with new languages or override existing labels using the `AteI18nService`:
564
568
 
565
569
  ```typescript
566
- import { TiptapI18nService } from "@flogeez/angular-tiptap-editor";
570
+ import { AteI18nService } from "@flogeez/angular-tiptap-editor";
567
571
 
568
572
  @Component({ ... })
569
573
  export class MyComponent {
570
- constructor(private i18nService: TiptapI18nService) {
574
+ constructor(private i18nService: AteI18nService) {
571
575
  // Add Spanish support
572
576
  this.i18nService.addTranslations('es', {
573
577
  toolbar: { bold: 'Negrita', italic: 'Cursiva', ... },
@@ -651,7 +655,7 @@ angular-tiptap-editor {
651
655
 
652
656
  ### ⚡ Reactive State & OnPush
653
657
 
654
- The library exposes a reactive `editorState` signal via the `EditorCommandsService`. This signal contains everything you need to build custom UIs around the editor:
658
+ The library exposes a reactive `editorState` signal via the `AteEditorCommandsService`. This signal contains everything you need to build custom UIs around the editor:
655
659
 
656
660
  - **Active State**: Check if `bold`, `italic`, or custom marks are active.
657
661
  - **Commands Availability**: Check if `undo`, `redo`, or custom commands can be executed.
@@ -686,13 +690,13 @@ The library uses a **Snapshot & Signal** pattern to bridge Tiptap and Angular.
686
690
 
687
691
  ### Core Services
688
692
 
689
- - **`EditorCommandsService`**: Exposes the `editorState` signal and provides a centralized API for executing Tiptap commands.
690
- - **`ImageService`**: Manages the image processing pipeline (selection, compression, and server-side upload handling).
691
- - **`TiptapI18nService`**: Reactive translation service with support for browser locale auto-detection.
693
+ - **`AteEditorCommandsService`**: Exposes the `editorState` signal and provides a centralized API for executing Tiptap commands.
694
+ - **`AteImageService`**: Manages the image processing pipeline (selection, compression, and server-side upload handling).
695
+ - **`AteI18nService`**: Reactive translation service with support for browser locale auto-detection.
692
696
 
693
697
  ### Isolated Instances
694
698
 
695
- Each component instance provides its own set of services (`EditorCommandsService`, `ImageService`, etc.) at the component level. This ensures that multiple editors on the same page maintain independent states and configurations without interference.
699
+ Each component instance provides its own set of services (`AteEditorCommandsService`, `AteImageService`, etc.) at the component level. This ensures that multiple editors on the same page maintain independent states and configurations without interference.
696
700
 
697
701
  ### Modern Angular Integration
698
702
 
@@ -706,11 +710,11 @@ The library provides default configurations that can be imported and customized:
706
710
 
707
711
  ```typescript
708
712
  import {
709
- DEFAULT_TOOLBAR_CONFIG,
710
- DEFAULT_BUBBLE_MENU_CONFIG,
711
- DEFAULT_IMAGE_BUBBLE_MENU_CONFIG,
712
- DEFAULT_TABLE_MENU_CONFIG,
713
- SLASH_COMMAND_KEYS,
713
+ ATE_DEFAULT_TOOLBAR_CONFIG,
714
+ ATE_DEFAULT_BUBBLE_MENU_CONFIG,
715
+ ATE_DEFAULT_IMAGE_BUBBLE_MENU_CONFIG,
716
+ ATE_DEFAULT_TABLE_MENU_CONFIG,
717
+ ATE_DEFAULT_SLASH_COMMANDS_CONFIG,
714
718
  } from "@flogeez/angular-tiptap-editor";
715
719
  ```
716
720
 
@@ -2680,6 +2680,11 @@ class AteToolbarComponent {
2680
2680
  [disabled]="!state().isEditable"
2681
2681
  (buttonClick)="onCommand('clearContent')" />
2682
2682
  }
2683
+ @if (config().custom?.length) {
2684
+ @for (item of config().custom; track item.key) {
2685
+ <ate-button [icon]="item.icon" [title]="item.label" (buttonClick)="item.command(editor())"></ate-button>
2686
+ }
2687
+ }
2683
2688
  </div>
2684
2689
  `, isInline: true, styles: [":host{display:block;transition:opacity .3s ease}:host-context(.floating-toolbar){position:sticky;top:3rem;left:0;right:0;z-index:100;display:flex;height:0;overflow:visible;pointer-events:none;opacity:0}:host-context(.floating-toolbar:focus-within),:host-context(.floating-toolbar:hover){opacity:1}.ate-toolbar{display:flex;align-items:center;gap:4px;padding:var(--ate-toolbar-padding);background:var(--ate-toolbar-background);border-bottom:1px solid var(--ate-toolbar-border-color);flex-wrap:wrap;min-height:32px;position:relative;z-index:50;border-top-left-radius:calc(var(--ate-menu-border-radius, 12px) - var(--ate-border-width, 2px));border-top-right-radius:calc(var(--ate-menu-border-radius, 12px) - var(--ate-border-width, 2px))}.ate-toolbar.floating{pointer-events:auto;border-radius:var(--ate-menu-border-radius, 12px);border:1px solid var(--ate-menu-border)!important;box-shadow:var(--ate-menu-shadow)!important;background:var(--ate-menu-bg)!important;padding:var(--ate-menu-padding)!important;flex-wrap:nowrap;overflow-x:auto;max-width:95vw;scrollbar-width:none;transform:translateY(0);transition:transform .3s cubic-bezier(.4,0,.2,1)}.ate-toolbar.floating::-webkit-scrollbar{display:none}:host-context(.floating-toolbar:focus-within) .ate-toolbar.floating,:host-context(.floating-toolbar:hover) .ate-toolbar.floating{transform:translateY(-2rem)}@media (max-width: 768px){.ate-toolbar{padding:6px 8px;gap:2px}}@keyframes toolbarSlideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.ate-toolbar{animation:toolbarSlideIn .3s cubic-bezier(.4,0,.2,1)}\n"], dependencies: [{ kind: "component", type: AteButtonComponent, selector: "ate-button", inputs: ["icon", "title", "active", "disabled", "color", "backgroundColor", "variant", "size", "iconSize"], outputs: ["buttonClick"] }, { kind: "component", type: AteSeparatorComponent, selector: "ate-separator", inputs: ["orientation", "size"] }, { kind: "component", type: AteColorPickerComponent, selector: "ate-color-picker", inputs: ["editor", "mode", "disabled", "anchorToText"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
2685
2690
  }
@@ -2912,6 +2917,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
2912
2917
  [disabled]="!state().isEditable"
2913
2918
  (buttonClick)="onCommand('clearContent')" />
2914
2919
  }
2920
+ @if (config().custom?.length) {
2921
+ @for (item of config().custom; track item.key) {
2922
+ <ate-button [icon]="item.icon" [title]="item.label" (buttonClick)="item.command(editor())"></ate-button>
2923
+ }
2924
+ }
2915
2925
  </div>
2916
2926
  `, styles: [":host{display:block;transition:opacity .3s ease}:host-context(.floating-toolbar){position:sticky;top:3rem;left:0;right:0;z-index:100;display:flex;height:0;overflow:visible;pointer-events:none;opacity:0}:host-context(.floating-toolbar:focus-within),:host-context(.floating-toolbar:hover){opacity:1}.ate-toolbar{display:flex;align-items:center;gap:4px;padding:var(--ate-toolbar-padding);background:var(--ate-toolbar-background);border-bottom:1px solid var(--ate-toolbar-border-color);flex-wrap:wrap;min-height:32px;position:relative;z-index:50;border-top-left-radius:calc(var(--ate-menu-border-radius, 12px) - var(--ate-border-width, 2px));border-top-right-radius:calc(var(--ate-menu-border-radius, 12px) - var(--ate-border-width, 2px))}.ate-toolbar.floating{pointer-events:auto;border-radius:var(--ate-menu-border-radius, 12px);border:1px solid var(--ate-menu-border)!important;box-shadow:var(--ate-menu-shadow)!important;background:var(--ate-menu-bg)!important;padding:var(--ate-menu-padding)!important;flex-wrap:nowrap;overflow-x:auto;max-width:95vw;scrollbar-width:none;transform:translateY(0);transition:transform .3s cubic-bezier(.4,0,.2,1)}.ate-toolbar.floating::-webkit-scrollbar{display:none}:host-context(.floating-toolbar:focus-within) .ate-toolbar.floating,:host-context(.floating-toolbar:hover) .ate-toolbar.floating{transform:translateY(-2rem)}@media (max-width: 768px){.ate-toolbar{padding:6px 8px;gap:2px}}@keyframes toolbarSlideIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.ate-toolbar{animation:toolbarSlideIn .3s cubic-bezier(.4,0,.2,1)}\n"] }]
2917
2927
  }], propDecorators: { editor: [{ type: i0.Input, args: [{ isSignal: true, alias: "editor", required: true }] }], config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: true }] }], imageUpload: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageUpload", required: false }] }], floating: [{ type: i0.Input, args: [{ isSignal: true, alias: "floating", required: false }] }] } });
@@ -3281,6 +3291,11 @@ class AteBubbleMenuComponent extends AteBaseBubbleMenu {
3281
3291
  [disabled]="!state().can.toggleLink"
3282
3292
  (buttonClick)="onCommand('toggleLink', $event)"></ate-button>
3283
3293
  }
3294
+ @if (bubbleMenuConfig().custom?.length) {
3295
+ @for (item of bubbleMenuConfig().custom; track item.key) {
3296
+ <ate-button [icon]="item.icon" [title]="item.label" (buttonClick)="item.command(editor())"></ate-button>
3297
+ }
3298
+ }
3284
3299
  </div>
3285
3300
  `, isInline: true, dependencies: [{ kind: "component", type: AteButtonComponent, selector: "ate-button", inputs: ["icon", "title", "active", "disabled", "color", "backgroundColor", "variant", "size", "iconSize"], outputs: ["buttonClick"] }, { kind: "component", type: AteColorPickerComponent, selector: "ate-color-picker", inputs: ["editor", "mode", "disabled", "anchorToText"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3286
3301
  }
@@ -3375,6 +3390,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
3375
3390
  [disabled]="!state().can.toggleLink"
3376
3391
  (buttonClick)="onCommand('toggleLink', $event)"></ate-button>
3377
3392
  }
3393
+ @if (bubbleMenuConfig().custom?.length) {
3394
+ @for (item of bubbleMenuConfig().custom; track item.key) {
3395
+ <ate-button [icon]="item.icon" [title]="item.label" (buttonClick)="item.command(editor())"></ate-button>
3396
+ }
3397
+ }
3378
3398
  </div>
3379
3399
  `,
3380
3400
  }]
@@ -6438,6 +6458,90 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImpo
6438
6458
  `, styles: [":host{--ate-primary: #2563eb;--ate-primary-contrast: #ffffff;--ate-primary-light: color-mix(in srgb, var(--ate-primary), transparent 90%);--ate-primary-lighter: color-mix(in srgb, var(--ate-primary), transparent 95%);--ate-primary-light-alpha: color-mix(in srgb, var(--ate-primary), transparent 85%);--ate-surface: #ffffff;--ate-surface-secondary: #f8f9fa;--ate-surface-tertiary: #f1f5f9;--ate-text: #2d3748;--ate-text-secondary: #64748b;--ate-text-muted: #a0aec0;--ate-border: #e2e8f0;--ate-highlight-bg: #fef08a;--ate-highlight-color: #854d0e;--ate-button-hover: #f1f5f9;--ate-button-active: #e2e8f0;--ate-error-color: #c53030;--ate-error-bg: #fed7d7;--ate-error-border: #feb2b2;--ate-border-color: var(--ate-border);--ate-border-width: 2px;--ate-border-radius: 12px;--ate-focus-color: var(--ate-primary);--ate-background: var(--ate-surface);--ate-sub-border-radius: 8px;--ate-text-color: var(--ate-text);--ate-placeholder-color: var(--ate-text-muted);--ate-line-height: 1.6;--ate-content-padding: 16px;--ate-menu-bg: var(--ate-surface);--ate-menu-border-radius: var(--ate-border-radius);--ate-menu-border: var(--ate-border);--ate-menu-shadow: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--ate-menu-padding: 6px;--ate-toolbar-padding: var(--ate-menu-padding);--ate-toolbar-background: var(--ate-surface-secondary);--ate-toolbar-border-color: var(--ate-border);--ate-toolbar-button-color: var(--ate-text-secondary);--ate-toolbar-button-hover-background: transparent;--ate-toolbar-button-active-background: var(--ate-primary-light);--ate-toolbar-button-active-color: var(--ate-primary);--ate-counter-color: var(--ate-text-secondary);--ate-counter-background: var(--ate-surface-secondary);--ate-counter-border-color: var(--ate-border);--ate-drag-background: #f0f8ff;--ate-drag-border-color: var(--ate-primary);--ate-blockquote-border-color: var(--ate-border);--ate-blockquote-background: var(--ate-surface-secondary);--ate-code-background: var(--ate-surface-secondary);--ate-code-color: var(--ate-code-color);--ate-code-border-color: var(--ate-border);--ate-code-block-background: #0f172a;--ate-code-block-color: #e2e8f0;--ate-code-block-border-color: var(--ate-border);--ate-image-border-radius: 16px;--ate-image-selected-color: var(--ate-primary);--ate-scrollbar-width: 10px;--ate-scrollbar-thumb: var(--ate-border);--ate-scrollbar-thumb-hover: var(--ate-text-muted);--ate-scrollbar-track: transparent;--ate-table-border-color: var(--ate-border);--ate-table-header-background: var(--ate-surface-secondary);--ate-table-header-color: var(--ate-text);--ate-table-cell-background: var(--ate-surface);--ate-table-cell-selected-background: var(--ate-primary-light);--ate-table-resize-handle-color: var(--ate-primary);--ate-table-row-hover-background: var(--ate-primary-lighter)}:host(.dark),:host([data-theme=\"dark\"]){--ate-primary: #3b82f6;--ate-primary-contrast: #ffffff;--ate-primary-light: color-mix(in srgb, var(--ate-primary), transparent 85%);--ate-primary-lighter: color-mix(in srgb, var(--ate-primary), transparent 92%);--ate-primary-light-alpha: color-mix(in srgb, var(--ate-primary), transparent 80%);--ate-surface: #020617;--ate-surface-secondary: #0f172a;--ate-surface-tertiary: #1e293b;--ate-text: #f8fafc;--ate-text-secondary: #94a3b8;--ate-text-muted: #64748b;--ate-border: #1e293b;--ate-highlight-bg: #854d0e;--ate-highlight-color: #fef08a;--ate-button-hover: #1e293b;--ate-button-active: #0f172a;--ate-menu-border: rgba(255, 255, 255, .1);--ate-menu-shadow: 0 20px 25px -5px rgba(0, 0, 0, .3), 0 10px 10px -5px rgba(0, 0, 0, .2);--ate-error-color: #f87171;--ate-error-bg: #450a0a;--ate-error-border: #7f1d1d;--ate-drag-background: var(--ate-surface-tertiary);--ate-drag-border-color: var(--ate-primary);--ate-blockquote-border-color: var(--ate-primary);--ate-toolbar-button-active-background: var(--ate-primary-light);--ate-toolbar-button-active-color: var(--ate-primary);--ate-button-hover: var(--ate-surface-tertiary);--ate-button-active: var(--ate-surface-secondary);--ate-scrollbar-thumb: var(--ate-surface-tertiary);--ate-scrollbar-thumb-hover: var(--ate-text-muted)}:host(.fill-container){display:block;height:100%}.ate-editor{border:var(--ate-border-width) solid var(--ate-border-color);border-radius:var(--ate-border-radius);background:var(--ate-background);overflow:visible;transition:border-color .2s ease;position:relative}:host(.floating-toolbar) .ate-editor{overflow:visible}:host(.fill-container) .ate-editor{display:flex;flex-direction:column;height:100%}:host(.fill-container) .ate-content-wrapper{flex:1;min-height:0}:host(.fill-container) .ate-content{flex:1;min-height:0;overflow-y:auto}.ate-editor:focus-within{border-color:var(--ate-focus-color)}.ate-content{min-height:var(--editor-min-height, 200px);height:var(--editor-height, auto);max-height:var(--editor-max-height, none);overflow-y:var(--editor-overflow, visible);outline:none;position:relative;scrollbar-width:thin;scrollbar-color:var(--ate-scrollbar-thumb) var(--ate-scrollbar-track)}:host(.is-disabled) .ate-content{cursor:not-allowed;opacity:.7;-webkit-user-select:none;user-select:none;pointer-events:none;background-color:var(--ate-surface-tertiary)}:host(.is-readonly) .ate-content{cursor:default;-webkit-user-select:text;user-select:text}:host(.is-readonly) .ate-content ::ng-deep .ate-link{cursor:pointer;pointer-events:auto}.ate-content::-webkit-scrollbar{width:var(--ate-scrollbar-width)}.ate-content-wrapper{position:relative;display:flex;flex-direction:column;min-height:0}.ate-content-wrapper .ate-content{flex:1}.ate-content::-webkit-scrollbar-track{background:var(--ate-scrollbar-track)}.ate-content::-webkit-scrollbar-thumb{background:var(--ate-scrollbar-thumb);border:3px solid transparent;background-clip:content-box;border-radius:10px}.ate-content::-webkit-scrollbar-thumb:hover{background:var(--ate-scrollbar-thumb-hover);background-clip:content-box}.ate-content.drag-over{background:var(--ate-drag-background);border:2px dashed var(--ate-drag-border-color)}.character-count{padding:6px 8px;font-size:12px;color:var(--ate-counter-color);text-align:right;border-top:1px solid var(--ate-counter-border-color);background:var(--ate-counter-background);transition:color .2s ease;border-bottom-left-radius:calc(var(--ate-border-radius) - var(--ate-border-width));border-bottom-right-radius:calc(var(--ate-border-radius) - var(--ate-border-width))}.character-count.limit-reached{color:var(--ate-error-color, #ef4444);font-weight:600}:host ::ng-deep .ProseMirror{padding:var(--ate-content-padding);outline:none;line-height:var(--ate-line-height);color:var(--ate-text-color);min-height:100%;height:100%;word-wrap:break-word;overflow-wrap:break-word}:host ::ng-deep .ProseMirror h1{font-size:2em;font-weight:700;margin-top:0;margin-bottom:.5em}:host ::ng-deep .ProseMirror h2{font-size:1.5em;font-weight:700;margin-top:1em;margin-bottom:.5em}:host ::ng-deep .ProseMirror h3{font-size:1.25em;font-weight:700;margin-top:1em;margin-bottom:.5em}:host ::ng-deep .ProseMirror p{margin:.5em 0}:host ::ng-deep .ProseMirror ul,:host ::ng-deep .ProseMirror ol{padding-left:2em;margin:.5em 0}:host ::ng-deep .ProseMirror blockquote{border-left:4px solid var(--ate-blockquote-border-color);margin:1em 0;background:var(--ate-blockquote-background);padding:.5em 1em;border-radius:0 4px 4px 0}:host ::ng-deep .ProseMirror code{background:var(--ate-code-background);color:var(--ate-code-color);border:1px solid var(--ate-code-border-color);padding:.15em .4em;border-radius:4px;font-family:JetBrains Mono,Fira Code,Monaco,Consolas,monospace;font-size:.85em;font-weight:500}:host ::ng-deep .ProseMirror pre{background:var(--ate-code-block-background);color:var(--ate-code-block-color);border:1px solid var(--ate-code-block-border-color);padding:1em;border-radius:var(--ate-border-radius);overflow-x:auto;margin:1em 0}:host ::ng-deep .ProseMirror pre code{background:none;color:inherit;border:none;padding:0}:host ::ng-deep .ProseMirror p.is-editor-empty:first-child:before{content:attr(data-placeholder);color:var(--ate-placeholder-color);pointer-events:none;float:left;height:0}:host ::ng-deep .ProseMirror[contenteditable=false]{pointer-events:none}:host ::ng-deep .ProseMirror[contenteditable=false] img{cursor:default;pointer-events:none}:host ::ng-deep .ProseMirror[contenteditable=false] img:hover{transform:none;box-shadow:0 2px 8px #0000001a}:host ::ng-deep .ProseMirror[contenteditable=false] img.ProseMirror-selectednode{outline:none}:host ::ng-deep .ProseMirror img{position:relative;display:inline-block;max-width:100%;height:auto;cursor:pointer;transition:all .2s ease;border:2px solid transparent;border-radius:var(--ate-image-border-radius)}:host ::ng-deep .ProseMirror img:hover{border-color:var(--ate-border-color);box-shadow:0 2px 4px #0000001a}:host ::ng-deep .ProseMirror img.ProseMirror-selectednode{border-color:var(--ate-image-selected-color);box-shadow:0 0 0 3px var(--ate-primary-light-alpha);transition:all .2s ease}:host ::ng-deep .ProseMirror .tiptap-image{max-width:100%;height:auto;border-radius:var(--ate-image-border-radius);box-shadow:0 4px 20px #00000014;margin:.5em 0;cursor:pointer;transition:all .3s cubic-bezier(.4,0,.2,1);display:block;filter:brightness(1) contrast(1)}:host ::ng-deep .ProseMirror .tiptap-image:hover{box-shadow:0 8px 30px #0000001f;filter:brightness(1.02) contrast(1.02)}:host ::ng-deep .ProseMirror .tiptap-image.ProseMirror-selectednode{outline:2px solid var(--ate-primary);outline-offset:2px;border-radius:var(--ate-image-border-radius);box-shadow:0 0 0 4px var(--ate-primary-light-alpha)}:host ::ng-deep .image-container{margin:.5em 0;text-align:center;border-radius:16px;overflow:hidden;transition:all .3s cubic-bezier(.4,0,.2,1)}:host ::ng-deep .image-container.image-align-left{text-align:left}:host ::ng-deep .image-container.image-align-center{text-align:center}:host ::ng-deep .image-container.image-align-right{text-align:right}:host ::ng-deep .image-container img{display:inline-block;max-width:100%;height:auto;border-radius:16px}:host ::ng-deep .resizable-image-container{position:relative;display:inline-block;margin:.5em 0}:host ::ng-deep .resize-controls{position:absolute;inset:0;pointer-events:none;z-index:1000}:host ::ng-deep .resize-handle{position:absolute;width:12px;height:12px;background:var(--ate-primary);border:2px solid var(--ate-surface);border-radius:50%;pointer-events:all;cursor:pointer;z-index:1001;transition:all .15s ease;box-shadow:0 2px 6px #0003}:host ::ng-deep .resize-handle:hover{background:var(--ate-primary);box-shadow:0 3px 8px #0000004d}:host ::ng-deep .resize-handle:active{background:var(--ate-primary)}:host ::ng-deep .resize-handle-n:hover,:host ::ng-deep .resize-handle-s:hover{transform:translate(-50%) scale(1.2)}:host ::ng-deep .resize-handle-w:hover,:host ::ng-deep .resize-handle-e:hover{transform:translateY(-50%) scale(1.2)}:host ::ng-deep .resize-handle-n:active,:host ::ng-deep .resize-handle-s:active{transform:translate(-50%) scale(.9)}:host ::ng-deep .resize-handle-w:active,:host ::ng-deep .resize-handle-e:active{transform:translateY(-50%) scale(.9)}:host ::ng-deep .resize-handle-nw:hover,:host ::ng-deep .resize-handle-ne:hover,:host ::ng-deep .resize-handle-sw:hover,:host ::ng-deep .resize-handle-se:hover{transform:scale(1.2)}:host ::ng-deep .resize-handle-nw:active,:host ::ng-deep .resize-handle-ne:active,:host ::ng-deep .resize-handle-sw:active,:host ::ng-deep .resize-handle-se:active{transform:scale(.9)}:host ::ng-deep .resize-handle-nw{top:0;left:-6px;cursor:nw-resize}:host ::ng-deep .resize-handle-n{top:0;left:50%;transform:translate(-50%);cursor:n-resize}:host ::ng-deep .resize-handle-ne{top:0;right:-6px;cursor:ne-resize}:host ::ng-deep .resize-handle-w{top:50%;left:-6px;transform:translateY(-50%);cursor:w-resize}:host ::ng-deep .resize-handle-e{top:50%;right:-6px;transform:translateY(-50%);cursor:e-resize}:host ::ng-deep .resize-handle-sw{bottom:0;left:-6px;cursor:sw-resize}:host ::ng-deep .resize-handle-s{bottom:0;left:50%;transform:translate(-50%);cursor:s-resize}:host ::ng-deep .resize-handle-se{bottom:0;right:-6px;cursor:se-resize}:host ::ng-deep body.resizing{-webkit-user-select:none;user-select:none;cursor:crosshair}:host ::ng-deep body.resizing .ProseMirror{pointer-events:none}:host ::ng-deep body.resizing .ProseMirror .tiptap-image{pointer-events:none}:host ::ng-deep .image-size-info{position:absolute;bottom:-20px;left:50%;transform:translate(-50%);background:#000c;color:#fff;padding:2px 6px;border-radius:3px;font-size:11px;white-space:nowrap;opacity:0;transition:opacity .2s ease}:host ::ng-deep .image-container:hover .image-size-info{opacity:1}:host ::ng-deep .ProseMirror table{border-collapse:separate;border-spacing:0;margin:0;table-layout:fixed;width:100%;border-radius:8px;overflow:hidden}:host ::ng-deep .ProseMirror table td,:host ::ng-deep .ProseMirror table th{border:none;border-right:1px solid var(--ate-table-border-color);border-bottom:1px solid var(--ate-table-border-color);box-sizing:border-box;min-width:1em;padding:8px 12px;position:relative;vertical-align:top;text-align:left}:host ::ng-deep .ProseMirror table td{background:var(--ate-table-cell-background)}:host ::ng-deep .ProseMirror table td:first-child,:host ::ng-deep .ProseMirror table th:first-child{border-left:1px solid var(--ate-table-border-color)}:host ::ng-deep .ProseMirror table tr:first-child td,:host ::ng-deep .ProseMirror table tr:first-child th{border-top:1px solid var(--ate-table-border-color)}:host ::ng-deep .ProseMirror table tr:first-child th:first-child{border-top-left-radius:8px}:host ::ng-deep .ProseMirror table tr:first-child th:last-child{border-top-right-radius:8px}:host ::ng-deep .ProseMirror table tr:last-child td:first-child{border-bottom-left-radius:8px}:host ::ng-deep .ProseMirror table tr:last-child td:last-child{border-bottom-right-radius:8px}:host ::ng-deep .ProseMirror table th{background:var(--ate-table-header-background);font-weight:600;color:var(--ate-table-header-color)}:host ::ng-deep .ProseMirror table .selectedCell:after{background:var(--ate-table-cell-selected-background);content:\"\";inset:0;pointer-events:none;position:absolute;z-index:2}:host ::ng-deep .ProseMirror table .column-resize-handle{position:absolute;right:-2px;top:0;bottom:0;width:4px;background-color:var(--ate-table-resize-handle-color);opacity:0;transition:opacity .2s ease}:host ::ng-deep .ProseMirror table:hover .column-resize-handle{opacity:1}:host ::ng-deep .ProseMirror table .column-resize-handle:hover{background-color:var(--ate-focus-color)}:host ::ng-deep .ProseMirror .tableWrapper{overflow-x:auto;margin:1em 0;border-radius:8px}:host ::ng-deep .ProseMirror .tableWrapper table{margin:0;border-radius:8px;min-width:600px;overflow:hidden}:host ::ng-deep .ProseMirror table p{margin:0}:host ::ng-deep .ProseMirror table tbody tr:hover td{background-color:var(--ate-table-row-hover-background)}\n"] }]
6439
6459
  }], ctorParameters: () => [], propDecorators: { config: [{ type: i0.Input, args: [{ isSignal: true, alias: "config", required: false }] }], content: [{ type: i0.Input, args: [{ isSignal: true, alias: "content", required: false }] }], placeholder: [{ type: i0.Input, args: [{ isSignal: true, alias: "placeholder", required: false }] }], editable: [{ type: i0.Input, args: [{ isSignal: true, alias: "editable", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], minHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "minHeight", required: false }] }], height: [{ type: i0.Input, args: [{ isSignal: true, alias: "height", required: false }] }], maxHeight: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxHeight", required: false }] }], fillContainer: [{ type: i0.Input, args: [{ isSignal: true, alias: "fillContainer", required: false }] }], showToolbar: [{ type: i0.Input, args: [{ isSignal: true, alias: "showToolbar", required: false }] }], showFooter: [{ type: i0.Input, args: [{ isSignal: true, alias: "showFooter", required: false }] }], showCharacterCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCharacterCount", required: false }] }], showWordCount: [{ type: i0.Input, args: [{ isSignal: true, alias: "showWordCount", required: false }] }], maxCharacters: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxCharacters", required: false }] }], enableOfficePaste: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableOfficePaste", required: false }] }], enableSlashCommands: [{ type: i0.Input, args: [{ isSignal: true, alias: "enableSlashCommands", required: false }] }], slashCommands: [{ type: i0.Input, args: [{ isSignal: true, alias: "slashCommands", required: false }] }], customSlashCommands: [{ type: i0.Input, args: [{ isSignal: true, alias: "customSlashCommands", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], autofocus: [{ type: i0.Input, args: [{ isSignal: true, alias: "autofocus", required: false }] }], seamless: [{ type: i0.Input, args: [{ isSignal: true, alias: "seamless", required: false }] }], floatingToolbar: [{ type: i0.Input, args: [{ isSignal: true, alias: "floatingToolbar", required: false }] }], showEditToggle: [{ type: i0.Input, args: [{ isSignal: true, alias: "showEditToggle", required: false }] }], spellcheck: [{ type: i0.Input, args: [{ isSignal: true, alias: "spellcheck", required: false }] }], tiptapExtensions: [{ type: i0.Input, args: [{ isSignal: true, alias: "tiptapExtensions", required: false }] }], tiptapOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "tiptapOptions", required: false }] }], showBubbleMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "showBubbleMenu", required: false }] }], bubbleMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "bubbleMenu", required: false }] }], showImageBubbleMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "showImageBubbleMenu", required: false }] }], imageBubbleMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageBubbleMenu", required: false }] }], toolbar: [{ type: i0.Input, args: [{ isSignal: true, alias: "toolbar", required: false }] }], showTableBubbleMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "showTableBubbleMenu", required: false }] }], tableBubbleMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "tableBubbleMenu", required: false }] }], showCellBubbleMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCellBubbleMenu", required: false }] }], cellBubbleMenu: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellBubbleMenu", required: false }] }], stateCalculators: [{ type: i0.Input, args: [{ isSignal: true, alias: "stateCalculators", required: false }] }], imageUpload: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageUpload", required: false }] }], imageUploadHandler: [{ type: i0.Input, args: [{ isSignal: true, alias: "imageUploadHandler", required: false }] }], contentChange: [{ type: i0.Output, args: ["contentChange"] }], editorCreated: [{ type: i0.Output, args: ["editorCreated"] }], editorUpdate: [{ type: i0.Output, args: ["editorUpdate"] }], editorFocus: [{ type: i0.Output, args: ["editorFocus"] }], editorBlur: [{ type: i0.Output, args: ["editorBlur"] }], editableChange: [{ type: i0.Output, args: ["editableChange"] }], editorElement: [{ type: i0.ViewChild, args: ["editorElement", { isSignal: true }] }] } });
6440
6460
 
6461
+ /**
6462
+ * Clés des boutons de la barre d'outils native
6463
+ */
6464
+ const ATE_TOOLBAR_KEYS = [
6465
+ "bold",
6466
+ "italic",
6467
+ "underline",
6468
+ "strike",
6469
+ "code",
6470
+ "codeBlock",
6471
+ "superscript",
6472
+ "subscript",
6473
+ "highlight",
6474
+ "highlightPicker",
6475
+ "heading1",
6476
+ "heading2",
6477
+ "heading3",
6478
+ "bulletList",
6479
+ "orderedList",
6480
+ "blockquote",
6481
+ "alignLeft",
6482
+ "alignCenter",
6483
+ "alignRight",
6484
+ "alignJustify",
6485
+ "link",
6486
+ "image",
6487
+ "horizontalRule",
6488
+ "table",
6489
+ "undo",
6490
+ "redo",
6491
+ "clear",
6492
+ "textColor",
6493
+ "separator",
6494
+ ];
6495
+
6496
+ /**
6497
+ * Clés des options du menu bulle de texte
6498
+ */
6499
+ const ATE_BUBBLE_MENU_KEYS = [
6500
+ "bold",
6501
+ "italic",
6502
+ "underline",
6503
+ "strike",
6504
+ "code",
6505
+ "superscript",
6506
+ "subscript",
6507
+ "highlight",
6508
+ "highlightPicker",
6509
+ "textColor",
6510
+ "link",
6511
+ "separator",
6512
+ ];
6513
+ /**
6514
+ * Clés des options du menu bulle d'image
6515
+ */
6516
+ const ATE_IMAGE_BUBBLE_MENU_KEYS = [
6517
+ "changeImage",
6518
+ "resizeSmall",
6519
+ "resizeMedium",
6520
+ "resizeLarge",
6521
+ "resizeOriginal",
6522
+ "deleteImage",
6523
+ "separator",
6524
+ ];
6525
+ /**
6526
+ * Clés des options du menu de table
6527
+ */
6528
+ const ATE_TABLE_BUBBLE_MENU_KEYS = [
6529
+ "addRowBefore",
6530
+ "addRowAfter",
6531
+ "deleteRow",
6532
+ "addColumnBefore",
6533
+ "addColumnAfter",
6534
+ "deleteColumn",
6535
+ "deleteTable",
6536
+ "toggleHeaderRow",
6537
+ "toggleHeaderColumn",
6538
+ "separator",
6539
+ ];
6540
+ /**
6541
+ * Clés des options du menu de cellule
6542
+ */
6543
+ const ATE_CELL_BUBBLE_MENU_KEYS = ["mergeCells", "splitCell"];
6544
+
6441
6545
  /*
6442
6546
  * Public API Surface of tiptap-editor
6443
6547
  */
@@ -6475,5 +6579,5 @@ const DEFAULT_CELL_MENU_CONFIG = ATE_DEFAULT_CELL_MENU_CONFIG;
6475
6579
  * Generated bundle index. Do not edit.
6476
6580
  */
6477
6581
 
6478
- export { 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_INITIAL_EDITOR_STATE, ATE_SLASH_COMMAND_KEYS, AngularTiptapEditorComponent, AteColorPickerService, AteDiscoveryCalculator, AteEditorCommandsService, AteI18nService, AteImageCalculator, AteImageService, AteLinkService, AteMarksCalculator, 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, createDefaultSlashCommands, filterSlashCommands };
6582
+ 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, AteColorPickerService, AteDiscoveryCalculator, AteEditorCommandsService, AteI18nService, AteImageCalculator, AteImageService, AteLinkService, AteMarksCalculator, 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, createDefaultSlashCommands, filterSlashCommands };
6479
6583
  //# sourceMappingURL=flogeez-angular-tiptap-editor.mjs.map