react-toastify-v2 11.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +115 -0
- package/addons/use-notification-center/index.d.mts +395 -0
- package/addons/use-notification-center/index.d.ts +395 -0
- package/addons/use-notification-center/index.js +3 -0
- package/addons/use-notification-center/index.js.map +1 -0
- package/addons/use-notification-center/index.mjs +3 -0
- package/addons/use-notification-center/index.mjs.map +1 -0
- package/dist/ReactToastify.css +800 -0
- package/dist/index.d.mts +431 -0
- package/dist/index.d.ts +431 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +4 -0
- package/dist/index.mjs.map +1 -0
- package/dist/unstyled.d.mts +431 -0
- package/dist/unstyled.d.ts +431 -0
- package/dist/unstyled.js +3 -0
- package/dist/unstyled.js.map +1 -0
- package/dist/unstyled.mjs +3 -0
- package/dist/unstyled.mjs.map +1 -0
- package/package.json +108 -0
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/utils/propValidator.ts","../src/utils/cssTransition.tsx","../src/utils/collapseToast.ts","../src/utils/mapper.ts","../src/components/CloseButton.tsx","../src/components/ProgressBar.tsx","../src/components/ToastContainer.tsx","../src/core/genToastId.ts","../src/core/containerObserver.ts","../src/core/store.ts","../src/core/toast.ts","../src/hooks/useToastContainer.ts","../src/hooks/useToast.ts","../src/hooks/useIsomorphicLayoutEffect.ts","../src/components/Toast.tsx","../src/components/Icons.tsx","../src/components/Transitions.tsx"],"sourcesContent":["import './style.css';\n\nexport { cssTransition, collapseToast } from './utils';\nexport { ToastContainer, Bounce, Flip, Slide, Zoom, Icons } from './components';\nexport type { IconProps, CloseButton } from './components';\nexport type { ToastPromiseParams } from './core';\nexport { toast } from './core';\nexport { useToastContainer } from './hooks';\nexport type {\n TypeOptions,\n Theme,\n ToastPosition,\n ToastContentProps,\n ToastContent,\n ToastTransition,\n ToastClassName,\n ClearWaitingQueueParams,\n DraggableDirection,\n ToastOptions,\n UpdateOptions,\n ToastContainerProps,\n ToastTransitionProps,\n Id,\n ToastItem,\n ClearWaitingQueueFunc,\n OnChangeCallback,\n ToastIcon\n} from './types';\nexport type { CloseButtonProps } from './components/CloseButton';\n","import { isValidElement } from 'react';\nimport { Id } from '../types';\n\nexport const isNum = (v: any): v is Number => 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 = (toastAutoClose?: false | number, containerAutoClose?: false | number) =>\n toastAutoClose === false || (isNum(toastAutoClose) && toastAutoClose > 0) ? toastAutoClose : containerAutoClose;\n\nexport const canBeRendered = <T>(content: T): boolean =>\n isValidElement(content) || isStr(content) || isFn(content) || isNum(content);\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 (animationStep.current === AnimationStep.Enter && e.type !== 'animationcancel') {\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(node: HTMLElement, done: () => void, duration = Default.COLLAPSE_DURATION) {\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, ToastContentProps, ToastItem, ToastItemStatus, ToastProps } from '../types';\nimport { cloneElement, isValidElement, ReactElement } from 'react';\nimport { isFn, isStr } from './propValidator';\n\nexport function toToastItem(toast: Toast, status: ToastItemStatus): ToastItem {\n return {\n content: renderContent(toast.content, toast.props),\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 reason: toast.removalReason,\n status\n };\n}\n\nexport function renderContent(content: unknown, props: ToastProps, isPaused: boolean = false) {\n if (isValidElement(content) && !isStr(content.type)) {\n return cloneElement<ToastContentProps>(content as ReactElement<any>, {\n closeToast: props.closeToast,\n toastProps: props,\n data: props.data,\n isPaused\n });\n } else if (isFn(content)) {\n return content({\n closeToast: props.closeToast,\n toastProps: props,\n data: props.data,\n isPaused\n });\n }\n\n return content;\n}\n","import React from 'react';\nimport { Default } from '../utils';\nimport { CloseToastFunc, Theme, TypeOptions } from '../types';\n\nexport interface CloseButtonProps {\n closeToast: CloseToastFunc;\n type: TypeOptions;\n ariaLabel?: string;\n theme: Theme;\n}\n\nexport function CloseButton({ closeToast, theme, ariaLabel = 'close' }: 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(true);\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 React from 'react';\nimport cx from 'clsx';\n\nimport { Default, isFn, Type } from '../utils';\nimport { Theme, ToastClassName, TypeOptions } 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 * 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 * Tell whether a 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 controlledProgress,\n progress,\n rtl,\n isIn,\n theme\n}: ProgressBarProps) {\n const isHidden = hide || (controlledProgress && progress === 0);\n const style: React.CSSProperties = {\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 ? 'onTransitionEnd' : '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 className={`${Default.CSS_NAMESPACE}__progress-bar--wrp`} data-hidden={isHidden}>\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","import cx from 'clsx';\nimport React, { Fragment, useEffect, useRef, useState } from 'react';\n\nimport { toast } from '../core';\nimport { useToastContainer } from '../hooks';\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 'aria-label': 'Notifications Alt+T',\n hotKeys: e => e.altKey && e.code === 'KeyT'\n};\n\nexport function ToastContainer(props: ToastContainerProps) {\n let containerProps: ToastContainerProps = {\n ...defaultProps,\n ...props\n };\n const underToastChildren = props.underToastChildren || null;\n const stacked = props.stacked;\n const [collapsed, setIsCollapsed] = useState(true);\n const containerRef = useRef<HTMLDivElement>(null);\n const underToastChildrenRef = useRef<HTMLDivElement>(null);\n const { getToastToRender, isToastActive, count } = useToastContainer(containerProps);\n const { className, style, rtl, containerId, hotKeys } = 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 underToastChildren = underToastChildrenRef?.current;\n const heightOffset = underToastChildren?.getBoundingClientRect().height || 0;\n\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 let y = usedHeight * (collapsed ? 0.2 : 1) + (collapsed ? 0 : gap * i);\n if (!isTop && nodes.length > 1) {\n y += heightOffset;\n }\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 if (underToastChildren && isTop && collapsed) {\n const nodeOffset = usedHeight * 0.2;\n\n const firstNodeheight = nodes?.[0]?.getBoundingClientRect()?.height || 0;\n underToastChildren.style.marginTop = `${nodeOffset + firstNodeheight}px`;\n }\n\n if (underToastChildren && isTop && !collapsed) {\n const heightOfAllNodes = Array.from(nodes).reduce((acc, n) => {\n const node = n as HTMLElement;\n const nodeHeight = node.offsetHeight;\n return acc + nodeHeight + gap;\n }, 0);\n underToastChildren.style.marginTop = `${heightOfAllNodes}px`;\n }\n }\n }, [collapsed, count, stacked]);\n\n useEffect(() => {\n function focusFirst(e: KeyboardEvent) {\n const node = containerRef.current;\n if (hotKeys(e)) {\n (node.querySelector('[tabIndex=\"0\"]') as HTMLElement)?.focus();\n setIsCollapsed(false);\n toast.pause();\n }\n if (e.key === 'Escape' && (document.activeElement === node || node?.contains(document.activeElement))) {\n setIsCollapsed(true);\n toast.play();\n }\n }\n\n document.addEventListener('keydown', focusFirst);\n\n return () => {\n document.removeEventListener('keydown', focusFirst);\n };\n }, [hotKeys]);\n\n return (\n <section\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 aria-live=\"polite\"\n aria-atomic=\"false\"\n aria-relevant=\"additions text\"\n aria-label={containerProps['aria-label']}\n >\n {getToastToRender((position, toastList) => {\n const containerStyle: React.CSSProperties = !toastList.length\n ? { ...style, pointerEvents: 'none' }\n : { ...style };\n\n return (\n <Fragment key={`f-${position}`}>\n <div\n tabIndex={-1}\n className={getClassName(position)}\n data-stacked={stacked}\n style={containerStyle}\n key={`c-${position}`}\n >\n {toastList.map(({ content, props: toastProps }) => {\n return (\n <Toast\n {...toastProps}\n stacked={stacked}\n collapseAll={collapseAll}\n isIn={isToastActive(toastProps.toastId, toastProps.containerId)}\n key={`t-${toastProps.key}`}\n >\n {content}\n </Toast>\n );\n })}\n\n <div\n ref={underToastChildrenRef}\n id=\"underToastChildren\"\n className={`${Default.CSS_NAMESPACE}__under-toast-children`}\n style={{\n width: '100%',\n opacity: toastList.length > 1 ? 1 : 0,\n transition: 'all 0.3s ease-in-out'\n }}\n >\n {underToastChildren}\n </div>\n </div>\n </Fragment>\n );\n })}\n </section>\n );\n}\n","let TOAST_ID = 1;\n\nexport const genToastId = () => `${TOAST_ID++}`;\n","import {\n Id,\n NotValidatedToastProps,\n OnChangeCallback,\n Toast,\n ToastContainerProps,\n ToastContent,\n ToastProps\n} from '../types';\nimport { canBeRendered, getAutoCloseDelay, isNum, parseClassName, toToastItem } from '../utils';\n\ntype Notify = () => void;\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: Toast[] = [];\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 = ({ containerId, toastId, updateId }: 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) t.toggle?.(v);\n });\n };\n\n const markAsRemoved = (v: Toast) => {\n v.props?.onClose?.(v.removalReason);\n v.isActive = false;\n };\n\n const removeToast = (id?: Id) => {\n if (id == null) {\n toasts.forEach(markAsRemoved);\n } else {\n const t = toasts.get(id);\n if (t) markAsRemoved(t);\n }\n notify();\n };\n\n const clearQueue = () => {\n toastCount -= queue.length;\n queue = [];\n };\n\n const addActiveToast = (toast: Toast) => {\n const { toastId, updateId } = toast.props;\n const isNew = updateId == null;\n\n if (toast.staleId) toasts.delete(toast.staleId);\n toast.isActive = true;\n\n toasts.set(toastId, toast);\n notify();\n dispatchChanges(toToastItem(toast, isNew ? 'added' : 'updated'));\n\n if (isNew) toast.props.onOpen?.();\n };\n\n const buildToast = <TData = unknown>(content: ToastContent<TData>, options: NotValidatedToastProps) => {\n if (shouldIgnoreToast(options)) return;\n\n const { toastId, updateId, data, staleId, delay } = options;\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(Object.entries(options).filter(([_, v]) => v != null)),\n toastId,\n updateId,\n data,\n isIn: false,\n className: parseClassName(options.className || props.toastClassName),\n progressClassName: parseClassName(options.progressClassName || props.progressClassName),\n autoClose: options.isLoading ? false : getAutoCloseDelay(options.autoClose, props.autoClose),\n closeToast(reason?: true) {\n toasts.get(toastId)!.removalReason = reason;\n removeToast(toastId);\n },\n deleteToast() {\n const toastToRemove = toasts.get(toastId);\n\n if (toastToRemove == null) return;\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());\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) ? props.closeButton : true;\n }\n\n const activeToast = {\n content,\n props: toastProps,\n staleId\n } as Toast;\n\n // not handling limit + delay by design. Waiting for user feedback first\n if (props.limit && props.limit > 0 && toastCount > props.limit && isNotAnUpdate) {\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 const t = toasts.get(id);\n if (t) t.toggle = fn;\n },\n isToastActive: (id: Id) => toasts.get(id)?.isActive,\n getSnapshot: () => snapshot\n };\n}\n","import {\n ClearWaitingQueueParams,\n Id,\n NotValidatedToastProps,\n OnChangeCallback,\n ToastContainerProps,\n ToastContent,\n ToastItem,\n ToastOptions\n} from '../types';\nimport { Default, canBeRendered, isId } from '../utils';\nimport { ContainerObserver, createContainerObserver } from './containerObserver';\n\ninterface EnqueuedToast {\n content: ToastContent<any>;\n options: NotValidatedToastProps;\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(v => params != null && v.options.toastId !== params);\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 const container = containers.get(params.containerId);\n container\n ? container.removeToast(params.id)\n : containers.forEach(c => {\n c.removeToast(params.id);\n });\n }\n}\n\nexport const 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>(content: ToastContent<TData>, options: NotValidatedToastProps) {\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.get(opts.containerId || Default.CONTAINER_ID)?.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 {\n ClearWaitingQueueFunc,\n Id,\n IdOpts,\n NotValidatedToastProps,\n OnChangeCallback,\n ToastContent,\n ToastOptions,\n ToastProps,\n TypeOptions,\n UpdateOptions\n} from '../types';\nimport { isFn, isNum, isStr, Type } from '../utils';\nimport { genToastId } from './genToastId';\nimport { clearWaitingQueue, getToast, isToastActive, onChange, pushToast, removeToast, toggleToast } 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)) ? options.toastId : genToastId();\n}\n\n/**\n * If the container is not mounted, the toast is enqueued\n */\nfunction dispatchToast<TData>(content: ToastContent<TData>, options: NotValidatedToastProps): 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>(content: ToastContent<TData>, options?: ToastOptions<TData>) =>\n dispatchToast(content, mergeOptions(type, options));\n}\n\nfunction toast<TData = unknown>(content: ToastContent<TData>, options?: ToastOptions<TData>) {\n return dispatchToast(content, mergeOptions(Type.DEFAULT, options));\n}\n\ntoast.loading = <TData = unknown>(content: ToastContent<TData>, options?: ToastOptions<TData>) =>\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<TData = unknown, TError = unknown, TPending = unknown> {\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>(type: TypeOptions, input: string | UpdateOptions<T> | undefined, result: T) => {\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 => resolver('error', error, err));\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 as ClearWaitingQueueFunc;\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-v2/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>(toastId: Id, options: UpdateOptions<TData> = {}) => {\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 as (cb: OnChangeCallback) => () => void;\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 { 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(registerContainer(props)).current;\n setProps(props);\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)?.slice();\n\n function getToastToRender<T>(cb: (position: ToastPosition, toastList: Toast[]) => T) {\n if (!snapshot) return [];\n\n const toRender = new Map<ToastPosition, Toast[]>();\n\n if (props.newestOnTop) snapshot.reverse();\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 { 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 = 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 } = 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' ? `${drag.delta}px, var(--y)` : `0, calc(${drag.delta}px + var(--y))`;\n toast.style.transform = `translate3d(${translate},0)`;\n toast.style.opacity = `${1 - Math.abs(drag.delta / drag.removalDistance)}`;\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(true);\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(true);\n };\n }\n\n return {\n playToast,\n pauseToast,\n isRunning,\n preventExitTransition,\n toastRef,\n eventHandlers\n };\n}\n","import { useEffect, useLayoutEffect } from 'react';\n\nexport const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n","import cx from 'clsx';\nimport React, { cloneElement, isValidElement } from 'react';\n\nimport { useToast } from '../hooks/useToast';\nimport { ToastProps } from '../types';\nimport { Default, isFn, renderContent } from '../utils';\nimport { CloseButton } from './CloseButton';\nimport { ProgressBar } from './ProgressBar';\nimport { getIcon } from './Icons';\n\nexport const Toast: React.FC<ToastProps> = props => {\n const { isRunning, preventExitTransition, toastRef, eventHandlers, playToast } = 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 progressClassName,\n updateId,\n role,\n progress,\n rtl,\n toastId,\n deleteToast,\n isIn,\n isLoading,\n closeOnClick,\n theme,\n ariaLabel\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 tabIndex={0}\n onClick={onClick}\n data-in={isIn}\n className={cssClasses}\n {...eventHandlers}\n style={style}\n ref={toastRef}\n {...(isIn && { role: role, 'aria-label': ariaLabel })}\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`]: !isLoading\n })}\n >\n {icon}\n </div>\n )}\n {renderContent(children, props, !isRunning)}\n {Close}\n {!props.customProgressBar && (\n <ProgressBar\n {...(updateId && !isProgressControlled ? { key: `p-${updateId}` } : {})}\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 className={progressClassName}\n controlledProgress={isProgressControlled}\n progress={progress || 0}\n />\n )}\n </div>\n </Transition>\n );\n};\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> = ({ theme, type, isLoading, ...rest }) => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"100%\"\n height=\"100%\"\n fill={theme === 'colored' ? 'currentColor' : `var(--toastify-icon-color-${type})`}\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<ToastProps, 'theme' | 'icon' | 'type' | 'isLoading'>;\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 { cssTransition, Default } 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"],"mappings":"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","names":["src_exports","__export","Bounce","Flip","Icons","Slide","ToastContainer","Zoom","collapseToast","cssTransition","toast","useToastContainer","__toCommonJS","import_react","isNum","v","isStr","isFn","isId","parseClassName","getAutoCloseDelay","toastAutoClose","containerAutoClose","canBeRendered","content","import_react","collapseToast","node","done","duration","scrollHeight","style","cssTransition","enter","exit","appendPosition","collapse","collapseDuration","children","position","preventExitTransition","done","nodeRef","isIn","playToast","enterClassName","exitClassName","animationStep","node","classToToken","onEntered","e","onExited","collapseToast","React","import_react","toToastItem","toast","status","renderContent","content","props","isPaused","isStr","isFn","import_react","CloseButton","closeToast","theme","ariaLabel","React","e","import_react","import_clsx","ProgressBar","delay","isRunning","closeToast","type","hide","className","controlledProgress","progress","rtl","isIn","theme","isHidden","style","defaultClassName","cx","classNames","isFn","animationEvent","React","import_clsx","import_react","TOAST_ID","genToastId","createContainerObserver","id","containerProps","dispatchChanges","toastKey","toastCount","queue","snapshot","props","toasts","listeners","observe","notify","cb","shouldIgnoreToast","containerId","toastId","updateId","containerMismatch","isDuplicate","toggle","v","t","_a","markAsRemoved","_b","removeToast","clearQueue","addActiveToast","toast","isNew","toToastItem","content","options","data","staleId","delay","isNotAnUpdate","toastProps","_","parseClassName","getAutoCloseDelay","reason","toastToRemove","canBeRendered","activeToast","isNum","p","fn","containers","renderQueue","listeners","dispatchChanges","data","cb","hasContainers","flushRenderQueue","v","pushToast","getToast","id","containerId","_a","isToastActive","isActive","c","removeToast","params","isId","container","clearWaitingQueue","p","content","options","canBeRendered","registerToggle","opts","toggleToast","opt","registerContainer","props","notify","createContainerObserver","unobserve","onChange","getToastId","options","isStr","isNum","genToastId","dispatchToast","content","pushToast","mergeOptions","type","createToastByType","toast","handlePromise","promise","pending","error","success","id","resetParams","resolver","input","result","baseParams","params","p","isFn","err","dismiss","removeToast","clearWaitingQueue","isToastActive","toastId","getToast","oldOptions","oldContent","nextOptions","onChange","opts","toggleToast","import_react","useToastContainer","props","_a","subscribe","getSnapshot","setProps","registerContainer","snapshot","getToastToRender","cb","toRender","toast","position","p","isToastActive","import_react","useToast","props","isRunning","setIsRunning","preventExitTransition","setPreventExitTransition","toastRef","drag","autoClose","pauseOnHover","closeToast","onClick","closeOnClick","registerToggle","bindFocusEvents","unbindFocusEvents","pauseToast","playToast","onDragStart","e","bindDragEvents","toast","onDragTransitionEnd","top","bottom","left","right","onDragMove","onDragEnd","unbindDragEvents","translate","eventHandlers","import_react","useIsomorphicLayoutEffect","import_clsx","import_react","import_react","Svg","theme","type","isLoading","rest","React","Warning","props","Info","Success","Error","Spinner","Icons","maybeIcon","getIcon","icon","Icon","iconProps","isFn","Toast","props","isRunning","preventExitTransition","toastRef","eventHandlers","playToast","useToast","closeButton","children","autoClose","onClick","type","hideProgressBar","closeToast","Transition","position","className","style","progressClassName","updateId","role","progress","rtl","toastId","deleteToast","isIn","isLoading","closeOnClick","theme","ariaLabel","defaultClassName","cx","cssClasses","isFn","icon","getIcon","isProgressControlled","closeButtonProps","Close","CloseButton","React","renderContent","ProgressBar","getConfig","animationName","appendPosition","Bounce","cssTransition","Slide","Zoom","Flip","defaultProps","Bounce","e","ToastContainer","props","containerProps","underToastChildren","stacked","collapsed","setIsCollapsed","containerRef","underToastChildrenRef","getToastToRender","isToastActive","count","useToastContainer","className","style","rtl","containerId","hotKeys","getClassName","position","defaultClassName","cx","isFn","parseClassName","collapseAll","toast","useIsomorphicLayoutEffect","_a","_b","_c","nodes","heightOffset","gap","isTop","usedHeight","prevS","n","i","node","y","nodeOffset","firstNodeheight","heightOfAllNodes","acc","nodeHeight","focusFirst","React","toastList","containerStyle","content","toastProps","Toast"]}
|
@@ -0,0 +1,3 @@
|
|
1
|
+
"use client";
|
2
|
+
import{isValidElement as $t}from"react";var B=t=>typeof t=="number"&&!isNaN(t),M=t=>typeof t=="string",I=t=>typeof t=="function",pt=t=>M(t)||B(t),F=t=>M(t)||I(t)?t:null,ut=(t,o)=>t===!1||B(t)&&t>0?t:o,U=t=>$t(t)||M(t)||I(t)||B(t);import yt,{useEffect as Rt,useLayoutEffect as Bt,useRef as zt}from"react";function ot(t,o,e=300){let{scrollHeight:i,style:s}=t;requestAnimationFrame(()=>{s.minHeight="initial",s.height=i+"px",s.transition=`all ${e}ms`,requestAnimationFrame(()=>{s.height="0",s.padding="0",s.margin="0",setTimeout(o,e)})})}function z({enter:t,exit:o,appendPosition:e=!1,collapse:i=!0,collapseDuration:s=300}){return function({children:a,position:c,preventExitTransition:d,done:T,nodeRef:y,isIn:h,playToast:C}){let x=e?`${t}--${c}`:t,O=e?`${o}--${c}`:o,E=zt(0);return Bt(()=>{let _=y.current,b=x.split(" "),g=r=>{r.target===y.current&&(C(),_.removeEventListener("animationend",g),_.removeEventListener("animationcancel",g),E.current===0&&r.type!=="animationcancel"&&_.classList.remove(...b))};(()=>{_.classList.add(...b),_.addEventListener("animationend",g),_.addEventListener("animationcancel",g)})()},[]),Rt(()=>{let _=y.current,b=()=>{_.removeEventListener("animationend",b),i?ot(_,T,s):T()};h||(d?b():(()=>{E.current=1,_.className+=` ${O}`,_.addEventListener("animationend",b)})())},[h]),yt.createElement(yt.Fragment,null,a)}}import{cloneElement as Ft,isValidElement as Ut}from"react";function et(t,o){return{content:at(t.content,t.props),containerId:t.props.containerId,id:t.props.toastId,theme:t.props.theme,type:t.props.type,data:t.props.data||{},isLoading:t.props.isLoading,icon:t.props.icon,reason:t.removalReason,status:o}}function at(t,o,e=!1){return Ut(t)&&!M(t.type)?Ft(t,{closeToast:o.closeToast,toastProps:o,data:o.data,isPaused:e}):I(t)?t({closeToast:o.closeToast,toastProps:o,data:o.data,isPaused:e}):t}import st from"react";function Tt({closeToast:t,theme:o,ariaLabel:e="close"}){return st.createElement("button",{className:`Toastify__close-button Toastify__close-button--${o}`,type:"button",onClick:i=>{i.stopPropagation(),t(!0)},"aria-label":e},st.createElement("svg",{"aria-hidden":"true",viewBox:"0 0 14 16"},st.createElement("path",{fillRule:"evenodd",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"})))}import rt from"react";import gt from"clsx";function _t({delay:t,isRunning:o,closeToast:e,type:i="default",hide:s,className:l,controlledProgress:a,progress:c,rtl:d,isIn:T,theme:y}){let h=s||a&&c===0,C={animationDuration:`${t}ms`,animationPlayState:o?"running":"paused"};a&&(C.transform=`scaleX(${c})`);let x=gt("Toastify__progress-bar",a?"Toastify__progress-bar--controlled":"Toastify__progress-bar--animated",`Toastify__progress-bar-theme--${y}`,`Toastify__progress-bar--${i}`,{["Toastify__progress-bar--rtl"]:d}),O=I(l)?l({rtl:d,type:i,defaultClassName:x}):gt(x,l),E={[a&&c>=1?"onTransitionEnd":"onAnimationEnd"]:a&&c<1?null:()=>{T&&e()}};return rt.createElement("div",{className:"Toastify__progress-bar--wrp","data-hidden":h},rt.createElement("div",{className:`Toastify__progress-bar--bg Toastify__progress-bar-theme--${y} Toastify__progress-bar--${i}`}),rt.createElement("div",{role:"progressbar","aria-hidden":h?"true":"false","aria-label":"notification timer",className:O,style:C,...E}))}import Dt from"clsx";import X,{Fragment as yo,useEffect as To,useRef as Lt,useState as go}from"react";var Vt=1,nt=()=>`${Vt++}`;function bt(t,o,e){let i=1,s=0,l=[],a=[],c=o,d=new Map,T=new Set,y=n=>(T.add(n),()=>T.delete(n)),h=()=>{a=Array.from(d.values()),T.forEach(n=>n())},C=({containerId:n,toastId:r,updateId:f})=>{let p=n?n!==t:t!==1,m=d.has(r)&&f==null;return p||m},x=(n,r)=>{d.forEach(f=>{var p;(r==null||r===f.props.toastId)&&((p=f.toggle)==null||p.call(f,n))})},O=n=>{var r,f;(f=(r=n.props)==null?void 0:r.onClose)==null||f.call(r,n.removalReason),n.isActive=!1},E=n=>{if(n==null)d.forEach(O);else{let r=d.get(n);r&&O(r)}h()},_=()=>{s-=l.length,l=[]},b=n=>{var m,v;let{toastId:r,updateId:f}=n.props,p=f==null;n.staleId&&d.delete(n.staleId),n.isActive=!0,d.set(r,n),h(),e(et(n,p?"added":"updated")),p&&((v=(m=n.props).onOpen)==null||v.call(m))};return{id:t,props:c,observe:y,toggle:x,removeToast:E,toasts:d,clearQueue:_,buildToast:(n,r)=>{if(C(r))return;let{toastId:f,updateId:p,data:m,staleId:v,delay:k}=r,D=p==null;D&&s++;let N={...c,style:c.toastStyle,key:i++,...Object.fromEntries(Object.entries(r).filter(([P,A])=>A!=null)),toastId:f,updateId:p,data:m,isIn:!1,className:F(r.className||c.toastClassName),progressClassName:F(r.progressClassName||c.progressClassName),autoClose:r.isLoading?!1:ut(r.autoClose,c.autoClose),closeToast(P){d.get(f).removalReason=P,E(f)},deleteToast(){let P=d.get(f);if(P!=null){if(e(et(P,"removed")),d.delete(f),s--,s<0&&(s=0),l.length>0){b(l.shift());return}h()}}};N.closeButton=c.closeButton,r.closeButton===!1||U(r.closeButton)?N.closeButton=r.closeButton:r.closeButton===!0&&(N.closeButton=U(c.closeButton)?c.closeButton:!0);let w={content:n,props:N,staleId:v};c.limit&&c.limit>0&&s>c.limit&&D?l.push(w):B(k)?setTimeout(()=>{b(w)},k):b(w)},setProps(n){c=n},setToggle:(n,r)=>{let f=d.get(n);f&&(f.toggle=r)},isToastActive:n=>{var r;return(r=d.get(n))==null?void 0:r.isActive},getSnapshot:()=>a}}var S=new Map,H=[],it=new Set,Xt=t=>it.forEach(o=>o(t)),vt=()=>S.size>0;function Qt(){H.forEach(t=>lt(t.content,t.options)),H=[]}var ht=(t,{containerId:o})=>{var e;return(e=S.get(o||1))==null?void 0:e.toasts.get(t)};function G(t,o){var i;if(o)return!!((i=S.get(o))!=null&&i.isToastActive(t));let e=!1;return S.forEach(s=>{s.isToastActive(t)&&(e=!0)}),e}function Ct(t){if(!vt()){H=H.filter(o=>t!=null&&o.options.toastId!==t);return}if(t==null||pt(t))S.forEach(o=>{o.removeToast(t)});else if(t&&("containerId"in t||"id"in t)){let o=S.get(t.containerId);o?o.removeToast(t.id):S.forEach(e=>{e.removeToast(t.id)})}}var xt=(t={})=>{S.forEach(o=>{o.props.limit&&(!t.containerId||o.id===t.containerId)&&o.clearQueue()})};function lt(t,o){U(t)&&(vt()||H.push({content:t,options:o}),S.forEach(e=>{e.buildToast(t,o)}))}function Et(t){var o;(o=S.get(t.containerId||1))==null||o.setToggle(t.id,t.fn)}function ft(t,o){S.forEach(e=>{(o==null||!(o!=null&&o.containerId)||(o==null?void 0:o.containerId)===e.id)&&e.toggle(t,o==null?void 0:o.id)})}function Pt(t){let o=t.containerId||1;return{subscribe(e){let i=bt(o,t,Xt);S.set(o,i);let s=i.observe(e);return Qt(),()=>{s(),S.delete(o)}},setProps(e){var i;(i=S.get(o))==null||i.setProps(e)},getSnapshot(){var e;return(e=S.get(o))==null?void 0:e.getSnapshot()}}}function It(t){return it.add(t),()=>{it.delete(t)}}function Wt(t){return t&&(M(t.toastId)||B(t.toastId))?t.toastId:nt()}function V(t,o){return lt(t,o),o.toastId}function q(t,o){return{...o,type:o&&o.type||t,toastId:Wt(o)}}function K(t){return(o,e)=>V(o,q(t,e))}function u(t,o){return V(t,q("default",o))}u.loading=(t,o)=>V(t,q("default",{isLoading:!0,autoClose:!1,closeOnClick:!1,closeButton:!1,draggable:!1,...o}));function Gt(t,{pending:o,error:e,success:i},s){let l;o&&(l=M(o)?u.loading(o,s):u.loading(o.render,{...s,...o}));let a={isLoading:null,autoClose:null,closeOnClick:null,closeButton:null,draggable:null},c=(T,y,h)=>{if(y==null){u.dismiss(l);return}let C={type:T,...a,...s,data:h},x=M(y)?{render:y}:y;return l?u.update(l,{...C,...x}):u(x.render,{...C,...x}),h},d=I(t)?t():t;return d.then(T=>c("success",i,T)).catch(T=>c("error",e,T)),d}u.promise=Gt;u.success=K("success");u.info=K("info");u.error=K("error");u.warning=K("warning");u.warn=u.warning;u.dark=(t,o)=>V(t,q("default",{theme:"dark",...o}));function qt(t){Ct(t)}u.dismiss=qt;u.clearWaitingQueue=xt;u.isActive=G;u.update=(t,o={})=>{let e=ht(t,o);if(e){let{props:i,content:s}=e,l={delay:100,...i,...o,toastId:o.toastId||t,updateId:nt()};l.toastId!==t&&(l.staleId=t);let a=l.render||s;delete l.render,V(a,l)}};u.done=t=>{u.update(t,{progress:1})};u.onChange=It;u.play=t=>ft(!0,t);u.pause=t=>ft(!1,t);import{useRef as Kt,useSyncExternalStore as Yt}from"react";function ct(t){var a;let{subscribe:o,getSnapshot:e,setProps:i}=Kt(Pt(t)).current;i(t);let s=(a=Yt(o,e,e))==null?void 0:a.slice();function l(c){if(!s)return[];let d=new Map;return t.newestOnTop&&s.reverse(),s.forEach(T=>{let{position:y}=T.props;d.has(y)||d.set(y,[]),d.get(y).push(T)}),Array.from(d,T=>c(T[0],T[1]))}return{getToastToRender:l,isToastActive:G,count:s==null?void 0:s.length}}import{useEffect as Zt,useRef as St,useState as kt}from"react";function At(t){let[o,e]=kt(!1),[i,s]=kt(!1),l=St(null),a=St({start:0,delta:0,removalDistance:0,canCloseOnClick:!0,canDrag:!1,didMove:!1}).current,{autoClose:c,pauseOnHover:d,closeToast:T,onClick:y,closeOnClick:h}=t;Et({id:t.toastId,containerId:t.containerId,fn:e}),Zt(()=>{if(t.pauseOnFocusLoss)return C(),()=>{x()}},[t.pauseOnFocusLoss]);function C(){document.hasFocus()||b(),window.addEventListener("focus",_),window.addEventListener("blur",b)}function x(){window.removeEventListener("focus",_),window.removeEventListener("blur",b)}function O(m){if(t.draggable===!0||t.draggable===m.pointerType){g();let v=l.current;a.canCloseOnClick=!0,a.canDrag=!0,v.style.transition="none",t.draggableDirection==="x"?(a.start=m.clientX,a.removalDistance=v.offsetWidth*(t.draggablePercent/100)):(a.start=m.clientY,a.removalDistance=v.offsetHeight*(t.draggablePercent===80?t.draggablePercent*1.5:t.draggablePercent)/100)}}function E(m){let{top:v,bottom:k,left:D,right:N}=l.current.getBoundingClientRect();m.nativeEvent.type!=="touchend"&&t.pauseOnHover&&m.clientX>=D&&m.clientX<=N&&m.clientY>=v&&m.clientY<=k?b():_()}function _(){e(!0)}function b(){e(!1)}function g(){a.didMove=!1,document.addEventListener("pointermove",r),document.addEventListener("pointerup",f)}function n(){document.removeEventListener("pointermove",r),document.removeEventListener("pointerup",f)}function r(m){let v=l.current;if(a.canDrag&&v){a.didMove=!0,o&&b(),t.draggableDirection==="x"?a.delta=m.clientX-a.start:a.delta=m.clientY-a.start,a.start!==m.clientX&&(a.canCloseOnClick=!1);let k=t.draggableDirection==="x"?`${a.delta}px, var(--y)`:`0, calc(${a.delta}px + var(--y))`;v.style.transform=`translate3d(${k},0)`,v.style.opacity=`${1-Math.abs(a.delta/a.removalDistance)}`}}function f(){n();let m=l.current;if(a.canDrag&&a.didMove&&m){if(a.canDrag=!1,Math.abs(a.delta)>a.removalDistance){s(!0),t.closeToast(!0),t.collapseAll();return}m.style.transition="transform 0.2s, opacity 0.2s",m.style.removeProperty("transform"),m.style.removeProperty("opacity")}}let p={onPointerDown:O,onPointerUp:E};return c&&d&&(p.onMouseEnter=b,t.stacked||(p.onMouseLeave=_)),h&&(p.onClick=m=>{y&&y(m),a.canCloseOnClick&&T(!0)}),{playToast:_,pauseToast:b,isRunning:o,preventExitTransition:i,toastRef:l,eventHandlers:p}}import{useEffect as Jt,useLayoutEffect as to}from"react";var Ot=typeof window!="undefined"?to:Jt;import dt from"clsx";import Z,{cloneElement as fo,isValidElement as co}from"react";import L,{cloneElement as oo,isValidElement as eo}from"react";var j=({theme:t,type:o,isLoading:e,...i})=>L.createElement("svg",{viewBox:"0 0 24 24",width:"100%",height:"100%",fill:t==="colored"?"currentColor":`var(--toastify-icon-color-${o})`,...i});function ao(t){return L.createElement(j,{...t},L.createElement("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"}))}function so(t){return L.createElement(j,{...t},L.createElement("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"}))}function ro(t){return L.createElement(j,{...t},L.createElement("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"}))}function no(t){return L.createElement(j,{...t},L.createElement("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"}))}function io(){return L.createElement("div",{className:"Toastify__spinner"})}var Y={info:so,warning:ao,success:ro,error:no,spinner:io},lo=t=>t in Y;function Nt({theme:t,type:o,isLoading:e,icon:i}){let s=null,l={theme:t,type:o};return i===!1||(I(i)?s=i({...l,isLoading:e}):eo(i)?s=oo(i,l):e?s=Y.spinner():lo(o)&&(s=Y[o](l))),s}var wt=t=>{let{isRunning:o,preventExitTransition:e,toastRef:i,eventHandlers:s,playToast:l}=At(t),{closeButton:a,children:c,autoClose:d,onClick:T,type:y,hideProgressBar:h,closeToast:C,transition:x,position:O,className:E,style:_,progressClassName:b,updateId:g,role:n,progress:r,rtl:f,toastId:p,deleteToast:m,isIn:v,isLoading:k,closeOnClick:D,theme:N,ariaLabel:w}=t,P=dt("Toastify__toast",`Toastify__toast-theme--${N}`,`Toastify__toast--${y}`,{["Toastify__toast--rtl"]:f},{["Toastify__toast--close-on-click"]:D}),A=I(E)?E({rtl:f,position:O,type:y,defaultClassName:P}):dt(P,E),R=Nt(t),Q=!!r||!d,tt={closeToast:C,type:y,theme:N},W=null;return a===!1||(I(a)?W=a(tt):co(a)?W=fo(a,tt):W=Tt(tt)),Z.createElement(x,{isIn:v,done:m,position:O,preventExitTransition:e,nodeRef:i,playToast:l},Z.createElement("div",{id:p,tabIndex:0,onClick:T,"data-in":v,className:A,...s,style:_,ref:i,...v&&{role:n,"aria-label":w}},R!=null&&Z.createElement("div",{className:dt("Toastify__toast-icon",{["Toastify--animate-icon Toastify__zoom-enter"]:!k})},R),at(c,t,!o),W,!t.customProgressBar&&Z.createElement(_t,{...g&&!Q?{key:`p-${g}`}:{},rtl:f,theme:N,delay:d,isRunning:o,isIn:v,closeToast:C,hide:h,type:y,className:b,controlledProgress:Q,progress:r||0})))};var J=(t,o=!1)=>({enter:`Toastify--animate Toastify__${t}-enter`,exit:`Toastify--animate Toastify__${t}-exit`,appendPosition:o}),mt=z(J("bounce",!0)),mo=z(J("slide",!0)),po=z(J("zoom")),uo=z(J("flip"));var _o={position:"top-right",transition:mt,autoClose:5e3,closeButton:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,draggable:"touch",draggablePercent:80,draggableDirection:"x",role:"alert",theme:"light","aria-label":"Notifications Alt+T",hotKeys:t=>t.altKey&&t.code==="KeyT"};function Mt(t){let o={..._o,...t},e=t.underToastChildren||null,i=t.stacked,[s,l]=go(!0),a=Lt(null),c=Lt(null),{getToastToRender:d,isToastActive:T,count:y}=ct(o),{className:h,style:C,rtl:x,containerId:O,hotKeys:E}=o;function _(g){let n=Dt("Toastify__toast-container",`Toastify__toast-container--${g}`,{["Toastify__toast-container--rtl"]:x});return I(h)?h({position:g,rtl:x,defaultClassName:n}):Dt(n,F(h))}function b(){i&&(l(!0),u.play())}return Ot(()=>{var g,n,r;if(i){let f=a.current.querySelectorAll('[data-in="true"]'),p=c==null?void 0:c.current,m=(p==null?void 0:p.getBoundingClientRect().height)||0,v=12,k=(g=o.position)==null?void 0:g.includes("top"),D=0,N=0;if(Array.from(f).reverse().forEach((w,P)=>{let A=w;A.classList.add("Toastify__toast--stacked"),P>0&&(A.dataset.collapsed=`${s}`),A.dataset.pos||(A.dataset.pos=k?"top":"bot");let R=D*(s?.2:1)+(s?0:v*P);!k&&f.length>1&&(R+=m),A.style.setProperty("--y",`${k?R:R*-1}px`),A.style.setProperty("--g",`${v}`),A.style.setProperty("--s",`${1-(s?N:0)}`),D+=A.offsetHeight,N+=.025}),p&&k&&s){let w=D*.2,P=((r=(n=f==null?void 0:f[0])==null?void 0:n.getBoundingClientRect())==null?void 0:r.height)||0;p.style.marginTop=`${w+P}px`}if(p&&k&&!s){let w=Array.from(f).reduce((P,A)=>{let Q=A.offsetHeight;return P+Q+v},0);p.style.marginTop=`${w}px`}}},[s,y,i]),To(()=>{function g(n){var f;let r=a.current;E(n)&&((f=r.querySelector('[tabIndex="0"]'))==null||f.focus(),l(!1),u.pause()),n.key==="Escape"&&(document.activeElement===r||r!=null&&r.contains(document.activeElement))&&(l(!0),u.play())}return document.addEventListener("keydown",g),()=>{document.removeEventListener("keydown",g)}},[E]),X.createElement("section",{ref:a,className:"Toastify",id:O,onMouseEnter:()=>{i&&(l(!1),u.pause())},onMouseLeave:b,"aria-live":"polite","aria-atomic":"false","aria-relevant":"additions text","aria-label":o["aria-label"]},d((g,n)=>{let r=n.length?{...C}:{...C,pointerEvents:"none"};return X.createElement(yo,{key:`f-${g}`},X.createElement("div",{tabIndex:-1,className:_(g),"data-stacked":i,style:r,key:`c-${g}`},n.map(({content:f,props:p})=>X.createElement(wt,{...p,stacked:i,collapseAll:b,isIn:T(p.toastId,p.containerId),key:`t-${p.key}`},f)),X.createElement("div",{ref:c,id:"underToastChildren",className:"Toastify__under-toast-children",style:{width:"100%",opacity:n.length>1?1:0,transition:"all 0.3s ease-in-out"}},e)))}))}export{mt as Bounce,uo as Flip,Y as Icons,mo as Slide,Mt as ToastContainer,po as Zoom,ot as collapseToast,z as cssTransition,u as toast,ct as useToastContainer};
|
3
|
+
//# sourceMappingURL=unstyled.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"sources":["../src/utils/propValidator.ts","../src/utils/cssTransition.tsx","../src/utils/collapseToast.ts","../src/utils/mapper.ts","../src/components/CloseButton.tsx","../src/components/ProgressBar.tsx","../src/components/ToastContainer.tsx","../src/core/genToastId.ts","../src/core/containerObserver.ts","../src/core/store.ts","../src/core/toast.ts","../src/hooks/useToastContainer.ts","../src/hooks/useToast.ts","../src/hooks/useIsomorphicLayoutEffect.ts","../src/components/Toast.tsx","../src/components/Icons.tsx","../src/components/Transitions.tsx"],"sourcesContent":["import { isValidElement } from 'react';\nimport { Id } from '../types';\n\nexport const isNum = (v: any): v is Number => 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 = (toastAutoClose?: false | number, containerAutoClose?: false | number) =>\n toastAutoClose === false || (isNum(toastAutoClose) && toastAutoClose > 0) ? toastAutoClose : containerAutoClose;\n\nexport const canBeRendered = <T>(content: T): boolean =>\n isValidElement(content) || isStr(content) || isFn(content) || isNum(content);\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 (animationStep.current === AnimationStep.Enter && e.type !== 'animationcancel') {\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(node: HTMLElement, done: () => void, duration = Default.COLLAPSE_DURATION) {\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, ToastContentProps, ToastItem, ToastItemStatus, ToastProps } from '../types';\nimport { cloneElement, isValidElement, ReactElement } from 'react';\nimport { isFn, isStr } from './propValidator';\n\nexport function toToastItem(toast: Toast, status: ToastItemStatus): ToastItem {\n return {\n content: renderContent(toast.content, toast.props),\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 reason: toast.removalReason,\n status\n };\n}\n\nexport function renderContent(content: unknown, props: ToastProps, isPaused: boolean = false) {\n if (isValidElement(content) && !isStr(content.type)) {\n return cloneElement<ToastContentProps>(content as ReactElement<any>, {\n closeToast: props.closeToast,\n toastProps: props,\n data: props.data,\n isPaused\n });\n } else if (isFn(content)) {\n return content({\n closeToast: props.closeToast,\n toastProps: props,\n data: props.data,\n isPaused\n });\n }\n\n return content;\n}\n","import React from 'react';\nimport { Default } from '../utils';\nimport { CloseToastFunc, Theme, TypeOptions } from '../types';\n\nexport interface CloseButtonProps {\n closeToast: CloseToastFunc;\n type: TypeOptions;\n ariaLabel?: string;\n theme: Theme;\n}\n\nexport function CloseButton({ closeToast, theme, ariaLabel = 'close' }: 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(true);\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 React from 'react';\nimport cx from 'clsx';\n\nimport { Default, isFn, Type } from '../utils';\nimport { Theme, ToastClassName, TypeOptions } 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 * 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 * Tell whether a 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 controlledProgress,\n progress,\n rtl,\n isIn,\n theme\n}: ProgressBarProps) {\n const isHidden = hide || (controlledProgress && progress === 0);\n const style: React.CSSProperties = {\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 ? 'onTransitionEnd' : '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 className={`${Default.CSS_NAMESPACE}__progress-bar--wrp`} data-hidden={isHidden}>\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","import cx from 'clsx';\nimport React, { Fragment, useEffect, useRef, useState } from 'react';\n\nimport { toast } from '../core';\nimport { useToastContainer } from '../hooks';\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 'aria-label': 'Notifications Alt+T',\n hotKeys: e => e.altKey && e.code === 'KeyT'\n};\n\nexport function ToastContainer(props: ToastContainerProps) {\n let containerProps: ToastContainerProps = {\n ...defaultProps,\n ...props\n };\n const underToastChildren = props.underToastChildren || null;\n const stacked = props.stacked;\n const [collapsed, setIsCollapsed] = useState(true);\n const containerRef = useRef<HTMLDivElement>(null);\n const underToastChildrenRef = useRef<HTMLDivElement>(null);\n const { getToastToRender, isToastActive, count } = useToastContainer(containerProps);\n const { className, style, rtl, containerId, hotKeys } = 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 underToastChildren = underToastChildrenRef?.current;\n const heightOffset = underToastChildren?.getBoundingClientRect().height || 0;\n\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 let y = usedHeight * (collapsed ? 0.2 : 1) + (collapsed ? 0 : gap * i);\n if (!isTop && nodes.length > 1) {\n y += heightOffset;\n }\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 if (underToastChildren && isTop && collapsed) {\n const nodeOffset = usedHeight * 0.2;\n\n const firstNodeheight = nodes?.[0]?.getBoundingClientRect()?.height || 0;\n underToastChildren.style.marginTop = `${nodeOffset + firstNodeheight}px`;\n }\n\n if (underToastChildren && isTop && !collapsed) {\n const heightOfAllNodes = Array.from(nodes).reduce((acc, n) => {\n const node = n as HTMLElement;\n const nodeHeight = node.offsetHeight;\n return acc + nodeHeight + gap;\n }, 0);\n underToastChildren.style.marginTop = `${heightOfAllNodes}px`;\n }\n }\n }, [collapsed, count, stacked]);\n\n useEffect(() => {\n function focusFirst(e: KeyboardEvent) {\n const node = containerRef.current;\n if (hotKeys(e)) {\n (node.querySelector('[tabIndex=\"0\"]') as HTMLElement)?.focus();\n setIsCollapsed(false);\n toast.pause();\n }\n if (e.key === 'Escape' && (document.activeElement === node || node?.contains(document.activeElement))) {\n setIsCollapsed(true);\n toast.play();\n }\n }\n\n document.addEventListener('keydown', focusFirst);\n\n return () => {\n document.removeEventListener('keydown', focusFirst);\n };\n }, [hotKeys]);\n\n return (\n <section\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 aria-live=\"polite\"\n aria-atomic=\"false\"\n aria-relevant=\"additions text\"\n aria-label={containerProps['aria-label']}\n >\n {getToastToRender((position, toastList) => {\n const containerStyle: React.CSSProperties = !toastList.length\n ? { ...style, pointerEvents: 'none' }\n : { ...style };\n\n return (\n <Fragment key={`f-${position}`}>\n <div\n tabIndex={-1}\n className={getClassName(position)}\n data-stacked={stacked}\n style={containerStyle}\n key={`c-${position}`}\n >\n {toastList.map(({ content, props: toastProps }) => {\n return (\n <Toast\n {...toastProps}\n stacked={stacked}\n collapseAll={collapseAll}\n isIn={isToastActive(toastProps.toastId, toastProps.containerId)}\n key={`t-${toastProps.key}`}\n >\n {content}\n </Toast>\n );\n })}\n\n <div\n ref={underToastChildrenRef}\n id=\"underToastChildren\"\n className={`${Default.CSS_NAMESPACE}__under-toast-children`}\n style={{\n width: '100%',\n opacity: toastList.length > 1 ? 1 : 0,\n transition: 'all 0.3s ease-in-out'\n }}\n >\n {underToastChildren}\n </div>\n </div>\n </Fragment>\n );\n })}\n </section>\n );\n}\n","let TOAST_ID = 1;\n\nexport const genToastId = () => `${TOAST_ID++}`;\n","import {\n Id,\n NotValidatedToastProps,\n OnChangeCallback,\n Toast,\n ToastContainerProps,\n ToastContent,\n ToastProps\n} from '../types';\nimport { canBeRendered, getAutoCloseDelay, isNum, parseClassName, toToastItem } from '../utils';\n\ntype Notify = () => void;\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: Toast[] = [];\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 = ({ containerId, toastId, updateId }: 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) t.toggle?.(v);\n });\n };\n\n const markAsRemoved = (v: Toast) => {\n v.props?.onClose?.(v.removalReason);\n v.isActive = false;\n };\n\n const removeToast = (id?: Id) => {\n if (id == null) {\n toasts.forEach(markAsRemoved);\n } else {\n const t = toasts.get(id);\n if (t) markAsRemoved(t);\n }\n notify();\n };\n\n const clearQueue = () => {\n toastCount -= queue.length;\n queue = [];\n };\n\n const addActiveToast = (toast: Toast) => {\n const { toastId, updateId } = toast.props;\n const isNew = updateId == null;\n\n if (toast.staleId) toasts.delete(toast.staleId);\n toast.isActive = true;\n\n toasts.set(toastId, toast);\n notify();\n dispatchChanges(toToastItem(toast, isNew ? 'added' : 'updated'));\n\n if (isNew) toast.props.onOpen?.();\n };\n\n const buildToast = <TData = unknown>(content: ToastContent<TData>, options: NotValidatedToastProps) => {\n if (shouldIgnoreToast(options)) return;\n\n const { toastId, updateId, data, staleId, delay } = options;\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(Object.entries(options).filter(([_, v]) => v != null)),\n toastId,\n updateId,\n data,\n isIn: false,\n className: parseClassName(options.className || props.toastClassName),\n progressClassName: parseClassName(options.progressClassName || props.progressClassName),\n autoClose: options.isLoading ? false : getAutoCloseDelay(options.autoClose, props.autoClose),\n closeToast(reason?: true) {\n toasts.get(toastId)!.removalReason = reason;\n removeToast(toastId);\n },\n deleteToast() {\n const toastToRemove = toasts.get(toastId);\n\n if (toastToRemove == null) return;\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());\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) ? props.closeButton : true;\n }\n\n const activeToast = {\n content,\n props: toastProps,\n staleId\n } as Toast;\n\n // not handling limit + delay by design. Waiting for user feedback first\n if (props.limit && props.limit > 0 && toastCount > props.limit && isNotAnUpdate) {\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 const t = toasts.get(id);\n if (t) t.toggle = fn;\n },\n isToastActive: (id: Id) => toasts.get(id)?.isActive,\n getSnapshot: () => snapshot\n };\n}\n","import {\n ClearWaitingQueueParams,\n Id,\n NotValidatedToastProps,\n OnChangeCallback,\n ToastContainerProps,\n ToastContent,\n ToastItem,\n ToastOptions\n} from '../types';\nimport { Default, canBeRendered, isId } from '../utils';\nimport { ContainerObserver, createContainerObserver } from './containerObserver';\n\ninterface EnqueuedToast {\n content: ToastContent<any>;\n options: NotValidatedToastProps;\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(v => params != null && v.options.toastId !== params);\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 const container = containers.get(params.containerId);\n container\n ? container.removeToast(params.id)\n : containers.forEach(c => {\n c.removeToast(params.id);\n });\n }\n}\n\nexport const 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>(content: ToastContent<TData>, options: NotValidatedToastProps) {\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.get(opts.containerId || Default.CONTAINER_ID)?.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 {\n ClearWaitingQueueFunc,\n Id,\n IdOpts,\n NotValidatedToastProps,\n OnChangeCallback,\n ToastContent,\n ToastOptions,\n ToastProps,\n TypeOptions,\n UpdateOptions\n} from '../types';\nimport { isFn, isNum, isStr, Type } from '../utils';\nimport { genToastId } from './genToastId';\nimport { clearWaitingQueue, getToast, isToastActive, onChange, pushToast, removeToast, toggleToast } 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)) ? options.toastId : genToastId();\n}\n\n/**\n * If the container is not mounted, the toast is enqueued\n */\nfunction dispatchToast<TData>(content: ToastContent<TData>, options: NotValidatedToastProps): 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>(content: ToastContent<TData>, options?: ToastOptions<TData>) =>\n dispatchToast(content, mergeOptions(type, options));\n}\n\nfunction toast<TData = unknown>(content: ToastContent<TData>, options?: ToastOptions<TData>) {\n return dispatchToast(content, mergeOptions(Type.DEFAULT, options));\n}\n\ntoast.loading = <TData = unknown>(content: ToastContent<TData>, options?: ToastOptions<TData>) =>\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<TData = unknown, TError = unknown, TPending = unknown> {\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>(type: TypeOptions, input: string | UpdateOptions<T> | undefined, result: T) => {\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 => resolver('error', error, err));\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 as ClearWaitingQueueFunc;\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-v2/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>(toastId: Id, options: UpdateOptions<TData> = {}) => {\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 as (cb: OnChangeCallback) => () => void;\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 { 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(registerContainer(props)).current;\n setProps(props);\n const snapshot = useSyncExternalStore(subscribe, getSnapshot, getSnapshot)?.slice();\n\n function getToastToRender<T>(cb: (position: ToastPosition, toastList: Toast[]) => T) {\n if (!snapshot) return [];\n\n const toRender = new Map<ToastPosition, Toast[]>();\n\n if (props.newestOnTop) snapshot.reverse();\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 { 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 = 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 } = 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' ? `${drag.delta}px, var(--y)` : `0, calc(${drag.delta}px + var(--y))`;\n toast.style.transform = `translate3d(${translate},0)`;\n toast.style.opacity = `${1 - Math.abs(drag.delta / drag.removalDistance)}`;\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(true);\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(true);\n };\n }\n\n return {\n playToast,\n pauseToast,\n isRunning,\n preventExitTransition,\n toastRef,\n eventHandlers\n };\n}\n","import { useEffect, useLayoutEffect } from 'react';\n\nexport const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n","import cx from 'clsx';\nimport React, { cloneElement, isValidElement } from 'react';\n\nimport { useToast } from '../hooks/useToast';\nimport { ToastProps } from '../types';\nimport { Default, isFn, renderContent } from '../utils';\nimport { CloseButton } from './CloseButton';\nimport { ProgressBar } from './ProgressBar';\nimport { getIcon } from './Icons';\n\nexport const Toast: React.FC<ToastProps> = props => {\n const { isRunning, preventExitTransition, toastRef, eventHandlers, playToast } = 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 progressClassName,\n updateId,\n role,\n progress,\n rtl,\n toastId,\n deleteToast,\n isIn,\n isLoading,\n closeOnClick,\n theme,\n ariaLabel\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 tabIndex={0}\n onClick={onClick}\n data-in={isIn}\n className={cssClasses}\n {...eventHandlers}\n style={style}\n ref={toastRef}\n {...(isIn && { role: role, 'aria-label': ariaLabel })}\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`]: !isLoading\n })}\n >\n {icon}\n </div>\n )}\n {renderContent(children, props, !isRunning)}\n {Close}\n {!props.customProgressBar && (\n <ProgressBar\n {...(updateId && !isProgressControlled ? { key: `p-${updateId}` } : {})}\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 className={progressClassName}\n controlledProgress={isProgressControlled}\n progress={progress || 0}\n />\n )}\n </div>\n </Transition>\n );\n};\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> = ({ theme, type, isLoading, ...rest }) => (\n <svg\n viewBox=\"0 0 24 24\"\n width=\"100%\"\n height=\"100%\"\n fill={theme === 'colored' ? 'currentColor' : `var(--toastify-icon-color-${type})`}\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<ToastProps, 'theme' | 'icon' | 'type' | 'isLoading'>;\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 { cssTransition, Default } 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"],"mappings":"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","names":["isValidElement","isNum","v","isStr","isFn","isId","parseClassName","getAutoCloseDelay","toastAutoClose","containerAutoClose","canBeRendered","content","React","useEffect","useLayoutEffect","useRef","collapseToast","node","done","duration","scrollHeight","style","cssTransition","enter","exit","appendPosition","collapse","collapseDuration","children","position","preventExitTransition","done","nodeRef","isIn","playToast","enterClassName","exitClassName","animationStep","useRef","useLayoutEffect","node","classToToken","onEntered","e","useEffect","onExited","collapseToast","React","cloneElement","isValidElement","toToastItem","toast","status","renderContent","content","props","isPaused","isValidElement","isStr","cloneElement","isFn","React","CloseButton","closeToast","theme","ariaLabel","React","e","React","cx","ProgressBar","delay","isRunning","closeToast","type","hide","className","controlledProgress","progress","rtl","isIn","theme","isHidden","style","defaultClassName","cx","classNames","isFn","animationEvent","React","cx","React","Fragment","useEffect","useRef","useState","TOAST_ID","genToastId","createContainerObserver","id","containerProps","dispatchChanges","toastKey","toastCount","queue","snapshot","props","toasts","listeners","observe","notify","cb","shouldIgnoreToast","containerId","toastId","updateId","containerMismatch","isDuplicate","toggle","v","t","_a","markAsRemoved","_b","removeToast","clearQueue","addActiveToast","toast","isNew","toToastItem","content","options","data","staleId","delay","isNotAnUpdate","toastProps","_","parseClassName","getAutoCloseDelay","reason","toastToRemove","canBeRendered","activeToast","isNum","p","fn","containers","renderQueue","listeners","dispatchChanges","data","cb","hasContainers","flushRenderQueue","v","pushToast","getToast","id","containerId","_a","isToastActive","isActive","c","removeToast","params","isId","container","clearWaitingQueue","p","content","options","canBeRendered","registerToggle","opts","toggleToast","opt","registerContainer","props","notify","createContainerObserver","unobserve","onChange","getToastId","options","isStr","isNum","genToastId","dispatchToast","content","pushToast","mergeOptions","type","createToastByType","toast","handlePromise","promise","pending","error","success","id","resetParams","resolver","input","result","baseParams","params","p","isFn","err","dismiss","removeToast","clearWaitingQueue","isToastActive","toastId","getToast","oldOptions","oldContent","nextOptions","onChange","opts","toggleToast","useRef","useSyncExternalStore","useToastContainer","props","_a","subscribe","getSnapshot","setProps","useRef","registerContainer","snapshot","useSyncExternalStore","getToastToRender","cb","toRender","toast","position","p","isToastActive","useEffect","useRef","useState","useToast","props","isRunning","setIsRunning","useState","preventExitTransition","setPreventExitTransition","toastRef","useRef","drag","autoClose","pauseOnHover","closeToast","onClick","closeOnClick","registerToggle","useEffect","bindFocusEvents","unbindFocusEvents","pauseToast","playToast","onDragStart","e","bindDragEvents","toast","onDragTransitionEnd","top","bottom","left","right","onDragMove","onDragEnd","unbindDragEvents","translate","eventHandlers","useEffect","useLayoutEffect","useIsomorphicLayoutEffect","cx","React","cloneElement","isValidElement","React","cloneElement","isValidElement","Svg","theme","type","isLoading","rest","React","Warning","props","Info","Success","Error","Spinner","Icons","maybeIcon","getIcon","icon","Icon","iconProps","isFn","isValidElement","cloneElement","Toast","props","isRunning","preventExitTransition","toastRef","eventHandlers","playToast","useToast","closeButton","children","autoClose","onClick","type","hideProgressBar","closeToast","Transition","position","className","style","progressClassName","updateId","role","progress","rtl","toastId","deleteToast","isIn","isLoading","closeOnClick","theme","ariaLabel","defaultClassName","cx","cssClasses","isFn","icon","getIcon","isProgressControlled","closeButtonProps","Close","isValidElement","cloneElement","CloseButton","React","renderContent","ProgressBar","getConfig","animationName","appendPosition","Bounce","cssTransition","Slide","Zoom","Flip","defaultProps","Bounce","e","ToastContainer","props","containerProps","underToastChildren","stacked","collapsed","setIsCollapsed","useState","containerRef","useRef","underToastChildrenRef","getToastToRender","isToastActive","count","useToastContainer","className","style","rtl","containerId","hotKeys","getClassName","position","defaultClassName","cx","isFn","parseClassName","collapseAll","toast","useIsomorphicLayoutEffect","_a","_b","_c","nodes","heightOffset","gap","isTop","usedHeight","prevS","n","i","node","y","nodeOffset","firstNodeheight","heightOfAllNodes","acc","nodeHeight","useEffect","focusFirst","React","toastList","containerStyle","Fragment","content","toastProps","Toast"]}
|
package/package.json
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
{
|
2
|
+
"version": "11.0.5",
|
3
|
+
"license": "MIT",
|
4
|
+
"description": "React notification made easy",
|
5
|
+
"keywords": [
|
6
|
+
"react",
|
7
|
+
"notification",
|
8
|
+
"toast",
|
9
|
+
"react-component",
|
10
|
+
"react-toastify-v2",
|
11
|
+
"push",
|
12
|
+
"alert",
|
13
|
+
"snackbar",
|
14
|
+
"message"
|
15
|
+
],
|
16
|
+
"files": [
|
17
|
+
"dist",
|
18
|
+
"addons"
|
19
|
+
],
|
20
|
+
"scripts": {
|
21
|
+
"prepare": "lefthook install",
|
22
|
+
"setup": "pnpm link .",
|
23
|
+
"start": "cd playground && pnpm dev",
|
24
|
+
"test": "cypress open --component",
|
25
|
+
"test:run": "cypress run --component -b chrome",
|
26
|
+
"prettier": "prettier --write src",
|
27
|
+
"build": "tsup && cp src/style.css dist/ReactToastify.css && rm dist/unstyled.css*"
|
28
|
+
},
|
29
|
+
"peerDependencies": {
|
30
|
+
"react": "^18 || ^19",
|
31
|
+
"react-dom": "^18 || ^19"
|
32
|
+
},
|
33
|
+
"prettier": {
|
34
|
+
"printWidth": 120,
|
35
|
+
"semi": true,
|
36
|
+
"singleQuote": true,
|
37
|
+
"trailingComma": "none",
|
38
|
+
"arrowParens": "avoid"
|
39
|
+
},
|
40
|
+
"name": "react-toastify-v2",
|
41
|
+
"repository": {
|
42
|
+
"type": "git",
|
43
|
+
"url": "git+https://github.com/ty-sir/react-toastify-v2.git"
|
44
|
+
},
|
45
|
+
"author": "Ty-Sir <tylersiravo@gmail.com> (https://tylersiravo.com)",
|
46
|
+
"bugs": {
|
47
|
+
"url": "https://github.com/ty-sir/react-toastify-v2/issues"
|
48
|
+
},
|
49
|
+
"homepage": "https://github.com/ty-sir/react-toastify-v2#readme",
|
50
|
+
"devDependencies": {
|
51
|
+
"@4tw/cypress-drag-drop": "^2.2.5",
|
52
|
+
"@cypress/code-coverage": "^3.13.9",
|
53
|
+
"@istanbuljs/nyc-config-typescript": "^1.0.2",
|
54
|
+
"@testing-library/cypress": "^10.0.2",
|
55
|
+
"@types/node": "^22.10.2",
|
56
|
+
"@types/react": "^19.0.1",
|
57
|
+
"@types/react-dom": "^19.0.2",
|
58
|
+
"@vitejs/plugin-react": "^4.3.4",
|
59
|
+
"coveralls": "^3.1.1",
|
60
|
+
"cypress": "^13.16.1",
|
61
|
+
"lefthook": "^1.9.2",
|
62
|
+
"lint-staged": "^15.2.11",
|
63
|
+
"postcss": "^8.4.49",
|
64
|
+
"prettier": "3.4.2",
|
65
|
+
"react": "^19.0.0",
|
66
|
+
"react-dom": "^19.0.0",
|
67
|
+
"tsup": "^8.3.5",
|
68
|
+
"typescript": "^5.7.2",
|
69
|
+
"vite": "^6.0.3",
|
70
|
+
"vite-plugin-istanbul": "^6.0.2"
|
71
|
+
},
|
72
|
+
"dependencies": {
|
73
|
+
"clsx": "^2.1.1"
|
74
|
+
},
|
75
|
+
"main": "dist/index.js",
|
76
|
+
"typings": "dist/index.d.ts",
|
77
|
+
"module": "dist/index.mjs",
|
78
|
+
"source": "src/index.ts",
|
79
|
+
"exports": {
|
80
|
+
".": {
|
81
|
+
"types": "./dist/index.d.ts",
|
82
|
+
"import": "./dist/index.mjs",
|
83
|
+
"require": "./dist/index.js"
|
84
|
+
},
|
85
|
+
"./unstyled": {
|
86
|
+
"types": "./dist/unstyled.d.ts",
|
87
|
+
"import": "./dist/unstyled.mjs",
|
88
|
+
"require": "./dist/unstyled.js"
|
89
|
+
},
|
90
|
+
"./dist/ReactToastify.css": "./dist/ReactToastify.css",
|
91
|
+
"./ReactToastify.css": "./dist/ReactToastify.css",
|
92
|
+
"./package.json": "./package.json",
|
93
|
+
"./addons/use-notification-center": {
|
94
|
+
"types": "./addons/use-notification-center/index.d.ts",
|
95
|
+
"import": "./addons/use-notification-center/index.mjs",
|
96
|
+
"require": "./addons/use-notification-center/index.js"
|
97
|
+
},
|
98
|
+
"./notification-center": {
|
99
|
+
"types": "./addons/use-notification-center/index.d.ts",
|
100
|
+
"import": "./addons/use-notification-center/index.mjs",
|
101
|
+
"require": "./addons/use-notification-center/index.js"
|
102
|
+
}
|
103
|
+
},
|
104
|
+
"lint-staged": {
|
105
|
+
"*.{js,jsx,ts,tsx,md,html,css}": "prettier --write"
|
106
|
+
},
|
107
|
+
"packageManager": "pnpm@9.15.9+sha512.68046141893c66fad01c079231128e9afb89ef87e2691d69e4d40eee228988295fd4682181bae55b58418c3a253bde65a505ec7c5f9403ece5cc3cd37dcf2531"
|
108
|
+
}
|