goey-toast 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +297 -0
- package/dist/index.cjs +983 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.css +248 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.cts +82 -0
- package/dist/index.d.ts +82 -0
- package/dist/index.js +980 -0
- package/dist/index.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +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/GoeyToast.module.css","../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","expandDelayMs","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'\n\nexport function setGoeyPosition(position: ToasterProps['position']) {\n _position = position\n}\n\nexport function getGoeyPosition() {\n return _position\n}\n","import { useEffect } from 'react'\nimport { Toaster } from 'sonner'\nimport type { GoeyToasterProps } from '../types'\nimport { setGoeyPosition } 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}: GoeyToasterProps) {\n useEffect(() => {\n setGoeyPosition(position)\n }, [position])\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","/* Spinner animation — scoped to module, no global keyframe needed */\n.spinnerSpin {\n animation: goey-spin 1s linear infinite;\n}\n\n@keyframes goey-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* Style detection marker — used by GoeyToaster to verify CSS is loaded */\n:global([data-goey-toast-css]) { --goey-toast: 1; }\n\n/* ============================================\n Wrapper — single container for both states\n ============================================ */\n.wrapper {\n pointer-events: auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;\n position: relative;\n width: fit-content;\n}\n\n/* SVG background — parametric morph from pill to blob */\n.blobSvg {\n position: absolute;\n top: 0;\n left: 0;\n overflow: visible;\n pointer-events: none;\n filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.06))\n drop-shadow(0 1px 4px rgba(0, 0, 0, 0.04));\n}\n\n/* Content on top of SVG background */\n.content {\n position: relative;\n z-index: 1;\n transition: padding 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.contentCompact {\n padding: 7px 10px 7px 10px;\n}\n\n.contentExpanded {\n padding: 7px 10px 16px 10px;\n max-width: 380px;\n}\n\n/* ============================================\n Shared\n ============================================ */\n.header {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: inherit;\n}\n\n.iconWrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 18px;\n height: 18px;\n line-height: 0;\n}\n\n.title {\n font-size: 12px;\n font-weight: 700;\n line-height: 1;\n white-space: nowrap;\n color: inherit;\n padding: 0 4px 0 2px;\n}\n\n.titleDefault { color: #555; }\n.titleSuccess { color: #4CAF50; }\n.titleError { color: #E53935; }\n.titleWarning { color: #C49000; }\n.titleInfo { color: #1E88E5; }\n.titleLoading { color: #555; }\n\n.description {\n font-size: 13px;\n font-weight: 400;\n color: #444;\n line-height: 1.55;\n margin-top: 12px;\n overflow: hidden;\n}\n\n.actionWrapper {\n margin-top: 12px;\n overflow: hidden;\n}\n\n.actionButton {\n display: block;\n box-sizing: border-box;\n width: 100%;\n border: none;\n border-radius: 999px;\n padding: 10px 20px;\n font-size: 13px;\n font-weight: 700;\n cursor: pointer;\n font-family: inherit;\n text-align: center;\n outline: none;\n -webkit-tap-highlight-color: transparent;\n transition: background 0.15s ease;\n}\n\n.actionButton:focus:not(:focus-visible) {\n outline: none;\n}\n\n.actionButton:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n\n.actionDefault {\n background: #E8E8E8;\n color: #555;\n}\n.actionDefault:hover { background: #DCDCDC; }\n.actionDefault:active { background: #D0D0D0; }\n\n.actionSuccess {\n background: #C8E6C9;\n color: #4CAF50;\n}\n.actionSuccess:hover { background: #A5D6A7; }\n.actionSuccess:active { background: #81C784; }\n\n.actionError {\n background: #FFCDD2;\n color: #E53935;\n}\n.actionError:hover { background: #EF9A9A; }\n.actionError:active { background: #E57373; }\n\n.actionWarning {\n background: #FFECB3;\n color: #C49000;\n}\n.actionWarning:hover { background: #FFE082; }\n.actionWarning:active { background: #FFD54F; }\n\n.actionInfo {\n background: #BBDEFB;\n color: #1E88E5;\n}\n.actionInfo:hover { background: #90CAF9; }\n.actionInfo:active { background: #64B5F6; }\n\n/* ============================================\n Dark mode\n ============================================ */\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .blobSvg {\n filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.3))\n drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));\n}\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleDefault { color: #ccc; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleSuccess { color: #66BB6A; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleError { color: #EF5350; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleWarning { color: #FFB300; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleInfo { color: #42A5F5; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleLoading { color: #ccc; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .description {\n color: #aaa;\n}\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionDefault {\n background: #3a3a3a;\n color: #ccc;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionDefault:hover { background: #444; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionDefault:active { background: #4e4e4e; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionSuccess {\n background: #1b5e20;\n color: #66BB6A;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionSuccess:hover { background: #2e7d32; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionSuccess:active { background: #388e3c; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionError {\n background: #b71c1c;\n color: #EF5350;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionError:hover { background: #c62828; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionError:active { background: #d32f2f; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionWarning {\n background: #4a3800;\n color: #FFB300;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionWarning:hover { background: #5c4600; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionWarning:active { background: #6e5400; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionInfo {\n background: #0d47a1;\n color: #42A5F5;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionInfo:hover { background: #1565c0; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionInfo:active { background: #1976d2; }\n","import { useRef, useState, useEffect, useLayoutEffect, useCallback, type FC, type ReactNode } from 'react'\nimport { motion, AnimatePresence, animate } from 'framer-motion'\nimport type { GoeyToastAction, GoeyToastClassNames, GoeyToastPhase, GoeyToastTimings, GoeyToastType } from '../types'\nimport { getGoeyPosition } from '../context'\nimport { DefaultIcon, SuccessIcon, ErrorIcon, WarningIcon, InfoIcon, SpinnerIcon } from '../icons'\nimport { usePrefersReducedMotion } from '../usePrefersReducedMotion'\nimport styles from './GoeyToast.module.css'\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}\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\nconst BASE_SQUISH = { type: 'spring' as const, stiffness: 380, damping: 16, mass: 0.7 }\nconst DEFAULT_EXPAND_DUR = 0.6\nconst DEFAULT_COLLAPSE_DUR = 0.9\nfunction squishSpring(durationSec: number, defaultDur: number) {\n const scale = durationSec / defaultDur\n return { ...BASE_SQUISH, mass: BASE_SQUISH.mass * scale }\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\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}) => {\n const position = getGoeyPosition()\n const isRight = position?.includes('right') ?? false\n const prefersReducedMotion = usePrefersReducedMotion()\n\n // Action success override state\n const [actionSuccess, setActionSuccess] = useState<string | null>(null)\n const [dismissing, setDismissing] = useState(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\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 pathRef.current?.setAttribute('d', morphPath(p, b, h, t))\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 if (wrapperRef.current) {\n wrapperRef.current.style.width = currentW + 'px'\n }\n if (contentRef.current) {\n contentRef.current.style.width = targetBw + 'px'\n contentRef.current.style.overflow = 'hidden'\n contentRef.current.style.maxHeight = currentH + 'px'\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 } else {\n // Compact: constrain to pill dimensions\n const pillW = Math.min(p, b)\n if (wrapperRef.current) {\n wrapperRef.current.style.width = pillW + 'px'\n }\n if (contentRef.current) {\n contentRef.current.style.width = ''\n contentRef.current.style.overflow = 'hidden'\n contentRef.current.style.maxHeight = PH + 'px'\n contentRef.current.style.clipPath = ''\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 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 = timing?.expandDuration ?? DEFAULT_EXPAND_DUR\n const collapseDur = timing?.collapseDuration ?? DEFAULT_COLLAPSE_DUR\n const lastSquishTime = useRef(0)\n const triggerLandingSquish = useCallback((phase: 'expand' | 'collapse' | 'mount' = 'mount') => {\n if (!wrapperRef.current || prefersReducedMotion) 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 spring = phase === 'collapse'\n ? squishSpring(collapseDur, DEFAULT_COLLAPSE_DUR)\n : squishSpring(expandDur, DEFAULT_EXPAND_DUR)\n // Softer squish on collapse — blob is wider so same % looks more drastic\n const compressY = phase === 'collapse' ? 0.07 : 0.12\n const expandX = phase === 'collapse' ? 0.035 : 0.06\n blobSquishCtrl.current = animate(0, 1, {\n ...spring,\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 el.style.transformOrigin = 'center bottom'\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])\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 pillResizeCtrl.current = animate(0, 1, {\n type: 'spring',\n duration: 0.5,\n bounce: 0.35,\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])\n\n // Squish on entry: only for simple toasts (no body text) — expanded toasts get squish from showBody\n const expandDelayMs = prefersReducedMotion ? 0 : (timing?.expandDelay ?? 330)\n const mountSquished = useRef(false)\n useEffect(() => {\n if (hasDims && !mountSquished.current && !isExpanded) {\n mountSquished.current = true\n const t = setTimeout(triggerLandingSquish, expandDelayMs)\n return () => clearTimeout(t)\n }\n }, [hasDims, expandDelayMs, triggerLandingSquish])\n\n // Squish on expand (showBody false→true) — collapse squish is fired directly in morph code\n const prevShowBody = useRef(false)\n useLayoutEffect(() => {\n if (!prevShowBody.current && showBody) {\n triggerLandingSquish('expand')\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 : (timing?.expandDelay ?? 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 = timing?.collapseDuration ?? 0.9\n const collapseTransition = isPreDismiss\n ? { duration: collapseDur, ease: [0.4, 0, 0.2, 1] as const }\n : { type: 'spring' as const, duration: collapseDur, bounce: 0.2 }\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])\n\n // Pre-dismiss collapse: shrink back to pill before Sonner removes the toast\n useEffect(() => {\n if (!showBody || actionSuccess || dismissing) return\n\n const expandDelayMs = prefersReducedMotion ? 0 : (timing?.expandDelay ?? 330)\n const collapseMs = prefersReducedMotion ? 10 : ((timing?.collapseDuration ?? 0.9) * 1000)\n const displayMs = timing?.displayDuration ?? DEFAULT_DISPLAY_DURATION\n\n // Start collapse so it finishes right before Sonner dismisses\n const delay = displayMs - expandDelayMs - collapseMs\n if (delay <= 0) return\n\n const timer = setTimeout(() => {\n expandedDimsRef.current = { ...aDims.current }\n collapsingRef.current = true\n preDismissRef.current = true\n setDismissing(true)\n }, delay)\n\n return () => clearTimeout(timer)\n }, [showBody, actionSuccess, dismissing, prefersReducedMotion])\n\n // Phase 2: morph from pill → blob\n useEffect(() => {\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 morphCtrl.current = animate(0, 1, {\n type: 'spring',\n duration: timing?.expandDuration ?? 0.9,\n bounce: 0.2,\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])\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 // 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),\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 const isSpringCollapse = !preDismissRef.current\n const transition = isSpringCollapse\n ? squishSpring(collapseDur, DEFAULT_COLLAPSE_DUR)\n : { duration: collapseDur * 0.5, ease: [0.4, 0, 0.2, 1] as const }\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])\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 effectiveAction.onClick()\n if (effectiveAction.successLabel) {\n // Save expanded dims synchronously before React re-renders\n expandedDimsRef.current = { ...aDims.current }\n collapsingRef.current = true\n setActionSuccess(effectiveAction.successLabel)\n }\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={isRight ? { marginLeft: 'auto', transform: 'scaleX(-1)' } : undefined} role={effectivePhase === 'error' ? 'alert' : 'status'} aria-live={effectivePhase === 'error' ? 'assertive' : 'polite'} aria-atomic=\"true\">\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={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}: {\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}) {\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 />\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 = (data.timing?.collapseDuration ?? 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 />\n </ToastErrorBoundary>\n )\n}\n\nfunction createGoeyToast(\n title: string,\n type: GoeyToastType,\n options?: GoeyToastOptions\n) {\n const baseDuration = options?.timing?.displayDuration ?? options?.duration ?? (options?.description ? DEFAULT_EXPANDED_DURATION : undefined)\n const hasExpandedContent = Boolean(options?.description || options?.action)\n const collapseDurMs = (options?.timing?.collapseDuration ?? 0.9) * 1000\n // Buffer after collapse so the pill squish animation has time to play\n const duration = baseDuration != null && hasExpandedContent\n ? baseDuration + collapseDurMs\n : baseDuration\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 />\n ),\n {\n duration,\n id: options?.id,\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"]}
|
package/dist/index.css
ADDED
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/* src/components/GoeyToast.module.css */
|
|
2
|
+
.spinnerSpin {
|
|
3
|
+
animation: goey-spin 1s linear infinite;
|
|
4
|
+
}
|
|
5
|
+
@keyframes goey-spin {
|
|
6
|
+
from {
|
|
7
|
+
transform: rotate(0deg);
|
|
8
|
+
}
|
|
9
|
+
to {
|
|
10
|
+
transform: rotate(360deg);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
:global([data-goey-toast-css]) {
|
|
14
|
+
--goey-toast: 1;
|
|
15
|
+
}
|
|
16
|
+
.wrapper {
|
|
17
|
+
pointer-events: auto;
|
|
18
|
+
font-family:
|
|
19
|
+
-apple-system,
|
|
20
|
+
BlinkMacSystemFont,
|
|
21
|
+
"Segoe UI",
|
|
22
|
+
Roboto,
|
|
23
|
+
"Helvetica Neue",
|
|
24
|
+
sans-serif;
|
|
25
|
+
position: relative;
|
|
26
|
+
width: fit-content;
|
|
27
|
+
}
|
|
28
|
+
.blobSvg {
|
|
29
|
+
position: absolute;
|
|
30
|
+
top: 0;
|
|
31
|
+
left: 0;
|
|
32
|
+
overflow: visible;
|
|
33
|
+
pointer-events: none;
|
|
34
|
+
filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.06)) drop-shadow(0 1px 4px rgba(0, 0, 0, 0.04));
|
|
35
|
+
}
|
|
36
|
+
.content {
|
|
37
|
+
position: relative;
|
|
38
|
+
z-index: 1;
|
|
39
|
+
transition: padding 0.35s cubic-bezier(0.4, 0, 0.2, 1);
|
|
40
|
+
}
|
|
41
|
+
.contentCompact {
|
|
42
|
+
padding: 7px 10px 7px 10px;
|
|
43
|
+
}
|
|
44
|
+
.contentExpanded {
|
|
45
|
+
padding: 7px 10px 16px 10px;
|
|
46
|
+
max-width: 380px;
|
|
47
|
+
}
|
|
48
|
+
.header {
|
|
49
|
+
display: inline-flex;
|
|
50
|
+
align-items: center;
|
|
51
|
+
gap: 8px;
|
|
52
|
+
color: inherit;
|
|
53
|
+
}
|
|
54
|
+
.iconWrapper {
|
|
55
|
+
display: flex;
|
|
56
|
+
align-items: center;
|
|
57
|
+
justify-content: center;
|
|
58
|
+
flex-shrink: 0;
|
|
59
|
+
width: 18px;
|
|
60
|
+
height: 18px;
|
|
61
|
+
line-height: 0;
|
|
62
|
+
}
|
|
63
|
+
.title {
|
|
64
|
+
font-size: 12px;
|
|
65
|
+
font-weight: 700;
|
|
66
|
+
line-height: 1;
|
|
67
|
+
white-space: nowrap;
|
|
68
|
+
color: inherit;
|
|
69
|
+
padding: 0 4px 0 2px;
|
|
70
|
+
}
|
|
71
|
+
.titleDefault {
|
|
72
|
+
color: #555;
|
|
73
|
+
}
|
|
74
|
+
.titleSuccess {
|
|
75
|
+
color: #4CAF50;
|
|
76
|
+
}
|
|
77
|
+
.titleError {
|
|
78
|
+
color: #E53935;
|
|
79
|
+
}
|
|
80
|
+
.titleWarning {
|
|
81
|
+
color: #C49000;
|
|
82
|
+
}
|
|
83
|
+
.titleInfo {
|
|
84
|
+
color: #1E88E5;
|
|
85
|
+
}
|
|
86
|
+
.titleLoading {
|
|
87
|
+
color: #555;
|
|
88
|
+
}
|
|
89
|
+
.description {
|
|
90
|
+
font-size: 13px;
|
|
91
|
+
font-weight: 400;
|
|
92
|
+
color: #444;
|
|
93
|
+
line-height: 1.55;
|
|
94
|
+
margin-top: 12px;
|
|
95
|
+
overflow: hidden;
|
|
96
|
+
}
|
|
97
|
+
.actionWrapper {
|
|
98
|
+
margin-top: 12px;
|
|
99
|
+
overflow: hidden;
|
|
100
|
+
}
|
|
101
|
+
.actionButton {
|
|
102
|
+
display: block;
|
|
103
|
+
box-sizing: border-box;
|
|
104
|
+
width: 100%;
|
|
105
|
+
border: none;
|
|
106
|
+
border-radius: 999px;
|
|
107
|
+
padding: 10px 20px;
|
|
108
|
+
font-size: 13px;
|
|
109
|
+
font-weight: 700;
|
|
110
|
+
cursor: pointer;
|
|
111
|
+
font-family: inherit;
|
|
112
|
+
text-align: center;
|
|
113
|
+
outline: none;
|
|
114
|
+
-webkit-tap-highlight-color: transparent;
|
|
115
|
+
transition: background 0.15s ease;
|
|
116
|
+
}
|
|
117
|
+
.actionButton:focus:not(:focus-visible) {
|
|
118
|
+
outline: none;
|
|
119
|
+
}
|
|
120
|
+
.actionButton:focus-visible {
|
|
121
|
+
outline: 2px solid currentColor;
|
|
122
|
+
outline-offset: 2px;
|
|
123
|
+
}
|
|
124
|
+
.actionDefault {
|
|
125
|
+
background: #E8E8E8;
|
|
126
|
+
color: #555;
|
|
127
|
+
}
|
|
128
|
+
.actionDefault:hover {
|
|
129
|
+
background: #DCDCDC;
|
|
130
|
+
}
|
|
131
|
+
.actionDefault:active {
|
|
132
|
+
background: #D0D0D0;
|
|
133
|
+
}
|
|
134
|
+
.actionSuccess {
|
|
135
|
+
background: #C8E6C9;
|
|
136
|
+
color: #4CAF50;
|
|
137
|
+
}
|
|
138
|
+
.actionSuccess:hover {
|
|
139
|
+
background: #A5D6A7;
|
|
140
|
+
}
|
|
141
|
+
.actionSuccess:active {
|
|
142
|
+
background: #81C784;
|
|
143
|
+
}
|
|
144
|
+
.actionError {
|
|
145
|
+
background: #FFCDD2;
|
|
146
|
+
color: #E53935;
|
|
147
|
+
}
|
|
148
|
+
.actionError:hover {
|
|
149
|
+
background: #EF9A9A;
|
|
150
|
+
}
|
|
151
|
+
.actionError:active {
|
|
152
|
+
background: #E57373;
|
|
153
|
+
}
|
|
154
|
+
.actionWarning {
|
|
155
|
+
background: #FFECB3;
|
|
156
|
+
color: #C49000;
|
|
157
|
+
}
|
|
158
|
+
.actionWarning:hover {
|
|
159
|
+
background: #FFE082;
|
|
160
|
+
}
|
|
161
|
+
.actionWarning:active {
|
|
162
|
+
background: #FFD54F;
|
|
163
|
+
}
|
|
164
|
+
.actionInfo {
|
|
165
|
+
background: #BBDEFB;
|
|
166
|
+
color: #1E88E5;
|
|
167
|
+
}
|
|
168
|
+
.actionInfo:hover {
|
|
169
|
+
background: #90CAF9;
|
|
170
|
+
}
|
|
171
|
+
.actionInfo:active {
|
|
172
|
+
background: #64B5F6;
|
|
173
|
+
}
|
|
174
|
+
:global([data-sonner-toaster][data-theme=dark]) .blobSvg {
|
|
175
|
+
filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.3)) drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));
|
|
176
|
+
}
|
|
177
|
+
:global([data-sonner-toaster][data-theme=dark]) .titleDefault {
|
|
178
|
+
color: #ccc;
|
|
179
|
+
}
|
|
180
|
+
:global([data-sonner-toaster][data-theme=dark]) .titleSuccess {
|
|
181
|
+
color: #66BB6A;
|
|
182
|
+
}
|
|
183
|
+
:global([data-sonner-toaster][data-theme=dark]) .titleError {
|
|
184
|
+
color: #EF5350;
|
|
185
|
+
}
|
|
186
|
+
:global([data-sonner-toaster][data-theme=dark]) .titleWarning {
|
|
187
|
+
color: #FFB300;
|
|
188
|
+
}
|
|
189
|
+
:global([data-sonner-toaster][data-theme=dark]) .titleInfo {
|
|
190
|
+
color: #42A5F5;
|
|
191
|
+
}
|
|
192
|
+
:global([data-sonner-toaster][data-theme=dark]) .titleLoading {
|
|
193
|
+
color: #ccc;
|
|
194
|
+
}
|
|
195
|
+
:global([data-sonner-toaster][data-theme=dark]) .description {
|
|
196
|
+
color: #aaa;
|
|
197
|
+
}
|
|
198
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionDefault {
|
|
199
|
+
background: #3a3a3a;
|
|
200
|
+
color: #ccc;
|
|
201
|
+
}
|
|
202
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionDefault:hover {
|
|
203
|
+
background: #444;
|
|
204
|
+
}
|
|
205
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionDefault:active {
|
|
206
|
+
background: #4e4e4e;
|
|
207
|
+
}
|
|
208
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionSuccess {
|
|
209
|
+
background: #1b5e20;
|
|
210
|
+
color: #66BB6A;
|
|
211
|
+
}
|
|
212
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionSuccess:hover {
|
|
213
|
+
background: #2e7d32;
|
|
214
|
+
}
|
|
215
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionSuccess:active {
|
|
216
|
+
background: #388e3c;
|
|
217
|
+
}
|
|
218
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionError {
|
|
219
|
+
background: #b71c1c;
|
|
220
|
+
color: #EF5350;
|
|
221
|
+
}
|
|
222
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionError:hover {
|
|
223
|
+
background: #c62828;
|
|
224
|
+
}
|
|
225
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionError:active {
|
|
226
|
+
background: #d32f2f;
|
|
227
|
+
}
|
|
228
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionWarning {
|
|
229
|
+
background: #4a3800;
|
|
230
|
+
color: #FFB300;
|
|
231
|
+
}
|
|
232
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionWarning:hover {
|
|
233
|
+
background: #5c4600;
|
|
234
|
+
}
|
|
235
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionWarning:active {
|
|
236
|
+
background: #6e5400;
|
|
237
|
+
}
|
|
238
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionInfo {
|
|
239
|
+
background: #0d47a1;
|
|
240
|
+
color: #42A5F5;
|
|
241
|
+
}
|
|
242
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionInfo:hover {
|
|
243
|
+
background: #1565c0;
|
|
244
|
+
}
|
|
245
|
+
:global([data-sonner-toaster][data-theme=dark]) .actionInfo:active {
|
|
246
|
+
background: #1976d2;
|
|
247
|
+
}
|
|
248
|
+
/*# sourceMappingURL=index.css.map */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/GoeyToast.module.css"],"sourcesContent":["/* Spinner animation — scoped to module, no global keyframe needed */\n.spinnerSpin {\n animation: goey-spin 1s linear infinite;\n}\n\n@keyframes goey-spin {\n from { transform: rotate(0deg); }\n to { transform: rotate(360deg); }\n}\n\n/* Style detection marker — used by GoeyToaster to verify CSS is loaded */\n:global([data-goey-toast-css]) { --goey-toast: 1; }\n\n/* ============================================\n Wrapper — single container for both states\n ============================================ */\n.wrapper {\n pointer-events: auto;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;\n position: relative;\n width: fit-content;\n}\n\n/* SVG background — parametric morph from pill to blob */\n.blobSvg {\n position: absolute;\n top: 0;\n left: 0;\n overflow: visible;\n pointer-events: none;\n filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.06))\n drop-shadow(0 1px 4px rgba(0, 0, 0, 0.04));\n}\n\n/* Content on top of SVG background */\n.content {\n position: relative;\n z-index: 1;\n transition: padding 0.35s cubic-bezier(0.4, 0, 0.2, 1);\n}\n\n.contentCompact {\n padding: 7px 10px 7px 10px;\n}\n\n.contentExpanded {\n padding: 7px 10px 16px 10px;\n max-width: 380px;\n}\n\n/* ============================================\n Shared\n ============================================ */\n.header {\n display: inline-flex;\n align-items: center;\n gap: 8px;\n color: inherit;\n}\n\n.iconWrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n width: 18px;\n height: 18px;\n line-height: 0;\n}\n\n.title {\n font-size: 12px;\n font-weight: 700;\n line-height: 1;\n white-space: nowrap;\n color: inherit;\n padding: 0 4px 0 2px;\n}\n\n.titleDefault { color: #555; }\n.titleSuccess { color: #4CAF50; }\n.titleError { color: #E53935; }\n.titleWarning { color: #C49000; }\n.titleInfo { color: #1E88E5; }\n.titleLoading { color: #555; }\n\n.description {\n font-size: 13px;\n font-weight: 400;\n color: #444;\n line-height: 1.55;\n margin-top: 12px;\n overflow: hidden;\n}\n\n.actionWrapper {\n margin-top: 12px;\n overflow: hidden;\n}\n\n.actionButton {\n display: block;\n box-sizing: border-box;\n width: 100%;\n border: none;\n border-radius: 999px;\n padding: 10px 20px;\n font-size: 13px;\n font-weight: 700;\n cursor: pointer;\n font-family: inherit;\n text-align: center;\n outline: none;\n -webkit-tap-highlight-color: transparent;\n transition: background 0.15s ease;\n}\n\n.actionButton:focus:not(:focus-visible) {\n outline: none;\n}\n\n.actionButton:focus-visible {\n outline: 2px solid currentColor;\n outline-offset: 2px;\n}\n\n.actionDefault {\n background: #E8E8E8;\n color: #555;\n}\n.actionDefault:hover { background: #DCDCDC; }\n.actionDefault:active { background: #D0D0D0; }\n\n.actionSuccess {\n background: #C8E6C9;\n color: #4CAF50;\n}\n.actionSuccess:hover { background: #A5D6A7; }\n.actionSuccess:active { background: #81C784; }\n\n.actionError {\n background: #FFCDD2;\n color: #E53935;\n}\n.actionError:hover { background: #EF9A9A; }\n.actionError:active { background: #E57373; }\n\n.actionWarning {\n background: #FFECB3;\n color: #C49000;\n}\n.actionWarning:hover { background: #FFE082; }\n.actionWarning:active { background: #FFD54F; }\n\n.actionInfo {\n background: #BBDEFB;\n color: #1E88E5;\n}\n.actionInfo:hover { background: #90CAF9; }\n.actionInfo:active { background: #64B5F6; }\n\n/* ============================================\n Dark mode\n ============================================ */\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .blobSvg {\n filter: drop-shadow(0 4px 12px rgba(0, 0, 0, 0.3))\n drop-shadow(0 1px 4px rgba(0, 0, 0, 0.2));\n}\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleDefault { color: #ccc; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleSuccess { color: #66BB6A; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleError { color: #EF5350; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleWarning { color: #FFB300; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleInfo { color: #42A5F5; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .titleLoading { color: #ccc; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .description {\n color: #aaa;\n}\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionDefault {\n background: #3a3a3a;\n color: #ccc;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionDefault:hover { background: #444; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionDefault:active { background: #4e4e4e; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionSuccess {\n background: #1b5e20;\n color: #66BB6A;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionSuccess:hover { background: #2e7d32; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionSuccess:active { background: #388e3c; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionError {\n background: #b71c1c;\n color: #EF5350;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionError:hover { background: #c62828; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionError:active { background: #d32f2f; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionWarning {\n background: #4a3800;\n color: #FFB300;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionWarning:hover { background: #5c4600; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionWarning:active { background: #6e5400; }\n\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionInfo {\n background: #0d47a1;\n color: #42A5F5;\n}\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionInfo:hover { background: #1565c0; }\n:global([data-sonner-toaster][data-theme=\"dark\"]) .actionInfo:active { background: #1976d2; }\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { ToasterProps, ExternalToast } from 'sonner';
|
|
4
|
+
|
|
5
|
+
interface GoeyToastTimings {
|
|
6
|
+
expandDelay?: number;
|
|
7
|
+
expandDuration?: number;
|
|
8
|
+
collapseDuration?: number;
|
|
9
|
+
displayDuration?: number;
|
|
10
|
+
}
|
|
11
|
+
interface GoeyToastClassNames {
|
|
12
|
+
wrapper?: string;
|
|
13
|
+
content?: string;
|
|
14
|
+
header?: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
icon?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
actionWrapper?: string;
|
|
19
|
+
actionButton?: string;
|
|
20
|
+
}
|
|
21
|
+
interface GoeyToastAction {
|
|
22
|
+
label: string;
|
|
23
|
+
onClick: () => void;
|
|
24
|
+
successLabel?: string;
|
|
25
|
+
}
|
|
26
|
+
interface GoeyToastOptions {
|
|
27
|
+
description?: ReactNode;
|
|
28
|
+
action?: GoeyToastAction;
|
|
29
|
+
icon?: ReactNode;
|
|
30
|
+
duration?: number;
|
|
31
|
+
id?: string | number;
|
|
32
|
+
classNames?: GoeyToastClassNames;
|
|
33
|
+
fillColor?: string;
|
|
34
|
+
borderColor?: string;
|
|
35
|
+
borderWidth?: number;
|
|
36
|
+
timing?: GoeyToastTimings;
|
|
37
|
+
}
|
|
38
|
+
interface GoeyPromiseData<T> {
|
|
39
|
+
loading: string;
|
|
40
|
+
success: string | ((data: T) => string);
|
|
41
|
+
error: string | ((error: unknown) => string);
|
|
42
|
+
description?: {
|
|
43
|
+
loading?: ReactNode;
|
|
44
|
+
success?: ReactNode | ((data: T) => ReactNode);
|
|
45
|
+
error?: ReactNode | ((error: unknown) => ReactNode);
|
|
46
|
+
};
|
|
47
|
+
action?: {
|
|
48
|
+
success?: GoeyToastAction;
|
|
49
|
+
error?: GoeyToastAction;
|
|
50
|
+
};
|
|
51
|
+
classNames?: GoeyToastClassNames;
|
|
52
|
+
fillColor?: string;
|
|
53
|
+
borderColor?: string;
|
|
54
|
+
borderWidth?: number;
|
|
55
|
+
timing?: GoeyToastTimings;
|
|
56
|
+
}
|
|
57
|
+
interface GoeyToasterProps {
|
|
58
|
+
position?: ToasterProps['position'];
|
|
59
|
+
duration?: number;
|
|
60
|
+
gap?: number;
|
|
61
|
+
offset?: number | string;
|
|
62
|
+
theme?: 'light' | 'dark';
|
|
63
|
+
toastOptions?: Partial<ExternalToast>;
|
|
64
|
+
expand?: boolean;
|
|
65
|
+
closeButton?: boolean;
|
|
66
|
+
richColors?: boolean;
|
|
67
|
+
visibleToasts?: number;
|
|
68
|
+
dir?: 'ltr' | 'rtl';
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
declare function GoeyToaster({ position, duration, gap, offset, theme, toastOptions, expand, closeButton, richColors, visibleToasts, dir, }: GoeyToasterProps): react_jsx_runtime.JSX.Element;
|
|
72
|
+
|
|
73
|
+
declare const goeyToast: ((title: string, options?: GoeyToastOptions) => string | number) & {
|
|
74
|
+
success: (title: string, options?: GoeyToastOptions) => string | number;
|
|
75
|
+
error: (title: string, options?: GoeyToastOptions) => string | number;
|
|
76
|
+
warning: (title: string, options?: GoeyToastOptions) => string | number;
|
|
77
|
+
info: (title: string, options?: GoeyToastOptions) => string | number;
|
|
78
|
+
promise: <T>(promise: Promise<T>, data: GoeyPromiseData<T>) => string | number;
|
|
79
|
+
dismiss: (id?: number | string) => string | number;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export { type GoeyPromiseData, type GoeyToastAction, type GoeyToastClassNames, type GoeyToastOptions, type GoeyToastTimings, GoeyToaster, type GoeyToasterProps, goeyToast };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { ToasterProps, ExternalToast } from 'sonner';
|
|
4
|
+
|
|
5
|
+
interface GoeyToastTimings {
|
|
6
|
+
expandDelay?: number;
|
|
7
|
+
expandDuration?: number;
|
|
8
|
+
collapseDuration?: number;
|
|
9
|
+
displayDuration?: number;
|
|
10
|
+
}
|
|
11
|
+
interface GoeyToastClassNames {
|
|
12
|
+
wrapper?: string;
|
|
13
|
+
content?: string;
|
|
14
|
+
header?: string;
|
|
15
|
+
title?: string;
|
|
16
|
+
icon?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
actionWrapper?: string;
|
|
19
|
+
actionButton?: string;
|
|
20
|
+
}
|
|
21
|
+
interface GoeyToastAction {
|
|
22
|
+
label: string;
|
|
23
|
+
onClick: () => void;
|
|
24
|
+
successLabel?: string;
|
|
25
|
+
}
|
|
26
|
+
interface GoeyToastOptions {
|
|
27
|
+
description?: ReactNode;
|
|
28
|
+
action?: GoeyToastAction;
|
|
29
|
+
icon?: ReactNode;
|
|
30
|
+
duration?: number;
|
|
31
|
+
id?: string | number;
|
|
32
|
+
classNames?: GoeyToastClassNames;
|
|
33
|
+
fillColor?: string;
|
|
34
|
+
borderColor?: string;
|
|
35
|
+
borderWidth?: number;
|
|
36
|
+
timing?: GoeyToastTimings;
|
|
37
|
+
}
|
|
38
|
+
interface GoeyPromiseData<T> {
|
|
39
|
+
loading: string;
|
|
40
|
+
success: string | ((data: T) => string);
|
|
41
|
+
error: string | ((error: unknown) => string);
|
|
42
|
+
description?: {
|
|
43
|
+
loading?: ReactNode;
|
|
44
|
+
success?: ReactNode | ((data: T) => ReactNode);
|
|
45
|
+
error?: ReactNode | ((error: unknown) => ReactNode);
|
|
46
|
+
};
|
|
47
|
+
action?: {
|
|
48
|
+
success?: GoeyToastAction;
|
|
49
|
+
error?: GoeyToastAction;
|
|
50
|
+
};
|
|
51
|
+
classNames?: GoeyToastClassNames;
|
|
52
|
+
fillColor?: string;
|
|
53
|
+
borderColor?: string;
|
|
54
|
+
borderWidth?: number;
|
|
55
|
+
timing?: GoeyToastTimings;
|
|
56
|
+
}
|
|
57
|
+
interface GoeyToasterProps {
|
|
58
|
+
position?: ToasterProps['position'];
|
|
59
|
+
duration?: number;
|
|
60
|
+
gap?: number;
|
|
61
|
+
offset?: number | string;
|
|
62
|
+
theme?: 'light' | 'dark';
|
|
63
|
+
toastOptions?: Partial<ExternalToast>;
|
|
64
|
+
expand?: boolean;
|
|
65
|
+
closeButton?: boolean;
|
|
66
|
+
richColors?: boolean;
|
|
67
|
+
visibleToasts?: number;
|
|
68
|
+
dir?: 'ltr' | 'rtl';
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
declare function GoeyToaster({ position, duration, gap, offset, theme, toastOptions, expand, closeButton, richColors, visibleToasts, dir, }: GoeyToasterProps): react_jsx_runtime.JSX.Element;
|
|
72
|
+
|
|
73
|
+
declare const goeyToast: ((title: string, options?: GoeyToastOptions) => string | number) & {
|
|
74
|
+
success: (title: string, options?: GoeyToastOptions) => string | number;
|
|
75
|
+
error: (title: string, options?: GoeyToastOptions) => string | number;
|
|
76
|
+
warning: (title: string, options?: GoeyToastOptions) => string | number;
|
|
77
|
+
info: (title: string, options?: GoeyToastOptions) => string | number;
|
|
78
|
+
promise: <T>(promise: Promise<T>, data: GoeyPromiseData<T>) => string | number;
|
|
79
|
+
dismiss: (id?: number | string) => string | number;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export { type GoeyPromiseData, type GoeyToastAction, type GoeyToastClassNames, type GoeyToastOptions, type GoeyToastTimings, GoeyToaster, type GoeyToasterProps, goeyToast };
|