import { VegaRTEAnnotations } from '../../../interface';
import type { RTEBlock } from '../../blocks/block.abstract';
import type { RTENode } from '../../nodes/node.abstract';
import { RTEFilterStyles, RTEFilterStylesStrategy } from '../filter-styles-strategy.abstract';
/**
 * The TitleHeadingNodeFilterStylesStrategy is responsible for filtering styles from text nodes that are children of title and heading blocks.
 * In title and heading blocks, the text nodes will have a default bold style.
 */
export declare class TitleHeadingNodeFilterStylesStrategy extends RTEFilterStylesStrategy {
  static BOLD_STYLES: RTEFilterStyles;
  static NON_HEADING_TITLE_ELEMENT_TAGS: string[];
  protected stylesToBeFiltered: RTEFilterStyles;
  protected elementTagName: string;
  private parentBlockTypes;
  private parentElementSelectors;
  private toBeCheckedSelector;
  /**
   * Don't run filterAnnotations method, because already handle it in text format filter strategy.
   *
   * @inheritDoc
   */
  filterAnnotations(annotations: VegaRTEAnnotations): VegaRTEAnnotations;
  /**
   * Determines whether the dto instance is text node and its parent block is a heading or title.
   *
   * @param {RTEBlock | RTENode} blockOrNodeInstance - The block or node instance to check.
   * @returns {boolean} - True if the instance is a text node and its parent block is a heading or title, false otherwise.
   */
  canFilter(blockOrNodeInstance: RTEBlock | RTENode): boolean;
  /**
   * Check if the node is a text node and its parent block is a heading or title.
   *
   * @param {string} blockOrNodeClassName - The class name of the block or node instance to check.
   * @param {HTMLElement} element - The HTML element of the node instance.
   * @returns {boolean} True if the node is a text node and its parent block is a heading or title, false otherwise.
   */
  canRefill(blockOrNodeClassName: string, element: HTMLElement): boolean;
  /**
   * @inheritDoc
   */
  toCssText(): string;
  /**
   * Checks if the parent block of the given node instance is a heading or title.
   *
   * @param {RTENode | RTEBlock} blockOrNodeInstance - The node instance to check.
   * @returns {boolean} True if the parent block is a heading or title, false otherwise.
   */
  private parentBlockIsHeadingOrTitle;
  /**
   * Check if the element is a descendant of a heading or title element.
   * Traverses upward through the DOM, stopping at the block element or body element
   * to avoid unbounded traversal to the document root.
   *
   * <h1><span>bold text</span></h1>
   * <h1><a><span>link text</span></a></h1>
   * <h1><a><b><span>nested text</span></b></a></h1>
   *
   * @param {HTMLElement} element - The element to check.
   * @returns {boolean} True if the element is a descendant of a heading or title, false otherwise.
   */
  private isHeadingOrTitleChild;
}
