goey-toast 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/index.cjs +48 -24
- package/dist/index.cjs.map +1 -1
- package/dist/index.css +60 -60
- package/dist/index.css.map +1 -1
- package/dist/index.js +48 -24
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -23,6 +23,14 @@
|
|
|
23
23
|
npm install goey-toast
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
+
### shadcn/ui
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npx shadcn@latest add https://goey-toast.vercel.app/r/goey-toaster.json
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
This installs a thin wrapper component at `components/ui/goey-toaster.tsx` and auto-installs the `goey-toast` and `framer-motion` packages.
|
|
33
|
+
|
|
26
34
|
### Peer Dependencies
|
|
27
35
|
|
|
28
36
|
goey-toast requires the following peer dependencies:
|
package/dist/index.cjs
CHANGED
|
@@ -203,8 +203,32 @@ function usePrefersReducedMotion() {
|
|
|
203
203
|
return prefersReducedMotion;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
// src/components/
|
|
207
|
-
var
|
|
206
|
+
// src/components/goey-styles.ts
|
|
207
|
+
var styles = {
|
|
208
|
+
spinnerSpin: "goey-spinnerSpin",
|
|
209
|
+
wrapper: "goey-wrapper",
|
|
210
|
+
blobSvg: "goey-blobSvg",
|
|
211
|
+
content: "goey-content",
|
|
212
|
+
contentCompact: "goey-contentCompact",
|
|
213
|
+
contentExpanded: "goey-contentExpanded",
|
|
214
|
+
header: "goey-header",
|
|
215
|
+
iconWrapper: "goey-iconWrapper",
|
|
216
|
+
title: "goey-title",
|
|
217
|
+
titleDefault: "goey-titleDefault",
|
|
218
|
+
titleSuccess: "goey-titleSuccess",
|
|
219
|
+
titleError: "goey-titleError",
|
|
220
|
+
titleWarning: "goey-titleWarning",
|
|
221
|
+
titleInfo: "goey-titleInfo",
|
|
222
|
+
titleLoading: "goey-titleLoading",
|
|
223
|
+
description: "goey-description",
|
|
224
|
+
actionWrapper: "goey-actionWrapper",
|
|
225
|
+
actionButton: "goey-actionButton",
|
|
226
|
+
actionDefault: "goey-actionDefault",
|
|
227
|
+
actionSuccess: "goey-actionSuccess",
|
|
228
|
+
actionError: "goey-actionError",
|
|
229
|
+
actionWarning: "goey-actionWarning",
|
|
230
|
+
actionInfo: "goey-actionInfo"
|
|
231
|
+
};
|
|
208
232
|
var phaseIconMap = {
|
|
209
233
|
default: DefaultIcon,
|
|
210
234
|
success: SuccessIcon,
|
|
@@ -213,20 +237,20 @@ var phaseIconMap = {
|
|
|
213
237
|
info: InfoIcon
|
|
214
238
|
};
|
|
215
239
|
var titleColorMap = {
|
|
216
|
-
loading:
|
|
217
|
-
default:
|
|
218
|
-
success:
|
|
219
|
-
error:
|
|
220
|
-
warning:
|
|
221
|
-
info:
|
|
240
|
+
loading: styles.titleLoading,
|
|
241
|
+
default: styles.titleDefault,
|
|
242
|
+
success: styles.titleSuccess,
|
|
243
|
+
error: styles.titleError,
|
|
244
|
+
warning: styles.titleWarning,
|
|
245
|
+
info: styles.titleInfo
|
|
222
246
|
};
|
|
223
247
|
var actionColorMap = {
|
|
224
|
-
loading:
|
|
225
|
-
default:
|
|
226
|
-
success:
|
|
227
|
-
error:
|
|
228
|
-
warning:
|
|
229
|
-
info:
|
|
248
|
+
loading: styles.actionInfo,
|
|
249
|
+
default: styles.actionDefault,
|
|
250
|
+
success: styles.actionSuccess,
|
|
251
|
+
error: styles.actionError,
|
|
252
|
+
warning: styles.actionWarning,
|
|
253
|
+
info: styles.actionInfo
|
|
230
254
|
};
|
|
231
255
|
var PH = 34;
|
|
232
256
|
var DEFAULT_DISPLAY_DURATION = 4e3;
|
|
@@ -741,12 +765,12 @@ var GoeyToast = ({
|
|
|
741
765
|
}, [effectiveAction]);
|
|
742
766
|
const renderIcon = () => {
|
|
743
767
|
if (!actionSuccess && icon) return icon;
|
|
744
|
-
if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(SpinnerIcon, { size: 18, className:
|
|
768
|
+
if (isLoading) return /* @__PURE__ */ jsxRuntime.jsx(SpinnerIcon, { size: 18, className: styles.spinnerSpin });
|
|
745
769
|
const IconComponent = phaseIconMap[effectivePhase];
|
|
746
770
|
return /* @__PURE__ */ jsxRuntime.jsx(IconComponent, { size: 18 });
|
|
747
771
|
};
|
|
748
772
|
const iconTransition = prefersReducedMotion ? { duration: 0.01 } : { duration: 0.2 };
|
|
749
|
-
const iconEl = /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${
|
|
773
|
+
const iconEl = /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${styles.iconWrapper}${classNames?.icon ? ` ${classNames.icon}` : ""}`, children: /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
750
774
|
framerMotion.motion.div,
|
|
751
775
|
{
|
|
752
776
|
initial: prefersReducedMotion ? false : { opacity: 0, scale: 0.5 },
|
|
@@ -757,16 +781,16 @@ var GoeyToast = ({
|
|
|
757
781
|
},
|
|
758
782
|
isLoading ? "spinner" : effectivePhase
|
|
759
783
|
) }) });
|
|
760
|
-
const titleEl = /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${
|
|
784
|
+
const titleEl = /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${styles.title}${classNames?.title ? ` ${classNames.title}` : ""}`, children: effectiveTitle });
|
|
761
785
|
const iconAndTitle = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
762
786
|
iconEl,
|
|
763
787
|
titleEl
|
|
764
788
|
] });
|
|
765
|
-
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: wrapperRef, className: `${
|
|
789
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: wrapperRef, className: `${styles.wrapper}${classNames?.wrapper ? ` ${classNames.wrapper}` : ""}`, style: isRight ? { marginLeft: "auto", transform: "scaleX(-1)" } : void 0, role: effectivePhase === "error" ? "alert" : "status", "aria-live": effectivePhase === "error" ? "assertive" : "polite", "aria-atomic": "true", children: [
|
|
766
790
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
767
791
|
"svg",
|
|
768
792
|
{
|
|
769
|
-
className:
|
|
793
|
+
className: styles.blobSvg,
|
|
770
794
|
"aria-hidden": true,
|
|
771
795
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
772
796
|
"path",
|
|
@@ -783,14 +807,14 @@ var GoeyToast = ({
|
|
|
783
807
|
"div",
|
|
784
808
|
{
|
|
785
809
|
ref: contentRef,
|
|
786
|
-
className: `${
|
|
810
|
+
className: `${styles.content} ${showBody ? styles.contentExpanded : styles.contentCompact}${classNames?.content ? ` ${classNames.content}` : ""}`,
|
|
787
811
|
style: isRight ? { transform: "scaleX(-1)", textAlign: "right" } : { textAlign: "left" },
|
|
788
812
|
children: [
|
|
789
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: headerRef, className: `${
|
|
813
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { ref: headerRef, className: `${styles.header} ${titleColorMap[effectivePhase]}${classNames?.header ? ` ${classNames.header}` : ""}`, children: iconAndTitle }),
|
|
790
814
|
/* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: showBody && hasDescription && !dismissing && /* @__PURE__ */ jsxRuntime.jsx(
|
|
791
815
|
framerMotion.motion.div,
|
|
792
816
|
{
|
|
793
|
-
className: `${
|
|
817
|
+
className: `${styles.description}${classNames?.description ? ` ${classNames.description}` : ""}`,
|
|
794
818
|
style: { textAlign: "left" },
|
|
795
819
|
initial: prefersReducedMotion ? false : { opacity: 0 },
|
|
796
820
|
animate: { opacity: 1 },
|
|
@@ -803,7 +827,7 @@ var GoeyToast = ({
|
|
|
803
827
|
/* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: showBody && hasAction && effectiveAction && !dismissing && /* @__PURE__ */ jsxRuntime.jsx(
|
|
804
828
|
framerMotion.motion.div,
|
|
805
829
|
{
|
|
806
|
-
className: `${
|
|
830
|
+
className: `${styles.actionWrapper}${classNames?.actionWrapper ? ` ${classNames.actionWrapper}` : ""}`,
|
|
807
831
|
initial: prefersReducedMotion ? false : { opacity: 0 },
|
|
808
832
|
animate: { opacity: 1 },
|
|
809
833
|
exit: { opacity: 0 },
|
|
@@ -811,7 +835,7 @@ var GoeyToast = ({
|
|
|
811
835
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
812
836
|
"button",
|
|
813
837
|
{
|
|
814
|
-
className: `${
|
|
838
|
+
className: `${styles.actionButton} ${actionColorMap[effectivePhase]}${classNames?.actionButton ? ` ${classNames.actionButton}` : ""}`,
|
|
815
839
|
onClick: handleActionClick,
|
|
816
840
|
type: "button",
|
|
817
841
|
"aria-label": effectiveAction.label,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/context.ts","../src/components/GoeyToaster.tsx","../src/icons/DefaultIcon.tsx","../src/icons/SuccessIcon.tsx","../src/icons/ErrorIcon.tsx","../src/icons/WarningIcon.tsx","../src/icons/InfoIcon.tsx","../src/icons/SpinnerIcon.tsx","../src/usePrefersReducedMotion.ts","../src/components/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"]}
|
|
1
|
+
{"version":3,"sources":["../src/context.ts","../src/components/GoeyToaster.tsx","../src/icons/DefaultIcon.tsx","../src/icons/SuccessIcon.tsx","../src/icons/ErrorIcon.tsx","../src/icons/WarningIcon.tsx","../src/icons/InfoIcon.tsx","../src/icons/SpinnerIcon.tsx","../src/usePrefersReducedMotion.ts","../src/components/goey-styles.ts","../src/components/GoeyToast.tsx","../src/components/ToastErrorBoundary.tsx","../src/goey-toast.tsx"],"names":["useEffect","jsx","Toaster","jsxs","useState","useRef","useCallback","pw","bw","th","useLayoutEffect","phase","animate","collapseDur","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","/** Static class name map — avoids CSS module bundling issues with tsup */\nexport const styles = {\n spinnerSpin: 'goey-spinnerSpin',\n wrapper: 'goey-wrapper',\n blobSvg: 'goey-blobSvg',\n content: 'goey-content',\n contentCompact: 'goey-contentCompact',\n contentExpanded: 'goey-contentExpanded',\n header: 'goey-header',\n iconWrapper: 'goey-iconWrapper',\n title: 'goey-title',\n titleDefault: 'goey-titleDefault',\n titleSuccess: 'goey-titleSuccess',\n titleError: 'goey-titleError',\n titleWarning: 'goey-titleWarning',\n titleInfo: 'goey-titleInfo',\n titleLoading: 'goey-titleLoading',\n description: 'goey-description',\n actionWrapper: 'goey-actionWrapper',\n actionButton: 'goey-actionButton',\n actionDefault: 'goey-actionDefault',\n actionSuccess: 'goey-actionSuccess',\n actionError: 'goey-actionError',\n actionWarning: 'goey-actionWarning',\n actionInfo: 'goey-actionInfo',\n} as const\n","import { useRef, useState, useEffect, useLayoutEffect, useCallback, type FC, type ReactNode } from 'react'\nimport { motion, AnimatePresence, animate } from 'framer-motion'\nimport 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 './goey-styles'\n\nexport interface GoeyToastProps {\n title: string\n description?: ReactNode\n type: GoeyToastType\n action?: GoeyToastAction\n icon?: ReactNode\n phase: GoeyToastPhase\n classNames?: GoeyToastClassNames\n fillColor?: string\n borderColor?: string\n borderWidth?: number\n timing?: GoeyToastTimings\n}\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"]}
|