import { FormFieldStatusMeta } from './form-field-validation-rule';
import { EvaluateResultTranslation } from './validation-rule';
import { InternalFormFieldValidationRule } from './internal-form-field-validation-rule.abstract';
/**
 * A rule that checks if date is in minDate and maxDate range
 */
export declare class MinAndMaxDateRule extends InternalFormFieldValidationRule<string | [string, string]> {
  private readonly config;
  private readonly minDate;
  private readonly maxDate;
  /**
   * It creates a new instance of the class with the given config.
   *
   * @param {{ minDate: string; maxDate: string }} config - config including the minDate and the maxDate
   * @param {string} config.minDate - The minDate
   * @param {string} config.maxDate - The maxDate
   */
  constructor(config: {
    minDate?: string;
    maxDate?: string;
  });
  /**
   * If the input is accepted and the status is not disabled and visible, then return true
   *
   * @param {unknown} input - The input to be evaluated.
   * @param {FormFieldStatusMeta} [status] - FormFieldStatusMeta
   * @returns {boolean} A boolean value.
   */
  canEvaluate(input: unknown, status?: FormFieldStatusMeta): boolean;
  /**
   * If the input is a string, check if it's within the min and max date range.
   * If the input is an array, check if the start date is within the min and max date range, and if the end date is within the
   * max date range
   *
   * @param {string | string[]} input - The value of the date picker.
   * @returns  {EvaluateResultTranslation} - The result of the evaluation.
   */
  evaluate(input: string | [string, string]): EvaluateResultTranslation;
  /**
   * If the field is not disabled, visible, and has been touched or modified, then show the error
   *
   * @param {FormFieldStatusMeta} status - FormFieldStatusMeta
   * @returns {boolean} A boolean value.
   */
  shouldShowError(status: FormFieldStatusMeta): boolean;
  /**
   * It returns true if the input is a string or an array of two strings, and each string is a valid date string
   *
   * @param {unknown} input - The input value to be validated.
   * @returns {boolean} A boolean value.
   */
  private isAcceptedInputType;
  /**
   *  Evaluate if single date is within the min and max date range
   *
   * @param {string} input A single date string
   * @returns  {EvaluateResultTranslation}An object with two properties: isValid and message.
   */
  private evaluateSingleDate;
  /**
   * Evaluate if start date or end date are within the min and max date range
   *
   * @param {string[]} input includes start date or end date
   * @returns  {EvaluateResultTranslation}An object with two properties: isValid and message.
   */
  private evaluateRangeDates;
  /**
   * Generate an invalid result
   *
   * @param {string} message Error message
   * @returns {EvaluateResultTranslation} invalid validation result
   */
  private invalidResult;
  /**
   * Generate a valid result
   *
   * @returns {EvaluateResultTranslation} invalid validation result
   */
  private validResult;
}
