import { VegaInput } from '../../vega-input';
import { Nullable } from '../../../../types/general';
import { InputType, MaskConfigType } from '../../types';
import { StringFormatStrategy } from '../../../../helpers/formatter/string-formatter/string-format-strategy.abstract';
import { StringInputFormatterSlimmer } from '../../../../helpers/slimmers/string-input-formatter-slimmer';
/** The `VegaInputMaskConfigController` class in TypeScript manages input mask configuration and string formatting for an input element within a component's shadow root. */
export declare class VegaInputMaskConfigController extends StringInputFormatterSlimmer {
  protected maskConfig: VegaInput['maskConfig'];
  protected disableCopyPaste: VegaInput['disableCopyPaste'];
  protected type: VegaInput['type'];
  protected inputRenderer: VegaInput['inputRenderer'];
  /** connectedCallback */
  connectedCallback(): void;
  /** disconnectedCallback */
  disconnectedCallback(): void;
  /**
   * Detect value change and initialize mask formatting
   *
   * @param {string} newValue The new value
   * @param {string} oldValue The new value
   */
  watchValue(newValue: string, oldValue: string): void;
  /**
   * Watch mask changes
   *
   * @param {MaskConfigType | MaskConfigType[]} newValue The new mask config value
   * @param {MaskConfigType | MaskConfigType[]} oldValue The old mask config value
   */
  watchMaskChange(newValue: MaskConfigType | MaskConfigType[], oldValue: MaskConfigType | MaskConfigType[]): void;
  /**
   * Watch type changes
   *
   * @param {InputType} newType The new input type
   * @param {InputType} oldType The old input type
   */
  watchTypeChange(newType: InputType, oldType: InputType): void;
  /**
   * Get the input element which will add mask
   *
   * @returns {Nullable<HTMLInputElement>} the input element
   */
  protected getInputElementRef: () => Nullable<HTMLInputElement>;
  /**
   * Determining the string format strategy to be applied when the input field trigger is set to 'input'.
   *
   * @returns {Nullable<StringFormatStrategy>} the input mode mask strategy
   */
  protected getInputModeStrategy: () => Nullable<StringFormatStrategy>;
  /**
   * Determining the string format strategy to be applied when the input field trigger is set to 'blur'.
   *
   * @returns {Nullable<StringFormatStrategy>} the blur mode mask strategy
   */
  protected getBlurModeStrategy: () => Nullable<StringFormatStrategy>;
  /**
   * This TypeScript function generates a string format strategy based on the provided mask configuration and trigger type.
   *
   * @param {'blur' | 'input'} maskTrigger - The `maskTrigger` parameter in the `generateMaskStrategy` function determines when the mask should be applied to the input field. It can have two possible values:
   * @returns {StringFormatStrategy|null} The function `generateMaskStrategy` returns a nullable `StringFormatStrategy` based on the provided `maskConfig` and `maskTrigger` parameters.
   */
  private generateMaskStrategy;
  /**
   * The function `getNumberTypeMaskStrategy` returns a specific formatting strategy based on the provided options for number masking.
   *
   * @param {NumberMaskConfig} options - The `options` parameter is of type `NumberMaskConfig`, which likely contains configuration options for formatting numbers. It seems to have a property `thousandComma` which, if true, indicates that the number should be formatted with thousand commas.
   * @param {boolean} overrideValue - The `overrideValue` parameter is a boolean that indicates whether the formatted value should override the original value after the blur event.
   * @returns {StringFormatStrategy} an instance of numberMaskStrategy or numberThousandCommaStrategy
   */
  private getNumberTypeMaskStrategy;
  /**
   * The function `isBlurModeMaskConfig` checks if a given `maskConfig` is of type 'custom' and has a trigger of 'blur'.
   *
   * @param {MaskConfigType} maskConfig - MaskConfigType
   * @returns {boolean} a boolean value, which indicates whether the provided `maskConfig` object has a type of
   * 'custom' and a trigger of 'blur'.
   */
  private isBlurModeMaskConfig;
  /**
   * Compares two MaskConfigType objects or arrays for equality.
   *
   * @param {MaskConfigType | MaskConfigType[]} a The first MaskConfigType object or array to compare.
   * @param {MaskConfigType | MaskConfigType[]} b The second MaskConfigType object or array to compare.
   * @returns {boolean} True if the two MaskConfigType objects or arrays are equal, false otherwise.
   */
  private areMaskConfigsEqual;
  /**
   * Initialize calendar clear observer
   */
  private initSetupMaskConfigObserver;
  /**
   * Remove calendar clear observer
   */
  private removeSetupMaskConfigObserver;
}
