goey-toast 0.2.0 → 0.2.2
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/README.md +119 -1
- package/dist/index.cjs +788 -140
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +102 -25
- package/dist/index.css.map +1 -1
- package/dist/index.d.cts +55 -4
- package/dist/index.d.ts +55 -4
- package/dist/index.js +789 -142
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context.ts","../src/components/GoeyToaster.tsx","../src/icons/DefaultIcon.tsx","../src/icons/SuccessIcon.tsx","../src/icons/ErrorIcon.tsx","../src/icons/WarningIcon.tsx","../src/icons/InfoIcon.tsx","../src/icons/SpinnerIcon.tsx","../src/usePrefersReducedMotion.ts","../src/components/goey-styles.ts","../src/components/GoeyToast.tsx","../src/components/ToastErrorBoundary.tsx","../src/goey-toast.tsx"],"names":["useEffect","jsx","Toaster","jsxs","useState","useRef","useCallback","pw","bw","th","useLayoutEffect","phase","animate","collapseDur","sonnerToast","AnimatePresence","motion","Fragment","Component","toast"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ToasterProps } from 'sonner'\n\nlet _position: ToasterProps['position'] = 'bottom-right'\nlet _spring: boolean = true\nlet _bounce: number | undefined = undefined\n\nexport function setGoeyPosition(position: ToasterProps['position']) {\n _position = position\n}\n\nexport function getGoeyPosition() {\n return _position\n}\n\nexport function setGoeySpring(spring: boolean) {\n _spring = spring\n}\n\nexport function getGoeySpring() {\n return _spring\n}\n\nexport function setGoeyBounce(bounce: number | undefined) {\n _bounce = bounce\n}\n\nexport function getGoeyBounce() {\n return _bounce\n}\n","import { useEffect } from 'react'\nimport { Toaster } from 'sonner'\nimport type { GoeyToasterProps } from '../types'\nimport { setGoeyPosition, setGoeySpring, setGoeyBounce } from '../context'\n\nexport function GoeyToaster({\n position = 'bottom-right',\n duration,\n gap = 14,\n offset = '24px',\n theme = 'light',\n toastOptions,\n expand,\n closeButton,\n richColors,\n visibleToasts,\n dir,\n spring = true,\n bounce,\n}: GoeyToasterProps) {\n useEffect(() => {\n setGoeyPosition(position)\n }, [position])\n\n useEffect(() => {\n setGoeySpring(spring)\n }, [spring])\n\n useEffect(() => {\n setGoeyBounce(bounce)\n }, [bounce])\n\n useEffect(() => {\n if (process.env.NODE_ENV !== 'development') return\n\n const el = document.createElement('div')\n el.setAttribute('data-goey-toast-css', '')\n el.style.position = 'absolute'\n el.style.width = '0'\n el.style.height = '0'\n el.style.overflow = 'hidden'\n el.style.pointerEvents = 'none'\n document.body.appendChild(el)\n\n const value = getComputedStyle(el).getPropertyValue('--goey-toast')\n document.body.removeChild(el)\n\n if (!value) {\n console.warn(\n '[goey-toast] Styles not found. Make sure to import the CSS:\\n\\n' +\n ' import \"goey-toast/styles.css\";\\n'\n )\n }\n }, [])\n\n return (\n <Toaster\n position={position}\n duration={duration}\n gap={gap}\n offset={offset}\n theme={theme}\n toastOptions={{ unstyled: true, ...toastOptions }}\n expand={expand}\n closeButton={closeButton}\n richColors={richColors}\n visibleToasts={visibleToasts}\n dir={dir}\n />\n )\n}\n","import type { FC } from 'react'\n\ninterface DefaultIconProps {\n size?: number\n className?: string\n}\n\nexport const DefaultIcon: FC<DefaultIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface SuccessIconProps {\n size?: number\n className?: string\n}\n\nexport const SuccessIcon: FC<SuccessIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface ErrorIconProps {\n size?: number\n className?: string\n}\n\nexport const ErrorIcon: FC<ErrorIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M15 9l-6 6\" />\n <path d=\"M9 9l6 6\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface WarningIconProps {\n size?: number\n className?: string\n}\n\nexport const WarningIcon: FC<WarningIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface InfoIconProps {\n size?: number\n className?: string\n}\n\nexport const InfoIcon: FC<InfoIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface SpinnerIconProps {\n size?: number\n className?: string\n}\n\nexport const SpinnerIcon: FC<SpinnerIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n)\n","import { useState, useEffect } from 'react'\n\nconst QUERY = '(prefers-reduced-motion: reduce)'\n\nfunction getInitialState(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false\n }\n return window.matchMedia(QUERY).matches\n}\n\nexport function usePrefersReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(getInitialState)\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return\n }\n const mql = window.matchMedia(QUERY)\n const handler = (event: MediaQueryListEvent) => {\n setPrefersReducedMotion(event.matches)\n }\n mql.addEventListener('change', handler)\n return () => mql.removeEventListener('change', handler)\n }, [])\n\n return prefersReducedMotion\n}\n","/** Static class name map — avoids CSS module bundling issues with tsup */\nexport const styles = {\n spinnerSpin: 'goey-spinnerSpin',\n wrapper: 'goey-wrapper',\n blobSvg: 'goey-blobSvg',\n content: 'goey-content',\n contentCompact: 'goey-contentCompact',\n contentExpanded: 'goey-contentExpanded',\n header: 'goey-header',\n iconWrapper: 'goey-iconWrapper',\n title: 'goey-title',\n titleDefault: 'goey-titleDefault',\n titleSuccess: 'goey-titleSuccess',\n titleError: 'goey-titleError',\n titleWarning: 'goey-titleWarning',\n titleInfo: 'goey-titleInfo',\n titleLoading: 'goey-titleLoading',\n description: 'goey-description',\n actionWrapper: 'goey-actionWrapper',\n actionButton: 'goey-actionButton',\n actionDefault: 'goey-actionDefault',\n actionSuccess: 'goey-actionSuccess',\n actionError: 'goey-actionError',\n actionWarning: 'goey-actionWarning',\n actionInfo: 'goey-actionInfo',\n} as const\n","import { useRef, useState, useEffect, useLayoutEffect, useCallback, type FC, type ReactNode } from 'react'\nimport { motion, AnimatePresence, animate } from 'framer-motion'\nimport { toast as sonnerToast } from 'sonner'\nimport type { GoeyToastAction, GoeyToastClassNames, GoeyToastPhase, GoeyToastTimings, GoeyToastType } from '../types'\nimport { getGoeyPosition, getGoeySpring, getGoeyBounce } from '../context'\nimport { DefaultIcon, SuccessIcon, ErrorIcon, WarningIcon, InfoIcon, SpinnerIcon } from '../icons'\nimport { usePrefersReducedMotion } from '../usePrefersReducedMotion'\nimport { styles } from './goey-styles'\n\nexport interface GoeyToastProps {\n title: string\n description?: ReactNode\n type: GoeyToastType\n action?: GoeyToastAction\n icon?: ReactNode\n phase: GoeyToastPhase\n classNames?: GoeyToastClassNames\n fillColor?: string\n borderColor?: string\n borderWidth?: number\n timing?: GoeyToastTimings\n spring?: boolean\n bounce?: number\n toastId?: string | number\n}\n\nconst phaseIconMap: Record<Exclude<GoeyToastPhase, 'loading'>, FC<{ size?: number; className?: string }>> = {\n default: DefaultIcon,\n success: SuccessIcon,\n error: ErrorIcon,\n warning: WarningIcon,\n info: InfoIcon,\n}\n\nconst titleColorMap: Record<GoeyToastPhase, string> = {\n loading: styles.titleLoading,\n default: styles.titleDefault,\n success: styles.titleSuccess,\n error: styles.titleError,\n warning: styles.titleWarning,\n info: styles.titleInfo,\n}\n\nconst actionColorMap: Record<GoeyToastPhase, string> = {\n loading: styles.actionInfo,\n default: styles.actionDefault,\n success: styles.actionSuccess,\n error: styles.actionError,\n warning: styles.actionWarning,\n info: styles.actionInfo,\n}\n\nconst PH = 34 // pill height constant\nconst DEFAULT_DISPLAY_DURATION = 4000\n\n// Squish spring config — scales mass with morph duration so feel stays consistent\n// bounce 0.0 = heavily damped (subtle), 0.8 = very bouncy (dramatic)\nconst DEFAULT_EXPAND_DUR = 0.6\nconst DEFAULT_COLLAPSE_DUR = 0.9\nfunction squishSpring(durationSec: number, defaultDur: number, bounce = 0.4) {\n const scale = durationSec / defaultDur\n // Map bounce (0-0.8) to stiffness (200-550) and damping (24-8)\n const stiffness = 200 + bounce * 437.5\n const damping = 24 - bounce * 20\n const mass = 0.7 * scale\n return { type: 'spring' as const, stiffness, damping, mass }\n}\n\n/**\n * Singleton MutationObserver registry — one observer per <ol> element shared\n * across all GoeyToast instances mounted under that list. Each toast registers\n * its own callback; the shared observer batches mutations via rAF and invokes\n * every registered callback once per frame.\n */\nconst observerRegistry = new Map<Element, {\n observer: MutationObserver\n callbacks: Set<() => void>\n}>()\n\nfunction registerSonnerObserver(ol: Element, callback: () => void) {\n let entry = observerRegistry.get(ol)\n if (!entry) {\n const callbacks = new Set<() => void>()\n let applying = false\n const observer = new MutationObserver(() => {\n if (applying) return\n applying = true\n requestAnimationFrame(() => {\n callbacks.forEach(cb => cb())\n requestAnimationFrame(() => { applying = false })\n })\n })\n observer.observe(ol, {\n attributes: true,\n attributeFilter: ['style'],\n subtree: true,\n childList: true,\n })\n entry = { observer, callbacks }\n observerRegistry.set(ol, entry)\n }\n entry.callbacks.add(callback)\n return () => {\n entry!.callbacks.delete(callback)\n if (entry!.callbacks.size === 0) {\n entry!.observer.disconnect()\n observerRegistry.delete(ol)\n }\n }\n}\n\n/**\n * Recalculates Sonner's --initial-height and --offset CSS variables on all\n * sibling toast <li> elements so expanded toasts are spaced correctly.\n * Sonner measures height once on mount (getting the compact pill height) and\n * never re-measures for toast.custom() content. This function corrects that.\n */\nfunction syncSonnerHeights(wrapperEl: HTMLElement | null) {\n if (!wrapperEl) return\n const li = wrapperEl.closest('[data-sonner-toast]') as HTMLElement | null\n if (!li?.parentElement) return\n\n const ol = li.parentElement\n const toasts = Array.from(\n ol.querySelectorAll(':scope > [data-sonner-toast]')\n ) as HTMLElement[]\n\n // Only update --initial-height so Sonner knows each toast's actual size.\n // Do NOT overwrite --offset — Sonner handles stacking direction (up for\n // bottom positions, down for top) and collapsed peek offsets internally.\n for (const t of toasts) {\n const content = t.firstElementChild as HTMLElement | null\n const height = content ? content.getBoundingClientRect().height : 0\n if (height > 0) {\n t.style.setProperty('--initial-height', `${height}px`)\n }\n }\n}\n\n/**\n * Parametric morph path: pill lobe stays constant, body grows from underneath.\n * t=0 → pure pill, t=1 → full organic blob.\n */\nfunction morphPath(pw: number, bw: number, th: number, t: number): string {\n const pr = PH / 2\n const pillW = Math.min(pw, bw)\n\n const bodyH = PH + (th - PH) * t\n\n // Pure pill when t is zero or body too small for proper rounded corners\n if (t <= 0 || bodyH - PH < 8) {\n return [\n `M 0,${pr}`,\n `A ${pr},${pr} 0 0 1 ${pr},0`,\n `H ${pillW - pr}`,\n `A ${pr},${pr} 0 0 1 ${pillW},${pr}`,\n `A ${pr},${pr} 0 0 1 ${pillW - pr},${PH}`,\n `H ${pr}`,\n `A ${pr},${pr} 0 0 1 0,${pr}`,\n `Z`,\n ].join(' ')\n }\n\n const curve = 14 * t\n const cr = Math.min(16, (bodyH - PH) * 0.45)\n const bodyW = pillW + (bw - pillW) * t\n const bodyTop = PH - curve\n const qEndX = Math.min(pillW + curve, bodyW - cr)\n\n return [\n `M 0,${pr}`,\n `A ${pr},${pr} 0 0 1 ${pr},0`,\n `H ${pillW - pr}`,\n `A ${pr},${pr} 0 0 1 ${pillW},${pr}`,\n `L ${pillW},${bodyTop}`,\n `Q ${pillW},${bodyTop + curve} ${qEndX},${bodyTop + curve}`,\n `H ${bodyW - cr}`,\n `A ${cr},${cr} 0 0 1 ${bodyW},${bodyTop + curve + cr}`,\n `L ${bodyW},${bodyH - cr}`,\n `A ${cr},${cr} 0 0 1 ${bodyW - cr},${bodyH}`,\n `H ${cr}`,\n `A ${cr},${cr} 0 0 1 0,${bodyH - cr}`,\n `Z`,\n ].join(' ')\n}\n\n/**\n * Centered morph path: pill centered on top, body grows symmetrically below.\n * t=0 → pure pill (centered), t=1 → full blob with pill centered on top.\n */\nfunction morphPathCenter(pw: number, bw: number, th: number, t: number): string {\n const pr = PH / 2\n const pillW = Math.min(pw, bw)\n\n // Pill is ALWAYS centered at the final body width position\n const pillOffset = (bw - pillW) / 2\n\n // Pure pill when t is zero or body too small\n if (t <= 0 || PH + (th - PH) * t - PH < 8) {\n return [\n `M ${pillOffset},${pr}`,\n `A ${pr},${pr} 0 0 1 ${pillOffset + pr},0`,\n `H ${pillOffset + pillW - pr}`,\n `A ${pr},${pr} 0 0 1 ${pillOffset + pillW},${pr}`,\n `A ${pr},${pr} 0 0 1 ${pillOffset + pillW - pr},${PH}`,\n `H ${pillOffset + pr}`,\n `A ${pr},${pr} 0 0 1 ${pillOffset},${pr}`,\n `Z`,\n ].join(' ')\n }\n\n const bodyH = PH + (th - PH) * t\n const curve = 14 * t\n const cr = Math.min(16, (bodyH - PH) * 0.45)\n const bodyTop = PH - curve\n\n // Body grows symmetrically outward from pill center\n const bodyCenter = bw / 2\n const halfBodyW = (pillW / 2) + ((bw - pillW) / 2) * t // grows from pillW/2 to bw/2\n const bodyLeft = bodyCenter - halfBodyW\n const bodyRight = bodyCenter + halfBodyW\n\n // Q curve endpoints: body edges meet pill edges with organic curves\n const qLeftX = Math.max(bodyLeft + cr, pillOffset - curve)\n const qRightX = Math.min(bodyRight - cr, pillOffset + pillW + curve)\n\n return [\n // Start at left side of pill\n `M ${pillOffset},${pr}`,\n // Pill top-left arc\n `A ${pr},${pr} 0 0 1 ${pillOffset + pr},0`,\n // Top edge of pill\n `H ${pillOffset + pillW - pr}`,\n // Pill top-right arc\n `A ${pr},${pr} 0 0 1 ${pillOffset + pillW},${pr}`,\n // Right side down to body junction\n `L ${pillOffset + pillW},${bodyTop}`,\n // Right organic curve from pill to body\n `Q ${pillOffset + pillW},${bodyTop + curve} ${qRightX},${bodyTop + curve}`,\n // Right side of body\n `H ${bodyRight - cr}`,\n // Body top-right corner\n `A ${cr},${cr} 0 0 1 ${bodyRight},${bodyTop + curve + cr}`,\n // Right edge down\n `L ${bodyRight},${bodyH - cr}`,\n // Body bottom-right corner\n `A ${cr},${cr} 0 0 1 ${bodyRight - cr},${bodyH}`,\n // Bottom edge\n `H ${bodyLeft + cr}`,\n // Body bottom-left corner\n `A ${cr},${cr} 0 0 1 ${bodyLeft},${bodyH - cr}`,\n // Left edge up\n `L ${bodyLeft},${bodyTop + curve + cr}`,\n // Body top-left corner\n `A ${cr},${cr} 0 0 1 ${bodyLeft + cr},${bodyTop + curve}`,\n // Left side of body\n `H ${qLeftX}`,\n // Left organic curve from body to pill\n `Q ${pillOffset},${bodyTop + curve} ${pillOffset},${bodyTop}`,\n // Close back to start\n `Z`,\n ].join(' ')\n}\n\n// Smooth easing curve for non-spring animations\nconst SMOOTH_EASE = [0.4, 0, 0.2, 1] as const\n\nexport const GoeyToast: FC<GoeyToastProps> = ({\n title,\n description,\n action,\n icon,\n phase,\n classNames,\n fillColor = '#ffffff',\n borderColor,\n borderWidth,\n timing,\n spring: springProp,\n bounce: bounceProp,\n toastId,\n}) => {\n const position = getGoeyPosition()\n const isRight = position?.includes('right') ?? false\n const isCenter = position?.includes('center') ?? false\n const prefersReducedMotion = usePrefersReducedMotion()\n // Per-toast spring overrides global, default to true\n const useSpring = springProp ?? getGoeySpring()\n const bounceVal = bounceProp ?? getGoeyBounce() ?? 0.4\n\n // Action success override state\n const [actionSuccess, setActionSuccess] = useState<string | null>(null)\n const [dismissing, setDismissing] = useState(false)\n const [hovered, setHovered] = useState(false)\n const hoveredRef = useRef(false)\n const collapsingRef = useRef(false)\n const preDismissRef = useRef(false)\n const collapseEndTime = useRef(0)\n const expandedDimsRef = useRef({ pw: 0, bw: 0, th: 0 })\n const dismissTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Effective values (overridden when action success is active)\n const effectiveTitle = actionSuccess ?? title\n const effectivePhase: GoeyToastPhase = actionSuccess ? 'success' : phase\n const effectiveDescription = actionSuccess ? undefined : description\n const effectiveAction = actionSuccess ? undefined : action\n\n const isLoading = effectivePhase === 'loading'\n const hasDescription = Boolean(effectiveDescription)\n const hasAction = Boolean(effectiveAction)\n const isExpanded = (hasDescription || hasAction) && !dismissing\n\n const [showBody, setShowBody] = useState(false)\n\n // DOM refs\n const wrapperRef = useRef<HTMLDivElement>(null)\n const pathRef = useRef<SVGPathElement>(null)\n const headerRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n\n // Animation controllers\n const morphCtrl = useRef<ReturnType<typeof animate> | null>(null)\n const pillResizeCtrl = useRef<ReturnType<typeof animate> | null>(null)\n const headerSquishCtrl = useRef<ReturnType<typeof animate> | null>(null)\n\n // Animated state (not React state — avoids re-renders during animation)\n const morphTRef = useRef(0)\n const aDims = useRef({ pw: 0, bw: 0, th: 0 }) // animated dims\n const dimsRef = useRef({ pw: 0, bw: 0, th: 0 }) // latest measured dims\n\n // React state for dims (triggers effects)\n const [dims, setDims] = useState({ pw: 0, bw: 0, th: 0 })\n useEffect(() => { dimsRef.current = dims }, [dims])\n\n // Push current animated state to SVG DOM + constrain wrapper/content\n // NOTE: We intentionally do NOT set style.height on the wrapper.\n // The content's maxHeight constrains the rendered height, and letting\n // the wrapper derive its height naturally allows Sonner to accurately\n // measure the toast height for stacking/positioning.\n const flush = useCallback(() => {\n const { pw: p, bw: b, th: h } = aDims.current\n if (p <= 0 || b <= 0 || h <= 0) return\n // Clamp t to [0,1] — spring overshoot past 1 or below 0 must not\n // cause flush to toggle between constraint branches (jitter).\n const t = Math.max(0, Math.min(1, morphTRef.current))\n // Read position fresh each call so flush never uses a stale value\n const pos = getGoeyPosition()\n const rightSide = pos?.includes('right') ?? false\n const centerPos = pos?.includes('center') ?? false\n // Center positions: always use morphPathCenter so pill stays at fixed center offset\n // (switching to morphPath at t=0 causes a frame where content jumps left)\n if (centerPos) {\n const centerBw = Math.max(dimsRef.current.bw, expandedDimsRef.current.bw, p)\n pathRef.current?.setAttribute('d', morphPathCenter(p, centerBw, h, t))\n } else {\n pathRef.current?.setAttribute('d', morphPath(p, b, h, t))\n }\n\n if (t >= 1) {\n // Fully expanded: clear all constraints\n if (wrapperRef.current) {\n wrapperRef.current.style.width = ''\n }\n if (contentRef.current) {\n contentRef.current.style.width = ''\n contentRef.current.style.overflow = ''\n contentRef.current.style.maxHeight = ''\n contentRef.current.style.clipPath = ''\n }\n } else if (t > 0) {\n // Morphing: lock content at final target width + clip-path (prevents text reflow)\n const targetBw = dimsRef.current.bw\n const targetTh = dimsRef.current.th\n const pillW = Math.min(p, b)\n const currentW = pillW + (b - pillW) * t\n const currentH = PH + (targetTh - PH) * t\n // Center: use stable full width (dimsRef may shrink during collapse)\n const centerFullW = centerPos ? Math.max(dimsRef.current.bw, expandedDimsRef.current.bw, p) : 0\n if (wrapperRef.current) {\n wrapperRef.current.style.width = (centerPos ? centerFullW : currentW) + 'px'\n }\n if (contentRef.current) {\n // Center: content width = wrapper width so textAlign:center keeps header aligned with SVG pill\n contentRef.current.style.width = (centerPos ? centerFullW : targetBw) + 'px'\n contentRef.current.style.overflow = 'hidden'\n contentRef.current.style.maxHeight = currentH + 'px'\n if (centerPos) {\n const clip = (centerFullW - currentW) / 2\n contentRef.current.style.clipPath = `inset(0 ${clip}px 0 ${clip}px)`\n } else {\n const clip = targetBw - currentW\n contentRef.current.style.clipPath = rightSide\n ? `inset(0 0 0 ${clip}px)`\n : `inset(0 ${clip}px 0 0)`\n }\n }\n } else {\n // Compact: constrain to pill dimensions\n const pillW = Math.min(p, b)\n if (wrapperRef.current) {\n // Center: keep body width so pill SVG offset stays consistent (no frame jump)\n const centerBw = centerPos ? Math.max(dimsRef.current.bw, expandedDimsRef.current.bw, p) : pillW\n wrapperRef.current.style.width = centerBw + 'px'\n }\n if (contentRef.current) {\n if (centerPos) {\n // Keep content locked at body width with symmetric clip to match SVG pill position\n const centerBwVal = Math.max(dimsRef.current.bw, expandedDimsRef.current.bw, p)\n contentRef.current.style.width = centerBwVal + 'px'\n const clip = (centerBwVal - pillW) / 2\n contentRef.current.style.clipPath = `inset(0 ${clip}px 0 ${clip}px)`\n } else {\n contentRef.current.style.width = ''\n contentRef.current.style.clipPath = ''\n }\n contentRef.current.style.overflow = 'hidden'\n contentRef.current.style.maxHeight = PH + 'px'\n }\n }\n }, [])\n\n // Measure content dimensions (clear all constraints first for accurate reading)\n const measure = useCallback(() => {\n if (!headerRef.current || !contentRef.current) return\n const wr = wrapperRef.current\n const savedW = wr?.style.width ?? ''\n const savedOv = contentRef.current.style.overflow\n const savedMH = contentRef.current.style.maxHeight\n const savedCW = contentRef.current.style.width\n if (wr) { wr.style.width = '' }\n contentRef.current.style.overflow = ''\n contentRef.current.style.maxHeight = ''\n contentRef.current.style.width = ''\n\n const cs = getComputedStyle(contentRef.current)\n const paddingX = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight)\n const pw = headerRef.current.offsetWidth + paddingX\n const bw = contentRef.current.offsetWidth\n const th = contentRef.current.offsetHeight\n\n if (wr) { wr.style.width = savedW }\n contentRef.current.style.overflow = savedOv\n contentRef.current.style.maxHeight = savedMH\n contentRef.current.style.width = savedCW\n\n dimsRef.current = { pw, bw, th }\n setDims({ pw, bw, th })\n }, [])\n\n // Measure on prop changes (useLayoutEffect prevents flash of unconstrained content)\n useLayoutEffect(() => {\n measure()\n const t = setTimeout(measure, 100)\n return () => clearTimeout(t)\n }, [effectiveTitle, effectivePhase, isExpanded, showBody, effectiveDescription, effectiveAction, measure])\n\n useEffect(() => {\n if (!contentRef.current) return\n const ro = new ResizeObserver(measure)\n ro.observe(contentRef.current)\n return () => ro.disconnect()\n }, [measure])\n\n const { pw, bw, th } = dims\n const hasDims = pw > 0 && bw > 0 && th > 0\n\n // Squish animation controller (shared between landing + blob squish)\n const blobSquishCtrl = useRef<ReturnType<typeof animate> | null>(null)\n\n // Landing squish: single smooth boing — spring scales with user timing\n const expandDur = DEFAULT_EXPAND_DUR\n const collapseDur = DEFAULT_COLLAPSE_DUR\n const lastSquishTime = useRef(0)\n const triggerLandingSquish = useCallback((phase: 'expand' | 'collapse' | 'mount' = 'mount') => {\n if (!wrapperRef.current || prefersReducedMotion) return\n // Skip squish entirely when spring is disabled\n if (!useSpring) return\n const now = Date.now()\n if (now - lastSquishTime.current < 300) return\n lastSquishTime.current = now\n blobSquishCtrl.current?.stop()\n const el = wrapperRef.current\n const springConfig = phase === 'collapse'\n ? squishSpring(collapseDur, DEFAULT_COLLAPSE_DUR, bounceVal)\n : squishSpring(expandDur, DEFAULT_EXPAND_DUR, bounceVal)\n // Softer squish on collapse — blob is wider so same % looks more drastic\n // Scale squish intensity with bounce (0.05=subtle, 0.8=dramatic)\n const bScale = bounceVal / 0.4\n const compressY = (phase === 'collapse' ? 0.07 : 0.12) * bScale\n const expandX = (phase === 'collapse' ? 0.035 : 0.06) * bScale\n blobSquishCtrl.current = animate(0, 1, {\n ...springConfig,\n onUpdate: (v) => {\n const intensity = Math.sin(v * Math.PI)\n const sy = 1 - compressY * intensity\n const sx = 1 + expandX * intensity\n const mirror = el.style.transform?.includes('scaleX(-1)') ? 'scaleX(-1) ' : ''\n // Anchor squish at pill (top of blob) so body feels like it expands from pill center\n el.style.transformOrigin = 'center top'\n el.style.transform = mirror + `scaleX(${sx}) scaleY(${sy})`\n },\n onComplete: () => {\n const right = el.style.transform?.includes('scaleX(-1)')\n el.style.transform = right ? 'scaleX(-1)' : ''\n el.style.transformOrigin = ''\n },\n })\n }, [prefersReducedMotion, expandDur, collapseDur, useSpring, bounceVal])\n\n // Handle dims changes: pill resize animation (compact) or direct update (expanded)\n useLayoutEffect(() => {\n if (!hasDims || collapsingRef.current) return\n\n const prev = { ...aDims.current }\n const target = { pw, bw, th }\n\n // First render — set immediately\n if (prev.bw <= 0) {\n aDims.current = target\n flush()\n return\n }\n\n // During morph animation — just update target dims, morph callback reads them\n if (morphTRef.current > 0 && morphTRef.current < 1) {\n aDims.current = target\n flush()\n return\n }\n\n // Expanded and settled (morph done) — update immediately\n if (showBody) {\n aDims.current = target\n flush()\n return\n }\n\n // Compact mode: animate pill resize smoothly\n if (prev.bw === target.bw && prev.pw === target.pw && prev.th === target.th) return\n\n if (prefersReducedMotion) {\n aDims.current = target\n flush()\n return\n }\n\n pillResizeCtrl.current?.stop()\n // Fire vertical squish alongside the horizontal resize\n // Skip if recently collapsed or about to expand (promise resolve/reject)\n if (Date.now() - collapseEndTime.current > 500 && !isExpanded) {\n triggerLandingSquish('expand')\n }\n const pillResizeTransition = useSpring\n ? { type: 'spring' as const, duration: 0.5, bounce: bounceVal * 0.875 }\n : { duration: 0.4, ease: SMOOTH_EASE }\n pillResizeCtrl.current = animate(0, 1, {\n ...pillResizeTransition,\n onUpdate: (t) => {\n aDims.current = {\n pw: prev.pw + (target.pw - prev.pw) * t,\n bw: prev.bw + (target.bw - prev.bw) * t,\n th: prev.th + (target.th - prev.th) * t,\n }\n flush()\n },\n })\n }, [pw, bw, th, hasDims, showBody, flush, prefersReducedMotion, triggerLandingSquish, useSpring])\n\n // Squish on entry: only for simple toasts (no body text) — expanded toasts get squish from showBody\n const squishDelayMs = 45\n const mountSquished = useRef(false)\n useEffect(() => {\n if (hasDims && !mountSquished.current && !isExpanded) {\n mountSquished.current = true\n const t = setTimeout(triggerLandingSquish, squishDelayMs)\n return () => clearTimeout(t)\n }\n }, [hasDims, squishDelayMs, triggerLandingSquish])\n\n // Squish on expand (showBody false→true) — collapse squish is fired directly in morph code\n // Skip squish on hover re-expand (hovered + was dismissing) to avoid jarring bounce\n const prevShowBody = useRef(false)\n useLayoutEffect(() => {\n if (!prevShowBody.current && showBody && !hoveredRef.current) {\n // Small delay after morph starts for more satisfying \"settle then bounce\" feel\n const t = setTimeout(() => triggerLandingSquish('expand'), 80)\n return () => clearTimeout(t)\n }\n prevShowBody.current = showBody\n }, [showBody, triggerLandingSquish])\n\n // Error shake: quick horizontal shake when phase transitions to error (not during dismiss)\n const shakeCtrl = useRef<ReturnType<typeof animate> | null>(null)\n const prevPhase = useRef(phase)\n useEffect(() => {\n if (phase === 'error' && prevPhase.current !== 'error' && !dismissing && wrapperRef.current && !prefersReducedMotion) {\n shakeCtrl.current?.stop()\n const el = wrapperRef.current\n const mirror = el.style.transform?.includes('scaleX(-1)') ? 'scaleX(-1) ' : ''\n shakeCtrl.current = animate(0, 1, {\n duration: 0.4,\n ease: 'easeOut',\n onUpdate: (v) => {\n const decay = 1 - v\n const shake = Math.sin(v * Math.PI * 6) * decay * 3\n el.style.transform = mirror + `translateX(${shake}px)`\n },\n onComplete: () => {\n el.style.transform = mirror.trim() || ''\n },\n })\n }\n prevPhase.current = phase\n return () => { shakeCtrl.current?.stop() }\n }, [phase, dismissing, prefersReducedMotion])\n\n // Phase 1: expand (delay showBody) or collapse (reverse morph)\n useEffect(() => {\n if (isExpanded) {\n const delay = prefersReducedMotion ? 0 : (330)\n const t1 = setTimeout(() => setShowBody(true), delay)\n return () => clearTimeout(t1)\n }\n\n morphCtrl.current?.stop()\n pillResizeCtrl.current?.stop()\n\n // Reverse morph if currently expanded\n if (morphTRef.current > 0) {\n // Compute target compact pill dims from current header content\n const csPad = contentRef.current ? getComputedStyle(contentRef.current) : null\n const padX = csPad ? parseFloat(csPad.paddingLeft) + parseFloat(csPad.paddingRight) : 20\n const targetPw = headerRef.current ? headerRef.current.offsetWidth + padX : aDims.current.pw\n const targetDims = { pw: targetPw, bw: targetPw, th: PH }\n\n if (prefersReducedMotion) {\n morphTRef.current = 0\n collapsingRef.current = false\n preDismissRef.current = false\n setShowBody(false)\n aDims.current = { ...targetDims }\n flush()\n return\n }\n\n const savedDims = expandedDimsRef.current.bw > 0\n ? { ...expandedDimsRef.current }\n : { ...aDims.current }\n\n const isPreDismiss = preDismissRef.current\n const collapseDur = 0.9\n // Use easing when spring is disabled or during pre-dismiss\n const collapseTransition = (isPreDismiss || !useSpring)\n ? { duration: collapseDur, ease: SMOOTH_EASE }\n : { type: 'spring' as const, duration: collapseDur, bounce: bounceVal * 0.875 }\n\n // Fire squish immediately as collapse begins — don't wait for morph to finish\n triggerLandingSquish('collapse')\n\n morphCtrl.current = animate(morphTRef.current, 0, {\n ...collapseTransition,\n onUpdate: (t) => {\n morphTRef.current = t\n aDims.current = {\n pw: targetDims.pw + (savedDims.pw - targetDims.pw) * t,\n bw: targetDims.bw + (savedDims.bw - targetDims.bw) * t,\n th: targetDims.th + (savedDims.th - targetDims.th) * t,\n }\n flush()\n },\n onComplete: () => {\n morphTRef.current = 0\n collapsingRef.current = false\n preDismissRef.current = false\n collapseEndTime.current = Date.now()\n aDims.current = { ...targetDims }\n flush()\n setShowBody(false)\n },\n })\n return () => { morphCtrl.current?.stop() }\n }\n\n setShowBody(false)\n morphTRef.current = 0\n flush()\n }, [isExpanded, flush, prefersReducedMotion, useSpring, triggerLandingSquish])\n\n // Pre-dismiss collapse: shrink back to pill before Sonner removes the toast\n // Hover pauses the timer. On unhover, timer restarts with remaining time.\n const remainingRef = useRef<number | null>(null)\n const timerStartRef = useRef(0)\n useEffect(() => {\n if (!showBody || actionSuccess || dismissing) return\n\n const expandDelayMs = prefersReducedMotion ? 0 : (330)\n const collapseMs = prefersReducedMotion ? 10 : ((0.9) * 1000)\n const displayMs = timing?.displayDuration ?? DEFAULT_DISPLAY_DURATION\n const fullDelay = displayMs - expandDelayMs - collapseMs\n if (fullDelay <= 0) return\n\n // Don't start timer while hovered — pause and resume on unhover\n if (hoveredRef.current) return\n\n const delay = remainingRef.current ?? fullDelay\n timerStartRef.current = Date.now()\n\n const timer = setTimeout(() => {\n remainingRef.current = null\n expandedDimsRef.current = { ...aDims.current }\n collapsingRef.current = true\n preDismissRef.current = true\n setDismissing(true)\n }, delay)\n dismissTimerRef.current = timer\n\n return () => {\n clearTimeout(timer)\n // Save remaining time when cleaning up (e.g. hover started)\n const elapsed = Date.now() - timerStartRef.current\n const remaining = delay - elapsed\n if (remaining > 0 && hoveredRef.current) {\n remainingRef.current = remaining\n }\n }\n }, [showBody, actionSuccess, dismissing, prefersReducedMotion, hovered])\n\n // Re-expand on hover: if collapsed/collapsing and user hovers, reverse it\n const canExpand = hasDescription || hasAction\n const reExpandingRef = useRef(false)\n useEffect(() => {\n if (!hovered || !canExpand || !dismissing) return\n // Stop collapse morph, reset state\n morphCtrl.current?.stop()\n collapsingRef.current = false\n preDismissRef.current = false\n remainingRef.current = null\n reExpandingRef.current = true\n setDismissing(false)\n setShowBody(true)\n\n // Directly drive the expand morph from current position\n // Can't rely on Phase 2 because showBody might already be true (mid-collapse hover)\n const currentT = morphTRef.current\n const startDims = { ...aDims.current }\n const morphExpandTransition = useSpring\n ? { type: 'spring' as const, duration: 0.9, bounce: bounceVal }\n : { duration: 0.6, ease: SMOOTH_EASE }\n\n // Wait one frame for measure to update dimsRef with expanded content\n requestAnimationFrame(() => {\n morphCtrl.current = animate(currentT, 1, {\n ...morphExpandTransition,\n onUpdate: (t) => {\n morphTRef.current = t\n const target = dimsRef.current\n aDims.current = {\n pw: startDims.pw + (target.pw - startDims.pw) * t,\n bw: startDims.bw + (target.bw - startDims.bw) * t,\n th: startDims.th + (target.th - startDims.th) * t,\n }\n flush()\n },\n onComplete: () => {\n morphTRef.current = 1\n aDims.current = { ...dimsRef.current }\n reExpandingRef.current = false\n flush()\n syncSonnerHeights(wrapperRef.current)\n },\n })\n })\n\n return () => { morphCtrl.current?.stop() }\n }, [hovered, dismissing, canExpand])\n\n // Dismiss from Sonner after collapse completes and user is not hovering\n useEffect(() => {\n if (!toastId || !dismissing || showBody || hovered) return\n const t = setTimeout(() => {\n if (!hoveredRef.current) sonnerToast.dismiss(toastId)\n }, 800)\n return () => clearTimeout(t)\n }, [dismissing, showBody, hovered, toastId])\n\n // Dismiss after action success morph-back completes\n useEffect(() => {\n if (!toastId || !actionSuccess || showBody) return\n const t = setTimeout(() => sonnerToast.dismiss(toastId), 1200)\n return () => clearTimeout(t)\n }, [toastId, actionSuccess, showBody])\n\n // Phase 2: morph from pill → blob\n useEffect(() => {\n // Skip if re-expand is driving the morph\n if (reExpandingRef.current) return\n if (!showBody) {\n morphTRef.current = 0\n morphCtrl.current?.stop()\n flush()\n return\n }\n\n if (prefersReducedMotion) {\n pillResizeCtrl.current?.stop()\n morphCtrl.current?.stop()\n morphTRef.current = 1\n aDims.current = { ...dimsRef.current }\n flush()\n syncSonnerHeights(wrapperRef.current)\n return\n }\n\n const raf = requestAnimationFrame(() => {\n pillResizeCtrl.current?.stop()\n morphCtrl.current?.stop()\n // Capture current animated dims so we interpolate smoothly from\n // wherever the pill resize left off instead of snapping to target.\n const startDims = { ...aDims.current }\n const morphExpandTransition = useSpring\n ? { type: 'spring' as const, duration: 0.9, bounce: bounceVal }\n : { duration: 0.6, ease: SMOOTH_EASE }\n morphCtrl.current = animate(0, 1, {\n ...morphExpandTransition,\n onUpdate: (t) => {\n morphTRef.current = t\n const target = dimsRef.current\n aDims.current = {\n pw: startDims.pw + (target.pw - startDims.pw) * t,\n bw: startDims.bw + (target.bw - startDims.bw) * t,\n th: startDims.th + (target.th - startDims.th) * t,\n }\n flush()\n },\n onComplete: () => {\n morphTRef.current = 1\n aDims.current = { ...dimsRef.current }\n flush()\n syncSonnerHeights(wrapperRef.current)\n },\n })\n })\n\n return () => {\n cancelAnimationFrame(raf)\n morphCtrl.current?.stop()\n }\n }, [showBody, flush, prefersReducedMotion, useSpring])\n\n // Header elastic squish: spring down when expanding, spring back once on collapse/dismiss\n const headerSquished = useRef(false)\n useEffect(() => {\n if (!headerRef.current || prefersReducedMotion) return\n headerSquishCtrl.current?.stop()\n const el = headerRef.current\n\n if (showBody && !dismissing && !actionSuccess) {\n // Skip header squish when spring is disabled\n if (!useSpring) return\n // Squish down with elastic spring — scaled to expand timing\n headerSquished.current = true\n headerSquishCtrl.current = animate(0, 1, {\n ...squishSpring(expandDur, DEFAULT_EXPAND_DUR, bounceVal),\n onUpdate: (v) => {\n const scale = 1 - 0.05 * v\n const pushY = v * 1\n el.style.transform = `scale(${scale}) translateY(${pushY}px)`\n },\n })\n } else if (headerSquished.current) {\n // Spring back to normal — match morph transition type\n headerSquished.current = false\n // Use easing when spring is disabled or during pre-dismiss\n const isSpringCollapse = !preDismissRef.current && useSpring\n const transition = isSpringCollapse\n ? squishSpring(collapseDur, DEFAULT_COLLAPSE_DUR, bounceVal)\n : { duration: collapseDur * 0.5, ease: SMOOTH_EASE }\n headerSquishCtrl.current = animate(1, 0, {\n ...transition,\n onUpdate: (v) => {\n const scale = 1 - 0.05 * v\n const pushY = v * 1\n el.style.transform = `scale(${scale}) translateY(${pushY}px)`\n },\n onComplete: () => {\n el.style.transform = ''\n },\n })\n }\n\n return () => { headerSquishCtrl.current?.stop() }\n }, [showBody, dismissing, actionSuccess, prefersReducedMotion, expandDur, collapseDur, useSpring])\n\n // Keep Sonner's toast stacking in sync when it re-renders (e.g. hover expand/collapse).\n // Sonner overwrites --offset/--initial-height with stale values from its React state,\n // so we observe style mutations on the toast list and re-apply correct heights.\n // Uses a shared singleton observer per <ol> to avoid N observers for N toasts.\n useEffect(() => {\n const wrapper = wrapperRef.current\n if (!wrapper) return\n const ol = wrapper.closest('[data-sonner-toast]')?.parentElement\n if (!ol) return\n\n return registerSonnerObserver(ol, () => {\n syncSonnerHeights(wrapper)\n })\n }, [])\n\n // Action button handler\n const handleActionClick = useCallback(() => {\n if (!effectiveAction) return\n if (effectiveAction.successLabel) {\n // Save expanded dims synchronously before onClick (which may throw)\n expandedDimsRef.current = { ...aDims.current }\n collapsingRef.current = true\n setActionSuccess(effectiveAction.successLabel)\n }\n try { effectiveAction.onClick() } catch { /* onClick errors shouldn't block morph-back */ }\n }, [effectiveAction])\n\n const renderIcon = () => {\n if (!actionSuccess && icon) return icon\n if (isLoading) return <SpinnerIcon size={18} className={styles.spinnerSpin} />\n const IconComponent = phaseIconMap[effectivePhase]\n return <IconComponent size={18} />\n }\n\n const iconTransition = prefersReducedMotion ? { duration: 0.01 } : { duration: 0.2 }\n const iconEl = (\n <div className={`${styles.iconWrapper}${classNames?.icon ? ` ${classNames.icon}` : ''}`}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={isLoading ? 'spinner' : effectivePhase}\n initial={prefersReducedMotion ? false : { opacity: 0, scale: 0.5 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.5 }}\n transition={iconTransition}\n >\n {renderIcon()}\n </motion.div>\n </AnimatePresence>\n </div>\n )\n const titleEl = (\n <span className={`${styles.title}${classNames?.title ? ` ${classNames.title}` : ''}`}>{effectiveTitle}</span>\n )\n\n const iconAndTitle = (\n <>{iconEl}{titleEl}</>\n )\n\n return (\n <div ref={wrapperRef} className={`${styles.wrapper}${classNames?.wrapper ? ` ${classNames.wrapper}` : ''}`} style={isCenter ? { margin: '0 auto' } : isRight ? { marginLeft: 'auto', transform: 'scaleX(-1)' } : undefined} role={effectivePhase === 'error' ? 'alert' : 'status'} aria-live={effectivePhase === 'error' ? 'assertive' : 'polite'} aria-atomic=\"true\" onMouseEnter={() => { hoveredRef.current = true; setHovered(true) }} onMouseLeave={() => { hoveredRef.current = false; setHovered(false) }} data-center={isCenter || undefined}>\n {/* SVG background — overflow visible, path controls shape */}\n <svg\n className={styles.blobSvg}\n aria-hidden\n >\n <path\n ref={pathRef}\n fill={fillColor}\n stroke={borderColor || 'none'}\n strokeWidth={borderColor ? (borderWidth ?? 1.5) : 0}\n />\n </svg>\n\n {/* Content — un-flip so text reads normally */}\n <div\n ref={contentRef}\n className={`${styles.content} ${showBody ? styles.contentExpanded : styles.contentCompact}${classNames?.content ? ` ${classNames.content}` : ''}`}\n style={isCenter ? { textAlign: 'center' } : isRight ? { transform: 'scaleX(-1)', textAlign: 'right' } : { textAlign: 'left' }}\n >\n <div ref={headerRef} className={`${styles.header} ${titleColorMap[effectivePhase]}${classNames?.header ? ` ${classNames.header}` : ''}`}>\n {iconAndTitle}\n </div>\n\n <AnimatePresence>\n {showBody && hasDescription && !dismissing && (\n <motion.div\n key=\"description\"\n className={`${styles.description}${classNames?.description ? ` ${classNames.description}` : ''}`}\n style={{ textAlign: 'left' }}\n initial={prefersReducedMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0.01 } : { duration: 0.35, ease: [0.4, 0, 0.2, 1] }}\n >\n {effectiveDescription}\n </motion.div>\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {showBody && hasAction && effectiveAction && !dismissing && (\n <motion.div\n key=\"action\"\n className={`${styles.actionWrapper}${classNames?.actionWrapper ? ` ${classNames.actionWrapper}` : ''}`}\n initial={prefersReducedMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0.01 } : { duration: 0.35, ease: [0.4, 0, 0.2, 1], delay: 0.1 }}\n >\n <button\n className={`${styles.actionButton} ${actionColorMap[effectivePhase]}${classNames?.actionButton ? ` ${classNames.actionButton}` : ''}`}\n onClick={handleActionClick}\n type=\"button\"\n aria-label={effectiveAction.label}\n >\n {effectiveAction.label}\n </button>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n )\n}\n","import { Component, type ReactNode, type ErrorInfo } from 'react'\n\ninterface Props {\n children: ReactNode\n}\n\ninterface State {\n hasError: boolean\n}\n\nexport class ToastErrorBoundary extends Component<Props, State> {\n state: State = { hasError: false }\n\n static getDerivedStateFromError(): State {\n return { hasError: true }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n if (process.env.NODE_ENV !== 'production') {\n console.error('[GoeyToast] Rendering error:', error, errorInfo)\n }\n }\n\n render() {\n if (this.state.hasError) {\n return null\n }\n return this.props.children\n }\n}\n","import { useState, useEffect, type ReactNode } from 'react'\nimport { toast } from 'sonner'\nimport { GoeyToast } from './components/GoeyToast'\nimport { ToastErrorBoundary } from './components/ToastErrorBoundary'\nimport type {\n GoeyToastOptions,\n GoeyPromiseData,\n GoeyToastPhase,\n GoeyToastType,\n GoeyToastAction,\n GoeyToastClassNames,\n GoeyToastTimings,\n} from './types'\n\nconst DEFAULT_EXPANDED_DURATION = 4000\n\nfunction GoeyToastWrapper({\n initialPhase,\n title,\n type,\n description,\n action,\n icon,\n classNames,\n fillColor,\n borderColor,\n borderWidth,\n timing,\n spring,\n bounce,\n toastId,\n}: {\n initialPhase: GoeyToastPhase\n title: string\n type: GoeyToastType\n description?: ReactNode\n action?: GoeyToastAction\n icon?: ReactNode\n classNames?: GoeyToastClassNames\n fillColor?: string\n borderColor?: string\n borderWidth?: number\n timing?: GoeyToastTimings\n spring?: boolean\n bounce?: number\n toastId?: string | number\n}) {\n return (\n <ToastErrorBoundary>\n <GoeyToast\n title={title}\n description={description}\n type={type}\n action={action}\n icon={icon}\n phase={initialPhase}\n classNames={classNames}\n fillColor={fillColor}\n borderColor={borderColor}\n borderWidth={borderWidth}\n timing={timing}\n spring={spring}\n bounce={bounce}\n toastId={toastId}\n />\n </ToastErrorBoundary>\n )\n}\n\nfunction PromiseToastWrapper<T>({\n promise,\n data,\n toastId,\n}: {\n promise: Promise<T>\n data: GoeyPromiseData<T>\n toastId: string | number\n}) {\n const [phase, setPhase] = useState<GoeyToastPhase>('loading')\n const [title, setTitle] = useState(data.loading)\n const [description, setDescription] = useState<ReactNode | undefined>(data.description?.loading)\n const [action, setAction] = useState<GoeyToastAction | undefined>(undefined)\n\n useEffect(() => {\n const resetDuration = (hasExpandedContent: boolean) => {\n const baseDuration = data.timing?.displayDuration ?? (hasExpandedContent ? DEFAULT_EXPANDED_DURATION : undefined)\n const collapseDurMs = 0.9 * 1000\n const duration = baseDuration != null && hasExpandedContent ? baseDuration + collapseDurMs : baseDuration\n if (duration != null) {\n toast.custom(() => (\n <PromiseToastWrapper promise={promise} data={data} toastId={toastId} />\n ), { id: toastId, duration })\n }\n }\n\n promise\n .then((result) => {\n const desc = typeof data.description?.success === 'function'\n ? data.description.success(result)\n : data.description?.success\n setTitle(\n typeof data.success === 'function'\n ? data.success(result)\n : data.success\n )\n setDescription(desc)\n setAction(data.action?.success)\n setPhase('success')\n resetDuration(Boolean(desc || data.action?.success))\n })\n .catch((err) => {\n const desc = typeof data.description?.error === 'function'\n ? data.description.error(err)\n : data.description?.error\n setTitle(\n typeof data.error === 'function' ? data.error(err) : data.error\n )\n setDescription(desc)\n setAction(data.action?.error)\n setPhase('error')\n resetDuration(Boolean(desc || data.action?.error))\n })\n }, [])\n\n return (\n <ToastErrorBoundary>\n <GoeyToast\n title={title}\n description={description}\n type={phase === 'loading' ? 'info' : (phase as GoeyToastType)}\n action={action}\n phase={phase}\n classNames={data.classNames}\n fillColor={data.fillColor}\n borderColor={data.borderColor}\n borderWidth={data.borderWidth}\n timing={data.timing}\n spring={data.spring}\n bounce={data.bounce}\n />\n </ToastErrorBoundary>\n )\n}\n\nfunction createGoeyToast(\n title: string,\n type: GoeyToastType,\n options?: GoeyToastOptions\n) {\n const hasExpandedContent = Boolean(options?.description || options?.action)\n const baseDuration = options?.timing?.displayDuration ?? options?.duration ?? (options?.description ? DEFAULT_EXPANDED_DURATION : undefined)\n // Expanded toasts: Infinity duration, component controls dismiss (hover re-expand support)\n // Simple toasts: normal duration\n const duration = hasExpandedContent ? Infinity : baseDuration\n\n const toastId = options?.id ?? Math.random().toString(36).slice(2)\n\n return toast.custom(\n () => (\n <GoeyToastWrapper\n initialPhase={type}\n title={title}\n type={type}\n description={options?.description}\n action={options?.action}\n icon={options?.icon}\n classNames={options?.classNames}\n fillColor={options?.fillColor}\n borderColor={options?.borderColor}\n borderWidth={options?.borderWidth}\n timing={options?.timing}\n spring={options?.spring}\n bounce={options?.bounce}\n toastId={hasExpandedContent ? toastId : undefined}\n />\n ),\n {\n duration,\n id: toastId,\n }\n )\n}\n\nexport const goeyToast = Object.assign(\n (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'default', options),\n {\n success: (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'success', options),\n error: (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'error', options),\n warning: (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'warning', options),\n info: (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'info', options),\n promise: <T,>(promise: Promise<T>, data: GoeyPromiseData<T>) => {\n const id = Math.random().toString(36).slice(2)\n return toast.custom(() => (\n <PromiseToastWrapper promise={promise} data={data} toastId={id} />\n ), {\n id,\n duration: (data.timing?.displayDuration != null || data.description) ? Infinity : undefined,\n })\n },\n dismiss: toast.dismiss,\n }\n)\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/presets.ts","../src/context.ts","../src/icons/DefaultIcon.tsx","../src/icons/SuccessIcon.tsx","../src/icons/ErrorIcon.tsx","../src/icons/WarningIcon.tsx","../src/icons/InfoIcon.tsx","../src/icons/SpinnerIcon.tsx","../src/usePrefersReducedMotion.ts","../src/components/goey-styles.ts","../src/components/GoeyToast.tsx","../src/components/ToastErrorBoundary.tsx","../src/goey-toast.tsx","../src/components/AriaLiveAnnouncer.tsx","../src/components/GoeyToaster.tsx"],"names":["jsxs","jsx","useState","useEffect","useLayoutEffectOrig","useRef","useCallback","pw","bw","th","phase","animate","collapseDur","sonnerToast","useMemo","AnimatePresence","motion","Fragment","Component","toast","Toaster"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface AnimationPreset {\n bounce: number\n spring: boolean\n}\n\nexport const animationPresets = {\n smooth: { bounce: 0.1, spring: true },\n bouncy: { bounce: 0.6, spring: true },\n subtle: { bounce: 0.05, spring: true },\n snappy: { bounce: 0.4, spring: true },\n} as const satisfies Record<string, AnimationPreset>\n\nexport type AnimationPresetName = keyof typeof animationPresets\n","import type { ToasterProps } from 'sonner'\n\nlet _position: ToasterProps['position'] = 'bottom-right'\nlet _dir: 'ltr' | 'rtl' = 'ltr'\nlet _spring: boolean = true\nlet _bounce: number | undefined = undefined\nlet _theme: 'light' | 'dark' = 'light'\n\nexport function setGoeyTheme(theme: 'light' | 'dark') {\n _theme = theme\n}\n\nexport function getGoeyTheme(): 'light' | 'dark' {\n return _theme\n}\n\nexport function setGoeyPosition(position: ToasterProps['position']) {\n _position = position\n}\n\nexport function getGoeyPosition() {\n return _position\n}\n\nexport function setGoeyDir(dir: 'ltr' | 'rtl') {\n _dir = dir\n}\n\nexport function getGoeyDir(): 'ltr' | 'rtl' {\n return _dir\n}\n\nexport function setGoeySpring(spring: boolean) {\n _spring = spring\n}\n\nexport function getGoeySpring() {\n return _spring\n}\n\nexport function setGoeyBounce(bounce: number | undefined) {\n _bounce = bounce\n}\n\nexport function getGoeyBounce() {\n return _bounce\n}\n\nlet _visibleToasts = 3\n\nexport function setGoeyVisibleToasts(n: number) {\n _visibleToasts = n\n}\n\nexport function getGoeyVisibleToasts() {\n return _visibleToasts\n}\n\n// ---------------------------------------------------------------------------\n// Container hover — broadcast from GoeyToaster to all mounted GoeyToast instances\n// so timers pause and re-expand triggers correctly when hovering the stack.\n// ---------------------------------------------------------------------------\nlet _swipeToDismiss = true\n\nexport function setGoeySwipeToDismiss(enabled: boolean) {\n _swipeToDismiss = enabled\n}\n\nexport function getGoeySwipeToDismiss() {\n return _swipeToDismiss\n}\n\nlet _closeOnEscape = true\n\nexport function setGoeyCloseOnEscape(enabled: boolean) {\n _closeOnEscape = enabled\n}\n\nexport function getGoeyCloseOnEscape() {\n return _closeOnEscape\n}\n\nlet _maxQueue = Infinity\n\nexport function setGoeyMaxQueue(n: number) {\n _maxQueue = n\n}\n\nexport function getGoeyMaxQueue() {\n return _maxQueue\n}\n\nlet _queueOverflow: 'drop-oldest' | 'drop-newest' = 'drop-oldest'\n\nexport function setGoeyQueueOverflow(strategy: 'drop-oldest' | 'drop-newest') {\n _queueOverflow = strategy\n}\n\nexport function getGoeyQueueOverflow() {\n return _queueOverflow\n}\n\nlet _showProgress = false\n\nexport function setGoeyShowProgress(show: boolean) {\n _showProgress = show\n}\n\nexport function getGoeyShowProgress() {\n return _showProgress\n}\n\nlet _containerHovered = false\ntype HoverCb = (hovered: boolean) => void\nconst _hoverSubs: Set<HoverCb> = new Set()\n\nexport function setContainerHovered(hovered: boolean) {\n if (_containerHovered === hovered) return\n _containerHovered = hovered\n _hoverSubs.forEach(cb => cb(hovered))\n}\n\nexport function getContainerHovered() {\n return _containerHovered\n}\n\nexport function subscribeContainerHovered(cb: HoverCb): () => void {\n _hoverSubs.add(cb)\n return () => { _hoverSubs.delete(cb) }\n}\n\n// ---------------------------------------------------------------------------\n// ARIA live region announcer — pushes text to a persistent live region so\n// screen readers detect toast notifications reliably.\n// ---------------------------------------------------------------------------\nexport type AriaLivePoliteness = 'polite' | 'assertive'\n\ninterface Announcement {\n message: string\n politeness: AriaLivePoliteness\n}\n\ntype AnnounceCb = (announcement: Announcement) => void\nconst _announceSubs: Set<AnnounceCb> = new Set()\n\nexport function announce(message: string, politeness: AriaLivePoliteness = 'polite') {\n _announceSubs.forEach(cb => cb({ message, politeness }))\n}\n\nexport function subscribeAnnouncements(cb: AnnounceCb): () => void {\n _announceSubs.add(cb)\n return () => { _announceSubs.delete(cb) }\n}\n","import type { FC } from 'react'\n\ninterface DefaultIconProps {\n size?: number\n className?: string\n}\n\nexport const DefaultIcon: FC<DefaultIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\" />\n <path d=\"M13.73 21a2 2 0 0 1-3.46 0\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface SuccessIconProps {\n size?: number\n className?: string\n}\n\nexport const SuccessIcon: FC<SuccessIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M9 12l2 2 4-4\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface ErrorIconProps {\n size?: number\n className?: string\n}\n\nexport const ErrorIcon: FC<ErrorIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M15 9l-6 6\" />\n <path d=\"M9 9l6 6\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface WarningIconProps {\n size?: number\n className?: string\n}\n\nexport const WarningIcon: FC<WarningIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface InfoIconProps {\n size?: number\n className?: string\n}\n\nexport const InfoIcon: FC<InfoIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <line x1=\"12\" y1=\"16\" x2=\"12\" y2=\"12\" />\n <line x1=\"12\" y1=\"8\" x2=\"12.01\" y2=\"8\" />\n </svg>\n)\n","import type { FC } from 'react'\n\ninterface SpinnerIconProps {\n size?: number\n className?: string\n}\n\nexport const SpinnerIcon: FC<SpinnerIconProps> = ({ size = 20, className }) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n >\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </svg>\n)\n","import { useState, useEffect } from 'react'\n\nconst QUERY = '(prefers-reduced-motion: reduce)'\n\nfunction getInitialState(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return false\n }\n return window.matchMedia(QUERY).matches\n}\n\nexport function usePrefersReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(getInitialState)\n\n useEffect(() => {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') {\n return\n }\n const mql = window.matchMedia(QUERY)\n const handler = (event: MediaQueryListEvent) => {\n setPrefersReducedMotion(event.matches)\n }\n mql.addEventListener('change', handler)\n return () => mql.removeEventListener('change', handler)\n }, [])\n\n return prefersReducedMotion\n}\n","/** Static class name map — avoids CSS module bundling issues with tsup */\nexport const styles = {\n spinnerSpin: 'goey-spinnerSpin',\n wrapper: 'goey-wrapper',\n blobSvg: 'goey-blobSvg',\n content: 'goey-content',\n contentCompact: 'goey-contentCompact',\n contentExpanded: 'goey-contentExpanded',\n header: 'goey-header',\n iconWrapper: 'goey-iconWrapper',\n title: 'goey-title',\n titleDefault: 'goey-titleDefault',\n titleSuccess: 'goey-titleSuccess',\n titleError: 'goey-titleError',\n titleWarning: 'goey-titleWarning',\n titleInfo: 'goey-titleInfo',\n titleLoading: 'goey-titleLoading',\n description: 'goey-description',\n actionWrapper: 'goey-actionWrapper',\n actionButton: 'goey-actionButton',\n actionDefault: 'goey-actionDefault',\n actionSuccess: 'goey-actionSuccess',\n actionError: 'goey-actionError',\n actionWarning: 'goey-actionWarning',\n actionInfo: 'goey-actionInfo',\n progressWrapper: 'goey-progressWrapper',\n progressBar: 'goey-progressBar',\n progressDefault: 'goey-progressDefault',\n progressSuccess: 'goey-progressSuccess',\n progressError: 'goey-progressError',\n progressWarning: 'goey-progressWarning',\n progressInfo: 'goey-progressInfo',\n progressPaused: 'goey-progressPaused',\n timestamp: 'goey-timestamp',\n} as const\n","import { useRef, useState, useEffect, useLayoutEffect as useLayoutEffectOrig, useCallback, useMemo, type FC, type ReactNode } from 'react'\nimport { motion, AnimatePresence, animate } from 'framer-motion'\nimport { toast as sonnerToast } from 'sonner'\nimport type { GoeyToastAction, GoeyToastClassNames, GoeyToastPhase, GoeyToastTimings, GoeyToastType } from '../types'\nimport type { AnimationPresetName } from '../presets'\nimport { animationPresets } from '../presets'\nimport { getGoeyPosition, getGoeyDir, getGoeySpring, getGoeyBounce, getGoeySwipeToDismiss, getGoeyTheme, getGoeyShowProgress, subscribeContainerHovered, getContainerHovered } from '../context'\nimport { DefaultIcon, SuccessIcon, ErrorIcon, WarningIcon, InfoIcon, SpinnerIcon } from '../icons'\nimport { usePrefersReducedMotion } from '../usePrefersReducedMotion'\nimport { styles } from './goey-styles'\n\n// SSR-safe useLayoutEffect: avoids React warning when rendering on the server.\n// Falls back to useEffect during SSR (no DOM to measure anyway).\nconst useIsomorphicLayoutEffect =\n typeof window !== 'undefined' ? useLayoutEffectOrig : useEffect\n\nexport interface GoeyToastProps {\n title: string\n description?: ReactNode\n type: GoeyToastType\n action?: GoeyToastAction\n icon?: ReactNode\n phase: GoeyToastPhase\n classNames?: GoeyToastClassNames\n fillColor?: string\n borderColor?: string\n borderWidth?: number\n timing?: GoeyToastTimings\n preset?: AnimationPresetName\n spring?: boolean\n bounce?: number\n showProgress?: boolean\n toastId?: string | number\n}\n\nconst phaseIconMap: Record<Exclude<GoeyToastPhase, 'loading'>, FC<{ size?: number; className?: string }>> = {\n default: DefaultIcon,\n success: SuccessIcon,\n error: ErrorIcon,\n warning: WarningIcon,\n info: InfoIcon,\n}\n\nconst titleColorMap: Record<GoeyToastPhase, string> = {\n loading: styles.titleLoading,\n default: styles.titleDefault,\n success: styles.titleSuccess,\n error: styles.titleError,\n warning: styles.titleWarning,\n info: styles.titleInfo,\n}\n\nconst actionColorMap: Record<GoeyToastPhase, string> = {\n loading: styles.actionInfo,\n default: styles.actionDefault,\n success: styles.actionSuccess,\n error: styles.actionError,\n warning: styles.actionWarning,\n info: styles.actionInfo,\n}\n\nconst progressColorMap: Record<GoeyToastPhase, string> = {\n loading: styles.progressInfo,\n default: styles.progressDefault,\n success: styles.progressSuccess,\n error: styles.progressError,\n warning: styles.progressWarning,\n info: styles.progressInfo,\n}\n\nconst PH = 34 // pill height constant\nconst DEFAULT_DISPLAY_DURATION = 4000\n\n// Squish spring config — scales mass with morph duration so feel stays consistent\n// bounce 0.0 = heavily damped (subtle), 0.8 = very bouncy (dramatic)\nconst DEFAULT_EXPAND_DUR = 0.6\nconst DEFAULT_COLLAPSE_DUR = 0.9\nfunction squishSpring(durationSec: number, defaultDur: number, bounce = 0.4) {\n const scale = durationSec / defaultDur\n // Map bounce (0-0.8) to stiffness (200-550) and damping (24-8)\n const stiffness = 200 + bounce * 437.5\n const damping = 24 - bounce * 20\n const mass = 0.7 * scale\n return { type: 'spring' as const, stiffness, damping, mass }\n}\n\n/**\n * Singleton MutationObserver registry — one observer per <ol> element shared\n * across all GoeyToast instances mounted under that list. Each toast registers\n * its own callback; the shared observer batches mutations via rAF and invokes\n * every registered callback once per frame.\n */\nconst observerRegistry = new Map<Element, {\n observer: MutationObserver\n callbacks: Set<() => void>\n}>()\n\nfunction registerSonnerObserver(ol: Element, callback: () => void) {\n let entry = observerRegistry.get(ol)\n if (!entry) {\n const callbacks = new Set<() => void>()\n let applying = false\n const observer = new MutationObserver(() => {\n if (applying) return\n applying = true\n requestAnimationFrame(() => {\n callbacks.forEach(cb => cb())\n requestAnimationFrame(() => { applying = false })\n })\n })\n observer.observe(ol, {\n attributes: true,\n attributeFilter: ['style', 'data-visible'],\n subtree: true,\n childList: true,\n })\n entry = { observer, callbacks }\n observerRegistry.set(ol, entry)\n }\n entry.callbacks.add(callback)\n return () => {\n entry!.callbacks.delete(callback)\n if (entry!.callbacks.size === 0) {\n entry!.observer.disconnect()\n observerRegistry.delete(ol)\n }\n }\n}\n\n/**\n * Recalculates CSS variables on all sibling toast <li> elements.\n *\n * Sonner measures height once on mount (~34px pill) and never re-measures\n * toast.custom() content. This function corrects --initial-height and --offset\n * so our morphing toasts stack correctly.\n *\n * When expanded (hovered), CSS transitions on [data-expanded=\"true\"] are\n * overridden (GoeyToast.css) so writing these values takes effect instantly.\n *\n * DOM order: oldest toast at index 0, newest (front) at index n-1.\n * Front toast has --offset: 0; each older toast accumulates the heights of all\n * newer toasts plus the gap between them.\n */\nfunction syncSonnerHeights(\n wrapperEl: HTMLElement | null,\n includeOffsets = false,\n) {\n if (!wrapperEl) return\n const li = wrapperEl.closest('[data-sonner-toast]') as HTMLElement | null\n if (!li?.parentElement) return\n\n const ol = li.parentElement\n const toasts = Array.from(\n ol.querySelectorAll(':scope > [data-sonner-toast]')\n ) as HTMLElement[]\n\n if (toasts.length === 0) return\n\n // Measure actual rendered height of each toast's content wrapper.\n // Invisible toasts (beyond Sonner's visibleToasts limit) get height 0\n // so they don't create a gap in the layout or affect offset calculations.\n const heights = toasts.map(t => {\n if (t.getAttribute('data-visible') === 'false') return 0\n const content = t.firstElementChild as HTMLElement | null\n const h = content ? content.getBoundingClientRect().height : 0\n return h > 0 ? h : PH\n })\n\n // When expanded (hovered), temporarily kill CSS transitions so offset\n // corrections apply in this paint — prevents overlap flash. The CSS shortens\n // transitions to 150ms (GoeyToast.css) for Sonner's own changes, but our\n // corrections must be truly instant since getBoundingClientRect above forces\n // a layout that \"locks in\" stale values.\n const isExpanded = includeOffsets && toasts[0]?.getAttribute('data-expanded') === 'true'\n if (isExpanded) {\n for (const t of toasts) t.style.setProperty('transition', 'none', 'important')\n }\n\n // Always update --initial-height (the CSS height transition target).\n for (let i = 0; i < toasts.length; i++) {\n toasts[i].style.setProperty('--initial-height', `${heights[i]}px`)\n }\n\n if (!includeOffsets) {\n if (isExpanded) {\n for (const t of toasts) t.style.removeProperty('transition')\n }\n return\n }\n\n const gapStr = getComputedStyle(ol).getPropertyValue('--gap').trim()\n const gap = parseFloat(gapStr) || 14\n\n let runningOffset = 0\n for (let i = toasts.length - 1; i >= 0; i--) {\n // Invisible toasts: collapse to base position, don't contribute to offset\n if (toasts[i].getAttribute('data-visible') === 'false') {\n toasts[i].style.setProperty('--offset', '0px')\n continue\n }\n toasts[i].style.setProperty('--offset', `${runningOffset}px`)\n if (i > 0) {\n runningOffset += heights[i] + gap\n }\n }\n\n if (isExpanded) {\n // Force reflow so browser applies corrected values without transitions,\n // then restore transitions for Sonner's own future animations.\n void ol.offsetHeight\n for (const t of toasts) t.style.removeProperty('transition')\n }\n}\n\n/**\n * Simple last-result cache for pure functions called every animation frame.\n * Avoids recomputing the SVG path string when flush() is called multiple\n * times with identical parameters (e.g. syncSonnerHeights after morph update).\n */\nfunction memoizePath(fn: (pw: number, bw: number, th: number, t: number) => string) {\n let lastArgs: [number, number, number, number] | null = null\n let lastResult = ''\n return (pw: number, bw: number, th: number, t: number): string => {\n if (lastArgs && lastArgs[0] === pw && lastArgs[1] === bw && lastArgs[2] === th && lastArgs[3] === t) {\n return lastResult\n }\n lastResult = fn(pw, bw, th, t)\n lastArgs = [pw, bw, th, t]\n return lastResult\n }\n}\n\n/**\n * Parametric morph path: pill lobe stays constant, body grows from underneath.\n * t=0 → pure pill, t=1 → full organic blob.\n */\nfunction morphPathRaw(pw: number, bw: number, th: number, t: number): string {\n const pr = PH / 2\n const pillW = Math.min(pw, bw)\n\n const bodyH = PH + (th - PH) * t\n\n // Pure pill when t is zero or body too small for proper rounded corners\n if (t <= 0 || bodyH - PH < 8) {\n return [\n `M 0,${pr}`,\n `A ${pr},${pr} 0 0 1 ${pr},0`,\n `H ${pillW - pr}`,\n `A ${pr},${pr} 0 0 1 ${pillW},${pr}`,\n `A ${pr},${pr} 0 0 1 ${pillW - pr},${PH}`,\n `H ${pr}`,\n `A ${pr},${pr} 0 0 1 0,${pr}`,\n `Z`,\n ].join(' ')\n }\n\n const curve = 14 * t\n const cr = Math.min(16, (bodyH - PH) * 0.45)\n const bodyW = pillW + (bw - pillW) * t\n const bodyTop = PH - curve\n const qEndX = Math.min(pillW + curve, bodyW - cr)\n\n return [\n `M 0,${pr}`,\n `A ${pr},${pr} 0 0 1 ${pr},0`,\n `H ${pillW - pr}`,\n `A ${pr},${pr} 0 0 1 ${pillW},${pr}`,\n `L ${pillW},${bodyTop}`,\n `Q ${pillW},${bodyTop + curve} ${qEndX},${bodyTop + curve}`,\n `H ${bodyW - cr}`,\n `A ${cr},${cr} 0 0 1 ${bodyW},${bodyTop + curve + cr}`,\n `L ${bodyW},${bodyH - cr}`,\n `A ${cr},${cr} 0 0 1 ${bodyW - cr},${bodyH}`,\n `H ${cr}`,\n `A ${cr},${cr} 0 0 1 0,${bodyH - cr}`,\n `Z`,\n ].join(' ')\n}\n\n/**\n * Centered morph path: pill centered on top, body grows symmetrically below.\n * t=0 → pure pill (centered), t=1 → full blob with pill centered on top.\n */\nfunction morphPathCenterRaw(pw: number, bw: number, th: number, t: number): string {\n const pr = PH / 2\n const pillW = Math.min(pw, bw)\n\n // Pill is ALWAYS centered at the final body width position\n const pillOffset = (bw - pillW) / 2\n\n // Pure pill when t is zero or body too small\n if (t <= 0 || PH + (th - PH) * t - PH < 8) {\n return [\n `M ${pillOffset},${pr}`,\n `A ${pr},${pr} 0 0 1 ${pillOffset + pr},0`,\n `H ${pillOffset + pillW - pr}`,\n `A ${pr},${pr} 0 0 1 ${pillOffset + pillW},${pr}`,\n `A ${pr},${pr} 0 0 1 ${pillOffset + pillW - pr},${PH}`,\n `H ${pillOffset + pr}`,\n `A ${pr},${pr} 0 0 1 ${pillOffset},${pr}`,\n `Z`,\n ].join(' ')\n }\n\n const bodyH = PH + (th - PH) * t\n const curve = 14 * t\n const cr = Math.min(16, (bodyH - PH) * 0.45)\n const bodyTop = PH - curve\n\n // Body grows symmetrically outward from pill center\n const bodyCenter = bw / 2\n const halfBodyW = (pillW / 2) + ((bw - pillW) / 2) * t // grows from pillW/2 to bw/2\n const bodyLeft = bodyCenter - halfBodyW\n const bodyRight = bodyCenter + halfBodyW\n\n // Q curve endpoints: body edges meet pill edges with organic curves\n const qLeftX = Math.max(bodyLeft + cr, pillOffset - curve)\n const qRightX = Math.min(bodyRight - cr, pillOffset + pillW + curve)\n\n return [\n // Start at left side of pill\n `M ${pillOffset},${pr}`,\n // Pill top-left arc\n `A ${pr},${pr} 0 0 1 ${pillOffset + pr},0`,\n // Top edge of pill\n `H ${pillOffset + pillW - pr}`,\n // Pill top-right arc\n `A ${pr},${pr} 0 0 1 ${pillOffset + pillW},${pr}`,\n // Right side down to body junction\n `L ${pillOffset + pillW},${bodyTop}`,\n // Right organic curve from pill to body\n `Q ${pillOffset + pillW},${bodyTop + curve} ${qRightX},${bodyTop + curve}`,\n // Right side of body\n `H ${bodyRight - cr}`,\n // Body top-right corner\n `A ${cr},${cr} 0 0 1 ${bodyRight},${bodyTop + curve + cr}`,\n // Right edge down\n `L ${bodyRight},${bodyH - cr}`,\n // Body bottom-right corner\n `A ${cr},${cr} 0 0 1 ${bodyRight - cr},${bodyH}`,\n // Bottom edge\n `H ${bodyLeft + cr}`,\n // Body bottom-left corner\n `A ${cr},${cr} 0 0 1 ${bodyLeft},${bodyH - cr}`,\n // Left edge up\n `L ${bodyLeft},${bodyTop + curve + cr}`,\n // Body top-left corner\n `A ${cr},${cr} 0 0 1 ${bodyLeft + cr},${bodyTop + curve}`,\n // Left side of body\n `H ${qLeftX}`,\n // Left organic curve from body to pill\n `Q ${pillOffset},${bodyTop + curve} ${pillOffset},${bodyTop}`,\n // Close back to start\n `Z`,\n ].join(' ')\n}\n\nconst morphPath = memoizePath(morphPathRaw)\nconst morphPathCenter = memoizePath(morphPathCenterRaw)\n\n// Smooth easing curve for non-spring animations\nconst SMOOTH_EASE = [0.4, 0, 0.2, 1] as const\n\nexport const GoeyToast: FC<GoeyToastProps> = ({\n title,\n description,\n action,\n icon,\n phase,\n classNames,\n fillColor: fillColorProp,\n borderColor,\n borderWidth,\n timing,\n preset,\n spring: springProp,\n bounce: bounceProp,\n showProgress: showProgressProp,\n toastId,\n}) => {\n const theme = getGoeyTheme()\n const fillColor = fillColorProp ?? (theme === 'dark' ? '#1a1a1a' : '#ffffff')\n const position = getGoeyPosition()\n const dir = getGoeyDir()\n const posIsRight = position?.includes('right') ?? false\n const isCenter = position?.includes('center') ?? false\n // In RTL, left-positioned toasts visually behave like right-positioned ones and vice versa\n const isRight = dir === 'rtl' ? (isCenter ? false : !posIsRight) : posIsRight\n const prefersReducedMotion = usePrefersReducedMotion()\n // Explicit props > per-toast preset > global context values > defaults\n const presetConfig = preset ? animationPresets[preset] : undefined\n const useSpring = springProp ?? presetConfig?.spring ?? getGoeySpring()\n const bounceVal = bounceProp ?? presetConfig?.bounce ?? getGoeyBounce() ?? 0.4\n const showProgress = showProgressProp ?? getGoeyShowProgress()\n\n // Action success override state\n const [actionSuccess, setActionSuccess] = useState<string | null>(null)\n const [dismissing, setDismissing] = useState(false)\n // Counter to remount progress bar on re-expand, restarting the CSS animation\n const [progressKey, setProgressKey] = useState(0)\n const [hovered, setHovered] = useState(false)\n const hoveredRef = useRef(false)\n // Container-level hover (hovering anywhere in the Sonner stack, not just this toast)\n const containerHoveredRef = useRef(getContainerHovered())\n const [containerHovered, setContainerHoveredState] = useState(getContainerHovered())\n const collapsingRef = useRef(false)\n const preDismissRef = useRef(false)\n const collapseEndTime = useRef(0)\n const expandedDimsRef = useRef({ pw: 0, bw: 0, th: 0 })\n const dismissTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n // Effective values (overridden when action success is active)\n const effectiveTitle = actionSuccess ?? title\n const effectivePhase: GoeyToastPhase = actionSuccess ? 'success' : phase\n const effectiveDescription = actionSuccess ? undefined : description\n const effectiveAction = actionSuccess ? undefined : action\n\n const isLoading = effectivePhase === 'loading'\n const hasDescription = Boolean(effectiveDescription)\n const hasAction = Boolean(effectiveAction)\n const isExpanded = (hasDescription || hasAction) && !dismissing\n\n const [showBody, setShowBody] = useState(false)\n\n // DOM refs\n const wrapperRef = useRef<HTMLDivElement>(null)\n const pathRef = useRef<SVGPathElement>(null)\n const headerRef = useRef<HTMLDivElement>(null)\n const contentRef = useRef<HTMLDivElement>(null)\n\n // Animation controllers\n const morphCtrl = useRef<ReturnType<typeof animate> | null>(null)\n const pillResizeCtrl = useRef<ReturnType<typeof animate> | null>(null)\n const headerSquishCtrl = useRef<ReturnType<typeof animate> | null>(null)\n\n // Animated state (not React state — avoids re-renders during animation)\n const morphTRef = useRef(0)\n const aDims = useRef({ pw: 0, bw: 0, th: 0 }) // animated dims\n const dimsRef = useRef({ pw: 0, bw: 0, th: 0 }) // latest measured dims\n\n // React state for dims (triggers effects)\n const [dims, setDims] = useState({ pw: 0, bw: 0, th: 0 })\n useEffect(() => { dimsRef.current = dims }, [dims])\n\n // Subscribe to container-level hover so timers pause when hovering anywhere in the stack\n useEffect(() => {\n return subscribeContainerHovered((h) => {\n containerHoveredRef.current = h\n setContainerHoveredState(h)\n })\n }, [])\n\n // Push current animated state to SVG DOM + constrain wrapper/content\n // NOTE: We intentionally do NOT set style.height on the wrapper.\n // The content's maxHeight constrains the rendered height, and letting\n // the wrapper derive its height naturally allows Sonner to accurately\n // measure the toast height for stacking/positioning.\n const flush = useCallback(() => {\n const { pw: p, bw: b, th: h } = aDims.current\n if (p <= 0 || b <= 0 || h <= 0) return\n // Clamp t to [0,1] — spring overshoot past 1 or below 0 must not\n // cause flush to toggle between constraint branches (jitter).\n const t = Math.max(0, Math.min(1, morphTRef.current))\n // Read position and dir fresh each call so flush never uses a stale value\n const pos = getGoeyPosition()\n const d = getGoeyDir()\n const centerPos = pos?.includes('center') ?? false\n const posRight = pos?.includes('right') ?? false\n // In RTL, flip left/right visual behavior (center stays the same)\n const rightSide = d === 'rtl' ? (centerPos ? false : !posRight) : posRight\n // Center positions: always use morphPathCenter so pill stays at fixed center offset\n // (switching to morphPath at t=0 causes a frame where content jumps left)\n if (centerPos) {\n const centerBw = Math.max(dimsRef.current.bw, expandedDimsRef.current.bw, p)\n pathRef.current?.setAttribute('d', morphPathCenter(p, centerBw, h, t))\n } else {\n pathRef.current?.setAttribute('d', morphPath(p, b, h, t))\n }\n\n if (t >= 1) {\n // Fully expanded: clear all constraints\n if (wrapperRef.current) {\n wrapperRef.current.style.width = ''\n }\n if (contentRef.current) {\n contentRef.current.style.width = ''\n contentRef.current.style.overflow = ''\n contentRef.current.style.maxHeight = ''\n contentRef.current.style.clipPath = ''\n }\n } else if (t > 0) {\n // Morphing: lock content at final target width + clip-path (prevents text reflow)\n const targetBw = dimsRef.current.bw\n const targetTh = dimsRef.current.th\n const pillW = Math.min(p, b)\n const currentW = pillW + (b - pillW) * t\n const currentH = PH + (targetTh - PH) * t\n // Center: use stable full width (dimsRef may shrink during collapse)\n const centerFullW = centerPos ? Math.max(dimsRef.current.bw, expandedDimsRef.current.bw, p) : 0\n if (wrapperRef.current) {\n wrapperRef.current.style.width = (centerPos ? centerFullW : currentW) + 'px'\n }\n if (contentRef.current) {\n // Center: content width = wrapper width so textAlign:center keeps header aligned with SVG pill\n contentRef.current.style.width = (centerPos ? centerFullW : targetBw) + 'px'\n contentRef.current.style.overflow = 'hidden'\n contentRef.current.style.maxHeight = currentH + 'px'\n if (centerPos) {\n const clip = (centerFullW - currentW) / 2\n contentRef.current.style.clipPath = `inset(0 ${clip}px 0 ${clip}px)`\n } else {\n const clip = targetBw - currentW\n contentRef.current.style.clipPath = rightSide\n ? `inset(0 0 0 ${clip}px)`\n : `inset(0 ${clip}px 0 0)`\n }\n }\n } else {\n // Compact: constrain to pill dimensions\n const pillW = Math.min(p, b)\n if (wrapperRef.current) {\n // Center: keep body width so pill SVG offset stays consistent (no frame jump)\n const centerBw = centerPos ? Math.max(dimsRef.current.bw, expandedDimsRef.current.bw, p) : pillW\n wrapperRef.current.style.width = centerBw + 'px'\n }\n if (contentRef.current) {\n if (centerPos) {\n // Keep content locked at body width with symmetric clip to match SVG pill position\n const centerBwVal = Math.max(dimsRef.current.bw, expandedDimsRef.current.bw, p)\n contentRef.current.style.width = centerBwVal + 'px'\n const clip = (centerBwVal - pillW) / 2\n contentRef.current.style.clipPath = `inset(0 ${clip}px 0 ${clip}px)`\n } else {\n contentRef.current.style.width = ''\n contentRef.current.style.clipPath = ''\n }\n contentRef.current.style.overflow = 'hidden'\n contentRef.current.style.maxHeight = PH + 'px'\n }\n }\n }, [])\n\n // Measure content dimensions (clear all constraints first for accurate reading)\n const measure = useCallback(() => {\n if (!headerRef.current || !contentRef.current) return\n const wr = wrapperRef.current\n const savedW = wr?.style.width ?? ''\n const savedOv = contentRef.current.style.overflow\n const savedMH = contentRef.current.style.maxHeight\n const savedCW = contentRef.current.style.width\n if (wr) { wr.style.width = '' }\n contentRef.current.style.overflow = ''\n contentRef.current.style.maxHeight = ''\n contentRef.current.style.width = ''\n\n const cs = getComputedStyle(contentRef.current)\n const paddingX = parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight)\n const pw = headerRef.current.offsetWidth + paddingX\n const bw = contentRef.current.offsetWidth\n const th = contentRef.current.offsetHeight\n\n if (wr) { wr.style.width = savedW }\n contentRef.current.style.overflow = savedOv\n contentRef.current.style.maxHeight = savedMH\n contentRef.current.style.width = savedCW\n\n dimsRef.current = { pw, bw, th }\n setDims({ pw, bw, th })\n }, [])\n\n // Measure on prop changes (useLayoutEffect prevents flash of unconstrained content)\n useIsomorphicLayoutEffect(() => {\n measure()\n const t = setTimeout(measure, 100)\n return () => clearTimeout(t)\n }, [effectiveTitle, effectivePhase, isExpanded, showBody, effectiveDescription, effectiveAction, measure])\n\n useEffect(() => {\n if (!contentRef.current) return\n const ro = new ResizeObserver(measure)\n ro.observe(contentRef.current)\n return () => ro.disconnect()\n }, [measure])\n\n const { pw, bw, th } = dims\n const hasDims = pw > 0 && bw > 0 && th > 0\n\n // Squish animation controller (shared between landing + blob squish)\n const blobSquishCtrl = useRef<ReturnType<typeof animate> | null>(null)\n\n // Landing squish: single smooth boing — spring scales with user timing\n const expandDur = DEFAULT_EXPAND_DUR\n const collapseDur = DEFAULT_COLLAPSE_DUR\n const lastSquishTime = useRef(0)\n const triggerLandingSquish = useCallback((phase: 'expand' | 'collapse' | 'mount' = 'mount') => {\n if (!wrapperRef.current || prefersReducedMotion) return\n // Skip squish entirely when spring is disabled\n if (!useSpring) return\n const now = Date.now()\n if (now - lastSquishTime.current < 300) return\n lastSquishTime.current = now\n blobSquishCtrl.current?.stop()\n const el = wrapperRef.current\n const springConfig = phase === 'collapse'\n ? squishSpring(collapseDur, DEFAULT_COLLAPSE_DUR, bounceVal)\n : squishSpring(expandDur, DEFAULT_EXPAND_DUR, bounceVal)\n // Softer squish on collapse — blob is wider so same % looks more drastic\n // Scale squish intensity with bounce (0.05=subtle, 0.8=dramatic)\n const bScale = bounceVal / 0.4\n const compressY = (phase === 'collapse' ? 0.035 : 0.12) * bScale\n const expandX = (phase === 'collapse' ? 0.018 : 0.06) * bScale\n blobSquishCtrl.current = animate(0, 1, {\n ...springConfig,\n onUpdate: (v) => {\n const intensity = Math.sin(v * Math.PI)\n const sy = 1 - compressY * intensity\n const sx = 1 + expandX * intensity\n const mirror = el.style.transform?.includes('scaleX(-1)') ? 'scaleX(-1) ' : ''\n // Anchor squish at pill (top of blob) so body feels like it expands from pill center\n el.style.transformOrigin = 'center top'\n el.style.transform = mirror + `scaleX(${sx}) scaleY(${sy})`\n },\n onComplete: () => {\n const right = el.style.transform?.includes('scaleX(-1)')\n el.style.transform = right ? 'scaleX(-1)' : ''\n el.style.transformOrigin = ''\n },\n })\n }, [prefersReducedMotion, expandDur, collapseDur, useSpring, bounceVal])\n\n // Handle dims changes: pill resize animation (compact) or direct update (expanded)\n useIsomorphicLayoutEffect(() => {\n if (!hasDims || collapsingRef.current) return\n\n const prev = { ...aDims.current }\n const target = { pw, bw, th }\n\n // First render — set immediately\n if (prev.bw <= 0) {\n aDims.current = target\n flush()\n return\n }\n\n // During morph animation — just update target dims, morph callback reads them\n if (morphTRef.current > 0 && morphTRef.current < 1) {\n aDims.current = target\n flush()\n return\n }\n\n // Expanded and settled (morph done) — update immediately\n if (showBody) {\n aDims.current = target\n flush()\n return\n }\n\n // Compact mode: animate pill resize smoothly\n if (prev.bw === target.bw && prev.pw === target.pw && prev.th === target.th) return\n\n if (prefersReducedMotion) {\n aDims.current = target\n flush()\n return\n }\n\n pillResizeCtrl.current?.stop()\n // Fire vertical squish alongside the horizontal resize\n // Skip if recently collapsed or about to expand (promise resolve/reject)\n if (Date.now() - collapseEndTime.current > 500 && !isExpanded) {\n triggerLandingSquish('expand')\n }\n const pillResizeTransition = useSpring\n ? { type: 'spring' as const, duration: 0.5, bounce: bounceVal * 0.875 }\n : { duration: 0.4, ease: SMOOTH_EASE }\n pillResizeCtrl.current = animate(0, 1, {\n ...pillResizeTransition,\n onUpdate: (t) => {\n aDims.current = {\n pw: prev.pw + (target.pw - prev.pw) * t,\n bw: prev.bw + (target.bw - prev.bw) * t,\n th: prev.th + (target.th - prev.th) * t,\n }\n flush()\n },\n })\n }, [pw, bw, th, hasDims, showBody, flush, prefersReducedMotion, triggerLandingSquish, useSpring])\n\n // Squish on entry: only for simple toasts (no body text) — expanded toasts get squish from showBody\n const squishDelayMs = 45\n const mountSquished = useRef(false)\n useEffect(() => {\n if (hasDims && !mountSquished.current && !isExpanded) {\n mountSquished.current = true\n const t = setTimeout(triggerLandingSquish, squishDelayMs)\n return () => clearTimeout(t)\n }\n }, [hasDims, squishDelayMs, triggerLandingSquish])\n\n // Squish on expand (showBody false→true) — collapse squish is fired directly in morph code\n // Skip squish on hover re-expand (hovered + was dismissing) to avoid jarring bounce\n const prevShowBody = useRef(false)\n useIsomorphicLayoutEffect(() => {\n if (!prevShowBody.current && showBody && !hoveredRef.current) {\n // Small delay after morph starts for more satisfying \"settle then bounce\" feel\n const t = setTimeout(() => triggerLandingSquish('expand'), 80)\n return () => clearTimeout(t)\n }\n prevShowBody.current = showBody\n }, [showBody, triggerLandingSquish])\n\n // Error shake: quick horizontal shake when phase transitions to error (not during dismiss)\n const shakeCtrl = useRef<ReturnType<typeof animate> | null>(null)\n const prevPhase = useRef(phase)\n useEffect(() => {\n if (phase === 'error' && prevPhase.current !== 'error' && !dismissing && wrapperRef.current && !prefersReducedMotion) {\n shakeCtrl.current?.stop()\n const el = wrapperRef.current\n const mirror = el.style.transform?.includes('scaleX(-1)') ? 'scaleX(-1) ' : ''\n shakeCtrl.current = animate(0, 1, {\n duration: 0.4,\n ease: 'easeOut',\n onUpdate: (v) => {\n const decay = 1 - v\n const shake = Math.sin(v * Math.PI * 6) * decay * 3\n el.style.transform = mirror + `translateX(${shake}px)`\n },\n onComplete: () => {\n el.style.transform = mirror.trim() || ''\n },\n })\n }\n prevPhase.current = phase\n return () => { shakeCtrl.current?.stop() }\n }, [phase, dismissing, prefersReducedMotion])\n\n // Phase 1: expand (delay showBody) or collapse (reverse morph)\n useEffect(() => {\n if (isExpanded) {\n const delay = prefersReducedMotion ? 0 : (330)\n const t1 = setTimeout(() => setShowBody(true), delay)\n return () => clearTimeout(t1)\n }\n\n morphCtrl.current?.stop()\n pillResizeCtrl.current?.stop()\n\n // Reverse morph if currently expanded\n if (morphTRef.current > 0) {\n // Compute target compact pill dims from current header content\n const csPad = contentRef.current ? getComputedStyle(contentRef.current) : null\n const padX = csPad ? parseFloat(csPad.paddingLeft) + parseFloat(csPad.paddingRight) : 20\n const targetPw = headerRef.current ? headerRef.current.offsetWidth + padX : aDims.current.pw\n const targetDims = { pw: targetPw, bw: targetPw, th: PH }\n\n if (prefersReducedMotion) {\n morphTRef.current = 0\n collapsingRef.current = false\n preDismissRef.current = false\n setShowBody(false)\n aDims.current = { ...targetDims }\n flush()\n return\n }\n\n const savedDims = expandedDimsRef.current.bw > 0\n ? { ...expandedDimsRef.current }\n : { ...aDims.current }\n\n const isPreDismiss = preDismissRef.current\n const collapseDur = 0.9\n // Use easing when spring is disabled or during pre-dismiss\n const collapseTransition = (isPreDismiss || !useSpring)\n ? { duration: collapseDur, ease: SMOOTH_EASE }\n : { type: 'spring' as const, duration: collapseDur, bounce: bounceVal * 0.875 }\n\n // Fire squish immediately as collapse begins — don't wait for morph to finish\n triggerLandingSquish('collapse')\n\n morphCtrl.current = animate(morphTRef.current, 0, {\n ...collapseTransition,\n onUpdate: (t) => {\n morphTRef.current = t\n aDims.current = {\n pw: targetDims.pw + (savedDims.pw - targetDims.pw) * t,\n bw: targetDims.bw + (savedDims.bw - targetDims.bw) * t,\n th: targetDims.th + (savedDims.th - targetDims.th) * t,\n }\n flush()\n syncSonnerHeights(wrapperRef.current, true)\n },\n onComplete: () => {\n morphTRef.current = 0\n collapsingRef.current = false\n preDismissRef.current = false\n collapseEndTime.current = Date.now()\n aDims.current = { ...targetDims }\n flush()\n syncSonnerHeights(wrapperRef.current, true)\n setShowBody(false)\n },\n })\n return () => { morphCtrl.current?.stop() }\n }\n\n setShowBody(false)\n morphTRef.current = 0\n flush()\n }, [isExpanded, flush, prefersReducedMotion, useSpring, triggerLandingSquish])\n\n // Pre-dismiss collapse: shrink back to pill before Sonner removes the toast\n // Hover pauses the timer. On unhover, timer restarts with remaining time.\n const remainingRef = useRef<number | null>(null)\n const timerStartRef = useRef(0)\n const progressDelayRef = useRef(0)\n useEffect(() => {\n if (!showBody || actionSuccess || dismissing) return\n\n const expandDelayMs = prefersReducedMotion ? 0 : (330)\n const collapseMs = prefersReducedMotion ? 10 : ((0.9) * 1000)\n const displayMs = timing?.displayDuration ?? DEFAULT_DISPLAY_DURATION\n const fullDelay = displayMs - expandDelayMs - collapseMs\n progressDelayRef.current = Math.max(fullDelay, 0)\n if (fullDelay <= 0) return\n\n // Don't start timer while hovered (individual or container) — pause and resume on unhover\n if (hoveredRef.current || containerHoveredRef.current) return\n\n const delay = remainingRef.current ?? fullDelay\n timerStartRef.current = Date.now()\n\n const timer = setTimeout(() => {\n // Guard: hover refs update synchronously (before React re-renders),\n // so check them to avoid starting collapse when user just hovered.\n if (hoveredRef.current || containerHoveredRef.current) {\n const elapsed = Date.now() - timerStartRef.current\n remainingRef.current = Math.max(0, delay - elapsed)\n return\n }\n remainingRef.current = null\n expandedDimsRef.current = { ...aDims.current }\n collapsingRef.current = true\n preDismissRef.current = true\n setDismissing(true)\n }, delay)\n dismissTimerRef.current = timer\n\n return () => {\n clearTimeout(timer)\n // Save remaining time when cleaning up (e.g. hover started)\n const elapsed = Date.now() - timerStartRef.current\n const remaining = delay - elapsed\n if (remaining > 0 && (hoveredRef.current || containerHoveredRef.current)) {\n remainingRef.current = remaining\n }\n }\n }, [showBody, actionSuccess, dismissing, prefersReducedMotion, hovered, containerHovered])\n\n // Re-expand on hover: if collapsed/collapsing and user hovers (individual or container), reverse it\n const canExpand = hasDescription || hasAction\n const reExpandingRef = useRef(false)\n useEffect(() => {\n if ((!hovered && !containerHovered) || !canExpand || !dismissing) return\n // Stop collapse morph, reset state\n morphCtrl.current?.stop()\n collapsingRef.current = false\n preDismissRef.current = false\n remainingRef.current = null\n reExpandingRef.current = true\n setDismissing(false)\n setShowBody(true)\n // Remount the progress bar so the CSS animation restarts from full width\n if (showProgress) setProgressKey(k => k + 1)\n\n // Directly drive the expand morph from current position\n // Can't rely on Phase 2 because showBody might already be true (mid-collapse hover)\n const currentT = morphTRef.current\n const startDims = { ...aDims.current }\n const morphExpandTransition = useSpring\n ? { type: 'spring' as const, duration: 0.9, bounce: bounceVal }\n : { duration: 0.6, ease: SMOOTH_EASE }\n\n // Wait one frame for measure to update dimsRef with expanded content\n requestAnimationFrame(() => {\n morphCtrl.current = animate(currentT, 1, {\n ...morphExpandTransition,\n onUpdate: (t) => {\n morphTRef.current = t\n const target = dimsRef.current\n aDims.current = {\n pw: startDims.pw + (target.pw - startDims.pw) * t,\n bw: startDims.bw + (target.bw - startDims.bw) * t,\n th: startDims.th + (target.th - startDims.th) * t,\n }\n flush()\n // Keep offsets in sync as heights grow so toasts don't overlap mid-morph.\n // During initial expand, expandObs handles this, but during re-expand the\n // heights start at mid-collapse values and offsets go stale without this.\n syncSonnerHeights(wrapperRef.current, true)\n },\n onComplete: () => {\n morphTRef.current = 1\n aDims.current = { ...dimsRef.current }\n reExpandingRef.current = false\n flush()\n syncSonnerHeights(wrapperRef.current, true)\n },\n })\n })\n\n return () => { morphCtrl.current?.stop() }\n }, [hovered, containerHovered, dismissing, canExpand])\n\n // Dismiss from Sonner after collapse completes.\n // Re-expand calls setDismissing(false) → effect cleanup cancels this timer.\n // But there's a narrow race: user hovers AFTER showBody=false but BEFORE\n // React processes the re-expand state update. Guard with refs (synchronously\n // set on mouseenter) so dismiss is always skipped if cursor is on the stack.\n useEffect(() => {\n if (!toastId || !dismissing || showBody) return\n const t = setTimeout(() => {\n if (!hoveredRef.current && !containerHoveredRef.current) {\n sonnerToast.dismiss(toastId)\n }\n }, 800)\n return () => clearTimeout(t)\n }, [dismissing, showBody, toastId])\n\n // Dismiss after action success morph-back completes\n useEffect(() => {\n if (!toastId || !actionSuccess || showBody) return\n const t = setTimeout(() => sonnerToast.dismiss(toastId), 1200)\n return () => clearTimeout(t)\n }, [toastId, actionSuccess, showBody])\n\n // Phase 2: morph from pill → blob\n useEffect(() => {\n // Skip if re-expand is driving the morph\n if (reExpandingRef.current) return\n if (!showBody) {\n morphTRef.current = 0\n morphCtrl.current?.stop()\n flush()\n return\n }\n\n if (prefersReducedMotion) {\n pillResizeCtrl.current?.stop()\n morphCtrl.current?.stop()\n morphTRef.current = 1\n aDims.current = { ...dimsRef.current }\n flush()\n syncSonnerHeights(wrapperRef.current, true)\n return\n }\n\n const raf = requestAnimationFrame(() => {\n pillResizeCtrl.current?.stop()\n morphCtrl.current?.stop()\n // Capture current animated dims so we interpolate smoothly from\n // wherever the pill resize left off instead of snapping to target.\n const startDims = { ...aDims.current }\n const morphExpandTransition = useSpring\n ? { type: 'spring' as const, duration: 0.9, bounce: bounceVal }\n : { duration: 0.6, ease: SMOOTH_EASE }\n morphCtrl.current = animate(0, 1, {\n ...morphExpandTransition,\n onUpdate: (t) => {\n morphTRef.current = t\n const target = dimsRef.current\n aDims.current = {\n pw: startDims.pw + (target.pw - startDims.pw) * t,\n bw: startDims.bw + (target.bw - startDims.bw) * t,\n th: startDims.th + (target.th - startDims.th) * t,\n }\n flush()\n syncSonnerHeights(wrapperRef.current, true)\n },\n onComplete: () => {\n morphTRef.current = 1\n aDims.current = { ...dimsRef.current }\n flush()\n syncSonnerHeights(wrapperRef.current, true)\n },\n })\n })\n\n return () => {\n cancelAnimationFrame(raf)\n morphCtrl.current?.stop()\n }\n }, [showBody, flush, prefersReducedMotion, useSpring])\n\n // Header elastic squish: spring down when expanding, spring back once on collapse/dismiss\n const headerSquished = useRef(false)\n useEffect(() => {\n if (!headerRef.current || prefersReducedMotion) return\n headerSquishCtrl.current?.stop()\n const el = headerRef.current\n\n if (showBody && !dismissing && !actionSuccess) {\n // Skip header squish when spring is disabled\n if (!useSpring) return\n // Squish down with elastic spring — scaled to expand timing\n headerSquished.current = true\n headerSquishCtrl.current = animate(0, 1, {\n ...squishSpring(expandDur, DEFAULT_EXPAND_DUR, bounceVal),\n onUpdate: (v) => {\n const scale = 1 - 0.05 * v\n const pushY = v * 1\n el.style.transform = `scale(${scale}) translateY(${pushY}px)`\n },\n })\n } else if (headerSquished.current) {\n // Spring back to normal — match morph transition type\n headerSquished.current = false\n // Use easing when spring is disabled or during pre-dismiss\n const isSpringCollapse = !preDismissRef.current && useSpring\n const transition = isSpringCollapse\n ? squishSpring(collapseDur, DEFAULT_COLLAPSE_DUR, bounceVal)\n : { duration: collapseDur * 0.5, ease: SMOOTH_EASE }\n headerSquishCtrl.current = animate(1, 0, {\n ...transition,\n onUpdate: (v) => {\n const scale = 1 - 0.05 * v\n const pushY = v * 1\n el.style.transform = `scale(${scale}) translateY(${pushY}px)`\n },\n onComplete: () => {\n el.style.transform = ''\n },\n })\n }\n\n return () => { headerSquishCtrl.current?.stop() }\n }, [showBody, dismissing, actionSuccess, prefersReducedMotion, expandDur, collapseDur, useSpring])\n\n // Keep Sonner's toast stacking in sync when it re-renders (e.g. hover expand/collapse).\n // Sonner overwrites --offset/--initial-height with stale values from its React state,\n // so we observe style mutations on the toast list and re-apply correct heights.\n // Uses a shared singleton observer per <ol> to avoid N observers for N toasts.\n useEffect(() => {\n const wrapper = wrapperRef.current\n if (!wrapper) return\n const ol = wrapper.closest('[data-sonner-toast]')?.parentElement\n if (!ol) return\n\n // Per-rAF sync: corrects --initial-height AND --offset every time Sonner\n // overwrites them with stale values from its React state.\n // When expanded, CSS transitions are disabled (GoeyToast.css) so corrections\n // apply instantly without re-targeting a CSS transition mid-flight.\n const unregister = registerSonnerObserver(ol, () => {\n syncSonnerHeights(wrapper, true)\n })\n\n // Immediate sync when Sonner expands the stack (data-expanded → true).\n // MutationObserver callbacks are microtasks — they run before the next paint,\n // so --offset is corrected before the first CSS transition frame renders.\n const expandObs = new MutationObserver((mutations) => {\n for (const m of mutations) {\n if (\n m.type === 'attributes' &&\n m.attributeName === 'data-expanded' &&\n (m.target as HTMLElement).getAttribute('data-expanded') === 'true'\n ) {\n syncSonnerHeights(wrapper, true)\n break\n }\n }\n })\n expandObs.observe(ol, {\n attributes: true,\n attributeFilter: ['data-expanded'],\n subtree: true,\n })\n\n return () => {\n unregister()\n expandObs.disconnect()\n }\n }, [])\n\n // Action button handler\n const handleActionClick = useCallback(() => {\n if (!effectiveAction) return\n if (effectiveAction.successLabel) {\n // Save expanded dims synchronously before onClick (which may throw)\n expandedDimsRef.current = { ...aDims.current }\n collapsingRef.current = true\n setActionSuccess(effectiveAction.successLabel)\n }\n try { effectiveAction.onClick() } catch { /* onClick errors shouldn't block morph-back */ }\n }, [effectiveAction])\n\n // ---------------------------------------------------------------------------\n // Swipe-to-dismiss touch gesture\n // ---------------------------------------------------------------------------\n const SWIPE_THRESHOLD = 100\n const swipeStartRef = useRef<{ x: number; y: number } | null>(null)\n const [swipeOffsetX, setSwipeOffsetX] = useState(0)\n const isSwipingRef = useRef(false)\n\n const handleTouchStart = useCallback((e: React.TouchEvent) => {\n if (!getGoeySwipeToDismiss()) return\n const touch = e.touches[0]\n swipeStartRef.current = { x: touch.clientX, y: touch.clientY }\n isSwipingRef.current = false\n }, [])\n\n const handleTouchMove = useCallback((e: React.TouchEvent) => {\n if (!swipeStartRef.current || !getGoeySwipeToDismiss()) return\n const touch = e.touches[0]\n const dx = touch.clientX - swipeStartRef.current.x\n const dy = touch.clientY - swipeStartRef.current.y\n\n // If vertical movement is dominant, cancel swipe tracking\n if (!isSwipingRef.current && Math.abs(dy) > Math.abs(dx) && Math.abs(dy) > 10) {\n swipeStartRef.current = null\n return\n }\n\n // Lock into horizontal swipe once threshold is met\n if (!isSwipingRef.current && Math.abs(dx) > 10) {\n isSwipingRef.current = true\n }\n\n if (isSwipingRef.current) {\n setSwipeOffsetX(dx)\n }\n }, [])\n\n const handleTouchEnd = useCallback(() => {\n if (!getGoeySwipeToDismiss()) {\n swipeStartRef.current = null\n return\n }\n if (isSwipingRef.current && Math.abs(swipeOffsetX) >= SWIPE_THRESHOLD && toastId) {\n sonnerToast.dismiss(toastId)\n }\n swipeStartRef.current = null\n isSwipingRef.current = false\n setSwipeOffsetX(0)\n }, [swipeOffsetX, toastId])\n\n // Compute swipe visual feedback\n const swipeOpacity = swipeOffsetX !== 0\n ? Math.max(0, 1 - Math.abs(swipeOffsetX) / (SWIPE_THRESHOLD * 1.5))\n : 1\n const swipeTranslate = swipeOffsetX !== 0 ? `translateX(${swipeOffsetX}px)` : ''\n\n const renderIcon = () => {\n if (!actionSuccess && icon) return icon\n if (isLoading) return <SpinnerIcon size={18} className={styles.spinnerSpin} />\n const IconComponent = phaseIconMap[effectivePhase]\n return <IconComponent size={18} />\n }\n\n const iconTransition = useMemo(\n () => prefersReducedMotion ? { duration: 0.01 } : { duration: 0.2 },\n [prefersReducedMotion],\n )\n const iconEl = (\n <div className={`${styles.iconWrapper}${classNames?.icon ? ` ${classNames.icon}` : ''}`}>\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={isLoading ? 'spinner' : effectivePhase}\n initial={prefersReducedMotion ? false : { opacity: 0, scale: 0.5 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.5 }}\n transition={iconTransition}\n >\n {renderIcon()}\n </motion.div>\n </AnimatePresence>\n </div>\n )\n const titleEl = (\n <span className={`${styles.title}${classNames?.title ? ` ${classNames.title}` : ''}`}>{effectiveTitle}</span>\n )\n\n // Capture creation time on mount for the timestamp display\n const createdAtRef = useRef(new Date())\n const timestampStr = useMemo(\n () => createdAtRef.current.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit', second: '2-digit' }),\n [],\n )\n\n const iconAndTitle = (\n <>{iconEl}{titleEl}</>\n )\n\n // Memoize base position style so a new object isn't created every render\n const basePositionStyle = useMemo<React.CSSProperties>(\n () => isCenter ? { margin: '0 auto' } : isRight ? { marginLeft: 'auto', transform: 'scaleX(-1)' } : {},\n [isCenter, isRight],\n )\n\n // Build wrapper style: merge position styles with swipe transform/opacity\n const wrapperStyle = useMemo<React.CSSProperties | undefined>(() => {\n if (swipeTranslate) {\n return {\n ...basePositionStyle,\n transform: (basePositionStyle.transform ? basePositionStyle.transform + ' ' : '') + swipeTranslate,\n opacity: swipeOpacity,\n transition: 'none',\n }\n }\n return Object.keys(basePositionStyle).length > 0 ? basePositionStyle : undefined\n }, [basePositionStyle, swipeTranslate, swipeOpacity])\n\n const contentStyle = useMemo(\n () => isCenter ? { textAlign: 'center' } as const : isRight ? { transform: 'scaleX(-1)', textAlign: 'right' } as const : { textAlign: 'left' } as const,\n [isCenter, isRight],\n )\n\n const handleMouseEnter = useCallback(() => { hoveredRef.current = true; setHovered(true) }, [])\n const handleMouseLeave = useCallback(() => { hoveredRef.current = false; setHovered(false) }, [])\n\n return (\n <div ref={wrapperRef} className={`${styles.wrapper}${classNames?.wrapper ? ` ${classNames.wrapper}` : ''}`} style={wrapperStyle} role={effectivePhase === 'error' || effectivePhase === 'warning' ? 'alert' : 'status'} aria-live={effectivePhase === 'error' || effectivePhase === 'warning' ? 'assertive' : 'polite'} aria-atomic=\"true\" onMouseEnter={handleMouseEnter} onMouseLeave={handleMouseLeave} onTouchStart={handleTouchStart} onTouchMove={handleTouchMove} onTouchEnd={handleTouchEnd} data-center={isCenter || undefined} data-theme={theme}>\n {/* SVG background — overflow visible, path controls shape */}\n <svg\n className={styles.blobSvg}\n aria-hidden\n >\n <path\n ref={pathRef}\n fill={fillColor}\n stroke={borderColor || 'none'}\n strokeWidth={borderColor ? (borderWidth ?? 1.5) : 0}\n />\n </svg>\n\n {/* Content — un-flip so text reads normally */}\n <div\n ref={contentRef}\n className={`${styles.content} ${showBody ? styles.contentExpanded : styles.contentCompact}${classNames?.content ? ` ${classNames.content}` : ''}`}\n style={contentStyle}\n >\n <div ref={headerRef} className={`${styles.header} ${titleColorMap[effectivePhase]}${classNames?.header ? ` ${classNames.header}` : ''}`}>\n {iconAndTitle}\n {/* No-body toasts: timestamp inline after the title (hidden after action success) */}\n {!hasDescription && !hasAction && !actionSuccess && <span className={styles.timestamp}>{timestampStr}</span>}\n </div>\n\n <AnimatePresence>\n {showBody && hasDescription && !dismissing && (\n <motion.div\n key=\"description\"\n className={`${styles.description}${classNames?.description ? ` ${classNames.description}` : ''}`}\n style={{ textAlign: 'left' }}\n initial={prefersReducedMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0.01 } : { duration: 0.35, ease: [0.4, 0, 0.2, 1] }}\n >\n <span className={styles.timestamp} style={{ float: 'right', marginLeft: 10, marginTop: 3, paddingLeft: 0 }}>{timestampStr}</span>\n {effectiveDescription}\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* Body toasts without description: timestamp on its own line */}\n <AnimatePresence>\n {showBody && !hasDescription && hasAction && !dismissing && (\n <motion.div\n key=\"timestamp-body\"\n className={styles.timestamp}\n style={{ textAlign: 'right', marginTop: 8, paddingLeft: 0 }}\n initial={prefersReducedMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0.01 } : { duration: 0.35, ease: [0.4, 0, 0.2, 1] }}\n >\n {timestampStr}\n </motion.div>\n )}\n </AnimatePresence>\n\n <AnimatePresence>\n {showBody && hasAction && effectiveAction && !dismissing && (\n <motion.div\n key=\"action\"\n className={`${styles.actionWrapper}${classNames?.actionWrapper ? ` ${classNames.actionWrapper}` : ''}`}\n initial={prefersReducedMotion ? false : { opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={prefersReducedMotion ? { duration: 0.01 } : { duration: 0.35, ease: [0.4, 0, 0.2, 1], delay: 0.1 }}\n >\n <button\n className={`${styles.actionButton} ${actionColorMap[effectivePhase]}${classNames?.actionButton ? ` ${classNames.actionButton}` : ''}`}\n onClick={handleActionClick}\n type=\"button\"\n aria-label={effectiveAction.label}\n >\n {effectiveAction.label}\n </button>\n </motion.div>\n )}\n </AnimatePresence>\n\n {showProgress && (\n <div\n key={progressKey}\n className={`${styles.progressWrapper}${hovered || containerHovered ? ` ${styles.progressPaused}` : ''}`}\n style={{ opacity: showBody && !actionSuccess ? 1 : 0 }}\n >\n <div\n className={`${styles.progressBar} ${progressColorMap[effectivePhase]}`}\n style={{ '--goey-progress-duration': `${progressDelayRef.current || (timing?.displayDuration ?? DEFAULT_DISPLAY_DURATION)}ms` } as React.CSSProperties}\n />\n </div>\n )}\n </div>\n </div>\n )\n}\n","import { Component, type ReactNode, type ErrorInfo } from 'react'\n\ninterface Props {\n children: ReactNode\n}\n\ninterface State {\n hasError: boolean\n}\n\nexport class ToastErrorBoundary extends Component<Props, State> {\n state: State = { hasError: false }\n\n static getDerivedStateFromError(): State {\n return { hasError: true }\n }\n\n componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n if (process.env.NODE_ENV !== 'production') {\n console.error('[GoeyToast] Rendering error:', error, errorInfo)\n }\n }\n\n render() {\n if (this.state.hasError) {\n return null\n }\n return this.props.children\n }\n}\n","import { useState, useEffect, useRef, type ReactNode } from 'react'\nimport { toast } from 'sonner'\nimport { GoeyToast } from './components/GoeyToast'\nimport { ToastErrorBoundary } from './components/ToastErrorBoundary'\nimport { getGoeyVisibleToasts, getGoeyMaxQueue, getGoeyQueueOverflow, announce, type AriaLivePoliteness } from './context'\nimport type {\n GoeyToastOptions,\n GoeyPromiseData,\n GoeyToastPhase,\n GoeyToastType,\n GoeyToastAction,\n GoeyToastClassNames,\n GoeyToastTimings,\n GoeyToastUpdateOptions,\n DismissFilter,\n} from './types'\nimport type { AnimationPresetName } from './presets'\n\nconst DEFAULT_EXPANDED_DURATION = 4000\n\nfunction getAnnouncePoliteness(type: GoeyToastType): AriaLivePoliteness {\n return type === 'error' || type === 'warning' ? 'assertive' : 'polite'\n}\n\nfunction buildAnnouncementMessage(title: string, description?: ReactNode): string {\n if (!description || typeof description !== 'string') return title\n return `${title}: ${description}`\n}\n\n// ---------------------------------------------------------------------------\n// Toast queue — limits concurrent toasts to `visibleToasts` (default 3).\n// Excess toasts wait in a FIFO queue and fire when a slot opens.\n// ---------------------------------------------------------------------------\nconst _activeIds = new Map<string | number, GoeyToastType>()\nconst _queue: Array<{ id: string | number; type: GoeyToastType; create: () => void }> = []\n\n// ---------------------------------------------------------------------------\n// Callback registry — stores onDismiss/onAutoClose per toast ID so they can\n// be invoked when the toast unmounts. The _autoCloseFlags set tracks toasts\n// whose dismiss was triggered by the auto-close timer (not manual action).\n// ---------------------------------------------------------------------------\nconst _toastCallbacks = new Map<string | number, {\n onDismiss?: (id: string | number) => void\n onAutoClose?: (id: string | number) => void\n}>()\nconst _autoCloseFlags = new Set<string | number>()\nconst _manualDismissFlags = new Set<string | number>()\n\n/** @internal Mark a toast as being auto-closed (timer-based dismiss). */\nexport function _markAutoClose(id: string | number) {\n _autoCloseFlags.add(id)\n}\n\n/** @internal Reset queue state — exported for tests only. */\nexport function _resetQueue() {\n _activeIds.clear()\n _queue.length = 0\n _toastUpdateListeners.clear()\n _toastCallbacks.clear()\n _autoCloseFlags.clear()\n _manualDismissFlags.clear()\n}\n\n/** @internal Get the most recently created active toast ID — used by Escape key handler. */\nexport function _getMostRecentActiveId(): string | number | undefined {\n let last: string | number | undefined\n for (const id of _activeIds.keys()) last = id\n return last\n}\n\nfunction _processQueue() {\n const max = getGoeyVisibleToasts()\n while (_queue.length > 0 && _activeIds.size < max) {\n const next = _queue.shift()!\n _activeIds.set(next.id, next.type)\n next.create()\n }\n}\n\nfunction _enqueue(entry: { id: string | number; type: GoeyToastType; create: () => void }): boolean {\n const maxQueue = getGoeyMaxQueue()\n const overflow = getGoeyQueueOverflow()\n if (_queue.length >= maxQueue) {\n if (overflow === 'drop-newest') return false\n // drop-oldest: remove the oldest queued item\n _queue.shift()\n }\n _queue.push(entry)\n return true\n}\n\nfunction _onToastDismissed(id: string | number) {\n if (!_activeIds.delete(id)) return\n _toastUpdateListeners.delete(id)\n\n // Invoke callbacks — auto-close is true if explicitly flagged OR if not manually dismissed\n const cbs = _toastCallbacks.get(id)\n if (cbs) {\n const isAutoClose = _autoCloseFlags.has(id) || !_manualDismissFlags.has(id)\n if (isAutoClose && cbs.onAutoClose) {\n try { cbs.onAutoClose(id) } catch { /* callback errors must not break queue */ }\n }\n if (cbs.onDismiss) {\n try { cbs.onDismiss(id) } catch { /* callback errors must not break queue */ }\n }\n _toastCallbacks.delete(id)\n }\n _autoCloseFlags.delete(id)\n _manualDismissFlags.delete(id)\n\n _processQueue()\n}\n\n// ---------------------------------------------------------------------------\n// Toast update store — allows in-place updates to active toasts.\n// Each toast wrapper subscribes to its own ID; calling update() stores\n// partial new props and notifies the listener to re-render.\n// ---------------------------------------------------------------------------\nconst _toastUpdateListeners = new Map<string | number, (opts: GoeyToastUpdateOptions) => void>()\n\nfunction updateGoeyToast(id: string | number, options: GoeyToastUpdateOptions) {\n const listener = _toastUpdateListeners.get(id)\n if (listener) {\n listener(options)\n // Update the type in _activeIds if the type changed\n if (options.type !== undefined && _activeIds.has(id)) {\n _activeIds.set(id, options.type)\n }\n // Announce updated content to screen readers\n if (options.title !== undefined) {\n announce(\n buildAnnouncementMessage(options.title, options.description),\n options.type ? getAnnouncePoliteness(options.type) : 'polite',\n )\n }\n }\n}\n\nfunction GoeyToastWrapper({\n initialPhase,\n title: initialTitle,\n type: initialType,\n description: initialDescription,\n action: initialAction,\n icon,\n classNames,\n fillColor,\n borderColor,\n borderWidth,\n timing,\n preset,\n spring,\n bounce,\n showProgress,\n toastId,\n activeId,\n onDismiss,\n onAutoClose,\n}: {\n initialPhase: GoeyToastPhase\n title: string\n type: GoeyToastType\n description?: ReactNode\n action?: GoeyToastAction\n icon?: ReactNode\n classNames?: GoeyToastClassNames\n fillColor?: string\n borderColor?: string\n borderWidth?: number\n timing?: GoeyToastTimings\n preset?: AnimationPresetName\n spring?: boolean\n bounce?: number\n showProgress?: boolean\n toastId?: string | number\n activeId: string | number\n onDismiss?: (id: string | number) => void\n onAutoClose?: (id: string | number) => void\n}) {\n // Register callbacks so _onToastDismissed can invoke them on unmount\n useEffect(() => {\n if (onDismiss || onAutoClose) {\n _toastCallbacks.set(activeId, { onDismiss, onAutoClose })\n }\n }, [activeId, onDismiss, onAutoClose])\n\n const [title, setTitle] = useState(initialTitle)\n const [type, setType] = useState(initialType)\n const [phase, setPhase] = useState<GoeyToastPhase>(initialPhase)\n const [description, setDescription] = useState(initialDescription)\n const [action, setAction] = useState(initialAction)\n const [currentIcon, setCurrentIcon] = useState<ReactNode | undefined>(icon)\n\n // Subscribe to in-place updates for this toast's ID.\n useEffect(() => {\n const handleUpdate = (opts: GoeyToastUpdateOptions) => {\n if (opts.title !== undefined) setTitle(opts.title)\n if (opts.description !== undefined) setDescription(opts.description)\n if (opts.type !== undefined) {\n setType(opts.type)\n setPhase(opts.type)\n }\n if (opts.action !== undefined) setAction(opts.action)\n if ('icon' in opts) setCurrentIcon(opts.icon ?? undefined)\n }\n _toastUpdateListeners.set(activeId, handleUpdate)\n return () => {\n _toastUpdateListeners.delete(activeId)\n }\n }, [activeId])\n\n // Guarantee the queue slot is freed when this toast unmounts from Sonner's DOM.\n // Uses a mounted ref + delayed check to survive React StrictMode's dev-only\n // double-mount cycle (mount → unmount → remount) without prematurely freeing the slot.\n const mountedRef = useRef(true)\n useEffect(() => {\n mountedRef.current = true\n return () => {\n mountedRef.current = false\n setTimeout(() => {\n if (!mountedRef.current) _onToastDismissed(activeId)\n }, 100)\n }\n }, [activeId])\n\n return (\n <ToastErrorBoundary>\n <GoeyToast\n title={title}\n description={description}\n type={type}\n action={action}\n icon={currentIcon}\n phase={phase}\n classNames={classNames}\n fillColor={fillColor}\n borderColor={borderColor}\n borderWidth={borderWidth}\n timing={timing}\n preset={preset}\n spring={spring}\n bounce={bounce}\n showProgress={showProgress}\n toastId={toastId}\n />\n </ToastErrorBoundary>\n )\n}\n\nfunction PromiseToastWrapper<T>({\n promise,\n data,\n toastId,\n}: {\n promise: Promise<T>\n data: GoeyPromiseData<T>\n toastId: string | number\n}) {\n const [phase, setPhase] = useState<GoeyToastPhase>('loading')\n const [title, setTitle] = useState(data.loading)\n const [description, setDescription] = useState<ReactNode | undefined>(data.description?.loading)\n const [action, setAction] = useState<GoeyToastAction | undefined>(undefined)\n\n // Register callbacks so _onToastDismissed can invoke them on unmount\n useEffect(() => {\n if (data.onDismiss || data.onAutoClose) {\n _toastCallbacks.set(toastId, { onDismiss: data.onDismiss, onAutoClose: data.onAutoClose })\n }\n }, [toastId, data.onDismiss, data.onAutoClose])\n\n // Guarantee the queue slot is freed when this toast unmounts from Sonner's DOM.\n const mountedRef = useRef(true)\n useEffect(() => {\n mountedRef.current = true\n return () => {\n mountedRef.current = false\n setTimeout(() => {\n if (!mountedRef.current) _onToastDismissed(toastId)\n }, 100)\n }\n }, [toastId])\n\n useEffect(() => {\n const resetDuration = (hasExpandedContent: boolean) => {\n const baseDuration = data.timing?.displayDuration ?? (hasExpandedContent ? DEFAULT_EXPANDED_DURATION : undefined)\n const collapseDurMs = 0.9 * 1000\n const duration = baseDuration != null && hasExpandedContent ? baseDuration + collapseDurMs : baseDuration\n if (duration != null) {\n toast.custom(() => (\n <PromiseToastWrapper promise={promise} data={data} toastId={toastId} />\n ), { id: toastId, duration })\n }\n }\n\n promise\n .then((result) => {\n const desc = typeof data.description?.success === 'function'\n ? data.description.success(result)\n : data.description?.success\n const resolvedTitle = typeof data.success === 'function'\n ? data.success(result)\n : data.success\n setTitle(resolvedTitle)\n setDescription(desc)\n setAction(data.action?.success)\n setPhase('success')\n resetDuration(Boolean(desc || data.action?.success))\n announce(buildAnnouncementMessage(resolvedTitle, desc), 'polite')\n })\n .catch((err) => {\n const desc = typeof data.description?.error === 'function'\n ? data.description.error(err)\n : data.description?.error\n const resolvedTitle = typeof data.error === 'function' ? data.error(err) : data.error\n setTitle(resolvedTitle)\n setDescription(desc)\n setAction(data.action?.error)\n setPhase('error')\n resetDuration(Boolean(desc || data.action?.error))\n announce(buildAnnouncementMessage(resolvedTitle, desc), 'assertive')\n })\n }, [])\n\n return (\n <ToastErrorBoundary>\n <GoeyToast\n title={title}\n description={description}\n type={phase === 'loading' ? 'info' : (phase as GoeyToastType)}\n action={action}\n phase={phase}\n classNames={data.classNames}\n fillColor={data.fillColor}\n borderColor={data.borderColor}\n borderWidth={data.borderWidth}\n timing={data.timing}\n preset={data.preset}\n spring={data.spring}\n bounce={data.bounce}\n />\n </ToastErrorBoundary>\n )\n}\n\nfunction createGoeyToast(\n title: string,\n type: GoeyToastType,\n options?: GoeyToastOptions\n) {\n const hasExpandedContent = Boolean(options?.description || options?.action)\n const baseDuration = options?.timing?.displayDuration ?? options?.duration ?? (options?.description ? DEFAULT_EXPANDED_DURATION : undefined)\n // Expanded toasts: Infinity duration, component controls dismiss (hover re-expand support)\n // Simple toasts: normal duration\n const duration = hasExpandedContent ? Infinity : baseDuration\n\n const toastId = options?.id ?? Math.random().toString(36).slice(2)\n\n const create = () => {\n toast.custom(\n () => (\n <GoeyToastWrapper\n initialPhase={type}\n title={title}\n type={type}\n description={options?.description}\n action={options?.action}\n icon={options?.icon}\n classNames={options?.classNames}\n fillColor={options?.fillColor}\n borderColor={options?.borderColor}\n borderWidth={options?.borderWidth}\n timing={options?.timing}\n preset={options?.preset}\n spring={options?.spring}\n bounce={options?.bounce}\n showProgress={options?.showProgress}\n toastId={hasExpandedContent ? toastId : undefined}\n activeId={toastId}\n onDismiss={options?.onDismiss}\n onAutoClose={options?.onAutoClose}\n />\n ),\n {\n duration,\n id: toastId,\n }\n )\n }\n\n // Register callbacks before creating the toast so they're available on unmount\n if (options?.onDismiss || options?.onAutoClose) {\n _toastCallbacks.set(toastId, { onDismiss: options.onDismiss, onAutoClose: options.onAutoClose })\n }\n\n // Announce to screen readers via the persistent ARIA live region\n announce(\n buildAnnouncementMessage(title, options?.description),\n getAnnouncePoliteness(type),\n )\n\n if (_activeIds.size < getGoeyVisibleToasts()) {\n _activeIds.set(toastId, type)\n create()\n } else {\n _enqueue({ id: toastId, type, create })\n }\n\n return toastId\n}\n\nfunction dismissGoeyToast(idOrFilter?: string | number | DismissFilter) {\n if (idOrFilter != null && typeof idOrFilter === 'object') {\n // Dismiss by type filter\n const filterTypes = Array.isArray(idOrFilter.type) ? idOrFilter.type : [idOrFilter.type]\n const typesSet = new Set<GoeyToastType>(filterTypes)\n\n // Remove matching toasts from the queue\n for (let i = _queue.length - 1; i >= 0; i--) {\n if (typesSet.has(_queue[i].type)) {\n _queue.splice(i, 1)\n }\n }\n\n // Dismiss matching active toasts via Sonner\n for (const [id, toastType] of _activeIds) {\n if (typesSet.has(toastType)) {\n _manualDismissFlags.add(id)\n toast.dismiss(id)\n }\n }\n } else if (idOrFilter != null) {\n // Dismiss by specific ID\n const idx = _queue.findIndex(q => q.id === idOrFilter)\n if (idx !== -1) {\n _queue.splice(idx, 1)\n return\n }\n // Mark as manual dismiss so onAutoClose is NOT called\n _manualDismissFlags.add(idOrFilter)\n // Dismiss from Sonner — unmount cleanup in GoeyToastWrapper handles activeIds + queue\n toast.dismiss(idOrFilter)\n } else {\n // Dismiss all: mark all active as manual dismiss, clear queue and dismiss\n for (const id of _activeIds.keys()) {\n _manualDismissFlags.add(id)\n }\n _queue.length = 0\n _activeIds.clear()\n toast.dismiss()\n }\n}\n\nexport const goeyToast = Object.assign(\n (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'default', options),\n {\n success: (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'success', options),\n error: (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'error', options),\n warning: (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'warning', options),\n info: (title: string, options?: GoeyToastOptions) =>\n createGoeyToast(title, 'info', options),\n promise: <T,>(promise: Promise<T>, data: GoeyPromiseData<T>) => {\n const id = Math.random().toString(36).slice(2)\n\n // Announce loading state to screen readers\n announce(buildAnnouncementMessage(data.loading, data.description?.loading), 'polite')\n\n // Register callbacks before creating the toast\n if (data.onDismiss || data.onAutoClose) {\n _toastCallbacks.set(id, { onDismiss: data.onDismiss, onAutoClose: data.onAutoClose })\n }\n\n const create = () => {\n toast.custom(() => (\n <PromiseToastWrapper promise={promise} data={data} toastId={id} />\n ), {\n id,\n duration: (data.timing?.displayDuration != null || data.description) ? Infinity : undefined,\n })\n }\n\n if (_activeIds.size < getGoeyVisibleToasts()) {\n _activeIds.set(id, 'info')\n create()\n } else {\n _enqueue({ id, type: 'info', create })\n }\n\n return id\n },\n dismiss: dismissGoeyToast,\n update: updateGoeyToast,\n }\n)\n","import { useEffect, useState, useCallback } from 'react'\nimport { subscribeAnnouncements } from '../context'\n\n/**\n * Persistent ARIA live region that announces toast notifications to screen readers.\n *\n * Two regions are rendered (polite + assertive) so the correct politeness level\n * is used per toast type. Both regions are visually hidden but remain in the DOM\n * so screen readers can detect content changes reliably.\n *\n * Messages are cleared after a short delay to avoid stale announcements\n * accumulating in the live region.\n */\nexport function AriaLiveAnnouncer() {\n const [politeMessage, setPoliteMessage] = useState('')\n const [assertiveMessage, setAssertiveMessage] = useState('')\n\n const handleAnnouncement = useCallback(({ message, politeness }: { message: string; politeness: 'polite' | 'assertive' }) => {\n if (politeness === 'assertive') {\n // Clear first to ensure re-announcement of identical messages\n setAssertiveMessage('')\n requestAnimationFrame(() => setAssertiveMessage(message))\n } else {\n setPoliteMessage('')\n requestAnimationFrame(() => setPoliteMessage(message))\n }\n }, [])\n\n useEffect(() => {\n return subscribeAnnouncements(handleAnnouncement)\n }, [handleAnnouncement])\n\n // Clear messages after screen reader has had time to announce them\n useEffect(() => {\n if (!politeMessage) return\n const t = setTimeout(() => setPoliteMessage(''), 7000)\n return () => clearTimeout(t)\n }, [politeMessage])\n\n useEffect(() => {\n if (!assertiveMessage) return\n const t = setTimeout(() => setAssertiveMessage(''), 7000)\n return () => clearTimeout(t)\n }, [assertiveMessage])\n\n const visuallyHidden: React.CSSProperties = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n }\n\n return (\n <>\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style={visuallyHidden}\n >\n {politeMessage}\n </div>\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n style={visuallyHidden}\n >\n {assertiveMessage}\n </div>\n </>\n )\n}\n","import { useEffect } from 'react'\nimport { Toaster } from 'sonner'\nimport type { GoeyToasterProps } from '../types'\nimport { animationPresets } from '../presets'\nimport { setGoeyPosition, setGoeyDir, setGoeySpring, setGoeyBounce, setGoeyVisibleToasts, setContainerHovered, setGoeySwipeToDismiss, setGoeyCloseOnEscape, setGoeyTheme, setGoeyMaxQueue, setGoeyQueueOverflow, setGoeyShowProgress } from '../context'\nimport { goeyToast, _getMostRecentActiveId } from '../goey-toast'\nimport { AriaLiveAnnouncer } from './AriaLiveAnnouncer'\n\nexport function GoeyToaster({\n position = 'bottom-right',\n duration,\n gap = 14,\n offset = '24px',\n theme = 'light',\n toastOptions,\n expand,\n closeButton,\n richColors,\n visibleToasts,\n dir,\n preset,\n spring,\n bounce,\n swipeToDismiss = true,\n closeOnEscape = true,\n maxQueue = Infinity,\n queueOverflow = 'drop-oldest',\n showProgress = false,\n}: GoeyToasterProps) {\n const presetConfig = preset ? animationPresets[preset] : undefined\n const resolvedSpring = spring ?? presetConfig?.spring ?? true\n const resolvedBounce = bounce ?? presetConfig?.bounce\n\n useEffect(() => {\n setGoeyPosition(position)\n }, [position])\n\n useEffect(() => {\n setGoeyDir(dir ?? 'ltr')\n }, [dir])\n\n useEffect(() => {\n setGoeyTheme(theme)\n }, [theme])\n\n useEffect(() => {\n setGoeySpring(resolvedSpring)\n }, [resolvedSpring])\n\n useEffect(() => {\n setGoeyBounce(resolvedBounce)\n }, [resolvedBounce])\n\n useEffect(() => {\n setGoeySwipeToDismiss(swipeToDismiss)\n }, [swipeToDismiss])\n\n useEffect(() => {\n setGoeyCloseOnEscape(closeOnEscape)\n }, [closeOnEscape])\n\n useEffect(() => {\n if (!closeOnEscape) return\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n const recentId = _getMostRecentActiveId()\n if (recentId != null) {\n goeyToast.dismiss(recentId)\n }\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [closeOnEscape])\n\n useEffect(() => {\n setGoeyVisibleToasts(visibleToasts ?? 3)\n }, [visibleToasts])\n\n useEffect(() => {\n setGoeyMaxQueue(maxQueue)\n }, [maxQueue])\n\n useEffect(() => {\n setGoeyQueueOverflow(queueOverflow)\n }, [queueOverflow])\n\n useEffect(() => {\n setGoeyShowProgress(showProgress)\n }, [showProgress])\n\n // Detect hover on the Sonner container and broadcast to all GoeyToast instances.\n // Uses Sonner's `data-expanded` attribute (set per-toast <li>) as the hover signal\n // rather than raw mouseenter/mouseleave on the <ol>. This is more reliable because\n // Sonner manages it with onMouseEnter + onMouseMove + onMouseLeave, and it survives\n // <ol> remounts (all toasts dismissed then new ones appear).\n useEffect(() => {\n let expandObs: MutationObserver | null = null\n let currentOl: HTMLElement | null = null\n\n const syncFromExpanded = (ol: HTMLElement) => {\n const anyExpanded = ol.querySelector('[data-sonner-toast][data-expanded=\"true\"]') !== null\n setContainerHovered(anyExpanded)\n }\n\n const attach = (ol: HTMLElement) => {\n if (ol === currentOl) return\n expandObs?.disconnect()\n currentOl = ol\n expandObs = new MutationObserver(() => syncFromExpanded(ol))\n expandObs.observe(ol, { attributes: true, attributeFilter: ['data-expanded'], subtree: true })\n syncFromExpanded(ol)\n }\n\n const el = document.querySelector<HTMLElement>('[data-sonner-toaster]')\n if (el) attach(el)\n\n // Re-discover if the <ol> is remounted (e.g. all toasts dismissed then new ones appear).\n // Debounce via rAF to coalesce rapid DOM mutations (e.g. multiple toasts mounting).\n let bodyRafId = 0\n const bodyObs = new MutationObserver(() => {\n if (bodyRafId) return\n bodyRafId = requestAnimationFrame(() => {\n bodyRafId = 0\n const found = document.querySelector<HTMLElement>('[data-sonner-toaster]')\n if (found) {\n attach(found)\n } else if (currentOl) {\n expandObs?.disconnect()\n currentOl = null\n setContainerHovered(false)\n }\n })\n })\n bodyObs.observe(document.body, { childList: true, subtree: true })\n\n return () => {\n if (bodyRafId) cancelAnimationFrame(bodyRafId)\n bodyObs.disconnect()\n expandObs?.disconnect()\n setContainerHovered(false)\n }\n }, [])\n\n useEffect(() => {\n if (process.env.NODE_ENV !== 'development') return\n\n const el = document.createElement('div')\n el.setAttribute('data-goey-toast-css', '')\n el.style.position = 'absolute'\n el.style.width = '0'\n el.style.height = '0'\n el.style.overflow = 'hidden'\n el.style.pointerEvents = 'none'\n document.body.appendChild(el)\n\n const value = getComputedStyle(el).getPropertyValue('--goey-toast')\n document.body.removeChild(el)\n\n if (!value) {\n console.warn(\n '[goey-toast] Styles not found. Make sure to import the CSS:\\n\\n' +\n ' import \"goey-toast/styles.css\";\\n'\n )\n }\n }, [])\n\n return (\n <>\n <Toaster\n position={position}\n duration={duration}\n gap={gap}\n offset={offset}\n theme={theme}\n toastOptions={{ unstyled: true, ...toastOptions }}\n expand={expand}\n closeButton={closeButton}\n richColors={richColors}\n visibleToasts={99}\n dir={dir}\n />\n <AriaLiveAnnouncer />\n </>\n )\n}\n"]}
|