{"ast":null,"code":"import React__default, { isValidElement, useRef, useLayoutEffect, useEffect, useReducer, cloneElement, useState, createElement } from 'react';\nimport cx from 'clsx';\nimport { render } from 'react-dom';\n\nfunction _extends() {\n  _extends = Object.assign || function (target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i];\n\n      for (var key in source) {\n        if (Object.prototype.hasOwnProperty.call(source, key)) {\n          target[key] = source[key];\n        }\n      }\n    }\n\n    return target;\n  };\n\n  return _extends.apply(this, arguments);\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n  if (source == null) return {};\n  var target = {};\n  var sourceKeys = Object.keys(source);\n  var key, i;\n\n  for (i = 0; i < sourceKeys.length; i++) {\n    key = sourceKeys[i];\n    if (excluded.indexOf(key) >= 0) continue;\n    target[key] = source[key];\n  }\n\n  return target;\n}\n\nfunction isNum(v) {\n  return typeof v === 'number' && !isNaN(v);\n}\n\nfunction isBool(v) {\n  return typeof v === 'boolean';\n}\n\nfunction isStr(v) {\n  return typeof v === 'string';\n}\n\nfunction isFn(v) {\n  return typeof v === 'function';\n}\n\nfunction parseClassName(v) {\n  return isStr(v) || isFn(v) ? v : null;\n}\n\nfunction isToastIdValid(toastId) {\n  return toastId === 0 || toastId;\n}\n\nfunction getAutoCloseDelay(toastAutoClose, containerAutoClose) {\n  return toastAutoClose === false || isNum(toastAutoClose) && toastAutoClose > 0 ? toastAutoClose : containerAutoClose;\n}\n\nvar canUseDom = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n\nfunction canBeRendered(content) {\n  return isValidElement(content) || isStr(content) || isFn(content) || isNum(content);\n}\n\nvar POSITION = {\n  TOP_LEFT: 'top-left',\n  TOP_RIGHT: 'top-right',\n  TOP_CENTER: 'top-center',\n  BOTTOM_LEFT: 'bottom-left',\n  BOTTOM_RIGHT: 'bottom-right',\n  BOTTOM_CENTER: 'bottom-center'\n};\nvar TYPE = {\n  INFO: 'info',\n  SUCCESS: 'success',\n  WARNING: 'warning',\n  ERROR: 'error',\n  DEFAULT: 'default',\n  DARK: 'dark'\n};\n/**\r\n * Used to collapse toast after exit animation\r\n */\n\nfunction collapseToast(node, done, duration\n/* COLLAPSE_DURATION */\n) {\n  if (duration === void 0) {\n    duration = 300;\n  }\n\n  var height = node.scrollHeight;\n  var style = node.style;\n  requestAnimationFrame(function () {\n    style.minHeight = 'initial';\n    style.height = height + 'px';\n    style.transition = \"all \" + duration + \"ms\";\n    requestAnimationFrame(function () {\n      style.height = '0';\n      style.padding = '0';\n      style.margin = '0';\n      setTimeout(done, duration);\n    });\n  });\n}\n/**\r\n * Css animation that just work.\r\n * You could use animate.css for instance\r\n *\r\n *\r\n * ```\r\n * cssTransition({\r\n *   enter: \"animate__animated animate__bounceIn\",\r\n *   exit: \"animate__animated animate__bounceOut\"\r\n * })\r\n * ```\r\n *\r\n */\n\n\nfunction cssTransition(_ref) {\n  var enter = _ref.enter,\n      exit = _ref.exit,\n      _ref$appendPosition = _ref.appendPosition,\n      appendPosition = _ref$appendPosition === void 0 ? false : _ref$appendPosition,\n      _ref$collapse = _ref.collapse,\n      collapse = _ref$collapse === void 0 ? true : _ref$collapse,\n      _ref$collapseDuration = _ref.collapseDuration,\n      collapseDuration = _ref$collapseDuration === void 0 ? 300 : _ref$collapseDuration;\n  return function ToastTransition(_ref2) {\n    var children = _ref2.children,\n        position = _ref2.position,\n        preventExitTransition = _ref2.preventExitTransition,\n        done = _ref2.done,\n        nodeRef = _ref2.nodeRef,\n        isIn = _ref2.isIn;\n    var enterClassName = appendPosition ? enter + \"--\" + position : enter;\n    var exitClassName = appendPosition ? exit + \"--\" + position : exit;\n    var baseClassName = useRef();\n    var animationStep = useRef(0\n    /* Enter */\n    );\n    useLayoutEffect(function () {\n      onEnter();\n    }, []);\n    useEffect(function () {\n      if (!isIn) preventExitTransition ? onExited() : onExit();\n    }, [isIn]);\n\n    function onEnter() {\n      var node = nodeRef.current;\n      baseClassName.current = node.className;\n      node.className += \" \" + enterClassName;\n      node.addEventListener('animationend', onEntered);\n    }\n\n    function onEntered() {\n      var node = nodeRef.current;\n      node.removeEventListener('animationend', onEntered);\n\n      if (animationStep.current === 0\n      /* Enter */\n      ) {\n          node.className = baseClassName.current;\n        }\n    }\n\n    function onExit() {\n      animationStep.current = 1\n      /* Exit */\n      ;\n      var node = nodeRef.current;\n      node.className += \" \" + exitClassName;\n      node.addEventListener('animationend', onExited);\n    }\n\n    function onExited() {\n      var node = nodeRef.current;\n      node.removeEventListener('animationend', onExited);\n      collapse ? collapseToast(node, done, collapseDuration) : done();\n    }\n\n    return React__default.createElement(React__default.Fragment, null, children);\n  };\n}\n\nvar eventManager = {\n  list: /*#__PURE__*/new Map(),\n  emitQueue: /*#__PURE__*/new Map(),\n  on: function on(event, callback) {\n    this.list.has(event) || this.list.set(event, []);\n    this.list.get(event).push(callback);\n    return this;\n  },\n  off: function off(event, callback) {\n    if (callback) {\n      var cb = this.list.get(event).filter(function (cb) {\n        return cb !== callback;\n      });\n      this.list.set(event, cb);\n      return this;\n    }\n\n    this.list[\"delete\"](event);\n    return this;\n  },\n  cancelEmit: function cancelEmit(event) {\n    var timers = this.emitQueue.get(event);\n\n    if (timers) {\n      timers.forEach(clearTimeout);\n      this.emitQueue[\"delete\"](event);\n    }\n\n    return this;\n  },\n\n  /**\r\n   * Enqueue the event at the end of the call stack\r\n   * Doing so let the user call toast as follow:\r\n   * toast('1')\r\n   * toast('2')\r\n   * toast('3')\r\n   * Without setTimemout the code above will not work\r\n   */\n  emit: function emit(event) {\n    var _this = this;\n\n    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n      args[_key - 1] = arguments[_key];\n    }\n\n    this.list.has(event) && this.list.get(event).forEach(function (callback) {\n      var timer = setTimeout(function () {\n        // @ts-ignore\n        callback.apply(void 0, args);\n      }, 0);\n      _this.emitQueue.has(event) || _this.emitQueue.set(event, []);\n\n      _this.emitQueue.get(event).push(timer);\n    });\n  }\n};\n/**\r\n * `useKeeper` is a helper around `useRef`.\r\n *\r\n * You don't need to access the `.current`property to get the value\r\n * If refresh is set to true. The ref will be updated every render\r\n */\n\nfunction useKeeper(arg, refresh) {\n  if (refresh === void 0) {\n    refresh = false;\n  }\n\n  var ref = useRef(arg);\n  useEffect(function () {\n    if (refresh) ref.current = arg;\n  });\n  return ref.current;\n}\n\nfunction reducer(state, action) {\n  switch (action.type) {\n    case 0\n    /* ADD */\n    :\n      return [].concat(state, [action.toastId]).filter(function (id) {\n        return id !== action.staleId;\n      });\n\n    case 1\n    /* REMOVE */\n    :\n      return isToastIdValid(action.toastId) ? state.filter(function (id) {\n        return id !== action.toastId;\n      }) : [];\n  }\n}\n\nfunction useToastContainer(props) {\n  var _useReducer = useReducer(function (x) {\n    return x + 1;\n  }, 0),\n      forceUpdate = _useReducer[1];\n\n  var _useReducer2 = useReducer(reducer, []),\n      toast = _useReducer2[0],\n      dispatch = _useReducer2[1];\n\n  var containerRef = useRef(null);\n  var toastCount = useKeeper(0);\n  var queue = useKeeper([]);\n  var collection = useKeeper({});\n  var instance = useKeeper({\n    toastKey: 1,\n    displayedToast: 0,\n    props: props,\n    containerId: null,\n    isToastActive: isToastActive,\n    getToast: function getToast(id) {\n      return collection[id] || null;\n    }\n  });\n  useEffect(function () {\n    instance.containerId = props.containerId;\n    eventManager.cancelEmit(3\n    /* WillUnmount */\n    ).on(0\n    /* Show */\n    , buildToast).on(1\n    /* Clear */\n    , function (toastId) {\n      return containerRef.current && removeToast(toastId);\n    }).on(5\n    /* ClearWaitingQueue */\n    , clearWaitingQueue).emit(2\n    /* DidMount */\n    , instance);\n    return function () {\n      return eventManager.emit(3\n      /* WillUnmount */\n      , instance);\n    };\n  }, []);\n  useEffect(function () {\n    instance.isToastActive = isToastActive;\n    instance.displayedToast = toast.length;\n    eventManager.emit(4\n    /* Change */\n    , toast.length, props.containerId);\n  }, [toast]);\n  useEffect(function () {\n    instance.props = props;\n  });\n\n  function isToastActive(id) {\n    return toast.indexOf(id) !== -1;\n  }\n\n  function clearWaitingQueue(_ref) {\n    var containerId = _ref.containerId;\n    var limit = instance.props.limit;\n\n    if (limit && (!containerId || instance.containerId === containerId)) {\n      toastCount -= queue.length;\n      queue = [];\n    }\n  }\n\n  function removeToast(toastId) {\n    dispatch({\n      type: 1\n      /* REMOVE */\n      ,\n      toastId: toastId\n    });\n  }\n\n  function dequeueToast() {\n    var _queue$shift = queue.shift(),\n        toastContent = _queue$shift.toastContent,\n        toastProps = _queue$shift.toastProps,\n        staleId = _queue$shift.staleId;\n\n    appendToast(toastContent, toastProps, staleId);\n  }\n  /**\r\n   * check if a container is attached to the dom\r\n   * check for multi-container, build only if associated\r\n   * check for duplicate toastId if no update\r\n   */\n\n\n  function isNotValid(_ref2) {\n    var containerId = _ref2.containerId,\n        toastId = _ref2.toastId,\n        updateId = _ref2.updateId;\n    return !containerRef.current || instance.props.enableMultiContainer && containerId !== instance.props.containerId || collection[toastId] && updateId == null ? true : false;\n  } // this function and all the function called inside needs to rely on ref(`useKeeper`)\n\n\n  function buildToast(content, _ref3) {\n    var delay = _ref3.delay,\n        staleId = _ref3.staleId,\n        options = _objectWithoutPropertiesLoose(_ref3, [\"delay\", \"staleId\"]);\n\n    if (!canBeRendered(content) || isNotValid(options)) return;\n    var toastId = options.toastId,\n        updateId = options.updateId;\n    var props = instance.props;\n\n    var closeToast = function closeToast() {\n      return removeToast(toastId);\n    };\n\n    var isNotAnUpdate = options.updateId == null;\n    if (isNotAnUpdate) toastCount++;\n    var toastProps = {\n      toastId: toastId,\n      updateId: updateId,\n      isIn: false,\n      key: options.key || instance.toastKey++,\n      type: options.type,\n      closeToast: closeToast,\n      closeButton: options.closeButton,\n      rtl: props.rtl,\n      position: options.position || props.position,\n      transition: options.transition || props.transition,\n      className: parseClassName(options.className || props.toastClassName),\n      bodyClassName: parseClassName(options.bodyClassName || props.bodyClassName),\n      style: options.style || props.toastStyle,\n      bodyStyle: options.bodyStyle || props.bodyStyle,\n      onClick: options.onClick || props.onClick,\n      pauseOnHover: isBool(options.pauseOnHover) ? options.pauseOnHover : props.pauseOnHover,\n      pauseOnFocusLoss: isBool(options.pauseOnFocusLoss) ? options.pauseOnFocusLoss : props.pauseOnFocusLoss,\n      draggable: isBool(options.draggable) ? options.draggable : props.draggable,\n      draggablePercent: isNum(options.draggablePercent) ? options.draggablePercent : props.draggablePercent,\n      draggableDirection: options.draggableDirection || props.draggableDirection,\n      closeOnClick: isBool(options.closeOnClick) ? options.closeOnClick : props.closeOnClick,\n      progressClassName: parseClassName(options.progressClassName || props.progressClassName),\n      progressStyle: options.progressStyle || props.progressStyle,\n      autoClose: getAutoCloseDelay(options.autoClose, props.autoClose),\n      hideProgressBar: isBool(options.hideProgressBar) ? options.hideProgressBar : props.hideProgressBar,\n      progress: options.progress,\n      role: isStr(options.role) ? options.role : props.role,\n      deleteToast: function deleteToast() {\n        removeFromCollection(toastId);\n      }\n    };\n    if (isFn(options.onOpen)) toastProps.onOpen = options.onOpen;\n    if (isFn(options.onClose)) toastProps.onClose = options.onClose; //  tweak for vertical dragging\n\n    if (toastProps.draggableDirection === \"y\"\n    /* Y */\n    && toastProps.draggablePercent === 80\n    /* DRAGGABLE_PERCENT */\n    ) {\n        toastProps.draggablePercent *= 1.5;\n      }\n\n    var closeButton = props.closeButton;\n\n    if (options.closeButton === false || canBeRendered(options.closeButton)) {\n      closeButton = options.closeButton;\n    } else if (options.closeButton === true) {\n      closeButton = canBeRendered(props.closeButton) ? props.closeButton : true;\n    }\n\n    toastProps.closeButton = closeButton;\n    var toastContent = content;\n\n    if (isValidElement(content) && !isStr(content.type)) {\n      toastContent = cloneElement(content, {\n        closeToast: closeToast,\n        toastProps: toastProps\n      });\n    } else if (isFn(content)) {\n      toastContent = content({\n        closeToast: closeToast,\n        toastProps: toastProps\n      });\n    } // not handling limit + delay by design. Waiting for user feedback first\n\n\n    if (props.limit && props.limit > 0 && toastCount > props.limit && isNotAnUpdate) {\n      queue.push({\n        toastContent: toastContent,\n        toastProps: toastProps,\n        staleId: staleId\n      });\n    } else if (isNum(delay) && delay > 0) {\n      setTimeout(function () {\n        appendToast(toastContent, toastProps, staleId);\n      }, delay);\n    } else {\n      appendToast(toastContent, toastProps, staleId);\n    }\n  }\n\n  function appendToast(content, toastProps, staleId) {\n    var toastId = toastProps.toastId;\n    if (staleId) delete collection[staleId];\n    collection[toastId] = {\n      content: content,\n      props: toastProps\n    };\n    dispatch({\n      type: 0\n      /* ADD */\n      ,\n      toastId: toastId,\n      staleId: staleId\n    });\n  }\n\n  function removeFromCollection(toastId) {\n    delete collection[toastId];\n    var queueLen = queue.length;\n    toastCount = isToastIdValid(toastId) ? toastCount - 1 : toastCount - instance.displayedToast;\n    if (toastCount < 0) toastCount = 0;\n\n    if (queueLen > 0) {\n      var freeSlot = isToastIdValid(toastId) ? 1 : instance.props.limit;\n\n      if (queueLen === 1 || freeSlot === 1) {\n        instance.displayedToast++;\n        dequeueToast();\n      } else {\n        var toDequeue = freeSlot > queueLen ? queueLen : freeSlot;\n        instance.displayedToast = toDequeue;\n\n        for (var i = 0; i < toDequeue; i++) {\n          dequeueToast();\n        }\n      }\n    } else {\n      forceUpdate();\n    }\n  }\n\n  function getToastToRender(cb) {\n    var toastToRender = {};\n    var toastList = props.newestOnTop ? Object.keys(collection).reverse() : Object.keys(collection);\n\n    for (var i = 0; i < toastList.length; i++) {\n      var _toast = collection[toastList[i]];\n      var position = _toast.props.position;\n      toastToRender[position] || (toastToRender[position] = []);\n      toastToRender[position].push(_toast);\n    }\n\n    return Object.keys(toastToRender).map(function (p) {\n      return cb(p, toastToRender[p]);\n    });\n  }\n\n  return {\n    getToastToRender: getToastToRender,\n    collection: collection,\n    containerRef: containerRef,\n    isToastActive: isToastActive\n  };\n}\n\nfunction getX(e) {\n  return e.targetTouches && e.targetTouches.length >= 1 ? e.targetTouches[0].clientX : e.clientX;\n}\n\nfunction getY(e) {\n  return e.targetTouches && e.targetTouches.length >= 1 ? e.targetTouches[0].clientY : e.clientY;\n}\n\nfunction useToast(props) {\n  var _useState = useState(true),\n      isRunning = _useState[0],\n      setIsRunning = _useState[1];\n\n  var _useState2 = useState(false),\n      preventExitTransition = _useState2[0],\n      setPreventExitTransition = _useState2[1];\n\n  var toastRef = useRef(null);\n  var drag = useKeeper({\n    start: 0,\n    x: 0,\n    y: 0,\n    delta: 0,\n    removalDistance: 0,\n    canCloseOnClick: true,\n    canDrag: false,\n    boundingRect: null\n  });\n  var syncProps = useKeeper(props, true);\n  var autoClose = props.autoClose,\n      pauseOnHover = props.pauseOnHover,\n      closeToast = props.closeToast,\n      onClick = props.onClick,\n      closeOnClick = props.closeOnClick;\n  useEffect(function () {\n    if (isFn(props.onOpen)) props.onOpen(isValidElement(props.children) && props.children.props);\n    return function () {\n      if (isFn(syncProps.onClose)) syncProps.onClose(isValidElement(syncProps.children) && syncProps.children.props);\n    };\n  }, []);\n  useEffect(function () {\n    props.draggable && bindDragEvents();\n    return function () {\n      props.draggable && unbindDragEvents();\n    };\n  }, [props.draggable]);\n  useEffect(function () {\n    props.pauseOnFocusLoss && bindFocusEvents();\n    return function () {\n      props.pauseOnFocusLoss && unbindFocusEvents();\n    };\n  }, [props.pauseOnFocusLoss]);\n\n  function onDragStart(e) {\n    if (props.draggable) {\n      var toast = toastRef.current;\n      drag.canCloseOnClick = true;\n      drag.canDrag = true;\n      drag.boundingRect = toast.getBoundingClientRect();\n      toast.style.transition = '';\n      drag.x = getX(e.nativeEvent);\n      drag.y = getY(e.nativeEvent);\n\n      if (props.draggableDirection === \"x\"\n      /* X */\n      ) {\n          drag.start = drag.x;\n          drag.removalDistance = toast.offsetWidth * (props.draggablePercent / 100);\n        } else {\n        drag.start = drag.y;\n        drag.removalDistance = toast.offsetHeight * (props.draggablePercent / 100);\n      }\n    }\n  }\n\n  function onDragTransitionEnd() {\n    if (drag.boundingRect) {\n      var _drag$boundingRect = drag.boundingRect,\n          top = _drag$boundingRect.top,\n          bottom = _drag$boundingRect.bottom,\n          left = _drag$boundingRect.left,\n          right = _drag$boundingRect.right;\n\n      if (props.pauseOnHover && drag.x >= left && drag.x <= right && drag.y >= top && drag.y <= bottom) {\n        pauseToast();\n      } else {\n        playToast();\n      }\n    }\n  }\n\n  function playToast() {\n    setIsRunning(true);\n  }\n\n  function pauseToast() {\n    setIsRunning(false);\n  }\n\n  function bindFocusEvents() {\n    if (!document.hasFocus()) pauseToast();\n    window.addEventListener('focus', playToast);\n    window.addEventListener('blur', pauseToast);\n  }\n\n  function unbindFocusEvents() {\n    window.removeEventListener('focus', playToast);\n    window.removeEventListener('blur', pauseToast);\n  }\n\n  function bindDragEvents() {\n    document.addEventListener('mousemove', onDragMove);\n    document.addEventListener('mouseup', onDragEnd);\n    document.addEventListener('touchmove', onDragMove);\n    document.addEventListener('touchend', onDragEnd);\n  }\n\n  function unbindDragEvents() {\n    document.removeEventListener('mousemove', onDragMove);\n    document.removeEventListener('mouseup', onDragEnd);\n    document.removeEventListener('touchmove', onDragMove);\n    document.removeEventListener('touchend', onDragEnd);\n  }\n\n  function onDragMove(e) {\n    if (drag.canDrag) {\n      e.preventDefault();\n      var toast = toastRef.current;\n      if (isRunning) pauseToast();\n      drag.x = getX(e);\n      drag.y = getY(e);\n\n      if (props.draggableDirection === \"x\"\n      /* X */\n      ) {\n          drag.delta = drag.x - drag.start;\n        } else {\n        drag.delta = drag.y - drag.start;\n      } // prevent false positif during a toast click\n\n\n      if (drag.start !== drag.x) drag.canCloseOnClick = false;\n      toast.style.transform = \"translate\" + props.draggableDirection + \"(\" + drag.delta + \"px)\";\n      toast.style.opacity = \"\" + (1 - Math.abs(drag.delta / drag.removalDistance));\n    }\n  }\n\n  function onDragEnd() {\n    var toast = toastRef.current;\n\n    if (drag.canDrag) {\n      drag.canDrag = false;\n\n      if (Math.abs(drag.delta) > drag.removalDistance) {\n        setPreventExitTransition(true);\n        props.closeToast();\n        return;\n      }\n\n      toast.style.transition = 'transform 0.2s, opacity 0.2s';\n      toast.style.transform = \"translate\" + props.draggableDirection + \"(0)\";\n      toast.style.opacity = '1';\n    }\n  }\n\n  var eventHandlers = {\n    onMouseDown: onDragStart,\n    onTouchStart: onDragStart,\n    onMouseUp: onDragTransitionEnd,\n    onTouchEnd: onDragTransitionEnd\n  };\n\n  if (autoClose && pauseOnHover) {\n    eventHandlers.onMouseEnter = pauseToast;\n    eventHandlers.onMouseLeave = playToast;\n  } // prevent toast from closing when user drags the toast\n\n\n  if (closeOnClick) {\n    eventHandlers.onClick = function (e) {\n      onClick && onClick(e);\n      drag.canCloseOnClick && closeToast();\n    };\n  }\n\n  return {\n    playToast: playToast,\n    pauseToast: pauseToast,\n    isRunning: isRunning,\n    preventExitTransition: preventExitTransition,\n    toastRef: toastRef,\n    eventHandlers: eventHandlers\n  };\n}\n\nfunction CloseButton(_ref) {\n  var closeToast = _ref.closeToast,\n      type = _ref.type,\n      _ref$ariaLabel = _ref.ariaLabel,\n      ariaLabel = _ref$ariaLabel === void 0 ? 'close' : _ref$ariaLabel;\n  return createElement(\"button\", {\n    className: \"Toastify\"\n    /* CSS_NAMESPACE */\n    + \"__close-button \" + \"Toastify\"\n    /* CSS_NAMESPACE */\n    + \"__close-button--\" + type,\n    type: \"button\",\n    onClick: function onClick(e) {\n      e.stopPropagation();\n      closeToast(e);\n    },\n    \"aria-label\": ariaLabel\n  }, createElement(\"svg\", {\n    \"aria-hidden\": \"true\",\n    viewBox: \"0 0 14 16\"\n  }, createElement(\"path\", {\n    fillRule: \"evenodd\",\n    d: \"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z\"\n  })));\n}\n\nfunction ProgressBar(_ref) {\n  var _cx, _animationEvent;\n\n  var delay = _ref.delay,\n      isRunning = _ref.isRunning,\n      closeToast = _ref.closeToast,\n      type = _ref.type,\n      hide = _ref.hide,\n      className = _ref.className,\n      userStyle = _ref.style,\n      controlledProgress = _ref.controlledProgress,\n      progress = _ref.progress,\n      rtl = _ref.rtl,\n      isIn = _ref.isIn;\n\n  var style = _extends({}, userStyle, {\n    animationDuration: delay + \"ms\",\n    animationPlayState: isRunning ? 'running' : 'paused',\n    opacity: hide ? 0 : 1\n  });\n\n  if (controlledProgress) style.transform = \"scaleX(\" + progress + \")\";\n  var defaultClassName = cx(\"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__progress-bar\", controlledProgress ? \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__progress-bar--controlled\" : \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__progress-bar--animated\", \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__progress-bar--\" + type, (_cx = {}, _cx[\"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__progress-bar--rtl\"] = rtl, _cx));\n  var classNames = isFn(className) ? className({\n    rtl: rtl,\n    type: type,\n    defaultClassName: defaultClassName\n  }) : cx(defaultClassName, className); // 🧐 controlledProgress is derived from progress\n  // so if controlledProgress is set\n  // it means that this is also the case for progress\n\n  var animationEvent = (_animationEvent = {}, _animationEvent[controlledProgress && progress >= 1 ? 'onTransitionEnd' : 'onAnimationEnd'] = controlledProgress && progress < 1 ? null : function () {\n    isIn && closeToast();\n  }, _animationEvent); // TODO: add aria-valuenow, aria-valuemax, aria-valuemin\n\n  return createElement(\"div\", Object.assign({\n    role: \"progressbar\",\n    \"aria-hidden\": hide ? 'true' : 'false',\n    \"aria-label\": \"notification timer\",\n    className: classNames,\n    style: style\n  }, animationEvent));\n}\n\nProgressBar.defaultProps = {\n  type: TYPE.DEFAULT,\n  hide: false\n};\n\nvar Toast = function Toast(props) {\n  var _cx;\n\n  var _useToast = useToast(props),\n      isRunning = _useToast.isRunning,\n      preventExitTransition = _useToast.preventExitTransition,\n      toastRef = _useToast.toastRef,\n      eventHandlers = _useToast.eventHandlers;\n\n  var closeButton = props.closeButton,\n      children = props.children,\n      autoClose = props.autoClose,\n      onClick = props.onClick,\n      type = props.type,\n      hideProgressBar = props.hideProgressBar,\n      closeToast = props.closeToast,\n      Transition = props.transition,\n      position = props.position,\n      className = props.className,\n      style = props.style,\n      bodyClassName = props.bodyClassName,\n      bodyStyle = props.bodyStyle,\n      progressClassName = props.progressClassName,\n      progressStyle = props.progressStyle,\n      updateId = props.updateId,\n      role = props.role,\n      progress = props.progress,\n      rtl = props.rtl,\n      toastId = props.toastId,\n      deleteToast = props.deleteToast,\n      isIn = props.isIn;\n  var defaultClassName = cx(\"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__toast\", \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__toast--\" + type, (_cx = {}, _cx[\"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__toast--rtl\"] = rtl, _cx));\n  var cssClasses = isFn(className) ? className({\n    rtl: rtl,\n    position: position,\n    type: type,\n    defaultClassName: defaultClassName\n  }) : cx(defaultClassName, className);\n  var isProgressControlled = !!progress;\n\n  function renderCloseButton(closeButton) {\n    if (!closeButton) return;\n    var props = {\n      closeToast: closeToast,\n      type: type\n    };\n    if (isFn(closeButton)) return closeButton(props);\n    if (isValidElement(closeButton)) return cloneElement(closeButton, props);\n  }\n\n  return createElement(Transition, {\n    isIn: isIn,\n    done: deleteToast,\n    position: position,\n    preventExitTransition: preventExitTransition,\n    nodeRef: toastRef\n  }, createElement(\"div\", Object.assign({\n    id: toastId,\n    onClick: onClick,\n    className: cssClasses\n  }, eventHandlers, {\n    style: style,\n    ref: toastRef\n  }), createElement(\"div\", Object.assign({}, isIn && {\n    role: role\n  }, {\n    className: isFn(bodyClassName) ? bodyClassName({\n      type: type\n    }) : cx(\"Toastify\"\n    /* CSS_NAMESPACE */\n    + \"__toast-body\", bodyClassName),\n    style: bodyStyle\n  }), children), renderCloseButton(closeButton), (autoClose || isProgressControlled) && createElement(ProgressBar, Object.assign({}, updateId && !isProgressControlled ? {\n    key: \"pb-\" + updateId\n  } : {}, {\n    rtl: rtl,\n    delay: autoClose,\n    isRunning: isRunning,\n    isIn: isIn,\n    closeToast: closeToast,\n    hide: hideProgressBar,\n    type: type,\n    style: progressStyle,\n    className: progressClassName,\n    controlledProgress: isProgressControlled,\n    progress: progress\n  }))));\n};\n\nvar Bounce = /*#__PURE__*/cssTransition({\n  enter: \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"--animate \" + \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__bounce-enter\",\n  exit: \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"--animate \" + \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__bounce-exit\",\n  appendPosition: true\n});\nvar Slide = /*#__PURE__*/cssTransition({\n  enter: \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"--animate \" + \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__slide-enter\",\n  exit: \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"--animate \" + \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__slide-exit\",\n  appendPosition: true\n});\nvar Zoom = /*#__PURE__*/cssTransition({\n  enter: \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"--animate \" + \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__zoom-enter\",\n  exit: \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"--animate \" + \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__zoom-exit\"\n});\nvar Flip = /*#__PURE__*/cssTransition({\n  enter: \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"--animate \" + \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__flip-enter\",\n  exit: \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"--animate \" + \"Toastify\"\n  /* CSS_NAMESPACE */\n  + \"__flip-exit\"\n});\n\nvar ToastContainer = function ToastContainer(props) {\n  var _useToastContainer = useToastContainer(props),\n      getToastToRender = _useToastContainer.getToastToRender,\n      containerRef = _useToastContainer.containerRef,\n      isToastActive = _useToastContainer.isToastActive;\n\n  var className = props.className,\n      style = props.style,\n      rtl = props.rtl,\n      containerId = props.containerId;\n\n  function getClassName(position) {\n    var _cx;\n\n    var defaultClassName = cx(\"Toastify\"\n    /* CSS_NAMESPACE */\n    + \"__toast-container\", \"Toastify\"\n    /* CSS_NAMESPACE */\n    + \"__toast-container--\" + position, (_cx = {}, _cx[\"Toastify\"\n    /* CSS_NAMESPACE */\n    + \"__toast-container--rtl\"] = rtl, _cx));\n    return isFn(className) ? className({\n      position: position,\n      rtl: rtl,\n      defaultClassName: defaultClassName\n    }) : cx(defaultClassName, parseClassName(className));\n  }\n\n  return createElement(\"div\", {\n    ref: containerRef,\n    className: \"Toastify\"\n    /* CSS_NAMESPACE */\n    ,\n    id: containerId\n  }, getToastToRender(function (position, toastList) {\n    var containerStyle = toastList.length === 0 ? _extends({}, style, {\n      pointerEvents: 'none'\n    }) : _extends({}, style);\n    return createElement(\"div\", {\n      className: getClassName(position),\n      style: containerStyle,\n      key: \"container-\" + position\n    }, toastList.map(function (_ref) {\n      var content = _ref.content,\n          toastProps = _ref.props;\n      return createElement(Toast, Object.assign({}, toastProps, {\n        isIn: isToastActive(toastProps.toastId),\n        key: \"toast-\" + toastProps.key,\n        closeButton: toastProps.closeButton === true ? CloseButton : toastProps.closeButton\n      }), content);\n    }));\n  }));\n};\n\nToastContainer.defaultProps = {\n  position: POSITION.TOP_RIGHT,\n  transition: Bounce,\n  rtl: false,\n  autoClose: 5000,\n  hideProgressBar: false,\n  closeButton: CloseButton,\n  pauseOnHover: true,\n  pauseOnFocusLoss: true,\n  closeOnClick: true,\n  newestOnTop: false,\n  draggable: true,\n  draggablePercent: 80\n  /* DRAGGABLE_PERCENT */\n  ,\n  draggableDirection: \"x\"\n  /* X */\n  ,\n  role: 'alert'\n};\nvar containers = /*#__PURE__*/new Map();\nvar latestInstance;\nvar containerDomNode;\nvar containerConfig;\nvar queue = [];\nvar lazy = false;\n/**\r\n * Check whether any container is currently mounted in the DOM\r\n */\n\nfunction isAnyContainerMounted() {\n  return containers.size > 0;\n}\n/**\r\n * Get the toast by id, given it's in the DOM, otherwise returns null\r\n */\n\n\nfunction getToast(toastId, _ref) {\n  var containerId = _ref.containerId;\n  var container = containers.get(containerId || latestInstance);\n  if (!container) return null;\n  return container.getToast(toastId);\n}\n/**\r\n * Generate a random toastId\r\n */\n\n\nfunction generateToastId() {\n  return Math.random().toString(36).substr(2, 9);\n}\n/**\r\n * Generate a toastId or use the one provided\r\n */\n\n\nfunction getToastId(options) {\n  if (options && (isStr(options.toastId) || isNum(options.toastId))) {\n    return options.toastId;\n  }\n\n  return generateToastId();\n}\n/**\r\n * If the container is not mounted, the toast is enqueued and\r\n * the container lazy mounted\r\n */\n\n\nfunction dispatchToast(content, options) {\n  if (isAnyContainerMounted()) {\n    eventManager.emit(0\n    /* Show */\n    , content, options);\n  } else {\n    queue.push({\n      content: content,\n      options: options\n    });\n\n    if (lazy && canUseDom) {\n      lazy = false;\n      containerDomNode = document.createElement('div');\n      document.body.appendChild(containerDomNode);\n      render(createElement(ToastContainer, Object.assign({}, containerConfig)), containerDomNode);\n    }\n  }\n\n  return options.toastId;\n}\n/**\r\n * Merge provided options with the defaults settings and generate the toastId\r\n */\n\n\nfunction mergeOptions(type, options) {\n  return _extends({}, options, {\n    type: options && options.type || type,\n    toastId: getToastId(options)\n  });\n}\n\nvar createToastByType = function createToastByType(type) {\n  return function (content, options) {\n    return dispatchToast(content, mergeOptions(type, options));\n  };\n};\n\nvar toast = function toast(content, options) {\n  return dispatchToast(content, mergeOptions(TYPE.DEFAULT, options));\n};\n\ntoast.success = /*#__PURE__*/createToastByType(TYPE.SUCCESS);\ntoast.info = /*#__PURE__*/createToastByType(TYPE.INFO);\ntoast.error = /*#__PURE__*/createToastByType(TYPE.ERROR);\ntoast.warning = /*#__PURE__*/createToastByType(TYPE.WARNING);\ntoast.dark = /*#__PURE__*/createToastByType(TYPE.DARK);\ntoast.warn = toast.warning;\n/**\r\n * Remove toast programmaticaly\r\n */\n\ntoast.dismiss = function (id) {\n  return eventManager.emit(1\n  /* Clear */\n  , id);\n};\n/**\r\n * Clear waiting queue when limit is used\r\n */\n\n\ntoast.clearWaitingQueue = function (params) {\n  if (params === void 0) {\n    params = {};\n  }\n\n  return eventManager.emit(5\n  /* ClearWaitingQueue */\n  , params);\n};\n/**\r\n * return true if one container is displaying the toast\r\n */\n\n\ntoast.isActive = function (id) {\n  var isToastActive = false;\n  containers.forEach(function (container) {\n    if (container.isToastActive && container.isToastActive(id)) {\n      isToastActive = true;\n    }\n  });\n  return isToastActive;\n};\n\ntoast.update = function (toastId, options) {\n  if (options === void 0) {\n    options = {};\n  } // if you call toast and toast.update directly nothing will be displayed\n  // this is why I defered the update\n\n\n  setTimeout(function () {\n    var toast = getToast(toastId, options);\n\n    if (toast) {\n      var oldOptions = toast.props,\n          oldContent = toast.content;\n\n      var nextOptions = _extends({}, oldOptions, options, {\n        toastId: options.toastId || toastId,\n        updateId: generateToastId()\n      });\n\n      if (nextOptions.toastId !== toastId) nextOptions.staleId = toastId;\n      var content = nextOptions.render || oldContent;\n      delete nextOptions.render;\n      dispatchToast(content, nextOptions);\n    }\n  }, 0);\n};\n/**\r\n * Used for controlled progress bar.\r\n */\n\n\ntoast.done = function (id) {\n  toast.update(id, {\n    progress: 1\n  });\n};\n/**\r\n * Track changes. The callback get the number of toast displayed\r\n *\r\n */\n\n\ntoast.onChange = function (callback) {\n  if (isFn(callback)) {\n    eventManager.on(4\n    /* Change */\n    , callback);\n  }\n\n  return function () {\n    isFn(callback) && eventManager.off(4\n    /* Change */\n    , callback);\n  };\n};\n/**\r\n * Configure the ToastContainer when lazy mounted\r\n */\n\n\ntoast.configure = function (config) {\n  if (config === void 0) {\n    config = {};\n  }\n\n  lazy = true;\n  containerConfig = config;\n};\n\ntoast.POSITION = POSITION;\ntoast.TYPE = TYPE;\n/**\r\n * Wait until the ToastContainer is mounted to dispatch the toast\r\n * and attach isActive method\r\n */\n\neventManager.on(2\n/* DidMount */\n, function (containerInstance) {\n  latestInstance = containerInstance.containerId || containerInstance;\n  containers.set(latestInstance, containerInstance);\n  queue.forEach(function (item) {\n    eventManager.emit(0\n    /* Show */\n    , item.content, item.options);\n  });\n  queue = [];\n}).on(3\n/* WillUnmount */\n, function (containerInstance) {\n  containers[\"delete\"](containerInstance.containerId || containerInstance);\n\n  if (containers.size === 0) {\n    eventManager.off(0\n    /* Show */\n    ).off(1\n    /* Clear */\n    ).off(5\n    /* ClearWaitingQueue */\n    );\n  }\n\n  if (canUseDom && containerDomNode) {\n    document.body.removeChild(containerDomNode);\n  }\n});\nexport { Bounce, Flip, Slide, ToastContainer, Zoom, collapseToast, cssTransition, toast, useToast, useToastContainer };","map":{"version":3,"sources":["../src/utils/propValidator.ts","../src/utils/constant.ts","../src/utils/collapseToast.ts","../src/utils/cssTransition.tsx","../src/core/eventManager.ts","../src/hooks/useKeeper.ts","../src/hooks/toastContainerReducer.ts","../src/hooks/useToastContainer.ts","../src/hooks/useToast.ts","../src/components/CloseButton.tsx","../src/components/ProgressBar.tsx","../src/components/Toast.tsx","../src/components/Transitions.tsx","../src/components/ToastContainer.tsx","../src/core/toast.tsx"],"names":["isNum","v","isNaN","isBool","isStr","isFn","parseClassName","isToastIdValid","toastId","getAutoCloseDelay","toastAutoClose","containerAutoClose","canUseDom","window","canBeRendered","content","isValidElement","POSITION","TOP_LEFT","TOP_RIGHT","TOP_CENTER","BOTTOM_LEFT","BOTTOM_RIGHT","BOTTOM_CENTER","TYPE","INFO","SUCCESS","WARNING","ERROR","DEFAULT","DARK","collapseToast","node","done","duration","height","style","requestAnimationFrame","setTimeout","cssTransition","enter","exit","appendPosition","collapse","collapseDuration","children","position","preventExitTransition","nodeRef","isIn","enterClassName","exitClassName","baseClassName","useRef","animationStep","useLayoutEffect","onEnter","useEffect","onExited","onExit","React","eventManager","list","emitQueue","on","off","cb","cancelEmit","timers","emit","args","timer","callback","useKeeper","arg","refresh","ref","reducer","state","action","id","useToastContainer","props","forceUpdate","useReducer","x","toast","dispatch","containerRef","toastCount","queue","collection","instance","toastKey","displayedToast","containerId","isToastActive","getToast","removeToast","limit","type","toastContent","toastProps","staleId","appendToast","updateId","delay","options","isNotValid","closeToast","isNotAnUpdate","key","closeButton","rtl","transition","className","bodyClassName","bodyStyle","onClick","pauseOnHover","pauseOnFocusLoss","draggable","draggablePercent","draggableDirection","closeOnClick","progressClassName","progressStyle","autoClose","hideProgressBar","progress","role","deleteToast","removeFromCollection","cloneElement","queueLen","freeSlot","dequeueToast","toDequeue","i","toastToRender","toastList","Object","getToastToRender","e","useToast","isRunning","setIsRunning","useState","setPreventExitTransition","toastRef","drag","start","y","delta","removalDistance","canCloseOnClick","canDrag","boundingRect","syncProps","bindDragEvents","unbindDragEvents","bindFocusEvents","unbindFocusEvents","getX","getY","top","bottom","left","right","pauseToast","playToast","document","Math","eventHandlers","onMouseDown","onTouchStart","onMouseUp","onTouchEnd","onDragTransitionEnd","CloseButton","ariaLabel","viewBox","fillRule","d","ProgressBar","hide","userStyle","controlledProgress","animationDuration","animationPlayState","opacity","defaultClassName","cx","classNames","animationEvent","Toast","Transition","cssClasses","isProgressControlled","renderCloseButton","Bounce","Slide","Zoom","Flip","ToastContainer","containerStyle","pointerEvents","getClassName","newestOnTop","containers","lazy","container","generateToastId","isAnyContainerMounted","containerDomNode","render","getToastId","createToastByType","dispatchToast","mergeOptions","params","oldOptions","oldContent","nextOptions","config","containerConfig","latestInstance","containerInstance","item"],"mappings":"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","sourcesContent":["import { isValidElement } from 'react';\n\nimport { Id } from '../types';\n\nexport function isNum(v: any): v is Number {\n  return typeof v === 'number' && !isNaN(v);\n}\n\nexport function isBool(v: any): v is Boolean {\n  return typeof v === 'boolean';\n}\n\nexport function isStr(v: any): v is String {\n  return typeof v === 'string';\n}\n\nexport function isFn(v: any): v is Function {\n  return typeof v === 'function';\n}\n\nexport function parseClassName(v: any) {\n  return isStr(v) || isFn(v) ? v : null;\n}\n\nexport function isToastIdValid(toastId?: Id) {\n  return toastId === 0 || toastId;\n}\n\nexport function getAutoCloseDelay(\n  toastAutoClose?: false | number,\n  containerAutoClose?: false | number\n) {\n  return toastAutoClose === false ||\n    (isNum(toastAutoClose) && toastAutoClose > 0)\n    ? toastAutoClose\n    : containerAutoClose;\n}\n\nexport const canUseDom = !!(\n  typeof window !== 'undefined' &&\n  window.document &&\n  window.document.createElement\n);\n\nexport function canBeRendered<T>(content: T): boolean {\n  return (\n    isValidElement(content) || isStr(content) || isFn(content) || isNum(content)\n  );\n}\n","import { ToastPosition, TypeOptions } from '../types';\n\ntype KeyOfPosition =\n  | 'TOP_LEFT'\n  | 'TOP_RIGHT'\n  | 'TOP_CENTER'\n  | 'BOTTOM_LEFT'\n  | 'BOTTOM_RIGHT'\n  | 'BOTTOM_CENTER';\n\ntype KeyOfType = 'INFO' | 'SUCCESS' | 'WARNING' | 'ERROR' | 'DEFAULT' | 'DARK';\n\nexport const POSITION: { [key in KeyOfPosition]: ToastPosition } = {\n  TOP_LEFT: 'top-left',\n  TOP_RIGHT: 'top-right',\n  TOP_CENTER: 'top-center',\n  BOTTOM_LEFT: 'bottom-left',\n  BOTTOM_RIGHT: 'bottom-right',\n  BOTTOM_CENTER: 'bottom-center'\n};\n\nexport const TYPE: { [key in KeyOfType]: TypeOptions } = {\n  INFO: 'info',\n  SUCCESS: 'success',\n  WARNING: 'warning',\n  ERROR: 'error',\n  DEFAULT: 'default',\n  DARK: 'dark'\n};\n\nexport const enum Default {\n  COLLAPSE_DURATION = 300,\n  DEBOUNCE_DURATION = 50,\n  CSS_NAMESPACE = 'Toastify',\n  DRAGGABLE_PERCENT = 80\n}\n\nexport const enum Direction {\n  X = 'x',\n  Y = 'y'\n}\n","import { Default } from './constant';\n\n/**\n * Used to collapse toast after exit animation\n */\nexport function collapseToast(\n  node: HTMLElement,\n  done: () => void,\n  duration = Default.COLLAPSE_DURATION\n) {\n  const height = node.scrollHeight;\n  const style = node.style;\n\n  requestAnimationFrame(() => {\n    style.minHeight = 'initial';\n    style.height = height + 'px';\n    style.transition = `all ${duration}ms`;\n\n    requestAnimationFrame(() => {\n      style.height = '0';\n      style.padding = '0';\n      style.margin = '0';\n      setTimeout(done, duration as number);\n    });\n  });\n}\n","import React, { useEffect, useLayoutEffect, useRef } from 'react';\nimport { ToastTransitionProps } from '../types';\n\nimport { collapseToast } from './collapseToast';\nimport { Default } from './constant';\n\nexport interface CSSTransitionProps {\n  /**\n   * Css class to apply when toast enter\n   */\n  enter: string;\n\n  /**\n   * Css class to apply when toast leave\n   */\n  exit: string;\n\n  /**\n   * Append current toast position to the classname.\n   * If multiple classes are provided, only the last one will get the position\n   * For instance `myclass--top-center`...\n   * `Default: false`\n   */\n  appendPosition?: boolean;\n\n  /**\n   * Collapse toast smoothly when exit animation end\n   * `Default: true`\n   */\n  collapse?: boolean;\n\n  /**\n   * Collapse transition duration\n   * `Default: 300`\n   */\n  collapseDuration?: number;\n}\n\nconst enum AnimationStep {\n  Enter,\n  Exit\n}\n\n/**\n * Css animation that just work.\n * You could use animate.css for instance\n *\n *\n * ```\n * cssTransition({\n *   enter: \"animate__animated animate__bounceIn\",\n *   exit: \"animate__animated animate__bounceOut\"\n * })\n * ```\n *\n */\nexport function cssTransition({\n  enter,\n  exit,\n  appendPosition = false,\n  collapse = true,\n  collapseDuration = Default.COLLAPSE_DURATION\n}: CSSTransitionProps) {\n  return function ToastTransition({\n    children,\n    position,\n    preventExitTransition,\n    done,\n    nodeRef,\n    isIn\n  }: ToastTransitionProps) {\n    const enterClassName = appendPosition ? `${enter}--${position}` : enter;\n    const exitClassName = appendPosition ? `${exit}--${position}` : exit;\n    const baseClassName = useRef<string>();\n    const animationStep = useRef(AnimationStep.Enter);\n\n    useLayoutEffect(() => {\n      onEnter();\n    }, []);\n\n    useEffect(() => {\n      if (!isIn) preventExitTransition ? onExited() : onExit();\n    }, [isIn]);\n\n    function onEnter() {\n      const node = nodeRef.current!;\n      baseClassName.current = node.className;\n      node.className += ` ${enterClassName}`;\n      node.addEventListener('animationend', onEntered);\n    }\n\n    function onEntered() {\n      const node = nodeRef.current!;\n      node.removeEventListener('animationend', onEntered);\n      if (animationStep.current === AnimationStep.Enter) {\n        node.className = baseClassName.current!;\n      }\n    }\n\n    function onExit() {\n      animationStep.current = AnimationStep.Exit;\n      const node = nodeRef.current!;\n\n      node.className += ` ${exitClassName}`;\n      node.addEventListener('animationend', onExited);\n    }\n\n    function onExited() {\n      const node = nodeRef.current!;\n\n      node.removeEventListener('animationend', onExited);\n      collapse ? collapseToast(node, done, collapseDuration) : done();\n    }\n\n    return <>{children}</>;\n  };\n}\n","import {\n  Id,\n  ToastContent,\n  ClearWaitingQueueParams,\n  NotValidatedToastProps\n} from '../types';\nimport { ContainerInstance } from '../hooks';\n\nexport const enum Event {\n  Show,\n  Clear,\n  DidMount,\n  WillUnmount,\n  Change,\n  ClearWaitingQueue\n}\n\ntype OnShowCallback = (\n  content: ToastContent,\n  options: NotValidatedToastProps\n) => void;\ntype OnClearCallback = (id?: Id) => void;\ntype OnClearWaitingQueue = (params: ClearWaitingQueueParams) => void;\ntype OnDidMountCallback = (containerInstance: ContainerInstance) => void;\ntype OnWillUnmountCallback = OnDidMountCallback;\nexport type OnChangeCallback = (\n  toast: number,\n  containerId?: number | string\n) => void;\ntype Callback =\n  | OnShowCallback\n  | OnClearCallback\n  | OnClearWaitingQueue\n  | OnDidMountCallback\n  | OnWillUnmountCallback\n  | OnChangeCallback;\ntype TimeoutId = ReturnType<typeof window.setTimeout>;\n\nexport interface EventManager {\n  list: Map<Event, Callback[]>;\n  emitQueue: Map<Event, TimeoutId[]>;\n  on(event: Event.Show, callback: OnShowCallback): EventManager;\n  on(event: Event.Clear, callback: OnClearCallback): EventManager;\n  on(\n    event: Event.ClearWaitingQueue,\n    callback: OnClearWaitingQueue\n  ): EventManager;\n  on(event: Event.DidMount, callback: OnDidMountCallback): EventManager;\n  on(event: Event.WillUnmount, callback: OnWillUnmountCallback): EventManager;\n  on(event: Event.Change, callback: OnChangeCallback): EventManager;\n  off(event: Event, callback?: Callback): EventManager;\n  cancelEmit(event: Event): EventManager;\n  emit(\n    event: Event.Show,\n    content: React.ReactNode,\n    options: NotValidatedToastProps\n  ): void;\n  emit(event: Event.Clear, id?: string | number): void;\n  emit(event: Event.ClearWaitingQueue, params: ClearWaitingQueueParams): void;\n  emit(event: Event.DidMount, containerInstance: ContainerInstance): void;\n  emit(event: Event.WillUnmount, containerInstance: ContainerInstance): void;\n  emit(event: Event.Change, toast: number, containerId?: number | string): void;\n}\n\nexport const eventManager: EventManager = {\n  list: new Map(),\n  emitQueue: new Map(),\n\n  on(event: Event, callback: Callback) {\n    this.list.has(event) || this.list.set(event, []);\n    this.list.get(event)!.push(callback);\n    return this;\n  },\n\n  off(event, callback) {\n    if (callback) {\n      const cb = this.list.get(event)!.filter(cb => cb !== callback);\n      this.list.set(event, cb);\n      return this;\n    }\n    this.list.delete(event);\n    return this;\n  },\n\n  cancelEmit(event) {\n    const timers = this.emitQueue.get(event);\n    if (timers) {\n      timers.forEach(clearTimeout);\n      this.emitQueue.delete(event);\n    }\n\n    return this;\n  },\n\n  /**\n   * Enqueue the event at the end of the call stack\n   * Doing so let the user call toast as follow:\n   * toast('1')\n   * toast('2')\n   * toast('3')\n   * Without setTimemout the code above will not work\n   */\n  emit(event: Event, ...args: any[]) {\n    this.list.has(event) &&\n      this.list.get(event)!.forEach((callback: Callback) => {\n        const timer = setTimeout(() => {\n          // @ts-ignore\n          callback(...args);\n        }, 0);\n\n        this.emitQueue.has(event) || this.emitQueue.set(event, []);\n        this.emitQueue.get(event)!.push(timer);\n      });\n  }\n};\n","import { useRef, useEffect } from 'react';\n\n/**\n * `useKeeper` is a helper around `useRef`.\n *\n * You don't need to access the `.current`property to get the value\n * If refresh is set to true. The ref will be updated every render\n */\nexport function useKeeper<T>(arg: T, refresh = false) {\n  const ref = useRef<T>(arg);\n\n  useEffect(() => {\n    if (refresh) ref.current = arg;\n  });\n\n  return ref.current;\n}\n","import { Id } from '../types';\n\nimport { isToastIdValid } from '../utils';\n\nexport const enum ActionType {\n  ADD,\n  REMOVE\n}\nexport type State = Array<Id>;\nexport type Action =\n  | { type: ActionType.ADD; toastId: Id; staleId?: Id }\n  | { type: ActionType.REMOVE; toastId?: Id };\n\nexport function reducer(state: State, action: Action) {\n  switch (action.type) {\n    case ActionType.ADD:\n      return [...state, action.toastId].filter(id => id !== action.staleId);\n    case ActionType.REMOVE:\n      return isToastIdValid(action.toastId)\n        ? state.filter(id => id !== action.toastId)\n        : [];\n  }\n}\n","import {\n  useEffect,\n  useRef,\n  useReducer,\n  cloneElement,\n  isValidElement\n} from 'react';\nimport {\n  parseClassName,\n  canBeRendered,\n  isBool,\n  isFn,\n  isNum,\n  isStr,\n  isToastIdValid,\n  getAutoCloseDelay,\n  Direction,\n  Default\n} from '../utils';\nimport { eventManager, Event } from '../core/eventManager';\n\nimport {\n  Id,\n  ToastContainerProps,\n  ToastProps,\n  ToastContent,\n  Toast,\n  ToastPosition,\n  ClearWaitingQueueParams,\n  NotValidatedToastProps,\n  ToastTransition\n} from '../types';\nimport { useKeeper } from './useKeeper';\nimport { ActionType, reducer } from './toastContainerReducer';\n\ntype CollectionItem = Record<Id, Toast>;\ntype ToastToRender = Partial<Record<ToastPosition, Toast[]>>;\n\ninterface QueuedToast {\n  toastContent: ToastContent;\n  toastProps: ToastProps;\n  staleId?: Id;\n}\n\nexport interface ContainerInstance {\n  toastKey: number;\n  displayedToast: number;\n  props: ToastContainerProps;\n  containerId?: Id | null;\n  isToastActive: (toastId: Id) => boolean;\n  getToast: (id: Id) => Toast | null;\n}\n\nexport function useToastContainer(props: ToastContainerProps) {\n  const [, forceUpdate] = useReducer(x => x + 1, 0);\n  const [toast, dispatch] = useReducer(reducer, []);\n  const containerRef = useRef(null);\n  let toastCount = useKeeper(0);\n  let queue = useKeeper<QueuedToast[]>([]);\n  const collection = useKeeper<CollectionItem>({});\n  const instance = useKeeper<ContainerInstance>({\n    toastKey: 1,\n    displayedToast: 0,\n    props,\n    containerId: null,\n    isToastActive: isToastActive,\n    getToast: id => collection[id] || null\n  });\n\n  useEffect(() => {\n    instance.containerId = props.containerId;\n    eventManager\n      .cancelEmit(Event.WillUnmount)\n      .on(Event.Show, buildToast)\n      .on(Event.Clear, toastId => containerRef.current && removeToast(toastId))\n      .on(Event.ClearWaitingQueue, clearWaitingQueue)\n      .emit(Event.DidMount, instance);\n\n    return () => eventManager.emit(Event.WillUnmount, instance);\n  }, []);\n\n  useEffect(() => {\n    instance.isToastActive = isToastActive;\n    instance.displayedToast = toast.length;\n    eventManager.emit(Event.Change, toast.length, props.containerId);\n  }, [toast]);\n\n  useEffect(() => {\n    instance.props = props;\n  });\n\n  function isToastActive(id: Id) {\n    return toast.indexOf(id) !== -1;\n  }\n\n  function clearWaitingQueue({ containerId }: ClearWaitingQueueParams) {\n    const { limit } = instance.props;\n    if (limit && (!containerId || instance.containerId === containerId)) {\n      toastCount -= queue.length;\n      queue = [];\n    }\n  }\n\n  function removeToast(toastId?: Id) {\n    dispatch({ type: ActionType.REMOVE, toastId });\n  }\n\n  function dequeueToast() {\n    const { toastContent, toastProps, staleId } = queue.shift() as QueuedToast;\n    appendToast(toastContent, toastProps, staleId);\n  }\n\n  /**\n   * check if a container is attached to the dom\n   * check for multi-container, build only if associated\n   * check for duplicate toastId if no update\n   */\n  function isNotValid({\n    containerId,\n    toastId,\n    updateId\n  }: NotValidatedToastProps) {\n    return !containerRef.current ||\n      (instance.props.enableMultiContainer &&\n        containerId !== instance.props.containerId) ||\n      (collection[toastId] && updateId == null)\n      ? true\n      : false;\n  }\n\n  // this function and all the function called inside needs to rely on ref(`useKeeper`)\n  function buildToast(\n    content: ToastContent,\n    { delay, staleId, ...options }: NotValidatedToastProps\n  ) {\n    if (!canBeRendered(content) || isNotValid(options)) return;\n\n    const { toastId, updateId } = options;\n    const { props } = instance;\n    const closeToast = () => removeToast(toastId);\n    const isNotAnUpdate = options.updateId == null;\n\n    if (isNotAnUpdate) toastCount++;\n\n    const toastProps: ToastProps = {\n      toastId,\n      updateId,\n      isIn: false,\n      key: options.key || instance.toastKey++,\n      type: options.type,\n      closeToast: closeToast,\n      closeButton: options.closeButton,\n      rtl: props.rtl,\n      position: options.position || (props.position as ToastPosition),\n      transition: options.transition || (props.transition as ToastTransition),\n      className: parseClassName(options.className || props.toastClassName),\n      bodyClassName: parseClassName(\n        options.bodyClassName || props.bodyClassName\n      ),\n      style: options.style || props.toastStyle,\n      bodyStyle: options.bodyStyle || props.bodyStyle,\n      onClick: options.onClick || props.onClick,\n      pauseOnHover: isBool(options.pauseOnHover)\n        ? options.pauseOnHover\n        : props.pauseOnHover,\n      pauseOnFocusLoss: isBool(options.pauseOnFocusLoss)\n        ? options.pauseOnFocusLoss\n        : props.pauseOnFocusLoss,\n      draggable: isBool(options.draggable)\n        ? options.draggable\n        : props.draggable,\n      draggablePercent: isNum(options.draggablePercent)\n        ? options.draggablePercent\n        : (props.draggablePercent as number),\n      draggableDirection:\n        options.draggableDirection || props.draggableDirection,\n      closeOnClick: isBool(options.closeOnClick)\n        ? options.closeOnClick\n        : props.closeOnClick,\n      progressClassName: parseClassName(\n        options.progressClassName || props.progressClassName\n      ),\n      progressStyle: options.progressStyle || props.progressStyle,\n      autoClose: getAutoCloseDelay(options.autoClose, props.autoClose),\n      hideProgressBar: isBool(options.hideProgressBar)\n        ? options.hideProgressBar\n        : props.hideProgressBar,\n      progress: options.progress,\n      role: isStr(options.role) ? options.role : props.role,\n      deleteToast() {\n        removeFromCollection(toastId);\n      }\n    };\n\n    if (isFn(options.onOpen)) toastProps.onOpen = options.onOpen;\n    if (isFn(options.onClose)) toastProps.onClose = options.onClose;\n\n    //  tweak for vertical dragging\n    if (\n      toastProps.draggableDirection === Direction.Y &&\n      toastProps.draggablePercent === Default.DRAGGABLE_PERCENT\n    ) {\n      (toastProps.draggablePercent as number) *= 1.5;\n    }\n\n    let closeButton = props.closeButton;\n\n    if (options.closeButton === false || canBeRendered(options.closeButton)) {\n      closeButton = options.closeButton;\n    } else if (options.closeButton === true) {\n      closeButton = canBeRendered(props.closeButton) ? props.closeButton : true;\n    }\n\n    toastProps.closeButton = closeButton;\n\n    let toastContent = content;\n\n    if (isValidElement(content) && !isStr(content.type)) {\n      toastContent = cloneElement(content, {\n        closeToast,\n        toastProps\n      });\n    } else if (isFn(content)) {\n      toastContent = content({ closeToast, toastProps });\n    }\n\n    // not handling limit + delay by design. Waiting for user feedback first\n    if (\n      props.limit &&\n      props.limit > 0 &&\n      toastCount > props.limit &&\n      isNotAnUpdate\n    ) {\n      queue.push({ toastContent, toastProps, staleId });\n    } else if (isNum(delay) && (delay as number) > 0) {\n      setTimeout(() => {\n        appendToast(toastContent, toastProps, staleId);\n      }, delay);\n    } else {\n      appendToast(toastContent, toastProps, staleId);\n    }\n  }\n\n  function appendToast(\n    content: ToastContent,\n    toastProps: ToastProps,\n    staleId?: Id\n  ) {\n    const { toastId } = toastProps;\n\n    if (staleId) delete collection[staleId];\n\n    collection[toastId] = {\n      content,\n      props: toastProps\n    };\n    dispatch({\n      type: ActionType.ADD,\n      toastId,\n      staleId\n    });\n  }\n\n  function removeFromCollection(toastId: Id) {\n    delete collection[toastId];\n    const queueLen = queue.length;\n    toastCount = isToastIdValid(toastId)\n      ? toastCount - 1\n      : toastCount - instance.displayedToast;\n\n    if (toastCount < 0) toastCount = 0;\n\n    if (queueLen > 0) {\n      const freeSlot = isToastIdValid(toastId) ? 1 : instance.props.limit!;\n\n      if (queueLen === 1 || freeSlot === 1) {\n        instance.displayedToast++;\n        dequeueToast();\n      } else {\n        const toDequeue = freeSlot > queueLen ? queueLen : freeSlot;\n        instance.displayedToast = toDequeue;\n\n        for (let i = 0; i < toDequeue; i++) dequeueToast();\n      }\n    } else {\n      forceUpdate();\n    }\n  }\n\n  function getToastToRender<T>(\n    cb: (position: ToastPosition, toastList: Toast[]) => T\n  ) {\n    const toastToRender: ToastToRender = {};\n    const toastList = props.newestOnTop\n      ? Object.keys(collection).reverse()\n      : Object.keys(collection);\n\n    for (let i = 0; i < toastList.length; i++) {\n      const toast = collection[toastList[i]];\n      const { position } = toast.props;\n      toastToRender[position] || (toastToRender[position] = []);\n\n      toastToRender[position]!.push(toast);\n    }\n\n    return (Object.keys(toastToRender) as Array<ToastPosition>).map(p =>\n      cb(p, toastToRender[p]!)\n    );\n  }\n\n  return {\n    getToastToRender,\n    collection,\n    containerRef,\n    isToastActive\n  };\n}\n","import {\n  useState,\n  useRef,\n  useEffect,\n  isValidElement,\n  DOMAttributes\n} from 'react';\n\nimport { isFn } from '../utils';\nimport { ToastProps } from '../types';\nimport { useKeeper } from './useKeeper';\nimport { Direction } from '../utils/constant';\n\ninterface Draggable {\n  start: number;\n  x: number;\n  y: number;\n  delta: number;\n  removalDistance: number;\n  canCloseOnClick: boolean;\n  canDrag: boolean;\n  boundingRect: DOMRect | null;\n}\n\ntype DragEvent = MouseEvent & TouchEvent;\n\nfunction getX(e: DragEvent) {\n  return e.targetTouches && e.targetTouches.length >= 1\n    ? e.targetTouches[0].clientX\n    : e.clientX;\n}\n\nfunction getY(e: DragEvent) {\n  return e.targetTouches && e.targetTouches.length >= 1\n    ? e.targetTouches[0].clientY\n    : e.clientY;\n}\n\nexport function useToast(props: ToastProps) {\n  const [isRunning, setIsRunning] = useState(true);\n  const [preventExitTransition, setPreventExitTransition] = useState(false);\n  const toastRef = useRef<HTMLDivElement>(null);\n  const drag = useKeeper<Draggable>({\n    start: 0,\n    x: 0,\n    y: 0,\n    delta: 0,\n    removalDistance: 0,\n    canCloseOnClick: true,\n    canDrag: false,\n    boundingRect: null\n  });\n  const syncProps = useKeeper(props, true);\n  const { autoClose, pauseOnHover, closeToast, onClick, closeOnClick } = props;\n\n  useEffect(() => {\n    if (isFn(props.onOpen))\n      props.onOpen(isValidElement(props.children) && props.children.props);\n\n    return () => {\n      if (isFn(syncProps.onClose))\n        syncProps.onClose(\n          isValidElement(syncProps.children) && syncProps.children.props\n        );\n    };\n  }, []);\n\n  useEffect(() => {\n    props.draggable && bindDragEvents();\n    return () => {\n      props.draggable && unbindDragEvents();\n    };\n  }, [props.draggable]);\n\n  useEffect(() => {\n    props.pauseOnFocusLoss && bindFocusEvents();\n    return () => {\n      props.pauseOnFocusLoss && unbindFocusEvents();\n    };\n  }, [props.pauseOnFocusLoss]);\n\n  function onDragStart(\n    e: React.MouseEvent<HTMLElement, MouseEvent> | React.TouchEvent<HTMLElement>\n  ) {\n    if (props.draggable) {\n      const toast = toastRef.current!;\n      drag.canCloseOnClick = true;\n      drag.canDrag = true;\n      drag.boundingRect = toast.getBoundingClientRect();\n      toast.style.transition = '';\n      drag.x = getX(e.nativeEvent as DragEvent);\n      drag.y = getY(e.nativeEvent as DragEvent);\n\n      if (props.draggableDirection === Direction.X) {\n        drag.start = drag.x;\n        drag.removalDistance =\n          toast.offsetWidth * (props.draggablePercent / 100);\n      } else {\n        drag.start = drag.y;\n        drag.removalDistance =\n          toast.offsetHeight * (props.draggablePercent / 100);\n      }\n    }\n  }\n\n  function onDragTransitionEnd() {\n    if (drag.boundingRect) {\n      const { top, bottom, left, right } = drag.boundingRect;\n\n      if (\n        props.pauseOnHover &&\n        drag.x >= left &&\n        drag.x <= right &&\n        drag.y >= top &&\n        drag.y <= bottom\n      ) {\n        pauseToast();\n      } else {\n        playToast();\n      }\n    }\n  }\n\n  function playToast() {\n    setIsRunning(true);\n  }\n\n  function pauseToast() {\n    setIsRunning(false);\n  }\n\n  function bindFocusEvents() {\n    if (!document.hasFocus()) pauseToast();\n\n    window.addEventListener('focus', playToast);\n    window.addEventListener('blur', pauseToast);\n  }\n\n  function unbindFocusEvents() {\n    window.removeEventListener('focus', playToast);\n    window.removeEventListener('blur', pauseToast);\n  }\n\n  function bindDragEvents() {\n    document.addEventListener('mousemove', onDragMove);\n    document.addEventListener('mouseup', onDragEnd);\n\n    document.addEventListener('touchmove', onDragMove);\n    document.addEventListener('touchend', onDragEnd);\n  }\n\n  function unbindDragEvents() {\n    document.removeEventListener('mousemove', onDragMove);\n    document.removeEventListener('mouseup', onDragEnd);\n\n    document.removeEventListener('touchmove', onDragMove);\n    document.removeEventListener('touchend', onDragEnd);\n  }\n\n  function onDragMove(e: MouseEvent | TouchEvent) {\n    if (drag.canDrag) {\n      e.preventDefault();\n\n      const toast = toastRef.current!;\n      if (isRunning) pauseToast();\n\n      drag.x = getX(e as DragEvent);\n      drag.y = getY(e as DragEvent);\n\n      if (props.draggableDirection === Direction.X) {\n        drag.delta = drag.x - drag.start;\n      } else {\n        drag.delta = drag.y - drag.start;\n      }\n\n      // prevent false positif during a toast click\n      if (drag.start !== drag.x) drag.canCloseOnClick = false;\n\n      toast.style.transform = `translate${props.draggableDirection}(${drag.delta}px)`;\n      toast.style.opacity = `${1 -\n        Math.abs(drag.delta / drag.removalDistance)}`;\n    }\n  }\n\n  function onDragEnd() {\n    const toast = toastRef.current!;\n    if (drag.canDrag) {\n      drag.canDrag = false;\n\n      if (Math.abs(drag.delta) > drag.removalDistance) {\n        setPreventExitTransition(true);\n        props.closeToast();\n        return;\n      }\n\n      toast.style.transition = 'transform 0.2s, opacity 0.2s';\n      toast.style.transform = `translate${props.draggableDirection}(0)`;\n      toast.style.opacity = '1';\n    }\n  }\n\n  const eventHandlers: DOMAttributes<HTMLElement> = {\n    onMouseDown: onDragStart,\n    onTouchStart: onDragStart,\n    onMouseUp: onDragTransitionEnd,\n    onTouchEnd: onDragTransitionEnd\n  };\n\n  if (autoClose && pauseOnHover) {\n    eventHandlers.onMouseEnter = pauseToast;\n    eventHandlers.onMouseLeave = playToast;\n  }\n\n  // prevent toast from closing when user drags the toast\n  if (closeOnClick) {\n    eventHandlers.onClick = (e: React.MouseEvent) => {\n      onClick && onClick(e);\n      drag.canCloseOnClick && closeToast();\n    };\n  }\n\n  return {\n    playToast,\n    pauseToast,\n    isRunning,\n    preventExitTransition,\n    toastRef,\n    eventHandlers\n  };\n}\n","import * as React from 'react';\nimport { Default } from '../utils';\nimport { TypeOptions } from '../types';\n\nexport interface CloseButtonProps {\n  closeToast: (e: React.MouseEvent<HTMLElement>) => void;\n  type: TypeOptions;\n  ariaLabel?: string;\n}\n\nexport function CloseButton({\n  closeToast,\n  type,\n  ariaLabel = 'close'\n}: CloseButtonProps) {\n  return (\n    <button\n      className={`${Default.CSS_NAMESPACE}__close-button ${Default.CSS_NAMESPACE}__close-button--${type}`}\n      type=\"button\"\n      onClick={e => {\n        e.stopPropagation();\n        closeToast(e);\n      }}\n      aria-label={ariaLabel}\n    >\n      <svg aria-hidden=\"true\" viewBox=\"0 0 14 16\">\n        <path\n          fillRule=\"evenodd\"\n          d=\"M7.71 8.23l3.75 3.75-1.48 1.48-3.75-3.75-3.75 3.75L1 11.98l3.75-3.75L1 4.48 2.48 3l3.75 3.75L9.98 3l1.48 1.48-3.75 3.75z\"\n        />\n      </svg>\n    </button>\n  );\n}\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { TYPE, Default, isFn } from './../utils';\nimport { TypeOptions, ToastClassName } from '../types';\n\nexport interface ProgressBarProps {\n  /**\n   * The animation delay which determine when to close the toast\n   */\n  delay: number;\n\n  /**\n   * Whether or not the animation is running or paused\n   */\n  isRunning: boolean;\n\n  /**\n   * Func to close the current toast\n   */\n  closeToast: () => void;\n\n  /**\n   * Optional type : info, success ...\n   */\n  type: TypeOptions;\n\n  /**\n   * Hide or not the progress bar\n   */\n  hide?: boolean;\n\n  /**\n   * Optionnal className\n   */\n  className?: ToastClassName;\n\n  /**\n   * Optionnal inline style\n   */\n  style?: React.CSSProperties;\n\n  /**\n   * Tell wether or not controlled progress bar is used\n   */\n  controlledProgress?: boolean;\n\n  /**\n   * Controlled progress value\n   */\n  progress?: number | string;\n\n  /**\n   * Support rtl content\n   */\n  rtl?: boolean;\n\n  /**\n   * Tell if the component is visible on screen or not\n   */\n  isIn?: boolean;\n}\n\nexport function ProgressBar({\n  delay,\n  isRunning,\n  closeToast,\n  type,\n  hide,\n  className,\n  style: userStyle,\n  controlledProgress,\n  progress,\n  rtl,\n  isIn\n}: ProgressBarProps) {\n  const style: React.CSSProperties = {\n    ...userStyle,\n    animationDuration: `${delay}ms`,\n    animationPlayState: isRunning ? 'running' : 'paused',\n    opacity: hide ? 0 : 1\n  };\n\n  if (controlledProgress) style.transform = `scaleX(${progress})`;\n  const defaultClassName = cx(\n    `${Default.CSS_NAMESPACE}__progress-bar`,\n    controlledProgress\n      ? `${Default.CSS_NAMESPACE}__progress-bar--controlled`\n      : `${Default.CSS_NAMESPACE}__progress-bar--animated`,\n    `${Default.CSS_NAMESPACE}__progress-bar--${type}`,\n    {\n      [`${Default.CSS_NAMESPACE}__progress-bar--rtl`]: rtl\n    }\n  );\n  const classNames = isFn(className)\n    ? className({\n        rtl,\n        type,\n        defaultClassName\n      })\n    : cx(defaultClassName, className);\n\n  // 🧐 controlledProgress is derived from progress\n  // so if controlledProgress is set\n  // it means that this is also the case for progress\n  const animationEvent = {\n    [controlledProgress && progress! >= 1\n      ? 'onTransitionEnd'\n      : 'onAnimationEnd']:\n      controlledProgress && progress! < 1\n        ? null\n        : () => {\n            isIn && closeToast();\n          }\n  };\n\n  // TODO: add aria-valuenow, aria-valuemax, aria-valuemin\n\n  return (\n    <div\n      role=\"progressbar\"\n      aria-hidden={hide ? 'true' : 'false'}\n      aria-label=\"notification timer\"\n      className={classNames}\n      style={style}\n      {...animationEvent}\n    />\n  );\n}\n\nProgressBar.defaultProps = {\n  type: TYPE.DEFAULT,\n  hide: false\n};\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { ProgressBar } from './ProgressBar';\nimport { ToastProps } from '../types';\nimport { Default, isFn } from '../utils';\nimport { useToast } from '../hooks';\n\nexport const Toast: React.FC<ToastProps> = props => {\n  const {\n    isRunning,\n    preventExitTransition,\n    toastRef,\n    eventHandlers\n  } = useToast(props);\n  const {\n    closeButton,\n    children,\n    autoClose,\n    onClick,\n    type,\n    hideProgressBar,\n    closeToast,\n    transition: Transition,\n    position,\n    className,\n    style,\n    bodyClassName,\n    bodyStyle,\n    progressClassName,\n    progressStyle,\n    updateId,\n    role,\n    progress,\n    rtl,\n    toastId,\n    deleteToast,\n    isIn\n  } = props;\n  const defaultClassName = cx(\n    `${Default.CSS_NAMESPACE}__toast`,\n    `${Default.CSS_NAMESPACE}__toast--${type}`,\n    {\n      [`${Default.CSS_NAMESPACE}__toast--rtl`]: rtl\n    }\n  );\n  const cssClasses = isFn(className)\n    ? className({\n        rtl,\n        position,\n        type,\n        defaultClassName\n      })\n    : cx(defaultClassName, className);\n  const isProgressControlled = !!progress;\n\n  function renderCloseButton(closeButton: any) {\n    if (!closeButton) return;\n\n    const props = { closeToast, type };\n\n    if (isFn(closeButton)) return closeButton(props);\n\n    if (React.isValidElement(closeButton))\n      return React.cloneElement(closeButton, props);\n  }\n\n  return (\n    <Transition\n      isIn={isIn}\n      done={deleteToast}\n      position={position}\n      preventExitTransition={preventExitTransition}\n      nodeRef={toastRef}\n    >\n      <div\n        id={toastId as string}\n        onClick={onClick}\n        className={cssClasses}\n        {...eventHandlers}\n        style={style}\n        ref={toastRef}\n      >\n        <div\n          {...(isIn && { role: role })}\n          className={\n            isFn(bodyClassName)\n              ? bodyClassName({ type })\n              : cx(`${Default.CSS_NAMESPACE}__toast-body`, bodyClassName)\n          }\n          style={bodyStyle}\n        >\n          {children}\n        </div>\n        {renderCloseButton(closeButton)}\n        {(autoClose || isProgressControlled) && (\n          <ProgressBar\n            {...(updateId && !isProgressControlled\n              ? { key: `pb-${updateId}` }\n              : {})}\n            rtl={rtl}\n            delay={autoClose as number}\n            isRunning={isRunning}\n            isIn={isIn}\n            closeToast={closeToast}\n            hide={hideProgressBar}\n            type={type}\n            style={progressStyle}\n            className={progressClassName}\n            controlledProgress={isProgressControlled}\n            progress={progress}\n          />\n        )}\n      </div>\n    </Transition>\n  );\n};\n","import { Default, cssTransition } from '../utils';\n\nconst Bounce = cssTransition({\n  enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__bounce-enter`,\n  exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__bounce-exit`,\n  appendPosition: true\n});\n\nconst Slide = cssTransition({\n  enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__slide-enter`,\n  exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__slide-exit`,\n  appendPosition: true\n});\n\nconst Zoom = cssTransition({\n  enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__zoom-enter`,\n  exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__zoom-exit`\n});\n\nconst Flip = cssTransition({\n  enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__flip-enter`,\n  exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__flip-exit`\n});\n\nexport { Bounce, Slide, Zoom, Flip };\n","import * as React from 'react';\nimport cx from 'clsx';\n\nimport { Toast } from './Toast';\nimport { CloseButton } from './CloseButton';\nimport { Bounce } from './Transitions';\nimport { POSITION, Direction, Default, parseClassName, isFn } from '../utils';\nimport { useToastContainer } from '../hooks';\nimport { ToastContainerProps, ToastPosition } from '../types';\n\nexport const ToastContainer: React.FC<ToastContainerProps> = props => {\n  const { getToastToRender, containerRef, isToastActive } = useToastContainer(\n    props\n  );\n  const { className, style, rtl, containerId } = props;\n\n  function getClassName(position: ToastPosition) {\n    const defaultClassName = cx(\n      `${Default.CSS_NAMESPACE}__toast-container`,\n      `${Default.CSS_NAMESPACE}__toast-container--${position}`,\n      { [`${Default.CSS_NAMESPACE}__toast-container--rtl`]: rtl }\n    );\n    return isFn(className)\n      ? className({\n          position,\n          rtl,\n          defaultClassName\n        })\n      : cx(defaultClassName, parseClassName(className));\n  }\n\n  return (\n    <div\n      ref={containerRef}\n      className={Default.CSS_NAMESPACE as string}\n      id={containerId as string}\n    >\n      {getToastToRender((position, toastList) => {\n        const containerStyle: React.CSSProperties =\n          toastList.length === 0\n            ? { ...style, pointerEvents: 'none' }\n            : { ...style };\n\n        return (\n          <div\n            className={getClassName(position)}\n            style={containerStyle}\n            key={`container-${position}`}\n          >\n            {toastList.map(({ content, props: toastProps }) => {\n              return (\n                <Toast\n                  {...toastProps}\n                  isIn={isToastActive(toastProps.toastId)}\n                  key={`toast-${toastProps.key}`}\n                  closeButton={\n                    toastProps.closeButton === true\n                      ? CloseButton\n                      : toastProps.closeButton\n                  }\n                >\n                  {content}\n                </Toast>\n              );\n            })}\n          </div>\n        );\n      })}\n    </div>\n  );\n};\n\nToastContainer.defaultProps = {\n  position: POSITION.TOP_RIGHT as ToastPosition,\n  transition: Bounce,\n  rtl: false,\n  autoClose: 5000,\n  hideProgressBar: false,\n  closeButton: CloseButton,\n  pauseOnHover: true,\n  pauseOnFocusLoss: true,\n  closeOnClick: true,\n  newestOnTop: false,\n  draggable: true,\n  draggablePercent: Default.DRAGGABLE_PERCENT as number,\n  draggableDirection: Direction.X,\n  role: 'alert'\n};\n","import * as React from 'react';\nimport { render } from 'react-dom';\n\nimport { POSITION, TYPE, canUseDom, isStr, isNum, isFn } from '../utils';\nimport { eventManager, OnChangeCallback, Event } from './eventManager';\nimport {\n  ToastContent,\n  ToastOptions,\n  ToastProps,\n  Id,\n  ToastContainerProps,\n  UpdateOptions,\n  ClearWaitingQueueParams,\n  NotValidatedToastProps\n} from '../types';\nimport { ContainerInstance } from 'hooks';\nimport { ToastContainer } from '../components';\n\ninterface EnqueuedToast {\n  content: ToastContent;\n  options: NotValidatedToastProps;\n}\n\nlet containers = new Map<ContainerInstance | Id, ContainerInstance>();\nlet latestInstance: ContainerInstance | Id;\nlet containerDomNode: HTMLElement;\nlet containerConfig: ToastContainerProps;\nlet queue: EnqueuedToast[] = [];\nlet lazy = false;\n\n/**\n * Check whether any container is currently mounted in the DOM\n */\nfunction isAnyContainerMounted() {\n  return containers.size > 0;\n}\n\n/**\n * Get the toast by id, given it's in the DOM, otherwise returns null\n */\nfunction getToast(toastId: Id, { containerId }: ToastOptions) {\n  const container = containers.get(containerId || latestInstance);\n  if (!container) return null;\n\n  return container.getToast(toastId);\n}\n\n/**\n * Generate a random toastId\n */\nfunction generateToastId() {\n  return Math.random()\n    .toString(36)\n    .substr(2, 9);\n}\n\n/**\n * Generate a toastId or use the one provided\n */\nfunction getToastId(options?: ToastOptions) {\n  if (options && (isStr(options.toastId) || isNum(options.toastId))) {\n    return options.toastId;\n  }\n\n  return generateToastId();\n}\n\n/**\n * If the container is not mounted, the toast is enqueued and\n * the container lazy mounted\n */\nfunction dispatchToast(\n  content: ToastContent,\n  options: NotValidatedToastProps\n): Id {\n  if (isAnyContainerMounted()) {\n    eventManager.emit(Event.Show, content, options);\n  } else {\n    queue.push({ content, options });\n    if (lazy && canUseDom) {\n      lazy = false;\n      containerDomNode = document.createElement('div');\n      document.body.appendChild(containerDomNode);\n      render(<ToastContainer {...containerConfig} />, containerDomNode);\n    }\n  }\n\n  return options.toastId;\n}\n\n/**\n * Merge provided options with the defaults settings and generate the toastId\n */\nfunction mergeOptions(type: string, options?: ToastOptions) {\n  return {\n    ...options,\n    type: (options && options.type) || type,\n    toastId: getToastId(options)\n  } as NotValidatedToastProps;\n}\n\nconst createToastByType = (type: string) => (\n  content: ToastContent,\n  options?: ToastOptions\n) => dispatchToast(content, mergeOptions(type, options));\n\nconst toast = (content: ToastContent, options?: ToastOptions) =>\n  dispatchToast(content, mergeOptions(TYPE.DEFAULT, options));\n\ntoast.success = createToastByType(TYPE.SUCCESS);\ntoast.info = createToastByType(TYPE.INFO);\ntoast.error = createToastByType(TYPE.ERROR);\ntoast.warning = createToastByType(TYPE.WARNING);\ntoast.dark = createToastByType(TYPE.DARK);\ntoast.warn = toast.warning;\n\n/**\n * Remove toast programmaticaly\n */\ntoast.dismiss = (id?: Id) => eventManager.emit(Event.Clear, id);\n\n/**\n * Clear waiting queue when limit is used\n */\ntoast.clearWaitingQueue = (params: ClearWaitingQueueParams = {}) =>\n  eventManager.emit(Event.ClearWaitingQueue, params);\n\n/**\n * return true if one container is displaying the toast\n */\ntoast.isActive = (id: Id) => {\n  let isToastActive = false;\n\n  containers.forEach(container => {\n    if (container.isToastActive && container.isToastActive(id)) {\n      isToastActive = true;\n    }\n  });\n\n  return isToastActive;\n};\n\ntoast.update = (toastId: Id, options: UpdateOptions = {}) => {\n  // if you call toast and toast.update directly nothing will be displayed\n  // this is why I defered the update\n  setTimeout(() => {\n    const toast = getToast(toastId, options as ToastOptions);\n    if (toast) {\n      const { props: oldOptions, content: oldContent } = toast;\n\n      const nextOptions = {\n        ...oldOptions,\n        ...options,\n        toastId: options.toastId || toastId,\n        updateId: generateToastId()\n      } as ToastProps & UpdateOptions;\n\n      if (nextOptions.toastId !== toastId) nextOptions.staleId = toastId;\n\n      const content = nextOptions.render || oldContent;\n      delete nextOptions.render;\n\n      dispatchToast(content, nextOptions);\n    }\n  }, 0);\n};\n\n/**\n * Used for controlled progress bar.\n */\ntoast.done = (id: Id) => {\n  toast.update(id, {\n    progress: 1\n  });\n};\n\n/**\n * Track changes. The callback get the number of toast displayed\n *\n */\ntoast.onChange = (callback: OnChangeCallback) => {\n  if (isFn(callback)) {\n    eventManager.on(Event.Change, callback);\n  }\n  return () => {\n    isFn(callback) && eventManager.off(Event.Change, callback);\n  };\n};\n\n/**\n * Configure the ToastContainer when lazy mounted\n */\ntoast.configure = (config: ToastContainerProps = {}) => {\n  lazy = true;\n  containerConfig = config;\n};\n\ntoast.POSITION = POSITION;\ntoast.TYPE = TYPE;\n\n/**\n * Wait until the ToastContainer is mounted to dispatch the toast\n * and attach isActive method\n */\neventManager\n  .on(Event.DidMount, (containerInstance: ContainerInstance) => {\n    latestInstance = containerInstance.containerId || containerInstance;\n    containers.set(latestInstance, containerInstance);\n\n    queue.forEach(item => {\n      eventManager.emit(Event.Show, item.content, item.options);\n    });\n\n    queue = [];\n  })\n  .on(Event.WillUnmount, (containerInstance: ContainerInstance) => {\n    containers.delete(containerInstance.containerId || containerInstance);\n\n    if (containers.size === 0) {\n      eventManager\n        .off(Event.Show)\n        .off(Event.Clear)\n        .off(Event.ClearWaitingQueue);\n    }\n\n    if (canUseDom && containerDomNode) {\n      document.body.removeChild(containerDomNode);\n    }\n  });\n\nexport { toast };\n"]},"metadata":{},"sourceType":"module"}