1 line
66 KiB
Plaintext
1 line
66 KiB
Plaintext
{"version":3,"file":"react-toastify.esm.mjs","sources":["../src/utils/propValidator.ts","../src/utils/collapseToast.ts","../src/utils/cssTransition.tsx","../src/utils/mapper.ts","../src/core/store.ts","../src/hooks/useToastContainer.ts","../src/core/containerObserver.ts","../src/hooks/useToast.ts","../src/components/ProgressBar.tsx","../src/core/genToastId.ts","../src/core/toast.ts","../src/hooks/useIsomorphicLayoutEffect.ts","../src/components/Icons.tsx","../src/components/Toast.tsx","../src/components/CloseButton.tsx","../src/components/Transitions.tsx","../src/components/ToastContainer.tsx"],"sourcesContent":["import { isValidElement } from 'react';\nimport { Id } from '../types';\n\nexport const isNum = (v: any): v is Number =>\n typeof v === 'number' && !isNaN(v);\n\nexport const isStr = (v: any): v is String => typeof v === 'string';\n\nexport const isFn = (v: any): v is Function => typeof v === 'function';\n\nexport const isId = (v: unknown): v is Id => isStr(v) || isNum(v);\n\nexport const parseClassName = (v: any) => (isStr(v) || isFn(v) ? v : null);\n\nexport const getAutoCloseDelay = (\n toastAutoClose?: false | number,\n containerAutoClose?: false | number\n) =>\n toastAutoClose === false || (isNum(toastAutoClose) && toastAutoClose > 0)\n ? toastAutoClose\n : containerAutoClose;\n\nexport const canBeRendered = <T>(content: T): boolean =>\n isValidElement(content) || isStr(content) || isFn(content) || isNum(content);\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 React, { useEffect, useLayoutEffect, useRef } from 'react';\nimport { collapseToast } from './collapseToast';\nimport { Default } 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 playToast\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 playToast();\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 { Toast, ToastItem, ToastItemStatus } from '../types';\n\nexport function toToastItem(toast: Toast, status: ToastItemStatus): ToastItem {\n return toast != null\n ? {\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 : // monkey patch for now\n ({} as ToastItem);\n}\n","import {\n Id,\n NotValidatedToastProps,\n OnChangeCallback,\n ToastContainerProps,\n ToastContent,\n ToastItem,\n ToastOptions\n} from '../types';\nimport { Default, canBeRendered, isId } from '../utils';\nimport {\n ContainerObserver,\n createContainerObserver\n} from './containerObserver';\n\ninterface EnqueuedToast {\n content: ToastContent<any>;\n options: NotValidatedToastProps;\n}\n\ninterface ClearWaitingQueueParams {\n containerId?: Id;\n}\n\ninterface RemoveParams {\n id?: Id;\n containerId: Id;\n}\n\nconst containers = new Map<Id, ContainerObserver>();\nlet renderQueue: EnqueuedToast[] = [];\nconst listeners = new Set<OnChangeCallback>();\n\nconst dispatchChanges = (data: ToastItem) => listeners.forEach(cb => cb(data));\n\nconst hasContainers = () => containers.size > 0;\n\nfunction flushRenderQueue() {\n renderQueue.forEach(v => pushToast(v.content, v.options));\n renderQueue = [];\n}\n\nexport const getToast = (id: Id, { containerId }: ToastOptions) =>\n containers.get(containerId || Default.CONTAINER_ID)?.toasts.get(id);\n\nexport function isToastActive(id: Id, containerId?: Id) {\n if (containerId) return !!containers.get(containerId)?.isToastActive(id);\n\n let isActive = false;\n containers.forEach(c => {\n if (c.isToastActive(id)) isActive = true;\n });\n\n return isActive;\n}\n\nexport function removeToast(params?: Id | RemoveParams) {\n if (!hasContainers()) {\n renderQueue = renderQueue.filter(\n v => params != null && v.options.toastId !== params\n );\n return;\n }\n\n if (params == null || isId(params)) {\n containers.forEach(c => {\n c.removeToast(params as Id);\n });\n } else if (params && ('containerId' in params || 'id' in params)) {\n containers.get(params.containerId)?.removeToast(params.id) ||\n containers.forEach(c => {\n c.removeToast(params.id);\n });\n }\n}\n\nexport function clearWaitingQueue(p: ClearWaitingQueueParams = {}) {\n containers.forEach(c => {\n if (c.props.limit && (!p.containerId || c.id === p.containerId)) {\n c.clearQueue();\n }\n });\n}\n\nexport function pushToast<TData>(\n content: ToastContent<TData>,\n options: NotValidatedToastProps\n) {\n if (!canBeRendered(content)) return;\n if (!hasContainers()) renderQueue.push({ content, options });\n\n containers.forEach(c => {\n c.buildToast(content, options);\n });\n}\n\ninterface ToggleToastParams {\n id?: Id;\n containerId?: Id;\n}\n\ntype RegisterToggleOpts = {\n id: Id;\n containerId?: Id;\n fn: (v: boolean) => void;\n};\n\nexport function registerToggle(opts: RegisterToggleOpts) {\n containers\n .get(opts.containerId || Default.CONTAINER_ID)\n ?.setToggle(opts.id, opts.fn);\n}\n\nexport function toggleToast(v: boolean, opt?: ToggleToastParams) {\n containers.forEach(c => {\n if (opt == null || !opt?.containerId) {\n c.toggle(v, opt?.id);\n } else if (opt?.containerId === c.id) {\n c.toggle(v, opt?.id);\n }\n });\n}\n\nexport function registerContainer(props: ToastContainerProps) {\n const id = props.containerId || Default.CONTAINER_ID;\n return {\n subscribe(notify: () => void) {\n const container = createContainerObserver(id, props, dispatchChanges);\n\n containers.set(id, container);\n const unobserve = container.observe(notify);\n flushRenderQueue();\n\n return () => {\n unobserve();\n containers.delete(id);\n };\n },\n setProps(p: ToastContainerProps) {\n containers.get(id)?.setProps(p);\n },\n getSnapshot() {\n return containers.get(id)?.getSnapshot();\n }\n };\n}\n\nexport function onChange(cb: OnChangeCallback) {\n listeners.add(cb);\n\n return () => {\n listeners.delete(cb);\n };\n}\n","import { useRef, useSyncExternalStore } from 'react';\nimport { isToastActive, registerContainer } from '../core/store';\nimport { Toast, ToastContainerProps, ToastPosition } from '../types';\n\nexport function useToastContainer(props: ToastContainerProps) {\n const { subscribe, getSnapshot, setProps } = useRef(\n registerContainer(props)\n ).current;\n setProps(props);\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot);\n\n function getToastToRender<T>(\n cb: (position: ToastPosition, toastList: Toast[]) => T\n ) {\n if (!snapshot) return [];\n\n const toRender = new Map<ToastPosition, Toast[]>();\n\n snapshot.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 isToastActive,\n count: snapshot?.length\n };\n}\n","import { ReactElement, cloneElement, isValidElement } from 'react';\nimport {\n Id,\n NotValidatedToastProps,\n OnChangeCallback,\n Toast,\n ToastContainerProps,\n ToastContent,\n ToastProps\n} from '../types';\nimport {\n canBeRendered,\n getAutoCloseDelay,\n isFn,\n isNum,\n isStr,\n parseClassName,\n toToastItem\n} from '../utils';\n\ninterface QueuedToast {\n content: ToastContent<any>;\n props: ToastProps;\n staleId?: Id;\n}\n\ntype Notify = () => void;\n\ninterface ActiveToast {\n content: ToastContent<any>;\n props: ToastProps;\n staleId?: Id;\n}\n\nexport type ContainerObserver = ReturnType<typeof createContainerObserver>;\n\nexport function createContainerObserver(\n id: Id,\n containerProps: ToastContainerProps,\n dispatchChanges: OnChangeCallback\n) {\n let toastKey = 1;\n let toastCount = 0;\n let queue: QueuedToast[] = [];\n let activeToasts: Id[] = [];\n let snapshot: Toast[] = [];\n let props = containerProps;\n const toasts = new Map<Id, Toast>();\n const listeners = new Set<Notify>();\n\n const observe = (notify: Notify) => {\n listeners.add(notify);\n return () => listeners.delete(notify);\n };\n\n const notify = () => {\n snapshot = Array.from(toasts.values());\n listeners.forEach(cb => cb());\n };\n\n const shouldIgnoreToast = ({\n containerId,\n toastId,\n updateId\n }: NotValidatedToastProps) => {\n const containerMismatch = containerId ? containerId !== id : id !== 1;\n const isDuplicate = toasts.has(toastId) && updateId == null;\n\n return containerMismatch || isDuplicate;\n };\n\n const toggle = (v: boolean, id?: Id) => {\n toasts.forEach(t => {\n if (id == null || id === t.props.toastId) isFn(t.toggle) && t.toggle(v);\n });\n };\n\n const removeToast = (id?: Id) => {\n activeToasts = id == null ? [] : activeToasts.filter(v => v !== id);\n notify();\n };\n\n const clearQueue = () => {\n toastCount -= queue.length;\n queue = [];\n };\n\n const addActiveToast = (toast: ActiveToast) => {\n const { toastId, onOpen, updateId, children } = toast.props;\n const isNew = updateId == null;\n\n if (toast.staleId) toasts.delete(toast.staleId);\n\n toasts.set(toastId, toast);\n activeToasts = [...activeToasts, toast.props.toastId].filter(\n v => v !== toast.staleId\n );\n notify();\n dispatchChanges(toToastItem(toast, isNew ? 'added' : 'updated'));\n\n if (isNew && isFn(onOpen))\n onOpen(isValidElement(children) && children.props);\n };\n\n const buildToast = <TData = unknown>(\n content: ToastContent<TData>,\n options: NotValidatedToastProps\n ) => {\n if (shouldIgnoreToast(options)) return;\n\n const { toastId, updateId, data, staleId, delay } = options;\n const closeToast = () => {\n removeToast(toastId);\n };\n\n const isNotAnUpdate = updateId == null;\n\n if (isNotAnUpdate) toastCount++;\n\n const toastProps = {\n ...props,\n style: props.toastStyle,\n key: toastKey++,\n ...Object.fromEntries(\n Object.entries(options).filter(([_, v]) => v != null)\n ),\n toastId,\n updateId,\n data,\n closeToast,\n isIn: false,\n className: parseClassName(options.className || props.toastClassName),\n bodyClassName: parseClassName(\n options.bodyClassName || props.bodyClassName\n ),\n progressClassName: parseClassName(\n options.progressClassName || props.progressClassName\n ),\n autoClose: options.isLoading\n ? false\n : getAutoCloseDelay(options.autoClose, props.autoClose),\n deleteToast() {\n const toastToRemove = toasts.get(toastId)!;\n const { onClose, children } = toastToRemove.props;\n if (isFn(onClose)) onClose(isValidElement(children) && children.props);\n\n dispatchChanges(toToastItem(toastToRemove, 'removed'));\n toasts.delete(toastId);\n\n toastCount--;\n if (toastCount < 0) toastCount = 0;\n\n if (queue.length > 0) {\n addActiveToast(queue.shift() as ActiveToast);\n return;\n }\n\n notify();\n }\n } as ToastProps;\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 as ReactElement, {\n closeToast,\n toastProps,\n data\n });\n } else if (isFn(content)) {\n toastContent = content({ closeToast, toastProps, data: data as TData });\n }\n\n const activeToast = {\n content: toastContent,\n props: toastProps,\n staleId\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(activeToast);\n } else if (isNum(delay)) {\n setTimeout(() => {\n addActiveToast(activeToast);\n }, delay);\n } else {\n addActiveToast(activeToast);\n }\n };\n\n return {\n id,\n props,\n observe,\n toggle,\n removeToast,\n toasts,\n clearQueue,\n buildToast,\n setProps(p: ToastContainerProps) {\n props = p;\n },\n setToggle: (id: Id, fn: (v: boolean) => void) => {\n toasts.get(id)!.toggle = fn;\n },\n isToastActive: (id: Id) => activeToasts.some(v => v === id),\n getSnapshot: () => (props.newestOnTop ? snapshot.reverse() : snapshot)\n };\n}\n","import { DOMAttributes, useEffect, useRef, useState } from 'react';\n\nimport { ToastProps } from '../types';\nimport { Default, Direction } from '../utils';\nimport { registerToggle } from '../core/store';\n\ninterface Draggable {\n start: number;\n delta: number;\n removalDistance: number;\n canCloseOnClick: boolean;\n canDrag: boolean;\n didMove: boolean;\n}\n\nexport function useToast(props: ToastProps) {\n const [isRunning, setIsRunning] = useState(false);\n const [preventExitTransition, setPreventExitTransition] = useState(false);\n const toastRef = useRef<HTMLDivElement>(null);\n const drag = useRef<Draggable>({\n start: 0,\n delta: 0,\n removalDistance: 0,\n canCloseOnClick: true,\n canDrag: false,\n didMove: false\n }).current;\n const { autoClose, pauseOnHover, closeToast, onClick, closeOnClick } = props;\n\n registerToggle({\n id: props.toastId,\n containerId: props.containerId,\n fn: setIsRunning\n });\n\n useEffect(() => {\n if (props.pauseOnFocusLoss) {\n bindFocusEvents();\n\n return () => {\n unbindFocusEvents();\n };\n }\n }, [props.pauseOnFocusLoss]);\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 onDragStart(e: React.PointerEvent<HTMLElement>) {\n if (props.draggable === true || props.draggable === e.pointerType) {\n bindDragEvents();\n const toast = toastRef.current!;\n drag.canCloseOnClick = true;\n drag.canDrag = true;\n toast.style.transition = 'none';\n\n if (props.draggableDirection === Direction.X) {\n drag.start = e.clientX;\n drag.removalDistance =\n toast.offsetWidth * (props.draggablePercent / 100);\n } else {\n drag.start = e.clientY;\n drag.removalDistance =\n (toast.offsetHeight *\n (props.draggablePercent === Default.DRAGGABLE_PERCENT\n ? props.draggablePercent * 1.5\n : props.draggablePercent)) /\n 100;\n }\n }\n }\n\n function onDragTransitionEnd(e: React.PointerEvent<HTMLElement>) {\n const { top, bottom, left, right } =\n toastRef.current!.getBoundingClientRect();\n\n if (\n e.nativeEvent.type !== 'touchend' &&\n props.pauseOnHover &&\n e.clientX >= left &&\n e.clientX <= right &&\n e.clientY >= top &&\n e.clientY <= bottom\n ) {\n pauseToast();\n } else {\n playToast();\n }\n }\n\n function playToast() {\n setIsRunning(true);\n }\n\n function pauseToast() {\n setIsRunning(false);\n }\n\n function bindDragEvents() {\n drag.didMove = false;\n document.addEventListener('pointermove', onDragMove);\n document.addEventListener('pointerup', onDragEnd);\n }\n\n function unbindDragEvents() {\n document.removeEventListener('pointermove', onDragMove);\n document.removeEventListener('pointerup', onDragEnd);\n }\n\n function onDragMove(e: PointerEvent) {\n const toast = toastRef.current!;\n if (drag.canDrag && toast) {\n drag.didMove = true;\n if (isRunning) pauseToast();\n if (props.draggableDirection === Direction.X) {\n drag.delta = e.clientX - drag.start;\n } else {\n drag.delta = e.clientY - drag.start;\n }\n\n // prevent false positive during a toast click\n if (drag.start !== e.clientX) drag.canCloseOnClick = false;\n const translate =\n props.draggableDirection === 'x'\n ? `${drag.delta}px, var(--y)`\n : `0, calc(${drag.delta}px + var(--y))`;\n toast.style.transform = `translate3d(${translate},0)`;\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 props.collapseAll();\n return;\n }\n\n toast.style.transition = 'transform 0.2s, opacity 0.2s';\n toast.style.removeProperty('transform');\n toast.style.removeProperty('opacity');\n }\n }\n\n const eventHandlers: DOMAttributes<HTMLElement> = {\n onPointerDown: onDragStart,\n onPointerUp: onDragTransitionEnd\n };\n\n if (autoClose && pauseOnHover) {\n eventHandlers.onMouseEnter = pauseToast;\n\n // progress control is delegated to the container\n if (!props.stacked) 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 cx from 'clsx';\n\nimport { Default, isFn, Type } 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 * Optional className\n */\n className?: ToastClassName;\n\n /**\n * Optional 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 = Type.DEFAULT,\n hide,\n className,\n style: userStyle,\n controlledProgress,\n progress,\n rtl,\n isIn,\n theme\n}: ProgressBarProps) {\n const isHidden = hide || (controlledProgress && progress === 0);\n const style: React.CSSProperties = {\n ...userStyle,\n animationDuration: `${delay}ms`,\n animationPlayState: isRunning ? 'running' : 'paused'\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 as number)! >= 1\n ? 'onTransitionEnd'\n : 'onAnimationEnd']:\n controlledProgress && (progress as number)! < 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 className={`${Default.CSS_NAMESPACE}__progress-bar--wrp`}\n data-hidden={isHidden}\n >\n <div\n className={`${Default.CSS_NAMESPACE}__progress-bar--bg ${Default.CSS_NAMESPACE}__progress-bar-theme--${theme} ${Default.CSS_NAMESPACE}__progress-bar--${type}`}\n />\n <div\n role=\"progressbar\"\n aria-hidden={isHidden ? 'true' : 'false'}\n aria-label=\"notification timer\"\n className={classNames}\n style={style}\n {...animationEvent}\n />\n </div>\n );\n}\n","let TOAST_ID = 1;\n\nexport const genToastId = () => `${TOAST_ID++}`;\n","import {\n Id,\n IdOpts,\n NotValidatedToastProps,\n ToastContent,\n ToastOptions,\n ToastProps,\n TypeOptions,\n UpdateOptions\n} from '../types';\nimport { Type, isFn, isNum, isStr } from '../utils';\nimport { genToastId } from './genToastId';\nimport {\n clearWaitingQueue,\n getToast,\n isToastActive,\n onChange,\n pushToast,\n removeToast,\n toggleToast\n} from './store';\n\n/**\n * Generate a toastId or use the one provided\n */\nfunction getToastId<TData>(options?: ToastOptions<TData>) {\n return options && (isStr(options.toastId) || isNum(options.toastId))\n ? options.toastId\n : genToastId();\n}\n\n/**\n * If the container is not mounted, the toast is enqueued\n */\nfunction dispatchToast<TData>(\n content: ToastContent<TData>,\n options: NotValidatedToastProps\n): Id {\n pushToast(content, options);\n return options.toastId;\n}\n\n/**\n * Merge provided options with the defaults settings and generate the toastId\n */\nfunction mergeOptions<TData>(type: string, options?: ToastOptions<TData>) {\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 <TData = unknown>(\n content: ToastContent<TData>,\n options?: ToastOptions<TData>\n ) => dispatchToast(content, mergeOptions(type, options));\n}\n\nfunction toast<TData = unknown>(\n content: ToastContent<TData>,\n options?: ToastOptions<TData>\n) {\n return dispatchToast(content, mergeOptions(Type.DEFAULT, options));\n}\n\ntoast.loading = <TData = unknown>(\n content: ToastContent<TData>,\n options?: ToastOptions<TData>\n) =>\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 TData = unknown,\n TError = unknown,\n TPending = unknown\n> {\n pending?: string | UpdateOptions<TPending>;\n success?: string | UpdateOptions<TData>;\n error?: string | UpdateOptions<TError>;\n}\n\nfunction handlePromise<TData = unknown, TError = unknown, TPending = unknown>(\n promise: Promise<TData> | (() => Promise<TData>),\n { pending, error, success }: ToastPromiseParams<TData, TError, TPending>,\n options?: ToastOptions<TData>\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 } as ToastOptions<TPending>);\n }\n\n const resetParams = {\n isLoading: null,\n autoClose: null,\n closeOnClick: null,\n closeButton: null,\n draggable: null\n };\n\n const resolver = <T>(\n type: TypeOptions,\n input: string | UpdateOptions<T> | 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 } as UpdateOptions);\n } else {\n // using toast.promise without loading\n toast(params!.render, {\n ...baseParams,\n ...params\n } as ToastOptions<T>);\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\n/**\n * Supply a promise or a function that return a promise and the notification will be updated if it resolves or fails.\n * When the promise is pending a spinner is displayed by default.\n * `toast.promise` returns the provided promise so you can chain it.\n *\n * Simple example:\n *\n * ```\n * toast.promise(MyPromise,\n * {\n * pending: 'Promise is pending',\n * success: 'Promise resolved 👌',\n * error: 'Promise rejected 🤯'\n * }\n * )\n *\n * ```\n *\n * Advanced usage:\n * ```\n * toast.promise<{name: string}, {message: string}, undefined>(\n * resolveWithSomeData,\n * {\n * pending: {\n * render: () => \"I'm loading\",\n * icon: false,\n * },\n * success: {\n * render: ({data}) => `Hello ${data.name}`,\n * icon: \"🟢\",\n * },\n * error: {\n * render({data}){\n * // When the promise reject, data will contains the error\n * return <MyErrorComponent message={data.message} />\n * }\n * }\n * }\n * )\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\ninterface RemoveParams {\n id?: Id;\n containerId: Id;\n}\n\nfunction dismiss(params: RemoveParams): void;\nfunction dismiss(params?: Id): void;\nfunction dismiss(params?: Id | RemoveParams) {\n removeToast(params);\n}\n\n/**\n * Remove toast programmatically\n *\n * - Remove all toasts:\n * ```\n * toast.dismiss()\n * ```\n *\n * - Remove all toasts that belongs to a given container\n * ```\n * toast.dismiss({ container: \"123\" })\n * ```\n *\n * - Remove toast that has a given id regardless the container\n * ```\n * toast.dismiss({ id: \"123\" })\n * ```\n *\n * - Remove toast that has a given id for a specific container\n * ```\n * toast.dismiss({ id: \"123\", containerId: \"12\" })\n * ```\n */\ntoast.dismiss = dismiss;\n\n/**\n * Clear waiting queue when limit is used\n */\ntoast.clearWaitingQueue = clearWaitingQueue;\n\n/**\n * Check if a toast is active\n *\n * - Check regardless the container\n * ```\n * toast.isActive(\"123\")\n * ```\n *\n * - Check in a specific container\n * ```\n * toast.isActive(\"123\", \"containerId\")\n * ```\n */\ntoast.isActive = isToastActive;\n\n/**\n * Update a toast, see https://fkhadra.github.io/react-toastify/update-toast/ for more\n *\n * Example:\n * ```\n * // With a string\n * toast.update(toastId, {\n * render: \"New content\",\n * type: \"info\",\n * });\n *\n * // Or with a component\n * toast.update(toastId, {\n * render: MyComponent\n * });\n *\n * // Or a function\n * toast.update(toastId, {\n * render: () => <div>New content</div>\n * });\n *\n * // Apply a transition\n * toast.update(toastId, {\n * render: \"New Content\",\n * type: toast.TYPE.INFO,\n * transition: Rotate\n * })\n * ```\n */\ntoast.update = <TData = unknown>(\n toastId: Id,\n options: UpdateOptions<TData> = {}\n) => {\n const toast = getToast(toastId, options as ToastOptions);\n\n if (toast) {\n const { props: oldOptions, content: oldContent } = toast;\n\n const nextOptions = {\n delay: 100,\n ...oldOptions,\n ...options,\n toastId: options.toastId || toastId,\n updateId: genToastId()\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};\n\n/**\n * Used for controlled progress bar. It will automatically close the notification.\n *\n * If you don't want your notification to be clsoed when the timer is done you should use `toast.update` instead as follow instead:\n *\n * ```\n * toast.update(id, {\n * progress: null, // remove controlled progress bar\n * render: \"ok\",\n * type: \"success\",\n * autoClose: 5000 // set autoClose to the desired value\n * });\n * ```\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 = onChange;\n\n/**\n * Play a toast(s) timer progammatically\n *\n * Usage:\n *\n * - Play all toasts\n * ```\n * toast.play()\n * ```\n *\n * - Play all toasts for a given container\n * ```\n * toast.play({ containerId: \"123\" })\n * ```\n *\n * - Play toast that has a given id regardless the container\n * ```\n * toast.play({ id: \"123\" })\n * ```\n *\n * - Play toast that has a given id for a specific container\n * ```\n * toast.play({ id: \"123\", containerId: \"12\" })\n * ```\n */\ntoast.play = (opts?: IdOpts) => toggleToast(true, opts);\n\n/**\n * Pause a toast(s) timer progammatically\n *\n * Usage:\n *\n * - Pause all toasts\n * ```\n * toast.pause()\n * ```\n *\n * - Pause all toasts for a given container\n * ```\n * toast.pause({ containerId: \"123\" })\n * ```\n *\n * - Pause toast that has a given id regardless the container\n * ```\n * toast.pause({ id: \"123\" })\n * ```\n *\n * - Pause toast that has a given id for a specific container\n * ```\n * toast.pause({ id: \"123\", containerId: \"12\" })\n * ```\n */\ntoast.pause = (opts?: IdOpts) => toggleToast(false, opts);\n\nexport { toast };\n","import { useEffect, useLayoutEffect } from 'react';\n\nexport const useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n","import React, { cloneElement, isValidElement } from 'react';\n\nimport { Theme, ToastProps, TypeOptions } from '../types';\nimport { Default, isFn } from '../utils';\n\n/**\n * Used when providing custom icon\n */\nexport interface IconProps {\n theme: Theme;\n type: TypeOptions;\n isLoading?: boolean;\n}\n\nexport type BuiltInIconProps = React.SVGProps<SVGSVGElement> & IconProps;\n\nconst Svg: React.FC<BuiltInIconProps> = ({\n theme,\n type,\n isLoading,\n ...rest\n}) => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"100%\"\n height=\"100%\"\n fill={\n theme === 'colored'\n ? 'currentColor'\n : `var(--toastify-icon-color-${type})`\n }\n {...rest}\n />\n);\n\nfunction Warning(props: BuiltInIconProps) {\n return (\n <Svg {...props}>\n <path d=\"M23.32 17.191L15.438 2.184C14.728.833 13.416 0 11.996 0c-1.42 0-2.733.833-3.443 2.184L.533 17.448a4.744 4.744 0 000 4.368C1.243 23.167 2.555 24 3.975 24h16.05C22.22 24 24 22.044 24 19.632c0-.904-.251-1.746-.68-2.44zm-9.622 1.46c0 1.033-.724 1.823-1.698 1.823s-1.698-.79-1.698-1.822v-.043c0-1.028.724-1.822 1.698-1.822s1.698.79 1.698 1.822v.043zm.039-12.285l-.84 8.06c-.057.581-.408.943-.897.943-.49 0-.84-.367-.896-.942l-.84-8.065c-.057-.624.25-1.095.779-1.095h1.91c.528.005.84.476.784 1.1z\" />\n </Svg>\n );\n}\n\nfunction Info(props: BuiltInIconProps) {\n return (\n <Svg {...props}>\n <path d=\"M12 0a12 12 0 1012 12A12.013 12.013 0 0012 0zm.25 5a1.5 1.5 0 11-1.5 1.5 1.5 1.5 0 011.5-1.5zm2.25 13.5h-4a1 1 0 010-2h.75a.25.25 0 00.25-.25v-4.5a.25.25 0 00-.25-.25h-.75a1 1 0 010-2h1a2 2 0 012 2v4.75a.25.25 0 00.25.25h.75a1 1 0 110 2z\" />\n </Svg>\n );\n}\n\nfunction Success(props: BuiltInIconProps) {\n return (\n <Svg {...props}>\n <path d=\"M12 0a12 12 0 1012 12A12.014 12.014 0 0012 0zm6.927 8.2l-6.845 9.289a1.011 1.011 0 01-1.43.188l-4.888-3.908a1 1 0 111.25-1.562l4.076 3.261 6.227-8.451a1 1 0 111.61 1.183z\" />\n </Svg>\n );\n}\n\nfunction Error(props: BuiltInIconProps) {\n return (\n <Svg {...props}>\n <path d=\"M11.983 0a12.206 12.206 0 00-8.51 3.653A11.8 11.8 0 000 12.207 11.779 11.779 0 0011.8 24h.214A12.111 12.111 0 0024 11.791 11.766 11.766 0 0011.983 0zM10.5 16.542a1.476 1.476 0 011.449-1.53h.027a1.527 1.527 0 011.523 1.47 1.475 1.475 0 01-1.449 1.53h-.027a1.529 1.529 0 01-1.523-1.47zM11 12.5v-6a1 1 0 012 0v6a1 1 0 11-2 0z\" />\n </Svg>\n );\n}\n\nfunction Spinner() {\n return <div className={`${Default.CSS_NAMESPACE}__spinner`} />;\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 type IconParams = Pick<\n ToastProps,\n 'theme' | 'icon' | 'type' | 'isLoading'\n>;\n\nexport function getIcon({ theme, type, isLoading, icon }: IconParams) {\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, isLoading });\n } else if (isValidElement(icon)) {\n Icon = cloneElement(icon, iconProps);\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 cx from 'clsx';\nimport React, { cloneElement, isValidElement, ReactNode } from 'react';\n\nimport { useToast } from '../hooks/useToast';\nimport { ToastProps } from '../types';\nimport { Default, isFn } from '../utils';\nimport { CloseButton } from './CloseButton';\nimport { ProgressBar } from './ProgressBar';\nimport { getIcon } from './Icons';\n\nexport const Toast: React.FC<ToastProps> = props => {\n const {\n isRunning,\n preventExitTransition,\n toastRef,\n eventHandlers,\n playToast\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 closeOnClick,\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 [`${Default.CSS_NAMESPACE}__toast--close-on-click`]: closeOnClick\n }\n );\n const cssClasses = isFn(className)\n ? className({\n rtl,\n position,\n type,\n defaultClassName\n })\n : cx(defaultClassName, className);\n const icon = getIcon(props);\n const isProgressControlled = !!progress || !autoClose;\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 (isValidElement(closeButton)) {\n Close = cloneElement(closeButton, closeButtonProps);\n } else {\n Close = CloseButton(closeButtonProps);\n }\n\n return (\n <Transition\n isIn={isIn}\n done={deleteToast}\n position={position}\n preventExitTransition={preventExitTransition}\n nodeRef={toastRef}\n playToast={playToast}\n >\n <div\n id={toastId as string}\n onClick={onClick}\n data-in={isIn}\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 {icon != null && (\n <div\n className={cx(`${Default.CSS_NAMESPACE}__toast-icon`, {\n [`${Default.CSS_NAMESPACE}--animate-icon ${Default.CSS_NAMESPACE}__zoom-enter`]:\n !isLoading\n })}\n >\n {icon}\n </div>\n )}\n <div>{children as ReactNode}</div>\n </div>\n {Close}\n <ProgressBar\n {...(updateId && !isProgressControlled\n ? { key: `pb-${updateId}` }\n : {})}\n rtl={rtl}\n theme={theme}\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 || 0}\n />\n </div>\n </Transition>\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<HTMLElement>) => 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 <button\n className={`${Default.CSS_NAMESPACE}__close-button ${Default.CSS_NAMESPACE}__close-button--${theme}`}\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 { Default, cssTransition } from '../utils';\n\nconst getConfig = (animationName: string, appendPosition = false) => ({\n enter: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__${animationName}-enter`,\n exit: `${Default.CSS_NAMESPACE}--animate ${Default.CSS_NAMESPACE}__${animationName}-exit`,\n appendPosition\n});\n\nconst Bounce = cssTransition(getConfig('bounce', true));\n\nconst Slide = cssTransition(getConfig('slide', true));\n\nconst Zoom = cssTransition(getConfig('zoom'));\n\nconst Flip = cssTransition(getConfig('flip'));\n\nexport { Bounce, Slide, Zoom, Flip };\n","import cx from 'clsx';\nimport React, { useRef, useState } from 'react';\n\nimport { toast } from '../core';\nimport { useToastContainer } from '../hooks/useToastContainer';\nimport { useIsomorphicLayoutEffect } from '../hooks/useIsomorphicLayoutEffect';\nimport { ToastContainerProps, ToastPosition } from '../types';\nimport { Default, Direction, isFn, parseClassName } from '../utils';\nimport { Toast } from './Toast';\nimport { Bounce } from './Transitions';\n\nexport const defaultProps: ToastContainerProps = {\n position: 'top-right',\n transition: Bounce,\n autoClose: 5000,\n closeButton: true,\n pauseOnHover: true,\n pauseOnFocusLoss: true,\n draggable: 'touch',\n draggablePercent: Default.DRAGGABLE_PERCENT as number,\n draggableDirection: Direction.X,\n role: 'alert',\n theme: 'light'\n};\n\nexport function ToastContainer(props: ToastContainerProps) {\n let containerProps: ToastContainerProps = {\n ...defaultProps,\n ...props\n };\n const stacked = props.stacked;\n const [collapsed, setIsCollapsed] = useState(true);\n const containerRef = useRef<HTMLDivElement>(null);\n const { getToastToRender, isToastActive, count } =\n useToastContainer(containerProps);\n const { className, style, rtl, containerId } = containerProps;\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 function collapseAll() {\n if (stacked) {\n setIsCollapsed(true);\n toast.play();\n }\n }\n\n useIsomorphicLayoutEffect(() => {\n if (stacked) {\n const nodes = containerRef.current!.querySelectorAll('[data-in=\"true\"]');\n const gap = 12;\n const isTop = containerProps.position?.includes('top');\n let usedHeight = 0;\n let prevS = 0;\n\n Array.from(nodes)\n .reverse()\n .forEach((n, i) => {\n const node = n as HTMLElement;\n node.classList.add(`${Default.CSS_NAMESPACE}__toast--stacked`);\n\n if (i > 0) node.dataset.collapsed = `${collapsed}`;\n\n if (!node.dataset.pos) node.dataset.pos = isTop ? 'top' : 'bot';\n\n const y =\n usedHeight * (collapsed ? 0.2 : 1) + (collapsed ? 0 : gap * i);\n\n node.style.setProperty('--y', `${isTop ? y : y * -1}px`);\n node.style.setProperty('--g', `${gap}`);\n node.style.setProperty('--s', `${1 - (collapsed ? prevS : 0)}`);\n\n usedHeight += node.offsetHeight;\n prevS += 0.025;\n });\n }\n }, [collapsed, count, stacked]);\n\n return (\n <div\n ref={containerRef}\n className={Default.CSS_NAMESPACE as string}\n id={containerId as string}\n onMouseEnter={() => {\n if (stacked) {\n setIsCollapsed(false);\n toast.pause();\n }\n }}\n onMouseLeave={collapseAll}\n >\n {getToastToRender((position, toastList) => {\n const containerStyle: React.CSSProperties = !toastList.length\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 stacked={stacked}\n collapseAll={collapseAll}\n isIn={isToastActive(\n toastProps.toastId,\n toastProps.containerId\n )}\n style={toastProps.style}\n key={`toast-${toastProps.key}`}\n >\n {content}\n </Toast>\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}\n"],"names":["isNum","v","isNaN","isStr","isFn","parseClassName","canBeRendered","content","isValidElement","collapseToast","node","done","duration","scrollHeight","style","requestAnimationFrame","minHeight","height","transition","padding","margin","setTimeout","cssTransition","enter","exit","appendPosition","collapse","collapseDuration","children","position","preventExitTransition","nodeRef","isIn","playToast","enterClassName","exitClassName","animationStep","useRef","useLayoutEffect","current","classToToken","split","onEntered","e","target","removeEventListener","type","classList","remove","add","addEventListener","useEffect","onExited","className","React","toToastItem","toast","status","containerId","props","id","toastId","theme","data","isLoading","icon","containers","Map","renderQueue","listeners","Set","dispatchChanges","forEach","cb","hasContainers","size","isToastActive","get","_containers$get2","isActive","c","pushToast","options","push","buildToast","toggleToast","opt","toggle","useToastContainer","subscribe","getSnapshot","setProps","notify","container","containerProps","toastKey","toastCount","queue","activeToasts","snapshot","toasts","Array","from","values","removeToast","filter","addActiveToast","onOpen","updateId","isNew","staleId","delete","set","observe","t","clearQueue","length","_ref","containerMismatch","isDuplicate","has","shouldIgnoreToast","delay","closeToast","isNotAnUpdate","toastProps","toastStyle","key","Object","fromEntries","entries","_ref2","_","toastClassName","bodyClassName","progressClassName","autoClose","toastAutoClose","containerAutoClose","deleteToast","toastToRemove","onClose","shift","closeButton","toastContent","cloneElement","activeToast","limit","p","setToggle","fn","some","newestOnTop","reverse","createContainerObserver","unobserve","_containers$get6","registerContainer","useSyncExternalStore","getToastToRender","toRender","count","useToast","isRunning","setIsRunning","useState","setPreventExitTransition","toastRef","drag","start","delta","removalDistance","canCloseOnClick","canDrag","didMove","pauseOnHover","onClick","closeOnClick","opts","pauseToast","onDragMove","draggableDirection","clientX","clientY","transform","opacity","Math","abs","onDragEnd","document","collapseAll","removeProperty","pauseOnFocusLoss","hasFocus","window","eventHandlers","onPointerDown","draggable","pointerType","offsetWidth","draggablePercent","offsetHeight","onPointerUp","top","bottom","left","right","getBoundingClientRect","nativeEvent","onMouseEnter","stacked","onMouseLeave","ProgressBar","hide","userStyle","controlledProgress","progress","rtl","isHidden","animationDuration","animationPlayState","defaultClassName","cx","classNames","animationEvent","role","TOAST_ID","genToastId","getToastId","dispatchToast","mergeOptions","createToastByType","loading","promise","pending","error","success","render","resetParams","resolver","input","result","dismiss","baseParams","params","update","then","catch","err","info","warning","warn","dark","clearWaitingQueue","_containers$get","getToast","oldOptions","oldContent","nextOptions","onChange","play","pause","useIsomorphicLayoutEffect","Svg","rest","viewBox","width","fill","Icons","d","spinner","Toast","hideProgressBar","Transition","bodyStyle","progressStyle","cssClasses","Icon","iconProps","maybeIcon","getIcon","isProgressControlled","closeButtonProps","Close","ariaLabel","stopPropagation","fillRule","CloseButton","ref","getConfig","animationName","Bounce","Slide","Zoom","Flip","defaultProps","ToastContainer","collapsed","setIsCollapsed","containerRef","getClassName","nodes","querySelectorAll","gap","isTop","_containerProps$posit","includes","usedHeight","prevS","n","i","dataset","pos","y","setProperty","toastList","containerStyle","pointerEvents","map"],"mappings":"8KAGaA,EAASC,GACP,iBAANA,IAAmBC,MAAMD,GAErBE,EAASF,GAAqC,iBAANA,EAExCG,EAAQH,GAAuC,mBAANA,EAIzCI,EAAkBJ,GAAYE,EAAMF,IAAMG,EAAKH,GAAKA,EAAI,KAUxDK,EAAoBC,GAC/BC,EAAeD,IAAYJ,EAAMI,IAAYH,EAAKG,IAAYP,EAAMO,YClBtDE,EACdC,EACAC,EACAC,YAAAA,IAAAA,OAEA,MAAMC,aAAEA,EAAFC,MAAgBA,GAAUJ,EAEhCK,sBAAsB,KACpBD,EAAME,UAAY,UAClBF,EAAMG,OAASJ,EAAe,KAC9BC,EAAMI,kBAAoBN,MAE1BG,sBAAsB,KACpBD,EAAMG,OAAS,IACfH,EAAMK,QAAU,IAChBL,EAAMM,OAAS,IACfC,WAAWV,EAAMC,gBCmCPU,SAAcC,MAC5BA,EAD4BC,KAE5BA,EAF4BC,eAG5BA,GAAiB,EAHWC,SAI5BA,GAAW,EAJiBC,iBAK5BA,SAEA,uBAAgCC,SAC9BA,EAD8BC,SAE9BA,EAF8BC,sBAG9BA,EAH8BnB,KAI9BA,EAJ8BoB,QAK9BA,EAL8BC,KAM9BA,EAN8BC,UAO9BA,KAEA,MAAMC,EAAiBT,KAAoBF,MAAUM,IAAaN,EAC5DY,EAAgBV,KAAoBD,MAASK,IAAaL,EAC1DY,EAAgBC,KA8CtB,OA5CAC,EAAgB,KACd,MAAM5B,EAAOqB,EAAQQ,QACfC,EAAeN,EAAeO,MAAM,KAEpCC,EAAaC,IACbA,EAAEC,SAAWb,EAAQQ,UAEzBN,IACAvB,EAAKmC,oBAAoB,eAAgBH,GACzChC,EAAKmC,oBAAoB,kBAAmBH,OAE1CN,EAAcG,SACH,oBAAXI,EAAEG,MAEFpC,EAAKqC,UAAUC,UAAUR,KAK3B9B,EAAKqC,UAAUE,OAAOT,GACtB9B,EAAKwC,iBAAiB,eAAgBR,GACtChC,EAAKwC,iBAAiB,kBAAmBR,IAI1C,IAEHS,EAAU,KACR,MAAMzC,EAAOqB,EAAQQ,QAEfa,EAAW,KACf1C,EAAKmC,oBAAoB,eAAgBO,GACzC1B,EAAWjB,EAAcC,EAAMC,EAAMgB,GAAoBhB,KAStDqB,IAAMF,EAAwBsB,KALjChB,EAAcG,UACd7B,EAAK2C,eAAiBlB,IACtBzB,EAAKwC,iBAAiB,eAAgBE,MAIvC,CAACpB,IAEGsB,gCAAG1B,aCtHE2B,EAAYC,EAAcC,GACxC,OAAgB,MAATD,EACH,CACEjD,QAASiD,EAAMjD,QACfmD,YAAaF,EAAMG,MAAMD,YACzBE,GAAIJ,EAAMG,MAAME,QAChBC,MAAON,EAAMG,MAAMG,MACnBhB,KAAMU,EAAMG,MAAMb,KAClBiB,KAAMP,EAAMG,MAAMI,MAAQ,GAC1BC,UAAWR,EAAMG,MAAMK,UACvBC,KAAMT,EAAMG,MAAMM,KAClBR,OAAAA,GAGD,GCaP,MAAMS,EAAa,IAAIC,IACvB,IAAIC,EAA+B,GACnC,MAAMC,EAAY,IAAIC,IAEhBC,EAAmBR,GAAoBM,EAAUG,QAAQC,GAAMA,EAAGV,IAElEW,EAAgB,IAAMR,EAAWS,KAAO,WAU9BC,EAAchB,EAAQF,SACpC,GAAIA,EAAa,iBAASQ,EAAWW,IAAInB,MAAfoB,EAA6BF,cAAchB,IAErE,IAAImB,GAAW,EAKf,OAJAb,EAAWM,QAAQQ,IACbA,EAAEJ,cAAchB,KAAKmB,GAAW,KAG/BA,WA+BOE,EACd1E,EACA2E,GAEK5E,EAAcC,KACdmE,KAAiBN,EAAYe,KAAK,CAAE5E,QAAAA,EAAS2E,QAAAA,IAElDhB,EAAWM,QAAQQ,IACjBA,EAAEI,WAAW7E,EAAS2E,eAqBVG,EAAYpF,EAAYqF,GACtCpB,EAAWM,QAAQQ,IACN,MAAPM,SAAgBA,GAAAA,EAAK5B,mBAEd4B,SAAAA,EAAK5B,eAAgBsB,EAAEpB,IAChCoB,EAAEO,OAAOtF,QAAGqF,SAAAA,EAAK1B,IAFjBoB,EAAEO,OAAOtF,QAAGqF,SAAAA,EAAK1B,eChHP4B,EAAkB7B,GAChC,MAAM8B,UAAEA,EAAFC,YAAaA,EAAbC,SAA0BA,GAAatD,WDsHbsB,GAChC,MAAMC,EAAKD,EAAMD,eACjB,MAAO,CACL+B,UAAUG,GACR,MAAMC,WE1FVjC,EACAkC,EACAvB,GAEA,IAAIwB,EAAW,EACXC,EAAa,EACbC,EAAuB,GACvBC,EAAqB,GACrBC,EAAoB,GACpBxC,EAAQmC,EACZ,MAAMM,EAAS,IAAIjC,IACbE,EAAY,IAAIC,IAOhBsB,EAAS,KACbO,EAAWE,MAAMC,KAAKF,EAAOG,UAC7BlC,EAAUG,QAAQC,GAAMA,MAoBpB+B,EAAe5C,IACnBsC,EAAqB,MAANtC,EAAa,GAAKsC,EAAaO,OAAOxG,GAAKA,IAAM2D,GAChEgC,KAQIc,EAAkBlD,IACtB,MAAMK,QAAEA,EAAF8C,OAAWA,EAAXC,SAAmBA,EAAnBhF,SAA6BA,GAAa4B,EAAMG,MAChDkD,EAAoB,MAAZD,EAEVpD,EAAMsD,SAASV,EAAOW,OAAOvD,EAAMsD,SAEvCV,EAAOY,IAAInD,EAASL,GACpB0C,EAAe,IAAIA,EAAc1C,EAAMG,MAAME,SAAS4C,OACpDxG,GAAKA,IAAMuD,EAAMsD,SAEnBlB,IACArB,EAAgBhB,EAAYC,EAAOqD,EAAQ,QAAU,YAEjDA,GAASzG,EAAKuG,IAChBA,EAAOnG,EAAeoB,IAAaA,EAAS+B,QAyGhD,MAAO,CACLC,GAAAA,EACAD,MAAAA,EACAsD,QA/JerB,IACfvB,EAAUpB,IAAI2C,GACP,IAAMvB,EAAU0C,OAAOnB,IA8J9BL,OA3Ia,CAACtF,EAAY2D,KAC1BwC,EAAO5B,QAAQ0C,IACH,MAANtD,GAAcA,IAAOsD,EAAEvD,MAAME,SAASzD,EAAK8G,EAAE3B,SAAW2B,EAAE3B,OAAOtF,MA0IvEuG,YAAAA,EACAJ,OAAAA,EACAe,WAnIiB,KACjBnB,GAAcC,EAAMmB,OACpBnB,EAAQ,IAkIRb,WA9GiB,CACjB7E,EACA2E,KAEA,GAhDwBmC,CAAAA,QAAC3D,YACzBA,EADyBG,QAEzBA,EAFyB+C,SAGzBA,KAEA,MAAMU,EAAoB5D,EAAcA,IAAgBE,EAAY,IAAPA,EACvD2D,EAAcnB,EAAOoB,IAAI3D,IAAwB,MAAZ+C,EAE3C,OAAOU,GAAqBC,GAwCxBE,CAAkBvC,GAAU,OAEhC,MAAMrB,QAAEA,EAAF+C,SAAWA,EAAX7C,KAAqBA,EAArB+C,QAA2BA,EAA3BY,MAAoCA,GAAUxC,EAC9CyC,EAAa,KACjBnB,EAAY3C,IAGR+D,EAA4B,MAAZhB,EAElBgB,GAAe5B,IAEnB,MAAM6B,EAAa,IACdlE,EACH7C,MAAO6C,EAAMmE,WACbC,IAAKhC,OACFiC,OAAOC,YACRD,OAAOE,QAAQhD,GAASuB,OAAO0B,QAAEC,EAAGnI,YAAY,MAALA,KAE7C4D,QAAAA,EACA+C,SAAAA,EACA7C,KAAAA,EACA4D,WAAAA,EACA3F,MAAM,EACNqB,UAAWhD,EAAe6E,EAAQ7B,WAAaM,EAAM0E,gBACrDC,cAAejI,EACb6E,EAAQoD,eAAiB3E,EAAM2E,eAEjCC,kBAAmBlI,EACjB6E,EAAQqD,mBAAqB5E,EAAM4E,mBAErCC,WAAWtD,EAAQlB,YN3HvByE,EM6H0BvD,EAAQsD,UN5HlCE,EM4H6C/E,EAAM6E,WN1HhC,IAAnBC,GAA6BzI,EAAMyI,IAAmBA,EAAiB,EACnEA,EACAC,GMyHAC,cACE,MAAMC,EAAgBxC,EAAOvB,IAAIhB,IAC3BgF,QAAEA,EAAFjH,SAAWA,GAAagH,EAAcjF,MACxCvD,EAAKyI,IAAUA,EAAQrI,EAAeoB,IAAaA,EAAS+B,OAEhEY,EAAgBhB,EAAYqF,EAAe,YAC3CxC,EAAOW,OAAOlD,GAEdmC,IACIA,EAAa,IAAGA,EAAa,GAE7BC,EAAMmB,OAAS,EACjBV,EAAeT,EAAM6C,SAIvBlD,MN/IyB,IAC/B6C,EACAC,EMiJEb,EAAWkB,YAAcpF,EAAMoF,aAEH,IAAxB7D,EAAQ6D,aAAyBzI,EAAc4E,EAAQ6D,aACzDlB,EAAWkB,YAAc7D,EAAQ6D,aACA,IAAxB7D,EAAQ6D,cACjBlB,EAAWkB,aAAczI,EAAcqD,EAAMoF,cACzCpF,EAAMoF,aAIZ,IAAIC,EAAezI,EAEfC,EAAeD,KAAaJ,EAAMI,EAAQuC,MAC5CkG,EAAeC,EAAa1I,EAAyB,CACnDoH,WAAAA,EACAE,WAAAA,EACA9D,KAAAA,IAEO3D,EAAKG,KACdyI,EAAezI,EAAQ,CAAEoH,WAAAA,EAAYE,WAAAA,EAAY9D,KAAMA,KAGzD,MAAMmF,EAAc,CAClB3I,QAASyI,EACTrF,MAAOkE,EACPf,QAAAA,GAKAnD,EAAMwF,OACNxF,EAAMwF,MAAQ,GACdnD,EAAarC,EAAMwF,OACnBvB,EAEA3B,EAAMd,KAAK+D,GACFlJ,EAAM0H,GACfrG,WAAW,KACTqF,EAAewC,IACdxB,GAEHhB,EAAewC,IAajBvD,SAASyD,GACPzF,EAAQyF,GAEVC,UAAW,CAACzF,EAAQ0F,KAClBlD,EAAOvB,IAAIjB,GAAK2B,OAAS+D,GAE3B1E,cAAgBhB,GAAWsC,EAAaqD,KAAKtJ,GAAKA,IAAM2D,GACxD8B,YAAa,IAAO/B,EAAM6F,YAAcrD,EAASsD,UAAYtD,GF/FzCuD,CAAwB9F,EAAID,EAAOY,GAErDL,EAAW8C,IAAIpD,EAAIiC,GACnB,MAAM8D,EAAY9D,EAAUoB,QAAQrB,GAGpC,OA/FJxB,EAAYI,QAAQvE,GAAKgF,EAAUhF,EAAEM,QAASN,EAAEiF,UAChDd,EAAc,GA8FH,KACLuF,IACAzF,EAAW6C,OAAOnD,KAGtB+B,SAASyD,kBACPlF,EAAWW,IAAIjB,OAAK+B,SAASyD,IAE/B1D,oBACE,gBAAOxB,EAAWW,IAAIjB,WAAfgG,EAAoBlE,gBCxI7BmE,CAAkBlG,IAClBpB,QACFoD,EAAShC,GACT,MAAMwC,EAAW2D,EAAqBrE,EAAWC,EAAaA,GAkB9D,MAAO,CACLqE,iBAjBF,SACEtF,GAEA,IAAK0B,EAAU,MAAO,GAEtB,MAAM6D,EAAW,IAAI7F,IAQrB,OANAgC,EAAS3B,QAAQhB,IACf,MAAM3B,SAAEA,GAAa2B,EAAMG,MAC3BqG,EAASxC,IAAI3F,IAAamI,EAAShD,IAAInF,EAAU,IACjDmI,EAASnF,IAAIhD,GAAWsD,KAAK3B,KAGxB6C,MAAMC,KAAK0D,EAAUZ,GAAK3E,EAAG2E,EAAE,GAAIA,EAAE,MAK5CxE,cAAAA,EACAqF,YAAO9D,SAAAA,EAAUiB,iBEfL8C,EAASvG,GACvB,MAAOwG,EAAWC,GAAgBC,GAAS,IACpCvI,EAAuBwI,GAA4BD,GAAS,GAC7DE,EAAWlI,EAAuB,MAClCmI,EAAOnI,EAAkB,CAC7BoI,MAAO,EACPC,MAAO,EACPC,gBAAiB,EACjBC,iBAAiB,EACjBC,SAAS,EACTC,SAAS,IACRvI,SACGiG,UAAEA,EAAFuC,aAAaA,EAAbpD,WAA2BA,EAA3BqD,QAAuCA,EAAvCC,aAAgDA,GAAiBtH,MHgF1CuH,IGR7B,SAASjJ,IACPmI,GAAa,GAGf,SAASe,IACPf,GAAa,GAcf,SAASgB,EAAWzI,GAClB,MAAMa,EAAQ+G,EAAShI,QACnBiI,EAAKK,SAAWrH,IAClBgH,EAAKM,SAAU,EACXX,GAAWgB,IAEbX,EAAKE,YADH/G,EAAM0H,mBACK1I,EAAE2I,QAAUd,EAAKC,MAEjB9H,EAAE4I,QAAUf,EAAKC,MAI5BD,EAAKC,QAAU9H,EAAE2I,UAASd,EAAKI,iBAAkB,GAKrDpH,EAAM1C,MAAM0K,yBAHmB,MAA7B7H,EAAM0H,sBACCb,EAAKE,+BACGF,EAAKE,2BAEtBlH,EAAM1C,MAAM2K,YACV,EAAIC,KAAKC,IAAInB,EAAKE,MAAQF,EAAKG,mBAKrC,SAASiB,IA5BPC,SAAShJ,oBAAoB,cAAeuI,GAC5CS,SAAShJ,oBAAoB,YAAa+I,GA6B1C,MAAMpI,EAAQ+G,EAAShI,QACvB,GAAIiI,EAAKK,SAAWL,EAAKM,SAAWtH,EAAO,CAEzC,GADAgH,EAAKK,SAAU,EACXa,KAAKC,IAAInB,EAAKE,OAASF,EAAKG,gBAI9B,OAHAL,GAAyB,GACzB3G,EAAMgE,kBACNhE,EAAMmI,cAIRtI,EAAM1C,MAAMI,WAAa,+BACzBsC,EAAM1C,MAAMiL,eAAe,aAC3BvI,EAAM1C,MAAMiL,eAAe,qBHhD/B7H,EACGW,KAF0BqG,EG9Ed,CACbtH,GAAID,EAAME,QACVH,YAAaC,EAAMD,YACnB4F,GAAIc,IH6EM1G,oBACR2F,UAAU6B,EAAKtH,GAAIsH,EAAK5B,IG3E5BnG,EAAU,KACR,GAAIQ,EAAMqI,iBAGR,OAOGH,SAASI,YAAYd,IAE1Be,OAAOhJ,iBAAiB,QAASjB,GACjCiK,OAAOhJ,iBAAiB,OAAQiI,GAVvB,KAcTe,OAAOrJ,oBAAoB,QAASZ,GACpCiK,OAAOrJ,oBAAoB,OAAQsI,KAXlC,CAACxH,EAAMqI,mBAqHV,MAAMG,EAA4C,CAChDC,cAxGF,SAAqBzJ,GACnB,IAAwB,IAApBgB,EAAM0I,WAAsB1I,EAAM0I,YAAc1J,EAAE2J,YAAa,CAkDnE9B,EAAKM,SAAU,EACfe,SAAS3I,iBAAiB,cAAekI,GACzCS,SAAS3I,iBAAiB,YAAa0I,GAlDrC,MAAMpI,EAAQ+G,EAAShI,QACvBiI,EAAKI,iBAAkB,EACvBJ,EAAKK,SAAU,EACfrH,EAAM1C,MAAMI,WAAa,aAErByC,EAAM0H,oBACRb,EAAKC,MAAQ9H,EAAE2I,QACfd,EAAKG,gBACHnH,EAAM+I,aAAe5I,EAAM6I,iBAAmB,OAEhDhC,EAAKC,MAAQ9H,EAAE4I,QACff,EAAKG,gBACFnH,EAAMiJ,mBACJ9I,EAAM6I,iBACsB,IAAzB7I,EAAM6I,iBACN7I,EAAM6I,kBACZ,OAsFNE,YAjFF,SAA6B/J,GAC3B,MAAMgK,IAAEA,EAAFC,OAAOA,EAAPC,KAAeA,EAAfC,MAAqBA,GACzBvC,EAAShI,QAASwK,wBAGK,aAAvBpK,EAAEqK,YAAYlK,MACda,EAAMoH,cACNpI,EAAE2I,SAAWuB,GACblK,EAAE2I,SAAWwB,GACbnK,EAAE4I,SAAWoB,GACbhK,EAAE4I,SAAWqB,EAEbzB,IAEAlJ,MAqFJ,OAfIuG,GAAauC,IACfoB,EAAcc,aAAe9B,EAGxBxH,EAAMuJ,UAASf,EAAcgB,aAAelL,IAI/CgJ,IACFkB,EAAcnB,QAAWrI,IACvBqI,GAAWA,EAAQrI,GACnB6H,EAAKI,iBAAmBjD,MAIrB,CACL1F,UAAAA,EACAkJ,WAAAA,EACAhB,UAAAA,EACArI,sBAAAA,EACAyI,SAAAA,EACA4B,cAAAA,YCtHYiB,SAAY1F,MAC1BA,EAD0ByC,UAE1BA,EAF0BxC,WAG1BA,EAH0B7E,KAI1BA,YAJ0BuK,KAK1BA,EAL0BhK,UAM1BA,EACAvC,MAAOwM,EAPmBC,mBAQ1BA,EAR0BC,SAS1BA,EAT0BC,IAU1BA,EAV0BzL,KAW1BA,EAX0B8B,MAY1BA,KAEA,MAAM4J,EAAWL,GAASE,GAAmC,IAAbC,EAC1C1M,EAA6B,IAC9BwM,EACHK,qBAAsBjG,MACtBkG,mBAAoBzD,EAAY,UAAY,UAG1CoD,IAAoBzM,EAAM0K,oBAAsBgC,MACpD,MAAMK,EAAmBC,2BAEvBP,2GAGiDzJ,+BACNhB,IAC3C,CACE,8BAAiD2K,IAG/CM,EAAa3N,EAAKiD,GACpBA,EAAU,CACRoK,IAAAA,EACA3K,KAAAA,EACA+K,iBAAAA,IAEFC,EAAGD,EAAkBxK,GAKnB2K,EAAiB,CACrB,CAACT,GAAuBC,GAAwB,EAC5C,kBACA,kBACFD,GAAuBC,EAAuB,EAC1C,KACA,KACExL,GAAQ2F,MAMlB,OACErE,uBACED,sDACaqK,GAEbpK,uBACED,sEAAuGS,6BAAiDhB,MAE1JQ,uBACE2K,KAAK,4BACQP,EAAW,OAAS,qBACtB,qBACXrK,UAAW0K,EACXjN,MAAOA,KACHkN,KC3IZ,IAAIE,EAAW,QAEFC,EAAa,OAASD,ICuBnC,SAASE,EAAkBlJ,GACzB,OAAOA,IAAY/E,EAAM+E,EAAQrB,UAAY7D,EAAMkF,EAAQrB,UACvDqB,EAAQrB,QACRsK,IAMN,SAASE,EACP9N,EACA2E,GAGA,OADAD,EAAU1E,EAAS2E,GACZA,EAAQrB,QAMjB,SAASyK,EAAoBxL,EAAcoC,GACzC,MAAO,IACFA,EACHpC,KAAOoC,GAAWA,EAAQpC,MAASA,EACnCe,QAASuK,EAAWlJ,IAIxB,SAASqJ,EAAkBzL,GACzB,MAAO,CACLvC,EACA2E,IACGmJ,EAAc9N,EAAS+N,EAAaxL,EAAMoC,IAGjD,SAAS1B,EACPjD,EACA2E,GAEA,OAAOmJ,EAAc9N,EAAS+N,YAA2BpJ,IAG3D1B,EAAMgL,QAAU,CACdjO,EACA2E,IAEAmJ,EACE9N,EACA+N,YAA2B,CACzBtK,WAAW,EACXwE,WAAW,EACXyC,cAAc,EACdlC,aAAa,EACbsD,WAAW,KACRnH,KA8HT1B,EAAMiL,QAhHN,SACEA,IAEAvJ,OAEItB,GAHJ8K,QAAEA,EAAFC,MAAWA,EAAXC,QAAkBA,KAKdF,IACF9K,EAAKzD,EAAMuO,GACPlL,EAAMgL,QAAQE,EAASxJ,GACvB1B,EAAMgL,QAAQE,EAAQG,OAAQ,IACzB3J,KACCwJ,KAIZ,MAAMI,EAAc,CAClB9K,UAAW,KACXwE,UAAW,KACXyC,aAAc,KACdlC,YAAa,KACbsD,UAAW,MAGP0C,EAAW,CACfjM,EACAkM,EACAC,KAIA,GAAa,MAATD,EAEF,YADAxL,EAAM0L,QAAQtL,GAIhB,MAAMuL,EAAa,CACjBrM,KAAAA,KACGgM,KACA5J,EACHnB,KAAMkL,GAEFG,EAASjP,EAAM6O,GAAS,CAAEH,OAAQG,GAAUA,EAgBlD,OAbIpL,EACFJ,EAAM6L,OAAOzL,EAAI,IACZuL,KACAC,IAIL5L,EAAM4L,EAAQP,OAAQ,IACjBM,KACAC,IAIAH,GAGH7F,EAAIhJ,EAAKqO,GAAWA,IAAYA,EAOtC,OAJArF,EAAEkG,KAAKL,GAAUF,EAAS,UAAWH,EAASK,IAASM,MAAMC,GAC3DT,EAAS,QAASJ,EAAOa,IAGpBpG,GA6CT5F,EAAMoL,QAAUL,aAChB/K,EAAMiM,KAAOlB,UACb/K,EAAMmL,MAAQJ,WACd/K,EAAMkM,QAAUnB,aAChB/K,EAAMmM,KAAOnM,EAAMkM,QACnBlM,EAAMoM,KAAO,CAACrP,EAAuB2E,IACnCmJ,EACE9N,EACA+N,YAA2B,CACzBxK,MAAO,UACJoB,KAsCT1B,EAAM0L,QA3BN,SAAiBE,aN3KWA,GJ9CPnP,IAAAA,EI+CnB,GAAKyE,KAOL,GAAc,MAAV0K,GJtDuCjP,EAAxBF,EIsDQmP,IJtD4BpP,EAAMC,GIuD3DiE,EAAWM,QAAQQ,IACjBA,EAAEwB,YAAY4I,aAEPA,IAAW,gBAAiBA,GAAU,OAAQA,GAAS,iBAChElL,EAAWW,IAAIuK,EAAO1L,uBAAc8C,YAAY4I,EAAOxL,MACrDM,EAAWM,QAAQQ,IACjBA,EAAEwB,YAAY4I,EAAOxL,YAbzBQ,EAAcA,EAAYqC,OACxBxG,GAAe,MAAVmP,GAAkBnP,EAAEiF,QAAQrB,UAAYuL,GMyKjD5I,CAAY4I,IA+Bd5L,EAAMqM,2BNvL4BzG,YAAAA,IAAAA,EAA6B,IAC7DlF,EAAWM,QAAQQ,KACbA,EAAErB,MAAMwF,OAAWC,EAAE1F,aAAesB,EAAEpB,KAAOwF,EAAE1F,aACjDsB,EAAEmC,gBMmMR3D,EAAMuB,SAAWH,EA+BjBpB,EAAM6L,OAAS,SACbxL,EACAqB,YAAAA,IAAAA,EAAgC,IAEhC,MAAM1B,EN3QgB,EAACI,iBAAQF,YAAEA,qBACjCQ,EAAWW,IAAInB,cAAfoM,EAAqD1J,OAAOvB,IAAIjB,IM0QlDmM,CAASlM,EAASqB,GAEhC,GAAI1B,EAAO,CACT,MAAQG,MAAOqM,EAAYzP,QAAS0P,GAAezM,EAE7C0M,EAAc,CAClBxI,MAAO,OACJsI,KACA9K,EACHrB,QAASqB,EAAQrB,SAAWA,EAC5B+C,SAAUuH,KAGR+B,EAAYrM,UAAYA,IAASqM,EAAYpJ,QAAUjD,GAE3D,MAAMtD,EAAU2P,EAAYrB,QAAUoB,SAC/BC,EAAYrB,OAEnBR,EAAc9N,EAAS2P,KAkB3B1M,EAAM7C,KAAQiD,IACZJ,EAAM6L,OAAOzL,EAAI,CACf4J,SAAU,KAwBdhK,EAAM2M,kBNhOmB1L,GAGvB,OAFAJ,EAAUpB,IAAIwB,GAEP,KACLJ,EAAU0C,OAAOtC,KMuPrBjB,EAAM4M,KAAQlF,GAAkB7F,GAAY,EAAM6F,GA2BlD1H,EAAM6M,MAASnF,GAAkB7F,GAAY,EAAO6F,SCvavCoF,EACO,oBAAXpE,OAAyB5J,EAAkBa,ECa9CoN,EAAkClJ,QAACvD,MACvCA,EADuChB,KAEvCA,EAFuCkB,UAGvCA,KACGwM,YAEHlN,uBACEmN,QAAQ,YACRC,MAAM,OACNzP,OAAO,OACP0P,KACY,YAAV7M,EACI,4CAC6BhB,QAE/B0N,KAwCKI,EAAQ,CACnBnB,KA7BF,SAAc9L,GACZ,OACEL,gBAACiN,MAAQ5M,GACPL,wBAAMuN,EAAE,oPA2BZnB,QAtCF,SAAiB/L,GACf,OACEL,gBAACiN,MAAQ5M,GACPL,wBAAMuN,EAAE,ifAoCZjC,QAvBF,SAAiBjL,GACf,OACEL,gBAACiN,MAAQ5M,GACPL,wBAAMuN,EAAE,iLAqBZlC,MAhBF,SAAehL,GACb,OACEL,gBAACiN,MAAQ5M,GACPL,wBAAMuN,EAAE,yUAcZC,QATF,WACE,OAAOxN,uBAAKD,kCC1DD0N,EAA8BpN,IACzC,MAAMwG,UACJA,EADIrI,sBAEJA,EAFIyI,SAGJA,EAHI4B,cAIJA,EAJIlK,UAKJA,GACEiI,EAASvG,IACPoF,YACJA,EADInH,SAEJA,EAFI4G,UAGJA,EAHIwC,QAIJA,EAJIlI,KAKJA,EALIkO,gBAMJA,EANIrJ,WAOJA,EACAzG,WAAY+P,EARRpP,SASJA,EATIwB,UAUJA,EAVIvC,MAWJA,EAXIwH,cAYJA,EAZI4I,UAaJA,EAbI3I,kBAcJA,EAdI4I,cAeJA,EAfIvK,SAgBJA,EAhBIqH,KAiBJA,EAjBIT,SAkBJA,EAlBIC,IAmBJA,EAnBI5J,QAoBJA,EApBI8E,YAqBJA,EArBI3G,KAsBJA,EAtBIgC,UAuBJA,EAvBIiH,aAwBJA,EAxBInH,MAyBJA,GACEH,EACEkK,EAAmBC,8CAEmBhK,wBACNhB,IACpC,CACE,uBAA0C2K,GAE5C,CACE,kCAAqDxC,IAGnDmG,EAAahR,EAAKiD,GACpBA,EAAU,CACRoK,IAAAA,EACA5L,SAAAA,EACAiB,KAAAA,EACA+K,iBAAAA,IAEFC,EAAGD,EAAkBxK,GACnBY,kBDsBgBH,MAAEA,EAAFhB,KAASA,EAATkB,UAAeA,EAAfC,KAA0BA,KAC5CoN,EAAwB,KAC5B,MAAMC,EAAY,CAAExN,MAAAA,EAAOhB,KAAAA,GAc3B,OAZa,IAATmB,IAEO7D,EAAK6D,GACdoN,EAAOpN,EAAK,IAAKqN,EAAWtN,UAAAA,IACnBxD,EAAeyD,GACxBoN,EAAOpI,EAAahF,EAAMqN,GACjBtN,EACTqN,EAAOT,EAAME,UAlBEhO,CAAAA,GAA6CA,KAAQ8N,EAmB3DW,CAAUzO,KACnBuO,EAAOT,EAAM9N,GAAMwO,KAGdD,ECtCMG,CAAQ7N,GACf8N,IAAyBjE,IAAahF,EAEtCkJ,EAAmB,CAAE/J,WAAAA,EAAY7E,KAAAA,EAAMgB,MAAAA,GAC7C,IAAI6N,EAAyB,KAY7B,OAVoB,IAAhB5I,IAGF4I,EADSvR,EAAK2I,GACNA,EAAY2I,GACXlR,EAAeuI,GAChBE,EAAaF,EAAa2I,mBChEV/J,WAC1BA,EAD0B7D,MAE1BA,EAF0B8N,UAG1BA,EAAY,WAEZ,OACEtO,0BACED,4DAA6FS,IAC7FhB,KAAK,SACLkI,QAASrI,IACPA,EAAEkP,kBACFlK,EAAWhF,iBAEDiP,GAEZtO,qCAAiB,OAAOmN,QAAQ,aAC9BnN,wBACEwO,SAAS,UACTjB,EAAE,+HDgDAkB,CAAYL,IAIpBpO,gBAAC2N,GACCjP,KAAMA,EACNrB,KAAMgI,EACN9G,SAAUA,EACVC,sBAAuBA,EACvBC,QAASwI,EACTtI,UAAWA,GAEXqB,uBACEM,GAAIC,EACJmH,QAASA,YACAhJ,EACTqB,UAAW+N,KACPjF,EACJrL,MAAOA,EACPkR,IAAKzH,GAELjH,0BACOtB,GAAQ,CAAEiM,KAAMA,GACrB5K,UACEjD,EAAKkI,GACDA,EAAc,CAAExF,KAAAA,IAChBgL,yBAA2CxF,GAEjDxH,MAAOoQ,GAEE,MAARjN,GACCX,uBACED,UAAWyK,yBAA2C,CACpD,+CACG9J,KAGJC,GAGLX,2BAAM1B,IAEP+P,EACDrO,gBAAC8J,MACMxG,IAAa6K,EACd,CAAE1J,UAAWnB,KACb,GACJ6G,IAAKA,EACL3J,MAAOA,EACP4D,MAAOc,EACP2B,UAAWA,EACXnI,KAAMA,EACN2F,WAAYA,EACZ0F,KAAM2D,EACNlO,KAAMA,EACNhC,MAAOqQ,EACP9N,UAAWkF,EACXgF,mBAAoBkE,EACpBjE,SAAUA,GAAY,OErI1ByE,EAAY,SAACC,EAAuBzQ,mBAAAA,IAAAA,GAAiB,GAAW,CACpEF,qCAAsE2Q,UACtE1Q,oCAAqE0Q,SACrEzQ,eAAAA,IAGI0Q,EAAS7Q,EAAc2Q,EAAU,UAAU,IAE3CG,EAAQ9Q,EAAc2Q,EAAU,SAAS,IAEzCI,EAAO/Q,EAAc2Q,EAAU,SAE/BK,EAAOhR,EAAc2Q,EAAU,SCHxBM,EAAoC,CAC/C1Q,SAAU,YACVX,WAAYiR,EACZ3J,UAAW,IACXO,aAAa,EACbgC,cAAc,EACdiB,kBAAkB,EAClBK,UAAW,QACXG,iBAAkB,GAClBnB,uBACA4C,KAAM,QACNnK,MAAO,kBAGO0O,EAAe7O,GAC7B,IAAImC,EAAsC,IACrCyM,KACA5O,GAEL,MAAMuJ,EAAUvJ,EAAMuJ,SACfuF,EAAWC,GAAkBrI,GAAS,GACvCsI,EAAetQ,EAAuB,OACtC0H,iBAAEA,EAAFnF,cAAoBA,EAApBqF,MAAmCA,GACvCzE,EAAkBM,IACdzC,UAAEA,EAAFvC,MAAaA,EAAb2M,IAAoBA,EAApB/J,YAAyBA,GAAgBoC,EAE/C,SAAS8M,EAAa/Q,GACpB,MAAMgM,EAAmBC,4DAEuBjM,IAC9C,CAAE,iCAAoD4L,IAExD,OAAOrN,EAAKiD,GACRA,EAAU,CACRxB,SAAAA,EACA4L,IAAAA,EACAI,iBAAAA,IAEFC,EAAGD,EAAkBxN,EAAegD,IAG1C,SAASyI,IACHoB,IACFwF,GAAe,GACflP,EAAM4M,QAmCV,OA/BAE,EAA0B,KACxB,GAAIpD,EAAS,OACX,MAAM2F,EAAQF,EAAapQ,QAASuQ,iBAAiB,oBAC/CC,EAAM,GACNC,WAAQlN,EAAejE,iBAAfoR,EAAyBC,SAAS,OAChD,IAAIC,EAAa,EACbC,EAAQ,EAEZ/M,MAAMC,KAAKuM,GACRpJ,UACAjF,QAAQ,CAAC6O,EAAGC,KACX,MAAM5S,EAAO2S,EACb3S,EAAKqC,UAAUE,gCAEXqQ,EAAI,IAAG5S,EAAK6S,QAAQd,aAAeA,KAElC/R,EAAK6S,QAAQC,MAAK9S,EAAK6S,QAAQC,IAAMR,EAAQ,MAAQ,OAE1D,MAAMS,EACJN,GAAcV,EAAY,GAAM,IAAMA,EAAY,EAAIM,EAAMO,GAE9D5S,EAAKI,MAAM4S,YAAY,SAAUV,EAAQS,GAAS,EAALA,OAC7C/S,EAAKI,MAAM4S,YAAY,SAAUX,KACjCrS,EAAKI,MAAM4S,YAAY,UAAU,GAAKjB,EAAYW,EAAQ,KAE1DD,GAAczS,EAAK+L,aACnB2G,GAAS,SAGd,CAACX,EAAWxI,EAAOiD,IAGpB5J,uBACE0O,IAAKW,EACLtP,UAAW,WACXO,GAAIF,EACJuJ,aAAc,KACRC,IACFwF,GAAe,GACflP,EAAM6M,UAGVlD,aAAcrB,GAEb/B,EAAiB,CAAClI,EAAU8R,KAC3B,MAAMC,EAAuCD,EAAUvM,OAEnD,IAAKtG,GADL,IAAKA,EAAO+S,cAAe,QAG/B,OACEvQ,uBACED,UAAWuP,EAAa/Q,GACxBf,MAAO8S,EACP7L,iBAAkBlG,KAEjB8R,EAAUG,IAAIzM,QAAC9G,QAAEA,EAASoD,MAAOkE,KAChC,OACEvE,gBAACyN,MACKlJ,EACJqF,QAASA,EACTpB,YAAaA,EACb9J,KAAM4C,EACJiD,EAAWhE,QACXgE,EAAWnE,aAEb5C,MAAO+G,EAAW/G,MAClBiH,aAAcF,EAAWE,OAExBxH"} |