import { VegaSlimmer } from '../../vega-slimmer/vega-slimmer-core';
import { StringFormatStrategy } from '../formatter/string-formatter/string-format-strategy.abstract';
import { Nullable } from '../../types/general';
/** The `StringInputFormatterSlimmer` class in TypeScript is used to format input values based on specified strategies and handle events like keydown, blur, and focus. */
export declare abstract class StringInputFormatterSlimmer extends VegaSlimmer {
  protected host: HTMLElement;
  protected disableCopyPaste: boolean;
  private inputFormatStrategy;
  private blurFormatStrategy;
  private inputElement;
  protected abstract getInputElementRef: () => Nullable<HTMLInputElement>;
  protected abstract getInputModeStrategy: () => Nullable<StringFormatStrategy>;
  protected abstract getBlurModeStrategy: () => Nullable<StringFormatStrategy>;
  /**
   * Component lifecycle - componentDidRender
   */
  componentDidRender(): void;
  /**
   * The setup function initializes input element event listeners based on input and blur format strategies.
   */
  setup(): void;
  /**
   * It removes the event listener from the input element.
   */
  destroy(): void;
  /**
   * Format string and update input field
   */
  formatValueAfterValueChange(): void;
  /**
   * Format the value by input strategy and blur strategy when formatter config change.
   */
  private formatValueAfterSetup;
  /**
   * restore input value
   *
   * @param {InputEvent} e - focus event
   */
  private onFocus;
  /**
   * A function updates the value of the input element by inputFormatStrategy output.
   *
   * @param {InputEvent} e - blur event
   */
  private onBlur;
  /**
   * The function `isOnFocus` checks if the input element is currently focused.
   *
   * @returns {boolean} The method `isOnFocus()` is returning a `Nullable<boolean>`, which means it can return
   * either a boolean value or null. The method checks if the `inputElement` is currently focused and
   * returns true if it is focused, false if it is not focused, or null if the `inputElement` is not
   * found.
   */
  private isOnFocus;
  /**
   * A function updates the value of the input element by inputFormatStrategy output.
   *
   * @param {InputEvent} e - input event
   */
  private onKeyDown;
  /**
   * A function to update the value of the input element by inputFormatStrategy output when paste is applied.
   *
   * @param {ClipboardEvent} e - paste event
   */
  private onPaste;
  /**
   * Update input value
   *
   * @param {string} rawValue - the original value
   * @param {string} maskedValue - masked value
   */
  private updateNativeInputValue;
  /**
   * Update the host value
   *
   * @param {string} rawValue - the original value
   * @param {string} maskedValue - the masked value
   */
  private updateComponentValue;
  /**
   * Updated the input caret position after the mask format
   *
   * @param {string} rawValue - The original input value
   * @param {Nullable<number>} caretPosition - The current input caret position
   */
  private updateInputCaretPosition;
  /**
   * Format the value based on the input and blur format strategies.
   *
   * @param {string} rawValue - The original input value
   * @param {FormatTrigger} triggeredBy - The trigger of the format
   * @param {{ caretPosition?: number }} options - The options for the format
   * @param {number} options.caretPosition - The current input caret position
   */
  private formatValue;
}
