{"version":3,"file":"shival99-z-ui-components-z-editor.mjs","sources":["../../../../libs/core-ui/components/z-editor/z-editor.define.ts","../../../../libs/core-ui/components/z-editor/z-editor.variants.ts","../../../../libs/core-ui/components/z-editor/z-editor.component.ts","../../../../libs/core-ui/components/z-editor/z-editor.component.html","../../../../libs/core-ui/components/z-editor/shival99-z-ui-components-z-editor.ts"],"sourcesContent":["import type { ZEditorSlashCommandItem, ZEditorToolbarItem } from './z-editor.types';\n\nexport const Z_EDITOR_DEFAULT_TOOLBAR: readonly ZEditorToolbarItem[] = [\n  { id: 'undo', icon: 'lucideUndo', label: 'Undo' },\n  { id: 'redo', icon: 'lucideRedo', label: 'Redo' },\n  { id: 'bold', icon: 'lucideBold', label: 'Bold' },\n  { id: 'italic', icon: 'lucideItalic', label: 'Italic' },\n  { id: 'underline', icon: 'lucideUnderline', label: 'Underline' },\n  { id: 'strike', icon: 'lucideStrikethrough', label: 'Strike' },\n  { id: 'code', icon: 'lucideCode', label: 'Code' },\n  { id: 'blockStyle', icon: 'lucidePilcrow', label: 'Block style' },\n  { id: 'bulletList', icon: 'lucideList', label: 'Bullet list' },\n  { id: 'orderedList', icon: 'lucideListOrdered', label: 'Ordered list' },\n  { id: 'blockquote', icon: 'lucideQuote', label: 'Blockquote' },\n  { id: 'codeBlock', icon: 'lucideFileCode', label: 'Code block' },\n  { id: 'link', icon: 'lucideLink', label: 'Link' },\n  { id: 'image', icon: 'lucideImage', label: 'Image' },\n  { id: 'emoji', icon: 'lucideSmilePlus', label: 'Emoji' },\n  { id: 'textColor', icon: 'lucidePalette', label: 'Text color' },\n  { id: 'backgroundColor', icon: 'lucideHighlighter', label: 'Background color' },\n  { id: 'align', icon: 'lucideAlignLeft', label: 'Align' },\n  { id: 'horizontalRule', icon: 'lucideMinus', label: 'Horizontal rule' },\n  { id: 'clearFormatting', icon: 'lucideRemoveFormatting', label: 'Clear formatting' },\n];\n\nexport const Z_EDITOR_COLOR_SWATCHES: readonly string[] = [\n  '#000000',\n  '#111827',\n  '#374151',\n  '#6b7280',\n  '#9ca3af',\n  '#ffffff',\n  '#7f1d1d',\n  '#ef4444',\n  '#f97316',\n  '#f59e0b',\n  '#eab308',\n  '#365314',\n  '#22c55e',\n  '#0f766e',\n  '#06b6d4',\n  '#1d4ed8',\n  '#3b82f6',\n  '#8b5cf6',\n  '#6d28d9',\n  '#ec4899',\n];\n\nexport const Z_EDITOR_BACKGROUND_SWATCHES: readonly string[] = [\n  '#ffffff',\n  '#f9fafb',\n  '#f3f4f6',\n  '#e5e7eb',\n  '#d1d5db',\n  '#fef3c7',\n  '#fde68a',\n  '#ffedd5',\n  '#fed7aa',\n  '#fee2e2',\n  '#fecaca',\n  '#fce7f3',\n  '#fbcfe8',\n  '#ede9fe',\n  '#ddd6fe',\n  '#dbeafe',\n  '#bfdbfe',\n  '#cffafe',\n  '#a5f3fc',\n  '#dcfce7',\n];\n\nexport const Z_EDITOR_SLASH_COMMANDS: readonly ZEditorSlashCommandItem[] = [\n  {\n    id: 'text',\n    command: 'paragraph',\n    icon: 'lucideType',\n    label: 'Text',\n    description: 'Plain paragraph text',\n    group: 'Formatting',\n    aliases: ['paragraph', 'p'],\n  },\n  {\n    id: 'standard',\n    command: 'paragraph',\n    icon: 'lucideType',\n    label: 'Standard',\n    description: '',\n    group: 'Formatting',\n    aliases: ['standard', 'normal'],\n  },\n  {\n    id: 'small',\n    command: 'small',\n    icon: 'lucideCaseLower',\n    label: 'Small',\n    description: '',\n    group: 'Formatting',\n    aliases: ['small', 'caption'],\n  },\n  {\n    id: 'heading-1',\n    command: 'heading1',\n    icon: 'lucideHeading1',\n    label: 'Heading 1',\n    description: 'Large section heading',\n    group: 'Formatting',\n    aliases: ['h1', 'title'],\n  },\n  {\n    id: 'heading-2',\n    command: 'heading2',\n    icon: 'lucideHeading2',\n    label: 'Heading 2',\n    description: 'Medium section heading',\n    group: 'Formatting',\n    aliases: ['h2', 'subtitle'],\n  },\n  {\n    id: 'heading-3',\n    command: 'heading3',\n    icon: 'lucideHeading3',\n    label: 'Heading 3',\n    description: 'Small section heading',\n    group: 'Formatting',\n    aliases: ['h3'],\n  },\n  {\n    id: 'heading-4',\n    command: 'heading4',\n    icon: 'lucideHeading4',\n    label: 'Heading 4',\n    description: '',\n    group: 'Formatting',\n    aliases: ['h4'],\n  },\n  {\n    id: 'bullet-list',\n    command: 'bulletList',\n    icon: 'lucideList',\n    label: 'Bullet list',\n    description: 'Unordered list',\n    group: 'Lists',\n    aliases: ['ul', 'list'],\n  },\n  {\n    id: 'ordered-list',\n    command: 'orderedList',\n    icon: 'lucideListOrdered',\n    label: 'Ordered list',\n    description: 'Numbered list',\n    group: 'Lists',\n    aliases: ['ol', 'number'],\n  },\n  {\n    id: 'alphabetical-list',\n    command: 'orderedList',\n    icon: 'lucideListOrdered',\n    label: 'Alphabetical list',\n    description: '',\n    group: 'Lists',\n    aliases: ['ordered', 'ol', 'number', 'alphabetical'],\n  },\n  {\n    id: 'blockquote',\n    command: 'blockquote',\n    icon: 'lucideQuote',\n    label: 'Blockquote',\n    description: 'Quote block',\n    group: 'Blocks',\n    aliases: ['quote'],\n  },\n  {\n    id: 'code-block',\n    command: 'codeBlock',\n    icon: 'lucideFileCode',\n    label: 'Code block',\n    description: 'Preformatted code',\n    group: 'Blocks',\n    aliases: ['code', 'pre'],\n  },\n  {\n    id: 'horizontal-rule',\n    command: 'horizontalRule',\n    icon: 'lucideMinus',\n    label: 'Divider',\n    description: 'Horizontal separator',\n    group: 'Insert',\n    aliases: ['hr', 'line', 'divider'],\n  },\n  {\n    id: 'image',\n    command: 'image',\n    icon: 'lucideImage',\n    label: 'Image',\n    description: 'Upload image',\n    group: 'Insert',\n    aliases: ['photo', 'picture'],\n  },\n];\n","import { cva, type VariantProps } from 'class-variance-authority';\n\nexport const zEditorVariants = cva(\n  [\n    'z-editor block w-full rounded-[0.375rem] border border-input bg-white shadow-xs',\n    'transition-[border-color,box-shadow,background-color,color,opacity] duration-200',\n    'dark:bg-input/30 dark:border-input',\n    'outline-none',\n  ],\n  {\n    variants: {\n      zSize: {\n        sm: '[&_.z-editor-prosemirror]:min-h-24 [&_.z-editor-prosemirror]:text-sm',\n        default: '[&_.z-editor-prosemirror]:min-h-40 [&_.z-editor-prosemirror]:text-sm',\n        lg: '[&_.z-editor-prosemirror]:min-h-60 [&_.z-editor-prosemirror]:text-base',\n      },\n      zStatus: {\n        default: 'focus-within:border-ring focus-within:ring-ring/50 focus-within:ring-[3px]',\n        error:\n          'border-destructive! ring-destructive/20 ring-[3px] focus-within:border-destructive! focus-within:ring-destructive/30',\n        disabled: 'opacity-50 cursor-not-allowed bg-muted! text-muted-foreground',\n        readonly: 'bg-muted/50! text-muted-foreground cursor-default',\n      },\n      zPlaceholderMode: {\n        firstLine: 'z-editor-placeholder-first-line',\n        everyLine: '',\n      },\n    },\n    defaultVariants: {\n      zSize: 'default',\n      zStatus: 'default',\n      zPlaceholderMode: 'everyLine',\n    },\n  }\n);\n\nexport type ZEditorVariants = VariantProps<typeof zEditorVariants>;\n","import {\n  afterNextRender,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  effect,\n  ElementRef,\n  forwardRef,\n  inject,\n  Injector,\n  input,\n  type OnInit,\n  output,\n  signal,\n  viewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  type AbstractControl,\n  ControlValueAccessor,\n  FormsModule,\n  NG_VALUE_ACCESSOR,\n  NgControl,\n  NgModel,\n  PristineChangeEvent,\n  ReactiveFormsModule,\n  TouchedChangeEvent,\n} from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { ZButtonComponent } from '@shival99/z-ui/components/z-button';\nimport { ZIconComponent } from '@shival99/z-ui/components/z-icon';\nimport type { ZIcon } from '@shival99/z-ui/components/z-icon';\nimport { ZInputComponent } from '@shival99/z-ui/components/z-input';\nimport type { ZInputValidator } from '@shival99/z-ui/components/z-input';\nimport { ZPopoverDirective } from '@shival99/z-ui/components/z-popover';\nimport type { ZPopoverControl } from '@shival99/z-ui/components/z-popover';\nimport { ZTooltipDirective } from '@shival99/z-ui/components/z-tooltip';\nimport { ZTranslateService } from '@shival99/z-ui/services';\nimport {\n  Z_EMOJI_KEYWORDS,\n  Z_EMOJI_SHEET,\n  type ZEmojiCategory,\n  zCreateEvent,\n  type ZEvent,\n  zMergeClasses,\n  zTransform,\n  zUuid,\n} from '@shival99/z-ui/utils';\nimport { Editor, type AnyExtension, type Content, posToDOMRect } from '@tiptap/core';\nimport BubbleMenu from '@tiptap/extension-bubble-menu';\nimport Code from '@tiptap/extension-code';\nimport HorizontalRule from '@tiptap/extension-horizontal-rule';\nimport Link from '@tiptap/extension-link';\nimport Mention from '@tiptap/extension-mention';\nimport Placeholder, { type PlaceholderOptions } from '@tiptap/extension-placeholder';\nimport TextAlign from '@tiptap/extension-text-align';\nimport { BackgroundColor, Color, TextStyle } from '@tiptap/extension-text-style';\nimport FontSize from '@tiptap/extension-text-style/font-size';\nimport Underline from '@tiptap/extension-underline';\nimport { Markdown } from '@tiptap/markdown';\nimport { TextSelection } from '@tiptap/pm/state';\nimport type { EditorView } from '@tiptap/pm/view';\nimport StarterKit from '@tiptap/starter-kit';\nimport type { ClassValue } from 'clsx';\nimport { filter, merge } from 'rxjs';\nimport ImageResize from 'tiptap-extension-resize-image';\nimport {\n  Z_EDITOR_BACKGROUND_SWATCHES,\n  Z_EDITOR_COLOR_SWATCHES,\n  Z_EDITOR_DEFAULT_TOOLBAR,\n  Z_EDITOR_SLASH_COMMANDS,\n} from './z-editor.define';\nimport type {\n  ZEditorContentType,\n  ZEditorControl,\n  ZEditorMarkdownCapable,\n  ZEditorResolvedToolbarItem,\n  ZEditorSlashCommandItem,\n  ZEditorSlashCommandViewItem,\n  ZEditorSize,\n  ZEditorTipTapOptions,\n  ZEditorToolbarCommand,\n  ZEditorToolbarItem,\n  ZEditorValidator,\n} from './z-editor.types';\nimport { zEditorVariants } from './z-editor.variants';\n\n@Component({\n  selector: 'z-editor',\n  imports: [\n    FormsModule,\n    ReactiveFormsModule,\n    ZButtonComponent,\n    ZIconComponent,\n    ZInputComponent,\n    ZPopoverDirective,\n    ZTooltipDirective,\n    TranslatePipe,\n  ],\n  standalone: true,\n  templateUrl: './z-editor.component.html',\n  styleUrl: './z-editor.component.scss',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => ZEditorComponent),\n      multi: true,\n    },\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n  exportAs: 'zEditor',\n})\nexport class ZEditorComponent implements OnInit, ControlValueAccessor {\n  private static readonly _bubbleMenuOffset = 8;\n\n  private readonly _injector = inject(Injector);\n  private readonly _destroyRef = inject(DestroyRef);\n  private readonly _zTranslate = inject(ZTranslateService);\n  private readonly _editorHost = viewChild.required<ElementRef<HTMLElement>>('editorHost');\n  private readonly _floatingToolbar = viewChild.required<ElementRef<HTMLElement>>('floatingToolbar');\n  private readonly _slashMenuTrigger = viewChild.required<ElementRef<HTMLElement>>('slashMenuTrigger');\n  private readonly _linkPopoverTrigger = viewChild.required<ElementRef<HTMLElement>>('linkPopoverTrigger');\n  private readonly _slashMenuScrollHost = viewChild<ElementRef<HTMLElement>>('slashMenuScrollHost');\n\n  public readonly zOnChange = output<string | Content>();\n  public readonly zOnFocus = output<FocusEvent>();\n  public readonly zOnBlur = output<FocusEvent>();\n  public readonly zControl = output<ZEditorControl>();\n  public readonly zEvent = output<ZEvent>();\n\n  public readonly class = input<ClassValue>('');\n  public readonly zSize = input<ZEditorSize>('default');\n  public readonly zLabel = input<string>('');\n  public readonly zLabelClass = input<string>('');\n  public readonly zPlaceholder = input<string>('');\n  public readonly zRequired = input(false, { transform: zTransform });\n  public readonly zDisabled = input(false, { transform: zTransform });\n  public readonly zReadonly = input(false, { transform: zTransform });\n  public readonly zContentType = input<ZEditorContentType>('html');\n  public readonly zToolbar = input<readonly ZEditorToolbarItem[] | false>(Z_EDITOR_DEFAULT_TOOLBAR);\n  public readonly zTipTap = input<ZEditorTipTapOptions>({});\n  public readonly zValidators = input<ZEditorValidator[]>([]);\n\n  protected readonly editorId = zUuid('z-editor');\n  protected readonly linkInputId = zUuid('z-editor-link');\n\n  protected readonly _value = signal<string | Content>('');\n  private readonly _disabled = signal(false);\n  private readonly _formControl = signal<AbstractControl | null>(null);\n  private readonly _formStateVersion = signal(0);\n  private readonly _isNgModel = signal(false);\n  private readonly _selectionVersion = signal(0);\n  private readonly _plainText = signal('');\n  protected readonly slashMenuState = signal({\n    visible: false,\n    query: '',\n    from: 0,\n    to: 0,\n    left: 0,\n    top: 0,\n  });\n\n  protected readonly slashMenuActiveIndex = signal(0);\n  protected readonly linkPopoverState = signal({\n    visible: false,\n    left: 0,\n    top: 0,\n    width: 0,\n    height: 0,\n  });\n\n  protected readonly linkUrl = signal('');\n  protected readonly activeLinkHref = signal('');\n  protected readonly linkValidators: ZInputValidator[] = [\n    {\n      error: 'url',\n      message: 'i18n_z_ui_editor_invalid_url',\n      validate: value => this._normalizeUrl(String(value ?? '')) !== '',\n    },\n  ];\n\n  protected readonly textColorSwatches = Z_EDITOR_COLOR_SWATCHES;\n  protected readonly backgroundColorSwatches = Z_EDITOR_BACKGROUND_SWATCHES;\n  protected readonly slashCommands = Z_EDITOR_SLASH_COMMANDS;\n  protected readonly blockStyleOptions: readonly {\n    command: Extract<ZEditorToolbarCommand, 'paragraph' | 'heading1' | 'heading2' | 'heading3' | 'heading4'>;\n    icon: ZEditorToolbarItem['icon'];\n    label: string;\n  }[] = [\n    { command: 'paragraph', icon: 'lucidePilcrow', label: 'Paragraph' },\n    { command: 'heading1', icon: 'lucideHeading1', label: 'Heading 1' },\n    { command: 'heading2', icon: 'lucideHeading2', label: 'Heading 2' },\n    { command: 'heading3', icon: 'lucideHeading3', label: 'Heading 3' },\n    { command: 'heading4', icon: 'lucideHeading4', label: 'Heading 4' },\n  ];\n\n  protected readonly alignOptions: readonly {\n    command: Extract<ZEditorToolbarCommand, 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify'>;\n    icon: ZEditorToolbarItem['icon'];\n    label: string;\n  }[] = [\n    { command: 'alignLeft', icon: 'lucideAlignLeft', label: 'Left' },\n    { command: 'alignCenter', icon: 'lucideAlignCenter', label: 'Center' },\n    { command: 'alignRight', icon: 'lucideAlignRight', label: 'Right' },\n    { command: 'alignJustify', icon: 'lucideAlignJustify', label: 'Justify' },\n  ];\n\n  private readonly _toolbarShortcutLabels: Partial<Record<ZEditorToolbarCommand, string>> = {\n    bold: 'Ctrl+B',\n    italic: 'Ctrl+I',\n    underline: 'Ctrl+U',\n    strike: 'Ctrl+Shift+S',\n    code: 'Ctrl+E',\n    link: 'Ctrl+K',\n    clearFormatting: 'Ctrl+\\\\',\n    undo: 'Ctrl+Z',\n    redo: 'Ctrl+Y',\n  };\n\n  protected readonly uiState = signal({\n    touched: false,\n    dirty: false,\n  });\n\n  private readonly _customError = signal<string | null>(null);\n\n  private _onChange: (value: string | Content) => void = () => void 0;\n  private _onTouched: () => void = () => void 0;\n  private _ngControl: NgControl | null = null;\n  private _editor: Editor | null = null;\n  private _pendingValue: Content = '';\n  private _linkSelection: { from: number; to: number } | null = null;\n  private _linkAnchorElement: HTMLAnchorElement | null = null;\n  private _emojiPopoverControl: ZPopoverControl | null = null;\n  private _blockStylePopoverControl: ZPopoverControl | null = null;\n  private _alignPopoverControl: ZPopoverControl | null = null;\n  private _textColorPopoverControl: ZPopoverControl | null = null;\n  private _backgroundColorPopoverControl: ZPopoverControl | null = null;\n  private _slashMenuPopoverControl: ZPopoverControl | null = null;\n  private _dismissedSlashMenu: { query: string; from: number; to: number } | null = null;\n  private _linkPopoverControl: ZPopoverControl | null = null;\n  private _resizeObserver: ResizeObserver | null = null;\n  private _resizeListenerCleanup: (() => void) | null = null;\n  private _bubbleMenuPositionFrame: number | null = null;\n  protected readonly emojiCategories = Z_EMOJI_SHEET as readonly (Omit<ZEmojiCategory, 'icon'> & { icon: ZIcon })[];\n  protected readonly activeEmojiCategoryId = signal(this.emojiCategories[0]?.id ?? 'smileys-people');\n  protected readonly emojiSearch = signal('');\n  protected readonly activeEmojiCategory = computed(\n    () => this.emojiCategories.find(category => category.id === this.activeEmojiCategoryId()) ?? this.emojiCategories[0]\n  );\n\n  protected readonly activeEmojiCategoryLabel = computed(\n    () => this.activeEmojiCategory()?.labelKey ?? 'i18n_z_ui_emoji_category_smileys'\n  );\n\n  protected readonly emojiSearchQuery = computed(() => this.emojiSearch().trim().toLowerCase());\n\n  protected readonly activeEmojis = computed(() => {\n    const query = this.emojiSearchQuery();\n\n    if (query) {\n      return this._searchEmojis(query);\n    }\n\n    return this.activeEmojiCategory()?.emojis ?? [];\n  });\n\n  protected readonly hasEmojiResults = computed(() => this.activeEmojis().length > 0);\n\n  protected readonly isDisabled = computed(() => this._disabled() || this.zDisabled());\n  protected readonly showToolbar = computed(() => this.zToolbar() !== false && !this.zReadonly() && !this.isDisabled());\n  protected readonly normalizedLinkUrl = computed(() => this._normalizeUrl(this.linkUrl()));\n  protected readonly activeTextColor = computed(() => this._getTextStyleAttribute('color') || '#111827');\n  protected readonly activeBackgroundColor = computed(\n    () => this._getTextStyleAttribute('backgroundColor') || '#ffffff'\n  );\n\n  protected readonly activeBlockStyle = computed(() => this._getActiveBlockStyle());\n  protected readonly activeBlockStyleLabel = computed(\n    () => this.blockStyleOptions.find(option => option.command === this.activeBlockStyle())?.label ?? 'Paragraph'\n  );\n\n  protected readonly activeAlign = computed(() => this._getActiveAlign());\n  protected readonly activeAlignLabel = computed(\n    () => this.alignOptions.find(option => option.command === this.activeAlign())?.label ?? 'Left'\n  );\n\n  protected readonly activeAlignIcon = computed(\n    () => this.alignOptions.find(option => option.command === this.activeAlign())?.icon ?? 'lucideAlignLeft'\n  );\n\n  protected readonly filteredSlashCommands = computed<ZEditorSlashCommandViewItem[]>(() => {\n    const query = this.slashMenuState().query.trim().toLowerCase();\n    const commands = this.slashCommands;\n    let matchedCommands = commands;\n\n    if (query) {\n      matchedCommands = commands.filter(item => {\n        const label = item.label.toLowerCase();\n        const description = item.description.toLowerCase();\n        return (\n          label.includes(query) || description.includes(query) || item.aliases.some(alias => alias.includes(query))\n        );\n      });\n    }\n\n    return matchedCommands.map((item, index) => ({\n      ...item,\n      showGroupLabel: index === 0 || matchedCommands[index - 1]?.group !== item.group,\n    }));\n  });\n\n  protected readonly canApplyLink = computed(() => !!this.normalizedLinkUrl());\n  protected readonly effectivePlaceholder = computed(() => {\n    this._zTranslate.currentLang();\n    return this.zPlaceholder() || this._zTranslate.instant('i18n_z_ui_editor_placeholder');\n  });\n\n  protected readonly toolbarItems = computed<ZEditorResolvedToolbarItem[]>(() => {\n    this._selectionVersion();\n    const toolbar = this.zToolbar();\n\n    if (toolbar === false) {\n      return [];\n    }\n\n    return toolbar.map(item => ({\n      ...item,\n      active: this._isToolbarCommandActive(item.id),\n      disabled: this._isToolbarCommandDisabled(item.id),\n    }));\n  });\n\n  protected readonly floatingToolbarItems = computed<\n    (ZEditorResolvedToolbarItem & { shortcut: string; tooltip: string })[]\n  >(() => {\n    this._selectionVersion();\n    const itemIds: ZEditorToolbarCommand[] = [\n      'bold',\n      'italic',\n      'underline',\n      'strike',\n      'code',\n      'blockStyle',\n      'clearFormatting',\n      'textColor',\n      'backgroundColor',\n      'align',\n      'link',\n    ];\n\n    return Z_EDITOR_DEFAULT_TOOLBAR.filter(item => itemIds.includes(item.id)).map(item => ({\n      ...item,\n      active: this._isToolbarCommandActive(item.id),\n      disabled: this._isToolbarCommandDisabled(item.id),\n      shortcut: this._toolbarShortcutLabels[item.id] ?? '',\n      tooltip: this._getToolbarTooltip(item.id, item.label),\n    }));\n  });\n\n  private readonly _shouldShowValidation = computed(() => {\n    const control = this._formControl();\n    this._formStateVersion();\n\n    if (this._isNgModel()) {\n      return this.uiState().dirty || this.uiState().touched;\n    }\n\n    if (control) {\n      return control.dirty;\n    }\n\n    return this.uiState().dirty || this.uiState().touched;\n  });\n\n  private _getValidationErrors(): string[] {\n    const errors: string[] = [];\n    const plainText = this._plainText().trim();\n    const valueText = this._serializeValueAsText();\n    const validators = this.zValidators();\n\n    if (!this._shouldShowValidation()) {\n      return errors;\n    }\n\n    const isRequired = this.zRequired() || this._formControl()?.errors?.['required'];\n    if (isRequired && !plainText && this._isEditorEmpty()) {\n      this._zTranslate.currentLang();\n      errors.push(this._zTranslate.instant('i18n_z_ui_editor_required'));\n    }\n\n    for (const validator of validators) {\n      if (validator.error === 'required') {\n        continue;\n      }\n\n      if (validator.minLength && valueText.length < validator.minLength) {\n        errors.push(validator.message);\n        continue;\n      }\n\n      if (validator.maxLength && valueText.length > validator.maxLength) {\n        errors.push(validator.message);\n        continue;\n      }\n\n      if (validator.pattern && !validator.pattern.test(valueText)) {\n        errors.push(validator.message);\n      }\n    }\n\n    return errors;\n  }\n\n  protected readonly hasError = computed(() => {\n    if (this._customError()) {\n      return true;\n    }\n\n    const customErrors = this._getValidationErrors();\n    if (customErrors.length > 0) {\n      return true;\n    }\n\n    const control = this._formControl();\n    this._formStateVersion();\n\n    if (!control) {\n      return false;\n    }\n\n    return control.invalid && this._shouldShowValidation();\n  });\n\n  protected readonly errorMessage = computed(() => {\n    const customError = this._customError();\n    if (customError) {\n      return customError;\n    }\n\n    const customErrors = this._getValidationErrors();\n    if (customErrors.length > 0) {\n      return customErrors[0];\n    }\n\n    const control = this._formControl();\n    const errors = control?.errors;\n\n    if (!errors) {\n      return '';\n    }\n\n    this._zTranslate.currentLang();\n    if (errors['required']) {\n      return this._zTranslate.instant('i18n_z_ui_editor_required');\n    }\n\n    if (errors['minlength']) {\n      return this._zTranslate.instant('i18n_z_ui_editor_min_length', {\n        min: errors['minlength'].requiredLength,\n      });\n    }\n\n    if (errors['maxlength']) {\n      return this._zTranslate.instant('i18n_z_ui_editor_max_length', {\n        max: errors['maxlength'].requiredLength,\n      });\n    }\n\n    return this._zTranslate.instant('i18n_z_ui_editor_invalid');\n  });\n\n  protected readonly currentStatus = computed(() => {\n    if (this.isDisabled()) {\n      return 'disabled';\n    }\n\n    if (this.zReadonly()) {\n      return 'readonly';\n    }\n\n    if (this.hasError()) {\n      return 'error';\n    }\n\n    return 'default';\n  });\n\n  protected readonly wrapperClasses = computed(() => 'z-editor-wrapper flex w-full flex-col gap-2');\n\n  protected readonly editorClasses = computed(() =>\n    zMergeClasses(\n      zEditorVariants({\n        zSize: this.zSize(),\n        zStatus: this.currentStatus(),\n        zPlaceholderMode: this._placeholderMode(),\n      }),\n      this.class()\n    )\n  );\n\n  constructor() {\n    afterNextRender(() => {\n      this._createEditor();\n    });\n\n    effect(() => {\n      const editor = this._editor;\n      const editable = !this.isDisabled() && !this.zReadonly();\n\n      if (!editor || editor.isEditable === editable) {\n        return;\n      }\n\n      editor.setEditable(editable);\n      this._selectionVersion.update(v => v + 1);\n    });\n\n    this._destroyRef.onDestroy(() => {\n      this._teardownBubbleMenuPositionUpdates();\n      this._editor?.destroy();\n      this._editor = null;\n    });\n  }\n\n  ngOnInit(): void {\n    queueMicrotask(() => {\n      try {\n        this._ngControl = this._injector.get(NgControl, null);\n        this._isNgModel.set(this._ngControl instanceof NgModel);\n\n        if (this._ngControl?.control) {\n          const { control } = this._ngControl;\n          this._formControl.set(control);\n          merge(\n            control.statusChanges,\n            control.valueChanges,\n            control.events.pipe(\n              filter(event => event instanceof PristineChangeEvent || event instanceof TouchedChangeEvent)\n            )\n          )\n            .pipe(takeUntilDestroyed(this._destroyRef))\n            .subscribe(() => {\n              this._formStateVersion.update(v => v + 1);\n            });\n        }\n      } catch {\n        this._ngControl = null;\n      }\n    });\n  }\n\n  public writeValue(value: string | Content): void {\n    const nextValue = value || '';\n    this._pendingValue = nextValue;\n    this._value.set(nextValue);\n\n    if (!this._editor || this._isCurrentEditorContent(nextValue)) {\n      return;\n    }\n\n    this._editor.commands.setContent(nextValue, { emitUpdate: false });\n    this._refreshEditorState();\n  }\n\n  public registerOnChange(fn: (value: string | Content) => void): void {\n    this._onChange = fn;\n  }\n\n  public registerOnTouched(fn: () => void): void {\n    this._onTouched = fn;\n  }\n\n  public setDisabledState(isDisabled: boolean): void {\n    this._disabled.set(isDisabled);\n    this._editor?.setEditable(!isDisabled && !this.zReadonly());\n  }\n\n  protected onToolbarClick(command: ZEditorToolbarCommand): void {\n    const editor = this._editor;\n\n    if (!editor || this._isToolbarCommandDisabled(command)) {\n      return;\n    }\n\n    switch (command) {\n      case 'bold':\n        editor.chain().focus().toggleBold().run();\n        break;\n      case 'italic':\n        editor.chain().focus().toggleItalic().run();\n        break;\n      case 'underline':\n        editor.chain().focus().toggleUnderline().run();\n        break;\n      case 'strike':\n        editor.chain().focus().toggleStrike().run();\n        break;\n      case 'code':\n        editor.chain().focus().toggleCode().run();\n        break;\n      case 'blockStyle':\n        break;\n      case 'heading1':\n        editor.chain().focus().toggleHeading({ level: 1 }).run();\n        break;\n      case 'heading2':\n        editor.chain().focus().toggleHeading({ level: 2 }).run();\n        break;\n      case 'heading3':\n        editor.chain().focus().toggleHeading({ level: 3 }).run();\n        break;\n      case 'heading4':\n        editor.chain().focus().toggleHeading({ level: 4 }).run();\n        break;\n      case 'small':\n        editor.chain().focus().setParagraph().setFontSize('0.875rem').run();\n        break;\n      case 'paragraph':\n        editor.chain().focus().setParagraph().unsetFontSize().run();\n        break;\n      case 'bulletList':\n        editor.chain().focus().toggleBulletList().run();\n        break;\n      case 'orderedList':\n        editor.chain().focus().toggleOrderedList().run();\n        break;\n      case 'blockquote':\n        editor.chain().focus().toggleBlockquote().run();\n        break;\n      case 'codeBlock':\n        editor.chain().focus().toggleCodeBlock().run();\n        break;\n      case 'horizontalRule':\n        editor.chain().focus().setHorizontalRule().run();\n        break;\n      case 'link':\n        this._toggleLink();\n        break;\n      case 'image':\n        this._insertImage();\n        break;\n      case 'emoji':\n      case 'align':\n      case 'textColor':\n      case 'backgroundColor':\n        break;\n      case 'alignLeft':\n        this._setTextAlign('left');\n        break;\n      case 'alignCenter':\n        this._setTextAlign('center');\n        break;\n      case 'alignRight':\n        this._setTextAlign('right');\n        break;\n      case 'alignJustify':\n        this._setTextAlign('justify');\n        break;\n      case 'undo':\n        editor.chain().focus().undo().run();\n        break;\n      case 'redo':\n        editor.chain().focus().redo().run();\n        break;\n      case 'clearFormatting':\n        editor.chain().focus().clearNodes().unsetAllMarks().run();\n        this._collapseSelectionToAnchor();\n        break;\n    }\n\n    this._refreshEditorState();\n  }\n\n  private _createEditor(): void {\n    if (this._editor) {\n      return;\n    }\n\n    const host = this._editorHost().nativeElement;\n    const tiptapOptions = this.zTipTap();\n    const placeholderConfig = this._placeholderConfig();\n\n    this._editor = new Editor({\n      element: host,\n      content: this._pendingValue,\n      editable: !this.isDisabled() && !this.zReadonly(),\n      extensions: [\n        this.zContentType() === 'markdown' &&\n          Markdown.configure({\n            markedOptions: {\n              gfm: true,\n            },\n          }),\n        StarterKit.configure({\n          code: false,\n          horizontalRule: false,\n          link: false,\n          underline: false,\n          dropcursor: {\n            color: 'var(--primary)',\n            width: 2,\n          },\n          ...tiptapOptions.starterKit,\n        }),\n        Code.extend({\n          excludes: 'code',\n        }),\n        Underline,\n        TextStyle,\n        FontSize,\n        Color,\n        BackgroundColor,\n        BubbleMenu.configure({\n          element: this._floatingToolbar().nativeElement,\n          pluginKey: 'zEditorBubbleMenu',\n          updateDelay: 0,\n          options: {\n            strategy: 'fixed',\n            placement: 'top-start',\n            offset: ZEditorComponent._bubbleMenuOffset,\n            flip: true,\n            shift: {\n              padding: 8,\n            },\n          },\n          getReferencedVirtualElement: () => this._getSelectionFloatingElement(),\n          shouldShow: ({ editor, from, to }) =>\n            editor.isEditable &&\n            !this.isDisabled() &&\n            !this.zReadonly() &&\n            from !== to &&\n            !editor.isActive('image') &&\n            editor.state.doc.textBetween(from, to).trim().length > 0,\n        }),\n        TextAlign.configure({\n          types: ['heading', 'paragraph', 'image'],\n        }),\n        Link.configure({\n          openOnClick: false,\n          ...tiptapOptions.link,\n        }),\n        HorizontalRule,\n        tiptapOptions.image !== false &&\n          this._createImageExtension(typeof tiptapOptions.image === 'boolean' ? {} : (tiptapOptions.image ?? {})),\n        tiptapOptions.mention !== false &&\n          Mention.configure({\n            HTMLAttributes: {\n              class: 'mention',\n            },\n            ...(typeof tiptapOptions.mention === 'boolean' ? {} : tiptapOptions.mention),\n          }),\n        Placeholder.configure({\n          placeholder: this.effectivePlaceholder(),\n          showOnlyWhenEditable: false,\n          showOnlyCurrent: true,\n          ...placeholderConfig,\n        }),\n        ...(tiptapOptions.extensions ?? []),\n      ].filter(extension => !!extension),\n      editorProps: {\n        attributes: {\n          class: 'z-editor-prosemirror',\n          autocomplete: 'off',\n          autocorrect: 'off',\n          autocapitalize: 'off',\n          translate: 'no',\n        },\n        handleKeyDown: (_view, event) =>\n          this._handleSlashMenuKeyDown(event) || this._handleEditorShortcutKeyDown(event),\n        handleClick: (view, _pos, event) => this._handleEditorClick(view, event),\n      },\n      onUpdate: () => this._handleEditorUpdate(),\n      onSelectionUpdate: () => this._refreshEditorState(),\n      onTransaction: () => this._refreshEditorState(),\n      onFocus: () => this._handleFocus(),\n      onBlur: () => this._handleBlur(),\n    });\n\n    this._refreshEditorState();\n    this._setupBubbleMenuPositionUpdates();\n    this._emitControl();\n  }\n\n  private _handleEditorUpdate(): void {\n    const value = this._getSerializedContent();\n    this._value.set(value);\n    this.uiState.update(s => ({ ...s, dirty: true }));\n    this._onChange(value);\n    this.zOnChange.emit(value);\n    this._refreshEditorState();\n  }\n\n  private _handleFocus(): void {\n    const focusEvent = new FocusEvent('focus');\n    this.zOnFocus.emit(focusEvent);\n    this.zEvent.emit(zCreateEvent('focus', focusEvent));\n  }\n\n  private _handleBlur(): void {\n    if (this.uiState().dirty) {\n      this.uiState.update(s => ({ ...s, touched: true }));\n    }\n\n    this._dismissCurrentSlashMenu();\n    this._onTouched();\n    const blurEvent = new FocusEvent('blur');\n    this.zOnBlur.emit(blurEvent);\n    this.zEvent.emit(zCreateEvent('blur', blurEvent));\n  }\n\n  private _emitControl(): void {\n    const control: ZEditorControl = {\n      focus: () => this._editor?.commands.focus(),\n      blur: () => this._editor?.commands.blur(),\n      clear: () => this._setEditorContent(''),\n      setContent: content => this._setEditorContent(content),\n      getContent: () => this._getSerializedContent(),\n      getHTML: () => this._editor?.getHTML() ?? '',\n      getJSON: () => this._editor?.getJSON() ?? { type: 'doc', content: [] },\n      getMarkdown: () => this._getMarkdown(),\n      getText: () => this._editor?.getText() ?? '',\n      getLength: () => this._editor?.state.doc.content.size ?? 0,\n      getEditor: () => this._editor,\n      valid: () => this._validateControl(),\n      validate: () => !this._validateControl(),\n      reset: () => {\n        this._customError.set(null);\n        this.uiState.set({ touched: false, dirty: false });\n        this._setEditorContent('');\n      },\n      setValue: content => this._setEditorContent(content),\n      setErrorMessage: message => {\n        this._customError.set(message);\n        this._formStateVersion.update(v => v + 1);\n      },\n      hasError: this.hasError,\n      value: this._value.asReadonly(),\n      errorMessage: this.errorMessage,\n    };\n\n    this.zControl.emit(control);\n  }\n\n  private _setEditorContent(content: Content): void {\n    this._pendingValue = content;\n    this._editor?.commands.setContent(content, { emitUpdate: false });\n    const value = this._getSerializedContent();\n    this._value.set(value);\n    this._plainText.set(this._editor?.getText() ?? '');\n    this._onChange(value);\n    this.zOnChange.emit(value);\n    this._refreshEditorState();\n  }\n\n  private _validateControl(): boolean {\n    this.uiState.set({ touched: true, dirty: true });\n    this._formControl()?.markAsDirty();\n    this._formControl()?.markAsTouched();\n    this._formControl()?.updateValueAndValidity({ onlySelf: true });\n    this._formStateVersion.update(v => v + 1);\n    return !this.hasError();\n  }\n\n  private _getSerializedContent(): string | Content {\n    const editor = this._editor;\n\n    if (!editor) {\n      return this._value();\n    }\n\n    if (this.zContentType() === 'json') {\n      return editor.getJSON();\n    }\n\n    if (this.zContentType() === 'markdown') {\n      return this._getMarkdown();\n    }\n\n    return editor.getHTML();\n  }\n\n  private _getMarkdown(): string {\n    const editor = this._editor as (Editor & ZEditorMarkdownCapable) | null;\n    return editor?.getMarkdown?.() ?? this._editor?.getText() ?? '';\n  }\n\n  private _serializeValueAsText(): string {\n    const value = this._value();\n\n    if (typeof value === 'string') {\n      return value;\n    }\n\n    return JSON.stringify(value);\n  }\n\n  private _refreshEditorState(): void {\n    this._plainText.set(this._editor?.getText() ?? '');\n    this._selectionVersion.update(v => v + 1);\n    this._formStateVersion.update(v => v + 1);\n    this._syncSlashMenu();\n    this._syncLinkPopoverPosition();\n  }\n\n  private _searchEmojis(query: string): readonly string[] {\n    const results: string[] = [];\n    for (const category of this.emojiCategories) {\n      for (const entry of category.emojis) {\n        const emoji = typeof entry === 'string' ? entry : entry.emoji;\n        const keywords = typeof entry === 'string' ? Z_EMOJI_KEYWORDS.get(entry) : entry.keywords;\n        const matchesKeywords = keywords?.some(kw => kw.includes(query)) ?? false;\n        if (matchesKeywords || emoji.includes(query)) {\n          results.push(emoji);\n        }\n      }\n    }\n    return results;\n  }\n\n  private _setupBubbleMenuPositionUpdates(): void {\n    if (typeof ResizeObserver === 'undefined') {\n      this._resizeListenerCleanup = this._listenWindowResize();\n      return;\n    }\n\n    const editorElement = this._editorHost().nativeElement;\n    this._resizeObserver = new ResizeObserver(() => this._requestBubbleMenuPositionUpdate());\n    this._resizeObserver.observe(editorElement);\n\n    const wrapperElement = editorElement.closest('.z-editor-wrapper');\n    if (wrapperElement instanceof HTMLElement) {\n      this._resizeObserver.observe(wrapperElement);\n    }\n\n    this._resizeListenerCleanup = this._listenWindowResize();\n  }\n\n  private _listenWindowResize(): () => void {\n    const listener = (event: Event): void => {\n      if (event.type === 'scroll' && event.target instanceof Element && event.target.closest('.z-popover')) {\n        return;\n      }\n      this._requestBubbleMenuPositionUpdate();\n    };\n    window.addEventListener('resize', listener, { passive: true });\n    window.addEventListener('scroll', listener, { passive: true, capture: true });\n    return () => {\n      window.removeEventListener('resize', listener);\n      window.removeEventListener('scroll', listener, { capture: true });\n    };\n  }\n\n  private _teardownBubbleMenuPositionUpdates(): void {\n    this._resizeObserver?.disconnect();\n    this._resizeObserver = null;\n    this._resizeListenerCleanup?.();\n    this._resizeListenerCleanup = null;\n\n    if (this._bubbleMenuPositionFrame !== null) {\n      cancelAnimationFrame(this._bubbleMenuPositionFrame);\n      this._bubbleMenuPositionFrame = null;\n    }\n  }\n\n  private _requestBubbleMenuPositionUpdate(): void {\n    if (this._bubbleMenuPositionFrame !== null) {\n      return;\n    }\n\n    if (this._isAnyBubbleMenuPopoverOpen()) {\n      return;\n    }\n\n    this._bubbleMenuPositionFrame = requestAnimationFrame(() => {\n      this._bubbleMenuPositionFrame = null;\n      this._editor?.view.dispatch(this._editor.state.tr.setMeta('zEditorBubbleMenu', 'updatePosition'));\n      this._syncLinkPopoverPosition();\n    });\n  }\n\n  private _isAnyBubbleMenuPopoverOpen(): boolean {\n    return (\n      !!this._blockStylePopoverControl?.isVisible() ||\n      !!this._alignPopoverControl?.isVisible() ||\n      !!this._textColorPopoverControl?.isVisible() ||\n      !!this._backgroundColorPopoverControl?.isVisible()\n    );\n  }\n\n  private _syncLinkPopoverPosition(): void {\n    if (!this.linkPopoverState().visible) {\n      return;\n    }\n\n    const rect = this._getLinkPopoverReferenceRect();\n\n    if (!rect) {\n      return;\n    }\n\n    this.linkPopoverState.set({\n      visible: true,\n      left: rect.left,\n      top: rect.top,\n      width: rect.width,\n      height: rect.height,\n    });\n\n    requestAnimationFrame(() => {\n      if (this.linkPopoverState().visible) {\n        this._linkPopoverControl?.show();\n      }\n    });\n  }\n\n  private _getSelectionFloatingElement(): {\n    getBoundingClientRect: () => DOMRect;\n    getClientRects: () => DOMRect[];\n  } | null {\n    const editor = this._editor;\n\n    if (!editor) {\n      return null;\n    }\n\n    // Freeze the bubble menu in place while any popover triggered from it is open,\n    // so the popover (positioned relative to the bubble menu) does not flicker.\n    if (this._isAnyBubbleMenuPopoverOpen()) {\n      const frozenRect = this._getFrozenBubbleMenuReferenceRect();\n      if (frozenRect) {\n        return this._createVirtualElement(frozenRect);\n      }\n    }\n\n    const { from, to } = editor.state.selection;\n    if (from === to) {\n      return null;\n    }\n\n    const selectionRect = posToDOMRect(editor.view, from, to);\n    const menuWidth = this._floatingToolbar().nativeElement.getBoundingClientRect().width;\n    const activeAlign = this._getActiveAlignFromEditor(editor);\n    const left =\n      activeAlign === 'alignCenter'\n        ? selectionRect.left + selectionRect.width / 2 - menuWidth / 2\n        : activeAlign === 'alignRight'\n          ? selectionRect.right - menuWidth\n          : selectionRect.left;\n    const rect = new DOMRect(Math.max(left, 0), selectionRect.top, menuWidth, selectionRect.height);\n\n    return this._createVirtualElement(rect);\n  }\n\n  private _getFrozenBubbleMenuReferenceRect(): DOMRect | null {\n    const toolbarRect = this._floatingToolbar().nativeElement.getBoundingClientRect();\n\n    if (toolbarRect.width <= 0 || toolbarRect.height <= 0) {\n      return null;\n    }\n\n    return new DOMRect(toolbarRect.left, toolbarRect.bottom + ZEditorComponent._bubbleMenuOffset, toolbarRect.width, 0);\n  }\n\n  private _createVirtualElement(rect: DOMRect): {\n    getBoundingClientRect: () => DOMRect;\n    getClientRects: () => DOMRect[];\n  } {\n    return {\n      getBoundingClientRect: () => rect,\n      getClientRects: () => [rect],\n    };\n  }\n\n  private _isEditorEmpty(): boolean {\n    const editor = this._editor;\n\n    if (editor) {\n      return editor.isEmpty;\n    }\n\n    const value = this._value();\n    if (typeof value === 'string') {\n      return !value || value === '<p></p>' || value === '<p><br></p>';\n    }\n\n    return false;\n  }\n\n  private _isCurrentEditorContent(content: Content): boolean {\n    const editor = this._editor;\n\n    if (!editor) {\n      return false;\n    }\n\n    if (this.zContentType() === 'json') {\n      return JSON.stringify(editor.getJSON()) === JSON.stringify(content);\n    }\n\n    return editor.getHTML() === String(content);\n  }\n\n  private _isToolbarCommandActive(command: ZEditorToolbarCommand): boolean {\n    const editor = this._editor;\n\n    if (!editor || !editor.isEditable) {\n      return false;\n    }\n\n    switch (command) {\n      case 'bold':\n      case 'italic':\n      case 'underline':\n      case 'strike':\n      case 'code':\n      case 'bulletList':\n      case 'orderedList':\n      case 'blockquote':\n      case 'codeBlock':\n      case 'link':\n        return editor.isActive(command);\n      case 'heading1':\n        return editor.isActive('heading', { level: 1 });\n      case 'heading2':\n        return editor.isActive('heading', { level: 2 });\n      case 'heading3':\n        return editor.isActive('heading', { level: 3 });\n      case 'heading4':\n        return editor.isActive('heading', { level: 4 });\n      case 'paragraph':\n        return editor.isActive('paragraph');\n      case 'blockStyle':\n        return this.activeBlockStyle() !== 'paragraph';\n      case 'align':\n        return this.activeAlign() !== 'alignLeft';\n      default:\n        return false;\n    }\n  }\n\n  private _isToolbarCommandDisabled(command: ZEditorToolbarCommand): boolean {\n    const editor = this._editor;\n\n    if (!editor || !editor.isEditable || this.isDisabled() || this.zReadonly()) {\n      return true;\n    }\n\n    switch (command) {\n      case 'undo':\n        return !editor.can().undo();\n      case 'redo':\n        return !editor.can().redo();\n      case 'link':\n        return editor.state.selection.empty && !editor.isActive('link');\n      case 'emoji':\n      case 'blockStyle':\n      case 'align':\n      case 'textColor':\n      case 'backgroundColor':\n        return false;\n      default:\n        return false;\n    }\n  }\n\n  protected onFloatingToolbarClick(command: ZEditorToolbarCommand): void {\n    this.onToolbarClick(command);\n  }\n\n  private _getToolbarTooltip(command: ZEditorToolbarCommand, label: string): string {\n    const shortcut = this._toolbarShortcutLabels[command];\n    return shortcut ? `${label} (${shortcut})` : label;\n  }\n\n  protected applySlashCommand(item: ZEditorSlashCommandItem): void {\n    const editor = this._editor;\n    const { from, to } = this.slashMenuState();\n\n    if (!editor) {\n      return;\n    }\n\n    editor.chain().focus().deleteRange({ from, to }).run();\n    this._hideSlashMenu();\n    this.onToolbarClick(item.command);\n  }\n\n  protected applyBlockStyle(\n    command: Extract<ZEditorToolbarCommand, 'paragraph' | 'heading1' | 'heading2' | 'heading3' | 'heading4'>,\n    closePopover?: () => void\n  ): void {\n    this.onToolbarClick(command);\n    this._closePopover(closePopover, this._blockStylePopoverControl);\n  }\n\n  protected applyAlign(\n    command: Extract<ZEditorToolbarCommand, 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify'>,\n    closePopover?: () => void\n  ): void {\n    this.onToolbarClick(command);\n    this._closePopover(closePopover, this._alignPopoverControl);\n  }\n\n  protected insertEmoji(emoji: string): void {\n    this._editor?.chain().focus().insertContent(emoji).run();\n    this._refreshEditorState();\n  }\n\n  protected setEmojiCategory(categoryId: string): void {\n    this.activeEmojiCategoryId.set(categoryId);\n    this.emojiSearch.set('');\n  }\n\n  protected onEmojiPopoverControl(control: ZPopoverControl): void {\n    this._emojiPopoverControl = control;\n  }\n\n  protected onEmojiPopoverShow(): void {\n    setTimeout(() => {\n      const overlay = document.querySelector('.z-editor-emoji-popover');\n      const input = overlay?.querySelector('input');\n      input?.focus();\n    });\n  }\n\n  protected onBlockStylePopoverControl(control: ZPopoverControl): void {\n    this._blockStylePopoverControl = control;\n  }\n\n  protected onAlignPopoverControl(control: ZPopoverControl): void {\n    this._alignPopoverControl = control;\n  }\n\n  protected onTextColorPopoverControl(control: ZPopoverControl): void {\n    this._textColorPopoverControl = control;\n  }\n\n  protected onBackgroundColorPopoverControl(control: ZPopoverControl): void {\n    this._backgroundColorPopoverControl = control;\n  }\n\n  protected onSlashMenuPopoverControl(control: ZPopoverControl): void {\n    this._slashMenuPopoverControl = control;\n  }\n\n  protected onSlashMenuPopoverHide(): void {\n    this.slashMenuState.update(state => ({ ...state, visible: false }));\n    this.slashMenuActiveIndex.set(0);\n  }\n\n  protected onLinkPopoverControl(control: ZPopoverControl): void {\n    this._linkPopoverControl = control;\n  }\n\n  protected onLinkPopoverHide(): void {\n    this.linkPopoverState.update(state => ({ ...state, visible: false }));\n    this._linkAnchorElement = null;\n  }\n\n  protected onFloatingPopoverHide(): void {\n    // Yêu cầu cập nhật vị trí của floating toolbar khi popover đóng\n    this._requestBubbleMenuPositionUpdate();\n  }\n\n  protected setTextColor(color: string, closePopover?: () => void): void {\n    this._editor?.chain().focus().setColor(color).run();\n    this._closePopover(closePopover, this._textColorPopoverControl);\n    this._refreshEditorState();\n  }\n\n  protected setTextColorFromEvent(event: Event, closePopover?: () => void): void {\n    const input = event.target as HTMLInputElement | null;\n    this.setTextColor(input?.value ?? '', closePopover);\n  }\n\n  protected unsetTextColor(closePopover?: () => void): void {\n    this._editor?.chain().focus().unsetColor().run();\n    this._closePopover(closePopover, this._textColorPopoverControl);\n    this._refreshEditorState();\n  }\n\n  protected setBackgroundColor(color: string, closePopover?: () => void): void {\n    this._editor?.chain().focus().setBackgroundColor(color).run();\n    this._closePopover(closePopover, this._backgroundColorPopoverControl);\n    this._refreshEditorState();\n  }\n\n  protected setBackgroundColorFromEvent(event: Event, closePopover?: () => void): void {\n    const input = event.target as HTMLInputElement | null;\n    this.setBackgroundColor(input?.value ?? '', closePopover);\n  }\n\n  protected unsetBackgroundColor(closePopover?: () => void): void {\n    this._editor?.chain().focus().unsetBackgroundColor().run();\n    this._closePopover(closePopover, this._backgroundColorPopoverControl);\n    this._refreshEditorState();\n  }\n\n  private _closePopover(closePopover: (() => void) | undefined, control: ZPopoverControl | null): void {\n    const close = closePopover ?? (() => control?.close());\n\n    requestAnimationFrame(() => {\n      close();\n    });\n  }\n\n  private _handleSlashMenuKeyDown(event: KeyboardEvent): boolean {\n    if (!this.slashMenuState().visible) {\n      return false;\n    }\n\n    const commands = this.filteredSlashCommands();\n\n    if (event.key === 'Escape' || event.key === 'Tab') {\n      this._hideSlashMenu();\n      return event.key === 'Escape';\n    }\n\n    if (event.key === 'ArrowDown') {\n      event.preventDefault();\n      this.slashMenuActiveIndex.update(index => (commands.length ? (index + 1) % commands.length : 0));\n      this._scrollActiveSlashMenuItemIntoView();\n      return true;\n    }\n\n    if (event.key === 'ArrowUp') {\n      event.preventDefault();\n      this.slashMenuActiveIndex.update(index =>\n        commands.length ? (index - 1 + commands.length) % commands.length : 0\n      );\n      this._scrollActiveSlashMenuItemIntoView();\n      return true;\n    }\n\n    if (event.key === 'Enter') {\n      const item = commands[this.slashMenuActiveIndex()];\n      if (!item) {\n        return false;\n      }\n\n      event.preventDefault();\n      this.applySlashCommand(item);\n      return true;\n    }\n\n    return false;\n  }\n\n  private _handleEditorShortcutKeyDown(event: KeyboardEvent): boolean {\n    if (!this._editor || this.isDisabled() || this.zReadonly() || !this._isPrimaryShortcut(event)) {\n      return false;\n    }\n\n    const key = event.key.toLowerCase();\n    const command = this._getShortcutCommand(event, key);\n\n    if (!command || this._isToolbarCommandDisabled(command)) {\n      return false;\n    }\n\n    event.preventDefault();\n    this.onToolbarClick(command);\n    return true;\n  }\n\n  private _getShortcutCommand(event: KeyboardEvent, key: string): ZEditorToolbarCommand | null {\n    if (!event.shiftKey) {\n      switch (key) {\n        case 'b':\n          return 'bold';\n        case 'i':\n          return 'italic';\n        case 'u':\n          return 'underline';\n        case 'e':\n          return 'code';\n        case 'k':\n          return 'link';\n        case '\\\\':\n          return 'clearFormatting';\n        case 'z':\n          return 'undo';\n        case 'y':\n          return 'redo';\n      }\n    }\n\n    if (event.shiftKey && key === 's') {\n      return 'strike';\n    }\n\n    return null;\n  }\n\n  private _isPrimaryShortcut(event: KeyboardEvent): boolean {\n    return (event.ctrlKey || event.metaKey) && !event.altKey;\n  }\n\n  private _syncSlashMenu(): void {\n    const editor = this._editor;\n\n    if (!editor || !editor.isEditable || this.isDisabled() || this.zReadonly()) {\n      this._hideSlashMenu();\n      return;\n    }\n\n    const { selection } = editor.state;\n    if (!selection.empty) {\n      this._hideSlashMenu();\n      return;\n    }\n\n    const { $from } = selection;\n    const textBeforeCursor = $from.parent.textBetween(0, $from.parentOffset, '\\0', '\\0');\n    const match = /(?:^|\\s)\\/([^\\s/]*)$/.exec(textBeforeCursor);\n\n    if (!match) {\n      if (!this._isDismissedSlashStillPresent()) {\n        this._dismissedSlashMenu = null;\n      }\n      this._hideSlashMenu();\n      return;\n    }\n\n    const query = match[1] ?? '';\n    const from = selection.from - query.length - 1;\n    const to = selection.from;\n\n    if (\n      this._dismissedSlashMenu?.from === from &&\n      this._dismissedSlashMenu.to === to &&\n      this._dismissedSlashMenu.query === query\n    ) {\n      this._hideSlashMenu();\n      return;\n    }\n\n    if (this._dismissedSlashMenu) {\n      this._dismissedSlashMenu = null;\n    }\n\n    const coords = editor.view.coordsAtPos(selection.from);\n\n    this.slashMenuState.set({\n      visible: true,\n      query,\n      from,\n      to,\n      left: coords.left,\n      top: coords.bottom,\n    });\n\n    const commandsLength = this.filteredSlashCommands().length;\n    if (this.slashMenuActiveIndex() >= commandsLength) {\n      this.slashMenuActiveIndex.set(0);\n    }\n\n    requestAnimationFrame(() => {\n      if (this.slashMenuState().visible) {\n        this._alignFixedTrigger(this._slashMenuTrigger().nativeElement, coords.left, coords.bottom, state =>\n          this.slashMenuState.update(current => ({ ...current, ...state }))\n        );\n        const popoverControl = this._slashMenuPopoverControl;\n        if (popoverControl?.isVisible()) {\n          popoverControl.updatePosition();\n          this._scrollActiveSlashMenuItemIntoView();\n          return;\n        }\n\n        popoverControl?.show();\n        this._scrollActiveSlashMenuItemIntoView();\n      }\n    });\n  }\n\n  private _scrollActiveSlashMenuItemIntoView(): void {\n    requestAnimationFrame(() => {\n      const scrollHost = this._slashMenuScrollHost()?.nativeElement;\n      const activeIndex = this.slashMenuActiveIndex();\n      const lastIndex = this.filteredSlashCommands().length - 1;\n\n      if (!scrollHost) {\n        return;\n      }\n\n      if (activeIndex === 0) {\n        scrollHost.scrollTop = 0;\n        return;\n      }\n\n      if (activeIndex === lastIndex) {\n        scrollHost.scrollTop = scrollHost.scrollHeight - scrollHost.clientHeight;\n        return;\n      }\n\n      const activeItem = scrollHost?.querySelector('.z-editor-slash-menu-item-active');\n\n      if (!(activeItem instanceof HTMLElement)) {\n        return;\n      }\n\n      activeItem.scrollIntoView({ block: 'nearest' });\n    });\n  }\n\n  private _hideSlashMenu(): void {\n    if (!this.slashMenuState().visible) {\n      return;\n    }\n\n    this.slashMenuState.update(state => ({ ...state, visible: false }));\n    this.slashMenuActiveIndex.set(0);\n    this._slashMenuPopoverControl?.closeImmediate();\n  }\n\n  private _dismissCurrentSlashMenu(): void {\n    const { visible, query, from, to } = this.slashMenuState();\n\n    if (visible) {\n      this._dismissedSlashMenu = { query, from, to };\n      this._hideSlashMenu();\n      return;\n    }\n\n    const currentSlashMenuMatch = this._getCurrentSlashMenuMatch();\n    if (currentSlashMenuMatch) {\n      this._dismissedSlashMenu = currentSlashMenuMatch;\n    }\n  }\n\n  private _getCurrentSlashMenuMatch(): { query: string; from: number; to: number } | null {\n    const selection = this._editor?.state.selection;\n\n    if (!selection?.empty) {\n      return null;\n    }\n\n    const textBeforeCursor = selection.$from.parent.textBetween(0, selection.$from.parentOffset, '\\0', '\\0');\n    const match = /(?:^|\\s)\\/([^\\s/]*)$/.exec(textBeforeCursor);\n\n    if (!match) {\n      return null;\n    }\n\n    const query = match[1] ?? '';\n    return {\n      query,\n      from: selection.from - query.length - 1,\n      to: selection.from,\n    };\n  }\n\n  private _isDismissedSlashStillPresent(): boolean {\n    const dismissed = this._dismissedSlashMenu;\n    const doc = this._editor?.state.doc;\n\n    if (!dismissed || !doc || dismissed.from < 0 || dismissed.from >= doc.content.size) {\n      return false;\n    }\n\n    return doc.textBetween(dismissed.from, dismissed.from + 1, '\\0', '\\0') === '/';\n  }\n\n  private _toggleLink(): void {\n    const editor = this._editor;\n\n    if (!editor) {\n      return;\n    }\n\n    const { from, to } = editor.state.selection;\n    this._linkAnchorElement = null;\n    this._linkSelection = { from, to };\n    const href = String(editor.getAttributes('link')['href'] ?? '');\n    this.activeLinkHref.set(href);\n    this.linkUrl.set(href);\n    this._showLinkPopover();\n  }\n\n  protected closeLinkPopover(): void {\n    this.linkPopoverState.update(state => ({ ...state, visible: false }));\n    this._linkAnchorElement = null;\n    this._linkPopoverControl?.closeImmediate();\n  }\n\n  protected onLinkUrlChange(value: string | number | null): void {\n    this.linkUrl.set(String(value ?? ''));\n  }\n\n  protected applyLink(): void {\n    const editor = this._editor;\n    const href = this.normalizedLinkUrl();\n    const selection = this._linkSelection;\n\n    if (!editor || !href || !selection) {\n      return;\n    }\n\n    editor.chain().focus().setTextSelection(selection).extendMarkRange('link').setLink({ href }).run();\n    this.closeLinkPopover();\n    this._refreshEditorState();\n  }\n\n  private _normalizeUrl(value: string): string {\n    const trimmed = value.trim();\n\n    if (!trimmed) {\n      return '';\n    }\n\n    try {\n      const url = new URL(trimmed);\n      return url.protocol === 'http:' || url.protocol === 'https:' ? url.toString() : '';\n    } catch {\n      return '';\n    }\n  }\n\n  protected removeLink(): void {\n    const editor = this._editor;\n    const selection = this._linkSelection;\n\n    if (!editor || !selection) {\n      this.closeLinkPopover();\n      return;\n    }\n\n    editor.chain().focus().setTextSelection(selection).extendMarkRange('link').unsetLink().run();\n    this.closeLinkPopover();\n    this._refreshEditorState();\n  }\n\n  protected openActiveLink(): void {\n    const href = this.activeLinkHref();\n\n    if (!href) {\n      return;\n    }\n\n    window.open(href, '_blank', 'noopener,noreferrer');\n  }\n\n  private _handleEditorClick(view: EditorView, event: MouseEvent): boolean {\n    const target = event.target instanceof HTMLElement ? event.target : null;\n    const link = target?.closest('a[href]');\n\n    if (!(link instanceof HTMLAnchorElement) || this.isDisabled() || this.zReadonly()) {\n      return false;\n    }\n\n    if (event.detail >= 2) {\n      this.closeLinkPopover();\n      return false;\n    }\n\n    const position = view.posAtCoords({ left: event.clientX, top: event.clientY });\n    if (!position) {\n      return false;\n    }\n\n    event.preventDefault();\n    view.dispatch(view.state.tr.setSelection(TextSelection.near(view.state.doc.resolve(position.pos))));\n    this._editor?.chain().focus().run();\n\n    const selection = this._editor?.state.selection;\n    if (!selection) {\n      return true;\n    }\n\n    this._linkSelection = { from: selection.from, to: selection.to };\n    this._linkAnchorElement = link;\n    const href = link.href || link.getAttribute('href') || '';\n    this.activeLinkHref.set(href);\n    this.linkUrl.set(href);\n    this._showLinkPopover();\n    return true;\n  }\n\n  private _showLinkPopover(): void {\n    const rect = this._getLinkPopoverReferenceRect();\n\n    if (!rect) {\n      return;\n    }\n\n    this.linkPopoverState.set({\n      visible: true,\n      left: rect.left,\n      top: rect.top,\n      width: rect.width,\n      height: rect.height,\n    });\n\n    requestAnimationFrame(() => {\n      if (this.linkPopoverState().visible) {\n        this._alignFixedTrigger(this._linkPopoverTrigger().nativeElement, rect.left, rect.top, state =>\n          this.linkPopoverState.update(current => ({ ...current, ...state }))\n        );\n        this._linkPopoverControl?.show();\n      }\n    });\n  }\n\n  private _alignFixedTrigger(\n    trigger: HTMLElement,\n    targetLeft: number,\n    targetTop: number,\n    updatePosition: (position: { left: number; top: number }) => void\n  ): void {\n    const triggerRect = trigger.getBoundingClientRect();\n    const left = Number.parseFloat(trigger.style.left) || 0;\n    const top = Number.parseFloat(trigger.style.top) || 0;\n    const correctedLeft = left + targetLeft - triggerRect.left;\n    const correctedTop = top + targetTop - triggerRect.top;\n\n    updatePosition({\n      left: correctedLeft,\n      top: correctedTop,\n    });\n    trigger.style.left = `${correctedLeft}px`;\n    trigger.style.top = `${correctedTop}px`;\n  }\n\n  private _getLinkPopoverReferenceRect(): DOMRect | null {\n    const anchorRect = this._getLinkAnchorRect();\n    if (anchorRect) {\n      return anchorRect;\n    }\n\n    const editor = this._editor;\n    const selection = this._linkSelection;\n\n    if (!editor || !selection) {\n      return null;\n    }\n\n    return posToDOMRect(editor.view, selection.from, selection.to);\n  }\n\n  private _getLinkAnchorRect(): DOMRect | null {\n    const anchor = this._linkAnchorElement;\n\n    if (!anchor || !this._editorHost().nativeElement.contains(anchor)) {\n      return null;\n    }\n\n    const rect = anchor.getBoundingClientRect();\n    if (rect.width === 0 && rect.height === 0) {\n      return null;\n    }\n\n    return rect;\n  }\n\n  private _insertImage(): void {\n    const editor = this._editor;\n\n    if (!editor) {\n      return;\n    }\n\n    const selectionFrom = editor.state.selection.from;\n    const input = document.createElement('input');\n    input.type = 'file';\n    input.accept = 'image/*';\n    input.style.display = 'none';\n\n    const removeInput = (): void => {\n      input.remove();\n    };\n\n    input.addEventListener(\n      'change',\n      () => {\n        const file = input.files?.[0];\n        if (!file) {\n          removeInput();\n          return;\n        }\n\n        const reader = new FileReader();\n        reader.addEventListener('load', () => {\n          const src = typeof reader.result === 'string' ? reader.result : '';\n          if (src) {\n            editor.chain().focus().setTextSelection(selectionFrom).setImage({ src, alt: file.name }).run();\n          }\n\n          removeInput();\n        });\n        reader.addEventListener('error', removeInput);\n        reader.readAsDataURL(file);\n      },\n      { once: true }\n    );\n\n    document.body.appendChild(input);\n    input.click();\n  }\n\n  private _setTextAlign(alignment: 'left' | 'center' | 'right' | 'justify'): void {\n    const editor = this._editor;\n\n    if (!editor) {\n      return;\n    }\n\n    const command =\n      alignment === 'left' ? editor.chain().focus().unsetTextAlign() : editor.chain().focus().setTextAlign(alignment);\n    command.run();\n  }\n\n  private _collapseSelectionToAnchor(): void {\n    const editor = this._editor;\n\n    if (!editor) {\n      return;\n    }\n\n    const { from } = editor.state.selection;\n    editor.commands.setTextSelection(from);\n    editor.view.dispatch(editor.state.tr.setMeta('zEditorBubbleMenu', 'updatePosition'));\n  }\n\n  private _getTextStyleAttribute(attribute: 'color' | 'backgroundColor'): string {\n    this._selectionVersion();\n    return String(this._editor?.getAttributes('textStyle')[attribute] ?? '');\n  }\n\n  private _getActiveBlockStyle(): Extract<\n    ZEditorToolbarCommand,\n    'paragraph' | 'heading1' | 'heading2' | 'heading3' | 'heading4'\n  > {\n    const editor = this._editor;\n    this._selectionVersion();\n\n    if (!editor) {\n      return 'paragraph';\n    }\n\n    if (editor.isActive('heading', { level: 1 })) {\n      return 'heading1';\n    }\n\n    if (editor.isActive('heading', { level: 2 })) {\n      return 'heading2';\n    }\n\n    if (editor.isActive('heading', { level: 3 })) {\n      return 'heading3';\n    }\n\n    if (editor.isActive('heading', { level: 4 })) {\n      return 'heading4';\n    }\n\n    return 'paragraph';\n  }\n\n  private _getActiveAlign(): Extract<\n    ZEditorToolbarCommand,\n    'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify'\n  > {\n    const editor = this._editor;\n    this._selectionVersion();\n\n    if (!editor) {\n      return 'alignLeft';\n    }\n\n    return this._getActiveAlignFromEditor(editor);\n  }\n\n  private _getActiveAlignFromEditor(\n    editor: Editor\n  ): Extract<ZEditorToolbarCommand, 'alignLeft' | 'alignCenter' | 'alignRight' | 'alignJustify'> {\n    if (editor.isActive({ textAlign: 'center' })) {\n      return 'alignCenter';\n    }\n\n    if (editor.isActive({ textAlign: 'right' })) {\n      return 'alignRight';\n    }\n\n    if (editor.isActive({ textAlign: 'justify' })) {\n      return 'alignJustify';\n    }\n\n    return 'alignLeft';\n  }\n\n  private _createImageExtension(options: Record<string, unknown>): AnyExtension {\n    return ImageResize.extend({\n      addAttributes() {\n        return {\n          ...this.parent?.(),\n          textAlign: {\n            default: null,\n            parseHTML: element => element.style.textAlign || element.getAttribute('data-text-align') || null,\n            renderHTML: attributes => {\n              const textAlign = String(attributes['textAlign'] ?? '');\n              if (!textAlign) {\n                return {};\n              }\n\n              return {\n                'data-text-align': textAlign,\n                style: ZEditorComponent._getImageAlignStyle(textAlign),\n              };\n            },\n          },\n        };\n      },\n    }).configure(options);\n  }\n\n  private static _getImageAlignStyle(textAlign: string): string {\n    if (textAlign === 'center') {\n      return 'display: block; margin-left: auto; margin-right: auto;';\n    }\n\n    if (textAlign === 'right') {\n      return 'display: block; margin-left: auto; margin-right: 0;';\n    }\n\n    return 'display: block; margin-left: 0; margin-right: auto;';\n  }\n\n  private _placeholderConfig(): Partial<PlaceholderOptions> {\n    const { placeholder } = this.zTipTap();\n\n    if (!placeholder || typeof placeholder === 'string') {\n      return {};\n    }\n\n    const { mode: _mode, ...config } = placeholder;\n    return config;\n  }\n\n  private _placeholderMode(): 'firstLine' | 'everyLine' {\n    const { placeholder } = this.zTipTap();\n    return typeof placeholder === 'object' && placeholder.mode === 'firstLine' ? 'firstLine' : 'everyLine';\n  }\n}\n","<div [class]=\"wrapperClasses()\" [class.z-editor-disabled]=\"isDisabled()\" [class.z-editor-readonly]=\"zReadonly()\">\n  @if (zLabel()) {\n    <label [for]=\"editorId\" class=\"text-xs leading-none font-medium\" [class]=\"zLabelClass()\">\n      {{ zLabel() }}\n      @if (zRequired()) {\n        <span class=\"text-destructive! ml-0.5\">*</span>\n      }\n    </label>\n  }\n\n  <div [class]=\"editorClasses()\">\n    @if (showToolbar()) {\n      <div class=\"z-editor-toolbar\" role=\"toolbar\" [attr.aria-controls]=\"editorId\">\n        @for (item of toolbarItems(); track item.id) {\n          @switch (item.id) {\n            @case ('emoji') {\n              <button\n                type=\"button\"\n                class=\"z-editor-toolbar-button\"\n                z-popover\n                [zPopoverContent]=\"emojiPopover\"\n                zPosition=\"bottom-left\"\n                zTrigger=\"click\"\n                zClass=\"z-editor-emoji-popover\"\n                (zControl)=\"onEmojiPopoverControl($event)\"\n                (zShow)=\"onEmojiPopoverShow()\"\n                [disabled]=\"item.disabled\"\n                [attr.aria-label]=\"item.label\"\n                [attr.title]=\"item.label\">\n                <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n              </button>\n            }\n            @case ('blockStyle') {\n              <button\n                type=\"button\"\n                class=\"z-editor-toolbar-button\"\n                z-popover\n                [zPopoverContent]=\"blockStylePopover\"\n                zPosition=\"bottom-left\"\n                zTrigger=\"click\"\n                zClass=\"z-editor-menu-popover\"\n                (zControl)=\"onBlockStylePopoverControl($event)\"\n                (zHideStart)=\"onFloatingPopoverHide()\"\n                [disabled]=\"item.disabled\"\n                [attr.aria-label]=\"item.label\"\n                [attr.title]=\"item.label\">\n                <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n              </button>\n            }\n            @case ('textColor') {\n              @let textColor = activeTextColor();\n              <button\n                type=\"button\"\n                class=\"z-editor-toolbar-button\"\n                z-popover\n                [zPopoverContent]=\"textColorPopover\"\n                zPosition=\"bottom-left\"\n                zTrigger=\"click\"\n                zClass=\"z-editor-color-popover\"\n                (zControl)=\"onTextColorPopoverControl($event)\"\n                (zHideStart)=\"onFloatingPopoverHide()\"\n                [disabled]=\"item.disabled\"\n                [attr.aria-label]=\"item.label\"\n                [attr.title]=\"item.label\">\n                <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n                <span class=\"z-editor-color-indicator\" [style.background]=\"textColor\"></span>\n              </button>\n            }\n            @case ('backgroundColor') {\n              @let bgColor = activeBackgroundColor();\n              <button\n                type=\"button\"\n                class=\"z-editor-toolbar-button\"\n                z-popover\n                [zPopoverContent]=\"backgroundColorPopover\"\n                zPosition=\"bottom-left\"\n                zTrigger=\"click\"\n                zClass=\"z-editor-color-popover\"\n                (zControl)=\"onBackgroundColorPopoverControl($event)\"\n                (zHideStart)=\"onFloatingPopoverHide()\"\n                [disabled]=\"item.disabled\"\n                [attr.aria-label]=\"item.label\"\n                [attr.title]=\"item.label\">\n                <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n                <span class=\"z-editor-color-indicator\" [style.background]=\"bgColor\"></span>\n              </button>\n            }\n            @case ('align') {\n              <button\n                type=\"button\"\n                class=\"z-editor-toolbar-button\"\n                z-popover\n                [zPopoverContent]=\"alignPopover\"\n                zPosition=\"bottom-left\"\n                zTrigger=\"click\"\n                zClass=\"z-editor-menu-popover\"\n                (zControl)=\"onAlignPopoverControl($event)\"\n                (zHideStart)=\"onFloatingPopoverHide()\"\n                [disabled]=\"item.disabled\"\n                [attr.aria-label]=\"item.label\"\n                [attr.title]=\"item.label\">\n                <i z-icon [zType]=\"activeAlignIcon()\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n              </button>\n            }\n            @default {\n              <button\n                type=\"button\"\n                class=\"z-editor-toolbar-button\"\n                [class.z-editor-toolbar-button-active]=\"item.active\"\n                [disabled]=\"item.disabled\"\n                [attr.aria-label]=\"item.label\"\n                [attr.title]=\"item.label\"\n                (click)=\"onToolbarClick(item.id)\">\n                <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n              </button>\n            }\n          }\n        }\n      </div>\n    }\n\n    <div\n      #editorHost\n      [id]=\"editorId\"\n      class=\"z-editor-content\"\n      role=\"textbox\"\n      [attr.aria-multiline]=\"true\"\n      [attr.aria-readonly]=\"isDisabled() || zReadonly()\"></div>\n  </div>\n\n  @if (hasError()) {\n    <p class=\"text-destructive animate-in fade-in slide-in-from-top-1 m-0 text-xs duration-200\">\n      {{ errorMessage() }}\n    </p>\n  }\n\n  <ng-template #emojiPopover>\n    @let emojiCategoryLabel =\n      emojiSearchQuery() ? ('i18n_z_ui_emoji_search_results' | translate) : (activeEmojiCategoryLabel() | translate);\n    @let activeCategoryId = activeEmojiCategoryId();\n    <div class=\"z-editor-emoji-sheet\">\n      <div class=\"z-editor-emoji-header\">\n        <div class=\"z-editor-emoji-title mb-1\">\n          <span class=\"z-editor-emoji-title-dot\" aria-hidden=\"true\"></span>\n          <span>{{ emojiCategoryLabel }}</span>\n        </div>\n        <z-input\n          class=\"z-editor-emoji-search\"\n          zSize=\"sm\"\n          [zSearch]=\"true\"\n          [zDebounce]=\"150\"\n          [zPlaceholder]=\"'i18n_z_ui_emoji_search_placeholder' | translate\"\n          [ngModel]=\"emojiSearch()\"\n          (zOnSearch)=\"emojiSearch.set($any($event))\" />\n      </div>\n      <div class=\"z-editor-emoji-body\">\n        @if (hasEmojiResults()) {\n          <div class=\"z-editor-emoji-grid\">\n            @for (emoji of activeEmojis(); track emoji) {\n              <button\n                type=\"button\"\n                class=\"z-editor-emoji-button\"\n                [attr.aria-label]=\"emoji\"\n                (click)=\"insertEmoji($any(emoji))\">\n                {{ emoji }}\n              </button>\n            }\n          </div>\n        } @else {\n          <div class=\"z-editor-emoji-empty\">\n            <span class=\"z-editor-emoji-empty-icon\" aria-hidden=\"true\">\n              <i z-icon zType=\"lucideSearchX\" zSize=\"14\" [zStrokeWidth]=\"2\"></i>\n            </span>\n            <span>{{ 'i18n_z_ui_emoji_no_results' | translate }}</span>\n          </div>\n        }\n      </div>\n      <div class=\"z-editor-emoji-footer\" role=\"tablist\">\n        @for (category of emojiCategories; track category.id) {\n          <button\n            type=\"button\"\n            role=\"tab\"\n            class=\"z-editor-emoji-footer-button cursor-pointer!\"\n            [class.z-editor-emoji-footer-button-active]=\"category.id === activeCategoryId\"\n            [attr.aria-label]=\"category.labelKey | translate\"\n            [attr.aria-selected]=\"category.id === activeCategoryId\"\n            [attr.title]=\"category.labelKey | translate\"\n            (click)=\"setEmojiCategory(category.id)\">\n            <i z-icon [zType]=\"category.icon\" zSize=\"15\" [zStrokeWidth]=\"2\"></i>\n          </button>\n        }\n      </div>\n    </div>\n  </ng-template>\n\n  <ng-template #blockStylePopover let-close=\"close\">\n    <div class=\"z-editor-menu-list\">\n      @for (option of blockStyleOptions; track option.command) {\n        <button\n          type=\"button\"\n          class=\"z-editor-menu-item\"\n          [class.z-editor-menu-item-active]=\"activeBlockStyle() === option.command\"\n          (mousedown)=\"$event.preventDefault()\"\n          (click)=\"applyBlockStyle(option.command, close)\">\n          <i z-icon [zType]=\"option.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n          <span>{{ option.label }}</span>\n        </button>\n      }\n    </div>\n  </ng-template>\n\n  <ng-template #alignPopover let-close=\"close\">\n    <div class=\"z-editor-menu-list\">\n      @for (option of alignOptions; track option.command) {\n        <button\n          type=\"button\"\n          class=\"z-editor-menu-item\"\n          [class.z-editor-menu-item-active]=\"activeAlign() === option.command\"\n          (mousedown)=\"$event.preventDefault()\"\n          (click)=\"applyAlign(option.command, close)\">\n          <i z-icon [zType]=\"option.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n          <span>{{ option.label }}</span>\n        </button>\n      }\n    </div>\n  </ng-template>\n\n  <ng-template #textColorPopover let-close=\"close\">\n    @let currentTextColor = activeTextColor();\n    <div class=\"z-editor-color-grid\">\n      @for (color of textColorSwatches; track color) {\n        <button\n          type=\"button\"\n          class=\"z-editor-color-swatch\"\n          [class.z-editor-color-swatch-active]=\"currentTextColor === color\"\n          [style.background]=\"color\"\n          [attr.aria-label]=\"'Text color ' + color\"\n          (mousedown)=\"$event.preventDefault()\"\n          (click)=\"setTextColor(color, close)\"></button>\n      }\n      <label class=\"z-editor-color-custom\">\n        <input type=\"color\" [value]=\"currentTextColor\" (input)=\"setTextColorFromEvent($event, close)\" />\n        {{ currentTextColor }}\n      </label>\n      <button\n        type=\"button\"\n        z-button\n        zType=\"outline\"\n        zSize=\"sm\"\n        class=\"z-editor-color-reset\"\n        (mousedown)=\"$event.preventDefault()\"\n        (click)=\"unsetTextColor(close)\">\n        Reset\n      </button>\n    </div>\n  </ng-template>\n\n  <ng-template #backgroundColorPopover let-close=\"close\">\n    @let currentBgColor = activeBackgroundColor();\n    <div class=\"z-editor-color-grid\">\n      @for (color of backgroundColorSwatches; track color) {\n        <button\n          type=\"button\"\n          class=\"z-editor-color-swatch\"\n          [class.z-editor-color-swatch-active]=\"currentBgColor === color\"\n          [style.background]=\"color\"\n          [attr.aria-label]=\"'Background color ' + color\"\n          (mousedown)=\"$event.preventDefault()\"\n          (click)=\"setBackgroundColor(color, close)\"></button>\n      }\n      <label class=\"z-editor-color-custom\">\n        <input type=\"color\" [value]=\"currentBgColor\" (input)=\"setBackgroundColorFromEvent($event, close)\" />\n        {{ currentBgColor }}\n      </label>\n      <button\n        type=\"button\"\n        z-button\n        zType=\"outline\"\n        zSize=\"sm\"\n        class=\"z-editor-color-reset\"\n        (mousedown)=\"$event.preventDefault()\"\n        (click)=\"unsetBackgroundColor(close)\">\n        Reset\n      </button>\n    </div>\n  </ng-template>\n\n  <div #floatingToolbar class=\"z-editor-floating-toolbar\" role=\"toolbar\" [attr.aria-controls]=\"editorId\">\n    @for (item of floatingToolbarItems(); track item.id) {\n      @switch (item.id) {\n        @case ('blockStyle') {\n          <button\n            type=\"button\"\n            class=\"z-editor-toolbar-button\"\n            z-popover\n            [zPopoverContent]=\"blockStylePopover\"\n            zPosition=\"bottom-left\"\n            zTrigger=\"click\"\n            zClass=\"z-editor-menu-popover\"\n            (zControl)=\"onBlockStylePopoverControl($event)\"\n            (zHideStart)=\"onFloatingPopoverHide()\"\n            [disabled]=\"item.disabled\"\n            [attr.aria-label]=\"item.label\"\n            [attr.title]=\"activeBlockStyleLabel()\"\n            (mousedown)=\"$event.preventDefault()\">\n            <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n          </button>\n        }\n        @case ('textColor') {\n          @let textColor = activeTextColor();\n          <button\n            type=\"button\"\n            class=\"z-editor-toolbar-button\"\n            z-popover\n            [zPopoverContent]=\"textColorPopover\"\n            zPosition=\"bottom-left\"\n            zTrigger=\"click\"\n            zClass=\"z-editor-color-popover\"\n            (zControl)=\"onTextColorPopoverControl($event)\"\n            (zHideStart)=\"onFloatingPopoverHide()\"\n            [disabled]=\"item.disabled\"\n            [attr.aria-label]=\"item.label\"\n            [attr.title]=\"item.label\"\n            (mousedown)=\"$event.preventDefault()\">\n            <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n            <span class=\"z-editor-color-indicator\" [style.background]=\"textColor\"></span>\n          </button>\n        }\n        @case ('backgroundColor') {\n          @let bgColor = activeBackgroundColor();\n          <button\n            type=\"button\"\n            class=\"z-editor-toolbar-button\"\n            z-popover\n            [zPopoverContent]=\"backgroundColorPopover\"\n            zPosition=\"bottom-left\"\n            zTrigger=\"click\"\n            zClass=\"z-editor-color-popover\"\n            (zControl)=\"onBackgroundColorPopoverControl($event)\"\n            (zHideStart)=\"onFloatingPopoverHide()\"\n            [disabled]=\"item.disabled\"\n            [attr.aria-label]=\"item.label\"\n            [attr.title]=\"item.label\"\n            (mousedown)=\"$event.preventDefault()\">\n            <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n            <span class=\"z-editor-color-indicator\" [style.background]=\"bgColor\"></span>\n          </button>\n        }\n        @case ('align') {\n          <button\n            type=\"button\"\n            class=\"z-editor-toolbar-button\"\n            z-popover\n            [zPopoverContent]=\"alignPopover\"\n            zPosition=\"bottom-left\"\n            zTrigger=\"click\"\n            zClass=\"z-editor-menu-popover\"\n            (zControl)=\"onAlignPopoverControl($event)\"\n            (zHideStart)=\"onFloatingPopoverHide()\"\n            [disabled]=\"item.disabled\"\n            [attr.aria-label]=\"item.label\"\n            [attr.title]=\"activeAlignLabel()\"\n            (mousedown)=\"$event.preventDefault()\">\n            <i z-icon [zType]=\"activeAlignIcon()\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n          </button>\n        }\n        @default {\n          <button\n            type=\"button\"\n            class=\"z-editor-toolbar-button\"\n            z-tooltip\n            [zContent]=\"item.tooltip\"\n            zPosition=\"top\"\n            [zAlwaysShow]=\"true\"\n            [zDisabled]=\"item.disabled || !item.shortcut\"\n            [class.z-editor-toolbar-button-active]=\"item.active\"\n            [disabled]=\"item.disabled\"\n            [attr.aria-label]=\"item.label\"\n            [attr.title]=\"item.label\"\n            (mousedown)=\"$event.preventDefault()\"\n            (click)=\"onFloatingToolbarClick(item.id)\">\n            <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n          </button>\n        }\n      }\n    }\n  </div>\n\n  <span\n    #slashMenuTrigger\n    class=\"z-editor-slash-menu-trigger\"\n    z-popover\n    [zPopoverContent]=\"slashMenuPopover\"\n    zTrigger=\"manual\"\n    zPosition=\"bottom-left\"\n    zClass=\"z-editor-slash-popover\"\n    [zOffset]=\"4\"\n    [zPopoverWidth]=\"300\"\n    [style.left.px]=\"slashMenuState().left\"\n    [style.top.px]=\"slashMenuState().top\"\n    (zControl)=\"onSlashMenuPopoverControl($event)\"\n    (zHide)=\"onSlashMenuPopoverHide()\"></span>\n\n  <ng-template #slashMenuPopover>\n    @let slashActiveIndex = slashMenuActiveIndex();\n    <div class=\"z-editor-slash-menu-shell\">\n      <div #slashMenuScrollHost class=\"z-editor-slash-menu-scrollbar\">\n        <div class=\"z-editor-slash-menu\" role=\"listbox\" [attr.aria-controls]=\"editorId\">\n          @for (item of filteredSlashCommands(); track item.id) {\n            @if (item.showGroupLabel) {\n              <div class=\"z-editor-slash-menu-group\">\n                {{ item.group }}\n              </div>\n            }\n            <button\n              type=\"button\"\n              class=\"z-editor-slash-menu-item\"\n              role=\"option\"\n              [class.z-editor-slash-menu-item-active]=\"$index === slashActiveIndex\"\n              [attr.aria-selected]=\"$index === slashActiveIndex\"\n              (mousedown)=\"$event.preventDefault()\"\n              (click)=\"applySlashCommand(item)\">\n              <i z-icon [zType]=\"item.icon\" zSize=\"16\" [zStrokeWidth]=\"2.5\"></i>\n              <span class=\"z-editor-slash-menu-copy\">\n                <span class=\"z-editor-slash-menu-label\">{{ item.label }}</span>\n              </span>\n            </button>\n          } @empty {\n            <div class=\"z-editor-slash-menu-empty\">\n              <i z-icon zType=\"lucideSearchX\" zSize=\"28\" [zStrokeWidth]=\"1.8\"></i>\n              <span>{{ 'i18n_z_ui_editor_no_commands' | translate }}</span>\n            </div>\n          }\n        </div>\n      </div>\n      <div class=\"z-editor-slash-menu-footer\" aria-hidden=\"true\">\n        <span>\n          <kbd>↑↓</kbd>\n          {{ 'i18n_z_ui_editor_shortcut_navigate' | translate }}\n        </span>\n        <span>\n          <kbd>Esc</kbd>\n          {{ 'i18n_z_ui_editor_shortcut_abort' | translate }}\n        </span>\n        <span>\n          <kbd>↵</kbd>\n          {{ 'i18n_z_ui_editor_shortcut_select' | translate }}\n        </span>\n      </div>\n    </div>\n  </ng-template>\n\n  <span\n    #linkPopoverTrigger\n    class=\"z-editor-link-popover-trigger\"\n    z-popover\n    [zPopoverContent]=\"linkPopover\"\n    zTrigger=\"manual\"\n    zPosition=\"bottom-left\"\n    zClass=\"z-editor-link-popover\"\n    [zOffset]=\"6\"\n    [zPopoverWidth]=\"320\"\n    [style.left.px]=\"linkPopoverState().left\"\n    [style.top.px]=\"linkPopoverState().top\"\n    [style.width.px]=\"linkPopoverState().width\"\n    [style.height.px]=\"linkPopoverState().height\"\n    (zControl)=\"onLinkPopoverControl($event)\"\n    (zHide)=\"onLinkPopoverHide()\"></span>\n\n  <ng-template #linkPopover>\n    <div class=\"z-editor-link-popover-content\">\n      <ng-template #linkPrefix>\n        <z-icon zType=\"lucideLink\" zSize=\"16\" class=\"text-muted-foreground\" />\n      </ng-template>\n      <z-input\n        zType=\"url\"\n        zSize=\"sm\"\n        class=\"z-editor-link-popover-input\"\n        [zPrefix]=\"linkPrefix\"\n        zPlaceholder=\"https://example.com\"\n        [zValidators]=\"linkValidators\"\n        [ngModel]=\"linkUrl()\"\n        (ngModelChange)=\"onLinkUrlChange($event)\"\n        (zOnEnter)=\"applyLink()\" />\n      <div class=\"z-editor-link-popover-actions\">\n        <button\n          type=\"button\"\n          z-button\n          zType=\"ghost\"\n          zSize=\"sm\"\n          [zDisabled]=\"!canApplyLink()\"\n          (click)=\"applyLink()\"\n          aria-label=\"Apply link\">\n          <z-icon zType=\"lucideCheck\" zSize=\"16\" [zStrokeWidth]=\"2.5\" />\n        </button>\n        <button\n          type=\"button\"\n          z-button\n          zType=\"ghost\"\n          zSize=\"sm\"\n          [zDisabled]=\"!activeLinkHref()\"\n          (click)=\"openActiveLink()\"\n          aria-label=\"Open link\">\n          <z-icon zType=\"lucideExternalLink\" zSize=\"16\" [zStrokeWidth]=\"2.5\" />\n        </button>\n        <button\n          type=\"button\"\n          z-button\n          zType=\"ghost-destructive\"\n          zSize=\"sm\"\n          [zDisabled]=\"!activeLinkHref()\"\n          (click)=\"removeLink()\"\n          aria-label=\"Remove link\">\n          <z-icon zType=\"lucideUnlink\" zSize=\"16\" [zStrokeWidth]=\"2.5\" />\n        </button>\n      </div>\n    </div>\n  </ng-template>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}