{"version":3,"sources":["webpack:///./node_modules/clsx/dist/clsx.js","webpack:///../src/utils/propValidator.ts","webpack:///../src/utils/constant.ts","webpack:///../src/utils/cssTransition.tsx","webpack:///../src/utils/collapseToast.ts","webpack:///../src/utils/mapper.ts","webpack:///../src/core/eventManager.ts","webpack:///../src/components/Icons.tsx","webpack:///../src/hooks/useToastContainer.ts","webpack:///../src/hooks/useToast.ts","webpack:///../src/components/CloseButton.tsx","webpack:///../src/components/ProgressBar.tsx","webpack:///../src/components/Toast.tsx","webpack:///../src/components/Transitions.tsx","webpack:///../src/components/ToastContainer.tsx","webpack:///../src/core/toast.ts"],"names":["e","r","o","t","f","Array","isArray","length","arguments","module","exports","clsx","isNum","v","isNaN","isBool","isStr","isFn","parseClassName","isToastIdValid","toastId","canBeRendered","content","isValidElement","POSITION","TOP_LEFT","TOP_RIGHT","TOP_CENTER","BOTTOM_LEFT","BOTTOM_RIGHT","BOTTOM_CENTER","TYPE","INFO","SUCCESS","WARNING","ERROR","DEFAULT","cssTransition","enter","exit","appendPosition","collapse","collapseDuration","children","position","preventExitTransition","done","nodeRef","isIn","enterClassName","exitClassName","animationStep","useRef","useLayoutEffect","node","current","classToToken","split","onEntered","target","dispatchEvent","Event","removeEventListener","type","classList","remove","add","addEventListener","useEffect","onExited","duration","scrollHeight","style","requestAnimationFrame","minHeight","height","transition","padding","margin","setTimeout","collapseToast","className","React","toToastItem","toast","status","containerId","props","id","theme","data","isLoading","icon","eventManager","list","Map","emitQueue","on","event","callback","this","has","set","get","push","off","cb","filter","delete","cancelEmit","timers","forEach","clearTimeout","emit","timer","Svg","_ref","rest","viewBox","width","fill","Icons","info","d","warning","success","error","spinner","getIcon","Icon","iconProps","cloneElement","maybeIcon","useToastContainer","forceUpdate","useReducer","x","toastIds","setToastIds","useState","containerRef","toastToRender","isToastActive","indexOf","instance","toastKey","displayedToast","count","queue","getToast","clearWaitingQueue","limit","removeToast","state","dequeueToast","toastContent","toastProps","staleId","shift","appendToast","buildToast","delay","options","enableMultiContainer","updateId","isNotValid","closeToast","isNotAnUpdate","key","closeButton","rtl","toastClassName","bodyClassName","toastStyle","bodyStyle","onClick","pauseOnHover","pauseOnFocusLoss","draggable","draggablePercent","draggableDirection","closeOnClick","progressClassName","progressStyle","autoClose","toastAutoClose","containerAutoClose","hideProgressBar","progress","role","deleteToast","removed","queueLen","freeSlot","toDequeue","i","iconOut","onOpen","onClose","clear","getToastToRender","toRender","collection","from","values","newestOnTop","reverse","p","getX","targetTouches","clientX","getY","clientY","useToast","isRunning","setIsRunning","setPreventExitTransition","toastRef","drag","start","y","delta","removalDistance","canCloseOnClick","canDrag","boundingRect","didMove","syncProps","onDragStart","document","onDragMove","onDragEnd","getBoundingClientRect","nativeEvent","offsetWidth","offsetHeight","onDragTransitionEnd","top","bottom","left","right","pauseToast","playToast","transform","opacity","Math","abs","once","hasFocus","window","bindFocusEvents","eventHandlers","onMouseDown","onTouchStart","onMouseUp","onTouchEnd","onMouseEnter","onMouseLeave","CloseButton","ariaLabel","stopPropagation","fillRule","ProgressBar","hide","userStyle","controlledProgress","animationDuration","animationPlayState","defaultClassName","cx","classNames","animationEvent","defaultProps","Toast","Transition","cssClasses","isProgressControlled","closeButtonProps","Close","ref","Bounce","ToastContainer","forwardRef","getClassName","toastList","containerStyle","pointerEvents","map","displayName","latestInstance","containers","generateToastId","random","toString","substring","getToastId","dispatchToast","size","mergeOptions","createToastByType","loading","promise","pending","render","resetParams","resolver","input","result","dismiss","baseParams","params","update","then","catch","err","warn","dark","isActive","container","oldOptions","oldContent","nextOptions","onChange","containerInstance","item"],"mappings":"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","file":"16-8d1b99cfe59fd0e6e9a9.js","sourcesContent":["function e(r){var o,t,f=\"\";if(\"string\"==typeof r||\"number\"==typeof r)f+=r;else if(\"object\"==typeof r)if(Array.isArray(r))for(o=0;o 0)\n ? toastAutoClose\n : containerAutoClose;\n}\n\nexport function canBeRendered(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';\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};\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\nexport const enum SyntheticEvent {\n ENTRANCE_ANIMATION_END = 'd'\n}\n","import React, { useEffect, useLayoutEffect, useRef } from 'react';\nimport { collapseToast } from './collapseToast';\nimport { Default, SyntheticEvent } from './constant';\n\nimport { ToastTransitionProps } from '../types';\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 animationStep = useRef(AnimationStep.Enter);\n\n useLayoutEffect(() => {\n const node = nodeRef.current!;\n const classToToken = enterClassName.split(' ');\n\n const onEntered = (e: AnimationEvent) => {\n if (e.target !== nodeRef.current) return;\n\n node.dispatchEvent(new Event(SyntheticEvent.ENTRANCE_ANIMATION_END));\n node.removeEventListener('animationend', onEntered);\n node.removeEventListener('animationcancel', onEntered);\n if (\n animationStep.current === AnimationStep.Enter &&\n e.type !== 'animationcancel'\n ) {\n node.classList.remove(...classToToken);\n }\n };\n\n const onEnter = () => {\n node.classList.add(...classToToken);\n node.addEventListener('animationend', onEntered);\n node.addEventListener('animationcancel', onEntered);\n };\n\n onEnter();\n }, []);\n\n useEffect(() => {\n const node = nodeRef.current!;\n\n const onExited = () => {\n node.removeEventListener('animationend', onExited);\n collapse ? collapseToast(node, done, collapseDuration) : done();\n };\n\n const onExit = () => {\n animationStep.current = AnimationStep.Exit;\n node.className += ` ${exitClassName}`;\n node.addEventListener('animationend', onExited);\n };\n\n if (!isIn) preventExitTransition ? onExited() : onExit();\n }, [isIn]);\n\n return <>{children};\n };\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 { scrollHeight, style } = node;\n\n requestAnimationFrame(() => {\n style.minHeight = 'initial';\n style.height = scrollHeight + '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 { Toast, ToastItem, ToastItemStatus } from '../types';\n\nexport function toToastItem(toast: Toast, status: ToastItemStatus): ToastItem {\n return {\n content: toast.content,\n containerId: toast.props.containerId,\n id: toast.props.toastId,\n theme: toast.props.theme,\n type: toast.props.type,\n data: toast.props.data || {},\n isLoading: toast.props.isLoading,\n icon: toast.props.icon,\n status\n };\n}\n","import {\n Id,\n ToastContent,\n ClearWaitingQueueParams,\n NotValidatedToastProps,\n ToastItem\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;\n\nexport type OnChangeCallback = (toast: ToastItem) => void;\n\ntype Callback =\n | OnShowCallback\n | OnClearCallback\n | OnClearWaitingQueue\n | OnDidMountCallback\n | OnWillUnmountCallback\n | OnChangeCallback;\ntype TimeoutId = ReturnType;\n\nexport interface EventManager {\n list: Map;\n emitQueue: Map;\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, data: ToastItem): 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: TimeoutId = 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 React, { cloneElement, isValidElement } from 'react';\n\nimport { Theme, ToastProps, TypeOptions } from '../types';\nimport { Default, isFn, isNum, isStr } from '../utils';\n\n/**\n * Used when providing custom icon\n */\nexport interface IconProps {\n theme: Theme;\n type: TypeOptions;\n}\n\nexport type BuiltInIconProps = React.SVGProps & IconProps;\n\nconst Svg: React.FC = ({ theme, type, ...rest }) => (\n \n);\n\nfunction Warning(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Info(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Success(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Error(props: BuiltInIconProps) {\n return (\n \n \n \n );\n}\n\nfunction Spinner() {\n return
;\n}\n\nexport const Icons = {\n info: Info,\n warning: Warning,\n success: Success,\n error: Error,\n spinner: Spinner\n};\n\nconst maybeIcon = (type: string): type is keyof typeof Icons => type in Icons;\n\nexport function getIcon({ theme, type, isLoading, icon }: ToastProps) {\n let Icon: React.ReactNode = null;\n const iconProps = { theme, type };\n\n if (icon === false) {\n // hide\n } else if (isFn(icon)) {\n Icon = icon(iconProps);\n } else if (isValidElement(icon)) {\n Icon = cloneElement(icon, iconProps);\n } else if (isStr(icon) || isNum(icon)) {\n Icon = icon;\n } else if (isLoading) {\n Icon = Icons.spinner();\n } else if (maybeIcon(type)) {\n Icon = Icons[type](iconProps);\n }\n\n return Icon;\n}\n","import {\n useEffect,\n useRef,\n useReducer,\n cloneElement,\n isValidElement,\n useState\n} from 'react';\nimport {\n parseClassName,\n canBeRendered,\n isBool,\n isFn,\n isNum,\n isStr,\n isToastIdValid,\n getAutoCloseDelay,\n toToastItem\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';\n\nimport { getIcon } from '../components/Icons';\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 | undefined;\n queue: QueuedToast[];\n count: number;\n}\n\nexport function useToastContainer(props: ToastContainerProps) {\n const [, forceUpdate] = useReducer(x => x + 1, 0);\n const [toastIds, setToastIds] = useState([]);\n const containerRef = useRef(null);\n const toastToRender = useRef(new Map()).current;\n const isToastActive = (id: Id) => toastIds.indexOf(id) !== -1;\n const instance = useRef({\n toastKey: 1,\n displayedToast: 0,\n count: 0,\n queue: [],\n props,\n containerId: null,\n isToastActive,\n getToast: id => toastToRender.get(id)\n }).current;\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 () => {\n toastToRender.clear();\n eventManager.emit(Event.WillUnmount, instance);\n };\n }, []);\n\n useEffect(() => {\n instance.props = props;\n instance.isToastActive = isToastActive;\n instance.displayedToast = toastIds.length;\n });\n\n function clearWaitingQueue({ containerId }: ClearWaitingQueueParams) {\n const { limit } = instance.props;\n if (limit && (!containerId || instance.containerId === containerId)) {\n instance.count -= instance.queue.length;\n instance.queue = [];\n }\n }\n\n function removeToast(toastId?: Id) {\n setToastIds(state =>\n isToastIdValid(toastId) ? state.filter(id => id !== toastId) : []\n );\n }\n\n function dequeueToast() {\n const { toastContent, toastProps, staleId } =\n instance.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(options: NotValidatedToastProps) {\n return (\n !containerRef.current ||\n (instance.props.enableMultiContainer &&\n options.containerId !== instance.props.containerId) ||\n (toastToRender.has(options.toastId) && options.updateId == null)\n );\n }\n\n // this function and all the function called inside needs to rely on refs\n function buildToast(\n content: ToastContent,\n { delay, staleId, ...options }: NotValidatedToastProps\n ) {\n if (!canBeRendered(content) || isNotValid(options)) return;\n\n const { toastId, updateId, data } = options;\n const { props } = instance;\n const closeToast = () => removeToast(toastId);\n const isNotAnUpdate = updateId == null;\n\n if (isNotAnUpdate) instance.count++;\n\n const toastProps: ToastProps = {\n toastId,\n updateId,\n data,\n containerId: options.containerId,\n isLoading: options.isLoading,\n theme: options.theme || props.theme!,\n icon: options.icon != null ? options.icon : props.icon,\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:\n options.draggablePercent || (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: options.isLoading\n ? false\n : getAutoCloseDelay(options.autoClose, props.autoClose),\n hideProgressBar: isBool(options.hideProgressBar)\n ? options.hideProgressBar\n : props.hideProgressBar,\n progress: options.progress,\n role: options.role || props.role,\n deleteToast() {\n const removed = toToastItem(toastToRender.get(toastId)!, 'removed');\n toastToRender.delete(toastId);\n\n eventManager.emit(Event.Change, removed);\n\n const queueLen = instance.queue.length;\n instance.count = isToastIdValid(toastId)\n ? instance.count - 1\n : instance.count - instance.displayedToast;\n\n if (instance.count < 0) instance.count = 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\n toastProps.iconOut = getIcon(toastProps);\n\n if (isFn(options.onOpen)) toastProps.onOpen = options.onOpen;\n if (isFn(options.onClose)) toastProps.onClose = options.onClose;\n\n toastProps.closeButton = props.closeButton;\n\n if (options.closeButton === false || canBeRendered(options.closeButton)) {\n toastProps.closeButton = options.closeButton;\n } else if (options.closeButton === true) {\n toastProps.closeButton = canBeRendered(props.closeButton)\n ? props.closeButton\n : true;\n }\n\n let toastContent = content;\n\n if (isValidElement(content) && !isStr(content.type)) {\n toastContent = cloneElement(content, {\n closeToast,\n toastProps,\n data\n });\n } else if (isFn(content)) {\n toastContent = content({ closeToast, toastProps, data });\n }\n\n // not handling limit + delay by design. Waiting for user feedback first\n if (\n props.limit &&\n props.limit > 0 &&\n instance.count > props.limit &&\n isNotAnUpdate\n ) {\n instance.queue.push({ toastContent, toastProps, staleId });\n } else if (isNum(delay)) {\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) toastToRender.delete(staleId);\n\n const toast = {\n content,\n props: toastProps\n };\n toastToRender.set(toastId, toast);\n\n setToastIds(state => [...state, toastId].filter(id => id !== staleId));\n eventManager.emit(\n Event.Change,\n toToastItem(toast, toast.props.updateId == null ? 'added' : 'updated')\n );\n }\n\n function getToastToRender(\n cb: (position: ToastPosition, toastList: Toast[]) => T\n ) {\n const toRender = new Map();\n const collection = Array.from(toastToRender.values());\n\n if (props.newestOnTop) collection.reverse();\n\n collection.forEach(toast => {\n const { position } = toast.props;\n toRender.has(position) || toRender.set(position, []);\n toRender.get(position)!.push(toast);\n });\n\n return Array.from(toRender, p => cb(p[0], p[1]));\n }\n\n return {\n getToastToRender,\n containerRef,\n isToastActive\n };\n}\n","import {\n useState,\n useRef,\n useEffect,\n isValidElement,\n DOMAttributes\n} from 'react';\n\nimport { isFn, Default, Direction, SyntheticEvent } from '../utils';\nimport { ToastProps } from '../types';\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 didMove: boolean;\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(false);\n const [preventExitTransition, setPreventExitTransition] = useState(false);\n const toastRef = useRef(null);\n const drag = useRef({\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 didMove: false\n }).current;\n const syncProps = useRef(props);\n const { autoClose, pauseOnHover, closeToast, onClick, closeOnClick } = props;\n\n useEffect(() => {\n syncProps.current = props;\n });\n\n useEffect(() => {\n if (toastRef.current)\n toastRef.current.addEventListener(\n SyntheticEvent.ENTRANCE_ANIMATION_END,\n playToast,\n { once: true }\n );\n\n if (isFn(props.onOpen))\n props.onOpen(isValidElement(props.children) && props.children.props);\n\n return () => {\n const props = syncProps.current;\n if (isFn(props.onClose))\n props.onClose(isValidElement(props.children) && props.children.props);\n };\n }, []);\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 | React.TouchEvent\n ) {\n if (props.draggable) {\n bindDragEvents();\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 *\n (props.draggablePercent === Default.DRAGGABLE_PERCENT\n ? props.draggablePercent * 1.5\n : 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 drag.didMove = false;\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 const toast = toastRef.current!;\n if (drag.canDrag && toast) {\n drag.didMove = true;\n if (isRunning) pauseToast();\n drag.x = getX(e as DragEvent);\n drag.y = getY(e as DragEvent);\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 toast.style.transform = `translate${props.draggableDirection}(${drag.delta}px)`;\n toast.style.opacity = `${\n 1 - Math.abs(drag.delta / drag.removalDistance)\n }`;\n }\n }\n\n function onDragEnd() {\n unbindDragEvents();\n const toast = toastRef.current!;\n if (drag.canDrag && drag.didMove && toast) {\n drag.canDrag = false;\n if (Math.abs(drag.delta) > drag.removalDistance) {\n setPreventExitTransition(true);\n props.closeToast();\n return;\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 = {\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 React from 'react';\nimport { Default } from '../utils';\nimport { Theme, TypeOptions } from '../types';\n\nexport interface CloseButtonProps {\n closeToast: (e: React.MouseEvent) => void;\n type: TypeOptions;\n ariaLabel?: string;\n theme: Theme;\n}\n\nexport function CloseButton({\n closeToast,\n theme,\n ariaLabel = 'close'\n}: CloseButtonProps) {\n return (\n {\n e.stopPropagation();\n closeToast(e);\n }}\n aria-label={ariaLabel}\n >\n \n \n \n \n );\n}\n","import React from 'react';\nimport cx from 'clsx';\n\nimport { TYPE, Default, isFn } from './../utils';\nimport { TypeOptions, ToastClassName, Theme } 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 * The theme that is currently used\n */\n theme: Theme;\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 theme\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-theme--${theme}`,\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 \n );\n}\n\nProgressBar.defaultProps = {\n type: TYPE.DEFAULT,\n hide: false\n};\n","import React from 'react';\nimport cx from 'clsx';\n\nimport { ProgressBar } from './ProgressBar';\nimport { CloseButton } from './CloseButton';\nimport { ToastProps } from '../types';\nimport { Default, isFn } from '../utils';\nimport { useToast } from '../hooks/useToast';\n\nexport const Toast: React.FC = props => {\n const { isRunning, preventExitTransition, toastRef, 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 isLoading,\n iconOut,\n theme\n } = props;\n const defaultClassName = cx(\n `${Default.CSS_NAMESPACE}__toast`,\n `${Default.CSS_NAMESPACE}__toast-theme--${theme}`,\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 const closeButtonProps = { closeToast, type, theme };\n let Close: React.ReactNode = null;\n\n if (closeButton === false) {\n // hide\n } else if (isFn(closeButton)) {\n Close = closeButton(closeButtonProps);\n } else if (React.isValidElement(closeButton)) {\n Close = React.cloneElement(closeButton, closeButtonProps);\n } else {\n Close = CloseButton(closeButtonProps);\n }\n\n return (\n \n \n \n {iconOut != null && (\n \n {iconOut}\n
\n )}\n
{children}
\n \n {Close}\n {(autoClose || isProgressControlled) && (\n \n )}\n \n \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","// https://github.com/yannickcr/eslint-plugin-react/issues/3140\n/* eslint react/prop-types: \"off\" */\nimport React, { forwardRef, StyleHTMLAttributes, useEffect } 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/useToastContainer';\nimport { ToastContainerProps, ToastPosition } from '../types';\n\nexport const ToastContainer = forwardRef(\n (props, ref) => {\n const { getToastToRender, containerRef, isToastActive } =\n useToastContainer(props);\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 useEffect(() => {\n if (ref) {\n (ref as React.MutableRefObject).current =\n containerRef.current!;\n }\n }, []);\n\n return (\n \n {getToastToRender((position, toastList) => {\n const containerStyle: React.CSSProperties = !toastList.length\n ? { ...style, pointerEvents: 'none' }\n : { ...style };\n\n return (\n \n {toastList.map(({ content, props: toastProps }, i) => {\n return (\n \n }\n key={`toast-${toastProps.key}`}\n >\n {content}\n \n );\n })}\n \n );\n })}\n \n );\n }\n);\n\nToastContainer.displayName = 'ToastContainer';\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 theme: 'light'\n};\n","import { POSITION, TYPE, isStr, isNum, isFn, isToastIdValid } from '../utils';\nimport { eventManager, OnChangeCallback, Event } from './eventManager';\nimport {\n ToastContent,\n ToastOptions,\n ToastProps,\n Id,\n UpdateOptions,\n ClearWaitingQueueParams,\n NotValidatedToastProps,\n TypeOptions\n} from '../types';\nimport { ContainerInstance } from '../hooks';\n\ninterface EnqueuedToast {\n content: ToastContent;\n options: NotValidatedToastProps;\n}\n\nlet containers = new Map();\nlet latestInstance: ContainerInstance | Id;\nlet queue: EnqueuedToast[] = [];\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().toString(36).substring(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 (containers.size > 0) {\n eventManager.emit(Event.Show, content, options);\n } else {\n queue.push({ content, options });\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\nfunction createToastByType(type: string) {\n return (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(content, mergeOptions(type, options));\n}\n\nfunction toast(content: ToastContent, options?: ToastOptions) {\n return dispatchToast(content, mergeOptions(TYPE.DEFAULT, options));\n}\n\ntoast.loading = (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(\n content,\n mergeOptions(TYPE.DEFAULT, {\n isLoading: true,\n autoClose: false,\n closeOnClick: false,\n closeButton: false,\n draggable: false,\n ...options\n })\n );\n\nexport interface ToastPromiseParams {\n pending?: string | UpdateOptions;\n success?: string | UpdateOptions;\n error?: string | UpdateOptions;\n}\n\nfunction handlePromise(\n promise: Promise | (() => Promise),\n { pending, error, success }: ToastPromiseParams,\n options?: ToastOptions\n) {\n let id: Id;\n\n if (pending) {\n id = isStr(pending)\n ? toast.loading(pending, options)\n : toast.loading(pending.render, {\n ...options,\n ...(pending as ToastOptions)\n });\n }\n\n const resetParams = {\n isLoading: null,\n autoClose: null,\n closeOnClick: null,\n closeButton: null,\n draggable: null,\n delay: 100\n };\n\n const resolver = (\n type: TypeOptions,\n input: string | UpdateOptions | undefined,\n result: T\n ) => {\n // Remove the toast if the input has not been provided. This prevents the toast from hanging\n // in the pending state if a success/error toast has not been provided.\n if (input == null) {\n toast.dismiss(id);\n return;\n }\n\n const baseParams = {\n type,\n ...resetParams,\n ...options,\n data: result\n };\n const params = isStr(input) ? { render: input } : input;\n\n // if the id is set we know that it's an update\n if (id) {\n toast.update(id, {\n ...baseParams,\n ...params\n });\n } else {\n // using toast.promise without loading\n toast(params.render, {\n ...baseParams,\n ...params\n } as ToastOptions);\n }\n\n return result;\n };\n\n const p = isFn(promise) ? promise() : promise;\n\n //call the resolvers only when needed\n p.then(result => resolver('success', success, result)).catch(err =>\n resolver('error', error, err)\n );\n\n return p;\n}\n\ntoast.promise = handlePromise;\ntoast.success = createToastByType(TYPE.SUCCESS);\ntoast.info = createToastByType(TYPE.INFO);\ntoast.error = createToastByType(TYPE.ERROR);\ntoast.warning = createToastByType(TYPE.WARNING);\ntoast.warn = toast.warning;\ntoast.dark = (content: ToastContent, options?: ToastOptions) =>\n dispatchToast(\n content,\n mergeOptions(TYPE.DEFAULT, {\n theme: 'dark',\n ...options\n })\n );\n\n/**\n * Remove toast programmaticaly\n */\ntoast.dismiss = (id?: Id) => {\n if (containers.size > 0) {\n eventManager.emit(Event.Clear, id);\n } else {\n queue = queue.filter(t => isToastIdValid(id) && t.options.toastId !== id);\n }\n};\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 * Subscribe to change when a toast is added, removed and updated\n *\n * Usage:\n * ```\n * const unsubscribe = toast.onChange((payload) => {\n * switch (payload.status) {\n * case \"added\":\n * // new toast added\n * break;\n * case \"updated\":\n * // toast updated\n * break;\n * case \"removed\":\n * // toast has been removed\n * break;\n * }\n * })\n * ```\n */\ntoast.onChange = (callback: OnChangeCallback) => {\n eventManager.on(Event.Change, callback);\n return () => {\n eventManager.off(Event.Change, callback);\n };\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\nexport { toast };\n"],"sourceRoot":""}