import { BaseRenderer } from '../../../helpers/rte-manager/dto-renderer-manager';
import { ClassType } from '../../../types/class.type';
import { RTEBlock } from '../dto/blocks/block.abstract';
import { RTENode } from '../dto/nodes/node.abstract';
import { VegaRTEToolbarButtonRenderer } from './base-toolbar-button-renderer';
import { ElementToDTOStrategy } from '../slimmers/controllers/helper/element-to-dto-strategy/element-to-dto-strategy.abstract';
import { Nullable } from '../../../types/general';
import { RTEExtensionContext } from '../interface';
import { ActionHandleStrategy } from '../dto/action-handle-strategies/action-handle-strategy.abstract';
import { ModifyContentAction } from '../dto/actions/modify-content-action.abstract';
import type { VegaRTEContent } from '../dto/content-state';
import { ActionHandlerInterceptor } from '../dto/action-handle-strategies/action-handle-interceptor.abstract';
import { AnnotationGeneratorStrategyAbstract } from '../slimmers/controllers/helper/element-to-dto-strategy/annotation-handler/annotation-generator-strategy.abstract';
import { AnnotationAction } from '../dto/actions/annotation-action.abstract';
import { RTEFilterStylesStrategy } from '../dto/filter-styles-strategies/filter-styles-strategy.abstract';
/**
 * Abstract class for Vega Rich Text Editor extensions.
 */
export declare abstract class VegaRTEExtension {
  /**
   * The context of the RTE extension, which may include references to the host editor and other relevant information.
   */
  protected extensionContext: Nullable<RTEExtensionContext>;
  private hasCustomStylesRenderers;
  /**
   * Registers an action handle strategy for a specific node or block class.
   *
   * @param {string} nodeOrBlockClassName - The name of the node or block class.
   * @param {string} actionType - The type of the action.
   * @param {ActionHandleStrategy<ModifyContentAction | AnnotationAction, RTENode | RTEBlock | VegaRTEContent>} strategy - The strategy to register.
   */
  static registerActionHandleStrategy(nodeOrBlockClassName: string, actionType: string, strategy: ActionHandleStrategy<ModifyContentAction | AnnotationAction, RTENode | RTEBlock | VegaRTEContent>): void;
  /**
   * Registers an action handler interceptor for a specific node or block class.
   *
   * @param {string} nodeOrBlockClassName - The name of the node or block class.
   * @param {string} actionType - The type of the action.
   * @param {ActionHandlerInterceptor<ModifyContentAction, RTENode | RTEBlock | VegaRTEContent>} strategy - The interceptor to register.
   */
  static registerActionHandlerInterceptor(nodeOrBlockClassName: string, actionType: string, strategy: ActionHandlerInterceptor<ModifyContentAction, RTENode | RTEBlock | VegaRTEContent>): void;
  /**
   * Registers a filter styles strategy for a specific block or node class.
   *
   * @param {string} blockOrNodeClassName - The name of the block or node class.
   * @param {RTEFilterStylesStrategy} strategy - The filter styles strategy to register.
   */
  static registerFilterStylesStrategy(blockOrNodeClassName: string, strategy: RTEFilterStylesStrategy): void;
  /**
   * Initializes the RTE extension with the provided context.
   *
   * @param {RTEExtensionContext} context - The context of the RTE extension.
   */
  initialExtension(context: RTEExtensionContext): void;
  /**
   * Callback method invoked when the extension is destroyed.
   * Override this method to perform any necessary cleanup.
   */
  destroyExtension(): void;
  /**
   * Collect custom styles for the extension renderers.
   * If custom nodes have special styles, override this method to provide the styles.
   *
   * @returns {string} - The custom styles as a string.
   */
  collectExtensionRendererStyles(): string;
  /**
   * Register a node type with the extension.
   *
   * @param {string} type - The type of the node or block. The type should be a string that uniquely identifies the node or block.
   * @param {ClassType<RTEBlock | RTENode>} DTOClass - The DTO class to register.
   */
  protected registerNode(type: string, DTOClass: ClassType<RTEBlock | RTENode>): void;
  /**
   * Register a renderer for a node type with the extension.
   *
   * @param {string} type - The type of the node or block. The type should be a string that uniquely identifies the node or block.
   * @param {BaseRenderer} renderer - The renderer to register.
   */
  protected registerRenderer(type: string, renderer: BaseRenderer): void;
  /**
   * Register a toolbar button renderer for the extension.
   *
   * @param {string} type - The type of the toolbar button.
   * @param {VegaRTEToolbarButtonRenderer} renderer - The renderer to register.
   */
  protected registerToolbarButtonRenderer(type: string, renderer: VegaRTEToolbarButtonRenderer): void;
  /**
   * This is a helper method that utilizes RTEUtils to register common strategies.
   * Call the method with the class name of the block to make it support basic strategies like:
   * - Delete children
   * - Append the children
   * - Delete the block children content
   *
   * @param {string} blockClassName - The class name of the block to register strategies for.
   */
  protected registerBlockBasicStrategies(blockClassName: string): void;
  /**
   * Unregister a strategy for a specific action type and block class if not need.
   *
   * @param {string} actionType - The special action type or the action class name.
   * @param {string} blockClassName - The class name of the block to unregister the strategy for.
   */
  protected unRegisterStrategy(actionType: string, blockClassName: string): void;
  /**
   * Unregister a strategy for a specific action type and block class if not need.
   *
   * @param {string} actionType - The special action type or the action class name.
   * @param {string} blockClassName - The class name of the block to unregister the strategy for.
   * @param {ActionHandlerInterceptor<ModifyContentAction, RTENode | RTEBlock | VegaRTEContent>} strategy - The interceptor to unregister.
   */
  protected unRegisterInterceptor(actionType: string, blockClassName: string, strategy: ActionHandlerInterceptor<ModifyContentAction, RTENode | RTEBlock | VegaRTEContent>): void;
  /**
   * Register an element to block DTO class strategy.
   *
   * @param {ElementToDTOStrategy} strategy - The strategy to register.
   */
  protected registerElementToBlockDTOClassStrategy(strategy: ElementToDTOStrategy): void;
  /**
   * Register an element to node DTO class strategy.
   *
   * @param {ElementToDTOStrategy} strategy - The strategy to register.
   */
  protected registerElementToNodeDTOClassStrategy(strategy: ElementToDTOStrategy): void;
  /**
   * Get the registered element to node DTO class strategies.
   *
   * @returns {ElementToDTOStrategy[]} - The registered element to node DTO class strategies.
   */
  protected getElementToNodeDTOClassStrategies(): ElementToDTOStrategy[];
  /**
   * Register a custom annotation handler for HTML to DTO conversion.
   *
   * @param {AnnotationGeneratorStrategyAbstract} handler - The annotation handler to register.
   */
  protected registerAnnotationHandler(handler: AnnotationGeneratorStrategyAbstract): void;
}
