sonner 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,10 +1,10 @@
1
1
  import React from 'react';
2
2
 
3
3
  type ToastTypes = 'normal' | 'action' | 'success' | 'error' | 'loading';
4
- type PromiseT = Promise<any> | (() => Promise<any>);
5
- type PromiseData = ExternalToast & {
4
+ type PromiseT<Data = any> = Promise<Data> | (() => Promise<Data>);
5
+ type PromiseData<ToastData = any> = ExternalToast & {
6
6
  loading: string | React.ReactNode;
7
- success: string | React.ReactNode | ((data: any) => React.ReactNode | string);
7
+ success: string | React.ReactNode | ((data: ToastData) => React.ReactNode | string);
8
8
  error: string | React.ReactNode | ((error: any) => React.ReactNode | string);
9
9
  };
10
10
  interface ToastT {
@@ -20,7 +20,7 @@ interface ToastT {
20
20
  important?: boolean;
21
21
  action?: {
22
22
  label: string;
23
- onClick: () => void;
23
+ onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;
24
24
  };
25
25
  cancel?: {
26
26
  label: string;
@@ -63,7 +63,7 @@ declare const toast: ((message: string | React.ReactNode, data?: ExternalToast)
63
63
  error: (message: string | React.ReactNode, data?: ExternalToast) => string | number;
64
64
  custom: (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => void;
65
65
  message: (message: string | React.ReactNode, data?: ExternalToast) => string | number;
66
- promise: (promise: PromiseT, data?: PromiseData) => string | number;
66
+ promise: <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => string | number;
67
67
  dismiss: (id?: number | string) => string | number;
68
68
  };
69
69
 
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client"
2
- "use client";var wt=Object.create;var _=Object.defineProperty;var Et=Object.getOwnPropertyDescriptor;var St=Object.getOwnPropertyNames;var Nt=Object.getPrototypeOf,Pt=Object.prototype.hasOwnProperty;var Ct=(s,a)=>{for(var t in a)_(s,t,{get:a[t],enumerable:!0})},lt=(s,a,t,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let n of St(a))!Pt.call(s,n)&&n!==t&&_(s,n,{get:()=>a[n],enumerable:!(r=Et(a,n))||r.enumerable});return s};var Q=(s,a,t)=>(t=s!=null?wt(Nt(s)):{},lt(a||!s||!s.__esModule?_(t,"default",{value:s,enumerable:!0}):t,s)),Rt=s=>lt(_({},"__esModule",{value:!0}),s);var _t={};Ct(_t,{Toaster:()=>Ut,toast:()=>ut});module.exports=Rt(_t);var e=Q(require("react")),mt=Q(require("react-dom"));function Z(s,{insertAt:a}={}){if(!s||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",a==="top"&&t.firstChild?t.insertBefore(r,t.firstChild):t.appendChild(r),r.styleSheet?r.styleSheet.cssText=s:r.appendChild(document.createTextNode(s))}Z(`[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: 6px;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}[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:-3px;margin-right:4px}[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:-1px}[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:auto;border:none;cursor:pointer;outline:none;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:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;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:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[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%}[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(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--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%);--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=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}}
3
- `);var v=Q(require("react")),dt=s=>{switch(s){case"success":return It;case"error":return Dt;default:}},kt=Array(12).fill(0),ct=({visible:s})=>v.default.createElement("div",{className:"sonner-loading-wrapper","data-visible":s},v.default.createElement("div",{className:"sonner-spinner"},kt.map((a,t)=>v.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),It=v.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},v.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"}));var Dt=v.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},v.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 tt=0,et=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.toasts=[...this.toasts,a]};this.create=a=>{var h;let{message:t,...r}=a,n=typeof(a==null?void 0:a.id)=="number"||((h=a.id)==null?void 0:h.length)>0?a.id:tt++;return this.toasts.find(c=>c.id===n)?this.toasts.map(c=>c.id===n?(this.publish({...c,...a,id:n}),{...c,...a}):c):this.publish({title:t,...r,id:n}),n};this.dismiss=a=>(a||this.toasts.forEach(t=>{this.subscribers.forEach(r=>r({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.promise=(a,t)=>this.create({...t,promise:a});this.custom=(a,t)=>{let r=(t==null?void 0:t.id)||tt++;this.publish({jsx:a(r),id:r,...t})};this.subscribers=[],this.toasts=[]}},b=new et,Bt=(s,a)=>{let t=(a==null?void 0:a.id)||tt++;return b.publish({title:s,...a,id:t}),t},Ht=Bt,ut=Object.assign(Ht,{success:b.success,error:b.error,custom:b.custom,message:b.message,promise:b.promise,dismiss:b.dismiss});var Mt=3,zt="32px",At=4e3,Yt=356,ft=14,Lt=20,Ot=200,pt=s=>!!s.promise,jt=s=>{var it;let{invert:a,toast:t,interacting:r,setHeights:n,visibleToasts:z,heights:h,index:c,toasts:$,expanded:I,removeToast:A,closeButton:F,style:K,className:g="",descriptionClassName:T="",duration:P,position:Y,expandByDefault:D}=s,[B,y]=e.default.useState(!1),[H,L]=e.default.useState(!1),[V,O]=e.default.useState(!1),[w,W]=e.default.useState(!1),[p,C]=e.default.useState(null),[u,i]=e.default.useState(0),[f,E]=e.default.useState(0),[R,M]=e.default.useState(null),S=e.default.useRef(null),gt=c===0,ht=c+1<=z,at=t.type,bt=t.className||"",yt=t.descriptionClassName||"",j=e.default.useMemo(()=>h.findIndex(o=>o.toastId===t.id)||0,[h,t.id]),ot=e.default.useMemo(()=>t.duration||P||At,[t.duration,P]),J=e.default.useRef(0),k=e.default.useRef(0),G=e.default.useRef(ot),st=e.default.useRef(0),U=e.default.useRef(null),[rt,xt]=Y.split("-"),nt=e.default.useMemo(()=>h.reduce((o,l,d)=>d>=j?o:o+l.height,0),[h,j]),vt=t.invert||a,X=p==="loading";k.current=e.default.useMemo(()=>j*ft+nt,[j,nt]),e.default.useEffect(()=>{y(!0)},[]),e.default.useLayoutEffect(()=>{if(!B)return;let o=S.current,l=o.style.height;o.style.height="auto";let d=o.getBoundingClientRect().height;o.style.height=l,E(d);let m=h.find(x=>x.toastId===t.id);n(m?x=>x.map(q=>q.toastId===t.id?{...q,height:d}:q):x=>[{toastId:t.id,height:d},...x])},[t.title,t.description]),e.default.useEffect(()=>{if(pt(t)){C("loading");let o=l=>{l.then(d=>{t.success&&typeof t.success=="function"&&M(t.success(d)),C("success")}).catch(d=>{C("error"),t.error&&typeof t.error=="function"&&M(t.error(d))})};t.promise instanceof Promise?o(t.promise):typeof t.promise=="function"&&o(t.promise())}},[t]);let N=e.default.useCallback(()=>{L(!0),i(k.current),n(o=>o.filter(l=>l.toastId!==t.id)),setTimeout(()=>{A(t)},Ot)},[t,A,n,k]);e.default.useEffect(()=>{if(t.promise&&p==="loading"||t.duration===1/0)return;let o;return I||r?(()=>{if(st.current<J.current){let m=new Date().getTime()-J.current;G.current=G.current-m}st.current=new Date().getTime()})():(()=>{J.current=new Date().getTime(),o=setTimeout(()=>{var m;(m=t.onAutoClose)==null||m.call(t,t),N()},G.current)})(),()=>clearTimeout(o)},[I,r,D,t,ot,N,t.promise,p]),e.default.useEffect(()=>{let o=S.current;if(o){let l=o.getBoundingClientRect().height;return E(l),n(d=>[{toastId:t.id,height:l},...d]),()=>n(d=>d.filter(m=>m.toastId!==t.id))}},[n,t.id]),e.default.useEffect(()=>{t.delete&&N()},[t.delete]);let Tt=e.default.useMemo(()=>{if(!pt(t))return null;switch(p){case"loading":return t.loading;case"success":return typeof t.success=="function"?R:t.success;case"error":return typeof t.error=="function"?R:t.error;default:return t.loading}},[p,R]);return e.default.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:S,className:g+" "+bt,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":B,"data-promise":!!t.promise,"data-removed":H,"data-visible":ht,"data-y-position":rt,"data-x-position":xt,"data-index":c,"data-front":gt,"data-swiping":V,"data-type":p!=="loading"&&p?p:at,"data-invert":vt,"data-swipe-out":w,"data-expanded":!!(I||D&&B),style:{"--index":c,"--toasts-before":c,"--z-index":$.length-c,"--offset":`${H?u:k.current}px`,"--initial-height":D?"auto":`${f}px`,...K,...t.style},onPointerDown:o=>{X||(i(k.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(O(!0),U.current=o.clientY))},onPointerUp:()=>{var l,d,m;if(w)return;let o=Number(((l=S.current)==null?void 0:l.style.getPropertyValue("--swipe-amount").replace("px",""))||0);if(Math.abs(o)>=Lt){i(k.current),(d=t.onDismiss)==null||d.call(t,t),N(),W(!0);return}(m=S.current)==null||m.style.setProperty("--swipe-amount","0px"),U.current=null,O(!1)},onPointerMove:o=>{var m,x;if(!U.current)return;let l=o.clientY-U.current;if(!(rt==="top"?l<0:l>0)){(m=S.current)==null||m.style.setProperty("--swipe-amount","0px");return}(x=S.current)==null||x.style.setProperty("--swipe-amount",`${l}px`)}},F&&!t.jsx?e.default.createElement("button",{"aria-label":"Close toast","data-disabled":X,"data-close-button":!0,onClick:X?void 0:()=>{var o;N(),(o=t.onDismiss)==null||o.call(t,t)}},e.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"},e.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,t.jsx||e.default.isValidElement(t.title)?t.jsx||t.title:e.default.createElement(e.default.Fragment,null,at||t.icon||t.promise?e.default.createElement("div",{"data-icon":""},t.promise?e.default.createElement(ct,{visible:p==="loading"}):null,t.icon||dt(p!=null?p:t.type)):null,e.default.createElement("div",{"data-content":""},e.default.createElement("div",{"data-title":""},e.default.createElement(e.default.Fragment,null,(it=t.title)!=null?it:Tt)),t.description?e.default.createElement("div",{"data-description":"",className:T+yt},t.description):null),t.cancel?e.default.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var o;N(),(o=t.cancel)!=null&&o.onClick&&t.cancel.onClick()}},t.cancel.label):null,t.action?e.default.createElement("button",{"data-button":"",onClick:()=>{var o;N(),(o=t.action)==null||o.onClick()}},t.action.label):null))},Ut=s=>{var C;let{invert:a,position:t="bottom-right",hotkey:r=["altKey","KeyT"],expand:n,closeButton:z,className:h,offset:c,theme:$="light",richColors:I,duration:A,style:F,visibleToasts:K=Mt,toastOptions:g}=s,[T,P]=e.default.useState([]),[Y,D]=e.default.useState([]),[B,y]=e.default.useState(!1),[H,L]=e.default.useState(!1),[V,O]=t.split("-"),w=e.default.useRef(null),W=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),p=e.default.useCallback(u=>P(i=>i.filter(({id:f})=>f!==u.id)),[]);return e.default.useEffect(()=>b.subscribe(u=>{if(u.dismiss){P(i=>i.map(f=>f.id===u.id?{...f,delete:!0}:f));return}setTimeout(()=>{mt.default.flushSync(()=>{P(i=>{let f=i.findIndex(E=>E.id===u.id);return f!==-1?[...i.slice(0,f),{...i[f],...u},...i.slice(f+1)]:[u,...i]})})})}),[]),e.default.useEffect(()=>{T.length<=1&&y(!1)},[T]),e.default.useEffect(()=>{let u=i=>{var E,R;r.every(M=>i[M]||i.code===M)&&(y(!0),(E=w.current)==null||E.focus()),i.code==="Escape"&&(document.activeElement===w.current||(R=w.current)!=null&&R.contains(document.activeElement))&&y(!1)};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[r]),T.length?e.default.createElement("section",{"aria-label":`Notifications ${W}`,tabIndex:-1},e.default.createElement("ol",{tabIndex:-1,ref:w,className:h,"data-sonner-toaster":!0,"data-theme":$,"data-rich-colors":I,"data-y-position":V,"data-x-position":O,style:{"--front-toast-height":`${(C=Y[0])==null?void 0:C.height}px`,"--offset":typeof c=="number"?`${c}px`:c||zt,"--width":`${Yt}px`,"--gap":`${ft}px`,...F},onMouseEnter:()=>y(!0),onMouseMove:()=>y(!0),onMouseLeave:()=>{H||y(!1)},onPointerDown:()=>{L(!0)},onPointerUp:()=>L(!1)},T.map((u,i)=>e.default.createElement(jt,{key:u.id,index:i,toast:u,duration:A,className:g==null?void 0:g.className,descriptionClassName:g==null?void 0:g.descriptionClassName,invert:a,visibleToasts:K,closeButton:z,interacting:H,position:t,style:g==null?void 0:g.style,removeToast:p,toasts:T,heights:Y,setHeights:D,expandByDefault:n,expanded:B})))):null};0&&(module.exports={Toaster,toast});
2
+ "use client";var gt=Object.create;var U=Object.defineProperty;var bt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var xt=Object.getPrototypeOf,vt=Object.prototype.hasOwnProperty;var Tt=(s,e)=>{for(var t in e)U(s,t,{get:e[t],enumerable:!0})},nt=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of yt(e))!vt.call(s,n)&&n!==t&&U(s,n,{get:()=>e[n],enumerable:!(r=bt(e,n))||r.enumerable});return s};var q=(s,e,t)=>(t=s!=null?gt(xt(s)):{},nt(e||!s||!s.__esModule?U(t,"default",{value:s,enumerable:!0}):t,s)),wt=s=>nt(U({},"__esModule",{value:!0}),s);var At={};Tt(At,{Toaster:()=>zt,toast:()=>dt});module.exports=wt(At);var a=q(require("react")),ct=q(require("react-dom"));function Q(s,{insertAt:e}={}){if(!s||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",e==="top"&&t.firstChild?t.insertBefore(r,t.firstChild):t.appendChild(r),r.styleSheet?r.styleSheet.cssText=s:r.appendChild(document.createTextNode(s))}Q(`[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: 6px;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}[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:-3px;margin-right:4px}[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:-1px}[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:auto;border:none;cursor:pointer;outline:none;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:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;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:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[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%}[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(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--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%);--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=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}}
3
+ `);var v=q(require("react")),it=s=>{switch(s){case"success":return St;case"error":return Nt;default:}},Et=Array(12).fill(0),lt=({visible:s})=>v.default.createElement("div",{className:"sonner-loading-wrapper","data-visible":s},v.default.createElement("div",{className:"sonner-spinner"},Et.map((e,t)=>v.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),St=v.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},v.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"}));var Nt=v.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},v.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 Z=0,tt=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 m;let{message:t,...r}=e,n=typeof(e==null?void 0:e.id)=="number"||((m=e.id)==null?void 0:m.length)>0?e.id:Z++;return this.toasts.find(c=>c.id===n)?this.toasts=this.toasts.map(c=>c.id===n?(this.publish({...c,...e,id:n,title:t}),{...c,...e,id:n,title:t}):c):this.addToast({title:t,...r,id:n}),n};this.dismiss=e=>(e||this.toasts.forEach(t=>{this.subscribers.forEach(r=>r({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.promise=(e,t)=>{let r=this.create({...t,promise:e,type:"loading",message:t.loading});return(e instanceof Promise?e:e()).then(y=>{let m=typeof t.success=="function"?t.success(y):t.success;this.create({id:r,type:"success",message:m})}).catch(y=>{let m=typeof t.error=="function"?t.error(y):t.error;this.create({id:r,type:"error",message:m})}),r};this.custom=(e,t)=>{let r=(t==null?void 0:t.id)||Z++;this.publish({jsx:e(r),id:r,...t})};this.subscribers=[],this.toasts=[]}},b=new tt,Ct=(s,e)=>{let t=(e==null?void 0:e.id)||Z++;return b.addToast({title:s,...e,id:t}),t},Rt=Ct,dt=Object.assign(Rt,{success:b.success,error:b.error,custom:b.custom,message:b.message,promise:b.promise,dismiss:b.dismiss});var kt=3,Pt="32px",It=4e3,Dt=356,ut=14,Mt=20,Bt=200,Ht=s=>{let{invert:e,toast:t,interacting:r,setHeights:n,visibleToasts:y,heights:m,index:c,toasts:_,expanded:D,removeToast:z,closeButton:$,style:F,className:h="",descriptionClassName:T="",duration:N,position:A,expandByDefault:M}=s,[B,x]=a.default.useState(!1),[H,Y]=a.default.useState(!1),[K,L]=a.default.useState(!1),[w,V]=a.default.useState(!1),[W,C]=a.default.useState(0),[u,i]=a.default.useState(0),l=a.default.useRef(null),R=c===0,O=c+1<=y,g=t.type,pt=t.className||"",mt=t.descriptionClassName||"",j=a.default.useMemo(()=>m.findIndex(o=>o.toastId===t.id)||0,[m,t.id]),et=a.default.useMemo(()=>t.duration||N||It,[t.duration,N]),X=a.default.useRef(0),k=a.default.useRef(0),J=a.default.useRef(et),at=a.default.useRef(0),P=a.default.useRef(null),[ot,ft]=A.split("-"),st=a.default.useMemo(()=>m.reduce((o,d,p)=>p>=j?o:o+d.height,0),[m,j]),ht=t.invert||e,G=g==="loading";k.current=a.default.useMemo(()=>j*ut+st,[j,st]),a.default.useEffect(()=>{x(!0)},[]),a.default.useLayoutEffect(()=>{if(!B)return;let o=l.current,d=o.style.height;o.style.height="auto";let p=o.getBoundingClientRect().height;o.style.height=d,i(p);let f=m.find(S=>S.toastId===t.id);n(f?S=>S.map(I=>I.toastId===t.id?{...I,height:p}:I):S=>[{toastId:t.id,height:p},...S])},[t.title,t.description]);let E=a.default.useCallback(()=>{Y(!0),C(k.current),n(o=>o.filter(d=>d.toastId!==t.id)),setTimeout(()=>{z(t)},Bt)},[t,z,n,k]);return a.default.useEffect(()=>{if(t.promise&&g==="loading"||t.duration===1/0)return;let o;return D||r?(()=>{if(at.current<X.current){let f=new Date().getTime()-X.current;J.current=J.current-f}at.current=new Date().getTime()})():(()=>{X.current=new Date().getTime(),o=setTimeout(()=>{var f;(f=t.onAutoClose)==null||f.call(t,t),E()},J.current)})(),()=>clearTimeout(o)},[D,r,M,t,et,E,t.promise,g]),a.default.useEffect(()=>{let o=l.current;if(o){let d=o.getBoundingClientRect().height;return i(d),n(p=>[{toastId:t.id,height:d},...p]),()=>n(p=>p.filter(f=>f.toastId!==t.id))}},[n,t.id]),a.default.useEffect(()=>{t.delete&&E()},[t.delete]),a.default.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:l,className:h+" "+pt,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":B,"data-promise":!!t.promise,"data-removed":H,"data-visible":O,"data-y-position":ot,"data-x-position":ft,"data-index":c,"data-front":R,"data-swiping":K,"data-type":g,"data-invert":ht,"data-swipe-out":w,"data-expanded":!!(D||M&&B),style:{"--index":c,"--toasts-before":c,"--z-index":_.length-c,"--offset":`${H?W:k.current}px`,"--initial-height":M?"auto":`${u}px`,...F,...t.style},onPointerDown:o=>{G||(C(k.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(L(!0),P.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var d,p,f;if(w)return;P.current=null;let o=Number(((d=l.current)==null?void 0:d.style.getPropertyValue("--swipe-amount").replace("px",""))||0);if(Math.abs(o)>=Mt){C(k.current),(p=t.onDismiss)==null||p.call(t,t),E(),V(!0);return}(f=l.current)==null||f.style.setProperty("--swipe-amount","0px"),L(!1)},onPointerMove:o=>{var rt;if(!P.current)return;let d=o.clientY-P.current.y,p=o.clientX-P.current.x,S=(ot==="top"?Math.min:Math.max)(0,d),I=o.pointerType==="touch"?10:2;S>I?(rt=l.current)==null||rt.style.setProperty("--swipe-amount",`${d}px`):Math.abs(p)>I&&(P.current=null)}},$&&!t.jsx?a.default.createElement("button",{"aria-label":"Close toast","data-disabled":G,"data-close-button":!0,onClick:G?void 0:()=>{var o;E(),(o=t.onDismiss)==null||o.call(t,t)}},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,g||t.icon||t.promise?a.default.createElement("div",{"data-icon":""},t.promise?a.default.createElement(lt,{visible:g==="loading"}):null,t.icon||it(g)):null,a.default.createElement("div",{"data-content":""},a.default.createElement("div",{"data-title":""},t.title),t.description?a.default.createElement("div",{"data-description":"",className:T+mt},t.description):null),t.cancel?a.default.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var o;E(),(o=t.cancel)!=null&&o.onClick&&t.cancel.onClick()}},t.cancel.label):null,t.action?a.default.createElement("button",{"data-button":"",onClick:o=>{var d;(d=t.action)==null||d.onClick(o),!o.defaultPrevented&&E()}},t.action.label):null))},zt=s=>{var C;let{invert:e,position:t="bottom-right",hotkey:r=["altKey","KeyT"],expand:n,closeButton:y,className:m,offset:c,theme:_="light",richColors:D,duration:z,style:$,visibleToasts:F=kt,toastOptions:h}=s,[T,N]=a.default.useState([]),[A,M]=a.default.useState([]),[B,x]=a.default.useState(!1),[H,Y]=a.default.useState(!1),[K,L]=t.split("-"),w=a.default.useRef(null),V=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),W=a.default.useCallback(u=>N(i=>i.filter(({id:l})=>l!==u.id)),[]);return a.default.useEffect(()=>b.subscribe(u=>{if(u.dismiss){N(i=>i.map(l=>l.id===u.id?{...l,delete:!0}:l));return}setTimeout(()=>{ct.default.flushSync(()=>{N(i=>{let l=i.findIndex(R=>R.id===u.id);return l!==-1?[...i.slice(0,l),{...i[l],...u},...i.slice(l+1)]:[u,...i]})})})}),[]),a.default.useEffect(()=>{T.length<=1&&x(!1)},[T]),a.default.useEffect(()=>{let u=i=>{var R,O;r.every(g=>i[g]||i.code===g)&&(x(!0),(R=w.current)==null||R.focus()),i.code==="Escape"&&(document.activeElement===w.current||(O=w.current)!=null&&O.contains(document.activeElement))&&x(!1)};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[r]),T.length?a.default.createElement("section",{"aria-label":`Notifications ${V}`,tabIndex:-1},a.default.createElement("ol",{tabIndex:-1,ref:w,className:m,"data-sonner-toaster":!0,"data-theme":_,"data-rich-colors":D,"data-y-position":K,"data-x-position":L,style:{"--front-toast-height":`${(C=A[0])==null?void 0:C.height}px`,"--offset":typeof c=="number"?`${c}px`:c||Pt,"--width":`${Dt}px`,"--gap":`${ut}px`,...$},onMouseEnter:()=>x(!0),onMouseMove:()=>x(!0),onMouseLeave:()=>{H||x(!1)},onPointerDown:()=>{Y(!0)},onPointerUp:()=>Y(!1)},T.map((u,i)=>a.default.createElement(Ht,{key:u.id,index:i,toast:u,duration:z,className:h==null?void 0:h.className,descriptionClassName:h==null?void 0:h.descriptionClassName,invert:e,visibleToasts:F,closeButton:y,interacting:H,position:t,style:h==null?void 0:h.style,removeToast:W,toasts:T,heights:A,setHeights:M,expandByDefault:n,expanded:B})))):null};0&&(module.exports={Toaster,toast});
4
4
  //# 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/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 { HeightT, Position, PromiseData, ToastT, ToastToDismiss, ExternalToast, ToasterProps } 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_TRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\nconst isPromise = (toast: ToastT): toast is PromiseData & { id: number } => Boolean(toast.promise);\n\ninterface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n duration?: number;\n className?: string;\n descriptionClassName?: string;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton,\n style,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n expandByDefault,\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 [promiseStatus, setPromiseStatus] = React.useState<'loading' | 'success' | 'error' | null>(null);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const [promiseResult, setPromiseResult] = React.useState<React.ReactNode | string>(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 toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n\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 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 closeTimerRemainingTimeRef = React.useRef(duration);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartYRef = React.useRef<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 untill current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const invert = toast.invert || ToasterInvert;\n const disabled = promiseStatus === '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 const alreadyExists = heights.find((height) => height.toastId === toast.id);\n\n if (!alreadyExists) {\n setHeights((h) => [{ toastId: toast.id, height: newHeight }, ...h]);\n } else {\n setHeights((h) => h.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height)));\n }\n }, [toast.title, toast.description]);\n\n React.useEffect(() => {\n if (isPromise(toast)) {\n setPromiseStatus('loading');\n const promiseHandler = (promise: Promise<any>) => {\n promise\n .then((data) => {\n if (toast.success && typeof toast.success === 'function') {\n setPromiseResult(toast.success(data));\n }\n setPromiseStatus('success');\n })\n .catch((error) => {\n setPromiseStatus('error');\n if (toast.error && typeof toast.error === 'function') {\n setPromiseResult(toast.error(error));\n }\n });\n };\n\n if (toast.promise instanceof Promise) {\n promiseHandler(toast.promise);\n } else if (typeof toast.promise === 'function') {\n promiseHandler(toast.promise());\n }\n }\n }, [toast]);\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 && promiseStatus === 'loading') || toast.duration === Infinity) return;\n let timeoutId: NodeJS.Timeout;\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 closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, closeTimerRemainingTimeRef.current);\n };\n\n if (expanded || interacting) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, expandByDefault, toast, duration, deleteToast, toast.promise, promiseStatus]);\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 }, ...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 }, [toast.delete]);\n\n const promiseTitle = React.useMemo(() => {\n if (!isPromise(toast)) return null;\n\n switch (promiseStatus) {\n case 'loading':\n return toast.loading;\n case 'success':\n return typeof toast.success === 'function' ? promiseResult : toast.success;\n case 'error':\n return typeof toast.error === 'function' ? promiseResult : toast.error;\n default:\n return toast.loading;\n }\n }, [promiseStatus, promiseResult]);\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={className + ' ' + toastClassname}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx)}\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-type={promiseStatus !== 'loading' && promiseStatus ? promiseStatus : 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) return;\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 pointerStartYRef.current = event.clientY;\n }}\n onPointerUp={() => {\n if (swipeOut) return;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n\n // Remove only if treshold is met\n if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {\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 pointerStartYRef.current = null;\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartYRef.current) return;\n\n const yPosition = event.clientY - pointerStartYRef.current;\n\n const isAllowedToSwipe = y === 'top' ? yPosition < 0 : yPosition > 0;\n // We don't want to swipe to the left and vice versa depending on toast position\n if (!isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label=\"Close toast\"\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled\n ? undefined\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\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 ? <Loader visible={promiseStatus === 'loading'} /> : null}\n {toast.icon || getAsset(promiseStatus ?? toast.type)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\">\n <>{toast.title ?? promiseTitle}</>\n </div>\n {toast.description ? (\n <div data-description=\"\" className={descriptionClassName + toastDescriptionClassname}>\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick();\n }\n }}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n onClick={() => {\n deleteToast();\n toast.action?.onClick();\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\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 } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [y, x] = position.split('-');\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\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 // Upadte 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 // 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 if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={theme}\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 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={() => {\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts.map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n removeToast={removeToast}\n toasts={toasts}\n heights={heights}\n setHeights={setHeights}\n expandByDefault={expand}\n expanded={expanded}\n />\n ))}\n </ol>\n </section>\n );\n};\nexport { toast, Toaster, ToastT, 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(\"[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: 6px;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}[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:-3px;margin-right:4px}[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:-1px}[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:auto;border:none;cursor:pointer;outline:none;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:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;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:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[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%}[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(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--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%);--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=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}}\\n\")","'use client';\nimport React from 'react';\nimport { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n 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 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';\nimport { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss, ToastTypes } from './types';\n\nlet toastsCounter = 0;\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 this.toasts = [...this.toasts, data];\n };\n\n create = (data: ExternalToast & { message?: string | React.ReactNode; type?: ToastTypes }) => {\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\n if (alreadyExists) {\n this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id });\n return { ...toast, ...data };\n }\n\n return toast;\n });\n } else {\n this.publish({ title: message, ...rest, 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 promise = (promise: PromiseT, data?: PromiseData) => {\n return this.create({ ...data, promise });\n };\n\n // We can't provide the toast we just created as a prop as we didn't creat it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.publish({ jsx: jsx(id), id, ...data });\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.publish({\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 error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n});\n"],"mappings":";ykBAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,aAAAE,GAAA,UAAAC,KAAA,eAAAC,GAAAJ,IAEA,IAAAK,EAAkB,oBAClBC,GAAqB,wBCFI,SAARC,EAA6BC,EAAK,CAAE,SAAAC,CAAS,EAAI,CAAC,EAAG,CAC1D,GAAI,CAACD,GAAO,OAAO,UAAa,YAAa,OAE7C,IAAME,EAAO,SAAS,MAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAC/DC,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,KAAO,WAETF,IAAa,OACXC,EAAK,WACPA,EAAK,aAAaC,EAAOD,EAAK,UAAU,EAK1CA,EAAK,YAAYC,CAAK,EAGpBA,EAAM,WACRA,EAAM,WAAW,QAAUH,EAE3BG,EAAM,YAAY,SAAS,eAAeH,CAAG,CAAC,CAElD,CCvB8BI,EAAY;AAAA,CAAw1T,ECC54T,IAAAC,EAAkB,oBAGLC,GAAYC,GAAyC,CAChE,OAAQA,EAAM,CACZ,IAAK,UACH,OAAOC,GAET,IAAK,QACH,OAAOC,GAET,QAEF,CACF,EAEMC,GAAO,MAAM,EAAE,EAAE,KAAK,CAAC,EAEhBC,GAAS,CAAC,CAAE,QAAAC,CAAQ,IAE7B,EAAAC,QAAA,cAAC,OAAI,UAAU,yBAAyB,eAAcD,GACpD,EAAAC,QAAA,cAAC,OAAI,UAAU,kBACZH,GAAK,IAAI,CAACI,EAAGC,IACZ,EAAAF,QAAA,cAAC,OAAI,UAAU,qBAAqB,IAAK,eAAeE,IAAK,CAC9D,CACH,CACF,EAIEP,GACJ,EAAAK,QAAA,cAAC,OAAI,MAAM,6BAA6B,QAAQ,YAAY,KAAK,eAAe,OAAO,KAAK,MAAM,MAChG,EAAAA,QAAA,cAAC,QACC,SAAS,UACT,EAAE,yJACF,SAAS,UACX,CACF,EAaF,IAAMG,GACJ,EAAAC,QAAA,cAAC,OAAI,MAAM,6BAA6B,QAAQ,YAAY,KAAK,eAAe,OAAO,KAAK,MAAM,MAChG,EAAAA,QAAA,cAAC,QACC,SAAS,UACT,EAAE,sIACF,SAAS,UACX,CACF,ECvDF,IAAIC,GAAgB,EAEdC,GAAN,KAAe,CAIb,aAAc,CAMd,eAAaC,IACX,KAAK,YAAY,KAAKA,CAAU,EAEzB,IAAM,CACX,IAAMC,EAAQ,KAAK,YAAY,QAAQD,CAAU,EACjD,KAAK,YAAY,OAAOC,EAAO,CAAC,CAClC,GAGF,aAAWC,GAAiB,CAC1B,KAAK,YAAY,QAASF,GAAeA,EAAWE,CAAI,CAAC,EACzD,KAAK,OAAS,CAAC,GAAG,KAAK,OAAQA,CAAI,CACrC,EAEA,YAAUA,GAAoF,CA7BhG,IAAAC,EA8BI,GAAM,CAAE,QAAAC,EAAS,GAAGC,CAAK,EAAIH,EACvBI,EAAK,OAAOJ,GAAA,YAAAA,EAAM,KAAO,YAAYC,EAAAD,EAAK,KAAL,YAAAC,EAAS,QAAS,EAAID,EAAK,GAAKJ,KAK3E,OAJsB,KAAK,OAAO,KAAMS,GAC/BA,EAAM,KAAOD,CACrB,EAGC,KAAK,OAAO,IAAKC,GACXA,EAAM,KAAOD,GACf,KAAK,QAAQ,CAAE,GAAGC,EAAO,GAAGL,EAAM,GAAAI,CAAG,CAAC,EAC/B,CAAE,GAAGC,EAAO,GAAGL,CAAK,GAGtBK,CACR,EAED,KAAK,QAAQ,CAAE,MAAOH,EAAS,GAAGC,EAAM,GAAAC,CAAG,CAAC,EAGvCA,CACT,EAEA,aAAWA,IACJA,GACH,KAAK,OAAO,QAASC,GAAU,CAC7B,KAAK,YAAY,QAASP,GAAeA,EAAW,CAAE,GAAIO,EAAM,GAAI,QAAS,EAAK,CAAC,CAAC,CACtF,CAAC,EAGH,KAAK,YAAY,QAASP,GAAeA,EAAW,CAAE,GAAAM,EAAI,QAAS,EAAK,CAAC,CAAC,EACnEA,GAGT,aAAU,CAACF,EAAmCF,IACrC,KAAK,OAAO,CAAE,GAAGA,EAAM,QAAAE,CAAQ,CAAC,EAGzC,WAAQ,CAACA,EAAmCF,IACnC,KAAK,OAAO,CAAE,GAAGA,EAAM,QAAAE,EAAS,KAAM,OAAQ,CAAC,EAGxD,aAAU,CAACA,EAAmCF,IACrC,KAAK,OAAO,CAAE,GAAGA,EAAM,KAAM,UAAW,QAAAE,CAAQ,CAAC,EAG1D,aAAU,CAACI,EAAmBN,IACrB,KAAK,OAAO,CAAE,GAAGA,EAAM,QAAAM,CAAQ,CAAC,EAIzC,YAAS,CAACC,EAAkDP,IAAyB,CACnF,IAAMI,GAAKJ,GAAA,YAAAA,EAAM,KAAMJ,KACvB,KAAK,QAAQ,CAAE,IAAKW,EAAIH,CAAE,EAAG,GAAAA,EAAI,GAAGJ,CAAK,CAAC,CAC5C,EAzEE,KAAK,YAAc,CAAC,EACpB,KAAK,OAAS,CAAC,CACjB,CAwEF,EAEaQ,EAAa,IAAIX,GAGxBY,GAAgB,CAACP,EAAmCF,IAAyB,CACjF,IAAMI,GAAKJ,GAAA,YAAAA,EAAM,KAAMJ,KAEvB,OAAAY,EAAW,QAAQ,CACjB,MAAON,EACP,GAAGF,EACH,GAAAI,CACF,CAAC,EACMA,CACT,EAEMM,GAAaD,GAGNJ,GAAQ,OAAO,OAAOK,GAAY,CAC7C,QAASF,EAAW,QACpB,MAAOA,EAAW,MAClB,OAAQA,EAAW,OACnB,QAASA,EAAW,QACpB,QAASA,EAAW,QACpB,QAASA,EAAW,OACtB,CAAC,EJnGD,IAAMG,GAAwB,EAGxBC,GAAkB,OAGlBC,GAAiB,IAGjBC,GAAc,IAGdC,GAAM,GAENC,GAAiB,GAEjBC,GAAsB,IAEtBC,GAAaC,GAAyD,EAAQA,EAAM,QAsBpFC,GAASC,GAAsB,CAnDrC,IAAAC,GAoDE,GAAM,CACJ,OAAQC,EACR,MAAAJ,EACA,YAAAK,EACA,WAAAC,EACA,cAAAC,EACA,QAAAC,EACA,MAAAC,EACA,OAAAC,EACA,SAAAC,EACA,YAAAC,EACA,YAAAC,EACA,MAAAC,EACA,UAAAC,EAAY,GACZ,qBAAAC,EAAuB,GACvB,SAAUC,EACV,SAAAC,EACA,gBAAAC,CACF,EAAIjB,EACE,CAACkB,EAASC,CAAU,EAAI,EAAAC,QAAM,SAAS,EAAK,EAC5C,CAACC,EAASC,CAAU,EAAI,EAAAF,QAAM,SAAS,EAAK,EAC5C,CAACG,EAASC,CAAU,EAAI,EAAAJ,QAAM,SAAS,EAAK,EAC5C,CAACK,EAAUC,CAAW,EAAI,EAAAN,QAAM,SAAS,EAAK,EAC9C,CAACO,EAAeC,CAAgB,EAAI,EAAAR,QAAM,SAAiD,IAAI,EAC/F,CAACS,EAAoBC,CAAqB,EAAI,EAAAV,QAAM,SAAS,CAAC,EAC9D,CAACW,EAAeC,CAAgB,EAAI,EAAAZ,QAAM,SAAS,CAAC,EACpD,CAACa,EAAeC,CAAgB,EAAI,EAAAd,QAAM,SAAmC,IAAI,EACjFe,EAAW,EAAAf,QAAM,OAAsB,IAAI,EAC3CgB,GAAU7B,IAAU,EACpB8B,GAAY9B,EAAQ,GAAKF,EACzBiC,GAAYxC,EAAM,KAClByC,GAAiBzC,EAAM,WAAa,GACpC0C,GAA4B1C,EAAM,sBAAwB,GAG1D2C,EAAc,EAAArB,QAAM,QACxB,IAAMd,EAAQ,UAAWoC,GAAWA,EAAO,UAAY5C,EAAM,EAAE,GAAK,EACpE,CAACQ,EAASR,EAAM,EAAE,CACpB,EACM6C,GAAW,EAAAvB,QAAM,QACrB,IAAMtB,EAAM,UAAYiB,GAAuBvB,GAC/C,CAACM,EAAM,SAAUiB,CAAmB,CACtC,EACM6B,EAAyB,EAAAxB,QAAM,OAAO,CAAC,EACvCyB,EAAS,EAAAzB,QAAM,OAAO,CAAC,EACvB0B,EAA6B,EAAA1B,QAAM,OAAOuB,EAAQ,EAClDI,GAA6B,EAAA3B,QAAM,OAAO,CAAC,EAC3C4B,EAAmB,EAAA5B,QAAM,OAAsB,IAAI,EACnD,CAAC6B,GAAGC,EAAC,EAAIlC,EAAS,MAAM,GAAG,EAC3BmC,GAAqB,EAAA/B,QAAM,QAAQ,IAChCd,EAAQ,OAAO,CAAC8C,EAAMC,EAAMC,IAE7BA,GAAgBb,EACXW,EAGFA,EAAOC,EAAK,OAClB,CAAC,EACH,CAAC/C,EAASmC,CAAW,CAAC,EACnBc,GAASzD,EAAM,QAAUI,EACzBsD,EAAW7B,IAAkB,UAEnCkB,EAAO,QAAU,EAAAzB,QAAM,QAAQ,IAAMqB,EAAc/C,GAAMyD,GAAoB,CAACV,EAAaU,EAAkB,CAAC,EAE9G,EAAA/B,QAAM,UAAU,IAAM,CAEpBD,EAAW,EAAI,CACjB,EAAG,CAAC,CAAC,EAEL,EAAAC,QAAM,gBAAgB,IAAM,CAC1B,GAAI,CAACF,EAAS,OACd,IAAMuC,EAAYtB,EAAS,QACrBuB,EAAiBD,EAAU,MAAM,OACvCA,EAAU,MAAM,OAAS,OACzB,IAAME,EAAYF,EAAU,sBAAsB,EAAE,OACpDA,EAAU,MAAM,OAASC,EAEzB1B,EAAiB2B,CAAS,EAE1B,IAAMC,EAAgBtD,EAAQ,KAAMoC,GAAWA,EAAO,UAAY5C,EAAM,EAAE,EAKxEM,EAHGwD,EAGSC,GAAMA,EAAE,IAAKnB,GAAYA,EAAO,UAAY5C,EAAM,GAAK,CAAE,GAAG4C,EAAQ,OAAQiB,CAAU,EAAIjB,CAAO,EAFjGmB,GAAM,CAAC,CAAE,QAAS/D,EAAM,GAAI,OAAQ6D,CAAU,EAAG,GAAGE,CAAC,CAE6C,CAElH,EAAG,CAAC/D,EAAM,MAAOA,EAAM,WAAW,CAAC,EAEnC,EAAAsB,QAAM,UAAU,IAAM,CACpB,GAAIvB,GAAUC,CAAK,EAAG,CACpB8B,EAAiB,SAAS,EAC1B,IAAMkC,EAAkBC,GAA0B,CAChDA,EACG,KAAMC,GAAS,CACVlE,EAAM,SAAW,OAAOA,EAAM,SAAY,YAC5CoC,EAAiBpC,EAAM,QAAQkE,CAAI,CAAC,EAEtCpC,EAAiB,SAAS,CAC5B,CAAC,EACA,MAAOqC,GAAU,CAChBrC,EAAiB,OAAO,EACpB9B,EAAM,OAAS,OAAOA,EAAM,OAAU,YACxCoC,EAAiBpC,EAAM,MAAMmE,CAAK,CAAC,CAEvC,CAAC,CACL,EAEInE,EAAM,mBAAmB,QAC3BgE,EAAehE,EAAM,OAAO,EACnB,OAAOA,EAAM,SAAY,YAClCgE,EAAehE,EAAM,QAAQ,CAAC,EAGpC,EAAG,CAACA,CAAK,CAAC,EAEV,IAAMoE,EAAc,EAAA9C,QAAM,YAAY,IAAM,CAE1CE,EAAW,EAAI,EACfQ,EAAsBe,EAAO,OAAO,EACpCzC,EAAYyD,GAAMA,EAAE,OAAQnB,GAAWA,EAAO,UAAY5C,EAAM,EAAE,CAAC,EAEnE,WAAW,IAAM,CACfY,EAAYZ,CAAK,CACnB,EAAGF,EAAmB,CACxB,EAAG,CAACE,EAAOY,EAAaN,EAAYyC,CAAM,CAAC,EAE3C,EAAAzB,QAAM,UAAU,IAAM,CACpB,GAAKtB,EAAM,SAAW6B,IAAkB,WAAc7B,EAAM,WAAa,IAAU,OACnF,IAAIqE,EAuBJ,OAAI1D,GAAYN,GApBG,IAAM,CACvB,GAAI4C,GAA2B,QAAUH,EAAuB,QAAS,CAEvE,IAAMwB,EAAc,IAAI,KAAK,EAAE,QAAQ,EAAIxB,EAAuB,QAElEE,EAA2B,QAAUA,EAA2B,QAAUsB,EAG5ErB,GAA2B,QAAU,IAAI,KAAK,EAAE,QAAQ,CAC1D,GAYa,GAVM,IAAM,CACvBH,EAAuB,QAAU,IAAI,KAAK,EAAE,QAAQ,EAEpDuB,EAAY,WAAW,IAAM,CArMnC,IAAAlE,GAsMQA,EAAAH,EAAM,cAAN,MAAAG,EAAA,KAAAH,EAAoBA,GACpBoE,EAAY,CACd,EAAGpB,EAA2B,OAAO,CACvC,GAKa,EAGN,IAAM,aAAaqB,CAAS,CACrC,EAAG,CAAC1D,EAAUN,EAAac,EAAiBnB,EAAO6C,GAAUuB,EAAapE,EAAM,QAAS6B,CAAa,CAAC,EAEvG,EAAAP,QAAM,UAAU,IAAM,CACpB,IAAMqC,EAAYtB,EAAS,QAE3B,GAAIsB,EAAW,CACb,IAAMf,EAASe,EAAU,sBAAsB,EAAE,OAGjD,OAAAzB,EAAiBU,CAAM,EACvBtC,EAAYyD,GAAM,CAAC,CAAE,QAAS/D,EAAM,GAAI,OAAA4C,CAAO,EAAG,GAAGmB,CAAC,CAAC,EAEhD,IAAMzD,EAAYyD,GAAMA,EAAE,OAAQnB,GAAWA,EAAO,UAAY5C,EAAM,EAAE,CAAC,EAEpF,EAAG,CAACM,EAAYN,EAAM,EAAE,CAAC,EAEzB,EAAAsB,QAAM,UAAU,IAAM,CAChBtB,EAAM,QACRoE,EAAY,CAEhB,EAAG,CAACpE,EAAM,MAAM,CAAC,EAEjB,IAAMuE,GAAe,EAAAjD,QAAM,QAAQ,IAAM,CACvC,GAAI,CAACvB,GAAUC,CAAK,EAAG,OAAO,KAE9B,OAAQ6B,EAAe,CACrB,IAAK,UACH,OAAO7B,EAAM,QACf,IAAK,UACH,OAAO,OAAOA,EAAM,SAAY,WAAamC,EAAgBnC,EAAM,QACrE,IAAK,QACH,OAAO,OAAOA,EAAM,OAAU,WAAamC,EAAgBnC,EAAM,MACnE,QACE,OAAOA,EAAM,OACjB,CACF,EAAG,CAAC6B,EAAeM,CAAa,CAAC,EAEjC,OACE,EAAAb,QAAA,cAAC,MACC,YAAWtB,EAAM,UAAY,YAAc,SAC3C,cAAY,OACZ,KAAK,SACL,SAAU,EACV,IAAKqC,EACL,UAAWtB,EAAY,IAAM0B,GAC7B,oBAAkB,GAClB,cAAa,CAASzC,EAAM,IAC5B,eAAcoB,EACd,eAAc,EAAQpB,EAAM,QAC5B,eAAcuB,EACd,eAAcgB,GACd,kBAAiBY,GACjB,kBAAiBC,GACjB,aAAY3C,EACZ,aAAY6B,GACZ,eAAcb,EACd,YAAWI,IAAkB,WAAaA,EAAgBA,EAAgBW,GAC1E,cAAaiB,GACb,iBAAgB9B,EAChB,gBAAe,GAAQhB,GAAaQ,GAAmBC,GACvD,MACE,CACE,UAAWX,EACX,kBAAmBA,EACnB,YAAaC,EAAO,OAASD,EAC7B,WAAY,GAAGc,EAAUQ,EAAqBgB,EAAO,YACrD,mBAAoB5B,EAAkB,OAAS,GAAGc,MAClD,GAAGnB,EACH,GAAGd,EAAM,KACX,EAEF,cAAgBwE,GAAU,CACpBd,IACJ1B,EAAsBe,EAAO,OAAO,EAEnCyB,EAAM,OAAuB,kBAAkBA,EAAM,SAAS,EAC1DA,EAAM,OAAuB,UAAY,WAC9C9C,EAAW,EAAI,EACfwB,EAAiB,QAAUsB,EAAM,SACnC,EACA,YAAa,IAAM,CAlSzB,IAAArE,EAAAsE,EAAAC,EAmSQ,GAAI/C,EAAU,OACd,IAAMgD,EAAc,SAAOxE,EAAAkC,EAAS,UAAT,YAAAlC,EAAkB,MAAM,iBAAiB,kBAAkB,QAAQ,KAAM,MAAO,CAAC,EAG5G,GAAI,KAAK,IAAIwE,CAAW,GAAK9E,GAAgB,CAC3CmC,EAAsBe,EAAO,OAAO,GACpC0B,EAAAzE,EAAM,YAAN,MAAAyE,EAAA,KAAAzE,EAAkBA,GAClBoE,EAAY,EACZxC,EAAY,EAAI,EAChB,QAGF8C,EAAArC,EAAS,UAAT,MAAAqC,EAAkB,MAAM,YAAY,iBAAkB,OACtDxB,EAAiB,QAAU,KAC3BxB,EAAW,EAAK,CAClB,EACA,cAAgB8C,GAAU,CAnThC,IAAArE,EAAAsE,EAoTQ,GAAI,CAACvB,EAAiB,QAAS,OAE/B,IAAM0B,EAAYJ,EAAM,QAAUtB,EAAiB,QAInD,GAAI,EAFqBC,KAAM,MAAQyB,EAAY,EAAIA,EAAY,GAE5C,EACrBzE,EAAAkC,EAAS,UAAT,MAAAlC,EAAkB,MAAM,YAAY,iBAAkB,OACtD,QAGFsE,EAAApC,EAAS,UAAT,MAAAoC,EAAkB,MAAM,YAAY,iBAAkB,GAAGG,MAC3D,GAEC/D,GAAe,CAACb,EAAM,IACrB,EAAAsB,QAAA,cAAC,UACC,aAAW,cACX,gBAAeoC,EACf,oBAAiB,GACjB,QACEA,EACI,OACA,IAAM,CA1UtB,IAAAvD,EA2UkBiE,EAAY,GACZjE,EAAAH,EAAM,YAAN,MAAAG,EAAA,KAAAH,EAAkBA,EACpB,GAGN,EAAAsB,QAAA,cAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,MACZ,cAAc,QACd,eAAe,SAEf,EAAAA,QAAA,cAAC,QAAK,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,EACpC,EAAAA,QAAA,cAAC,QAAK,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CACtC,CACF,EACE,KACHtB,EAAM,KAAO,EAAAsB,QAAM,eAAetB,EAAM,KAAK,EAC5CA,EAAM,KAAOA,EAAM,MAEnB,EAAAsB,QAAA,gBAAAA,QAAA,cACGkB,IAAaxC,EAAM,MAAQA,EAAM,QAChC,EAAAsB,QAAA,cAAC,OAAI,YAAU,IACZtB,EAAM,QAAU,EAAAsB,QAAA,cAACuD,GAAA,CAAO,QAAShD,IAAkB,UAAW,EAAK,KACnE7B,EAAM,MAAQ8E,GAASjD,GAAA,KAAAA,EAAiB7B,EAAM,IAAI,CACrD,EACE,KAEJ,EAAAsB,QAAA,cAAC,OAAI,eAAa,IAChB,EAAAA,QAAA,cAAC,OAAI,aAAW,IACd,EAAAA,QAAA,gBAAAA,QAAA,eAAGnB,GAAAH,EAAM,QAAN,KAAAG,GAAeoE,EAAa,CACjC,EACCvE,EAAM,YACL,EAAAsB,QAAA,cAAC,OAAI,mBAAiB,GAAG,UAAWN,EAAuB0B,IACxD1C,EAAM,WACT,EACE,IACN,EACCA,EAAM,OACL,EAAAsB,QAAA,cAAC,UACC,cAAW,GACX,cAAW,GACX,QAAS,IAAM,CAzX7B,IAAAnB,EA0XgBiE,EAAY,GACRjE,EAAAH,EAAM,SAAN,MAAAG,EAAc,SAChBH,EAAM,OAAO,QAAQ,CAEzB,GAECA,EAAM,OAAO,KAChB,EACE,KACHA,EAAM,OACL,EAAAsB,QAAA,cAAC,UACC,cAAY,GACZ,QAAS,IAAM,CAtY7B,IAAAnB,EAuYgBiE,EAAY,GACZjE,EAAAH,EAAM,SAAN,MAAAG,EAAc,SAChB,GAECH,EAAM,OAAO,KAChB,EACE,IACN,CAEJ,CAEJ,EAEM+E,GAAW7E,GAAwB,CApZzC,IAAAC,EAqZE,GAAM,CACJ,OAAAsD,EACA,SAAAvC,EAAW,eACX,OAAA8D,EAAS,CAAC,SAAU,MAAM,EAC1B,OAAAC,EACA,YAAApE,EACA,UAAAE,EACA,OAAAgC,EACA,MAAAmC,EAAQ,QACR,WAAAC,EACA,SAAAtC,EACA,MAAA/B,EACA,cAAAP,EAAgBf,GAChB,aAAA4F,CACF,EAAIlF,EACE,CAACQ,EAAQ2E,CAAS,EAAI,EAAA/D,QAAM,SAAmB,CAAC,CAAC,EACjD,CAACd,EAASF,CAAU,EAAI,EAAAgB,QAAM,SAAoB,CAAC,CAAC,EACpD,CAACX,EAAU2E,CAAW,EAAI,EAAAhE,QAAM,SAAS,EAAK,EAC9C,CAACjB,EAAakF,CAAc,EAAI,EAAAjE,QAAM,SAAS,EAAK,EACpD,CAAC6B,EAAGC,CAAC,EAAIlC,EAAS,MAAM,GAAG,EAC3BsE,EAAU,EAAAlE,QAAM,OAAyB,IAAI,EAC7CmE,EAAcT,EAAO,KAAK,GAAG,EAAE,QAAQ,OAAQ,EAAE,EAAE,QAAQ,SAAU,EAAE,EAEvEpE,EAAc,EAAAU,QAAM,YACvBtB,GAAkBqF,EAAW3E,GAAWA,EAAO,OAAO,CAAC,CAAE,GAAAgF,CAAG,IAAMA,IAAO1F,EAAM,EAAE,CAAC,EACnF,CAAC,CACH,EA2DA,OAzDA,EAAAsB,QAAM,UAAU,IACPqE,EAAW,UAAW3F,GAAU,CACrC,GAAKA,EAAyB,QAAS,CACrCqF,EAAW3E,GAAWA,EAAO,IAAKkF,GAAOA,EAAE,KAAO5F,EAAM,GAAK,CAAE,GAAG4F,EAAG,OAAQ,EAAK,EAAIA,CAAE,CAAC,EACzF,OAIF,WAAW,IAAM,CACf,GAAAC,QAAS,UAAU,IAAM,CACvBR,EAAW3E,GAAW,CACpB,IAAMoF,EAAuBpF,EAAO,UAAWkF,GAAMA,EAAE,KAAO5F,EAAM,EAAE,EAGtE,OAAI8F,IAAyB,GACpB,CACL,GAAGpF,EAAO,MAAM,EAAGoF,CAAoB,EACvC,CAAE,GAAGpF,EAAOoF,CAAoB,EAAG,GAAG9F,CAAM,EAC5C,GAAGU,EAAO,MAAMoF,EAAuB,CAAC,CAC1C,EAGK,CAAC9F,EAAO,GAAGU,CAAM,CAC1B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC,EACA,CAAC,CAAC,EAEL,EAAAY,QAAM,UAAU,IAAM,CAEhBZ,EAAO,QAAU,GACnB4E,EAAY,EAAK,CAErB,EAAG,CAAC5E,CAAM,CAAC,EAEX,EAAAY,QAAM,UAAU,IAAM,CACpB,IAAMyE,EAAiBvB,GAAyB,CAtdpD,IAAArE,EAAAsE,EAud8BO,EAAO,MAAOgB,GAASxB,EAAcwB,CAAG,GAAKxB,EAAM,OAASwB,CAAG,IAGrFV,EAAY,EAAI,GAChBnF,EAAAqF,EAAQ,UAAR,MAAArF,EAAiB,SAIjBqE,EAAM,OAAS,WACd,SAAS,gBAAkBgB,EAAQ,UAAWf,EAAAe,EAAQ,UAAR,MAAAf,EAAiB,SAAS,SAAS,iBAElFa,EAAY,EAAK,CAErB,EACA,gBAAS,iBAAiB,UAAWS,CAAa,EAE3C,IAAM,SAAS,oBAAoB,UAAWA,CAAa,CACpE,EAAG,CAACf,CAAM,CAAC,EAENtE,EAAO,OAIV,EAAAY,QAAA,cAAC,WAAQ,aAAY,iBAAiBmE,IAAe,SAAU,IAC7D,EAAAnE,QAAA,cAAC,MACC,SAAU,GACV,IAAKkE,EACL,UAAWzE,EACX,sBAAmB,GACnB,aAAYmE,EACZ,mBAAkBC,EAClB,kBAAiBhC,EACjB,kBAAiBC,EACjB,MACE,CACE,uBAAwB,IAAGjD,EAAAK,EAAQ,CAAC,IAAT,YAAAL,EAAY,WACvC,WAAY,OAAO4C,GAAW,SAAW,GAAGA,MAAaA,GAAUtD,GACnE,UAAW,GAAGE,OACd,QAAS,GAAGC,OACZ,GAAGkB,CACL,EAEF,aAAc,IAAMwE,EAAY,EAAI,EACpC,YAAa,IAAMA,EAAY,EAAI,EACnC,aAAc,IAAM,CAEbjF,GACHiF,EAAY,EAAK,CAErB,EACA,cAAe,IAAM,CACnBC,EAAe,EAAI,CACrB,EACA,YAAa,IAAMA,EAAe,EAAK,GAEtC7E,EAAO,IAAI,CAACV,EAAOS,IAClB,EAAAa,QAAA,cAACrB,GAAA,CACC,IAAKD,EAAM,GACX,MAAOS,EACP,MAAOT,EACP,SAAU6C,EACV,UAAWuC,GAAA,YAAAA,EAAc,UACzB,qBAAsBA,GAAA,YAAAA,EAAc,qBACpC,OAAQ3B,EACR,cAAelD,EACf,YAAaM,EACb,YAAaR,EACb,SAAUa,EACV,MAAOkE,GAAA,YAAAA,EAAc,MACrB,YAAaxE,EACb,OAAQF,EACR,QAASF,EACT,WAAYF,EACZ,gBAAiB2E,EACjB,SAAUtE,EACZ,CACD,CACH,CACF,EA3DyB,IA6D7B","names":["src_exports","__export","Toaster","toast","__toCommonJS","import_react","import_react_dom","styleInject","css","insertAt","head","style","styleInject","import_react","getAsset","type","SuccessIcon","ErrorIcon","bars","Loader","visible","React","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","toast","promise","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_TRESHOLD","TIME_BEFORE_UNMOUNT","isPromise","toast","Toast","props","_a","ToasterInvert","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButton","style","className","descriptionClassName","durationFromToaster","position","expandByDefault","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","promiseStatus","setPromiseStatus","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","promiseResult","setPromiseResult","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartYRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","toastNode","originalHeight","newHeight","alreadyExists","h","promiseHandler","promise","data","error","deleteToast","timeoutId","elapsedTime","promiseTitle","event","_b","_c","swipeAmount","yPosition","Loader","getAsset","Toaster","hotkey","expand","theme","richColors","toastOptions","setToasts","setExpanded","setInteracting","listRef","hotkeyLabel","id","ToastState","t","ReactDOM","indexOfExistingToast","handleKeyDown","key"]}
1
+ {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.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 { HeightT, Position, ToastT, ToastToDismiss, ExternalToast, ToasterProps } 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_TRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\ninterface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n duration?: number;\n className?: string;\n descriptionClassName?: string;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton,\n style,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n expandByDefault,\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 toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n\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 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 closeTimerRemainingTimeRef = React.useRef(duration);\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 untill current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\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 const alreadyExists = heights.find((height) => height.toastId === toast.id);\n\n if (!alreadyExists) {\n setHeights((h) => [{ toastId: toast.id, height: newHeight }, ...h]);\n } else {\n setHeights((h) => h.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height)));\n }\n }, [toast.title, toast.description]);\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) return;\n let timeoutId: NodeJS.Timeout;\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 closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, closeTimerRemainingTimeRef.current);\n };\n\n if (expanded || interacting) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, expandByDefault, toast, duration, deleteToast, toast.promise, toastType]);\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 }, ...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 }, [toast.delete]);\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={className + ' ' + toastClassname}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx)}\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-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) return;\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) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n\n // Remove only if treshold is met\n if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {\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) 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 = 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=\"Close toast\"\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled\n ? undefined\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\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 ? <Loader visible={toastType === 'loading'} /> : null}\n {toast.icon || getAsset(toastType)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\">{toast.title}</div>\n {toast.description ? (\n <div data-description=\"\" className={descriptionClassName + toastDescriptionClassname}>\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick();\n }\n }}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n onClick={(event) => {\n toast.action?.onClick(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\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 } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [y, x] = position.split('-');\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\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 // Upadte 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 // 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 if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={theme}\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 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={() => {\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts.map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n removeToast={removeToast}\n toasts={toasts}\n heights={heights}\n setHeights={setHeights}\n expandByDefault={expand}\n expanded={expanded}\n />\n ))}\n </ol>\n </section>\n );\n};\nexport { toast, Toaster, ToastT, 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(\"[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: 6px;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}[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:-3px;margin-right:4px}[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:-1px}[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:auto;border:none;cursor:pointer;outline:none;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:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;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:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[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%}[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(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--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%);--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=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}}\\n\")","'use client';\nimport React from 'react';\nimport { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n 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 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';\nimport { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss, ToastTypes } from './types';\n\nlet toastsCounter = 0;\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 = (data: ExternalToast & { message?: string | React.ReactNode; type?: ToastTypes }) => {\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\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 { ...toast, ...data, id, title: message };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, 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 promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n const id = this.create({ ...data, promise, type: 'loading', message: data.loading });\n const p = promise instanceof Promise ? promise : promise();\n p.then((promiseData) => {\n const message = typeof data.success === 'function' ? data.success(promiseData) : data.success;\n this.create({ id, type: 'success', message });\n }).catch((error) => {\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n this.create({ id, type: 'error', message });\n });\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't creat it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.publish({ jsx: jsx(id), id, ...data });\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 error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\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","ErrorIcon","bars","Loader","visible","React","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","toast","promise","promiseData","error","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_TRESHOLD","TIME_BEFORE_UNMOUNT","Toast","props","ToasterInvert","toast","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButton","style","className","descriptionClassName","durationFromToaster","position","expandByDefault","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","toastNode","originalHeight","newHeight","alreadyExists","h","deleteToast","timeoutId","elapsedTime","_a","event","_b","_c","swipeAmount","yPosition","xPosition","clampedY","swipeStartThreshold","Loader","getAsset","Toaster","hotkey","expand","theme","richColors","toastOptions","setToasts","setExpanded","setInteracting","listRef","hotkeyLabel","id","ToastState","t","ReactDOM","indexOfExistingToast","handleKeyDown","key"]}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client"
2
- "use client";import e from"react";import Et from"react-dom";function q(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))}q(`[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: 6px;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}[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:-3px;margin-right:4px}[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:-1px}[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:auto;border:none;cursor:pointer;outline:none;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:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;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:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[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%}[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(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--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%);--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=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}}
3
- `);import N from"react";var nt=d=>{switch(d){case"success":return yt;case"error":return xt;default:}},bt=Array(12).fill(0),it=({visible:d})=>N.createElement("div",{className:"sonner-loading-wrapper","data-visible":d},N.createElement("div",{className:"sonner-spinner"},bt.map((a,t)=>N.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),yt=N.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},N.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"}));var xt=N.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},N.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 Q=0,Z=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.toasts=[...this.toasts,a]};this.create=a=>{var h;let{message:t,...s}=a,c=typeof(a==null?void 0:a.id)=="number"||((h=a.id)==null?void 0:h.length)>0?a.id:Q++;return this.toasts.find(l=>l.id===c)?this.toasts.map(l=>l.id===c?(this.publish({...l,...a,id:c}),{...l,...a}):l):this.publish({title:t,...s,id:c}),c};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.promise=(a,t)=>this.create({...t,promise:a});this.custom=(a,t)=>{let s=(t==null?void 0:t.id)||Q++;this.publish({jsx:a(s),id:s,...t})};this.subscribers=[],this.toasts=[]}},b=new Z,vt=(d,a)=>{let t=(a==null?void 0:a.id)||Q++;return b.publish({title:d,...a,id:t}),t},Tt=vt,wt=Object.assign(Tt,{success:b.success,error:b.error,custom:b.custom,message:b.message,promise:b.promise,dismiss:b.dismiss});var St=3,Nt="32px",Pt=4e3,Ct=356,dt=14,Rt=20,kt=200,lt=d=>!!d.promise,It=d=>{var rt;let{invert:a,toast:t,interacting:s,setHeights:c,visibleToasts:z,heights:h,index:l,toasts:_,expanded:I,removeToast:A,closeButton:$,style:F,className:g="",descriptionClassName:v="",duration:P,position:Y,expandByDefault:D}=d,[B,y]=e.useState(!1),[H,L]=e.useState(!1),[K,O]=e.useState(!1),[T,V]=e.useState(!1),[p,C]=e.useState(null),[u,r]=e.useState(0),[f,w]=e.useState(0),[R,M]=e.useState(null),E=e.useRef(null),ct=l===0,ut=l+1<=z,tt=t.type,pt=t.className||"",mt=t.descriptionClassName||"",j=e.useMemo(()=>h.findIndex(o=>o.toastId===t.id)||0,[h,t.id]),et=e.useMemo(()=>t.duration||P||Pt,[t.duration,P]),W=e.useRef(0),k=e.useRef(0),J=e.useRef(et),at=e.useRef(0),U=e.useRef(null),[ot,ft]=Y.split("-"),st=e.useMemo(()=>h.reduce((o,n,i)=>i>=j?o:o+n.height,0),[h,j]),gt=t.invert||a,G=p==="loading";k.current=e.useMemo(()=>j*dt+st,[j,st]),e.useEffect(()=>{y(!0)},[]),e.useLayoutEffect(()=>{if(!B)return;let o=E.current,n=o.style.height;o.style.height="auto";let i=o.getBoundingClientRect().height;o.style.height=n,w(i);let m=h.find(x=>x.toastId===t.id);c(m?x=>x.map(X=>X.toastId===t.id?{...X,height:i}:X):x=>[{toastId:t.id,height:i},...x])},[t.title,t.description]),e.useEffect(()=>{if(lt(t)){C("loading");let o=n=>{n.then(i=>{t.success&&typeof t.success=="function"&&M(t.success(i)),C("success")}).catch(i=>{C("error"),t.error&&typeof t.error=="function"&&M(t.error(i))})};t.promise instanceof Promise?o(t.promise):typeof t.promise=="function"&&o(t.promise())}},[t]);let S=e.useCallback(()=>{L(!0),r(k.current),c(o=>o.filter(n=>n.toastId!==t.id)),setTimeout(()=>{A(t)},kt)},[t,A,c,k]);e.useEffect(()=>{if(t.promise&&p==="loading"||t.duration===1/0)return;let o;return I||s?(()=>{if(at.current<W.current){let m=new Date().getTime()-W.current;J.current=J.current-m}at.current=new Date().getTime()})():(()=>{W.current=new Date().getTime(),o=setTimeout(()=>{var m;(m=t.onAutoClose)==null||m.call(t,t),S()},J.current)})(),()=>clearTimeout(o)},[I,s,D,t,et,S,t.promise,p]),e.useEffect(()=>{let o=E.current;if(o){let n=o.getBoundingClientRect().height;return w(n),c(i=>[{toastId:t.id,height:n},...i]),()=>c(i=>i.filter(m=>m.toastId!==t.id))}},[c,t.id]),e.useEffect(()=>{t.delete&&S()},[t.delete]);let ht=e.useMemo(()=>{if(!lt(t))return null;switch(p){case"loading":return t.loading;case"success":return typeof t.success=="function"?R:t.success;case"error":return typeof t.error=="function"?R:t.error;default:return t.loading}},[p,R]);return e.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:E,className:g+" "+pt,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":B,"data-promise":!!t.promise,"data-removed":H,"data-visible":ut,"data-y-position":ot,"data-x-position":ft,"data-index":l,"data-front":ct,"data-swiping":K,"data-type":p!=="loading"&&p?p:tt,"data-invert":gt,"data-swipe-out":T,"data-expanded":!!(I||D&&B),style:{"--index":l,"--toasts-before":l,"--z-index":_.length-l,"--offset":`${H?u:k.current}px`,"--initial-height":D?"auto":`${f}px`,...F,...t.style},onPointerDown:o=>{G||(r(k.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(O(!0),U.current=o.clientY))},onPointerUp:()=>{var n,i,m;if(T)return;let o=Number(((n=E.current)==null?void 0:n.style.getPropertyValue("--swipe-amount").replace("px",""))||0);if(Math.abs(o)>=Rt){r(k.current),(i=t.onDismiss)==null||i.call(t,t),S(),V(!0);return}(m=E.current)==null||m.style.setProperty("--swipe-amount","0px"),U.current=null,O(!1)},onPointerMove:o=>{var m,x;if(!U.current)return;let n=o.clientY-U.current;if(!(ot==="top"?n<0:n>0)){(m=E.current)==null||m.style.setProperty("--swipe-amount","0px");return}(x=E.current)==null||x.style.setProperty("--swipe-amount",`${n}px`)}},$&&!t.jsx?e.createElement("button",{"aria-label":"Close toast","data-disabled":G,"data-close-button":!0,onClick:G?void 0:()=>{var o;S(),(o=t.onDismiss)==null||o.call(t,t)}},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,tt||t.icon||t.promise?e.createElement("div",{"data-icon":""},t.promise?e.createElement(it,{visible:p==="loading"}):null,t.icon||nt(p!=null?p:t.type)):null,e.createElement("div",{"data-content":""},e.createElement("div",{"data-title":""},e.createElement(e.Fragment,null,(rt=t.title)!=null?rt:ht)),t.description?e.createElement("div",{"data-description":"",className:v+mt},t.description):null),t.cancel?e.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var o;S(),(o=t.cancel)!=null&&o.onClick&&t.cancel.onClick()}},t.cancel.label):null,t.action?e.createElement("button",{"data-button":"",onClick:()=>{var o;S(),(o=t.action)==null||o.onClick()}},t.action.label):null))},Xt=d=>{var C;let{invert:a,position:t="bottom-right",hotkey:s=["altKey","KeyT"],expand:c,closeButton:z,className:h,offset:l,theme:_="light",richColors:I,duration:A,style:$,visibleToasts:F=St,toastOptions:g}=d,[v,P]=e.useState([]),[Y,D]=e.useState([]),[B,y]=e.useState(!1),[H,L]=e.useState(!1),[K,O]=t.split("-"),T=e.useRef(null),V=s.join("+").replace(/Key/g,"").replace(/Digit/g,""),p=e.useCallback(u=>P(r=>r.filter(({id:f})=>f!==u.id)),[]);return e.useEffect(()=>b.subscribe(u=>{if(u.dismiss){P(r=>r.map(f=>f.id===u.id?{...f,delete:!0}:f));return}setTimeout(()=>{Et.flushSync(()=>{P(r=>{let f=r.findIndex(w=>w.id===u.id);return f!==-1?[...r.slice(0,f),{...r[f],...u},...r.slice(f+1)]:[u,...r]})})})}),[]),e.useEffect(()=>{v.length<=1&&y(!1)},[v]),e.useEffect(()=>{let u=r=>{var w,R;s.every(M=>r[M]||r.code===M)&&(y(!0),(w=T.current)==null||w.focus()),r.code==="Escape"&&(document.activeElement===T.current||(R=T.current)!=null&&R.contains(document.activeElement))&&y(!1)};return document.addEventListener("keydown",u),()=>document.removeEventListener("keydown",u)},[s]),v.length?e.createElement("section",{"aria-label":`Notifications ${V}`,tabIndex:-1},e.createElement("ol",{tabIndex:-1,ref:T,className:h,"data-sonner-toaster":!0,"data-theme":_,"data-rich-colors":I,"data-y-position":K,"data-x-position":O,style:{"--front-toast-height":`${(C=Y[0])==null?void 0:C.height}px`,"--offset":typeof l=="number"?`${l}px`:l||Nt,"--width":`${Ct}px`,"--gap":`${dt}px`,...$},onMouseEnter:()=>y(!0),onMouseMove:()=>y(!0),onMouseLeave:()=>{H||y(!1)},onPointerDown:()=>{L(!0)},onPointerUp:()=>L(!1)},v.map((u,r)=>e.createElement(It,{key:u.id,index:r,toast:u,duration:A,className:g==null?void 0:g.className,descriptionClassName:g==null?void 0:g.descriptionClassName,invert:a,visibleToasts:F,closeButton:z,interacting:H,position:t,style:g==null?void 0:g.style,removeToast:p,toasts:v,heights:Y,setHeights:D,expandByDefault:c,expanded:B})))):null};export{Xt as Toaster,wt as toast};
2
+ "use client";import e from"react";import bt from"react-dom";function G(p,{insertAt:a}={}){if(!p||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=p:s.appendChild(document.createTextNode(p))}G(`[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: 6px;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}[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:-3px;margin-right:4px}[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:-1px}[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:auto;border:none;cursor:pointer;outline:none;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:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;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:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[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%}[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(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--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%);--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=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}}
3
+ `);import S from"react";var st=p=>{switch(p){case"success":return pt;case"error":return mt;default:}},ut=Array(12).fill(0),rt=({visible:p})=>S.createElement("div",{className:"sonner-loading-wrapper","data-visible":p},S.createElement("div",{className:"sonner-spinner"},ut.map((a,t)=>S.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),pt=S.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},S.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"}));var mt=S.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},S.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 q=0,Q=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,l=typeof(a==null?void 0:a.id)=="number"||((m=a.id)==null?void 0:m.length)>0?a.id:q++;return this.toasts.find(d=>d.id===l)?this.toasts=this.toasts.map(d=>d.id===l?(this.publish({...d,...a,id:l,title:t}),{...d,...a,id:l,title:t}):d):this.addToast({title:t,...s,id:l}),l};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.promise=(a,t)=>{let s=this.create({...t,promise:a,type:"loading",message:t.loading});return(a instanceof Promise?a:a()).then(y=>{let m=typeof t.success=="function"?t.success(y):t.success;this.create({id:s,type:"success",message:m})}).catch(y=>{let m=typeof t.error=="function"?t.error(y):t.error;this.create({id:s,type:"error",message:m})}),s};this.custom=(a,t)=>{let s=(t==null?void 0:t.id)||q++;this.publish({jsx:a(s),id:s,...t})};this.subscribers=[],this.toasts=[]}},b=new Q,ft=(p,a)=>{let t=(a==null?void 0:a.id)||q++;return b.addToast({title:p,...a,id:t}),t},ht=ft,gt=Object.assign(ht,{success:b.success,error:b.error,custom:b.custom,message:b.message,promise:b.promise,dismiss:b.dismiss});var yt=3,xt="32px",vt=4e3,Tt=356,nt=14,wt=20,Et=200,St=p=>{let{invert:a,toast:t,interacting:s,setHeights:l,visibleToasts:y,heights:m,index:d,toasts:U,expanded:D,removeToast:z,closeButton:_,style:$,className:h="",descriptionClassName:v="",duration:N,position:A,expandByDefault:M}=p,[B,x]=e.useState(!1),[H,Y]=e.useState(!1),[F,L]=e.useState(!1),[T,K]=e.useState(!1),[V,C]=e.useState(0),[c,r]=e.useState(0),n=e.useRef(null),R=d===0,O=d+1<=y,g=t.type,it=t.className||"",lt=t.descriptionClassName||"",j=e.useMemo(()=>m.findIndex(o=>o.toastId===t.id)||0,[m,t.id]),Z=e.useMemo(()=>t.duration||N||vt,[t.duration,N]),W=e.useRef(0),k=e.useRef(0),X=e.useRef(Z),tt=e.useRef(0),P=e.useRef(null),[et,dt]=A.split("-"),at=e.useMemo(()=>m.reduce((o,i,u)=>u>=j?o:o+i.height,0),[m,j]),ct=t.invert||a,J=g==="loading";k.current=e.useMemo(()=>j*nt+at,[j,at]),e.useEffect(()=>{x(!0)},[]),e.useLayoutEffect(()=>{if(!B)return;let o=n.current,i=o.style.height;o.style.height="auto";let u=o.getBoundingClientRect().height;o.style.height=i,r(u);let f=m.find(E=>E.toastId===t.id);l(f?E=>E.map(I=>I.toastId===t.id?{...I,height:u}:I):E=>[{toastId:t.id,height:u},...E])},[t.title,t.description]);let w=e.useCallback(()=>{Y(!0),C(k.current),l(o=>o.filter(i=>i.toastId!==t.id)),setTimeout(()=>{z(t)},Et)},[t,z,l,k]);return e.useEffect(()=>{if(t.promise&&g==="loading"||t.duration===1/0)return;let o;return D||s?(()=>{if(tt.current<W.current){let f=new Date().getTime()-W.current;X.current=X.current-f}tt.current=new Date().getTime()})():(()=>{W.current=new Date().getTime(),o=setTimeout(()=>{var f;(f=t.onAutoClose)==null||f.call(t,t),w()},X.current)})(),()=>clearTimeout(o)},[D,s,M,t,Z,w,t.promise,g]),e.useEffect(()=>{let o=n.current;if(o){let i=o.getBoundingClientRect().height;return r(i),l(u=>[{toastId:t.id,height:i},...u]),()=>l(u=>u.filter(f=>f.toastId!==t.id))}},[l,t.id]),e.useEffect(()=>{t.delete&&w()},[t.delete]),e.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:n,className:h+" "+it,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":B,"data-promise":!!t.promise,"data-removed":H,"data-visible":O,"data-y-position":et,"data-x-position":dt,"data-index":d,"data-front":R,"data-swiping":F,"data-type":g,"data-invert":ct,"data-swipe-out":T,"data-expanded":!!(D||M&&B),style:{"--index":d,"--toasts-before":d,"--z-index":U.length-d,"--offset":`${H?V:k.current}px`,"--initial-height":M?"auto":`${c}px`,...$,...t.style},onPointerDown:o=>{J||(C(k.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(L(!0),P.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var i,u,f;if(T)return;P.current=null;let o=Number(((i=n.current)==null?void 0:i.style.getPropertyValue("--swipe-amount").replace("px",""))||0);if(Math.abs(o)>=wt){C(k.current),(u=t.onDismiss)==null||u.call(t,t),w(),K(!0);return}(f=n.current)==null||f.style.setProperty("--swipe-amount","0px"),L(!1)},onPointerMove:o=>{var ot;if(!P.current)return;let i=o.clientY-P.current.y,u=o.clientX-P.current.x,E=(et==="top"?Math.min:Math.max)(0,i),I=o.pointerType==="touch"?10:2;E>I?(ot=n.current)==null||ot.style.setProperty("--swipe-amount",`${i}px`):Math.abs(u)>I&&(P.current=null)}},_&&!t.jsx?e.createElement("button",{"aria-label":"Close toast","data-disabled":J,"data-close-button":!0,onClick:J?void 0:()=>{var o;w(),(o=t.onDismiss)==null||o.call(t,t)}},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,g||t.icon||t.promise?e.createElement("div",{"data-icon":""},t.promise?e.createElement(rt,{visible:g==="loading"}):null,t.icon||st(g)):null,e.createElement("div",{"data-content":""},e.createElement("div",{"data-title":""},t.title),t.description?e.createElement("div",{"data-description":"",className:v+lt},t.description):null),t.cancel?e.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var o;w(),(o=t.cancel)!=null&&o.onClick&&t.cancel.onClick()}},t.cancel.label):null,t.action?e.createElement("button",{"data-button":"",onClick:o=>{var i;(i=t.action)==null||i.onClick(o),!o.defaultPrevented&&w()}},t.action.label):null))},Ft=p=>{var C;let{invert:a,position:t="bottom-right",hotkey:s=["altKey","KeyT"],expand:l,closeButton:y,className:m,offset:d,theme:U="light",richColors:D,duration:z,style:_,visibleToasts:$=yt,toastOptions:h}=p,[v,N]=e.useState([]),[A,M]=e.useState([]),[B,x]=e.useState(!1),[H,Y]=e.useState(!1),[F,L]=t.split("-"),T=e.useRef(null),K=s.join("+").replace(/Key/g,"").replace(/Digit/g,""),V=e.useCallback(c=>N(r=>r.filter(({id:n})=>n!==c.id)),[]);return e.useEffect(()=>b.subscribe(c=>{if(c.dismiss){N(r=>r.map(n=>n.id===c.id?{...n,delete:!0}:n));return}setTimeout(()=>{bt.flushSync(()=>{N(r=>{let n=r.findIndex(R=>R.id===c.id);return n!==-1?[...r.slice(0,n),{...r[n],...c},...r.slice(n+1)]:[c,...r]})})})}),[]),e.useEffect(()=>{v.length<=1&&x(!1)},[v]),e.useEffect(()=>{let c=r=>{var R,O;s.every(g=>r[g]||r.code===g)&&(x(!0),(R=T.current)==null||R.focus()),r.code==="Escape"&&(document.activeElement===T.current||(O=T.current)!=null&&O.contains(document.activeElement))&&x(!1)};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[s]),v.length?e.createElement("section",{"aria-label":`Notifications ${K}`,tabIndex:-1},e.createElement("ol",{tabIndex:-1,ref:T,className:m,"data-sonner-toaster":!0,"data-theme":U,"data-rich-colors":D,"data-y-position":F,"data-x-position":L,style:{"--front-toast-height":`${(C=A[0])==null?void 0:C.height}px`,"--offset":typeof d=="number"?`${d}px`:d||xt,"--width":`${Tt}px`,"--gap":`${nt}px`,..._},onMouseEnter:()=>x(!0),onMouseMove:()=>x(!0),onMouseLeave:()=>{H||x(!1)},onPointerDown:()=>{Y(!0)},onPointerUp:()=>Y(!1)},v.map((c,r)=>e.createElement(St,{key:c.id,index:r,toast:c,duration:z,className:h==null?void 0:h.className,descriptionClassName:h==null?void 0:h.descriptionClassName,invert:a,visibleToasts:$,closeButton:y,interacting:H,position:t,style:h==null?void 0:h.style,removeToast:V,toasts:v,heights:A,setHeights:M,expandByDefault:l,expanded:B})))):null};export{Ft as Toaster,gt as toast};
4
4
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.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 { HeightT, Position, PromiseData, ToastT, ToastToDismiss, ExternalToast, ToasterProps } 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_TRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\nconst isPromise = (toast: ToastT): toast is PromiseData & { id: number } => Boolean(toast.promise);\n\ninterface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n duration?: number;\n className?: string;\n descriptionClassName?: string;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton,\n style,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n expandByDefault,\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 [promiseStatus, setPromiseStatus] = React.useState<'loading' | 'success' | 'error' | null>(null);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const [promiseResult, setPromiseResult] = React.useState<React.ReactNode | string>(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 toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n\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 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 closeTimerRemainingTimeRef = React.useRef(duration);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartYRef = React.useRef<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 untill current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const invert = toast.invert || ToasterInvert;\n const disabled = promiseStatus === '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 const alreadyExists = heights.find((height) => height.toastId === toast.id);\n\n if (!alreadyExists) {\n setHeights((h) => [{ toastId: toast.id, height: newHeight }, ...h]);\n } else {\n setHeights((h) => h.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height)));\n }\n }, [toast.title, toast.description]);\n\n React.useEffect(() => {\n if (isPromise(toast)) {\n setPromiseStatus('loading');\n const promiseHandler = (promise: Promise<any>) => {\n promise\n .then((data) => {\n if (toast.success && typeof toast.success === 'function') {\n setPromiseResult(toast.success(data));\n }\n setPromiseStatus('success');\n })\n .catch((error) => {\n setPromiseStatus('error');\n if (toast.error && typeof toast.error === 'function') {\n setPromiseResult(toast.error(error));\n }\n });\n };\n\n if (toast.promise instanceof Promise) {\n promiseHandler(toast.promise);\n } else if (typeof toast.promise === 'function') {\n promiseHandler(toast.promise());\n }\n }\n }, [toast]);\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 && promiseStatus === 'loading') || toast.duration === Infinity) return;\n let timeoutId: NodeJS.Timeout;\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 closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, closeTimerRemainingTimeRef.current);\n };\n\n if (expanded || interacting) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, expandByDefault, toast, duration, deleteToast, toast.promise, promiseStatus]);\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 }, ...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 }, [toast.delete]);\n\n const promiseTitle = React.useMemo(() => {\n if (!isPromise(toast)) return null;\n\n switch (promiseStatus) {\n case 'loading':\n return toast.loading;\n case 'success':\n return typeof toast.success === 'function' ? promiseResult : toast.success;\n case 'error':\n return typeof toast.error === 'function' ? promiseResult : toast.error;\n default:\n return toast.loading;\n }\n }, [promiseStatus, promiseResult]);\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={className + ' ' + toastClassname}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx)}\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-type={promiseStatus !== 'loading' && promiseStatus ? promiseStatus : 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) return;\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 pointerStartYRef.current = event.clientY;\n }}\n onPointerUp={() => {\n if (swipeOut) return;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n\n // Remove only if treshold is met\n if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {\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 pointerStartYRef.current = null;\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartYRef.current) return;\n\n const yPosition = event.clientY - pointerStartYRef.current;\n\n const isAllowedToSwipe = y === 'top' ? yPosition < 0 : yPosition > 0;\n // We don't want to swipe to the left and vice versa depending on toast position\n if (!isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label=\"Close toast\"\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled\n ? undefined\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\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 ? <Loader visible={promiseStatus === 'loading'} /> : null}\n {toast.icon || getAsset(promiseStatus ?? toast.type)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\">\n <>{toast.title ?? promiseTitle}</>\n </div>\n {toast.description ? (\n <div data-description=\"\" className={descriptionClassName + toastDescriptionClassname}>\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick();\n }\n }}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n onClick={() => {\n deleteToast();\n toast.action?.onClick();\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\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 } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [y, x] = position.split('-');\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\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 // Upadte 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 // 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 if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={theme}\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 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={() => {\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts.map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n removeToast={removeToast}\n toasts={toasts}\n heights={heights}\n setHeights={setHeights}\n expandByDefault={expand}\n expanded={expanded}\n />\n ))}\n </ol>\n </section>\n );\n};\nexport { toast, Toaster, ToastT, 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(\"[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: 6px;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}[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:-3px;margin-right:4px}[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:-1px}[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:auto;border:none;cursor:pointer;outline:none;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:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;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:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[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%}[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(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--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%);--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=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}}\\n\")","'use client';\nimport React from 'react';\nimport { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n 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 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';\nimport { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss, ToastTypes } from './types';\n\nlet toastsCounter = 0;\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 this.toasts = [...this.toasts, data];\n };\n\n create = (data: ExternalToast & { message?: string | React.ReactNode; type?: ToastTypes }) => {\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\n if (alreadyExists) {\n this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id });\n return { ...toast, ...data };\n }\n\n return toast;\n });\n } else {\n this.publish({ title: message, ...rest, 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 promise = (promise: PromiseT, data?: PromiseData) => {\n return this.create({ ...data, promise });\n };\n\n // We can't provide the toast we just created as a prop as we didn't creat it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.publish({ jsx: jsx(id), id, ...data });\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.publish({\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 error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n});\n"],"mappings":"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","names":["React","ReactDOM","styleInject","css","insertAt","head","style","styleInject","React","getAsset","type","SuccessIcon","ErrorIcon","bars","Loader","visible","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","toast","promise","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_TRESHOLD","TIME_BEFORE_UNMOUNT","isPromise","toast","Toast","props","_a","ToasterInvert","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButton","style","className","descriptionClassName","durationFromToaster","position","expandByDefault","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","promiseStatus","setPromiseStatus","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","promiseResult","setPromiseResult","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartYRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","toastNode","originalHeight","newHeight","alreadyExists","h","promiseHandler","promise","data","error","deleteToast","timeoutId","elapsedTime","promiseTitle","event","_b","_c","swipeAmount","yPosition","Loader","getAsset","Toaster","hotkey","expand","theme","richColors","toastOptions","setToasts","setExpanded","setInteracting","listRef","hotkeyLabel","id","ToastState","t","ReactDOM","indexOfExistingToast","handleKeyDown","key"]}
1
+ {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.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 { HeightT, Position, ToastT, ToastToDismiss, ExternalToast, ToasterProps } 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_TRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\ninterface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n duration?: number;\n className?: string;\n descriptionClassName?: string;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton,\n style,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n expandByDefault,\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 toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n\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 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 closeTimerRemainingTimeRef = React.useRef(duration);\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 untill current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\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 const alreadyExists = heights.find((height) => height.toastId === toast.id);\n\n if (!alreadyExists) {\n setHeights((h) => [{ toastId: toast.id, height: newHeight }, ...h]);\n } else {\n setHeights((h) => h.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height)));\n }\n }, [toast.title, toast.description]);\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) return;\n let timeoutId: NodeJS.Timeout;\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 closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, closeTimerRemainingTimeRef.current);\n };\n\n if (expanded || interacting) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, expandByDefault, toast, duration, deleteToast, toast.promise, toastType]);\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 }, ...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 }, [toast.delete]);\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={className + ' ' + toastClassname}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx)}\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-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) return;\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) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n\n // Remove only if treshold is met\n if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {\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) 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 = 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=\"Close toast\"\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled\n ? undefined\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\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 ? <Loader visible={toastType === 'loading'} /> : null}\n {toast.icon || getAsset(toastType)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\">{toast.title}</div>\n {toast.description ? (\n <div data-description=\"\" className={descriptionClassName + toastDescriptionClassname}>\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick();\n }\n }}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n onClick={(event) => {\n toast.action?.onClick(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\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 } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [y, x] = position.split('-');\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\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 // Upadte 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 // 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 if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={theme}\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 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={() => {\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts.map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n removeToast={removeToast}\n toasts={toasts}\n heights={heights}\n setHeights={setHeights}\n expandByDefault={expand}\n expanded={expanded}\n />\n ))}\n </ol>\n </section>\n );\n};\nexport { toast, Toaster, ToastT, 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(\"[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: 6px;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}[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:-3px;margin-right:4px}[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:-1px}[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:auto;border:none;cursor:pointer;outline:none;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:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;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:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[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%}[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(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--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%);--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=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}}\\n\")","'use client';\nimport React from 'react';\nimport { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n 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 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';\nimport { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss, ToastTypes } from './types';\n\nlet toastsCounter = 0;\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 = (data: ExternalToast & { message?: string | React.ReactNode; type?: ToastTypes }) => {\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\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 { ...toast, ...data, id, title: message };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, 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 promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n const id = this.create({ ...data, promise, type: 'loading', message: data.loading });\n const p = promise instanceof Promise ? promise : promise();\n p.then((promiseData) => {\n const message = typeof data.success === 'function' ? data.success(promiseData) : data.success;\n this.create({ id, type: 'success', message });\n }).catch((error) => {\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n this.create({ id, type: 'error', message });\n });\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't creat it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.publish({ jsx: jsx(id), id, ...data });\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 error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n});\n"],"mappings":"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","names":["React","ReactDOM","styleInject","css","insertAt","head","style","styleInject","React","getAsset","type","SuccessIcon","ErrorIcon","bars","Loader","visible","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","toast","promise","promiseData","error","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_TRESHOLD","TIME_BEFORE_UNMOUNT","Toast","props","ToasterInvert","toast","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButton","style","className","descriptionClassName","durationFromToaster","position","expandByDefault","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","toastNode","originalHeight","newHeight","alreadyExists","h","deleteToast","timeoutId","elapsedTime","_a","event","_b","_c","swipeAmount","yPosition","xPosition","clampedY","swipeStartThreshold","Loader","getAsset","Toaster","hotkey","expand","theme","richColors","toastOptions","setToasts","setExpanded","setInteracting","listRef","hotkeyLabel","id","ToastState","t","ReactDOM","indexOfExistingToast","handleKeyDown","key"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonner",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "An opinionated toast component for React.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",