{"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/gooey-styles.ts","../src/components/GooeyToast.tsx","../src/components/ToastErrorBoundary.tsx","../src/gooey-toast.tsx","../src/components/AriaLiveAnnouncer.tsx","../src/components/GooeyToaster.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 setGooeyTheme(theme: 'light' | 'dark') {\n  _theme = theme\n}\n\nexport function getGooeyTheme(): 'light' | 'dark' {\n  return _theme\n}\n\nexport function setGooeyPosition(position: ToasterProps['position']) {\n  _position = position\n}\n\nexport function getGooeyPosition() {\n  return _position\n}\n\nexport function setGooeyDir(dir: 'ltr' | 'rtl') {\n  _dir = dir\n}\n\nexport function getGooeyDir(): 'ltr' | 'rtl' {\n  return _dir\n}\n\nexport function setGooeySpring(spring: boolean) {\n  _spring = spring\n}\n\nexport function getGooeySpring() {\n  return _spring\n}\n\nexport function setGooeyBounce(bounce: number | undefined) {\n  _bounce = bounce\n}\n\nexport function getGooeyBounce() {\n  return _bounce\n}\n\nlet _visibleToasts = 3\n\nexport function setGooeyVisibleToasts(n: number) {\n  _visibleToasts = n\n}\n\nexport function getGooeyVisibleToasts() {\n  return _visibleToasts\n}\n\n// ---------------------------------------------------------------------------\n// Container hover — broadcast from GooeyToaster to all mounted GooeyToast instances\n// so timers pause and re-expand triggers correctly when hovering the stack.\n// ---------------------------------------------------------------------------\nlet _swipeToDismiss = true\n\nexport function setGooeySwipeToDismiss(enabled: boolean) {\n  _swipeToDismiss = enabled\n}\n\nexport function getGooeySwipeToDismiss() {\n  return _swipeToDismiss\n}\n\nlet _closeOnEscape = true\n\nexport function setGooeyCloseOnEscape(enabled: boolean) {\n  _closeOnEscape = enabled\n}\n\nexport function getGooeyCloseOnEscape() {\n  return _closeOnEscape\n}\n\nlet _maxQueue = Infinity\n\nexport function setGooeyMaxQueue(n: number) {\n  _maxQueue = n\n}\n\nexport function getGooeyMaxQueue() {\n  return _maxQueue\n}\n\nlet _queueOverflow: 'drop-oldest' | 'drop-newest' = 'drop-oldest'\n\nexport function setGooeyQueueOverflow(strategy: 'drop-oldest' | 'drop-newest') {\n  _queueOverflow = strategy\n}\n\nexport function getGooeyQueueOverflow() {\n  return _queueOverflow\n}\n\nlet _showProgress = false\n\nexport function setGooeyShowProgress(show: boolean) {\n  _showProgress = show\n}\n\nexport function getGooeyShowProgress() {\n  return _showProgress\n}\n\nlet _showTimestamp = true\n\nexport function setGooeyShowTimestamp(show: boolean) {\n  _showTimestamp = show\n}\n\nexport function getGooeyShowTimestamp() {\n  return _showTimestamp\n}\n\nlet _closeButton: boolean | 'top-left' | 'top-right' = false\n\nexport function setGooeyCloseButton(value: boolean | 'top-left' | 'top-right') {\n  _closeButton = value\n}\n\nexport function getGooeyCloseButton(): boolean | 'top-left' | 'top-right' {\n  return _closeButton\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: 'gooey-spinnerSpin',\n  wrapper: 'gooey-wrapper',\n  blobSvg: 'gooey-blobSvg',\n  content: 'gooey-content',\n  contentCompact: 'gooey-contentCompact',\n  contentExpanded: 'gooey-contentExpanded',\n  header: 'gooey-header',\n  iconWrapper: 'gooey-iconWrapper',\n  title: 'gooey-title',\n  titleDefault: 'gooey-titleDefault',\n  titleSuccess: 'gooey-titleSuccess',\n  titleError: 'gooey-titleError',\n  titleWarning: 'gooey-titleWarning',\n  titleInfo: 'gooey-titleInfo',\n  titleLoading: 'gooey-titleLoading',\n  description: 'gooey-description',\n  actionWrapper: 'gooey-actionWrapper',\n  actionButton: 'gooey-actionButton',\n  actionDefault: 'gooey-actionDefault',\n  actionSuccess: 'gooey-actionSuccess',\n  actionError: 'gooey-actionError',\n  actionWarning: 'gooey-actionWarning',\n  actionInfo: 'gooey-actionInfo',\n  progressWrapper: 'gooey-progressWrapper',\n  progressBar: 'gooey-progressBar',\n  progressDefault: 'gooey-progressDefault',\n  progressSuccess: 'gooey-progressSuccess',\n  progressError: 'gooey-progressError',\n  progressWarning: 'gooey-progressWarning',\n  progressInfo: 'gooey-progressInfo',\n  progressPaused: 'gooey-progressPaused',\n  timestamp: 'gooey-timestamp',\n  closeButton: 'gooey-closeButton',\n  closeButtonRight: 'gooey-closeButtonRight',\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 { GooeyToastAction, GooeyToastClassNames, GooeyToastPhase, GooeyToastTimings, GooeyToastType } from '../types'\nimport type { AnimationPresetName } from '../presets'\nimport { animationPresets } from '../presets'\nimport { getGooeyPosition, getGooeyDir, getGooeySpring, getGooeyBounce, getGooeySwipeToDismiss, getGooeyTheme, getGooeyShowProgress, getGooeyCloseButton, subscribeContainerHovered, getContainerHovered, getGooeyShowTimestamp } from '../context'\nimport { DefaultIcon, SuccessIcon, ErrorIcon, WarningIcon, InfoIcon, SpinnerIcon } from '../icons'\nimport { usePrefersReducedMotion } from '../usePrefersReducedMotion'\nimport { styles } from './gooey-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 GooeyToastProps {\n  title: string\n  description?: ReactNode\n  type: GooeyToastType\n  action?: GooeyToastAction\n  icon?: ReactNode\n  phase: GooeyToastPhase\n  classNames?: GooeyToastClassNames\n  fillColor?: string\n  borderColor?: string\n  borderWidth?: number\n  timing?: GooeyToastTimings\n  preset?: AnimationPresetName\n  spring?: boolean\n  bounce?: number\n  showProgress?: boolean\n  showTimestamp?: boolean\n  toastId?: string | number\n}\n\nconst phaseIconMap: Record<Exclude<GooeyToastPhase, '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<GooeyToastPhase, 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<GooeyToastPhase, 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<GooeyToastPhase, 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 GooeyToast 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    const observeOptions: MutationObserverInit = {\n      attributes: true,\n      attributeFilter: ['style', 'data-visible'],\n      subtree: true,\n      childList: true,\n    }\n    // Correct offsets synchronously within the MutationObserver microtask\n    // (which runs before paint) so Sonner's stale --offset is overwritten in\n    // the same frame it was written. This eliminates the 1-frame stale-offset\n    // flash that previously forced us to disable CSS transitions. With the\n    // stale frame gone, transitions can stay enabled for smooth stack motion.\n    //\n    // We disconnect while applying our own style writes so they don't\n    // re-trigger the observer (avoiding an infinite loop), then reconnect.\n    const observer = new MutationObserver(() => {\n      observer.disconnect()\n      try {\n        for (const cb of callbacks) {\n          cb()\n        }\n      } finally {\n        observer.observe(ol, observeOptions)\n      }\n    })\n    observer.observe(ol, observeOptions)\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 * Corrections are applied synchronously by the shared observer (before paint),\n * so CSS transitions on [data-expanded=\"true\"] can stay enabled and animate\n * the stack movement smoothly without a stale-offset flash.\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  // 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    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\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 GooeyToast: FC<GooeyToastProps> = ({\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  showTimestamp: showTimestampProp,\n  showProgress: showProgressProp,\n  toastId,\n}) => {\n  const theme = getGooeyTheme()\n  const closeButtonSetting = getGooeyCloseButton()\n  const showCloseButton = closeButtonSetting !== false\n  const fillColor = fillColorProp ?? (theme === 'dark' ? '#1a1a1a' : '#ffffff')\n  const position = getGooeyPosition()\n  const dir = getGooeyDir()\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 ?? getGooeySpring()\n  const bounceVal = bounceProp ?? presetConfig?.bounce ?? getGooeyBounce() ?? 0.4\n  const showProgress = showProgressProp ?? getGooeyShowProgress()\n  const showTimestamp = showTimestampProp ?? getGooeyShowTimestamp()\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: GooeyToastPhase = 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 = getGooeyPosition()\n    const d = getGooeyDir()\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    // Synchronous sync: corrects --initial-height AND --offset every time Sonner\n    // overwrites them with stale values from its React state. The shared observer\n    // runs the correction before paint, so CSS transitions stay enabled and the\n    // stack movement animates smoothly without a stale-offset overlap flash.\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 (!getGooeySwipeToDismiss()) 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 || !getGooeySwipeToDismiss()) 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 (!getGooeySwipeToDismiss()) {\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      {/* Close button — shown on hover when enabled via GooeyToaster closeButton prop */}\n      {showCloseButton && effectivePhase !== 'loading' && (\n        <button\n          className={`${styles.closeButton}${(isRight ? closeButtonSetting !== 'top-right' : closeButtonSetting === 'top-right') ? ` ${styles.closeButtonRight}` : ''}`}\n          aria-label=\"Close toast\"\n          type=\"button\"\n          style={{\n            background: fillColor,\n            borderColor: borderColor || 'transparent',\n            borderWidth: borderColor ? (borderWidth ?? 1.5) : 0,\n            boxShadow: borderColor ? 'none' : '0 1px 4px rgba(0, 0, 0, 0.2)',\n            ...(isCenter && closeButtonSetting !== 'top-right' ? { top: 6, left: -1 } : {}),\n          }}\n          onClick={(e) => {\n            e.stopPropagation()\n            const id = toastId\n            if (id != null) sonnerToast.dismiss(id)\n          }}\n        >\n          <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n            <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n            <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n          </svg>\n        </button>\n      )}\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 && showTimestamp && <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              <div style={{ display: 'flex', alignItems: 'flex-start', gap: '10px' }}>\n                <div style={{ flex: 1, minWidth: 0 }}>{effectiveDescription}</div>\n                {showTimestamp && <span className={styles.timestamp}>{timestampStr}</span>}\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n\n        {/* Body toasts without description: timestamp on its own line */}\n        <AnimatePresence>\n          {showBody && !hasDescription && hasAction && !dismissing && showTimestamp && (\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={{ '--gooey-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('[GooeyToast] 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 { GooeyToast } from './components/GooeyToast'\nimport { ToastErrorBoundary } from './components/ToastErrorBoundary'\nimport { getGooeyVisibleToasts, getGooeyMaxQueue, getGooeyQueueOverflow, announce, type AriaLivePoliteness } from './context'\nimport type {\n  GooeyToastOptions,\n  GooeyPromiseData,\n  GooeyToastPhase,\n  GooeyToastType,\n  GooeyToastAction,\n  GooeyToastClassNames,\n  GooeyToastTimings,\n  GooeyToastUpdateOptions,\n  DismissFilter,\n} from './types'\nimport type { AnimationPresetName } from './presets'\n\nconst DEFAULT_EXPANDED_DURATION = 4000\n\nfunction getAnnouncePoliteness(type: GooeyToastType): 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, GooeyToastType>()\nconst _queue: Array<{ id: string | number; type: GooeyToastType; 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 = getGooeyVisibleToasts()\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: GooeyToastType; create: () => void }): boolean {\n  const maxQueue = getGooeyMaxQueue()\n  const overflow = getGooeyQueueOverflow()\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: GooeyToastUpdateOptions) => void>()\n\nfunction updateGooeyToast(id: string | number, options: GooeyToastUpdateOptions) {\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 GooeyToastWrapper({\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  showTimestamp: initialShowTimestamp,\n  toastId,\n  onDismiss,\n  onAutoClose,\n}: {\n  initialPhase: GooeyToastPhase\n  title: string\n  type: GooeyToastType\n  description?: ReactNode\n  action?: GooeyToastAction\n  icon?: ReactNode\n  classNames?: GooeyToastClassNames\n  fillColor?: string\n  borderColor?: string\n  borderWidth?: number\n  timing?: GooeyToastTimings\n  preset?: AnimationPresetName\n  spring?: boolean\n  bounce?: number\n  showProgress?: boolean\n  showTimestamp?: boolean\n  toastId: 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(toastId, { onDismiss, onAutoClose })\n    }\n  }, [toastId, onDismiss, onAutoClose])\n\n  const [title, setTitle] = useState(initialTitle)\n  const [type, setType] = useState(initialType)\n  const [phase, setPhase] = useState<GooeyToastPhase>(initialPhase)\n  const [description, setDescription] = useState(initialDescription)\n  const [action, setAction] = useState(initialAction)\n  const [currentIcon, setCurrentIcon] = useState<ReactNode | undefined>(icon)\n  const [showTimestamp, setShowTimestamp] = useState(initialShowTimestamp ?? true)\n\n  // Subscribe to in-place updates for this toast's ID.\n  useEffect(() => {\n    const handleUpdate = (opts: GooeyToastUpdateOptions) => {\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      if (opts.showTimestamp !== undefined) setShowTimestamp(opts.showTimestamp)\n    }\n    _toastUpdateListeners.set(toastId, handleUpdate)\n    return () => {\n      _toastUpdateListeners.delete(toastId)\n    }\n  }, [toastId])\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(toastId)\n      }, 100)\n    }\n  }, [toastId])\n\n  return (\n    <ToastErrorBoundary>\n      <GooeyToast\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        showTimestamp={showTimestamp}\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: GooeyPromiseData<T>\n  toastId: string | number\n}) {\n  const [phase, setPhase] = useState<GooeyToastPhase>('loading')\n  const [title, setTitle] = useState(data.loading)\n  const [description, setDescription] = useState<ReactNode | undefined>(data.description?.loading)\n  const [action, setAction] = useState<GooeyToastAction | 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      <GooeyToast\n        title={title}\n        description={description}\n        type={phase === 'loading' ? 'info' : (phase as GooeyToastType)}\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        showTimestamp={data.showTimestamp ?? true}\n        toastId={toastId}\n      />\n    </ToastErrorBoundary>\n  )\n}\n\nfunction createGooeyToast(\n  title: string,\n  type: GooeyToastType,\n  options?: GooeyToastOptions\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        <GooeyToastWrapper\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          showTimestamp={options?.showTimestamp}\n          toastId={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 < getGooeyVisibleToasts()) {\n    _activeIds.set(toastId, type)\n    create()\n  } else {\n    _enqueue({ id: toastId, type, create })\n  }\n\n  return toastId\n}\n\nfunction dismissGooeyToast(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<GooeyToastType>(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 GooeyToastWrapper 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 gooeyToast = Object.assign(\n  (title: string, options?: GooeyToastOptions) =>\n    createGooeyToast(title, 'default', options),\n  {\n    success: (title: string, options?: GooeyToastOptions) =>\n      createGooeyToast(title, 'success', options),\n    error: (title: string, options?: GooeyToastOptions) =>\n      createGooeyToast(title, 'error', options),\n    warning: (title: string, options?: GooeyToastOptions) =>\n      createGooeyToast(title, 'warning', options),\n    info: (title: string, options?: GooeyToastOptions) =>\n      createGooeyToast(title, 'info', options),\n    promise: <T,>(promise: Promise<T>, data: GooeyPromiseData<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 < getGooeyVisibleToasts()) {\n        _activeIds.set(id, 'info')\n        create()\n      } else {\n        _enqueue({ id, type: 'info', create })\n      }\n\n      return id\n    },\n    dismiss: dismissGooeyToast,\n    update: updateGooeyToast,\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 { GooeyToasterProps } from '../types'\nimport { animationPresets } from '../presets'\nimport { setGooeyPosition, setGooeyDir, setGooeySpring, setGooeyBounce, setGooeyVisibleToasts, setContainerHovered, setGooeySwipeToDismiss, setGooeyCloseOnEscape, setGooeyTheme, setGooeyMaxQueue, setGooeyQueueOverflow, setGooeyShowProgress, setGooeyCloseButton, setGooeyShowTimestamp } from '../context'\nimport { gooeyToast, _getMostRecentActiveId } from '../gooey-toast'\nimport { AriaLiveAnnouncer } from './AriaLiveAnnouncer'\n\nexport function GooeyToaster({\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  showTimestamp = true,\n}: GooeyToasterProps) {\n  const presetConfig = preset ? animationPresets[preset] : undefined\n  const resolvedSpring = spring ?? presetConfig?.spring ?? true\n  const resolvedBounce = bounce ?? presetConfig?.bounce\n\n  useEffect(() => {\n    setGooeyPosition(position)\n  }, [position])\n\n  useEffect(() => {\n    setGooeyDir(dir ?? 'ltr')\n  }, [dir])\n\n  useEffect(() => {\n    setGooeyTheme(theme)\n  }, [theme])\n\n  useEffect(() => {\n    setGooeySpring(resolvedSpring)\n  }, [resolvedSpring])\n\n  useEffect(() => {\n    setGooeyBounce(resolvedBounce)\n  }, [resolvedBounce])\n\n  useEffect(() => {\n    setGooeySwipeToDismiss(swipeToDismiss)\n  }, [swipeToDismiss])\n\n  useEffect(() => {\n    setGooeyCloseOnEscape(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          gooeyToast.dismiss(recentId)\n        }\n      }\n    }\n\n    document.addEventListener('keydown', handleKeyDown)\n    return () => document.removeEventListener('keydown', handleKeyDown)\n  }, [closeOnEscape])\n\n  useEffect(() => {\n    setGooeyVisibleToasts(visibleToasts ?? 3)\n  }, [visibleToasts])\n\n  useEffect(() => {\n    setGooeyMaxQueue(maxQueue)\n  }, [maxQueue])\n\n  useEffect(() => {\n    setGooeyQueueOverflow(queueOverflow)\n  }, [queueOverflow])\n\n  useEffect(() => {\n    setGooeyShowProgress(showProgress)\n  }, [showProgress])\n\n  useEffect(() => {\n    setGooeyCloseButton(closeButton ?? false)\n  }, [closeButton])\n\n  useEffect(() => {\n    setGooeyShowTimestamp(showTimestamp)\n  }, [showTimestamp])\n\n  // Detect hover on the Sonner container and broadcast to all GooeyToast 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-gooey-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('--gooey-toast')\n    document.body.removeChild(el)\n\n    if (!value) {\n      console.warn(\n        '[gooey-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={false}\n        richColors={richColors}\n        visibleToasts={99}\n        dir={dir}\n      />\n      <AriaLiveAnnouncer />\n    </>\n  )\n}\n"]}