sonner 1.4.0 → 1.4.1

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 CHANGED
@@ -30,4 +30,4 @@ function App() {
30
30
 
31
31
  ## Documentation
32
32
 
33
- You can find out more about the API and implementation in the [Documentation](https://sonner.emilkowal.ski/getting-started).
33
+ Find the full API reference in the [documentation](https://sonner.emilkowal.ski/getting-started).
package/dist/index.d.ts CHANGED
@@ -25,6 +25,13 @@ interface ToastClassnames {
25
25
  loading?: string;
26
26
  default?: string;
27
27
  }
28
+ interface ToastIcons {
29
+ success?: React.ReactNode;
30
+ info?: React.ReactNode;
31
+ warning?: React.ReactNode;
32
+ error?: React.ReactNode;
33
+ loading?: React.ReactNode;
34
+ }
28
35
  interface ToastT {
29
36
  id: number | string;
30
37
  title?: string | React.ReactNode;
@@ -70,6 +77,7 @@ interface ToastOptions {
70
77
  unstyled?: boolean;
71
78
  classNames?: ToastClassnames;
72
79
  }
80
+ type CnFunction = (...classes: Array<string | undefined>) => string;
73
81
  interface ToasterProps {
74
82
  invert?: boolean;
75
83
  theme?: 'light' | 'dark' | 'system';
@@ -86,9 +94,19 @@ interface ToasterProps {
86
94
  style?: React.CSSProperties;
87
95
  offset?: string | number;
88
96
  dir?: 'rtl' | 'ltr' | 'auto';
97
+ /**
98
+ * @deprecated Please use the `icons` prop instead:
99
+ * ```jsx
100
+ * <Toaster
101
+ * icons={{ loading: <LoadingIcon /> }}
102
+ * />
103
+ * ```
104
+ */
89
105
  loadingIcon?: React.ReactNode;
106
+ icons?: ToastIcons;
90
107
  containerAriaLabel?: string;
91
108
  pauseWhenPageIsHidden?: boolean;
109
+ cn?: CnFunction;
92
110
  }
93
111
  type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title' | 'jsx' | 'delete' | 'promise'> & {
94
112
  id?: number | string;
@@ -106,6 +124,9 @@ declare const toast: ((message: string | React.ReactNode, data?: ExternalToast)
106
124
  loading: (message: string | React.ReactNode, data?: ExternalToast) => string | number;
107
125
  };
108
126
 
127
+ declare function useSonner(): {
128
+ toasts: ToastT[];
129
+ };
109
130
  declare const Toaster: (props: ToasterProps) => React.JSX.Element;
110
131
 
111
- export { ExternalToast, ToastT, Toaster, toast };
132
+ export { ExternalToast, ToastT, Toaster, toast, useSonner };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- "use client";var Ft=Object.create;var Z=Object.defineProperty;var $t=Object.getOwnPropertyDescriptor;var Ut=Object.getOwnPropertyNames;var Wt=Object.getPrototypeOf,_t=Object.prototype.hasOwnProperty;var Vt=(s,e)=>{for(var t in e)Z(s,t,{get:e[t],enumerable:!0})},Bt=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let m of Ut(e))!_t.call(s,m)&&m!==t&&Z(s,m,{get:()=>e[m],enumerable:!(n=$t(e,m))||n.enumerable});return s};var tt=(s,e,t)=>(t=s!=null?Ft(Wt(s)):{},Bt(e||!s||!s.__esModule?Z(t,"default",{value:s,enumerable:!0}):t,s)),Kt=s=>Bt(Z({},"__esModule",{value:!0}),s);var le={};Vt(le,{Toaster:()=>ie,toast:()=>Pt});module.exports=Kt(le);var a=tt(require("react")),Ht=tt(require("react-dom"));function ct(s,{insertAt:e}={}){if(!s||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",e==="top"&&t.firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n),n.styleSheet?n.styleSheet.cssText=s:n.appendChild(document.createTextNode(s))}ct(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
2
- `);var T=tt(require("react")),Mt=s=>{switch(s){case"success":return Jt;case"info":return qt;case"warning":return Gt;case"error":return Ot;default:return null}},Xt=Array(12).fill(0),Nt=({visible:s})=>T.default.createElement("div",{className:"sonner-loading-wrapper","data-visible":s},T.default.createElement("div",{className:"sonner-spinner"},Xt.map((e,t)=>T.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),Jt=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Gt=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),qt=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),Ot=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"}));var ut=tt(require("react")),Dt=()=>{let[s,e]=ut.default.useState(!1);return ut.default.useEffect(()=>{let t=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),s};var ft=1,mt=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)});this.publish=e=>{this.subscribers.forEach(t=>t(e))};this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]};this.create=e=>{var p;let{message:t,...n}=e,m=typeof(e==null?void 0:e.id)=="number"||((p=e.id)==null?void 0:p.length)>0?e.id:ft++,h=this.toasts.find(i=>i.id===m),f=e.dismissible===void 0?!0:e.dismissible;return h?this.toasts=this.toasts.map(i=>i.id===m?(this.publish({...i,...e,id:m,title:t}),{...i,...e,id:m,dismissible:f,title:t}):i):this.addToast({title:t,...n,dismissible:f,id:m}),m};this.dismiss=e=>(e||this.toasts.forEach(t=>{this.subscribers.forEach(n=>n({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e);this.message=(e,t)=>this.create({...t,message:e});this.error=(e,t)=>this.create({...t,message:e,type:"error"});this.success=(e,t)=>this.create({...t,type:"success",message:e});this.info=(e,t)=>this.create({...t,type:"info",message:e});this.warning=(e,t)=>this.create({...t,type:"warning",message:e});this.loading=(e,t)=>this.create({...t,type:"loading",message:e});this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let m=e instanceof Promise?e:e(),h=n!==void 0;return m.then(f=>{if(f&&typeof f.ok=="boolean"&&!f.ok){h=!1;let p=typeof t.error=="function"?t.error(`HTTP error! status: ${f.status}`):t.error,i=typeof t.description=="function"?t.description(`HTTP error! status: ${f.status}`):t.description;this.create({id:n,type:"error",message:p,description:i})}else if(t.success!==void 0){h=!1;let p=typeof t.success=="function"?t.success(f):t.success,i=typeof t.description=="function"?t.description(f):t.description;this.create({id:n,type:"success",message:p,description:i})}}).catch(f=>{if(t.error!==void 0){h=!1;let p=typeof t.error=="function"?t.error(f):t.error,i=typeof t.description=="function"?t.description(f):t.description;this.create({id:n,type:"error",message:p,description:i})}}).finally(()=>{var f;h&&(this.dismiss(n),n=void 0),(f=t.finally)==null||f.call(t)}),n};this.custom=(e,t)=>{let n=(t==null?void 0:t.id)||ft++;return this.create({jsx:e(n),id:n,...t}),n};this.subscribers=[],this.toasts=[]}},w=new mt,Qt=(s,e)=>{let t=(e==null?void 0:e.id)||ft++;return w.addToast({title:s,...e,id:t}),t},Zt=Qt,Pt=Object.assign(Zt,{success:w.success,info:w.info,warning:w.warning,error:w.error,custom:w.custom,message:w.message,promise:w.promise,dismiss:w.dismiss,loading:w.loading});var te=3,ee="32px",ae=4e3,oe=356,Rt=14,se=20,ne=200;function j(...s){return s.filter(Boolean).join(" ")}var re=s=>{var vt,xt,Tt,wt,Et,St,kt;let{invert:e,toast:t,unstyled:n,interacting:m,setHeights:h,visibleToasts:f,heights:p,index:i,toasts:et,expanded:F,removeToast:_,closeButton:V,style:r,cancelButtonStyle:K,actionButtonStyle:at,className:ot="",descriptionClassName:st="",duration:X,position:B,gap:$=Rt,loadingIcon:J,expandByDefault:z,classNames:d,closeButtonAriaLabel:nt="Close toast",pauseWhenPageIsHidden:M}=s,[H,G]=a.default.useState(!1),[q,R]=a.default.useState(!1),[P,O]=a.default.useState(!1),[S,L]=a.default.useState(!1),[rt,l]=a.default.useState(0),[g,b]=a.default.useState(0),N=a.default.useRef(null),x=a.default.useRef(null),u=i===0,U=i+1<=f,v=t.type,D=t.dismissible!==!1,W=t.className||"",Lt=t.descriptionClassName||"",Q=a.default.useMemo(()=>p.findIndex(o=>o.toastId===t.id)||0,[p,t.id]),zt=a.default.useMemo(()=>{var o;return(o=t.closeButton)!=null?o:V},[t.closeButton,V]),pt=a.default.useMemo(()=>t.duration||X||ae,[t.duration,X]),it=a.default.useRef(0),A=a.default.useRef(0),gt=a.default.useRef(0),Y=a.default.useRef(null),[ht,At]=B.split("-"),bt=a.default.useMemo(()=>p.reduce((o,c,y)=>y>=Q?o:o+c.height,0),[p,Q]),yt=Dt(),Yt=t.invert||e,lt=v==="loading";A.current=a.default.useMemo(()=>Q*$+bt,[Q,bt]),a.default.useEffect(()=>{G(!0)},[]),a.default.useLayoutEffect(()=>{if(!H)return;let o=x.current,c=o.style.height;o.style.height="auto";let y=o.getBoundingClientRect().height;o.style.height=c,b(y),h(k=>k.find(E=>E.toastId===t.id)?k.map(E=>E.toastId===t.id?{...E,height:y}:E):[{toastId:t.id,height:y,position:t.position},...k])},[H,t.title,t.description,h,t.id]);let C=a.default.useCallback(()=>{R(!0),l(A.current),h(o=>o.filter(c=>c.toastId!==t.id)),setTimeout(()=>{_(t)},ne)},[t,_,h,A]);a.default.useEffect(()=>{if(t.promise&&v==="loading"||t.duration===1/0||t.type==="loading")return;let o,c=pt;return F||m||M&&yt?(()=>{if(gt.current<it.current){let I=new Date().getTime()-it.current;c=c-I}gt.current=new Date().getTime()})():(()=>{it.current=new Date().getTime(),o=setTimeout(()=>{var I;(I=t.onAutoClose)==null||I.call(t,t),C()},c)})(),()=>clearTimeout(o)},[F,m,z,t,pt,C,t.promise,v,M,yt]),a.default.useEffect(()=>{let o=x.current;if(o){let c=o.getBoundingClientRect().height;return b(c),h(y=>[{toastId:t.id,height:c,position:t.position},...y]),()=>h(y=>y.filter(k=>k.toastId!==t.id))}},[h,t.id]),a.default.useEffect(()=>{t.delete&&C()},[C,t.delete]);function jt(){return J?a.default.createElement("div",{className:"sonner-loader","data-visible":v==="loading"},J):a.default.createElement(Nt,{visible:v==="loading"})}return a.default.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:x,className:j(ot,W,d==null?void 0:d.toast,(vt=t==null?void 0:t.classNames)==null?void 0:vt.toast,d==null?void 0:d[v],(xt=t==null?void 0:t.classNames)==null?void 0:xt[v]),"data-sonner-toast":"","data-styled":!(t.jsx||t.unstyled||n),"data-mounted":H,"data-promise":!!t.promise,"data-removed":q,"data-visible":U,"data-y-position":ht,"data-x-position":At,"data-index":i,"data-front":u,"data-swiping":P,"data-dismissible":D,"data-type":v,"data-invert":Yt,"data-swipe-out":S,"data-expanded":!!(F||z&&H),style:{"--index":i,"--toasts-before":i,"--z-index":et.length-i,"--offset":`${q?rt:A.current}px`,"--initial-height":z?"auto":`${g}px`,...r,...t.style},onPointerDown:o=>{lt||!D||(N.current=new Date,l(A.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(O(!0),Y.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var k,I,E,dt;if(S||!D)return;Y.current=null;let o=Number(((k=x.current)==null?void 0:k.style.getPropertyValue("--swipe-amount").replace("px",""))||0),c=new Date().getTime()-((I=N.current)==null?void 0:I.getTime()),y=Math.abs(o)/c;if(Math.abs(o)>=se||y>.11){l(A.current),(E=t.onDismiss)==null||E.call(t,t),C(),L(!0);return}(dt=x.current)==null||dt.style.setProperty("--swipe-amount","0px"),O(!1)},onPointerMove:o=>{var It;if(!Y.current||!D)return;let c=o.clientY-Y.current.y,y=o.clientX-Y.current.x,I=(ht==="top"?Math.min:Math.max)(0,c),E=o.pointerType==="touch"?10:2;Math.abs(I)>E?(It=x.current)==null||It.style.setProperty("--swipe-amount",`${c}px`):Math.abs(y)>E&&(Y.current=null)}},zt&&!t.jsx?a.default.createElement("button",{"aria-label":nt,"data-disabled":lt,"data-close-button":!0,onClick:lt||!D?()=>{}:()=>{var o;C(),(o=t.onDismiss)==null||o.call(t,t)},className:j(d==null?void 0:d.closeButton,(Tt=t==null?void 0:t.classNames)==null?void 0:Tt.closeButton)},a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},a.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),a.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,t.jsx||a.default.isValidElement(t.title)?t.jsx||t.title:a.default.createElement(a.default.Fragment,null,v||t.icon||t.promise?a.default.createElement("div",{"data-icon":""},(t.promise||t.type==="loading")&&!t.icon?jt():null,t.icon||Mt(v)):null,a.default.createElement("div",{"data-content":""},a.default.createElement("div",{"data-title":"",className:j(d==null?void 0:d.title,(wt=t==null?void 0:t.classNames)==null?void 0:wt.title)},t.title),t.description?a.default.createElement("div",{"data-description":"",className:j(st,Lt,d==null?void 0:d.description,(Et=t==null?void 0:t.classNames)==null?void 0:Et.description)},t.description):null),t.cancel?a.default.createElement("button",{"data-button":!0,"data-cancel":!0,style:t.cancelButtonStyle||K,onClick:o=>{var c;D&&(C(),(c=t.cancel)!=null&&c.onClick&&t.cancel.onClick(o))},className:j(d==null?void 0:d.cancelButton,(St=t==null?void 0:t.classNames)==null?void 0:St.cancelButton)},t.cancel.label):null,t.action?a.default.createElement("button",{"data-button":"",style:t.actionButtonStyle||at,onClick:o=>{var c;(c=t.action)==null||c.onClick(o),!o.defaultPrevented&&C()},className:j(d==null?void 0:d.actionButton,(kt=t==null?void 0:t.classNames)==null?void 0:kt.actionButton)},t.action.label):null))};function Ct(){if(typeof window=="undefined"||typeof document=="undefined")return"ltr";let s=document.documentElement.getAttribute("dir");return s==="auto"||!s?window.getComputedStyle(document.documentElement).direction:s}var ie=s=>{let{invert:e,position:t="bottom-right",hotkey:n=["altKey","KeyT"],expand:m,closeButton:h,className:f,offset:p,theme:i="light",richColors:et,duration:F,style:_,visibleToasts:V=te,toastOptions:r,dir:K=Ct(),gap:at,loadingIcon:ot,containerAriaLabel:st="Notifications",pauseWhenPageIsHidden:X}=s,[B,$]=a.default.useState([]),J=a.default.useMemo(()=>Array.from(new Set([t].concat(B.filter(l=>l.position).map(l=>l.position)))),[B,t]),[z,d]=a.default.useState([]),[nt,M]=a.default.useState(!1),[H,G]=a.default.useState(!1),[q,R]=a.default.useState(i!=="system"?i:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),P=a.default.useRef(null),O=n.join("+").replace(/Key/g,"").replace(/Digit/g,""),S=a.default.useRef(null),L=a.default.useRef(!1),rt=a.default.useCallback(l=>$(g=>g.filter(({id:b})=>b!==l.id)),[]);return a.default.useEffect(()=>w.subscribe(l=>{if(l.dismiss){$(g=>g.map(b=>b.id===l.id?{...b,delete:!0}:b));return}setTimeout(()=>{Ht.default.flushSync(()=>{$(g=>{let b=g.findIndex(N=>N.id===l.id);return b!==-1?[...g.slice(0,b),{...g[b],...l},...g.slice(b+1)]:[l,...g]})})})}),[]),a.default.useEffect(()=>{if(i!=="system"){R(i);return}i==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?R("dark"):R("light")),typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:l})=>{R(l?"dark":"light")})},[i]),a.default.useEffect(()=>{B.length<=1&&M(!1)},[B]),a.default.useEffect(()=>{let l=g=>{var N,x;n.every(u=>g[u]||g.code===u)&&(M(!0),(N=P.current)==null||N.focus()),g.code==="Escape"&&(document.activeElement===P.current||(x=P.current)!=null&&x.contains(document.activeElement))&&M(!1)};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[n]),a.default.useEffect(()=>{if(P.current)return()=>{S.current&&(S.current.focus({preventScroll:!0}),S.current=null,L.current=!1)}},[P.current]),B.length?a.default.createElement("section",{"aria-label":`${st} ${O}`,tabIndex:-1},J.map((l,g)=>{var x;let[b,N]=l.split("-");return a.default.createElement("ol",{key:l,dir:K==="auto"?Ct():K,tabIndex:-1,ref:P,className:f,"data-sonner-toaster":!0,"data-theme":q,"data-rich-colors":et,"data-y-position":b,"data-x-position":N,style:{"--front-toast-height":`${(x=z[0])==null?void 0:x.height}px`,"--offset":typeof p=="number"?`${p}px`:p||ee,"--width":`${oe}px`,"--gap":`${Rt}px`,..._},onBlur:u=>{L.current&&!u.currentTarget.contains(u.relatedTarget)&&(L.current=!1,S.current&&(S.current.focus({preventScroll:!0}),S.current=null))},onFocus:u=>{u.target instanceof HTMLElement&&u.target.dataset.dismissible==="false"||L.current||(L.current=!0,S.current=u.relatedTarget)},onMouseEnter:()=>M(!0),onMouseMove:()=>M(!0),onMouseLeave:()=>{H||M(!1)},onPointerDown:u=>{u.target instanceof HTMLElement&&u.target.dataset.dismissible==="false"||G(!0)},onPointerUp:()=>G(!1)},B.filter(u=>!u.position&&g===0||u.position===l).map((u,U)=>{var v,D;return a.default.createElement(re,{key:u.id,index:U,toast:u,duration:(v=r==null?void 0:r.duration)!=null?v:F,className:r==null?void 0:r.className,descriptionClassName:r==null?void 0:r.descriptionClassName,invert:e,visibleToasts:V,closeButton:(D=r==null?void 0:r.closeButton)!=null?D:h,interacting:H,position:l,style:r==null?void 0:r.style,unstyled:r==null?void 0:r.unstyled,classNames:r==null?void 0:r.classNames,cancelButtonStyle:r==null?void 0:r.cancelButtonStyle,actionButtonStyle:r==null?void 0:r.actionButtonStyle,removeToast:rt,toasts:B.filter(W=>W.position==u.position),heights:z.filter(W=>W.position==u.position),setHeights:d,expandByDefault:m,gap:at,loadingIcon:ot,expanded:nt,pauseWhenPageIsHidden:X})}))})):null};0&&(module.exports={Toaster,toast});
1
+ "use client";var $t=Object.create;var Q=Object.defineProperty;var _t=Object.getOwnPropertyDescriptor;var Ut=Object.getOwnPropertyNames;var Wt=Object.getPrototypeOf,Vt=Object.prototype.hasOwnProperty;var Kt=(s,e)=>{for(var t in e)Q(s,t,{get:e[t],enumerable:!0})},Mt=(s,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let u of Ut(e))!Vt.call(s,u)&&u!==t&&Q(s,u,{get:()=>e[u],enumerable:!(n=_t(e,u))||n.enumerable});return s};var Z=(s,e,t)=>(t=s!=null?$t(Wt(s)):{},Mt(e||!s||!s.__esModule?Q(t,"default",{value:s,enumerable:!0}):t,s)),Xt=s=>Mt(Q({},"__esModule",{value:!0}),s);var ue={};Kt(ue,{Toaster:()=>ce,toast:()=>Ct,useSonner:()=>de});module.exports=Xt(ue);var a=Z(require("react")),Lt=Z(require("react-dom"));function ut(s,{insertAt:e}={}){if(!s||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",e==="top"&&t.firstChild?t.insertBefore(n,t.firstChild):t.appendChild(n),n.styleSheet?n.styleSheet.cssText=s:n.appendChild(document.createTextNode(s))}ut(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
2
+ `);var k=Z(require("react")),Nt=s=>{switch(s){case"success":return Gt;case"info":return Ot;case"warning":return qt;case"error":return Qt;default:return null}},Jt=Array(12).fill(0),Dt=({visible:s})=>k.default.createElement("div",{className:"sonner-loading-wrapper","data-visible":s},k.default.createElement("div",{className:"sonner-spinner"},Jt.map((e,t)=>k.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),Gt=k.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},k.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),qt=k.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},k.default.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Ot=k.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},k.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),Qt=k.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},k.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"}));var ft=Z(require("react")),Pt=()=>{let[s,e]=ft.default.useState(!1);return ft.default.useEffect(()=>{let t=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),s};var mt=1,pt=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)});this.publish=e=>{this.subscribers.forEach(t=>t(e))};this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]};this.create=e=>{var h;let{message:t,...n}=e,u=typeof(e==null?void 0:e.id)=="number"||((h=e.id)==null?void 0:h.length)>0?e.id:mt++,c=this.toasts.find(i=>i.id===u),p=e.dismissible===void 0?!0:e.dismissible;return c?this.toasts=this.toasts.map(i=>i.id===u?(this.publish({...i,...e,id:u,title:t}),{...i,...e,id:u,dismissible:p,title:t}):i):this.addToast({title:t,...n,dismissible:p,id:u}),u};this.dismiss=e=>(e||this.toasts.forEach(t=>{this.subscribers.forEach(n=>n({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e);this.message=(e,t)=>this.create({...t,message:e});this.error=(e,t)=>this.create({...t,message:e,type:"error"});this.success=(e,t)=>this.create({...t,type:"success",message:e});this.info=(e,t)=>this.create({...t,type:"info",message:e});this.warning=(e,t)=>this.create({...t,type:"warning",message:e});this.loading=(e,t)=>this.create({...t,type:"loading",message:e});this.promise=(e,t)=>{if(!t)return;let n;t.loading!==void 0&&(n=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let u=e instanceof Promise?e:e(),c=n!==void 0;return u.then(p=>{if(p&&typeof p.ok=="boolean"&&!p.ok){c=!1;let h=typeof t.error=="function"?t.error(`HTTP error! status: ${p.status}`):t.error,i=typeof t.description=="function"?t.description(`HTTP error! status: ${p.status}`):t.description;this.create({id:n,type:"error",message:h,description:i})}else if(t.success!==void 0){c=!1;let h=typeof t.success=="function"?t.success(p):t.success,i=typeof t.description=="function"?t.description(p):t.description;this.create({id:n,type:"success",message:h,description:i})}}).catch(p=>{if(t.error!==void 0){c=!1;let h=typeof t.error=="function"?t.error(p):t.error,i=typeof t.description=="function"?t.description(p):t.description;this.create({id:n,type:"error",message:h,description:i})}}).finally(()=>{var p;c&&(this.dismiss(n),n=void 0),(p=t.finally)==null||p.call(t)}),n};this.custom=(e,t)=>{let n=(t==null?void 0:t.id)||mt++;return this.create({jsx:e(n),id:n,...t}),n};this.subscribers=[],this.toasts=[]}},x=new pt,Zt=(s,e)=>{let t=(e==null?void 0:e.id)||mt++;return x.addToast({title:s,...e,id:t}),t},te=Zt,Ct=Object.assign(te,{success:x.success,info:x.info,warning:x.warning,error:x.error,custom:x.custom,message:x.message,promise:x.promise,dismiss:x.dismiss,loading:x.loading});var ee=3,ae="32px",oe=4e3,se=356,Rt=14,ne=20,re=200;function ie(...s){return s.filter(Boolean).join(" ")}var le=s=>{var xt,Tt,wt,Et,St,kt,It;let{invert:e,toast:t,unstyled:n,interacting:u,setHeights:c,visibleToasts:p,heights:h,index:i,toasts:tt,expanded:F,removeToast:U,closeButton:W,style:r,cancelButtonStyle:V,actionButtonStyle:et,className:at="",descriptionClassName:ot="",duration:K,position:st,gap:nt=Rt,loadingIcon:E,expandByDefault:A,classNames:l,icons:T,closeButtonAriaLabel:rt="Close toast",pauseWhenPageIsHidden:X,cn:w}=s,[L,J]=a.default.useState(!1),[G,R]=a.default.useState(!1),[C,q]=a.default.useState(!1),[B,z]=a.default.useState(!1),[it,d]=a.default.useState(0),[g,b]=a.default.useState(0),D=a.default.useRef(null),S=a.default.useRef(null),m=i===0,$=i+1<=p,y=t.type,P=t.dismissible!==!1,_=t.className||"",zt=t.descriptionClassName||"",O=a.default.useMemo(()=>h.findIndex(o=>o.toastId===t.id)||0,[h,t.id]),At=a.default.useMemo(()=>{var o;return(o=t.closeButton)!=null?o:W},[t.closeButton,W]),gt=a.default.useMemo(()=>t.duration||K||oe,[t.duration,K]),lt=a.default.useRef(0),Y=a.default.useRef(0),ht=a.default.useRef(0),j=a.default.useRef(null),[bt,Yt]=st.split("-"),yt=a.default.useMemo(()=>h.reduce((o,f,v)=>v>=O?o:o+f.height,0),[h,O]),vt=Pt(),jt=t.invert||e,dt=y==="loading";Y.current=a.default.useMemo(()=>O*nt+yt,[O,yt]),a.default.useEffect(()=>{J(!0)},[]),a.default.useLayoutEffect(()=>{if(!L)return;let o=S.current,f=o.style.height;o.style.height="auto";let v=o.getBoundingClientRect().height;o.style.height=f,b(v),c(M=>M.find(I=>I.toastId===t.id)?M.map(I=>I.toastId===t.id?{...I,height:v}:I):[{toastId:t.id,height:v,position:t.position},...M])},[L,t.title,t.description,c,t.id]);let H=a.default.useCallback(()=>{R(!0),d(Y.current),c(o=>o.filter(f=>f.toastId!==t.id)),setTimeout(()=>{U(t)},re)},[t,U,c,Y]);a.default.useEffect(()=>{if(t.promise&&y==="loading"||t.duration===1/0||t.type==="loading")return;let o,f=gt;return F||u||X&&vt?(()=>{if(ht.current<lt.current){let N=new Date().getTime()-lt.current;f=f-N}ht.current=new Date().getTime()})():(()=>{lt.current=new Date().getTime(),o=setTimeout(()=>{var N;(N=t.onAutoClose)==null||N.call(t,t),H()},f)})(),()=>clearTimeout(o)},[F,u,A,t,gt,H,t.promise,y,X,vt]),a.default.useEffect(()=>{let o=S.current;if(o){let f=o.getBoundingClientRect().height;return b(f),c(v=>[{toastId:t.id,height:f,position:t.position},...v]),()=>c(v=>v.filter(M=>M.toastId!==t.id))}},[c,t.id]),a.default.useEffect(()=>{t.delete&&H()},[H,t.delete]);function Ft(){return T!=null&&T.loading?a.default.createElement("div",{className:"loader","data-visible":y==="loading"},T.loading):E?a.default.createElement("div",{className:"sonner-loader","data-visible":y==="loading"},E):a.default.createElement(Dt,{visible:y==="loading"})}return a.default.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:S,className:w(at,_,l==null?void 0:l.toast,(xt=t==null?void 0:t.classNames)==null?void 0:xt.toast,l==null?void 0:l.default,l==null?void 0:l[y],(Tt=t==null?void 0:t.classNames)==null?void 0:Tt[y]),"data-sonner-toast":"","data-styled":!(t.jsx||t.unstyled||n),"data-mounted":L,"data-promise":!!t.promise,"data-removed":G,"data-visible":$,"data-y-position":bt,"data-x-position":Yt,"data-index":i,"data-front":m,"data-swiping":C,"data-dismissible":P,"data-type":y,"data-invert":jt,"data-swipe-out":B,"data-expanded":!!(F||A&&L),style:{"--index":i,"--toasts-before":i,"--z-index":tt.length-i,"--offset":`${G?it:Y.current}px`,"--initial-height":A?"auto":`${g}px`,...r,...t.style},onPointerDown:o=>{dt||!P||(D.current=new Date,d(Y.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(q(!0),j.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var M,N,I,ct;if(B||!P)return;j.current=null;let o=Number(((M=S.current)==null?void 0:M.style.getPropertyValue("--swipe-amount").replace("px",""))||0),f=new Date().getTime()-((N=D.current)==null?void 0:N.getTime()),v=Math.abs(o)/f;if(Math.abs(o)>=ne||v>.11){d(Y.current),(I=t.onDismiss)==null||I.call(t,t),H(),z(!0);return}(ct=S.current)==null||ct.style.setProperty("--swipe-amount","0px"),q(!1)},onPointerMove:o=>{var Bt;if(!j.current||!P)return;let f=o.clientY-j.current.y,v=o.clientX-j.current.x,N=(bt==="top"?Math.min:Math.max)(0,f),I=o.pointerType==="touch"?10:2;Math.abs(N)>I?(Bt=S.current)==null||Bt.style.setProperty("--swipe-amount",`${f}px`):Math.abs(v)>I&&(j.current=null)}},At&&!t.jsx?a.default.createElement("button",{"aria-label":rt,"data-disabled":dt,"data-close-button":!0,onClick:dt||!P?()=>{}:()=>{var o;H(),(o=t.onDismiss)==null||o.call(t,t)},className:w(l==null?void 0:l.closeButton,(wt=t==null?void 0:t.classNames)==null?void 0:wt.closeButton)},a.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},a.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),a.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,t.jsx||a.default.isValidElement(t.title)?t.jsx||t.title:a.default.createElement(a.default.Fragment,null,y||t.icon||t.promise?a.default.createElement("div",{"data-icon":""},t.promise||y==="loading"?t.icon||(T==null?void 0:T.loading)||Ft():t.icon||(T==null?void 0:T[y])||Nt(y)):null,a.default.createElement("div",{"data-content":""},a.default.createElement("div",{"data-title":"",className:w(l==null?void 0:l.title,(Et=t==null?void 0:t.classNames)==null?void 0:Et.title)},t.title),t.description?a.default.createElement("div",{"data-description":"",className:w(ot,zt,l==null?void 0:l.description,(St=t==null?void 0:t.classNames)==null?void 0:St.description)},t.description):null),t.cancel?a.default.createElement("button",{"data-button":!0,"data-cancel":!0,style:t.cancelButtonStyle||V,onClick:o=>{var f;P&&(H(),(f=t.cancel)!=null&&f.onClick&&t.cancel.onClick(o))},className:w(l==null?void 0:l.cancelButton,(kt=t==null?void 0:t.classNames)==null?void 0:kt.cancelButton)},t.cancel.label):null,t.action?a.default.createElement("button",{"data-button":"",style:t.actionButtonStyle||et,onClick:o=>{var f;(f=t.action)==null||f.onClick(o),!o.defaultPrevented&&H()},className:w(l==null?void 0:l.actionButton,(It=t==null?void 0:t.classNames)==null?void 0:It.actionButton)},t.action.label):null))};function Ht(){if(typeof window=="undefined"||typeof document=="undefined")return"ltr";let s=document.documentElement.getAttribute("dir");return s==="auto"||!s?window.getComputedStyle(document.documentElement).direction:s}function de(){let[s,e]=a.default.useState([]);return a.default.useEffect(()=>x.subscribe(t=>{e(n=>{if("dismiss"in t&&t.dismiss)return n.filter(c=>c.id!==t.id);let u=n.findIndex(c=>c.id===t.id);if(u!==-1){let c=[...n];return c[u]={...c[u],...t},c}else return[t,...n]})}),[]),{toasts:s}}var ce=s=>{let{invert:e,position:t="bottom-right",hotkey:n=["altKey","KeyT"],expand:u,closeButton:c,className:p,offset:h,theme:i="light",richColors:tt,duration:F,style:U,visibleToasts:W=ee,toastOptions:r,dir:V=Ht(),gap:et,loadingIcon:at,icons:ot,containerAriaLabel:K="Notifications",pauseWhenPageIsHidden:st,cn:nt=ie}=s,[E,A]=a.default.useState([]),l=a.default.useMemo(()=>Array.from(new Set([t].concat(E.filter(d=>d.position).map(d=>d.position)))),[E,t]),[T,rt]=a.default.useState([]),[X,w]=a.default.useState(!1),[L,J]=a.default.useState(!1),[G,R]=a.default.useState(i!=="system"?i:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),C=a.default.useRef(null),q=n.join("+").replace(/Key/g,"").replace(/Digit/g,""),B=a.default.useRef(null),z=a.default.useRef(!1),it=a.default.useCallback(d=>{var g;(g=E.find(b=>b.id===d.id))!=null&&g.delete||x.dismiss(d.id)},[E]);return a.default.useEffect(()=>x.subscribe(d=>{if(d.dismiss){A(g=>g.map(b=>b.id===d.id?{...b,delete:!0}:b));return}setTimeout(()=>{Lt.default.flushSync(()=>{A(g=>{let b=g.findIndex(D=>D.id===d.id);return b!==-1?[...g.slice(0,b),{...g[b],...d},...g.slice(b+1)]:[d,...g]})})})}),[]),a.default.useEffect(()=>{if(i!=="system"){R(i);return}i==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?R("dark"):R("light")),typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:d})=>{R(d?"dark":"light")})},[i]),a.default.useEffect(()=>{E.length<=1&&w(!1)},[E]),a.default.useEffect(()=>{let d=g=>{var D,S;n.every(m=>g[m]||g.code===m)&&(w(!0),(D=C.current)==null||D.focus()),g.code==="Escape"&&(document.activeElement===C.current||(S=C.current)!=null&&S.contains(document.activeElement))&&w(!1)};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[n]),a.default.useEffect(()=>{if(C.current)return()=>{B.current&&(B.current.focus({preventScroll:!0}),B.current=null,z.current=!1)}},[C.current]),E.length?a.default.createElement("section",{"aria-label":`${K} ${q}`,tabIndex:-1},l.map((d,g)=>{var S;let[b,D]=d.split("-");return a.default.createElement("ol",{key:d,dir:V==="auto"?Ht():V,tabIndex:-1,ref:C,className:p,"data-sonner-toaster":!0,"data-theme":G,"data-rich-colors":tt,"data-y-position":b,"data-x-position":D,style:{"--front-toast-height":`${(S=T[0])==null?void 0:S.height}px`,"--offset":typeof h=="number"?`${h}px`:h||ae,"--width":`${se}px`,"--gap":`${Rt}px`,...U},onBlur:m=>{z.current&&!m.currentTarget.contains(m.relatedTarget)&&(z.current=!1,B.current&&(B.current.focus({preventScroll:!0}),B.current=null))},onFocus:m=>{m.target instanceof HTMLElement&&m.target.dataset.dismissible==="false"||z.current||(z.current=!0,B.current=m.relatedTarget)},onMouseEnter:()=>w(!0),onMouseMove:()=>w(!0),onMouseLeave:()=>{L||w(!1)},onPointerDown:m=>{m.target instanceof HTMLElement&&m.target.dataset.dismissible==="false"||J(!0)},onPointerUp:()=>J(!1)},E.filter(m=>!m.position&&g===0||m.position===d).map((m,$)=>{var y,P;return a.default.createElement(le,{key:m.id,icons:ot,index:$,toast:m,duration:(y=r==null?void 0:r.duration)!=null?y:F,className:r==null?void 0:r.className,descriptionClassName:r==null?void 0:r.descriptionClassName,invert:e,visibleToasts:W,closeButton:(P=r==null?void 0:r.closeButton)!=null?P:c,interacting:L,position:d,style:r==null?void 0:r.style,unstyled:r==null?void 0:r.unstyled,classNames:r==null?void 0:r.classNames,cancelButtonStyle:r==null?void 0:r.cancelButtonStyle,actionButtonStyle:r==null?void 0:r.actionButtonStyle,removeToast:it,toasts:E.filter(_=>_.position==m.position),heights:T.filter(_=>_.position==m.position),setHeights:rt,expandByDefault:u,gap:et,loadingIcon:at,expanded:X,pauseWhenPageIsHidden:st,cn:nt})}))})):null};0&&(module.exports={Toaster,toast,useSonner});
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/hooks.tsx","../src/state.ts"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport './styles.css';\nimport { getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport type { HeightT, ToastT, ToastToDismiss, ExternalToast, ToasterProps, ToastProps } from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_THRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap = GAP,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n let remainingTime = duration;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime = remainingTime - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n expandByDefault,\n toast,\n duration,\n deleteToast,\n toast.promise,\n toastType,\n pauseWhenPageIsHidden,\n isDocumentHidden,\n ]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (loadingIconProp) {\n return (\n <div className=\"sonner-loader\" data-visible={toastType === 'loading'}>\n {loadingIconProp}\n </div>\n );\n }\n return <Loader visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n aria-live={toast.important ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n role=\"status\"\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const xPosition = event.clientX - pointerStartRef.current.x;\n\n const clamp = y === 'top' ? Math.min : Math.max;\n const clampedY = clamp(0, yPosition);\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n } else if (Math.abs(xPosition) > swipeStartThreshold) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n ) : null}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx || toast.title\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\">\n {(toast.promise || toast.type === 'loading') && !toast.icon ? getLoadingIcon() : null}\n {toast.icon || getAsset(toastType)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n if (!dismissible) return;\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick(event);\n }\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n toast.action?.onClick(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap,\n loadingIcon,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n React.useEffect(() => {\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n\n if (typeof window === 'undefined') return;\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`${containerAriaLabel} ${hotkeyLabel}`} tabIndex={-1}>\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter(t => t.position == toast.position)}\n heights={heights.filter(h => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n};\nexport { toast, Toaster, type ToastT, type ExternalToast };\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(false);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import React from 'react';\nimport type { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss, ToastTypes } from './types';\n\nlet toastsCounter = 1;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: string | React.ReactNode;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n\n p.then((response) => {\n // TODO: Clean up TS here, response has incorrect type\n // @ts-expect-error\n if (response && typeof response.ok === 'boolean' && !response.ok) {\n shouldDismiss = false;\n const message =\n // @ts-expect-error\n typeof data.error === 'function' ? data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? // @ts-expect-error\n data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? data.success(response) : data.success;\n const description = typeof data.description === 'function' ? data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch((error) => {\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n const description = typeof data.description === 'function' ? data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n return id;\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n\n ToastState.addToast({\n title: message,\n ...data,\n id,\n });\n return id;\n};\n\nconst basicToast = toastFunction;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n});\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","__toCommonJS","import_react","import_react_dom","styleInject","css","insertAt","head","style","styleInject","import_react","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","React","_","i","import_react","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","React","callback","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","response","description","error","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","cn","classes","Toast","props","_a","_b","_c","_d","_e","_f","_g","ToasterInvert","toast","unstyled","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButtonFromToaster","style","cancelButtonStyle","actionButtonStyle","className","descriptionClassName","durationFromToaster","position","gap","loadingIconProp","expandByDefault","classNames","closeButtonAriaLabel","pauseWhenPageIsHidden","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","isDocumentHidden","useIsDocumentHidden","invert","disabled","toastNode","originalHeight","newHeight","deleteToast","h","timeoutId","remainingTime","elapsedTime","getLoadingIcon","Loader","event","swipeAmount","timeTaken","velocity","yPosition","xPosition","clampedY","swipeStartThreshold","getAsset","getDocumentDirection","dirAttribute","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","loadingIcon","containerAriaLabel","setToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","id","ToastState","t","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
1
+ {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/hooks.tsx","../src/state.ts"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport './styles.css';\nimport { getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport type { HeightT, ToastT, ToastToDismiss, ExternalToast, ToasterProps, ToastProps } from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_THRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction _cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap = GAP,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n icons,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n cn,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n let remainingTime = duration;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime = remainingTime - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n expandByDefault,\n toast,\n duration,\n deleteToast,\n toast.promise,\n toastType,\n pauseWhenPageIsHidden,\n isDocumentHidden,\n ]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (icons?.loading) {\n return (\n <div className=\"loader\" data-visible={toastType === 'loading'}>\n {icons.loading}\n </div>\n );\n }\n\n if (loadingIconProp) {\n return (\n <div className=\"sonner-loader\" data-visible={toastType === 'loading'}>\n {loadingIconProp}\n </div>\n );\n }\n return <Loader visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n aria-live={toast.important ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n role=\"status\"\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.default,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const xPosition = event.clientX - pointerStartRef.current.x;\n\n const clamp = y === 'top' ? Math.min : Math.max;\n const clampedY = clamp(0, yPosition);\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n } else if (Math.abs(xPosition) > swipeStartThreshold) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n ) : null}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx || toast.title\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\">\n {toast.promise || toastType === 'loading'\n ? toast.icon || icons?.loading || getLoadingIcon()\n : toast.icon || icons?.[toastType] || getAsset(toastType)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n if (!dismissible) return;\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick(event);\n }\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n toast.action?.onClick(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState<ToastT[]>([]);\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n setActiveToasts((currentToasts) => {\n if ('dismiss' in toast && toast.dismiss) {\n return currentToasts.filter((t) => t.id !== toast.id);\n }\n\n const existingToastIndex = currentToasts.findIndex((t) => t.id === toast.id);\n if (existingToastIndex !== -1) {\n const updatedToasts = [...currentToasts];\n updatedToasts[existingToastIndex] = { ...updatedToasts[existingToastIndex], ...toast };\n return updatedToasts;\n } else {\n return [toast, ...currentToasts];\n }\n });\n });\n }, []);\n\n return {\n toasts: activeToasts,\n };\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap,\n loadingIcon,\n icons,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n cn = _cn,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toastToRemove: ToastT) => {\n if (!toasts.find((toast) => toast.id === toastToRemove.id)?.delete) {\n ToastState.dismiss(toastToRemove.id);\n }\n },\n [toasts],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n React.useEffect(() => {\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n\n if (typeof window === 'undefined') return;\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`${containerAriaLabel} ${hotkeyLabel}`} tabIndex={-1}>\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n icons={icons}\n index={index}\n toast={toast}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter((t) => t.position == toast.position)}\n heights={heights.filter((h) => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n cn={cn}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n};\nexport { toast, Toaster, type ToastT, type ExternalToast, useSonner };\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(false);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import React from 'react';\nimport type { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss, ToastTypes } from './types';\n\nlet toastsCounter = 1;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: string | React.ReactNode;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n\n p.then((response) => {\n // TODO: Clean up TS here, response has incorrect type\n // @ts-expect-error\n if (response && typeof response.ok === 'boolean' && !response.ok) {\n shouldDismiss = false;\n const message =\n // @ts-expect-error\n typeof data.error === 'function' ? data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? // @ts-expect-error\n data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? data.success(response) : data.success;\n const description = typeof data.description === 'function' ? data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch((error) => {\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n const description = typeof data.description === 'function' ? data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n return id;\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n\n ToastState.addToast({\n title: message,\n ...data,\n id,\n });\n return id;\n};\n\nconst basicToast = toastFunction;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n});\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","useSonner","__toCommonJS","import_react","import_react_dom","styleInject","css","insertAt","head","style","styleInject","import_react","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","React","_","i","import_react","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","React","callback","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","response","description","error","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","_cn","classes","Toast","props","_a","_b","_c","_d","_e","_f","_g","ToasterInvert","toast","unstyled","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButtonFromToaster","style","cancelButtonStyle","actionButtonStyle","className","descriptionClassName","durationFromToaster","position","gap","loadingIconProp","expandByDefault","classNames","icons","closeButtonAriaLabel","pauseWhenPageIsHidden","cn","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","isDocumentHidden","useIsDocumentHidden","invert","disabled","toastNode","originalHeight","newHeight","deleteToast","h","timeoutId","remainingTime","elapsedTime","getLoadingIcon","Loader","event","swipeAmount","timeTaken","velocity","yPosition","xPosition","clampedY","swipeStartThreshold","getAsset","getDocumentDirection","dirAttribute","useSonner","activeToasts","setActiveToasts","ToastState","currentToasts","t","existingToastIndex","updatedToasts","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","loadingIcon","containerAriaLabel","setToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- "use client";import e from"react";import Wt from"react-dom";function lt(c,{insertAt:a}={}){if(!c||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css",a==="top"&&t.firstChild?t.insertBefore(s,t.firstChild):t.appendChild(s),s.styleSheet?s.styleSheet.cssText=c:s.appendChild(document.createTextNode(c))}lt(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
2
- `);import E from"react";var St=c=>{switch(c){case"success":return zt;case"info":return Yt;case"warning":return At;case"error":return jt;default:return null}},Lt=Array(12).fill(0),kt=({visible:c})=>E.createElement("div",{className:"sonner-loading-wrapper","data-visible":c},E.createElement("div",{className:"sonner-spinner"},Lt.map((a,t)=>E.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),zt=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},E.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),At=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},E.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Yt=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},E.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),jt=E.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},E.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"}));import It from"react";var Bt=()=>{let[c,a]=It.useState(!1);return It.useEffect(()=>{let t=()=>{a(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),c};var dt=1,ct=class{constructor(){this.subscribe=a=>(this.subscribers.push(a),()=>{let t=this.subscribers.indexOf(a);this.subscribers.splice(t,1)});this.publish=a=>{this.subscribers.forEach(t=>t(a))};this.addToast=a=>{this.publish(a),this.toasts=[...this.toasts,a]};this.create=a=>{var m;let{message:t,...s}=a,y=typeof(a==null?void 0:a.id)=="number"||((m=a.id)==null?void 0:m.length)>0?a.id:dt++,g=this.toasts.find(r=>r.id===y),f=a.dismissible===void 0?!0:a.dismissible;return g?this.toasts=this.toasts.map(r=>r.id===y?(this.publish({...r,...a,id:y,title:t}),{...r,...a,id:y,dismissible:f,title:t}):r):this.addToast({title:t,...s,dismissible:f,id:y}),y};this.dismiss=a=>(a||this.toasts.forEach(t=>{this.subscribers.forEach(s=>s({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:a,dismiss:!0})),a);this.message=(a,t)=>this.create({...t,message:a});this.error=(a,t)=>this.create({...t,message:a,type:"error"});this.success=(a,t)=>this.create({...t,type:"success",message:a});this.info=(a,t)=>this.create({...t,type:"info",message:a});this.warning=(a,t)=>this.create({...t,type:"warning",message:a});this.loading=(a,t)=>this.create({...t,type:"loading",message:a});this.promise=(a,t)=>{if(!t)return;let s;t.loading!==void 0&&(s=this.create({...t,promise:a,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let y=a instanceof Promise?a:a(),g=s!==void 0;return y.then(f=>{if(f&&typeof f.ok=="boolean"&&!f.ok){g=!1;let m=typeof t.error=="function"?t.error(`HTTP error! status: ${f.status}`):t.error,r=typeof t.description=="function"?t.description(`HTTP error! status: ${f.status}`):t.description;this.create({id:s,type:"error",message:m,description:r})}else if(t.success!==void 0){g=!1;let m=typeof t.success=="function"?t.success(f):t.success,r=typeof t.description=="function"?t.description(f):t.description;this.create({id:s,type:"success",message:m,description:r})}}).catch(f=>{if(t.error!==void 0){g=!1;let m=typeof t.error=="function"?t.error(f):t.error,r=typeof t.description=="function"?t.description(f):t.description;this.create({id:s,type:"error",message:m,description:r})}}).finally(()=>{var f;g&&(this.dismiss(s),s=void 0),(f=t.finally)==null||f.call(t)}),s};this.custom=(a,t)=>{let s=(t==null?void 0:t.id)||dt++;return this.create({jsx:a(s),id:s,...t}),s};this.subscribers=[],this.toasts=[]}},T=new ct,Ft=(c,a)=>{let t=(a==null?void 0:a.id)||dt++;return T.addToast({title:c,...a,id:t}),t},$t=Ft,Ut=Object.assign($t,{success:T.success,info:T.info,warning:T.warning,error:T.error,custom:T.custom,message:T.message,promise:T.promise,dismiss:T.dismiss,loading:T.loading});var _t=3,Vt="32px",Kt=4e3,Xt=356,Nt=14,Jt=20,Gt=200;function j(...c){return c.filter(Boolean).join(" ")}var qt=c=>{var ht,bt,yt,vt,xt,Tt,wt;let{invert:a,toast:t,unstyled:s,interacting:y,setHeights:g,visibleToasts:f,heights:m,index:r,toasts:Z,expanded:F,removeToast:_,closeButton:V,style:n,cancelButtonStyle:K,actionButtonStyle:tt,className:et="",descriptionClassName:at="",duration:X,position:B,gap:$=Nt,loadingIcon:J,expandByDefault:z,classNames:l,closeButtonAriaLabel:ot="Close toast",pauseWhenPageIsHidden:M}=c,[H,G]=e.useState(!1),[q,R]=e.useState(!1),[P,O]=e.useState(!1),[S,L]=e.useState(!1),[st,i]=e.useState(0),[p,h]=e.useState(0),N=e.useRef(null),x=e.useRef(null),u=r===0,U=r+1<=f,v=t.type,D=t.dismissible!==!1,W=t.className||"",Dt=t.descriptionClassName||"",Q=e.useMemo(()=>m.findIndex(o=>o.toastId===t.id)||0,[m,t.id]),Pt=e.useMemo(()=>{var o;return(o=t.closeButton)!=null?o:V},[t.closeButton,V]),ut=e.useMemo(()=>t.duration||X||Kt,[t.duration,X]),nt=e.useRef(0),A=e.useRef(0),ft=e.useRef(0),Y=e.useRef(null),[mt,Ct]=B.split("-"),pt=e.useMemo(()=>m.reduce((o,d,b)=>b>=Q?o:o+d.height,0),[m,Q]),gt=Bt(),Ht=t.invert||a,rt=v==="loading";A.current=e.useMemo(()=>Q*$+pt,[Q,pt]),e.useEffect(()=>{G(!0)},[]),e.useLayoutEffect(()=>{if(!H)return;let o=x.current,d=o.style.height;o.style.height="auto";let b=o.getBoundingClientRect().height;o.style.height=d,h(b),g(k=>k.find(w=>w.toastId===t.id)?k.map(w=>w.toastId===t.id?{...w,height:b}:w):[{toastId:t.id,height:b,position:t.position},...k])},[H,t.title,t.description,g,t.id]);let C=e.useCallback(()=>{R(!0),i(A.current),g(o=>o.filter(d=>d.toastId!==t.id)),setTimeout(()=>{_(t)},Gt)},[t,_,g,A]);e.useEffect(()=>{if(t.promise&&v==="loading"||t.duration===1/0||t.type==="loading")return;let o,d=ut;return F||y||M&&gt?(()=>{if(ft.current<nt.current){let I=new Date().getTime()-nt.current;d=d-I}ft.current=new Date().getTime()})():(()=>{nt.current=new Date().getTime(),o=setTimeout(()=>{var I;(I=t.onAutoClose)==null||I.call(t,t),C()},d)})(),()=>clearTimeout(o)},[F,y,z,t,ut,C,t.promise,v,M,gt]),e.useEffect(()=>{let o=x.current;if(o){let d=o.getBoundingClientRect().height;return h(d),g(b=>[{toastId:t.id,height:d,position:t.position},...b]),()=>g(b=>b.filter(k=>k.toastId!==t.id))}},[g,t.id]),e.useEffect(()=>{t.delete&&C()},[C,t.delete]);function Rt(){return J?e.createElement("div",{className:"sonner-loader","data-visible":v==="loading"},J):e.createElement(kt,{visible:v==="loading"})}return e.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:x,className:j(et,W,l==null?void 0:l.toast,(ht=t==null?void 0:t.classNames)==null?void 0:ht.toast,l==null?void 0:l[v],(bt=t==null?void 0:t.classNames)==null?void 0:bt[v]),"data-sonner-toast":"","data-styled":!(t.jsx||t.unstyled||s),"data-mounted":H,"data-promise":!!t.promise,"data-removed":q,"data-visible":U,"data-y-position":mt,"data-x-position":Ct,"data-index":r,"data-front":u,"data-swiping":P,"data-dismissible":D,"data-type":v,"data-invert":Ht,"data-swipe-out":S,"data-expanded":!!(F||z&&H),style:{"--index":r,"--toasts-before":r,"--z-index":Z.length-r,"--offset":`${q?st:A.current}px`,"--initial-height":z?"auto":`${p}px`,...n,...t.style},onPointerDown:o=>{rt||!D||(N.current=new Date,i(A.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(O(!0),Y.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var k,I,w,it;if(S||!D)return;Y.current=null;let o=Number(((k=x.current)==null?void 0:k.style.getPropertyValue("--swipe-amount").replace("px",""))||0),d=new Date().getTime()-((I=N.current)==null?void 0:I.getTime()),b=Math.abs(o)/d;if(Math.abs(o)>=Jt||b>.11){i(A.current),(w=t.onDismiss)==null||w.call(t,t),C(),L(!0);return}(it=x.current)==null||it.style.setProperty("--swipe-amount","0px"),O(!1)},onPointerMove:o=>{var Et;if(!Y.current||!D)return;let d=o.clientY-Y.current.y,b=o.clientX-Y.current.x,I=(mt==="top"?Math.min:Math.max)(0,d),w=o.pointerType==="touch"?10:2;Math.abs(I)>w?(Et=x.current)==null||Et.style.setProperty("--swipe-amount",`${d}px`):Math.abs(b)>w&&(Y.current=null)}},Pt&&!t.jsx?e.createElement("button",{"aria-label":ot,"data-disabled":rt,"data-close-button":!0,onClick:rt||!D?()=>{}:()=>{var o;C(),(o=t.onDismiss)==null||o.call(t,t)},className:j(l==null?void 0:l.closeButton,(yt=t==null?void 0:t.classNames)==null?void 0:yt.closeButton)},e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},e.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,t.jsx||e.isValidElement(t.title)?t.jsx||t.title:e.createElement(e.Fragment,null,v||t.icon||t.promise?e.createElement("div",{"data-icon":""},(t.promise||t.type==="loading")&&!t.icon?Rt():null,t.icon||St(v)):null,e.createElement("div",{"data-content":""},e.createElement("div",{"data-title":"",className:j(l==null?void 0:l.title,(vt=t==null?void 0:t.classNames)==null?void 0:vt.title)},t.title),t.description?e.createElement("div",{"data-description":"",className:j(at,Dt,l==null?void 0:l.description,(xt=t==null?void 0:t.classNames)==null?void 0:xt.description)},t.description):null),t.cancel?e.createElement("button",{"data-button":!0,"data-cancel":!0,style:t.cancelButtonStyle||K,onClick:o=>{var d;D&&(C(),(d=t.cancel)!=null&&d.onClick&&t.cancel.onClick(o))},className:j(l==null?void 0:l.cancelButton,(Tt=t==null?void 0:t.classNames)==null?void 0:Tt.cancelButton)},t.cancel.label):null,t.action?e.createElement("button",{"data-button":"",style:t.actionButtonStyle||tt,onClick:o=>{var d;(d=t.action)==null||d.onClick(o),!o.defaultPrevented&&C()},className:j(l==null?void 0:l.actionButton,(wt=t==null?void 0:t.classNames)==null?void 0:wt.actionButton)},t.action.label):null))};function Mt(){if(typeof window=="undefined"||typeof document=="undefined")return"ltr";let c=document.documentElement.getAttribute("dir");return c==="auto"||!c?window.getComputedStyle(document.documentElement).direction:c}var ce=c=>{let{invert:a,position:t="bottom-right",hotkey:s=["altKey","KeyT"],expand:y,closeButton:g,className:f,offset:m,theme:r="light",richColors:Z,duration:F,style:_,visibleToasts:V=_t,toastOptions:n,dir:K=Mt(),gap:tt,loadingIcon:et,containerAriaLabel:at="Notifications",pauseWhenPageIsHidden:X}=c,[B,$]=e.useState([]),J=e.useMemo(()=>Array.from(new Set([t].concat(B.filter(i=>i.position).map(i=>i.position)))),[B,t]),[z,l]=e.useState([]),[ot,M]=e.useState(!1),[H,G]=e.useState(!1),[q,R]=e.useState(r!=="system"?r:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),P=e.useRef(null),O=s.join("+").replace(/Key/g,"").replace(/Digit/g,""),S=e.useRef(null),L=e.useRef(!1),st=e.useCallback(i=>$(p=>p.filter(({id:h})=>h!==i.id)),[]);return e.useEffect(()=>T.subscribe(i=>{if(i.dismiss){$(p=>p.map(h=>h.id===i.id?{...h,delete:!0}:h));return}setTimeout(()=>{Wt.flushSync(()=>{$(p=>{let h=p.findIndex(N=>N.id===i.id);return h!==-1?[...p.slice(0,h),{...p[h],...i},...p.slice(h+1)]:[i,...p]})})})}),[]),e.useEffect(()=>{if(r!=="system"){R(r);return}r==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?R("dark"):R("light")),typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:i})=>{R(i?"dark":"light")})},[r]),e.useEffect(()=>{B.length<=1&&M(!1)},[B]),e.useEffect(()=>{let i=p=>{var N,x;s.every(u=>p[u]||p.code===u)&&(M(!0),(N=P.current)==null||N.focus()),p.code==="Escape"&&(document.activeElement===P.current||(x=P.current)!=null&&x.contains(document.activeElement))&&M(!1)};return document.addEventListener("keydown",i),()=>document.removeEventListener("keydown",i)},[s]),e.useEffect(()=>{if(P.current)return()=>{S.current&&(S.current.focus({preventScroll:!0}),S.current=null,L.current=!1)}},[P.current]),B.length?e.createElement("section",{"aria-label":`${at} ${O}`,tabIndex:-1},J.map((i,p)=>{var x;let[h,N]=i.split("-");return e.createElement("ol",{key:i,dir:K==="auto"?Mt():K,tabIndex:-1,ref:P,className:f,"data-sonner-toaster":!0,"data-theme":q,"data-rich-colors":Z,"data-y-position":h,"data-x-position":N,style:{"--front-toast-height":`${(x=z[0])==null?void 0:x.height}px`,"--offset":typeof m=="number"?`${m}px`:m||Vt,"--width":`${Xt}px`,"--gap":`${Nt}px`,..._},onBlur:u=>{L.current&&!u.currentTarget.contains(u.relatedTarget)&&(L.current=!1,S.current&&(S.current.focus({preventScroll:!0}),S.current=null))},onFocus:u=>{u.target instanceof HTMLElement&&u.target.dataset.dismissible==="false"||L.current||(L.current=!0,S.current=u.relatedTarget)},onMouseEnter:()=>M(!0),onMouseMove:()=>M(!0),onMouseLeave:()=>{H||M(!1)},onPointerDown:u=>{u.target instanceof HTMLElement&&u.target.dataset.dismissible==="false"||G(!0)},onPointerUp:()=>G(!1)},B.filter(u=>!u.position&&p===0||u.position===i).map((u,U)=>{var v,D;return e.createElement(qt,{key:u.id,index:U,toast:u,duration:(v=n==null?void 0:n.duration)!=null?v:F,className:n==null?void 0:n.className,descriptionClassName:n==null?void 0:n.descriptionClassName,invert:a,visibleToasts:V,closeButton:(D=n==null?void 0:n.closeButton)!=null?D:g,interacting:H,position:i,style:n==null?void 0:n.style,unstyled:n==null?void 0:n.unstyled,classNames:n==null?void 0:n.classNames,cancelButtonStyle:n==null?void 0:n.cancelButtonStyle,actionButtonStyle:n==null?void 0:n.actionButtonStyle,removeToast:st,toasts:B.filter(W=>W.position==u.position),heights:z.filter(W=>W.position==u.position),setHeights:l,expandByDefault:y,gap:tt,loadingIcon:et,expanded:ot,pauseWhenPageIsHidden:X})}))})):null};export{ce as Toaster,Ut as toast};
1
+ "use client";import e from"react";import Wt from"react-dom";function dt(d,{insertAt:a}={}){if(!d||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css",a==="top"&&t.firstChild?t.insertBefore(s,t.firstChild):t.appendChild(s),s.styleSheet?s.styleSheet.cssText=d:s.appendChild(document.createTextNode(d))}dt(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
2
+ `);import I from"react";var kt=d=>{switch(d){case"success":return At;case"info":return jt;case"warning":return Yt;case"error":return Ft;default:return null}},zt=Array(12).fill(0),It=({visible:d})=>I.createElement("div",{className:"sonner-loading-wrapper","data-visible":d},I.createElement("div",{className:"sonner-spinner"},zt.map((a,t)=>I.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),At=I.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},I.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),Yt=I.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},I.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),jt=I.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},I.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),Ft=I.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},I.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"}));import Bt from"react";var Mt=()=>{let[d,a]=Bt.useState(!1);return Bt.useEffect(()=>{let t=()=>{a(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),d};var ct=1,ut=class{constructor(){this.subscribe=a=>(this.subscribers.push(a),()=>{let t=this.subscribers.indexOf(a);this.subscribers.splice(t,1)});this.publish=a=>{this.subscribers.forEach(t=>t(a))};this.addToast=a=>{this.publish(a),this.toasts=[...this.toasts,a]};this.create=a=>{var h;let{message:t,...s}=a,g=typeof(a==null?void 0:a.id)=="number"||((h=a.id)==null?void 0:h.length)>0?a.id:ct++,c=this.toasts.find(r=>r.id===g),m=a.dismissible===void 0?!0:a.dismissible;return c?this.toasts=this.toasts.map(r=>r.id===g?(this.publish({...r,...a,id:g,title:t}),{...r,...a,id:g,dismissible:m,title:t}):r):this.addToast({title:t,...s,dismissible:m,id:g}),g};this.dismiss=a=>(a||this.toasts.forEach(t=>{this.subscribers.forEach(s=>s({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:a,dismiss:!0})),a);this.message=(a,t)=>this.create({...t,message:a});this.error=(a,t)=>this.create({...t,message:a,type:"error"});this.success=(a,t)=>this.create({...t,type:"success",message:a});this.info=(a,t)=>this.create({...t,type:"info",message:a});this.warning=(a,t)=>this.create({...t,type:"warning",message:a});this.loading=(a,t)=>this.create({...t,type:"loading",message:a});this.promise=(a,t)=>{if(!t)return;let s;t.loading!==void 0&&(s=this.create({...t,promise:a,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let g=a instanceof Promise?a:a(),c=s!==void 0;return g.then(m=>{if(m&&typeof m.ok=="boolean"&&!m.ok){c=!1;let h=typeof t.error=="function"?t.error(`HTTP error! status: ${m.status}`):t.error,r=typeof t.description=="function"?t.description(`HTTP error! status: ${m.status}`):t.description;this.create({id:s,type:"error",message:h,description:r})}else if(t.success!==void 0){c=!1;let h=typeof t.success=="function"?t.success(m):t.success,r=typeof t.description=="function"?t.description(m):t.description;this.create({id:s,type:"success",message:h,description:r})}}).catch(m=>{if(t.error!==void 0){c=!1;let h=typeof t.error=="function"?t.error(m):t.error,r=typeof t.description=="function"?t.description(m):t.description;this.create({id:s,type:"error",message:h,description:r})}}).finally(()=>{var m;c&&(this.dismiss(s),s=void 0),(m=t.finally)==null||m.call(t)}),s};this.custom=(a,t)=>{let s=(t==null?void 0:t.id)||ct++;return this.create({jsx:a(s),id:s,...t}),s};this.subscribers=[],this.toasts=[]}},x=new ut,$t=(d,a)=>{let t=(a==null?void 0:a.id)||ct++;return x.addToast({title:d,...a,id:t}),t},_t=$t,Ut=Object.assign(_t,{success:x.success,info:x.info,warning:x.warning,error:x.error,custom:x.custom,message:x.message,promise:x.promise,dismiss:x.dismiss,loading:x.loading});var Vt=3,Kt="32px",Xt=4e3,Jt=356,Dt=14,Gt=20,qt=200;function Ot(...d){return d.filter(Boolean).join(" ")}var Qt=d=>{var bt,yt,vt,xt,Tt,wt,Et;let{invert:a,toast:t,unstyled:s,interacting:g,setHeights:c,visibleToasts:m,heights:h,index:r,toasts:Q,expanded:F,removeToast:U,closeButton:W,style:n,cancelButtonStyle:V,actionButtonStyle:Z,className:tt="",descriptionClassName:et="",duration:K,position:at,gap:ot=Dt,loadingIcon:E,expandByDefault:A,classNames:i,icons:T,closeButtonAriaLabel:st="Close toast",pauseWhenPageIsHidden:X,cn:w}=d,[L,J]=e.useState(!1),[G,R]=e.useState(!1),[C,q]=e.useState(!1),[B,z]=e.useState(!1),[nt,l]=e.useState(0),[p,b]=e.useState(0),D=e.useRef(null),S=e.useRef(null),f=r===0,$=r+1<=m,y=t.type,P=t.dismissible!==!1,_=t.className||"",Pt=t.descriptionClassName||"",O=e.useMemo(()=>h.findIndex(o=>o.toastId===t.id)||0,[h,t.id]),Ct=e.useMemo(()=>{var o;return(o=t.closeButton)!=null?o:W},[t.closeButton,W]),ft=e.useMemo(()=>t.duration||K||Xt,[t.duration,K]),rt=e.useRef(0),Y=e.useRef(0),mt=e.useRef(0),j=e.useRef(null),[pt,Ht]=at.split("-"),gt=e.useMemo(()=>h.reduce((o,u,v)=>v>=O?o:o+u.height,0),[h,O]),ht=Mt(),Lt=t.invert||a,it=y==="loading";Y.current=e.useMemo(()=>O*ot+gt,[O,gt]),e.useEffect(()=>{J(!0)},[]),e.useLayoutEffect(()=>{if(!L)return;let o=S.current,u=o.style.height;o.style.height="auto";let v=o.getBoundingClientRect().height;o.style.height=u,b(v),c(M=>M.find(k=>k.toastId===t.id)?M.map(k=>k.toastId===t.id?{...k,height:v}:k):[{toastId:t.id,height:v,position:t.position},...M])},[L,t.title,t.description,c,t.id]);let H=e.useCallback(()=>{R(!0),l(Y.current),c(o=>o.filter(u=>u.toastId!==t.id)),setTimeout(()=>{U(t)},qt)},[t,U,c,Y]);e.useEffect(()=>{if(t.promise&&y==="loading"||t.duration===1/0||t.type==="loading")return;let o,u=ft;return F||g||X&&ht?(()=>{if(mt.current<rt.current){let N=new Date().getTime()-rt.current;u=u-N}mt.current=new Date().getTime()})():(()=>{rt.current=new Date().getTime(),o=setTimeout(()=>{var N;(N=t.onAutoClose)==null||N.call(t,t),H()},u)})(),()=>clearTimeout(o)},[F,g,A,t,ft,H,t.promise,y,X,ht]),e.useEffect(()=>{let o=S.current;if(o){let u=o.getBoundingClientRect().height;return b(u),c(v=>[{toastId:t.id,height:u,position:t.position},...v]),()=>c(v=>v.filter(M=>M.toastId!==t.id))}},[c,t.id]),e.useEffect(()=>{t.delete&&H()},[H,t.delete]);function Rt(){return T!=null&&T.loading?e.createElement("div",{className:"loader","data-visible":y==="loading"},T.loading):E?e.createElement("div",{className:"sonner-loader","data-visible":y==="loading"},E):e.createElement(It,{visible:y==="loading"})}return e.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:S,className:w(tt,_,i==null?void 0:i.toast,(bt=t==null?void 0:t.classNames)==null?void 0:bt.toast,i==null?void 0:i.default,i==null?void 0:i[y],(yt=t==null?void 0:t.classNames)==null?void 0:yt[y]),"data-sonner-toast":"","data-styled":!(t.jsx||t.unstyled||s),"data-mounted":L,"data-promise":!!t.promise,"data-removed":G,"data-visible":$,"data-y-position":pt,"data-x-position":Ht,"data-index":r,"data-front":f,"data-swiping":C,"data-dismissible":P,"data-type":y,"data-invert":Lt,"data-swipe-out":B,"data-expanded":!!(F||A&&L),style:{"--index":r,"--toasts-before":r,"--z-index":Q.length-r,"--offset":`${G?nt:Y.current}px`,"--initial-height":A?"auto":`${p}px`,...n,...t.style},onPointerDown:o=>{it||!P||(D.current=new Date,l(Y.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(q(!0),j.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var M,N,k,lt;if(B||!P)return;j.current=null;let o=Number(((M=S.current)==null?void 0:M.style.getPropertyValue("--swipe-amount").replace("px",""))||0),u=new Date().getTime()-((N=D.current)==null?void 0:N.getTime()),v=Math.abs(o)/u;if(Math.abs(o)>=Gt||v>.11){l(Y.current),(k=t.onDismiss)==null||k.call(t,t),H(),z(!0);return}(lt=S.current)==null||lt.style.setProperty("--swipe-amount","0px"),q(!1)},onPointerMove:o=>{var St;if(!j.current||!P)return;let u=o.clientY-j.current.y,v=o.clientX-j.current.x,N=(pt==="top"?Math.min:Math.max)(0,u),k=o.pointerType==="touch"?10:2;Math.abs(N)>k?(St=S.current)==null||St.style.setProperty("--swipe-amount",`${u}px`):Math.abs(v)>k&&(j.current=null)}},Ct&&!t.jsx?e.createElement("button",{"aria-label":st,"data-disabled":it,"data-close-button":!0,onClick:it||!P?()=>{}:()=>{var o;H(),(o=t.onDismiss)==null||o.call(t,t)},className:w(i==null?void 0:i.closeButton,(vt=t==null?void 0:t.classNames)==null?void 0:vt.closeButton)},e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},e.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,t.jsx||e.isValidElement(t.title)?t.jsx||t.title:e.createElement(e.Fragment,null,y||t.icon||t.promise?e.createElement("div",{"data-icon":""},t.promise||y==="loading"?t.icon||(T==null?void 0:T.loading)||Rt():t.icon||(T==null?void 0:T[y])||kt(y)):null,e.createElement("div",{"data-content":""},e.createElement("div",{"data-title":"",className:w(i==null?void 0:i.title,(xt=t==null?void 0:t.classNames)==null?void 0:xt.title)},t.title),t.description?e.createElement("div",{"data-description":"",className:w(et,Pt,i==null?void 0:i.description,(Tt=t==null?void 0:t.classNames)==null?void 0:Tt.description)},t.description):null),t.cancel?e.createElement("button",{"data-button":!0,"data-cancel":!0,style:t.cancelButtonStyle||V,onClick:o=>{var u;P&&(H(),(u=t.cancel)!=null&&u.onClick&&t.cancel.onClick(o))},className:w(i==null?void 0:i.cancelButton,(wt=t==null?void 0:t.classNames)==null?void 0:wt.cancelButton)},t.cancel.label):null,t.action?e.createElement("button",{"data-button":"",style:t.actionButtonStyle||Z,onClick:o=>{var u;(u=t.action)==null||u.onClick(o),!o.defaultPrevented&&H()},className:w(i==null?void 0:i.actionButton,(Et=t==null?void 0:t.classNames)==null?void 0:Et.actionButton)},t.action.label):null))};function Nt(){if(typeof window=="undefined"||typeof document=="undefined")return"ltr";let d=document.documentElement.getAttribute("dir");return d==="auto"||!d?window.getComputedStyle(document.documentElement).direction:d}function fe(){let[d,a]=e.useState([]);return e.useEffect(()=>x.subscribe(t=>{a(s=>{if("dismiss"in t&&t.dismiss)return s.filter(c=>c.id!==t.id);let g=s.findIndex(c=>c.id===t.id);if(g!==-1){let c=[...s];return c[g]={...c[g],...t},c}else return[t,...s]})}),[]),{toasts:d}}var me=d=>{let{invert:a,position:t="bottom-right",hotkey:s=["altKey","KeyT"],expand:g,closeButton:c,className:m,offset:h,theme:r="light",richColors:Q,duration:F,style:U,visibleToasts:W=Vt,toastOptions:n,dir:V=Nt(),gap:Z,loadingIcon:tt,icons:et,containerAriaLabel:K="Notifications",pauseWhenPageIsHidden:at,cn:ot=Ot}=d,[E,A]=e.useState([]),i=e.useMemo(()=>Array.from(new Set([t].concat(E.filter(l=>l.position).map(l=>l.position)))),[E,t]),[T,st]=e.useState([]),[X,w]=e.useState(!1),[L,J]=e.useState(!1),[G,R]=e.useState(r!=="system"?r:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),C=e.useRef(null),q=s.join("+").replace(/Key/g,"").replace(/Digit/g,""),B=e.useRef(null),z=e.useRef(!1),nt=e.useCallback(l=>{var p;(p=E.find(b=>b.id===l.id))!=null&&p.delete||x.dismiss(l.id)},[E]);return e.useEffect(()=>x.subscribe(l=>{if(l.dismiss){A(p=>p.map(b=>b.id===l.id?{...b,delete:!0}:b));return}setTimeout(()=>{Wt.flushSync(()=>{A(p=>{let b=p.findIndex(D=>D.id===l.id);return b!==-1?[...p.slice(0,b),{...p[b],...l},...p.slice(b+1)]:[l,...p]})})})}),[]),e.useEffect(()=>{if(r!=="system"){R(r);return}r==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?R("dark"):R("light")),typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:l})=>{R(l?"dark":"light")})},[r]),e.useEffect(()=>{E.length<=1&&w(!1)},[E]),e.useEffect(()=>{let l=p=>{var D,S;s.every(f=>p[f]||p.code===f)&&(w(!0),(D=C.current)==null||D.focus()),p.code==="Escape"&&(document.activeElement===C.current||(S=C.current)!=null&&S.contains(document.activeElement))&&w(!1)};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[s]),e.useEffect(()=>{if(C.current)return()=>{B.current&&(B.current.focus({preventScroll:!0}),B.current=null,z.current=!1)}},[C.current]),E.length?e.createElement("section",{"aria-label":`${K} ${q}`,tabIndex:-1},i.map((l,p)=>{var S;let[b,D]=l.split("-");return e.createElement("ol",{key:l,dir:V==="auto"?Nt():V,tabIndex:-1,ref:C,className:m,"data-sonner-toaster":!0,"data-theme":G,"data-rich-colors":Q,"data-y-position":b,"data-x-position":D,style:{"--front-toast-height":`${(S=T[0])==null?void 0:S.height}px`,"--offset":typeof h=="number"?`${h}px`:h||Kt,"--width":`${Jt}px`,"--gap":`${Dt}px`,...U},onBlur:f=>{z.current&&!f.currentTarget.contains(f.relatedTarget)&&(z.current=!1,B.current&&(B.current.focus({preventScroll:!0}),B.current=null))},onFocus:f=>{f.target instanceof HTMLElement&&f.target.dataset.dismissible==="false"||z.current||(z.current=!0,B.current=f.relatedTarget)},onMouseEnter:()=>w(!0),onMouseMove:()=>w(!0),onMouseLeave:()=>{L||w(!1)},onPointerDown:f=>{f.target instanceof HTMLElement&&f.target.dataset.dismissible==="false"||J(!0)},onPointerUp:()=>J(!1)},E.filter(f=>!f.position&&p===0||f.position===l).map((f,$)=>{var y,P;return e.createElement(Qt,{key:f.id,icons:et,index:$,toast:f,duration:(y=n==null?void 0:n.duration)!=null?y:F,className:n==null?void 0:n.className,descriptionClassName:n==null?void 0:n.descriptionClassName,invert:a,visibleToasts:W,closeButton:(P=n==null?void 0:n.closeButton)!=null?P:c,interacting:L,position:l,style:n==null?void 0:n.style,unstyled:n==null?void 0:n.unstyled,classNames:n==null?void 0:n.classNames,cancelButtonStyle:n==null?void 0:n.cancelButtonStyle,actionButtonStyle:n==null?void 0:n.actionButtonStyle,removeToast:nt,toasts:E.filter(_=>_.position==f.position),heights:T.filter(_=>_.position==f.position),setHeights:st,expandByDefault:g,gap:Z,loadingIcon:tt,expanded:X,pauseWhenPageIsHidden:at,cn:ot})}))})):null};export{me as Toaster,Ut as toast,fe as useSonner};
3
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/hooks.tsx","../src/state.ts"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport './styles.css';\nimport { getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport type { HeightT, ToastT, ToastToDismiss, ExternalToast, ToasterProps, ToastProps } from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_THRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap = GAP,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n let remainingTime = duration;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime = remainingTime - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n expandByDefault,\n toast,\n duration,\n deleteToast,\n toast.promise,\n toastType,\n pauseWhenPageIsHidden,\n isDocumentHidden,\n ]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (loadingIconProp) {\n return (\n <div className=\"sonner-loader\" data-visible={toastType === 'loading'}>\n {loadingIconProp}\n </div>\n );\n }\n return <Loader visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n aria-live={toast.important ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n role=\"status\"\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const xPosition = event.clientX - pointerStartRef.current.x;\n\n const clamp = y === 'top' ? Math.min : Math.max;\n const clampedY = clamp(0, yPosition);\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n } else if (Math.abs(xPosition) > swipeStartThreshold) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n ) : null}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx || toast.title\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\">\n {(toast.promise || toast.type === 'loading') && !toast.icon ? getLoadingIcon() : null}\n {toast.icon || getAsset(toastType)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n if (!dismissible) return;\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick(event);\n }\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n toast.action?.onClick(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap,\n loadingIcon,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n React.useEffect(() => {\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n\n if (typeof window === 'undefined') return;\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`${containerAriaLabel} ${hotkeyLabel}`} tabIndex={-1}>\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter(t => t.position == toast.position)}\n heights={heights.filter(h => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n};\nexport { toast, Toaster, type ToastT, type ExternalToast };\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(false);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import React from 'react';\nimport type { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss, ToastTypes } from './types';\n\nlet toastsCounter = 1;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: string | React.ReactNode;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n\n p.then((response) => {\n // TODO: Clean up TS here, response has incorrect type\n // @ts-expect-error\n if (response && typeof response.ok === 'boolean' && !response.ok) {\n shouldDismiss = false;\n const message =\n // @ts-expect-error\n typeof data.error === 'function' ? data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? // @ts-expect-error\n data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? data.success(response) : data.success;\n const description = typeof data.description === 'function' ? data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch((error) => {\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n const description = typeof data.description === 'function' ? data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n return id;\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n\n ToastState.addToast({\n title: message,\n ...data,\n id,\n });\n return id;\n};\n\nconst basicToast = toastFunction;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n});\n"],"mappings":"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","names":["React","ReactDOM","styleInject","css","insertAt","head","style","styleInject","React","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","_","i","React","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","callback","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","response","description","error","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","cn","classes","Toast","props","_a","_b","_c","_d","_e","_f","_g","ToasterInvert","toast","unstyled","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButtonFromToaster","style","cancelButtonStyle","actionButtonStyle","className","descriptionClassName","durationFromToaster","position","gap","loadingIconProp","expandByDefault","classNames","closeButtonAriaLabel","pauseWhenPageIsHidden","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","isDocumentHidden","useIsDocumentHidden","invert","disabled","toastNode","originalHeight","newHeight","deleteToast","h","timeoutId","remainingTime","elapsedTime","getLoadingIcon","Loader","event","swipeAmount","timeTaken","velocity","yPosition","xPosition","clampedY","swipeStartThreshold","getAsset","getDocumentDirection","dirAttribute","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","loadingIcon","containerAriaLabel","setToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","id","ToastState","t","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
1
+ {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/hooks.tsx","../src/state.ts"],"sourcesContent":["'use client';\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport './styles.css';\nimport { getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport type { HeightT, ToastT, ToastToDismiss, ExternalToast, ToasterProps, ToastProps } from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_THRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction _cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap = GAP,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n icons,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n cn,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n let remainingTime = duration;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime = remainingTime - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n expandByDefault,\n toast,\n duration,\n deleteToast,\n toast.promise,\n toastType,\n pauseWhenPageIsHidden,\n isDocumentHidden,\n ]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (icons?.loading) {\n return (\n <div className=\"loader\" data-visible={toastType === 'loading'}>\n {icons.loading}\n </div>\n );\n }\n\n if (loadingIconProp) {\n return (\n <div className=\"sonner-loader\" data-visible={toastType === 'loading'}>\n {loadingIconProp}\n </div>\n );\n }\n return <Loader visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n aria-live={toast.important ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n role=\"status\"\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.default,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const xPosition = event.clientX - pointerStartRef.current.x;\n\n const clamp = y === 'top' ? Math.min : Math.max;\n const clampedY = clamp(0, yPosition);\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n } else if (Math.abs(xPosition) > swipeStartThreshold) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n ) : null}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx || toast.title\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\">\n {toast.promise || toastType === 'loading'\n ? toast.icon || icons?.loading || getLoadingIcon()\n : toast.icon || icons?.[toastType] || getAsset(toastType)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n if (!dismissible) return;\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick(event);\n }\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n toast.action?.onClick(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState<ToastT[]>([]);\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n setActiveToasts((currentToasts) => {\n if ('dismiss' in toast && toast.dismiss) {\n return currentToasts.filter((t) => t.id !== toast.id);\n }\n\n const existingToastIndex = currentToasts.findIndex((t) => t.id === toast.id);\n if (existingToastIndex !== -1) {\n const updatedToasts = [...currentToasts];\n updatedToasts[existingToastIndex] = { ...updatedToasts[existingToastIndex], ...toast };\n return updatedToasts;\n } else {\n return [toast, ...currentToasts];\n }\n });\n });\n }, []);\n\n return {\n toasts: activeToasts,\n };\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap,\n loadingIcon,\n icons,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n cn = _cn,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toastToRemove: ToastT) => {\n if (!toasts.find((toast) => toast.id === toastToRemove.id)?.delete) {\n ToastState.dismiss(toastToRemove.id);\n }\n },\n [toasts],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n React.useEffect(() => {\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n\n if (typeof window === 'undefined') return;\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`${containerAriaLabel} ${hotkeyLabel}`} tabIndex={-1}>\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n icons={icons}\n index={index}\n toast={toast}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter((t) => t.position == toast.position)}\n heights={heights.filter((h) => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n cn={cn}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n};\nexport { toast, Toaster, type ToastT, type ExternalToast, useSonner };\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=info],[data-rich-colors=true] [data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true] [data-sonner-toast][data-type=warning],[data-rich-colors=true] [data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(false);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import React from 'react';\nimport type { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss, ToastTypes } from './types';\n\nlet toastsCounter = 1;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: string | React.ReactNode;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n\n p.then((response) => {\n // TODO: Clean up TS here, response has incorrect type\n // @ts-expect-error\n if (response && typeof response.ok === 'boolean' && !response.ok) {\n shouldDismiss = false;\n const message =\n // @ts-expect-error\n typeof data.error === 'function' ? data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? // @ts-expect-error\n data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? data.success(response) : data.success;\n const description = typeof data.description === 'function' ? data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch((error) => {\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n const description = typeof data.description === 'function' ? data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n return id;\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n\n ToastState.addToast({\n title: message,\n ...data,\n id,\n });\n return id;\n};\n\nconst basicToast = toastFunction;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n});\n"],"mappings":"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","names":["React","ReactDOM","styleInject","css","insertAt","head","style","styleInject","React","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","_","i","React","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","callback","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","response","description","error","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","_cn","classes","Toast","props","_a","_b","_c","_d","_e","_f","_g","ToasterInvert","toast","unstyled","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButtonFromToaster","style","cancelButtonStyle","actionButtonStyle","className","descriptionClassName","durationFromToaster","position","gap","loadingIconProp","expandByDefault","classNames","icons","closeButtonAriaLabel","pauseWhenPageIsHidden","cn","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","isDocumentHidden","useIsDocumentHidden","invert","disabled","toastNode","originalHeight","newHeight","deleteToast","h","timeoutId","remainingTime","elapsedTime","getLoadingIcon","Loader","event","swipeAmount","timeTaken","velocity","yPosition","xPosition","clampedY","swipeStartThreshold","getAsset","getDocumentDirection","dirAttribute","useSonner","activeToasts","setActiveToasts","ToastState","currentToasts","t","existingToastIndex","updatedToasts","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","loadingIcon","containerAriaLabel","setToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonner",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "An opinionated toast component for React.",
5
5
  "exports": {
6
6
  "types": "./dist/index.d.ts",