import { AnnotationStyle, RTERenderContext } from '../../interface';
import { Nullable } from '../../../../types/general';
import { Annotation } from './annotation.abstract';
export declare enum NodeAnnotationTypeEnum {
  BOLD = "BOLD",
  ITALIC = "ITALIC",
  UNDERLINE = "UNDERLINE",
  STRIKETHROUGH = "STRIKETHROUGH",
  SELECTION_RANGE = "SELECTION_RANGE",
  IMAGE = "IMAGE",
  CODE = "CODE",
  TEXT_COLOR = "TEXT_COLOR",
  LINK = "LINK",
  INLINE_HTML = "INLINE_HTML",
  PLAIN_TEXT = "PLAIN_TEXT"
}
/**
 * Abstract class for all annotations
 */
export declare abstract class NodeAnnotation extends Annotation {
  abstract readonly type: NodeAnnotationTypeEnum;
  /**
   * Generate the style for the annotation
   *
   * @param {RTERenderContext} [options] - Options for rendering the annotation style.
   * @returns {Nullable<AnnotationStyle>} - Style for the annotation.
   */
  abstract renderStyle(options?: RTERenderContext): Nullable<AnnotationStyle>;
  /**
   * Generate the class for the annotation
   *
   * @param {RTERenderContext} [options] - Options for rendering the annotation class.
   * @returns {Nullable<string>} - Class for the annotation.
   */
  abstract renderClass(options?: RTERenderContext): Nullable<string>;
  /**
   * Generate the JSON representation of the annotation
   *
   * @returns {Nullable<Record<string, unknown>>} JSON representation of the annotation
   */
  abstract toJSON(): Nullable<Record<string, unknown>>;
  abstract clone(): NodeAnnotation;
}
