text: import { warn, warnAboutDeprecation } from '../utils/utils.js'
  
  export const defaultParams = {
    title: '',
    titleText: '',
    text: '',
    html: '',
    footer: '',
    icon: undefined,
    iconColor: undefined,
    iconHtml: undefined,
    template: undefined,
    toast: false,
    showClass: {
      popup: 'swal2-show',
      backdrop: 'swal2-backdrop-show',
      icon: 'swal2-icon-show',
    },
    hideClass: {
      popup: 'swal2-hide',
      backdrop: 'swal2-backdrop-hide',
      icon: 'swal2-icon-hide',
    },
    customClass: {},
    target: 'body',
    color: undefined,
    backdrop: true,
    heightAuto: true,
    allowOutsideClick: true,
    allowEscapeKey: true,
    allowEnterKey: true,
    stopKeydownPropagation: true,
    keydownListenerCapture: false,
    showConfirmButton: true,
    showDenyButton: false,
    showCancelButton: false,
    preConfirm: undefined,
    preDeny: undefined,
    confirmButtonText: 'OK',
    confirmButtonAriaLabel: '',
    confirmButtonColor: undefined,
    denyButtonText: 'No',
    denyButtonAriaLabel: '',
    denyButtonColor: undefined,
    cancelButtonText: 'Cancel',
    cancelButtonAriaLabel: '',
    cancelButtonColor: undefined,
    buttonsStyling: true,
    reverseButtons: false,
    focusConfirm: true,
    focusDeny: false,
    focusCancel: false,
    returnFocus: true,
    showCloseButton: false,
    closeButtonHtml: '&times;',
    closeButtonAriaLabel: 'Close this dialog',
    loaderHtml: '',
    showLoaderOnConfirm: false,
    showLoaderOnDeny: false,
    imageUrl: undefined,
    imageWidth: undefined,
    imageHeight: undefined,
    imageAlt: '',
    timer: undefined,
    timerProgressBar: false,
    width: undefined,
    padding: undefined,
    background: undefined,
    input: undefined,
    inputPlaceholder: '',
    inputLabel: '',
    inputValue: '',
    inputOptions: {},
    inputAutoTrim: true,
    inputAttributes: {},
    inputValidator: undefined,
    returnInputValueOnDeny: false,
    validationMessage: undefined,
    grow: false,
    position: 'center',
    progressSteps: [],
    currentProgressStep: undefined,
    progressStepsDistance: undefined,
    willOpen: undefined,
    didOpen: undefined,
    didRender: undefined,
    willClose: undefined,
    didClose: undefined,
    didDestroy: undefined,
    scrollbarPadding: true,
  }
  
  export const updatableParams = [
    'allowEscapeKey',
    'allowOutsideClick',
    'background',
    'buttonsStyling',
    'cancelButtonAriaLabel',
    'cancelButtonColor',
    'cancelButtonText',
    'closeButtonAriaLabel',
    'closeButtonHtml',
    'color',
    'confirmButtonAriaLabel',
    'confirmButtonColor',
    'confirmButtonText',
    'currentProgressStep',
    'customClass',
    'denyButtonAriaLabel',
    'denyButtonColor',
    'denyButtonText',
    'didClose',
    'didDestroy',
    'footer',
    'hideClass',
    'html',
    'icon',
    'iconColor',
    'iconHtml',
    'imageAlt',
    'imageHeight',
    'imageUrl',
    'imageWidth',
    'preConfirm',
    'preDeny',
    'progressSteps',
    'returnFocus',
    'reverseButtons',
    'showCancelButton',
    'showCloseButton',
    'showConfirmButton',
    'showDenyButton',
    'text',
    'title',
    'titleText',
    'willClose',
  ]
  
  export const deprecatedParams = {}
  
  const toastIncompatibleParams = [
    'allowOutsideClick',
    'allowEnterKey',
    'backdrop',
    'focusConfirm',
    'focusDeny',
    'focusCancel',
    'returnFocus',
    'heightAuto',
    'keydownListenerCapture',
  ]
  
  /**
   * Is valid parameter
   * @param {string} paramName
   */
  export const isValidParameter = (paramName) => {
    return Object.prototype.hasOwnProperty.call(defaultParams, paramName)
  }
  
  /**
   * Is valid parameter for Swal.update() method
   * @param {string} paramName
   */
  export const isUpdatableParameter = (paramName) => {
    return updatableParams.indexOf(paramName) !== -1
  }
  
  /**
   * Is deprecated parameter
   * @param {string} paramName
   */
  export const isDeprecatedParameter = (paramName) => {
    return deprecatedParams[paramName]
  }
  
  const checkIfParamIsValid = (param) => {
    if (!isValidParameter(param)) {
      warn(`Unknown parameter "${param}"`)
    }
  }
  
  const checkIfToastParamIsValid = (param) => {
    if (toastIncompatibleParams.includes(param)) {
      warn(`The parameter "${param}" is incompatible with toasts`)
    }
  }
  
  const checkIfParamIsDeprecated = (param) => {
    if (isDeprecatedParameter(param)) {
      warnAboutDeprecation(param, isDeprecatedParameter(param))
    }
  }
  
  /**
   * Show relevant warnings for given params
   *
   * @param params
   */
  export const showWarningsForParams = (params) => {
    if (!params.backdrop && params.allowOutsideClick) {
      warn('"allowOutsideClick" parameter requires `backdrop` parameter to be set to `true`')
    }
  
    for (const param in params) {
      checkIfParamIsValid(param)
  
      if (params.toast) {
        checkIfToastParamIsValid(param)
      }
  
      checkIfParamIsDeprecated(param)
    }
  }
  
  export default defaultParams
  