text: export var DEFAULT_MASK_FORMAT_CHARS = {
      '9': /[0-9]/,
      a: /[a-zA-Z]/,
      '*': /[a-zA-Z0-9]/,
  };
  /**
   * Takes in the mask string and the formatCharacters and returns an array of MaskValues
   * Example:
   * mask = 'Phone Number: (999) - 9999'
   * return = [
   *    { value: undefined, displayIndex: 16, format: /[0-9]/ },
   *    { value: undefined, displayIndex: 17, format: /[0-9]/ },
   *    { value: undefined, displayIndex: 18, format: /[0-9]/ },
   *    { value: undefined, displayIndex: 22, format: /[0-9]/ },
   * ]
   *
   * @param mask The string use to define the format of the displayed maskedValue.
   * @param formatChars An object defining how certain characters in the mask should accept input.
   */
  export function parseMask(mask, formatChars) {
      if (formatChars === void 0) { formatChars = DEFAULT_MASK_FORMAT_CHARS; }
      if (!mask) {
          return [];
      }
      var maskCharData = [];
      // Count the escape characters in the mask string.
      var escapedChars = 0;
      for (var i = 0; i + escapedChars < mask.length; i++) {
          var maskChar = mask.charAt(i + escapedChars);
          if (maskChar === '\\') {
              escapedChars++;
          }
          else {
              // Check if the maskChar is a format character.
              var maskFormat = formatChars[maskChar];
              if (maskFormat) {
                  maskCharData.push({
                      /**
                       * Do not add escapedChars to the displayIndex.
                       * The index refers to a position in the mask's displayValue.
                       * Since the backslashes don't appear in the displayValue,
                       * we do not add them to the charData displayIndex.
                       */
                      displayIndex: i,
                      format: maskFormat,
                  });
              }
          }
      }
      return maskCharData;
  }
  /**
   * Takes in the mask string, an array of MaskValues, and the maskCharacter
   * returns the mask string formatted with the input values and maskCharacter.
   * If the maskChar is undefined, the maskDisplay is truncated to the last filled format character.
   * Example:
   * mask = 'Phone Number: (999) 999 - 9999'
   * maskCharData = '12345'
   * maskChar = '_'
   * return = 'Phone Number: (123) 45_ - ___'
   *
   * Example:
   * mask = 'Phone Number: (999) 999 - 9999'
   * value = '12345'
   * maskChar = undefined
   * return = 'Phone Number: (123) 45'
   *
   * @param mask The string use to define the format of the displayed maskedValue.
   * @param maskCharData The input values to insert into the mask string for displaying.
   * @param maskChar? A character to display in place of unfilled mask format characters.
   */
  export function getMaskDisplay(mask, maskCharData, maskChar) {
      var maskDisplay = mask;
      if (!maskDisplay) {
          return '';
      }
      // Remove all backslashes
      maskDisplay = maskDisplay.replace(/\\/g, '');
      // lastDisplayIndex is is used to truncate the string if necessary.
      var lastDisplayIndex = 0;
      if (maskCharData.length > 0) {
          lastDisplayIndex = maskCharData[0].displayIndex - 1;
      }
      /**
       * For each input value, replace the character in the maskDisplay with the value.
       * If there is no value set for the format character, use the maskChar.
       */
      for (var _i = 0, maskCharData_1 = maskCharData; _i < maskCharData_1.length; _i++) {
          var charData = maskCharData_1[_i];
          var nextChar = ' ';
          if (charData.value) {
              nextChar = charData.value;
              if (charData.displayIndex > lastDisplayIndex) {
                  lastDisplayIndex = charData.displayIndex;
              }
          }
          else {
              if (maskChar) {
                  nextChar = maskChar;
              }
          }
          // Insert the character into the maskdisplay at its corresponding index
          maskDisplay = maskDisplay.slice(0, charData.displayIndex) + nextChar + maskDisplay.slice(charData.displayIndex + 1);
      }
      // Cut off all mask characters after the last filled format value
      if (!maskChar) {
          maskDisplay = maskDisplay.slice(0, lastDisplayIndex + 1);
      }
      return maskDisplay;
  }
  /**
   * Get the next format index right of or at a specified index.
   * If no index exists, returns the rightmost index.
   * @param maskCharData
   * @param index
   */
  export function getRightFormatIndex(maskCharData, index) {
      for (var i = 0; i < maskCharData.length; i++) {
          if (maskCharData[i].displayIndex >= index) {
              return maskCharData[i].displayIndex;
          }
      }
      return maskCharData[maskCharData.length - 1].displayIndex;
  }
  /**
   * Get the next format index left of a specified index.
   * If no index exists, returns the leftmost index.
   * @param maskCharData
   * @param index
   */
  export function getLeftFormatIndex(maskCharData, index) {
      for (var i = maskCharData.length - 1; i >= 0; i--) {
          if (maskCharData[i].displayIndex < index) {
              return maskCharData[i].displayIndex;
          }
      }
      return maskCharData[0].displayIndex;
  }
  /**
   * Deletes all values in maskCharData with a displayIndex that falls inside the specified range.
   * maskCharData is modified inline and also returned.
   * @param maskCharData
   * @param selectionStart
   * @param selectionCount
   */
  export function clearRange(maskCharData, selectionStart, selectionCount) {
      for (var i = 0; i < maskCharData.length; i++) {
          if (maskCharData[i].displayIndex >= selectionStart) {
              if (maskCharData[i].displayIndex >= selectionStart + selectionCount) {
                  break;
              }
              maskCharData[i].value = undefined;
          }
      }
      return maskCharData;
  }
  /**
   * Deletes the input character at or after a specified index and returns the new array of charData
   * maskCharData is modified inline and also returned.
   * @param maskCharData
   * @param selectionStart
   */
  export function clearNext(maskCharData, selectionStart) {
      for (var i = 0; i < maskCharData.length; i++) {
          if (maskCharData[i].displayIndex >= selectionStart) {
              maskCharData[i].value = undefined;
              break;
          }
      }
      return maskCharData;
  }
  /**
   * Deletes the input character before a specified index and returns the new array of charData
   * maskCharData is modified inline and also returned.
   * @param maskCharData
   * @param selectionStart
   */
  export function clearPrev(maskCharData, selectionStart) {
      for (var i = maskCharData.length - 1; i >= 0; i--) {
          if (maskCharData[i].displayIndex < selectionStart) {
              maskCharData[i].value = undefined;
              break;
          }
      }
      return maskCharData;
  }
  /**
   * Deletes all values in maskCharData with a displayIndex that falls inside the specified range.
   * Modifies the maskCharData inplace with the passed string and returns the display index of the
   * next format character after the inserted string.
   * @param maskCharData
   * @param selectionStart
   * @param selectionCount
   * @return The displayIndex of the next format character
   */
  export function insertString(maskCharData, selectionStart, newString) {
      var stringIndex = 0;
      var nextIndex = 0;
      var isStringInserted = false;
      // Iterate through _maskCharData finding values with a displayIndex after the specified range start
      for (var i = 0; i < maskCharData.length && stringIndex < newString.length; i++) {
          if (maskCharData[i].displayIndex >= selectionStart) {
              isStringInserted = true;
              nextIndex = maskCharData[i].displayIndex;
              // Find the next character in the newString that matches the format
              while (stringIndex < newString.length) {
                  // If the character matches the format regexp, set the maskCharData to the new character
                  if (maskCharData[i].format.test(newString.charAt(stringIndex))) {
                      maskCharData[i].value = newString.charAt(stringIndex++);
                      // Set the nextIndex to the display index of the next mask format character.
                      if (i + 1 < maskCharData.length) {
                          nextIndex = maskCharData[i + 1].displayIndex;
                      }
                      else {
                          nextIndex++;
                      }
                      break;
                  }
                  stringIndex++;
              }
          }
      }
      return isStringInserted ? nextIndex : selectionStart;
  }
  //# sourceMappingURL=inputMask.js.map