@phuong-tran-redoc/document-engine-angular 0.0.12

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 ADDED
@@ -0,0 +1,1698 @@
1
+ import * as i0 from '@angular/core';
2
+ import { OnInit, OnChanges, OnDestroy, EventEmitter, SimpleChanges, Type, Injector, ElementRef, AfterViewInit, Renderer2, ChangeDetectorRef, AfterContentInit, QueryList } from '@angular/core';
3
+ import { IndentOptions, DynamicFieldOptions, DynamicFieldCategory as DynamicFieldCategory$1, RestrictedEditingOptions, Color, TextCaseType, ListStyleType, DynamicFieldItem as DynamicFieldItem$1 } from '@phuong-tran-redoc/document-engine-core';
4
+ import { BlockquoteOptions } from '@tiptap/extension-blockquote';
5
+ import { BoldOptions } from '@tiptap/extension-bold';
6
+ import { CodeOptions } from '@tiptap/extension-code';
7
+ import { CodeBlockOptions } from '@tiptap/extension-code-block';
8
+ import { HeadingOptions } from '@tiptap/extension-heading';
9
+ import { ImageOptions } from '@tiptap/extension-image';
10
+ import { ItalicOptions } from '@tiptap/extension-italic';
11
+ import { LinkOptions } from '@tiptap/extension-link';
12
+ import { StrikeOptions } from '@tiptap/extension-strike';
13
+ import { SubscriptExtensionOptions } from '@tiptap/extension-subscript';
14
+ import { SuperscriptExtensionOptions } from '@tiptap/extension-superscript';
15
+ import { TableKitOptions } from '@tiptap/extension-table';
16
+ import { TextAlignOptions } from '@tiptap/extension-text-align';
17
+ import { TextStyleKitOptions } from '@tiptap/extension-text-style';
18
+ import { UnderlineOptions } from '@tiptap/extension-underline';
19
+ import { UndoRedoOptions, PlaceholderOptions, CharacterCountOptions } from '@tiptap/extensions';
20
+ import { Editor, Content, EditorEvents, Extension } from '@tiptap/core';
21
+ export { Editor } from '@tiptap/core';
22
+ import { BubbleMenuPluginProps } from '@tiptap/extension-bubble-menu';
23
+ import * as _angular_forms from '@angular/forms';
24
+ import { ControlValueAccessor, ValidatorFn, FormControl } from '@angular/forms';
25
+ import { FloatingMenuPluginProps } from '@tiptap/extension-floating-menu';
26
+ import { Placement } from '@floating-ui/dom';
27
+ import { SafeHtml } from '@angular/platform-browser';
28
+ import * as rxjs from 'rxjs';
29
+
30
+ interface TemplateItem {
31
+ title: string;
32
+ data: string;
33
+ description?: string;
34
+ }
35
+
36
+ type ButtonType = 'icon-button' | 'select-button';
37
+ type SelectOption = {
38
+ value: string;
39
+ label: string;
40
+ };
41
+ type IconButton = {
42
+ type: 'icon-button';
43
+ id: string;
44
+ icon: string;
45
+ label?: string;
46
+ callback: () => void;
47
+ };
48
+ type SelectButton = {
49
+ type: 'select-button';
50
+ id: string;
51
+ label: string;
52
+ options: SelectOption[];
53
+ callback: () => void;
54
+ };
55
+ type ToolbarButton = IconButton | SelectButton;
56
+
57
+ /**
58
+ * Định nghĩa cấu hình đầy đủ cho DocumentEngineKit (Factory của bạn).
59
+ * Hầu hết các tùy chọn đều là:
60
+ * - `false` hoặc `undefined`: Để tắt extension.
61
+ * - `true`: Để bật với cài đặt mặc định.
62
+ * - `object`: Để bật và cung cấp cấu hình tùy chỉnh.
63
+ */
64
+ interface DocumentEngineConfig {
65
+ /**
66
+ * If set to false, the undo-redo extension will not be registered
67
+ * @example undoRedo: false
68
+ */
69
+ undoRedo: Partial<UndoRedoOptions> | boolean;
70
+ /**
71
+ * If set to false, the bold extension will not be registered
72
+ * @example bold: false
73
+ */
74
+ bold: Partial<BoldOptions> | boolean;
75
+ /**
76
+ * If set to false, the italic extension will not be registered
77
+ * @example italic: false
78
+ */
79
+ italic: Partial<ItalicOptions> | boolean;
80
+ /**
81
+ * If set to false, the underline extension will not be registered
82
+ * @example underline: false
83
+ */
84
+ underline: Partial<UnderlineOptions> | boolean;
85
+ /**
86
+ * If set to false, the strike extension will not be registered
87
+ * @example strike: false
88
+ */
89
+ strike: Partial<StrikeOptions> | boolean;
90
+ /**
91
+ * Cấu hình cho @tiptap/extension-subscript
92
+ * @default false
93
+ */
94
+ subscript?: Partial<SubscriptExtensionOptions> | boolean;
95
+ /**
96
+ * Cấu hình cho @tiptap/extension-superscript
97
+ * @default false
98
+ */
99
+ superscript?: Partial<SuperscriptExtensionOptions> | boolean;
100
+ /**
101
+ * If set to false, the code extension will not be registered
102
+ * @example code: false
103
+ */
104
+ code: Partial<CodeOptions> | boolean;
105
+ /**
106
+ * If set to false, the link extension will not be registered
107
+ * @example link: false
108
+ */
109
+ link: Partial<LinkOptions> | boolean;
110
+ /**
111
+ * Cấu hình cho NotumHeading (custom, thay thế cho heading gốc)
112
+ * @default {}
113
+ */
114
+ heading?: Partial<HeadingOptions> | boolean;
115
+ /**
116
+ * Hiển thị Font Size trong toolbar
117
+ * @default true
118
+ */
119
+ fontSize?: boolean;
120
+ /**
121
+ * Hiển thị Line Height trong toolbar
122
+ * @default true
123
+ */
124
+ lineHeight?: boolean;
125
+ /**
126
+ * Cấu hình cho TextCase (custom)
127
+ * @default true
128
+ */
129
+ textCase?: boolean;
130
+ /**
131
+ * Cấu hình cho @tiptap/extension-text-align
132
+ * @default { types: ['paragraph', 'heading'] }
133
+ */
134
+ textAlign?: Partial<TextAlignOptions> | boolean;
135
+ /**
136
+ * Cấu hình cho Indent (custom)
137
+ * @default {}
138
+ */
139
+ indent?: Partial<IndentOptions> | boolean;
140
+ /**
141
+ * If set to false, the list extension will not be registered
142
+ * @example list: false
143
+ */
144
+ list: boolean;
145
+ /**
146
+ * Cấu hình cho @tiptap/extension-text-style (TextStyleKit)
147
+ * @default false
148
+ */
149
+ textStyleKit?: Partial<TextStyleKitOptions> | boolean;
150
+ /**
151
+ * Cấu hình cho ResetFormat (custom)
152
+ * @default false
153
+ */
154
+ resetFormat?: boolean;
155
+ /**
156
+ * If set to false, the codeBlock extension will not be registered
157
+ * @example codeBlock: false
158
+ */
159
+ codeBlock: Partial<CodeBlockOptions> | boolean;
160
+ /**
161
+ * If set to false, the blockquote extension will not be registered
162
+ * @example blockquote: false
163
+ */
164
+ blockquote: Partial<BlockquoteOptions> | boolean;
165
+ /**
166
+ * Cấu hình cho @tiptap/extension-image
167
+ * @default {}
168
+ */
169
+ image?: Partial<ImageOptions> | boolean;
170
+ /**
171
+ * Cấu hình cho @tiptap/extension-table (StyledTableKit)
172
+ * @default false
173
+ */
174
+ tables?: Partial<TableKitOptions> | boolean;
175
+ /**
176
+ * Cấu hình cho Special Characters (custom)
177
+ * @default false
178
+ */
179
+ specialCharacters?: boolean;
180
+ /**
181
+ * Cấu hình cho PageBreak (custom)
182
+ * @default true
183
+ */
184
+ pageBreak?: boolean;
185
+ /**
186
+ * Cấu hình cho @tiptap/extension-placeholder
187
+ * @default { placeholder: 'Type something...' }
188
+ */
189
+ placeholder?: Partial<PlaceholderOptions> | boolean;
190
+ /**
191
+ * Danh sách templates
192
+ * Được sử dụng để hiển thị trong bubble menu
193
+ */
194
+ templates?: TemplateItem[];
195
+ /**
196
+ * Cấu hình cho DynamicField (custom)
197
+ * @default true
198
+ */
199
+ dynamicField?: Partial<DynamicFieldOptions> | boolean;
200
+ /**
201
+ * Danh sách categories cho dynamic fields
202
+ * Được sử dụng để hiển thị trong bubble menu
203
+ */
204
+ dynamicFieldsCategories?: DynamicFieldCategory$1[];
205
+ /**
206
+ * Cấu hình cho RestrictedEditing (custom)
207
+ * @default { initialMode: 'standard' }
208
+ */
209
+ restrictedEditing?: Partial<RestrictedEditingOptions> | boolean;
210
+ /**
211
+ * Cấu hình cho ClearContent (custom)
212
+ * @default true
213
+ */
214
+ clearContent?: boolean;
215
+ /**
216
+ * Cấu hình cho Markdown download (toolbar feature)
217
+ * @default true
218
+ */
219
+ markdown?: boolean;
220
+ /**
221
+ * Hiển thị toolbar
222
+ * @default true
223
+ */
224
+ showToolbar?: boolean;
225
+ /**
226
+ * Cho phép chỉnh sửa editor
227
+ * @default true
228
+ */
229
+ editable?: boolean;
230
+ /**
231
+ * Hiển thị footer (chứa character count và các component khác)
232
+ * @default false
233
+ */
234
+ showFooter?: boolean;
235
+ /**
236
+ * Cấu hình cho @tiptap/extension-character-count
237
+ * Footer phải được bật để hiển thị character count
238
+ * @default false (Thường được bật/tắt bởi client)
239
+ */
240
+ characterCount?: Partial<CharacterCountOptions> | boolean;
241
+ /**
242
+ * Hiển thị button print
243
+ * @default false
244
+ */
245
+ showPrintButton?: boolean;
246
+ /**
247
+ * Custom toolbar buttons
248
+ * Allows clients to define custom actions/buttons in the toolbar
249
+ * @default undefined
250
+ */
251
+ customToolbarButtons?: ToolbarButton[];
252
+ }
253
+
254
+ /**
255
+ * EditorCapabilities class
256
+ * Pre-calculates all capability checks from DocumentEngineConfig
257
+ * to avoid repeated function calls in UI components
258
+ */
259
+ declare class EditorCapabilities {
260
+ readonly hasHistory: boolean;
261
+ readonly hasBold: boolean;
262
+ readonly hasItalic: boolean;
263
+ readonly hasUnderline: boolean;
264
+ readonly hasStrike: boolean;
265
+ readonly basicInline: boolean;
266
+ readonly hasSubscript: boolean;
267
+ readonly hasSuperscript: boolean;
268
+ readonly hasCode: boolean;
269
+ readonly hasLink: boolean;
270
+ readonly advancedInline: boolean;
271
+ readonly hasHeading: boolean;
272
+ readonly hasFontSize: boolean;
273
+ readonly hasLineHeight: boolean;
274
+ readonly hasTextCase: boolean;
275
+ readonly hasTextProperty: boolean;
276
+ readonly hasTextAlign: boolean;
277
+ readonly hasIndent: boolean;
278
+ readonly hasLists: boolean;
279
+ readonly hasAlignmentLayout: boolean;
280
+ readonly hasColors: boolean;
281
+ readonly hasResetFormat: boolean;
282
+ readonly hasFormatUtilities: boolean;
283
+ readonly hasCodeBlock: boolean;
284
+ readonly hasBlockquote: boolean;
285
+ readonly hasBlockTypes: boolean;
286
+ readonly hasImages: boolean;
287
+ readonly hasTable: boolean;
288
+ readonly hasSpecialChars: boolean;
289
+ readonly hasPageBreak: boolean;
290
+ readonly hasInsertObject: boolean;
291
+ readonly hasTemplates: boolean;
292
+ readonly hasDynamicFields: boolean;
293
+ readonly hasEditableRegion: boolean;
294
+ readonly hasBusinessFeatures: boolean;
295
+ readonly hasClearContent: boolean;
296
+ readonly hasMarkdown: boolean;
297
+ readonly hasActions: boolean;
298
+ readonly hasFooter: boolean;
299
+ readonly hasPrintButton: boolean;
300
+ constructor(config: Partial<DocumentEngineConfig>);
301
+ }
302
+
303
+ /**
304
+ * Document Editor Component
305
+ * High-level wrapper that encapsulates TiptapEditor and DocumentEngineKit
306
+ * Provides a simple API for consumers without exposing internal dependencies
307
+ *
308
+ * Usage:
309
+ * <document-engine-editor
310
+ * #editor
311
+ * [config]="editorConfig"
312
+ *
313
+ * (editorReady)="editor = docEditor.editor"
314
+ * >
315
+ * <tiptap-editor
316
+ * [editor]="docEditor.editor"
317
+ * [(ngModel)]="content"
318
+ * ></tiptap-editor>
319
+ * </document-engine-editor>
320
+ */
321
+ declare class DocumentEditorComponent implements OnInit, OnChanges, OnDestroy {
322
+ private readonly ngZone;
323
+ config?: Partial<DocumentEngineConfig>;
324
+ editorReady: EventEmitter<Editor>;
325
+ editor: Editor;
326
+ get mergedConfig(): Partial<DocumentEngineConfig>;
327
+ private _mergedConfig?;
328
+ capabilities: EditorCapabilities;
329
+ private updateCapabilities;
330
+ ngOnChanges(changes: SimpleChanges): void;
331
+ ngOnInit(): void;
332
+ ngOnDestroy(): void;
333
+ private initializeEditor;
334
+ /**
335
+ * Get merged config with all extensions enabled by default
336
+ * User config will override defaults
337
+ */
338
+ private getMergedConfig;
339
+ /**
340
+ * Merge two config objects, preferring userConfig values when provided
341
+ */
342
+ private mergeConfig;
343
+ static ɵfac: i0.ɵɵFactoryDeclaration<DocumentEditorComponent, never>;
344
+ static ɵcmp: i0.ɵɵComponentDeclaration<DocumentEditorComponent, "document-engine-editor", never, { "config": { "alias": "config"; "required": false; }; }, { "editorReady": "editorReady"; }, never, ["*"], true, never>;
345
+ }
346
+
347
+ type BubbleTarget = {
348
+ kind: 'mark';
349
+ name: string | string[];
350
+ allowEmptySelection?: boolean;
351
+ requireFocus?: boolean;
352
+ extraPredicate?: (editor: Editor) => boolean;
353
+ } | {
354
+ kind: 'node';
355
+ name: string | string[];
356
+ allowEmptySelection?: boolean;
357
+ requireFocus?: boolean;
358
+ extraPredicate?: (editor: Editor) => boolean;
359
+ };
360
+ type BubbleMenuProps = Omit<BubbleMenuPluginProps, 'editor' | 'element' | 'pluginKey' | 'shouldShow' | 'getReferencedVirtualElement'> & {
361
+ pluginKey: string;
362
+ mountTo?: string | null;
363
+ };
364
+ /**
365
+ * Interface that bubble view components must implement
366
+ */
367
+ interface BubbleMenuViewContent<TAttrs = Record<string, unknown>> {
368
+ /**
369
+ * Called when view becomes active
370
+ *
371
+ * @param attrs - Attributes from the active mark/node
372
+ *
373
+ * Use this to:
374
+ * - Initialize form controls with attribute values
375
+ * - Set up initial state
376
+ */
377
+ onActivate?(attrs: TAttrs): void;
378
+ /**
379
+ * Called when view becomes inactive (before navigation away or close)
380
+ *
381
+ * Use this to:
382
+ * - Clean up subscriptions
383
+ * - Cancel pending operations
384
+ */
385
+ onDeactivate?(): void;
386
+ /**
387
+ * Navigate to another view by ID
388
+ * Views decide their own navigation logic
389
+ *
390
+ * @param viewId - The ID of the view to navigate to
391
+ *
392
+ * @example
393
+ * // In main view: navigate to edit
394
+ * this.navigateTo?.('edit');
395
+ */
396
+ navigateTo?(viewId: string): void;
397
+ /**
398
+ * Navigate back to previous view
399
+ * Each view decides where "back" goes
400
+ *
401
+ * @param viewId - Optional view ID to go back to. If not provided, closes the bubble
402
+ *
403
+ * @example
404
+ * // In edit view: go back to main
405
+ * this.goBack?.('main');
406
+ *
407
+ * // Or close if no previous view
408
+ * this.close?.();
409
+ */
410
+ goBack?(viewId?: string): void;
411
+ /**
412
+ * Close the entire bubble menu
413
+ *
414
+ * @example
415
+ * this.close?.();
416
+ */
417
+ close?(): void;
418
+ /**
419
+ * Editor instance (injected by wrapper)
420
+ */
421
+ editor?: Editor;
422
+ /**
423
+ * Current view ID (injected by wrapper)
424
+ */
425
+ viewId?: string;
426
+ }
427
+ /**
428
+ * Configuration for a single view within the bubble menu
429
+ */
430
+ interface BubbleMenuViewConfig<TAttrs = Record<string, unknown>> {
431
+ /**
432
+ * Unique identifier for this view
433
+ * Used for navigation: navigateTo('viewId')
434
+ */
435
+ id: string;
436
+ /**
437
+ * The Angular component to render for this view
438
+ */
439
+ component: Type<BubbleMenuViewContent<TAttrs>>;
440
+ /**
441
+ * Condition to determine if this view should be shown when bubble activates
442
+ *
443
+ * @param attrs - The attributes from the active mark/node
444
+ * @returns true if this view should be shown
445
+ *
446
+ * @example
447
+ * showWhen: (attrs) => !!attrs.href // Show if link exists
448
+ * showWhen: (attrs) => attrs.colspan > 1 // Show if cell spans multiple columns
449
+ */
450
+ showWhen?: (attrs: TAttrs) => boolean;
451
+ /**
452
+ * Should this view be shown when bubble is force-opened?
453
+ * (e.g., via toolbar button when no selection exists)
454
+ *
455
+ * @default false
456
+ */
457
+ showOnForceOpen?: boolean;
458
+ /**
459
+ * Is this the default/fallback view?
460
+ * Shown when no other view's showWhen condition matches
461
+ *
462
+ * @default false
463
+ */
464
+ isDefault?: boolean;
465
+ /**
466
+ * Optional label for debugging/logging
467
+ */
468
+ label?: string;
469
+ }
470
+ /**
471
+ * Configuration for the multi-view bubble menu wrapper
472
+ */
473
+ interface EditorBubbleMenuConfig {
474
+ /**
475
+ * The target mark or node to track
476
+ */
477
+ target: BubbleTarget;
478
+ /**
479
+ * Array of view configurations
480
+ * Order matters: first matching view is selected
481
+ */
482
+ views: BubbleMenuViewConfig[];
483
+ /**
484
+ * Optional Floating UI options for positioning and behavior
485
+ */
486
+ props?: BubbleMenuProps;
487
+ }
488
+ interface ToolbarBubbleMenuConfig {
489
+ /**
490
+ * Unique plugin key for this bubble menu instance
491
+ */
492
+ pluginKey: string;
493
+ /**
494
+ * Array of view configurations
495
+ * Order matters: first matching view is selected
496
+ */
497
+ views: BubbleMenuViewConfig[];
498
+ /**
499
+ * Optional width for the bubble menu
500
+ */
501
+ width?: string;
502
+ /**
503
+ * Optional max width for the bubble menu
504
+ */
505
+ maxWidth?: string;
506
+ }
507
+
508
+ declare class TiptapBubbleMenuDirective implements OnInit, OnDestroy {
509
+ private elRef;
510
+ props: BubbleMenuProps;
511
+ editor: Editor;
512
+ mountTo?: BubbleMenuPluginProps['getReferencedVirtualElement'];
513
+ shouldShow?: BubbleMenuPluginProps['shouldShow'];
514
+ ngOnInit(): void;
515
+ ngOnDestroy(): void;
516
+ preventDefault(event: MouseEvent): void;
517
+ private getFloatingUiOptions;
518
+ static ɵfac: i0.ɵɵFactoryDeclaration<TiptapBubbleMenuDirective, never>;
519
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TiptapBubbleMenuDirective, "tiptap-bubble-menu[editor], [tiptapBubbleMenu][editor]", never, { "props": { "alias": "props"; "required": false; }; "editor": { "alias": "editor"; "required": false; }; "mountTo": { "alias": "mountTo"; "required": false; }; "shouldShow": { "alias": "shouldShow"; "required": false; }; }, {}, never, never, true, never>;
520
+ }
521
+
522
+ declare function shouldShowFnFactory(params: {
523
+ editor: Editor;
524
+ target: BubbleTarget;
525
+ forceOpen: () => boolean;
526
+ }): () => boolean;
527
+ declare function selectionChangeHandler(params: {
528
+ editor: Editor;
529
+ target: BubbleTarget;
530
+ onActive: (attrs: Record<string, unknown>) => void;
531
+ onInactive: () => void;
532
+ listenOnUpdate?: boolean;
533
+ }): () => void;
534
+
535
+ type OutsideHandler = (e: Event) => void;
536
+ declare class EventManager {
537
+ private document;
538
+ private keyToEscapeListener;
539
+ private keyToOutsideListener;
540
+ isAttached(key: string): boolean;
541
+ attach(key: string, hostElement: HTMLElement, cb: (key: string) => void, anchorElement?: HTMLElement): void;
542
+ detach(key: string): void;
543
+ static ɵfac: i0.ɵɵFactoryDeclaration<EventManager, never>;
544
+ static ɵprov: i0.ɵɵInjectableDeclaration<EventManager>;
545
+ }
546
+
547
+ /**
548
+ * Service to manage focus trapping within an element
549
+ * Traps keyboard focus inside a container element for accessibility
550
+ */
551
+ declare class FocusTrapService {
552
+ private document;
553
+ private activeTraps;
554
+ /**
555
+ * Attach focus trap to an element
556
+ * @param element The container element to trap focus within
557
+ * @param autoFocus Whether to automatically focus the first focusable element
558
+ */
559
+ attach(element: HTMLElement, autoFocus?: boolean): void;
560
+ /**
561
+ * Detach focus trap from an element
562
+ * @param element The element to remove focus trap from
563
+ */
564
+ detach(element: HTMLElement): void;
565
+ /**
566
+ * Detach all active focus traps
567
+ */
568
+ detachAll(): void;
569
+ /**
570
+ * Re-attach focus trap to an element (useful when content changes)
571
+ * @param element The element to re-attach focus trap to
572
+ * @param autoFocus Whether to automatically focus the first focusable element
573
+ */
574
+ reattach(element: HTMLElement, autoFocus?: boolean): void;
575
+ static ɵfac: i0.ɵɵFactoryDeclaration<FocusTrapService, never>;
576
+ static ɵprov: i0.ɵɵInjectableDeclaration<FocusTrapService>;
577
+ }
578
+
579
+ declare class AngularRenderer<C, P> {
580
+ private applicationRef;
581
+ private componentRef;
582
+ constructor(ViewComponent: Type<C>, injector: Injector, props: Partial<P>);
583
+ get instance(): C;
584
+ get elementRef(): ElementRef;
585
+ get dom(): HTMLElement;
586
+ updateProps<T extends P>(props: Partial<T>): void;
587
+ updateAttributes(attributes: Record<string, string>): void;
588
+ detectChanges(): void;
589
+ destroy(): void;
590
+ }
591
+
592
+ declare class TiptapDraggableDirective {
593
+ draggable: boolean;
594
+ handle: string;
595
+ static ɵfac: i0.ɵɵFactoryDeclaration<TiptapDraggableDirective, never>;
596
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TiptapDraggableDirective, "[tiptapDraggable]", never, {}, {}, never, never, true, never>;
597
+ }
598
+
599
+ declare class TiptapEditorDirective implements OnInit, AfterViewInit, ControlValueAccessor {
600
+ protected elRef: ElementRef<HTMLElement>;
601
+ protected renderer: Renderer2;
602
+ protected changeDetectorRef: ChangeDetectorRef;
603
+ private _editor?;
604
+ private initialEditableState?;
605
+ set editor(editor: Editor);
606
+ get editor(): Editor;
607
+ outputFormat: 'json' | 'html';
608
+ protected onChange: (value: Content) => void;
609
+ protected onTouched: () => void;
610
+ writeValue(value: Content): void;
611
+ registerOnChange(fn: () => void): void;
612
+ registerOnTouched(fn: () => void): void;
613
+ setDisabledState(isDisabled: boolean): void;
614
+ protected handleChange: ({ editor, transaction }: EditorEvents["transaction"]) => void;
615
+ ngOnInit(): void;
616
+ ngAfterViewInit(): void;
617
+ static ɵfac: i0.ɵɵFactoryDeclaration<TiptapEditorDirective, never>;
618
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TiptapEditorDirective, "tiptap[editor], [tiptap][editor], tiptap-editor[editor], [tiptapEditor][editor]", never, { "editor": { "alias": "editor"; "required": false; }; "outputFormat": { "alias": "outputFormat"; "required": false; }; }, {}, never, never, true, never>;
619
+ }
620
+
621
+ declare class TiptapFloatingMenuDirective implements OnInit, OnDestroy {
622
+ private elRef;
623
+ constructor(elRef: ElementRef<HTMLElement>);
624
+ pluginKey: FloatingMenuPluginProps['pluginKey'];
625
+ editor: Editor;
626
+ options: FloatingMenuPluginProps['options'];
627
+ shouldShow?: FloatingMenuPluginProps['shouldShow'];
628
+ ngOnInit(): void;
629
+ ngOnDestroy(): void;
630
+ static ɵfac: i0.ɵɵFactoryDeclaration<TiptapFloatingMenuDirective, never>;
631
+ static ɵdir: i0.ɵɵDirectiveDeclaration<TiptapFloatingMenuDirective, "tiptap-floating-menu[editor], [tiptapFloatingMenu][editor]", never, { "pluginKey": { "alias": "pluginKey"; "required": false; }; "editor": { "alias": "editor"; "required": false; }; "options": { "alias": "options"; "required": false; }; "shouldShow": { "alias": "shouldShow"; "required": false; }; }, {}, never, never, true, never>;
632
+ }
633
+
634
+ /**
635
+ * Directive for positioning a popover/dropdown relative to a trigger element using floating-ui
636
+ * Handles positioning, visibility, and cleanup automatically
637
+ *
638
+ * Usage:
639
+ * <button #trigger>Open</button>
640
+ * <div [popover]="trigger" [isOpen]="isOpen">
641
+ * Content
642
+ * </div>
643
+ */
644
+ declare class PopoverDirective implements OnChanges, AfterViewInit, OnDestroy {
645
+ private elRef;
646
+ private cdr;
647
+ /**
648
+ * The trigger element reference (ElementRef or HTMLElement)
649
+ */
650
+ popover: ElementRef<HTMLElement> | HTMLElement;
651
+ /**
652
+ * Whether the popover is open
653
+ */
654
+ isOpen: boolean;
655
+ /**
656
+ * Placement of the popover relative to trigger
657
+ */
658
+ placement: Placement;
659
+ /**
660
+ * Offset from trigger
661
+ */
662
+ offset: number;
663
+ /**
664
+ * Padding for flip/shift middleware
665
+ */
666
+ padding: number;
667
+ private cleanupAutoUpdate?;
668
+ isPositioned: boolean;
669
+ private viewInitialized;
670
+ private retryCount;
671
+ private readonly maxRetries;
672
+ ngAfterViewInit(): void;
673
+ ngOnChanges(changes: SimpleChanges): void;
674
+ ngOnDestroy(): void;
675
+ private updateVisibility;
676
+ private setupFloating;
677
+ private _setupFloatingInternal;
678
+ private cleanup;
679
+ static ɵfac: i0.ɵɵFactoryDeclaration<PopoverDirective, never>;
680
+ static ɵdir: i0.ɵɵDirectiveDeclaration<PopoverDirective, "[popover]", never, { "popover": { "alias": "popover"; "required": true; }; "isOpen": { "alias": "isOpen"; "required": true; }; "placement": { "alias": "placement"; "required": false; }; "offset": { "alias": "offset"; "required": false; }; "padding": { "alias": "padding"; "required": false; }; }, {}, never, never, true, never>;
681
+ }
682
+
683
+ declare const DocumentEngineKit: Extension<DocumentEngineConfig, any>;
684
+
685
+ /**
686
+ * Custom button directive matching React button component styles
687
+ * Supports variants: default, destructive, outline, secondary, ghost, link
688
+ * Supports sizes: default, sm, lg, icon, icon-sm, icon-lg
689
+ *
690
+ * Usage:
691
+ * - <button documentEngineButton>Text</button> - secondary variant, default size
692
+ * - <button documentEngineButton="filled">Text</button> - default variant (primary)
693
+ * - <button documentEngineButton variant="outline">Text</button> - outline variant
694
+ * - <button documentEngineButton variant="icon" size="icon-sm">Icon</button> - icon button
695
+ */
696
+ declare class ButtonDirective {
697
+ variant: 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link';
698
+ size: 'default' | 'sm' | 'lg' | 'icon' | 'icon-sm' | 'icon-lg';
699
+ get buttonClasses(): string;
700
+ static ɵfac: i0.ɵɵFactoryDeclaration<ButtonDirective, never>;
701
+ static ɵdir: i0.ɵɵDirectiveDeclaration<ButtonDirective, "button[documentEngineButton]", never, { "variant": { "alias": "variant"; "required": false; }; "size": { "alias": "size"; "required": false; }; }, {}, never, never, true, never>;
702
+ }
703
+
704
+ declare class IconComponent implements OnChanges {
705
+ name: string;
706
+ private cdr;
707
+ private elementRef;
708
+ private iconRegistry;
709
+ ngOnChanges(changes: SimpleChanges): void;
710
+ static ɵfac: i0.ɵɵFactoryDeclaration<IconComponent, never>;
711
+ static ɵcmp: i0.ɵɵComponentDeclaration<IconComponent, "document-engine-icon", never, { "name": { "alias": "name"; "required": false; }; }, {}, never, never, true, never>;
712
+ }
713
+
714
+ /**
715
+ * Icon registry service for managing SVG icons
716
+ * Similar to Angular Material's MatIconRegistry
717
+ */
718
+ declare class IconRegistryService {
719
+ private sanitizer;
720
+ private icons;
721
+ constructor();
722
+ /**
723
+ * Register a new icon with its SVG content
724
+ */
725
+ registerIcon(name: string, svgContent: string): void;
726
+ /**
727
+ * Get icon SVG content by name
728
+ * Returns SafeHtml for use in templates with [innerHTML]
729
+ */
730
+ getIcon(name: string): SafeHtml;
731
+ /**
732
+ * Get raw icon SVG string by name
733
+ * Returns string for direct DOM manipulation
734
+ */
735
+ getIconString(name: string): string;
736
+ /**
737
+ * Register default icons used in the application
738
+ */
739
+ private registerDefaultIcons;
740
+ static ɵfac: i0.ɵɵFactoryDeclaration<IconRegistryService, never>;
741
+ static ɵprov: i0.ɵɵInjectableDeclaration<IconRegistryService>;
742
+ }
743
+
744
+ declare const DEFAULT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\" ry=\"2\"></rect></svg>";
745
+ declare const CHECK = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" width=\"100%\" height=\"100%\"><path d=\"M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41L9 16.17z\"/></svg>";
746
+ declare const UNDO = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M280-200v-80h284q63 0 109.5-40T720-420q0-60-46.5-100T564-560H312l104 104-56 56-200-200 200-200 56 56-104 104h252q97 0 166.5 63T800-420q0 94-69.5 157T564-200H280Z\"/></svg>";
747
+ declare const REDO = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M396-200q-97 0-166.5-63T160-420q0-94 69.5-157T396-640h252L544-744l56-56 200 200-200 200-56-56 104-104H396q-63 0-109.5 40T240-420q0 60 46.5 100T396-280h284v80H396Z\"/></svg>";
748
+ declare const FORMAT_SIZE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M560-160v-520H360v-120h520v120H680v520H560Zm-360 0v-320H80v-120h360v120H320v320H200Z\"/></svg>";
749
+ declare const ARROW_DROP_DOWN = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M480-360 280-560h400L480-360Z\"/></svg>";
750
+ declare const FORMAT_LINE_SPACING = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M240-160 80-320l56-56 64 62v-332l-64 62-56-56 160-160 160 160-56 56-64-62v332l64-62 56 56-160 160Zm240-40v-80h400v80H480Zm0-240v-80h400v80H480Zm0-240v-80h400v80H480Z\"/></svg>";
751
+ declare const MATCH_CASE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"m131-252 165-440h79l165 440h-76l-39-112H247l-40 112h-76Zm139-176h131l-64-182h-4l-63 182Zm395 186q-51 0-81-27.5T554-342q0-44 34.5-72.5T677-443q23 0 45 4t38 11v-12q0-29-20.5-47T685-505q-23 0-42 9.5T610-468l-47-35q24-29 54.5-43t68.5-14q69 0 103 32.5t34 97.5v178h-63v-37h-4q-14 23-38 35t-53 12Zm12-54q35 0 59.5-24t24.5-56q-14-8-33.5-12.5T689-393q-32 0-50 14t-18 37q0 20 16 33t40 13Z\"/></svg>";
752
+ declare const FORMAT_CLEAR = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\" fill=\"currentColor\"><path d=\"m528-546-93-93-121-121h486v120H568l-40 94ZM792-56 460-388l-80 188H249l119-280L56-792l56-56 736 736-56 56Z\"/></svg>";
753
+ declare const FORMAT_COLOR_TEXT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M80 0v-160h800V0H80Zm140-280 210-560h100l210 560h-96l-50-144H368l-52 144h-96Zm176-224h168l-82-232h-4l-82 232Z\"/></svg>";
754
+ declare const FORMAT_COLOR_FILL = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"m247-904 57-56 343 343q23 23 23 57t-23 57L457-313q-23 23-57 23t-57-23L153-503q-23-23-23-57t23-57l190-191-96-96Zm153 153L209-560h382L400-751Zm360 471q-33 0-56.5-23.5T680-360q0-21 12.5-45t27.5-45q9-12 19-25t21-25q11 12 21 25t19 25q15 21 27.5 45t12.5 45q0 33-23.5 56.5T760-280ZM80 0v-160h800V0H80Z\"/></svg>";
755
+ declare const FORMAT_BOLD = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M272-200v-560h221q65 0 120 40t55 111q0 51-23 78.5T602-491q25 11 55.5 41t30.5 90q0 89-65 124.5T501-200H272Zm121-112h104q48 0 58.5-24.5T566-372q0-11-10.5-35.5T494-432H393v120Zm0-228h93q33 0 48-17t15-38q0-24-17-39t-44-15h-95v109Z\"/></svg>";
756
+ declare const FORMAT_ITALIC = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M200-200v-100h160l120-360H320v-100h400v100H580L460-300h140v100H200Z\"/></svg>";
757
+ declare const FORMAT_UNDERLINE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M200-120v-80h560v80H200Zm280-160q-101 0-157-63t-56-167v-330h103v336q0 56 28 91t82 35q54 0 82-35t28-91v-336h103v330q0 104-56 167t-157 63Z\"/></svg>";
758
+ declare const FORMAT_STRIKETHROUGH = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M80-400v-80h800v80H80Zm340-160v-120H200v-120h560v120H540v120H420Zm0 400v-160h120v160H420Z\"/></svg>";
759
+ declare const SUBSCRIPT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M760-160v-80q0-17 11.5-28.5T800-280h80v-40H760v-40h120q17 0 28.5 11.5T920-320v40q0 17-11.5 28.5T880-240h-80v40h120v40H760Zm-525-80 185-291-172-269h106l124 200h4l123-200h107L539-531l186 291H618L482-457h-4L342-240H235Z\"/></svg>";
760
+ declare const SUPERSCRIPT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M760-600v-80q0-17 11.5-28.5T800-720h80v-40H760v-40h120q17 0 28.5 11.5T920-760v40q0 17-11.5 28.5T880-680h-80v40h120v40H760ZM235-160l185-291-172-269h106l124 200h4l123-200h107L539-451l186 291H618L482-377h-4L342-160H235Z\"/></svg>";
761
+ declare const CODE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M320-240 80-480l240-240 57 57-184 184 183 183-56 56Zm320 0-57-57 184-184-183-183 56-56 240 240-240 240Z\"/></svg>";
762
+ declare const FORMAT_ALIGN_LEFT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-120v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Zm0-160v-80h480v80H120Zm0-160v-80h720v80H120Z\"/></svg>";
763
+ declare const FORMAT_ALIGN_CENTER = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-120v-80h720v80H120Zm160-160v-80h400v80H280ZM120-440v-80h720v80H120Zm160-160v-80h400v80H280ZM120-760v-80h720v80H120Z\"/></svg>";
764
+ declare const FORMAT_ALIGN_RIGHT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-760v-80h720v80H120Zm240 160v-80h480v80H360ZM120-440v-80h720v80H120Zm240 160v-80h480v80H360ZM120-120v-80h720v80H120Z\"/></svg>";
765
+ declare const FORMAT_ALIGN_JUSTIFY = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-120v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Zm0-160v-80h720v80H120Z\"/></svg>";
766
+ declare const FORMAT_INDENT_DECREASE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm160 440L120-480l160-160v320Z\"/></svg>";
767
+ declare const FORMAT_INDENT_INCREASE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-120v-80h720v80H120Zm320-160v-80h400v80H440Zm0-160v-80h400v80H440Zm0-160v-80h400v80H440ZM120-760v-80h720v80H120Zm0 440v-320l160 160-160 160Z\"/></svg>";
768
+ declare const FORMAT_LIST_BULLETED = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M360-200v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360ZM200-160q-33 0-56.5-23.5T120-240q0-33 23.5-56.5T200-320q33 0 56.5 23.5T280-240q0 33-23.5 56.5T200-160Zm0-240q-33 0-56.5-23.5T120-480q0-33 23.5-56.5T200-560q33 0 56.5 23.5T280-480q0 33-23.5 56.5T200-400Zm0-240q-33 0-56.5-23.5T120-720q0-33 23.5-56.5T200-800q33 0 56.5 23.5T280-720q0 33-23.5 56.5T200-640Z\"/></svg>";
769
+ declare const FORMAT_LIST_NUMBERED = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-80v-60h100v-30h-60v-60h60v-30H120v-60h120q17 0 28.5 11.5T280-280v40q0 17-11.5 28.5T240-200q17 0 28.5 11.5T280-160v40q0 17-11.5 28.5T240-80H120Zm0-280v-110q0-17 11.5-28.5T160-510h60v-30H120v-60h120q17 0 28.5 11.5T280-560v70q0 17-11.5 28.5T240-450h-60v30h100v60H120Zm60-280v-180h-60v-60h120v240h-60Zm180 440v-80h480v80H360Zm0-240v-80h480v80H360Zm0-240v-80h480v80H360Z\"/></svg>";
770
+ declare const FORMAT_QUOTE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"m228-240 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T458-480L320-240h-92Zm360 0 92-160q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 23-5.5 42.5T818-480L680-240h-92ZM320-500q25 0 42.5-17.5T380-560q0-25-17.5-42.5T320-620q-25 0-42.5 17.5T260-560q0 25 17.5 42.5T320-500Zm360 0q25 0 42.5-17.5T740-560q0-25-17.5-42.5T680-620q-25 0-42.5 17.5T620-560q0 25 17.5 42.5T680-500Zm0-60Zm-360 0Z\"/></svg>";
771
+ declare const TABLE_ROWS = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M760-200v-120H200v120h560Zm0-200v-160H200v160h560Zm0-240v-120H200v120h560ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Z\"/></svg>";
772
+ declare const LINK = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M440-280H280q-83 0-141.5-58.5T80-480q0-83 58.5-141.5T280-680h160v80H280q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h320v80H320Zm200 160v-80h160q50 0 85-35t35-85q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480q0 83-58.5 141.5T680-280H520Z\"/></svg>";
773
+ declare const LINK_OFF = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"m770-302-60-62q40-11 65-42.5t25-73.5q0-50-35-85t-85-35H520v-80h160q83 0 141.5 58.5T880-480q0 57-29.5 105T770-302ZM634-440l-80-80h86v80h-6ZM792-56 56-792l56-56 736 736-56 56ZM440-280H280q-83 0-141.5-58.5T80-480q0-69 42-123t108-71l74 74h-24q-50 0-85 35t-35 85q0 50 35 85t85 35h160v80ZM320-440v-80h65l79 80H320Z\"/></svg>";
774
+ declare const SPECIAL_CHARACTER = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-120v-120h200q-84-45-132-125t-48-175q0-142 99-241t241-99q142 0 241 99t99 241q0 95-48 175T640-240h200v120H520v-204q78-14 129-75t51-141q0-92-64-156t-156-64q-92 0-156 64t-64 156q0 80 51 141t129 75v204H120Z\"/></svg>";
775
+ declare const CLEAR_ALL = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M120-280v-80h560v80H120Zm80-160v-80h560v80H200Zm80-160v-80h560v80H280Z\"/></svg>";
776
+ declare const INSERT_PAGE_BREAK = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M240-80q-33 0-56.5-23.5T160-160v-120h80v120h480v-120h80v120q0 33-23.5 56.5T720-80H240Zm-80-440v-280q0-33 23.5-56.5T240-880h320l240 240v120h-80v-80H520v-200H240v280h-80Zm200 160v-80h240v80H360Zm320 0v-80h240v80H680Zm-640 0v-80h240v80H40Zm440-160Zm0 240Z\"/></svg>";
777
+ declare const MARKDOWN = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"m640-360 120-120-42-43-48 48v-125h-60v125l-48-48-42 43 120 120ZM160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm0-80h640v-480H160v480Zm0 0v-480 480Zm60-120h60v-180h40v120h60v-120h40v180h60v-200q0-17-11.5-28.5T440-600H260q-17 0-28.5 11.5T220-560v200Z\"/></svg>";
778
+ declare const DYNAMIC_FORM = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M160-520q-33 0-56.5-23.5T80-600v-120q0-33 23.5-56.5T160-800h360v280H160Zm0-80h280v-120H160v120Zm0 440q-33 0-56.5-23.5T80-240v-120q0-33 23.5-56.5T160-440h440v280H160Zm0-80h360v-120H160v120Zm520 80v-360h-80v-280h280l-80 200h80L680-160ZM190-270h60v-60h-60v60Zm0-360h60v-60h-60v60Zm-30 30v-120 120Zm0 360v-120 120Z\"/></svg>";
779
+ declare const PHOTO = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm0-80h560v-560H200v560Zm40-80h480L570-480 450-320l-90-120-120 160Zm-40 80v-560 560Z\"/></svg>";
780
+ declare const PRINT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M640-640v-120H320v120h-80v-200h480v200h-80Zm-480 80h640-640Zm560 100q17 0 28.5-11.5T760-500q0-17-11.5-28.5T720-540q-17 0-28.5 11.5T680-500q0 17 11.5 28.5T720-460Zm-80 260v-160H320v160h320Zm80 80H240v-160H80v-240q0-51 35-85.5t85-34.5h560q51 0 85.5 34.5T880-520v240H720v160Zm80-240v-160q0-17-11.5-28.5T760-560H200q-17 0-28.5 11.5T160-520v160h80v-80h480v80h80Z\"/></svg>";
781
+ declare const ARCHIVE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"m480-240 160-160-56-56-64 64v-168h-80v168l-64-64-56 56 160 160ZM200-640v440h560v-440H200Zm0 520q-33 0-56.5-23.5T120-200v-499q0-14 4.5-27t13.5-24l50-61q11-14 27.5-21.5T250-840h460q18 0 34.5 7.5T772-811l50 61q9 11 13.5 24t4.5 27v499q0 33-23.5 56.5T760-120H200Zm16-600h528l-34-40H250l-34 40Zm264 300Z\"/></svg>";
782
+ declare const EDIT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M200-200h57l391-391-57-57-391 391v57Zm-80 80v-170l528-527q12-11 26.5-17t30.5-6q16 0 31 6t26 18l55 56q12 11 17.5 26t5.5 30q0 16-5.5 30.5T817-647L290-120H120Zm640-584-56-56 56 56Zm-141 85-28-29 57 57-29-28Z\"/></svg>";
783
+ declare const SETTINGS = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z\"/></svg>";
784
+ declare const SEARCH = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M784-120 532-372q-30 24-69 38t-83 14q-109 0-184.5-75.5T120-580q0-109 75.5-184.5T380-840q109 0 184.5 75.5T640-580q0 44-14 83t-38 69l252 252-56 56ZM380-400q75 0 127.5-52.5T560-580q0-75-52.5-127.5T380-760q-75 0-127.5 52.5T200-580q0 75 52.5 127.5T380-400Z\"/></svg>";
785
+ declare const SEARCH_OFF = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M280-80q-83 0-141.5-58.5T80-280q0-83 58.5-141.5T280-480q83 0 141.5 58.5T480-280q0 83-58.5 141.5T280-80Zm544-40L568-376q-12-13-25.5-26.5T516-428q38-24 61-64t23-88q0-75-52.5-127.5T420-760q-75 0-127.5 52.5T240-580q0 6 .5 11.5T242-557q-18 2-39.5 8T164-535q-2-11-3-22t-1-23q0-109 75.5-184.5T420-840q109 0 184.5 75.5T680-580q0 43-13.5 81.5T629-428l251 252-56 56Zm-615-61 71-71 70 71 29-28-71-71 71-71-28-28-71 71-71-71-28 28 71 71-71 71 28 28Z\"/></svg>";
786
+ declare const DESCRIPTION = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M320-240h320v-80H320v80Zm0-160h320v-80H320v80ZM240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520v-200H240v640h480v-440H520ZM240-800v200-200 640-640Z\"/></svg>";
787
+ declare const CLOSE = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\"/></svg>";
788
+ declare const VERTICAL_ALIGN_TOP = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M160-760v-80h640v80H160Zm280 640v-408L336-424l-56-56 200-200 200 200-56 56-104-104v408h-80Z\"/></svg>";
789
+ declare const VERTICAL_ALIGN_CENTER = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M440-80v-168l-64 64-56-56 160-160 160 160-56 56-64-64v168h-80ZM160-440v-80h640v80H160Zm320-120L320-720l56-56 64 64v-168h80v168l64-64 56 56-160 160Z\"/></svg>";
790
+ declare const VERTICAL_ALIGN_BOTTOM = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\"><path d=\"M160-120v-80h640v80H160Zm320-160L280-480l56-56 104 104v-408h80v408l104-104 56 56-200 200Z\"/></svg>";
791
+ declare const RESTRICT_EDIT = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <g transform=\"translate(10 10) scale(0.8) translate(-10 -10)\">\n <path d=\"M6.25 16a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5zm0-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 1 1 0-1.5zm3-5a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1 0-1.5zm6-5a.75.75 0 1 1 0 1.5H.75a.75.75 0 0 1 0-1.5zm.25 5.5a3.5 3.5 0 0 1 3.143 1.959.75.75 0 0 1-1.36.636A2 2 0 0 0 13.5 10v2H19a1 1 0 0 1 1 1v5a1 1 0 0 1-1 1h-7a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1v-2l.005-.192A3.5 3.5 0 0 1 15.5 6.5m0 7.5a.5.5 0 0 0-.492.41L15 14.5v2a.5.5 0 0 0 .992.09L16 16.5v-2a.5.5 0 0 0-.5-.5\">\n </path>\n </g>\n</svg>\n";
792
+ declare const TABLE_CELL_PROPERTY = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"m11.105 18-.17 1H2.5A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1h15A1.5 1.5 0 0 1 19 2.5v9.975l-.85-.124-.15-.302V8h-5v4h.021l-.172.351-1.916.28-.151.027c-.287.063-.54.182-.755.341L8 13v5zM2 12h5V8H2zm10-4H8v4h4zM2 2v5h5V2zm0 16h5v-5H2zM13 7h5V2h-5zM8 2v5h4V2z\" opacity=\".6\"></path>\n <path d=\"m15.5 11.5 1.323 2.68 2.957.43-2.14 2.085.505 2.946L15.5 18.25l-2.645 1.39.505-2.945-2.14-2.086 2.957-.43zM13 6a1 1 0 0 1 1 1v3.172a2 2 0 0 0-.293.443l-.858 1.736-1.916.28-.151.027A1.98 1.98 0 0 0 9.315 14H7a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1zm-1 2H8v4h4z\"></path>\n</svg>\n";
793
+ declare const TABLE_COLUMN = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1M2 2v16h16V2z\" opacity=\".6\"></path>\n <path d=\"M18 7v1H2V7zm0 5v1H2v-1z\" opacity=\".6\"></path>\n <path d=\"M14 1v18a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V1a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1m-2 1H8v4h4zm0 6H8v4h4zm0 6H8v4h4z\"></path>\n</svg>\n";
794
+ declare const TABLE_MERGE_CELL = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1M2 2v16h16V2z\" opacity=\".6\"></path>\n <path d=\"M7 2h1v16H7zm5 0h1v7h-1zm6 5v1H2V7zM8 12v1H2v-1z\" opacity=\".6\"></path>\n <path d=\"M7 7h12a1 1 0 0 1 1 1v11a1 1 0 0 1-1 1H7a1 1 0 0 1-1-1V8a1 1 0 0 1 1-1m1 2v9h10V9z\"></path>\n</svg>\n";
795
+ declare const TABLE_PROPERTY = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M8 2v5h4V2h1v5h5v1h-5v4h.021l-.172.351-1.916.28-.151.027c-.287.063-.54.182-.755.341L8 13v5H7v-5H2v-1h5V8H2V7h5V2zm4 6H8v4h4z\" opacity=\".6\"></path>\n <path d=\"m15.5 11.5 1.323 2.68 2.957.43-2.14 2.085.505 2.946L15.5 18.25l-2.645 1.39.505-2.945-2.14-2.086 2.957-.43zM17 1a2 2 0 0 1 2 2v9.475l-.85-.124-.857-1.736a2 2 0 0 0-.292-.44L17 3H3v14h7.808l.402.392L10.935 19H3a2 2 0 0 1-2-2V3a2 2 0 0 1 2-2z\"></path>\n</svg>\n";
796
+ declare const TABLE_ROW = "<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" aria-hidden=\"true\">\n <path d=\"M2.5 1h15A1.5 1.5 0 0 1 19 2.5v15a1.5 1.5 0 0 1-1.5 1.5h-15A1.5 1.5 0 0 1 1 17.5v-15A1.5 1.5 0 0 1 2.5 1M2 2v16h16V2z\" opacity=\".6\"></path>\n <path d=\"M7 2h1v16H7zm5 0h1v16h-1z\" opacity=\".6\"></path>\n <path d=\"M1 6h18a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1H1a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1m1 2v4h4V8zm6 0v4h4V8zm6 0v4h4V8z\"></path>\n</svg>\n";
797
+
798
+ declare class ColorPickerComponent {
799
+ colorPalette: Color[];
800
+ usedColors: Color[];
801
+ activeColor: Color | null;
802
+ colorSelected: EventEmitter<Color>;
803
+ colorRemoved: EventEmitter<void>;
804
+ customColor: string | null;
805
+ trackByColorValue: (_: number, c: Color) => string;
806
+ isActive(color: Color): boolean;
807
+ selectCustomColor(): void;
808
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColorPickerComponent, never>;
809
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColorPickerComponent, "document-engine-color-picker", never, { "colorPalette": { "alias": "colorPalette"; "required": false; }; "usedColors": { "alias": "usedColors"; "required": false; }; "activeColor": { "alias": "activeColor"; "required": false; }; }, { "colorSelected": "colorSelected"; "colorRemoved": "colorRemoved"; }, never, never, true, never>;
810
+ }
811
+
812
+ /**
813
+ * Directive for select label content
814
+ * Must be used within document-engine-select component when labelMode="static"
815
+ *
816
+ * Usage:
817
+ * <document-engine-select labelMode="static">
818
+ * <div documentEngineSelectLabel>
819
+ * <document-engine-icon name="format_size"></document-engine-icon>
820
+ * <span>Font Size</span>
821
+ * </div>
822
+ * <button documentEngineSelectOption value="14px">14px</button>
823
+ * </document-engine-select>
824
+ */
825
+ declare class SelectLabelDirective {
826
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectLabelDirective, never>;
827
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SelectLabelDirective, "[documentEngineSelectLabel]", never, {}, {}, never, never, true, never>;
828
+ }
829
+
830
+ interface ISelectParent {
831
+ value: string | null;
832
+ selectOption(option: unknown): void;
833
+ }
834
+
835
+ /**
836
+ * Directive for select options
837
+ * Must be used within document-engine-select component
838
+ *
839
+ * Usage:
840
+ * <button documentEngineSelectOption value="option1">Option 1</button>
841
+ */
842
+ declare class SelectOptionDirective {
843
+ readonly elementRef: ElementRef<any>;
844
+ readonly select: ISelectParent | null;
845
+ value: string | null;
846
+ label?: string;
847
+ disabled: boolean;
848
+ onClick(event: Event): void;
849
+ getLabel(): string;
850
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectOptionDirective, never>;
851
+ static ɵdir: i0.ɵɵDirectiveDeclaration<SelectOptionDirective, "[documentEngineSelectOption]", never, { "value": { "alias": "value"; "required": false; }; "label": { "alias": "label"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, never, true, never>;
852
+ }
853
+
854
+ /**
855
+ * Select component with floating dropdown using @floating-ui/dom
856
+ *
857
+ * Usage:
858
+ * <document-engine-select [(value)]="selectedValue" placeholder="Select...">
859
+ * <button documentEngineSelectOption value="option1">Option 1</button>
860
+ * <button documentEngineSelectOption value="option2">Option 2</button>
861
+ * </document-engine-select>
862
+ */
863
+ declare class SelectComponent implements AfterContentInit, OnChanges, OnDestroy, ISelectParent {
864
+ private readonly cdr;
865
+ value: string | null;
866
+ disabled: boolean;
867
+ labelMode: 'static' | 'activeOption';
868
+ variant: 'default' | 'outline';
869
+ valueChange: EventEmitter<string | null>;
870
+ triggerRef: ElementRef<HTMLElement>;
871
+ dropdownRef: ElementRef<HTMLElement>;
872
+ labelDirectives: QueryList<SelectLabelDirective>;
873
+ options: QueryList<SelectOptionDirective>;
874
+ isOpen: boolean;
875
+ selectedLabel: string | null;
876
+ private cleanupAutoUpdate?;
877
+ private documentClickListener?;
878
+ private destroy;
879
+ private contentInitialized;
880
+ ngOnChanges(changes: SimpleChanges): void;
881
+ ngAfterContentInit(): void;
882
+ ngOnDestroy(): void;
883
+ toggle(): void;
884
+ open(): void;
885
+ close(): void;
886
+ selectOption(option: SelectOptionDirective): void;
887
+ private setupFloating;
888
+ private cleanup;
889
+ private addDocumentClickListener;
890
+ private removeDocumentClickListener;
891
+ onClick(event: Event): void;
892
+ /**
893
+ * Check if should use static label (directive)
894
+ * Falls back to activeOption if static mode but no label directive provided
895
+ */
896
+ get useStaticLabel(): boolean;
897
+ /**
898
+ * Check if label directive exists
899
+ */
900
+ get hasLabelDirective(): boolean;
901
+ private updateSelectedLabel;
902
+ static ɵfac: i0.ɵɵFactoryDeclaration<SelectComponent, never>;
903
+ static ɵcmp: i0.ɵɵComponentDeclaration<SelectComponent, "document-engine-select", never, { "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "labelMode": { "alias": "labelMode"; "required": false; }; "variant": { "alias": "variant"; "required": false; }; }, { "valueChange": "valueChange"; }, ["labelDirectives", "options"], ["[documentEngineSelectLabel]", "*"], true, never>;
904
+ }
905
+
906
+ interface ToolbarState {
907
+ isReadOnly: boolean;
908
+ canUndo: boolean;
909
+ canRedo: boolean;
910
+ canResetFormat: boolean;
911
+ canToggleBold: boolean;
912
+ canToggleItalic: boolean;
913
+ canToggleUnderline: boolean;
914
+ canToggleStrike: boolean;
915
+ canToggleSubscript: boolean;
916
+ canToggleSuperscript: boolean;
917
+ canToggleCode: boolean;
918
+ canToggleLink: boolean;
919
+ canDecreaseIndent: boolean;
920
+ canIncreaseIndent: boolean;
921
+ canToggleBulletList: boolean;
922
+ canToggleBlockquote: boolean;
923
+ canInsertPageBreak: boolean;
924
+ canToggleEditableRegion: boolean;
925
+ canClearContent: boolean;
926
+ }
927
+ declare const DEFAULT_TOOLBAR_STATE: ToolbarState;
928
+ declare function buildToolbarState(editor: Editor, config?: Partial<DocumentEngineConfig>): ToolbarState;
929
+
930
+ /**
931
+ * Toolbar component for document editor
932
+ * Provides toolbar controls for editor actions
933
+ */
934
+ declare class ToolbarComponent implements OnInit, OnDestroy {
935
+ private readonly cdr;
936
+ private readonly toolbarService;
937
+ editor: Editor;
938
+ capabilities: EditorCapabilities;
939
+ config?: Partial<DocumentEngineConfig>;
940
+ readonly action: i0.EventEmitter<string>;
941
+ activeFontSize: string | null;
942
+ activeLineHeight: string | null;
943
+ activeHeading: number | null;
944
+ activeTextAlign: string | null;
945
+ activeTextAlignIcon: string;
946
+ toolbarState: ToolbarState;
947
+ readonly fontSizeOptions: {
948
+ value: string;
949
+ label: string;
950
+ }[];
951
+ readonly lineHeightOptions: ({
952
+ value: null;
953
+ label: string;
954
+ } | {
955
+ value: string;
956
+ label: string;
957
+ })[];
958
+ readonly textCaseOptions: {
959
+ value: TextCaseType;
960
+ label: string;
961
+ }[];
962
+ readonly headingOptions: ({
963
+ value: null;
964
+ label: string;
965
+ class: string;
966
+ } | {
967
+ value: number;
968
+ label: string;
969
+ class: string;
970
+ })[];
971
+ readonly textAlignOptions: {
972
+ value: string;
973
+ label: string;
974
+ icon: string;
975
+ }[];
976
+ readonly listStyleOptions: {
977
+ value: ListStyleType;
978
+ label: string;
979
+ example: string;
980
+ }[];
981
+ private colorBubbleMenu;
982
+ private linkBubbleWrapper;
983
+ private imageBubbleMenu;
984
+ private specialCharsBubbleMenu;
985
+ private dynamicFieldsBubbleMenu;
986
+ private templateBubbleMenu;
987
+ private tableCreateBubbleMenu;
988
+ readonly colorBubbleConfig: ToolbarBubbleMenuConfig;
989
+ readonly linkBubbleConfig: EditorBubbleMenuConfig;
990
+ readonly tableBubbleConfig: EditorBubbleMenuConfig;
991
+ readonly imageBubbleConfig: ToolbarBubbleMenuConfig;
992
+ readonly specialCharsBubbleConfig: ToolbarBubbleMenuConfig;
993
+ readonly dynamicFieldsBubbleConfig: ToolbarBubbleMenuConfig;
994
+ readonly templateBubbleConfig: ToolbarBubbleMenuConfig;
995
+ readonly tableCreateBubbleConfig: ToolbarBubbleMenuConfig;
996
+ private throttleUpdateToolbarState;
997
+ private updateToolbarState;
998
+ ngOnInit(): void;
999
+ ngOnDestroy(): void;
1000
+ runAndEmit(actionName: string, chain: () => void): void;
1001
+ setFontSize(size: string | null): void;
1002
+ setLineHeight(lineHeight: string | null): void;
1003
+ setHeading(level: string | null): void;
1004
+ setTextAlign(align: string | null): void;
1005
+ setListStyle(listStyleType: ListStyleType): void;
1006
+ openColorBubble(event: MouseEvent, type: 'text' | 'fill'): void;
1007
+ toggleLink(): void;
1008
+ insertImage(event: MouseEvent): void;
1009
+ openSpecialCharsBubble(event: MouseEvent): void;
1010
+ openDynamicFieldsBubble(event: MouseEvent): void;
1011
+ openTemplateBubble(event: MouseEvent): void;
1012
+ openCreateTableBubble(event: MouseEvent): void;
1013
+ trackByValue(index: number, item: {
1014
+ value: unknown;
1015
+ }): unknown;
1016
+ trackByIndex(index: number): number;
1017
+ get customToolbarButtons(): ToolbarButton[];
1018
+ handleCustomIconButton(button: ToolbarButton): void;
1019
+ handleCustomSelectButton(button: ToolbarButton, value: string): void;
1020
+ printValue(): void;
1021
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarComponent, never>;
1022
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarComponent, "document-engine-toolbar", never, { "editor": { "alias": "editor"; "required": false; }; "capabilities": { "alias": "capabilities"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, { "action": "action"; }, never, never, true, never>;
1023
+ }
1024
+
1025
+ /**
1026
+ * Service to handle toolbar action emissions
1027
+ */
1028
+ declare class ToolbarService implements OnDestroy {
1029
+ private readonly actionSubject;
1030
+ readonly action$: rxjs.Observable<{
1031
+ actionName: string;
1032
+ value?: unknown;
1033
+ }>;
1034
+ readonly action: EventEmitter<string>;
1035
+ /**
1036
+ * Emit an action
1037
+ */
1038
+ emit(actionName: string, value?: unknown): void;
1039
+ ngOnDestroy(): void;
1040
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarService, never>;
1041
+ static ɵprov: i0.ɵɵInjectableDeclaration<ToolbarService>;
1042
+ }
1043
+
1044
+ /**
1045
+ * Footer component for document editor
1046
+ * Container for footer components like character count
1047
+ */
1048
+ declare class FooterComponent {
1049
+ editor: Editor;
1050
+ config?: Partial<DocumentEngineConfig>;
1051
+ hasCharacterCount(): boolean;
1052
+ static ɵfac: i0.ɵɵFactoryDeclaration<FooterComponent, never>;
1053
+ static ɵcmp: i0.ɵɵComponentDeclaration<FooterComponent, "document-engine-footer", never, { "editor": { "alias": "editor"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
1054
+ }
1055
+
1056
+ /**
1057
+ * Character Count component for document editor footer
1058
+ * Displays character/word count with optional limit and color coding
1059
+ */
1060
+ declare class CharacterCountComponent implements OnInit, OnDestroy {
1061
+ private readonly cdr;
1062
+ editor: Editor;
1063
+ config?: Partial<DocumentEngineConfig>;
1064
+ mode: 'characters' | 'words';
1065
+ count: number;
1066
+ limit: number | null;
1067
+ private updateCount;
1068
+ ngOnInit(): void;
1069
+ ngOnDestroy(): void;
1070
+ isNearLimit(): boolean;
1071
+ isOverLimit(): boolean;
1072
+ static ɵfac: i0.ɵɵFactoryDeclaration<CharacterCountComponent, never>;
1073
+ static ɵcmp: i0.ɵɵComponentDeclaration<CharacterCountComponent, "document-engine-character-count", never, { "editor": { "alias": "editor"; "required": false; }; "config": { "alias": "config"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; }, {}, never, never, true, never>;
1074
+ }
1075
+
1076
+ /**
1077
+ * Input directive matching shadcn Input component styles
1078
+ * Supports all standard input attributes and types
1079
+ *
1080
+ * Usage:
1081
+ * <input documentEngineInput type="text" placeholder="Enter text" />
1082
+ * <input documentEngineInput type="email" class="custom-class" />
1083
+ */
1084
+ declare class InputDirective {
1085
+ class: string;
1086
+ get inputClasses(): string;
1087
+ static ɵfac: i0.ɵɵFactoryDeclaration<InputDirective, never>;
1088
+ static ɵdir: i0.ɵɵDirectiveDeclaration<InputDirective, "input[documentEngineInput]", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
1089
+ }
1090
+
1091
+ /**
1092
+ * Label directive for form fields
1093
+ *
1094
+ * Usage:
1095
+ * <label documentEngineLabel for="input-id">Label text</label>
1096
+ */
1097
+ declare class LabelDirective {
1098
+ class: string;
1099
+ get labelClasses(): string;
1100
+ static ɵfac: i0.ɵɵFactoryDeclaration<LabelDirective, never>;
1101
+ static ɵdir: i0.ɵɵDirectiveDeclaration<LabelDirective, "label[documentEngineLabel]", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, never, true, never>;
1102
+ }
1103
+
1104
+ /**
1105
+ * Error message component for form validation
1106
+ *
1107
+ * Usage:
1108
+ * <document-engine-error-message *ngIf="control.hasError('required')">
1109
+ * This field is required
1110
+ * </document-engine-error-message>
1111
+ */
1112
+ declare class ErrorMessageComponent {
1113
+ class: string;
1114
+ get errorClasses(): string;
1115
+ static ɵfac: i0.ɵɵFactoryDeclaration<ErrorMessageComponent, never>;
1116
+ static ɵcmp: i0.ɵɵComponentDeclaration<ErrorMessageComponent, "document-engine-error-message", never, { "class": { "alias": "class"; "required": false; }; }, {}, never, ["*"], true, never>;
1117
+ }
1118
+
1119
+ /**
1120
+ * Toggle button option directive
1121
+ */
1122
+ declare class ToggleOptionDirective {
1123
+ value: string;
1124
+ disabled: boolean;
1125
+ isActive: boolean;
1126
+ onClick(): void;
1127
+ selected: EventEmitter<string>;
1128
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToggleOptionDirective, never>;
1129
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToggleOptionDirective, "button[documentEngineToggleOption]", never, { "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, ["*"], true, never>;
1130
+ }
1131
+ /**
1132
+ * Toggle button group component
1133
+ * Similar to mat-button-toggle-group
1134
+ *
1135
+ * Usage:
1136
+ * <document-engine-toggle-group [(value)]="alignment">
1137
+ * <button documentEngineToggleOption value="left"><document-engine-icon name="format_align_left"></document-engine-icon></button>
1138
+ * <button documentEngineToggleOption value="center"><document-engine-icon name="format_align_center"></document-engine-icon></button>
1139
+ * </document-engine-toggle-group>
1140
+ */
1141
+ declare class ToggleGroupComponent {
1142
+ value: string | null;
1143
+ disabled: boolean;
1144
+ valueChange: EventEmitter<string | null>;
1145
+ options: QueryList<ToggleOptionDirective>;
1146
+ ngAfterContentInit(): void;
1147
+ ngOnChanges(): void;
1148
+ private updateActiveStates;
1149
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToggleGroupComponent, never>;
1150
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToggleGroupComponent, "document-engine-toggle-group", never, { "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "valueChange": "valueChange"; }, ["options"], ["*"], true, never>;
1151
+ }
1152
+
1153
+ /**
1154
+ * Checkbox component
1155
+ * Works with ngModel and reactive forms
1156
+ *
1157
+ * Usage:
1158
+ * <document-engine-checkbox [(ngModel)]="checked">Label text</document-engine-checkbox>
1159
+ */
1160
+ declare class CheckboxComponent implements ControlValueAccessor {
1161
+ disabled: boolean;
1162
+ checked: boolean;
1163
+ checkedChange: EventEmitter<boolean>;
1164
+ hostClass: boolean;
1165
+ private onChange;
1166
+ private onTouched;
1167
+ onCheckboxChange(event: Event): void;
1168
+ writeValue(value: boolean): void;
1169
+ registerOnChange(fn: (value: boolean) => void): void;
1170
+ registerOnTouched(fn: () => void): void;
1171
+ setDisabledState(isDisabled: boolean): void;
1172
+ static ɵfac: i0.ɵɵFactoryDeclaration<CheckboxComponent, never>;
1173
+ static ɵcmp: i0.ɵɵComponentDeclaration<CheckboxComponent, "document-engine-checkbox", never, { "disabled": { "alias": "disabled"; "required": false; }; "checked": { "alias": "checked"; "required": false; }; }, { "checkedChange": "checkedChange"; }, never, ["*"], true, never>;
1174
+ }
1175
+
1176
+ /**
1177
+ * Dynamic Field interface
1178
+ */
1179
+ interface DynamicFieldItem {
1180
+ id: string;
1181
+ label: string;
1182
+ description?: string;
1183
+ }
1184
+ interface DynamicFieldCategory {
1185
+ key: string;
1186
+ label: string;
1187
+ description?: string;
1188
+ fields: DynamicFieldItem[];
1189
+ }
1190
+
1191
+ type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
1192
+
1193
+ declare const urlValidator: ValidatorFn;
1194
+
1195
+ interface LinkAttrs$2 {
1196
+ href?: string;
1197
+ target?: string;
1198
+ rel?: string;
1199
+ }
1200
+ /**
1201
+ * Main view for link bubble menu
1202
+ * Shows when an existing link is selected
1203
+ * Provides navigation to edit and properties views
1204
+ */
1205
+ declare class LinkMainViewComponent implements BubbleMenuViewContent<LinkAttrs$2> {
1206
+ private cdr;
1207
+ editor?: Editor;
1208
+ currentUrl: string;
1209
+ close?: () => void;
1210
+ navigateTo?: (viewId: string) => void;
1211
+ constructor(cdr: ChangeDetectorRef);
1212
+ onActivate(attrs: LinkAttrs$2): void;
1213
+ editLink(): void;
1214
+ openProperties(): void;
1215
+ removeLink(): void;
1216
+ static ɵfac: i0.ɵɵFactoryDeclaration<LinkMainViewComponent, never>;
1217
+ static ɵcmp: i0.ɵɵComponentDeclaration<LinkMainViewComponent, "document-engine-link-main-view", never, {}, {}, never, never, true, never>;
1218
+ }
1219
+
1220
+ interface LinkAttrs$1 {
1221
+ href?: string;
1222
+ target?: string;
1223
+ rel?: string;
1224
+ }
1225
+ /**
1226
+ * Edit view for link bubble menu
1227
+ * Shows when creating a new link or editing an existing one
1228
+ * Provides URL input, display text input, and quick link shortcuts
1229
+ */
1230
+ declare class LinkEditViewComponent implements BubbleMenuViewContent<LinkAttrs$1> {
1231
+ private fb;
1232
+ private cdr;
1233
+ editor?: Editor;
1234
+ position?: {
1235
+ from: number;
1236
+ to: number;
1237
+ };
1238
+ goBack?: (viewId?: string) => void;
1239
+ close?: () => void;
1240
+ linkForm: _angular_forms.FormGroup<{
1241
+ url: FormControl<string | null>;
1242
+ displayText: FormControl<string | null>;
1243
+ }>;
1244
+ isNewLink: boolean;
1245
+ linkShortcuts: {
1246
+ label: string;
1247
+ url: string;
1248
+ }[];
1249
+ onActivate(attrs: LinkAttrs$1): void;
1250
+ applyShortcut(url: string): void;
1251
+ canApply(): boolean;
1252
+ applyLink(): void;
1253
+ cancel(): void;
1254
+ private normalizeUrl;
1255
+ static ɵfac: i0.ɵɵFactoryDeclaration<LinkEditViewComponent, never>;
1256
+ static ɵcmp: i0.ɵɵComponentDeclaration<LinkEditViewComponent, "document-engine-link-edit-view", never, {}, {}, never, never, true, never>;
1257
+ }
1258
+
1259
+ interface LinkAttrs {
1260
+ href?: string;
1261
+ target?: string;
1262
+ rel?: string;
1263
+ }
1264
+ /**
1265
+ * Properties view for link bubble menu
1266
+ * Shows link properties like target and rel attributes
1267
+ * Allows user to configure SEO and security settings
1268
+ */
1269
+ declare class LinkPropertiesViewComponent implements BubbleMenuViewContent<LinkAttrs> {
1270
+ private cdr;
1271
+ editor?: Editor;
1272
+ goBack?: (viewId?: string) => void;
1273
+ newTabControl: FormControl<boolean | null>;
1274
+ noFollowControl: FormControl<boolean | null>;
1275
+ noOpenerControl: FormControl<boolean | null>;
1276
+ noReferrerControl: FormControl<boolean | null>;
1277
+ private currentHref;
1278
+ constructor(cdr: ChangeDetectorRef);
1279
+ onActivate(attrs: LinkAttrs): void;
1280
+ saveProperties(): void;
1281
+ cancel(): void;
1282
+ static ɵfac: i0.ɵɵFactoryDeclaration<LinkPropertiesViewComponent, never>;
1283
+ static ɵcmp: i0.ɵɵComponentDeclaration<LinkPropertiesViewComponent, "document-engine-link-properties-view", never, {}, {}, never, never, true, never>;
1284
+ }
1285
+
1286
+ /**
1287
+ * Color picker view for bubble menu
1288
+ * Shows color palette for text and background colors
1289
+ */
1290
+ declare class ColorPickerViewComponent implements BubbleMenuViewContent<Record<string, unknown>> {
1291
+ editor?: Editor;
1292
+ colorType: 'text' | 'fill';
1293
+ usedColors: Color[];
1294
+ activeColor: Color | null;
1295
+ close?: () => void;
1296
+ goBack?: (viewId?: string) => void;
1297
+ navigateTo?: (viewId: string) => void;
1298
+ colorPalette: Color[];
1299
+ onActivate(attrs: Record<string, unknown>): void;
1300
+ applyColor(color: Color | null): void;
1301
+ removeColor(): void;
1302
+ private getActiveColor;
1303
+ private collectUsedColors;
1304
+ static ɵfac: i0.ɵɵFactoryDeclaration<ColorPickerViewComponent, never>;
1305
+ static ɵcmp: i0.ɵɵComponentDeclaration<ColorPickerViewComponent, "document-engine-color-picker-view", never, {}, {}, never, never, true, never>;
1306
+ }
1307
+
1308
+ /**
1309
+ * Temporary image insert view for bubble menu
1310
+ * Provides URL input for inserting images via link
1311
+ * This is a temporary solution until full upload flow is implemented
1312
+ */
1313
+ declare class ImageInsertViewComponent implements BubbleMenuViewContent<Record<string, unknown>> {
1314
+ private fb;
1315
+ private cdr;
1316
+ editor?: Editor;
1317
+ close?: () => void;
1318
+ goBack?: (viewId?: string) => void;
1319
+ imageForm: _angular_forms.FormGroup<{
1320
+ url: _angular_forms.FormControl<string | null>;
1321
+ alt: _angular_forms.FormControl<string | null>;
1322
+ }>;
1323
+ onActivate(): void;
1324
+ canInsert(): boolean;
1325
+ insertImage(): void;
1326
+ cancel(): void;
1327
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImageInsertViewComponent, never>;
1328
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImageInsertViewComponent, "document-engine-image-insert-view", never, {}, {}, never, never, true, never>;
1329
+ }
1330
+
1331
+ interface SpecialCharacter {
1332
+ char: string;
1333
+ name: string;
1334
+ code?: string;
1335
+ }
1336
+ declare const CharacterCategory: {
1337
+ readonly ALL: "all";
1338
+ readonly CURRENCY: "currency";
1339
+ readonly MATH: "math";
1340
+ readonly ARROWS: "arrows";
1341
+ readonly SYMBOLS: "symbols";
1342
+ readonly PUNCTUATION: "punctuation";
1343
+ };
1344
+ type CharacterCategory = (typeof CharacterCategory)[keyof typeof CharacterCategory];
1345
+
1346
+ /**
1347
+ * Special characters view for bubble menu
1348
+ * Shows categorized special characters for insertion
1349
+ */
1350
+ declare class SpecialCharactersViewComponent implements BubbleMenuViewContent<Record<string, unknown>>, OnDestroy {
1351
+ private cdr;
1352
+ editor?: Editor;
1353
+ close?: () => void;
1354
+ goBack?: (viewId?: string) => void;
1355
+ navigateTo?: (viewId: string) => void;
1356
+ selectedCategory: (typeof CharacterCategory)[keyof typeof CharacterCategory];
1357
+ charButtons: QueryList<ElementRef<HTMLButtonElement>>;
1358
+ readonly GRID_COLUMNS = 6;
1359
+ private rafId;
1360
+ private pendingKey;
1361
+ get currentCharacters(): SpecialCharacter[];
1362
+ currencyChars: SpecialCharacter[];
1363
+ mathChars: SpecialCharacter[];
1364
+ arrowChars: SpecialCharacter[];
1365
+ symbolChars: SpecialCharacter[];
1366
+ punctuationChars: SpecialCharacter[];
1367
+ onActivate(): void;
1368
+ insertCharacter(char: string): void;
1369
+ onGridKeydown(event: KeyboardEvent): void;
1370
+ private handleNavigation;
1371
+ ngOnDestroy(): void;
1372
+ static ɵfac: i0.ɵɵFactoryDeclaration<SpecialCharactersViewComponent, never>;
1373
+ static ɵcmp: i0.ɵɵComponentDeclaration<SpecialCharactersViewComponent, "document-engine-special-characters-view", never, {}, {}, never, never, true, never>;
1374
+ }
1375
+
1376
+ /**
1377
+ * Dynamic fields view for bubble menu
1378
+ * Shows categorized dynamic fields for insertion into the editor
1379
+ */
1380
+ declare class DynamicFieldsViewComponent implements BubbleMenuViewContent<Record<string, unknown>>, OnInit, OnDestroy {
1381
+ private cdr;
1382
+ editor?: Editor;
1383
+ close?: () => void;
1384
+ goBack?: (viewId?: string) => void;
1385
+ navigateTo?: (viewId: string) => void;
1386
+ searchQuery: string;
1387
+ originalFields: DynamicFieldItem$1[];
1388
+ originalCategories: DynamicFieldCategory$1[];
1389
+ searchControl: FormControl<string | null>;
1390
+ private destroy$;
1391
+ onActivate(attrs: Record<string, unknown>): void;
1392
+ ngOnInit(): void;
1393
+ ngOnDestroy(): void;
1394
+ /**
1395
+ * Getter that filters categories and fields based on search query
1396
+ */
1397
+ get filteredCategories(): DynamicFieldCategory$1[];
1398
+ /**
1399
+ * Insert a dynamic field into the editor
1400
+ */
1401
+ insertDynamicField(field: DynamicFieldItem$1): void;
1402
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicFieldsViewComponent, never>;
1403
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicFieldsViewComponent, "document-engine-dynamic-fields-view", never, {}, {}, never, never, true, never>;
1404
+ }
1405
+
1406
+ /**
1407
+ * Template view for bubble menu
1408
+ * Shows templates for insertion into the editor
1409
+ * Replaces entire editor content with selected template
1410
+ */
1411
+ declare class TemplateViewComponent implements BubbleMenuViewContent<Record<string, unknown>>, OnInit, OnDestroy {
1412
+ private cdr;
1413
+ editor?: Editor;
1414
+ close?: () => void;
1415
+ goBack?: (viewId?: string) => void;
1416
+ navigateTo?: (viewId: string) => void;
1417
+ searchQuery: string;
1418
+ originalTemplates: TemplateItem[];
1419
+ searchControl: FormControl<string | null>;
1420
+ private destroy$;
1421
+ onActivate(attrs: Record<string, unknown>): void;
1422
+ ngOnInit(): void;
1423
+ ngOnDestroy(): void;
1424
+ /**
1425
+ * Getter that filters templates based on search query
1426
+ */
1427
+ get filteredTemplates(): TemplateItem[];
1428
+ /**
1429
+ * Insert a template into the editor, replacing entire content
1430
+ */
1431
+ insertTemplate(template: TemplateItem): void;
1432
+ static ɵfac: i0.ɵɵFactoryDeclaration<TemplateViewComponent, never>;
1433
+ static ɵcmp: i0.ɵɵComponentDeclaration<TemplateViewComponent, "document-engine-template-view", never, {}, {}, never, never, true, never>;
1434
+ }
1435
+
1436
+ /**
1437
+ * Main view for table bubble menu
1438
+ * Shows table manipulation controls (rows, columns, cells)
1439
+ * Provides navigation to cell and table styling views
1440
+ */
1441
+ declare class TableMainViewComponent implements BubbleMenuViewContent {
1442
+ editor?: Editor;
1443
+ navigateTo?: (viewId: string) => void;
1444
+ close?: () => void;
1445
+ colAction: string | null;
1446
+ rowAction: string | null;
1447
+ cellAction: string | null;
1448
+ get canMerge(): boolean;
1449
+ get canSplit(): boolean;
1450
+ handleColAction(action: string | null): void;
1451
+ handleRowAction(action: string | null): void;
1452
+ handleCellAction(action: string | null): void;
1453
+ setSelection(selection: 'column' | 'row'): void;
1454
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableMainViewComponent, never>;
1455
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableMainViewComponent, "document-engine-table-main-view", never, {}, {}, never, never, true, never>;
1456
+ }
1457
+
1458
+ interface TableCreateViewData {
1459
+ rows?: number;
1460
+ cols?: number;
1461
+ header?: boolean;
1462
+ }
1463
+ /**
1464
+ * Table creation view for bubble menu
1465
+ * Allows users to configure table dimensions and header row
1466
+ */
1467
+ declare class TableCreateViewComponent implements BubbleMenuViewContent<TableCreateViewData> {
1468
+ private readonly fb;
1469
+ private readonly cdr;
1470
+ editor?: Editor;
1471
+ close?: () => void;
1472
+ goBack?: (viewId?: string) => void;
1473
+ navigateTo?: (viewId: string) => void;
1474
+ readonly MAX_GRID_ROWS = 100;
1475
+ readonly MAX_GRID_COLS = 10;
1476
+ readonly GRID_ROW = 10;
1477
+ readonly GRID_COL = 10;
1478
+ gridRows: number[];
1479
+ gridCols: number[];
1480
+ hoveredRows: number;
1481
+ hoveredCols: number;
1482
+ frozenRows: number | null;
1483
+ frozenCols: number | null;
1484
+ form: _angular_forms.FormGroup<{
1485
+ rows: _angular_forms.FormControl<number>;
1486
+ cols: _angular_forms.FormControl<number>;
1487
+ header: _angular_forms.FormControl<boolean>;
1488
+ }>;
1489
+ onActivate(attrs: TableCreateViewData): void;
1490
+ isBoxSelected(row: number, col: number): boolean;
1491
+ onBoxHover(row: number, col: number): void;
1492
+ onBoxClick(row: number, col: number): void;
1493
+ onGridMouseEnter(): void;
1494
+ onGridMouseLeave(): void;
1495
+ onInsertFromForm(): void;
1496
+ private clamp;
1497
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableCreateViewComponent, never>;
1498
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableCreateViewComponent, "document-engine-table-create-view", never, {}, {}, never, never, true, never>;
1499
+ }
1500
+
1501
+ /**
1502
+ * Table style view for table bubble menu
1503
+ * Allows styling the entire table (borders, background, dimensions, alignment)
1504
+ */
1505
+ declare class TableStyleViewComponent implements BubbleMenuViewContent {
1506
+ private cdr;
1507
+ borderColorTrigger: ElementRef<HTMLElement>;
1508
+ bgColorTrigger: ElementRef<HTMLElement>;
1509
+ editor?: Editor;
1510
+ goBack?: (viewId?: string) => void;
1511
+ borderStyle: 'solid' | 'double' | 'dashed' | 'dotted' | 'none' | null;
1512
+ borderColor: string | null;
1513
+ borderWidth: string | null;
1514
+ tableBg: string | null;
1515
+ showColorPicker: 'border' | 'bg' | null;
1516
+ colorPalette: Color[];
1517
+ private documentClickListener?;
1518
+ get borderColorObj(): Color | null;
1519
+ get tableBgObj(): Color | null;
1520
+ onActivate(): void;
1521
+ toggleColorPicker(type: 'border' | 'bg'): void;
1522
+ closeColorPicker(): void;
1523
+ private addDocumentClickListener;
1524
+ private removeDocumentClickListener;
1525
+ onBorderColorSelected(color: Color): void;
1526
+ onBorderColorRemoved(): void;
1527
+ onTableBgSelected(color: Color): void;
1528
+ onTableBgRemoved(): void;
1529
+ onBorderWidthChange(): void;
1530
+ onSave(): void;
1531
+ cancel(): void;
1532
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableStyleViewComponent, never>;
1533
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableStyleViewComponent, "document-engine-table-style-view", never, {}, {}, never, never, true, never>;
1534
+ }
1535
+
1536
+ /**
1537
+ * Cell style view for table bubble menu
1538
+ * Allows styling individual table cells (borders, background, alignment)
1539
+ */
1540
+ declare class TableCellStyleViewComponent implements BubbleMenuViewContent {
1541
+ private cdr;
1542
+ borderColorTrigger: ElementRef<HTMLElement>;
1543
+ bgColorTrigger: ElementRef<HTMLElement>;
1544
+ editor?: Editor;
1545
+ goBack?: (viewId?: string) => void;
1546
+ borderStyle: 'solid' | 'dashed' | 'dotted' | 'none' | null;
1547
+ borderColor: string | null;
1548
+ borderWidth: string | null;
1549
+ backgroundColor: string | null;
1550
+ textAlign: 'left' | 'center' | 'right' | 'justify' | null;
1551
+ vAlign: 'top' | 'middle' | 'bottom' | null;
1552
+ showColorPicker: 'border' | 'bg' | null;
1553
+ colorPalette: Color[];
1554
+ private documentClickListener?;
1555
+ get borderColorObj(): Color | null;
1556
+ get backgroundColorObj(): Color | null;
1557
+ onActivate(): void;
1558
+ toggleColorPicker(type: 'border' | 'bg'): void;
1559
+ closeColorPicker(): void;
1560
+ private addDocumentClickListener;
1561
+ private removeDocumentClickListener;
1562
+ onBorderColorSelected(color: Color): void;
1563
+ onBorderColorRemoved(): void;
1564
+ onBackgroundColorSelected(color: Color): void;
1565
+ onBackgroundColorRemoved(): void;
1566
+ onBorderWidthChange(): void;
1567
+ onSave(): void;
1568
+ cancel(): void;
1569
+ static ɵfac: i0.ɵɵFactoryDeclaration<TableCellStyleViewComponent, never>;
1570
+ static ɵcmp: i0.ɵɵComponentDeclaration<TableCellStyleViewComponent, "document-engine-table-cell-style-view", never, {}, {}, never, never, true, never>;
1571
+ }
1572
+
1573
+ /**
1574
+ * A bubble menu wrapper specifically for toolbar buttons
1575
+ * Unlike the regular bubble menu, this one is positioned relative to toolbar buttons
1576
+ * and doesn't depend on text selection in the editor
1577
+ */
1578
+ declare class ToolbarBubbleMenuComponent implements AfterViewInit, OnDestroy {
1579
+ editor: Editor;
1580
+ config: ToolbarBubbleMenuConfig;
1581
+ private cdr;
1582
+ private eventManager;
1583
+ private focusTrap;
1584
+ private bubbleElement;
1585
+ private viewContainer;
1586
+ private currentViewRef;
1587
+ private currentViewId;
1588
+ private currentAttributes;
1589
+ isVisible: boolean;
1590
+ ngAfterViewInit(): void;
1591
+ ngOnDestroy(): void;
1592
+ isActive(type: 'text' | 'fill'): boolean;
1593
+ toggleBubble(targetElement: HTMLElement, attrs?: Record<string, unknown>, viewId?: string): void;
1594
+ /**
1595
+ * Show the bubble menu positioned relative to a target element (toolbar button)
1596
+ */
1597
+ showBubble(targetElement: HTMLElement, attrs?: Record<string, unknown>, viewId?: string): void;
1598
+ /**
1599
+ * Hide the bubble menu
1600
+ */
1601
+ hideBubble(): void;
1602
+ private selectInitialView;
1603
+ private showView;
1604
+ private createView;
1605
+ private activateView;
1606
+ private deactivateView;
1607
+ private destroyCurrentView;
1608
+ private handleNavigateTo;
1609
+ private handleGoBack;
1610
+ private findViewConfig;
1611
+ private positionBubble;
1612
+ static ɵfac: i0.ɵɵFactoryDeclaration<ToolbarBubbleMenuComponent, never>;
1613
+ static ɵcmp: i0.ɵɵComponentDeclaration<ToolbarBubbleMenuComponent, "document-engine-toolbar-bubble-menu", never, { "editor": { "alias": "editor"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
1614
+ }
1615
+
1616
+ declare class EditorBubbleMenuComponent implements OnInit, AfterViewInit, OnDestroy {
1617
+ editor: Editor;
1618
+ config: EditorBubbleMenuConfig;
1619
+ private viewContainer;
1620
+ private bubbleElement;
1621
+ private cdr;
1622
+ private document;
1623
+ private focusTrap;
1624
+ private currentViewRef;
1625
+ private currentViewId;
1626
+ private currentAttributes;
1627
+ private cleanupSelection;
1628
+ private shouldShowImpl;
1629
+ private keyToSignal;
1630
+ private forceOpen;
1631
+ private documentClickHandler;
1632
+ shouldShowFn: () => boolean;
1633
+ get mountTo(): (() => HTMLElement | null) | undefined;
1634
+ ngOnInit(): void;
1635
+ ngAfterViewInit(): void;
1636
+ ngOnDestroy(): void;
1637
+ private addDocumentClickHandler;
1638
+ /**
1639
+ * Public method to force open the bubble menu
1640
+ */
1641
+ showBubble(): void;
1642
+ /**
1643
+ * Handle close request from view
1644
+ */
1645
+ hideBubble(): void;
1646
+ /**
1647
+ * Handle when target mark/node becomes active
1648
+ */
1649
+ private handleActivate;
1650
+ /**
1651
+ * Handle when target mark/node becomes inactive
1652
+ */
1653
+ private handleDeactivate;
1654
+ /**
1655
+ * Select which view should be shown initially
1656
+ */
1657
+ private selectInitialView;
1658
+ /**
1659
+ * Show a specific view by ID
1660
+ */
1661
+ private showView;
1662
+ /**
1663
+ * Create a view component
1664
+ */
1665
+ private createView;
1666
+ /**
1667
+ * Activate a view (call onActivate)
1668
+ */
1669
+ private activateView;
1670
+ /**
1671
+ * Deactivate a view (call onDeactivate)
1672
+ */
1673
+ private deactivateView;
1674
+ /**
1675
+ * Destroy current view
1676
+ */
1677
+ private destroyCurrentView;
1678
+ /**
1679
+ * Handle navigation request from view
1680
+ */
1681
+ private handleNavigateTo;
1682
+ /**
1683
+ * Handle go back request from view
1684
+ */
1685
+ private handleGoBack;
1686
+ /**
1687
+ * Find view config by ID
1688
+ */
1689
+ private findViewConfig;
1690
+ signalFor(key: string): {
1691
+ value: boolean;
1692
+ };
1693
+ static ɵfac: i0.ɵɵFactoryDeclaration<EditorBubbleMenuComponent, never>;
1694
+ static ɵcmp: i0.ɵɵComponentDeclaration<EditorBubbleMenuComponent, "document-engine-editor-bubble-menu", never, { "editor": { "alias": "editor"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, {}, never, never, true, never>;
1695
+ }
1696
+
1697
+ export { ARCHIVE, ARROW_DROP_DOWN, AngularRenderer, ButtonDirective, CHECK, CLEAR_ALL, CLOSE, CODE, CharacterCountComponent, CheckboxComponent, ColorPickerComponent, ColorPickerViewComponent, DEFAULT, DEFAULT_TOOLBAR_STATE, DESCRIPTION, DYNAMIC_FORM, DocumentEditorComponent, DocumentEngineKit, DynamicFieldsViewComponent, EDIT, EditorBubbleMenuComponent, EditorCapabilities, ErrorMessageComponent, EventManager, FORMAT_ALIGN_CENTER, FORMAT_ALIGN_JUSTIFY, FORMAT_ALIGN_LEFT, FORMAT_ALIGN_RIGHT, FORMAT_BOLD, FORMAT_CLEAR, FORMAT_COLOR_FILL, FORMAT_COLOR_TEXT, FORMAT_INDENT_DECREASE, FORMAT_INDENT_INCREASE, FORMAT_ITALIC, FORMAT_LINE_SPACING, FORMAT_LIST_BULLETED, FORMAT_LIST_NUMBERED, FORMAT_QUOTE, FORMAT_SIZE, FORMAT_STRIKETHROUGH, FORMAT_UNDERLINE, FocusTrapService, FooterComponent, INSERT_PAGE_BREAK, IconComponent, IconRegistryService, ImageInsertViewComponent, InputDirective, LINK, LINK_OFF, LabelDirective, LinkEditViewComponent, LinkMainViewComponent, LinkPropertiesViewComponent, MARKDOWN, MATCH_CASE, PHOTO, PRINT, PopoverDirective, REDO, RESTRICT_EDIT, SEARCH, SEARCH_OFF, SETTINGS, SPECIAL_CHARACTER, SUBSCRIPT, SUPERSCRIPT, SelectComponent, SelectLabelDirective, SelectOptionDirective, SpecialCharactersViewComponent, TABLE_CELL_PROPERTY, TABLE_COLUMN, TABLE_MERGE_CELL, TABLE_PROPERTY, TABLE_ROW, TABLE_ROWS, TableCellStyleViewComponent, TableCreateViewComponent, TableMainViewComponent, TableStyleViewComponent, TemplateViewComponent, TiptapBubbleMenuDirective, TiptapDraggableDirective, TiptapEditorDirective, TiptapFloatingMenuDirective, ToggleGroupComponent, ToggleOptionDirective, ToolbarBubbleMenuComponent, ToolbarComponent, ToolbarService, UNDO, VERTICAL_ALIGN_BOTTOM, VERTICAL_ALIGN_CENTER, VERTICAL_ALIGN_TOP, buildToolbarState, selectionChangeHandler, shouldShowFnFactory, urlValidator };
1698
+ export type { BubbleMenuProps, BubbleMenuViewConfig, BubbleMenuViewContent, BubbleTarget, ButtonType, DocumentEngineConfig, DynamicFieldCategory, DynamicFieldItem, EditorBubbleMenuConfig, HeadingLevel, IconButton, OutsideHandler, SelectButton, SelectOption, TableCreateViewData, TemplateItem, ToolbarBubbleMenuConfig, ToolbarButton, ToolbarState };