sonner 0.7.0 → 0.7.2

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.cjs ADDED
@@ -0,0 +1,4 @@
1
+ "use client"
2
+ "use client";var vt=Object.create;var K=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var Tt=Object.getOwnPropertyNames;var wt=Object.getPrototypeOf,Et=Object.prototype.hasOwnProperty;var St=(s,e)=>{for(var t in e)K(s,t,{get:e[t],enumerable:!0})},ct=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Tt(e))!Et.call(s,n)&&n!==t&&K(s,n,{get:()=>e[n],enumerable:!(r=xt(e,n))||r.enumerable});return s};var at=(s,e,t)=>(t=s!=null?vt(wt(s)):{},ct(e||!s||!s.__esModule?K(t,"default",{value:s,enumerable:!0}):t,s)),Nt=s=>ct(K({},"__esModule",{value:!0}),s);var Ot={};St(Ot,{Toaster:()=>Yt,toast:()=>pt});module.exports=Nt(Ot);var a=at(require("react"),1),gt=at(require("react-dom"),1);function ot(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))}ot(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 C=at(require("react"),1),ut=s=>{switch(s){case"success":return kt;case"error":return Ct;default:return null}},Rt=Array(12).fill(0),mt=({visible:s})=>C.default.createElement("div",{className:"sonner-loading-wrapper","data-visible":s},C.default.createElement("div",{className:"sonner-spinner"},Rt.map((e,t)=>C.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),kt=C.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},C.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 Ct=C.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},C.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 st=0,rt=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)});this.publish=e=>{this.subscribers.forEach(t=>t(e))};this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]};this.create=e=>{var p;let{message:t,...r}=e,n=typeof(e==null?void 0:e.id)=="number"||((p=e.id)==null?void 0:p.length)>0?e.id:st++;return this.toasts.find(d=>d.id===n)?this.toasts=this.toasts.map(d=>d.id===n?(this.publish({...d,...e,id:n,title:t}),{...d,...e,id:n,title:t}):d):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.loading=(e,t)=>this.create({...t,type:"loading",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(T=>{let p=typeof t.success=="function"?t.success(T):t.success;this.create({id:r,type:"success",message:p})}).catch(T=>{let p=typeof t.error=="function"?t.error(T):t.error;this.create({id:r,type:"error",message:p})}).finally(t.finally),r};this.custom=(e,t)=>{let r=(t==null?void 0:t.id)||st++;this.publish({jsx:e(r),id:r,...t})};this.subscribers=[],this.toasts=[]}},v=new rt,Pt=(s,e)=>{let t=(e==null?void 0:e.id)||st++;return v.addToast({title:s,...e,id:t}),t},Dt=Pt,pt=Object.assign(Dt,{success:v.success,error:v.error,custom:v.custom,message:v.message,promise:v.promise,dismiss:v.dismiss,loading:v.loading});var Mt=3,It="32px",Bt=4e3,Ht=356,ht=14,At=20,zt=200,Lt=s=>{let{invert:e,toast:t,interacting:r,setHeights:n,visibleToasts:T,heights:p,index:d,toasts:w,expanded:A,removeToast:O,closeButton:V,style:W,className:g="",descriptionClassName:j="",duration:E,position:z,expandByDefault:D}=s,[M,X]=a.default.useState(!1),[x,F]=a.default.useState(!1),[U,_]=a.default.useState(!1),[S,J]=a.default.useState(!1),[G,b]=a.default.useState(0),[q,y]=a.default.useState(0),N=a.default.useRef(null),R=a.default.useRef(null),$=d===0,l=d+1<=T,i=t.type,f=t.className||"",I=t.descriptionClassName||"",P=a.default.useMemo(()=>p.findIndex(o=>o.toastId===t.id)||0,[p,t.id]),L=a.default.useMemo(()=>t.duration||E||Bt,[t.duration,E]),Q=a.default.useRef(0),B=a.default.useRef(0),Z=a.default.useRef(L),nt=a.default.useRef(0),H=a.default.useRef(null),[it,bt]=z.split("-"),lt=a.default.useMemo(()=>p.reduce((o,c,u)=>u>=P?o:o+c.height,0),[p,P]),yt=t.invert||e,tt=i==="loading";B.current=a.default.useMemo(()=>P*ht+lt,[P,lt]),a.default.useEffect(()=>{X(!0)},[]),a.default.useLayoutEffect(()=>{if(!M)return;let o=R.current,c=o.style.height;o.style.height="auto";let u=o.getBoundingClientRect().height;o.style.height=c,y(u),n(m=>m.find(h=>h.toastId===t.id)?m.map(h=>h.toastId===t.id?{...h,height:u}:h):[{toastId:t.id,height:u},...m])},[M,t.title,t.description,n,t.id]);let k=a.default.useCallback(()=>{F(!0),b(B.current),n(o=>o.filter(c=>c.toastId!==t.id)),setTimeout(()=>{O(t)},zt)},[t,O,n,B]);return a.default.useEffect(()=>{if(t.promise&&i==="loading"||t.duration===1/0)return;let o;return A||r?(()=>{if(nt.current<Q.current){let m=new Date().getTime()-Q.current;Z.current=Z.current-m}nt.current=new Date().getTime()})():(()=>{Q.current=new Date().getTime(),o=setTimeout(()=>{var m;(m=t.onAutoClose)==null||m.call(t,t),k()},Z.current)})(),()=>clearTimeout(o)},[A,r,D,t,L,k,t.promise,i]),a.default.useEffect(()=>{let o=R.current;if(o){let c=o.getBoundingClientRect().height;return y(c),n(u=>[{toastId:t.id,height:c},...u]),()=>n(u=>u.filter(m=>m.toastId!==t.id))}},[n,t.id]),a.default.useEffect(()=>{t.delete&&k()},[k,t.delete]),a.default.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:R,className:g+" "+f,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":M,"data-promise":!!t.promise,"data-removed":x,"data-visible":l,"data-y-position":it,"data-x-position":bt,"data-index":d,"data-front":$,"data-swiping":U,"data-type":i,"data-invert":yt,"data-swipe-out":S,"data-expanded":!!(A||D&&M),style:{"--index":d,"--toasts-before":d,"--z-index":w.length-d,"--offset":`${x?G:B.current}px`,"--initial-height":D?"auto":`${q}px`,...W,...t.style},onPointerDown:o=>{tt||(N.current=new Date,b(B.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(_(!0),H.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var m,Y,h,et;if(S)return;H.current=null;let o=Number(((m=R.current)==null?void 0:m.style.getPropertyValue("--swipe-amount").replace("px",""))||0),c=new Date().getTime()-((Y=N.current)==null?void 0:Y.getTime()),u=Math.abs(o)/c;if(Math.abs(o)>=At||u>.11){b(B.current),(h=t.onDismiss)==null||h.call(t,t),k(),J(!0);return}(et=R.current)==null||et.style.setProperty("--swipe-amount","0px"),_(!1)},onPointerMove:o=>{var dt;if(!H.current)return;let c=o.clientY-H.current.y,u=o.clientX-H.current.x,Y=(it==="top"?Math.min:Math.max)(0,c),h=o.pointerType==="touch"?10:2;Math.abs(Y)>h?(dt=R.current)==null||dt.style.setProperty("--swipe-amount",`${c}px`):Math.abs(u)>h&&(H.current=null)}},V&&!t.jsx?a.default.createElement("button",{"aria-label":"Close toast","data-disabled":tt,"data-close-button":!0,onClick:tt?void 0:()=>{var o;k(),(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,i||t.icon||t.promise?a.default.createElement("div",{"data-icon":""},t.promise||t.type==="loading"?a.default.createElement(mt,{visible:i==="loading"}):null,t.icon||ut(i)):null,a.default.createElement("div",{"data-content":""},a.default.createElement("div",{"data-title":""},t.title),t.description?a.default.createElement("div",{"data-description":"",className:j+I},t.description):null),t.cancel?a.default.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var o;k(),(o=t.cancel)!=null&&o.onClick&&t.cancel.onClick()}},t.cancel.label):null,t.action?a.default.createElement("button",{"data-button":"",onClick:o=>{var c;(c=t.action)==null||c.onClick(o),!o.defaultPrevented&&k()}},t.action.label):null))};function ft(){if(typeof window=="undefined")return"ltr";let s=document.documentElement.getAttribute("dir");return s==="auto"||!s?window.getComputedStyle(document.documentElement).direction:s}var Yt=s=>{var $;let{invert:e,position:t="bottom-right",hotkey:r=["altKey","KeyT"],expand:n,closeButton:T,className:p,offset:d,theme:w="light",richColors:A,duration:O,style:V,visibleToasts:W=Mt,toastOptions:g,dir:j=ft()}=s,[E,z]=a.default.useState([]),[D,M]=a.default.useState([]),[X,x]=a.default.useState(!1),[F,U]=a.default.useState(!1),[_,S]=a.default.useState(w!=="system"?w:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),[J,G]=t.split("-"),b=a.default.useRef(null),q=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),y=a.default.useRef(null),N=a.default.useRef(!1),R=a.default.useCallback(l=>z(i=>i.filter(({id:f})=>f!==l.id)),[]);return a.default.useEffect(()=>v.subscribe(l=>{if(l.dismiss){z(i=>i.map(f=>f.id===l.id?{...f,delete:!0}:f));return}setTimeout(()=>{gt.default.flushSync(()=>{z(i=>{let f=i.findIndex(I=>I.id===l.id);return f!==-1?[...i.slice(0,f),{...i[f],...l},...i.slice(f+1)]:[l,...i]})})})}),[]),a.default.useEffect(()=>{if(w!=="system"){S(w);return}w==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?S("dark"):S("light")),typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:l})=>{S(l?"dark":"light")})},[w]),a.default.useEffect(()=>{E.length<=1&&x(!1)},[E]),a.default.useEffect(()=>{let l=i=>{var I,P;r.every(L=>i[L]||i.code===L)&&(x(!0),(I=b.current)==null||I.focus()),i.code==="Escape"&&(document.activeElement===b.current||(P=b.current)!=null&&P.contains(document.activeElement))&&x(!1)};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[r]),a.default.useEffect(()=>{if(b.current)return()=>{y.current&&(y.current.focus({preventScroll:!0}),y.current=null,N.current=!1)}},[b.current]),E.length?a.default.createElement("section",{"aria-label":`Notifications ${q}`,tabIndex:-1},a.default.createElement("ol",{dir:j==="auto"?ft():j,tabIndex:-1,ref:b,className:p,"data-sonner-toaster":!0,"data-theme":_,"data-rich-colors":A,"data-y-position":J,"data-x-position":G,style:{"--front-toast-height":`${($=D[0])==null?void 0:$.height}px`,"--offset":typeof d=="number"?`${d}px`:d||It,"--width":`${Ht}px`,"--gap":`${ht}px`,...V},onBlur:l=>{N.current&&!l.currentTarget.contains(l.relatedTarget)&&(N.current=!1,y.current&&(y.current.focus({preventScroll:!0}),y.current=null))},onFocus:l=>{N.current||(N.current=!0,y.current=l.relatedTarget)},onMouseEnter:()=>x(!0),onMouseMove:()=>x(!0),onMouseLeave:()=>{F||x(!1)},onPointerDown:()=>{U(!0)},onPointerUp:()=>U(!1)},E.map((l,i)=>a.default.createElement(Lt,{key:l.id,index:i,toast:l,duration:O,className:g==null?void 0:g.className,descriptionClassName:g==null?void 0:g.descriptionClassName,invert:e,visibleToasts:W,closeButton:T,interacting:F,position:t,style:g==null?void 0:g.style,removeToast:R,toasts:E,heights:D,setHeights:M,expandByDefault:n,expanded:X})))):null};0&&(module.exports={Toaster,toast});
4
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +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, 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_THRESHOLD = 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 dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const 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 until 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 setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity) 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 }, [deleteToast, 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 dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const xPosition = event.clientX - pointerStartRef.current.x;\n\n const clamp = y === 'top' ? Math.min : Math.max;\n const clampedY = clamp(0, yPosition);\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n } else if (Math.abs(xPosition) > swipeStartThreshold) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label=\"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 || toast.type === 'loading' ? <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\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n } = 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 [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n const [y, x] = position.split('-');\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n React.useEffect(() => {\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n\n if (typeof window === 'undefined') return;\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={() => {\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(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst 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 loading = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n 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 })\n .catch((error) => {\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n this.create({ id, type: 'error', message });\n })\n .finally(data.finally);\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't create 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 loading: ToastState.loading,\n});\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","__toCommonJS","import_react","import_react_dom","styleInject","css","insertAt","head","style","styleInject","import_react","getAsset","type","SuccessIcon","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_THRESHOLD","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","dragStartTime","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","deleteToast","h","timeoutId","elapsedTime","_a","event","_b","_c","_d","swipeAmount","timeTaken","velocity","yPosition","xPosition","clampedY","swipeStartThreshold","Loader","getAsset","getDocumentDirection","dirAttribute","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","setToasts","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","id","ToastState","t","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
package/dist/index.d.ts CHANGED
@@ -15,6 +15,7 @@ interface ToastT {
15
15
  icon?: React.ReactNode;
16
16
  jsx?: React.ReactNode;
17
17
  invert?: boolean;
18
+ dismissible?: boolean;
18
19
  description?: React.ReactNode;
19
20
  duration?: number;
20
21
  delete?: boolean;
@@ -56,7 +57,7 @@ interface ToasterProps {
56
57
  offset?: string | number;
57
58
  dir?: 'rtl' | 'ltr' | 'auto';
58
59
  }
59
- type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title'> & {
60
+ type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title' | 'jsx' | 'delete' | 'promise'> & {
60
61
  id?: number | string;
61
62
  };
62
63
 
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client"
2
- "use client";var bt=Object.create;var _=Object.defineProperty;var yt=Object.getOwnPropertyDescriptor;var xt=Object.getOwnPropertyNames;var vt=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var wt=(s,e)=>{for(var t in e)_(s,t,{get:e[t],enumerable:!0})},lt=(s,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of xt(e))!Tt.call(s,i)&&i!==t&&_(s,i,{get:()=>e[i],enumerable:!(r=yt(e,i))||r.enumerable});return s};var Z=(s,e,t)=>(t=s!=null?bt(vt(s)):{},lt(e||!s||!s.__esModule?_(t,"default",{value:s,enumerable:!0}):t,s)),Et=s=>lt(_({},"__esModule",{value:!0}),s);var Lt={};wt(Lt,{Toaster:()=>zt,toast:()=>ut});module.exports=Et(Lt);var a=Z(require("react")),pt=Z(require("react-dom"));function tt(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))}tt(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 R=Z(require("react")),dt=s=>{switch(s){case"success":return Nt;case"error":return Rt;default:return null}},St=Array(12).fill(0),ct=({visible:s})=>R.default.createElement("div",{className:"sonner-loading-wrapper","data-visible":s},R.default.createElement("div",{className:"sonner-spinner"},St.map((e,t)=>R.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),Nt=R.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},R.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 Rt=R.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},R.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 et=0,at=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)});this.publish=e=>{this.subscribers.forEach(t=>t(e))};this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]};this.create=e=>{var p;let{message:t,...r}=e,i=typeof(e==null?void 0:e.id)=="number"||((p=e.id)==null?void 0:p.length)>0?e.id:et++;return this.toasts.find(d=>d.id===i)?this.toasts=this.toasts.map(d=>d.id===i?(this.publish({...d,...e,id:i,title:t}),{...d,...e,id:i,title:t}):d):this.addToast({title:t,...r,id:i}),i};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.loading=(e,t)=>this.create({...t,type:"loading",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(w=>{let p=typeof t.success=="function"?t.success(w):t.success;this.create({id:r,type:"success",message:p})}).catch(w=>{let p=typeof t.error=="function"?t.error(w):t.error;this.create({id:r,type:"error",message:p})}).finally(t.finally),r};this.custom=(e,t)=>{let r=(t==null?void 0:t.id)||et++;this.publish({jsx:e(r),id:r,...t})};this.subscribers=[],this.toasts=[]}},x=new at,kt=(s,e)=>{let t=(e==null?void 0:e.id)||et++;return x.addToast({title:s,...e,id:t}),t},Ct=kt,ut=Object.assign(Ct,{success:x.success,error:x.error,custom:x.custom,message:x.message,promise:x.promise,dismiss:x.dismiss,loading:x.loading});var Pt=3,Dt="32px",It=4e3,Mt=356,ft=14,Bt=20,Ht=200,At=s=>{let{invert:e,toast:t,interacting:r,setHeights:i,visibleToasts:w,heights:p,index:d,toasts:k,expanded:H,removeToast:L,closeButton:$,style:K,className:h="",descriptionClassName:Y="",duration:E,position:A,expandByDefault:C}=s,[P,V]=a.default.useState(!1),[v,O]=a.default.useState(!1),[j,F]=a.default.useState(!1),[D,W]=a.default.useState(!1),[X,b]=a.default.useState(0),[J,y]=a.default.useState(0),g=a.default.useRef(null),G=d===0,U=d+1<=w,n=t.type,c=t.className||"",f=t.descriptionClassName||"",T=a.default.useMemo(()=>p.findIndex(o=>o.toastId===t.id)||0,[p,t.id]),z=a.default.useMemo(()=>t.duration||E||It,[t.duration,E]),I=a.default.useRef(0),M=a.default.useRef(0),q=a.default.useRef(z),ot=a.default.useRef(0),B=a.default.useRef(null),[st,gt]=A.split("-"),rt=a.default.useMemo(()=>p.reduce((o,l,u)=>u>=T?o:o+l.height,0),[p,T]),ht=t.invert||e,Q=n==="loading";M.current=a.default.useMemo(()=>T*ft+rt,[T,rt]),a.default.useEffect(()=>{V(!0)},[]),a.default.useLayoutEffect(()=>{if(!P)return;let o=g.current,l=o.style.height;o.style.height="auto";let u=o.getBoundingClientRect().height;o.style.height=l,y(u),i(m=>m.find(N=>N.toastId===t.id)?m.map(N=>N.toastId===t.id?{...N,height:u}:N):[{toastId:t.id,height:u},...m])},[P,t.title,t.description,i,t.id]);let S=a.default.useCallback(()=>{O(!0),b(M.current),i(o=>o.filter(l=>l.toastId!==t.id)),setTimeout(()=>{L(t)},Ht)},[t,L,i,M]);return a.default.useEffect(()=>{if(t.promise&&n==="loading"||t.duration===1/0)return;let o;return H||r?(()=>{if(ot.current<I.current){let m=new Date().getTime()-I.current;q.current=q.current-m}ot.current=new Date().getTime()})():(()=>{I.current=new Date().getTime(),o=setTimeout(()=>{var m;(m=t.onAutoClose)==null||m.call(t,t),S()},q.current)})(),()=>clearTimeout(o)},[H,r,C,t,z,S,t.promise,n]),a.default.useEffect(()=>{let o=g.current;if(o){let l=o.getBoundingClientRect().height;return y(l),i(u=>[{toastId:t.id,height:l},...u]),()=>i(u=>u.filter(m=>m.toastId!==t.id))}},[i,t.id]),a.default.useEffect(()=>{t.delete&&S()},[S,t.delete]),a.default.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:g,className:h+" "+c,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":P,"data-promise":!!t.promise,"data-removed":v,"data-visible":U,"data-y-position":st,"data-x-position":gt,"data-index":d,"data-front":G,"data-swiping":j,"data-type":n,"data-invert":ht,"data-swipe-out":D,"data-expanded":!!(H||C&&P),style:{"--index":d,"--toasts-before":d,"--z-index":k.length-d,"--offset":`${v?X:M.current}px`,"--initial-height":C?"auto":`${J}px`,...K,...t.style},onPointerDown:o=>{Q||(b(M.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(F(!0),B.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var l,u,m;if(D)return;B.current=null;let o=Number(((l=g.current)==null?void 0:l.style.getPropertyValue("--swipe-amount").replace("px",""))||0);if(Math.abs(o)>=Bt){b(M.current),(u=t.onDismiss)==null||u.call(t,t),S(),W(!0);return}(m=g.current)==null||m.style.setProperty("--swipe-amount","0px"),F(!1)},onPointerMove:o=>{var it;if(!B.current)return;let l=o.clientY-B.current.y,u=o.clientX-B.current.x,nt=(st==="top"?Math.min:Math.max)(0,l),N=o.pointerType==="touch"?10:2;Math.abs(nt)>N?(it=g.current)==null||it.style.setProperty("--swipe-amount",`${l}px`):Math.abs(u)>N&&(B.current=null)}},$&&!t.jsx?a.default.createElement("button",{"aria-label":"Close toast","data-disabled":Q,"data-close-button":!0,onClick:Q?void 0:()=>{var o;S(),(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,n||t.icon||t.promise?a.default.createElement("div",{"data-icon":""},t.promise||t.type==="loading"?a.default.createElement(ct,{visible:n==="loading"}):null,t.icon||dt(n)):null,a.default.createElement("div",{"data-content":""},a.default.createElement("div",{"data-title":""},t.title),t.description?a.default.createElement("div",{"data-description":"",className:Y+f},t.description):null),t.cancel?a.default.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?a.default.createElement("button",{"data-button":"",onClick:o=>{var l;(l=t.action)==null||l.onClick(o),!o.defaultPrevented&&S()}},t.action.label):null))};function mt(){if(typeof window=="undefined")return"ltr";let s=document.documentElement.getAttribute("dir");return s==="auto"||!s?window.getComputedStyle(document.documentElement).direction:s}var zt=s=>{var U;let{invert:e,position:t="bottom-right",hotkey:r=["altKey","KeyT"],expand:i,closeButton:w,className:p,offset:d,theme:k="light",richColors:H,duration:L,style:$,visibleToasts:K=Pt,toastOptions:h,dir:Y=mt()}=s,[E,A]=a.default.useState([]),[C,P]=a.default.useState([]),[V,v]=a.default.useState(!1),[O,j]=a.default.useState(!1),[F,D]=a.default.useState(k!=="system"?k:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),[W,X]=t.split("-"),b=a.default.useRef(null),J=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),y=a.default.useRef(null),g=a.default.useRef(!1),G=a.default.useCallback(n=>A(c=>c.filter(({id:f})=>f!==n.id)),[]);return a.default.useEffect(()=>x.subscribe(n=>{if(n.dismiss){A(c=>c.map(f=>f.id===n.id?{...f,delete:!0}:f));return}setTimeout(()=>{pt.default.flushSync(()=>{A(c=>{let f=c.findIndex(T=>T.id===n.id);return f!==-1?[...c.slice(0,f),{...c[f],...n},...c.slice(f+1)]:[n,...c]})})})}),[]),a.default.useEffect(()=>{if(k!=="system"){D(k);return}typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:n})=>{D(n?"dark":"light")})},[k]),a.default.useEffect(()=>{E.length<=1&&v(!1)},[E]),a.default.useEffect(()=>{let n=c=>{var T,z;r.every(I=>c[I]||c.code===I)&&(v(!0),(T=b.current)==null||T.focus()),c.code==="Escape"&&(document.activeElement===b.current||(z=b.current)!=null&&z.contains(document.activeElement))&&v(!1)};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[r]),a.default.useEffect(()=>{if(b.current)return()=>{y.current&&(y.current.focus({preventScroll:!0}),y.current=null,g.current=!1)}},[b.current]),E.length?a.default.createElement("section",{"aria-label":`Notifications ${J}`,tabIndex:-1},a.default.createElement("ol",{dir:Y==="auto"?mt():Y,tabIndex:-1,ref:b,className:p,"data-sonner-toaster":!0,"data-theme":F,"data-rich-colors":H,"data-y-position":W,"data-x-position":X,style:{"--front-toast-height":`${(U=C[0])==null?void 0:U.height}px`,"--offset":typeof d=="number"?`${d}px`:d||Dt,"--width":`${Mt}px`,"--gap":`${ft}px`,...$},onBlur:n=>{g.current&&!n.currentTarget.contains(n.relatedTarget)&&(g.current=!1,y.current&&(y.current.focus({preventScroll:!0}),y.current=null))},onFocus:n=>{g.current||(g.current=!0,y.current=n.relatedTarget)},onMouseEnter:()=>v(!0),onMouseMove:()=>v(!0),onMouseLeave:()=>{O||v(!1)},onPointerDown:()=>{j(!0)},onPointerUp:()=>j(!1)},E.map((n,c)=>a.default.createElement(At,{key:n.id,index:c,toast:n,duration:L,className:h==null?void 0:h.className,descriptionClassName:h==null?void 0:h.descriptionClassName,invert:e,visibleToasts:K,closeButton:w,interacting:O,position:t,style:h==null?void 0:h.style,removeToast:G,toasts:E,heights:C,setHeights:P,expandByDefault:i,expanded:V})))):null};0&&(module.exports={Toaster,toast});
2
+ "use client";var vt=Object.create;var V=Object.defineProperty;var Tt=Object.getOwnPropertyDescriptor;var wt=Object.getOwnPropertyNames;var Et=Object.getPrototypeOf,St=Object.prototype.hasOwnProperty;var Nt=(o,e)=>{for(var t in e)V(o,t,{get:e[t],enumerable:!0})},ut=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let l of wt(e))!St.call(o,l)&&l!==t&&V(o,l,{get:()=>e[l],enumerable:!(r=Tt(e,l))||r.enumerable});return o};var at=(o,e,t)=>(t=o!=null?vt(Et(o)):{},ut(e||!o||!o.__esModule?V(t,"default",{value:o,enumerable:!0}):t,o)),Rt=o=>ut(V({},"__esModule",{value:!0}),o);var jt={};Nt(jt,{Toaster:()=>Ot,toast:()=>pt});module.exports=Rt(jt);var a=at(require("react")),ht=at(require("react-dom"));function st(o,{insertAt:e}={}){if(!o||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=o:r.appendChild(document.createTextNode(o))}st(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 C=at(require("react")),mt=o=>{switch(o){case"success":return Ct;case"error":return Pt;default:return null}},kt=Array(12).fill(0),ft=({visible:o})=>C.default.createElement("div",{className:"sonner-loading-wrapper","data-visible":o},C.default.createElement("div",{className:"sonner-spinner"},kt.map((e,t)=>C.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),Ct=C.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},C.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 Pt=C.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},C.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 ot=0,rt=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 g;let{message:t,...r}=e,l=typeof(e==null?void 0:e.id)=="number"||((g=e.id)==null?void 0:g.length)>0?e.id:ot++,T=this.toasts.find(u=>u.id===l),p=e.dismissible===void 0?!0:e.dismissible;return T?this.toasts=this.toasts.map(u=>u.id===l?(this.publish({...u,...e,id:l,title:t}),{...u,...e,id:l,dismissible:p,title:t}):u):this.addToast({title:t,...r,dismissible:p,id:l}),l};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.loading=(e,t)=>this.create({...t,type:"loading",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(T=>{let p=typeof t.success=="function"?t.success(T):t.success;this.create({id:r,type:"success",message:p})}).catch(T=>{let p=typeof t.error=="function"?t.error(T):t.error;this.create({id:r,type:"error",message:p})}).finally(t.finally),r};this.custom=(e,t)=>{let r=(t==null?void 0:t.id)||ot++;this.publish({jsx:e(r),id:r,...t})};this.subscribers=[],this.toasts=[]}},v=new rt,Dt=(o,e)=>{let t=(e==null?void 0:e.id)||ot++;return v.addToast({title:o,...e,id:t}),t},Mt=Dt,pt=Object.assign(Mt,{success:v.success,error:v.error,custom:v.custom,message:v.message,promise:v.promise,dismiss:v.dismiss,loading:v.loading});var It=3,Ht="32px",Bt=4e3,At=356,bt=14,Lt=20,zt=200,Yt=o=>{let{invert:e,toast:t,interacting:r,setHeights:l,visibleToasts:T,heights:p,index:g,toasts:u,expanded:A,removeToast:O,closeButton:W,style:X,className:h="",descriptionClassName:j="",duration:E,position:L,expandByDefault:D}=o,[M,F]=a.default.useState(!1),[w,z]=a.default.useState(!1),[U,_]=a.default.useState(!1),[S,J]=a.default.useState(!1),[G,y]=a.default.useState(0),[q,x]=a.default.useState(0),N=a.default.useRef(null),R=a.default.useRef(null),$=g===0,n=g+1<=T,i=t.type,d=t.dismissible!==!1,I=t.className||"",K=t.descriptionClassName||"",P=a.default.useMemo(()=>p.findIndex(s=>s.toastId===t.id)||0,[p,t.id]),nt=a.default.useMemo(()=>t.duration||E||Bt,[t.duration,E]),Q=a.default.useRef(0),H=a.default.useRef(0),Z=a.default.useRef(nt),it=a.default.useRef(0),B=a.default.useRef(null),[lt,yt]=L.split("-"),dt=a.default.useMemo(()=>p.reduce((s,c,m)=>m>=P?s:s+c.height,0),[p,P]),xt=t.invert||e,tt=i==="loading";H.current=a.default.useMemo(()=>P*bt+dt,[P,dt]),a.default.useEffect(()=>{F(!0)},[]),a.default.useLayoutEffect(()=>{if(!M)return;let s=R.current,c=s.style.height;s.style.height="auto";let m=s.getBoundingClientRect().height;s.style.height=c,x(m),l(f=>f.find(b=>b.toastId===t.id)?f.map(b=>b.toastId===t.id?{...b,height:m}:b):[{toastId:t.id,height:m},...f])},[M,t.title,t.description,l,t.id]);let k=a.default.useCallback(()=>{z(!0),y(H.current),l(s=>s.filter(c=>c.toastId!==t.id)),setTimeout(()=>{O(t)},zt)},[t,O,l,H]);return a.default.useEffect(()=>{if(t.promise&&i==="loading"||t.duration===1/0)return;let s;return A||r?(()=>{if(it.current<Q.current){let f=new Date().getTime()-Q.current;Z.current=Z.current-f}it.current=new Date().getTime()})():(()=>{Q.current=new Date().getTime(),s=setTimeout(()=>{var f;(f=t.onAutoClose)==null||f.call(t,t),k()},Z.current)})(),()=>clearTimeout(s)},[A,r,D,t,nt,k,t.promise,i]),a.default.useEffect(()=>{let s=R.current;if(s){let c=s.getBoundingClientRect().height;return x(c),l(m=>[{toastId:t.id,height:c},...m]),()=>l(m=>m.filter(f=>f.toastId!==t.id))}},[l,t.id]),a.default.useEffect(()=>{t.delete&&k()},[k,t.delete]),a.default.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:R,className:h+" "+I,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":M,"data-promise":!!t.promise,"data-removed":w,"data-visible":n,"data-y-position":lt,"data-x-position":yt,"data-index":g,"data-front":$,"data-swiping":U,"data-dismissible":d,"data-type":i,"data-invert":xt,"data-swipe-out":S,"data-expanded":!!(A||D&&M),style:{"--index":g,"--toasts-before":g,"--z-index":u.length-g,"--offset":`${w?G:H.current}px`,"--initial-height":D?"auto":`${q}px`,...X,...t.style},onPointerDown:s=>{tt||!d||(N.current=new Date,y(H.current),s.target.setPointerCapture(s.pointerId),s.target.tagName!=="BUTTON"&&(_(!0),B.current={x:s.clientX,y:s.clientY}))},onPointerUp:()=>{var f,Y,b,et;if(S||!d)return;B.current=null;let s=Number(((f=R.current)==null?void 0:f.style.getPropertyValue("--swipe-amount").replace("px",""))||0),c=new Date().getTime()-((Y=N.current)==null?void 0:Y.getTime()),m=Math.abs(s)/c;if(Math.abs(s)>=Lt||m>.11){y(H.current),(b=t.onDismiss)==null||b.call(t,t),k(),J(!0);return}(et=R.current)==null||et.style.setProperty("--swipe-amount","0px"),_(!1)},onPointerMove:s=>{var ct;if(!B.current||!d)return;let c=s.clientY-B.current.y,m=s.clientX-B.current.x,Y=(lt==="top"?Math.min:Math.max)(0,c),b=s.pointerType==="touch"?10:2;Math.abs(Y)>b?(ct=R.current)==null||ct.style.setProperty("--swipe-amount",`${c}px`):Math.abs(m)>b&&(B.current=null)}},W&&!t.jsx?a.default.createElement("button",{"aria-label":"Close toast","data-disabled":tt,"data-close-button":!0,onClick:tt||!d?void 0:()=>{var s;k(),(s=t.onDismiss)==null||s.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,i||t.icon||t.promise?a.default.createElement("div",{"data-icon":""},t.promise||t.type==="loading"?a.default.createElement(ft,{visible:i==="loading"}):null,t.icon||mt(i)):null,a.default.createElement("div",{"data-content":""},a.default.createElement("div",{"data-title":""},t.title),t.description?a.default.createElement("div",{"data-description":"",className:j+K},t.description):null),t.cancel?a.default.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var s;d&&(k(),(s=t.cancel)!=null&&s.onClick&&t.cancel.onClick())}},t.cancel.label):null,t.action?a.default.createElement("button",{"data-button":"",onClick:s=>{var c;(c=t.action)==null||c.onClick(s),!s.defaultPrevented&&k()}},t.action.label):null))};function gt(){if(typeof window=="undefined")return"ltr";let o=document.documentElement.getAttribute("dir");return o==="auto"||!o?window.getComputedStyle(document.documentElement).direction:o}var Ot=o=>{var $;let{invert:e,position:t="bottom-right",hotkey:r=["altKey","KeyT"],expand:l,closeButton:T,className:p,offset:g,theme:u="light",richColors:A,duration:O,style:W,visibleToasts:X=It,toastOptions:h,dir:j=gt()}=o,[E,L]=a.default.useState([]),[D,M]=a.default.useState([]),[F,w]=a.default.useState(!1),[z,U]=a.default.useState(!1),[_,S]=a.default.useState(u!=="system"?u:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),[J,G]=t.split("-"),y=a.default.useRef(null),q=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),x=a.default.useRef(null),N=a.default.useRef(!1),R=a.default.useCallback(n=>L(i=>i.filter(({id:d})=>d!==n.id)),[]);return a.default.useEffect(()=>v.subscribe(n=>{if(n.dismiss){L(i=>i.map(d=>d.id===n.id?{...d,delete:!0}:d));return}setTimeout(()=>{ht.default.flushSync(()=>{L(i=>{let d=i.findIndex(I=>I.id===n.id);return d!==-1?[...i.slice(0,d),{...i[d],...n},...i.slice(d+1)]:[n,...i]})})})}),[]),a.default.useEffect(()=>{if(u!=="system"){S(u);return}u==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?S("dark"):S("light")),typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:n})=>{S(n?"dark":"light")})},[u]),a.default.useEffect(()=>{E.length<=1&&w(!1)},[E]),a.default.useEffect(()=>{let n=i=>{var I,K;r.every(P=>i[P]||i.code===P)&&(w(!0),(I=y.current)==null||I.focus()),i.code==="Escape"&&(document.activeElement===y.current||(K=y.current)!=null&&K.contains(document.activeElement))&&w(!1)};return document.addEventListener("keydown",n),()=>document.removeEventListener("keydown",n)},[r]),a.default.useEffect(()=>{if(y.current)return()=>{x.current&&(x.current.focus({preventScroll:!0}),x.current=null,N.current=!1)}},[y.current]),E.length?(console.log({expanded:F,interacting:z}),a.default.createElement("section",{"aria-label":`Notifications ${q}`,tabIndex:-1},a.default.createElement("ol",{dir:j==="auto"?gt():j,tabIndex:-1,ref:y,className:p,"data-sonner-toaster":!0,"data-theme":_,"data-rich-colors":A,"data-y-position":J,"data-x-position":G,style:{"--front-toast-height":`${($=D[0])==null?void 0:$.height}px`,"--offset":typeof g=="number"?`${g}px`:g||Ht,"--width":`${At}px`,"--gap":`${bt}px`,...W},onBlur:n=>{N.current&&!n.currentTarget.contains(n.relatedTarget)&&(N.current=!1,x.current&&(x.current.focus({preventScroll:!0}),x.current=null))},onFocus:n=>{n.target instanceof HTMLElement&&n.target.dataset.dismissible==="false"||N.current||(N.current=!0,x.current=n.relatedTarget)},onMouseEnter:()=>w(!0),onMouseMove:()=>w(!0),onMouseLeave:()=>{z||w(!1)},onPointerDown:n=>{n.target instanceof HTMLElement&&n.target.dataset.dismissible==="false"||U(!0)},onPointerUp:()=>U(!1)},E.map((n,i)=>a.default.createElement(Yt,{key:n.id,index:i,toast:n,duration:O,className:h==null?void 0:h.className,descriptionClassName:h==null?void 0:h.descriptionClassName,invert:e,visibleToasts:X,closeButton:T,interacting:z,position:t,style:h==null?void 0:h.style,removeToast:R,toasts:E,heights:D,setHeights:M,expandByDefault:l,expanded:F}))))):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, 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 setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity) 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 }, [deleteToast, 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 = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n } else if (Math.abs(xPosition) > swipeStartThreshold) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label=\"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 || toast.type === 'loading' ? <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\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n } = 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 [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n const [y, x] = position.split('-');\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // 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 if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (typeof window === 'undefined') return;\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={() => {\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(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst 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 loading = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n 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 })\n .catch((error) => {\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n this.create({ id, type: 'error', message });\n })\n .finally(data.finally);\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't create 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 loading: ToastState.loading,\n});\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","__toCommonJS","import_react","import_react_dom","styleInject","css","insertAt","head","style","styleInject","import_react","getAsset","type","SuccessIcon","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","deleteToast","h","timeoutId","elapsedTime","_a","event","_b","_c","swipeAmount","yPosition","xPosition","clampedY","swipeStartThreshold","Loader","getAsset","getDocumentDirection","dirAttribute","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","setToasts","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","id","ToastState","t","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
1
+ {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/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 {\n HeightT,\n Position,\n ToastT,\n ToastToDismiss,\n ExternalToast,\n ToasterProps,\n} from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_THRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\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 dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n\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 until 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(\n () => heightIndex * GAP + toastsHeightBefore,\n [heightIndex, toastsHeightBefore],\n );\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find(\n (height) => height.toastId === toast.id,\n );\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight }, ...heights];\n } else {\n return heights.map((height) =>\n height.toastId === toast.id\n ? { ...height, height: newHeight }\n : height,\n );\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if (\n (toast.promise && toastType === 'loading') ||\n toast.duration === Infinity\n )\n 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 =\n new Date().getTime() - closeTimerStartTimeRef.current;\n\n closeTimerRemainingTimeRef.current =\n 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 }, [\n expanded,\n interacting,\n expandByDefault,\n toast,\n duration,\n deleteToast,\n toast.promise,\n toastType,\n ]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height }, ...h]);\n\n return () =>\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n 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-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(\n toastRef.current?.style\n .getPropertyValue('--swipe-amount')\n .replace('px', '') || 0,\n );\n const timeTaken =\n new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const xPosition = event.clientX - pointerStartRef.current.x;\n\n const clamp = y === 'top' ? Math.min : Math.max;\n const clampedY = clamp(0, yPosition);\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty(\n '--swipe-amount',\n `${yPosition}px`,\n );\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 || !dismissible\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 || toast.type === 'loading' ? (\n <Loader visible={toastType === 'loading'} />\n ) : 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\n data-description=\"\"\n className={descriptionClassName + toastDescriptionClassname}\n >\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n if (!dismissible) return;\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\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement)\n .direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n } = 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 [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n const [y, x] = position.split('-');\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey\n .join('+')\n .replace(/Key/g, '')\n .replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toast: ToastT) =>\n 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) =>\n toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)),\n );\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex(\n (t) => t.id === toast.id,\n );\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n React.useEffect(() => {\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (theme === 'system') {\n // check if current preference is dark\n if (\n window.matchMedia &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n\n if (typeof window === 'undefined') return;\n\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every(\n (key) => (event as any)[key] || event.code === key,\n );\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current ||\n listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n console.log({ expanded, interacting });\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 dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset':\n typeof offset === 'number'\n ? `${offset}px`\n : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (\n isFocusWithinRef.current &&\n !event.currentTarget.contains(event.relatedTarget)\n ) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\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(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst 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 {\n ExternalToast,\n ToastT,\n PromiseData,\n PromiseT,\n ToastToDismiss,\n ToastTypes,\n} 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 = (\n subscriber: (toast: ToastT | ToastToDismiss) => void,\n ) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: string | React.ReactNode;\n type?: ToastTypes;\n promise?: PromiseT;\n },\n ) => {\n const { message, ...rest } = data;\n const id =\n typeof data?.id === 'number' || data.id?.length > 0\n ? data.id\n : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible =\n data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) =>\n subscriber({ id: toast.id, dismiss: true }),\n );\n });\n }\n\n this.subscribers.forEach((subscriber) =>\n subscriber({ id, dismiss: true }),\n );\n return id;\n };\n\n message = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n ) => {\n return this.create({ ...data, message });\n };\n\n error = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n ) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n ) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n loading = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n ) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(\n promise: PromiseT<ToastData>,\n data?: PromiseData<ToastData>,\n ) => {\n const id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n });\n const p = promise instanceof Promise ? promise : promise();\n p.then((promiseData) => {\n const message =\n typeof data.success === 'function'\n ? data.success(promiseData)\n : data.success;\n this.create({ id, type: 'success', message });\n })\n .catch((error) => {\n const message =\n typeof data.error === 'function'\n ? data.error(error)\n : data.error;\n this.create({ id, type: 'error', message });\n })\n .finally(data.finally);\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't create 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 = (\n jsx: (id: number | string) => React.ReactElement,\n data?: ExternalToast,\n ) => {\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 = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n) => {\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 loading: ToastState.loading,\n});\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","__toCommonJS","import_react","import_react_dom","styleInject","css","insertAt","head","style","styleInject","import_react","getAsset","type","SuccessIcon","ErrorIcon","bars","Loader","visible","React","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","promiseData","error","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","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","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","toastNode","originalHeight","newHeight","deleteToast","h","timeoutId","elapsedTime","_a","event","_b","_c","_d","swipeAmount","timeTaken","velocity","yPosition","xPosition","clampedY","swipeStartThreshold","Loader","getAsset","getDocumentDirection","dirAttribute","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","setToasts","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","id","ToastState","t","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
1
  "use client"
2
- "use client";import e from"react";import yt from"react-dom";function Q(n,{insertAt:a}={}){if(!n||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=n:r.appendChild(document.createTextNode(n))}Q(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 k from"react";var nt=n=>{switch(n){case"success":return pt;case"error":return ft;default:return null}},mt=Array(12).fill(0),it=({visible:n})=>k.createElement("div",{className:"sonner-loading-wrapper","data-visible":n},k.createElement("div",{className:"sonner-spinner"},mt.map((a,t)=>k.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),pt=k.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},k.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 ft=k.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},k.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=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 p;let{message:t,...r}=a,l=typeof(a==null?void 0:a.id)=="number"||((p=a.id)==null?void 0:p.length)>0?a.id:Z++;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,...r,id:l}),l};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.loading=(a,t)=>this.create({...t,type:"loading",message:a});this.promise=(a,t)=>{let r=this.create({...t,promise:a,type:"loading",message:t.loading});return(a instanceof Promise?a:a()).then(w=>{let p=typeof t.success=="function"?t.success(w):t.success;this.create({id:r,type:"success",message:p})}).catch(w=>{let p=typeof t.error=="function"?t.error(w):t.error;this.create({id:r,type:"error",message:p})}).finally(t.finally),r};this.custom=(a,t)=>{let r=(t==null?void 0:t.id)||Z++;this.publish({jsx:a(r),id:r,...t})};this.subscribers=[],this.toasts=[]}},x=new tt,gt=(n,a)=>{let t=(a==null?void 0:a.id)||Z++;return x.addToast({title:n,...a,id:t}),t},ht=gt,bt=Object.assign(ht,{success:x.success,error:x.error,custom:x.custom,message:x.message,promise:x.promise,dismiss:x.dismiss,loading:x.loading});var xt=3,vt="32px",Tt=4e3,wt=356,dt=14,Et=20,St=200,Nt=n=>{let{invert:a,toast:t,interacting:r,setHeights:l,visibleToasts:w,heights:p,index:d,toasts:R,expanded:H,removeToast:L,closeButton:_,style:$,className:h="",descriptionClassName:Y="",duration:E,position:A,expandByDefault:C}=n,[P,K]=e.useState(!1),[v,O]=e.useState(!1),[j,F]=e.useState(!1),[D,V]=e.useState(!1),[W,b]=e.useState(0),[X,y]=e.useState(0),g=e.useRef(null),J=d===0,U=d+1<=w,s=t.type,c=t.className||"",f=t.descriptionClassName||"",T=e.useMemo(()=>p.findIndex(o=>o.toastId===t.id)||0,[p,t.id]),z=e.useMemo(()=>t.duration||E||Tt,[t.duration,E]),I=e.useRef(0),M=e.useRef(0),G=e.useRef(z),et=e.useRef(0),B=e.useRef(null),[at,ct]=A.split("-"),ot=e.useMemo(()=>p.reduce((o,i,u)=>u>=T?o:o+i.height,0),[p,T]),ut=t.invert||a,q=s==="loading";M.current=e.useMemo(()=>T*dt+ot,[T,ot]),e.useEffect(()=>{K(!0)},[]),e.useLayoutEffect(()=>{if(!P)return;let o=g.current,i=o.style.height;o.style.height="auto";let u=o.getBoundingClientRect().height;o.style.height=i,y(u),l(m=>m.find(N=>N.toastId===t.id)?m.map(N=>N.toastId===t.id?{...N,height:u}:N):[{toastId:t.id,height:u},...m])},[P,t.title,t.description,l,t.id]);let S=e.useCallback(()=>{O(!0),b(M.current),l(o=>o.filter(i=>i.toastId!==t.id)),setTimeout(()=>{L(t)},St)},[t,L,l,M]);return e.useEffect(()=>{if(t.promise&&s==="loading"||t.duration===1/0)return;let o;return H||r?(()=>{if(et.current<I.current){let m=new Date().getTime()-I.current;G.current=G.current-m}et.current=new Date().getTime()})():(()=>{I.current=new Date().getTime(),o=setTimeout(()=>{var m;(m=t.onAutoClose)==null||m.call(t,t),S()},G.current)})(),()=>clearTimeout(o)},[H,r,C,t,z,S,t.promise,s]),e.useEffect(()=>{let o=g.current;if(o){let i=o.getBoundingClientRect().height;return y(i),l(u=>[{toastId:t.id,height:i},...u]),()=>l(u=>u.filter(m=>m.toastId!==t.id))}},[l,t.id]),e.useEffect(()=>{t.delete&&S()},[S,t.delete]),e.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:g,className:h+" "+c,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":P,"data-promise":!!t.promise,"data-removed":v,"data-visible":U,"data-y-position":at,"data-x-position":ct,"data-index":d,"data-front":J,"data-swiping":j,"data-type":s,"data-invert":ut,"data-swipe-out":D,"data-expanded":!!(H||C&&P),style:{"--index":d,"--toasts-before":d,"--z-index":R.length-d,"--offset":`${v?W:M.current}px`,"--initial-height":C?"auto":`${X}px`,...$,...t.style},onPointerDown:o=>{q||(b(M.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(F(!0),B.current={x:o.clientX,y:o.clientY}))},onPointerUp:()=>{var i,u,m;if(D)return;B.current=null;let o=Number(((i=g.current)==null?void 0:i.style.getPropertyValue("--swipe-amount").replace("px",""))||0);if(Math.abs(o)>=Et){b(M.current),(u=t.onDismiss)==null||u.call(t,t),S(),V(!0);return}(m=g.current)==null||m.style.setProperty("--swipe-amount","0px"),F(!1)},onPointerMove:o=>{var rt;if(!B.current)return;let i=o.clientY-B.current.y,u=o.clientX-B.current.x,st=(at==="top"?Math.min:Math.max)(0,i),N=o.pointerType==="touch"?10:2;Math.abs(st)>N?(rt=g.current)==null||rt.style.setProperty("--swipe-amount",`${i}px`):Math.abs(u)>N&&(B.current=null)}},_&&!t.jsx?e.createElement("button",{"aria-label":"Close toast","data-disabled":q,"data-close-button":!0,onClick:q?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,s||t.icon||t.promise?e.createElement("div",{"data-icon":""},t.promise||t.type==="loading"?e.createElement(it,{visible:s==="loading"}):null,t.icon||nt(s)):null,e.createElement("div",{"data-content":""},e.createElement("div",{"data-title":""},t.title),t.description?e.createElement("div",{"data-description":"",className:Y+f},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:o=>{var i;(i=t.action)==null||i.onClick(o),!o.defaultPrevented&&S()}},t.action.label):null))};function lt(){if(typeof window=="undefined")return"ltr";let n=document.documentElement.getAttribute("dir");return n==="auto"||!n?window.getComputedStyle(document.documentElement).direction:n}var Kt=n=>{var U;let{invert:a,position:t="bottom-right",hotkey:r=["altKey","KeyT"],expand:l,closeButton:w,className:p,offset:d,theme:R="light",richColors:H,duration:L,style:_,visibleToasts:$=xt,toastOptions:h,dir:Y=lt()}=n,[E,A]=e.useState([]),[C,P]=e.useState([]),[K,v]=e.useState(!1),[O,j]=e.useState(!1),[F,D]=e.useState(R!=="system"?R:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),[V,W]=t.split("-"),b=e.useRef(null),X=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),y=e.useRef(null),g=e.useRef(!1),J=e.useCallback(s=>A(c=>c.filter(({id:f})=>f!==s.id)),[]);return e.useEffect(()=>x.subscribe(s=>{if(s.dismiss){A(c=>c.map(f=>f.id===s.id?{...f,delete:!0}:f));return}setTimeout(()=>{yt.flushSync(()=>{A(c=>{let f=c.findIndex(T=>T.id===s.id);return f!==-1?[...c.slice(0,f),{...c[f],...s},...c.slice(f+1)]:[s,...c]})})})}),[]),e.useEffect(()=>{if(R!=="system"){D(R);return}typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:s})=>{D(s?"dark":"light")})},[R]),e.useEffect(()=>{E.length<=1&&v(!1)},[E]),e.useEffect(()=>{let s=c=>{var T,z;r.every(I=>c[I]||c.code===I)&&(v(!0),(T=b.current)==null||T.focus()),c.code==="Escape"&&(document.activeElement===b.current||(z=b.current)!=null&&z.contains(document.activeElement))&&v(!1)};return document.addEventListener("keydown",s),()=>document.removeEventListener("keydown",s)},[r]),e.useEffect(()=>{if(b.current)return()=>{y.current&&(y.current.focus({preventScroll:!0}),y.current=null,g.current=!1)}},[b.current]),E.length?e.createElement("section",{"aria-label":`Notifications ${X}`,tabIndex:-1},e.createElement("ol",{dir:Y==="auto"?lt():Y,tabIndex:-1,ref:b,className:p,"data-sonner-toaster":!0,"data-theme":F,"data-rich-colors":H,"data-y-position":V,"data-x-position":W,style:{"--front-toast-height":`${(U=C[0])==null?void 0:U.height}px`,"--offset":typeof d=="number"?`${d}px`:d||vt,"--width":`${wt}px`,"--gap":`${dt}px`,..._},onBlur:s=>{g.current&&!s.currentTarget.contains(s.relatedTarget)&&(g.current=!1,y.current&&(y.current.focus({preventScroll:!0}),y.current=null))},onFocus:s=>{g.current||(g.current=!0,y.current=s.relatedTarget)},onMouseEnter:()=>v(!0),onMouseMove:()=>v(!0),onMouseLeave:()=>{O||v(!1)},onPointerDown:()=>{j(!0)},onPointerUp:()=>j(!1)},E.map((s,c)=>e.createElement(Nt,{key:s.id,index:c,toast:s,duration:L,className:h==null?void 0:h.className,descriptionClassName:h==null?void 0:h.descriptionClassName,invert:a,visibleToasts:$,closeButton:w,interacting:O,position:t,style:h==null?void 0:h.style,removeToast:J,toasts:E,heights:C,setHeights:P,expandByDefault:l,expanded:K})))):null};export{Kt as Toaster,bt as toast};
2
+ "use client";import e from"react";import Tt from"react-dom";function et(i,{insertAt:a}={}){if(!i||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=i:r.appendChild(document.createTextNode(i))}et(`html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 P from"react";var dt=i=>{switch(i){case"success":return ht;case"error":return bt;default:return null}},gt=Array(12).fill(0),ct=({visible:i})=>P.createElement("div",{className:"sonner-loading-wrapper","data-visible":i},P.createElement("div",{className:"sonner-spinner"},gt.map((a,t)=>P.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),ht=P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},P.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 bt=P.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},P.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 at=0,st=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 g;let{message:t,...r}=a,d=typeof(a==null?void 0:a.id)=="number"||((g=a.id)==null?void 0:g.length)>0?a.id:at++,T=this.toasts.find(u=>u.id===d),p=a.dismissible===void 0?!0:a.dismissible;return T?this.toasts=this.toasts.map(u=>u.id===d?(this.publish({...u,...a,id:d,title:t}),{...u,...a,id:d,dismissible:p,title:t}):u):this.addToast({title:t,...r,dismissible:p,id:d}),d};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.loading=(a,t)=>this.create({...t,type:"loading",message:a});this.promise=(a,t)=>{let r=this.create({...t,promise:a,type:"loading",message:t.loading});return(a instanceof Promise?a:a()).then(T=>{let p=typeof t.success=="function"?t.success(T):t.success;this.create({id:r,type:"success",message:p})}).catch(T=>{let p=typeof t.error=="function"?t.error(T):t.error;this.create({id:r,type:"error",message:p})}).finally(t.finally),r};this.custom=(a,t)=>{let r=(t==null?void 0:t.id)||at++;this.publish({jsx:a(r),id:r,...t})};this.subscribers=[],this.toasts=[]}},v=new st,yt=(i,a)=>{let t=(a==null?void 0:a.id)||at++;return v.addToast({title:i,...a,id:t}),t},xt=yt,vt=Object.assign(xt,{success:v.success,error:v.error,custom:v.custom,message:v.message,promise:v.promise,dismiss:v.dismiss,loading:v.loading});var wt=3,Et="32px",St=4e3,Nt=356,mt=14,Rt=20,kt=200,Ct=i=>{let{invert:a,toast:t,interacting:r,setHeights:d,visibleToasts:T,heights:p,index:g,toasts:u,expanded:A,removeToast:O,closeButton:V,style:W,className:h="",descriptionClassName:j="",duration:E,position:L,expandByDefault:D}=i,[M,F]=e.useState(!1),[w,z]=e.useState(!1),[U,_]=e.useState(!1),[S,X]=e.useState(!1),[J,y]=e.useState(0),[G,x]=e.useState(0),N=e.useRef(null),R=e.useRef(null),$=g===0,o=g+1<=T,n=t.type,l=t.dismissible!==!1,I=t.className||"",K=t.descriptionClassName||"",C=e.useMemo(()=>p.findIndex(s=>s.toastId===t.id)||0,[p,t.id]),ot=e.useMemo(()=>t.duration||E||St,[t.duration,E]),q=e.useRef(0),H=e.useRef(0),Q=e.useRef(ot),rt=e.useRef(0),B=e.useRef(null),[nt,ft]=L.split("-"),it=e.useMemo(()=>p.reduce((s,c,m)=>m>=C?s:s+c.height,0),[p,C]),pt=t.invert||a,Z=n==="loading";H.current=e.useMemo(()=>C*mt+it,[C,it]),e.useEffect(()=>{F(!0)},[]),e.useLayoutEffect(()=>{if(!M)return;let s=R.current,c=s.style.height;s.style.height="auto";let m=s.getBoundingClientRect().height;s.style.height=c,x(m),d(f=>f.find(b=>b.toastId===t.id)?f.map(b=>b.toastId===t.id?{...b,height:m}:b):[{toastId:t.id,height:m},...f])},[M,t.title,t.description,d,t.id]);let k=e.useCallback(()=>{z(!0),y(H.current),d(s=>s.filter(c=>c.toastId!==t.id)),setTimeout(()=>{O(t)},kt)},[t,O,d,H]);return e.useEffect(()=>{if(t.promise&&n==="loading"||t.duration===1/0)return;let s;return A||r?(()=>{if(rt.current<q.current){let f=new Date().getTime()-q.current;Q.current=Q.current-f}rt.current=new Date().getTime()})():(()=>{q.current=new Date().getTime(),s=setTimeout(()=>{var f;(f=t.onAutoClose)==null||f.call(t,t),k()},Q.current)})(),()=>clearTimeout(s)},[A,r,D,t,ot,k,t.promise,n]),e.useEffect(()=>{let s=R.current;if(s){let c=s.getBoundingClientRect().height;return x(c),d(m=>[{toastId:t.id,height:c},...m]),()=>d(m=>m.filter(f=>f.toastId!==t.id))}},[d,t.id]),e.useEffect(()=>{t.delete&&k()},[k,t.delete]),e.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:R,className:h+" "+I,"data-sonner-toast":"","data-styled":!t.jsx,"data-mounted":M,"data-promise":!!t.promise,"data-removed":w,"data-visible":o,"data-y-position":nt,"data-x-position":ft,"data-index":g,"data-front":$,"data-swiping":U,"data-dismissible":l,"data-type":n,"data-invert":pt,"data-swipe-out":S,"data-expanded":!!(A||D&&M),style:{"--index":g,"--toasts-before":g,"--z-index":u.length-g,"--offset":`${w?J:H.current}px`,"--initial-height":D?"auto":`${G}px`,...W,...t.style},onPointerDown:s=>{Z||!l||(N.current=new Date,y(H.current),s.target.setPointerCapture(s.pointerId),s.target.tagName!=="BUTTON"&&(_(!0),B.current={x:s.clientX,y:s.clientY}))},onPointerUp:()=>{var f,Y,b,tt;if(S||!l)return;B.current=null;let s=Number(((f=R.current)==null?void 0:f.style.getPropertyValue("--swipe-amount").replace("px",""))||0),c=new Date().getTime()-((Y=N.current)==null?void 0:Y.getTime()),m=Math.abs(s)/c;if(Math.abs(s)>=Rt||m>.11){y(H.current),(b=t.onDismiss)==null||b.call(t,t),k(),X(!0);return}(tt=R.current)==null||tt.style.setProperty("--swipe-amount","0px"),_(!1)},onPointerMove:s=>{var lt;if(!B.current||!l)return;let c=s.clientY-B.current.y,m=s.clientX-B.current.x,Y=(nt==="top"?Math.min:Math.max)(0,c),b=s.pointerType==="touch"?10:2;Math.abs(Y)>b?(lt=R.current)==null||lt.style.setProperty("--swipe-amount",`${c}px`):Math.abs(m)>b&&(B.current=null)}},V&&!t.jsx?e.createElement("button",{"aria-label":"Close toast","data-disabled":Z,"data-close-button":!0,onClick:Z||!l?void 0:()=>{var s;k(),(s=t.onDismiss)==null||s.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,n||t.icon||t.promise?e.createElement("div",{"data-icon":""},t.promise||t.type==="loading"?e.createElement(ct,{visible:n==="loading"}):null,t.icon||dt(n)):null,e.createElement("div",{"data-content":""},e.createElement("div",{"data-title":""},t.title),t.description?e.createElement("div",{"data-description":"",className:j+K},t.description):null),t.cancel?e.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var s;l&&(k(),(s=t.cancel)!=null&&s.onClick&&t.cancel.onClick())}},t.cancel.label):null,t.action?e.createElement("button",{"data-button":"",onClick:s=>{var c;(c=t.action)==null||c.onClick(s),!s.defaultPrevented&&k()}},t.action.label):null))};function ut(){if(typeof window=="undefined")return"ltr";let i=document.documentElement.getAttribute("dir");return i==="auto"||!i?window.getComputedStyle(document.documentElement).direction:i}var Wt=i=>{var $;let{invert:a,position:t="bottom-right",hotkey:r=["altKey","KeyT"],expand:d,closeButton:T,className:p,offset:g,theme:u="light",richColors:A,duration:O,style:V,visibleToasts:W=wt,toastOptions:h,dir:j=ut()}=i,[E,L]=e.useState([]),[D,M]=e.useState([]),[F,w]=e.useState(!1),[z,U]=e.useState(!1),[_,S]=e.useState(u!=="system"?u:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),[X,J]=t.split("-"),y=e.useRef(null),G=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),x=e.useRef(null),N=e.useRef(!1),R=e.useCallback(o=>L(n=>n.filter(({id:l})=>l!==o.id)),[]);return e.useEffect(()=>v.subscribe(o=>{if(o.dismiss){L(n=>n.map(l=>l.id===o.id?{...l,delete:!0}:l));return}setTimeout(()=>{Tt.flushSync(()=>{L(n=>{let l=n.findIndex(I=>I.id===o.id);return l!==-1?[...n.slice(0,l),{...n[l],...o},...n.slice(l+1)]:[o,...n]})})})}),[]),e.useEffect(()=>{if(u!=="system"){S(u);return}u==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?S("dark"):S("light")),typeof window!="undefined"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",({matches:o})=>{S(o?"dark":"light")})},[u]),e.useEffect(()=>{E.length<=1&&w(!1)},[E]),e.useEffect(()=>{let o=n=>{var I,K;r.every(C=>n[C]||n.code===C)&&(w(!0),(I=y.current)==null||I.focus()),n.code==="Escape"&&(document.activeElement===y.current||(K=y.current)!=null&&K.contains(document.activeElement))&&w(!1)};return document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)},[r]),e.useEffect(()=>{if(y.current)return()=>{x.current&&(x.current.focus({preventScroll:!0}),x.current=null,N.current=!1)}},[y.current]),E.length?(console.log({expanded:F,interacting:z}),e.createElement("section",{"aria-label":`Notifications ${G}`,tabIndex:-1},e.createElement("ol",{dir:j==="auto"?ut():j,tabIndex:-1,ref:y,className:p,"data-sonner-toaster":!0,"data-theme":_,"data-rich-colors":A,"data-y-position":X,"data-x-position":J,style:{"--front-toast-height":`${($=D[0])==null?void 0:$.height}px`,"--offset":typeof g=="number"?`${g}px`:g||Et,"--width":`${Nt}px`,"--gap":`${mt}px`,...V},onBlur:o=>{N.current&&!o.currentTarget.contains(o.relatedTarget)&&(N.current=!1,x.current&&(x.current.focus({preventScroll:!0}),x.current=null))},onFocus:o=>{o.target instanceof HTMLElement&&o.target.dataset.dismissible==="false"||N.current||(N.current=!0,x.current=o.relatedTarget)},onMouseEnter:()=>w(!0),onMouseMove:()=>w(!0),onMouseLeave:()=>{z||w(!1)},onPointerDown:o=>{o.target instanceof HTMLElement&&o.target.dataset.dismissible==="false"||U(!0)},onPointerUp:()=>U(!1)},E.map((o,n)=>e.createElement(Ct,{key:o.id,index:n,toast:o,duration:O,className:h==null?void 0:h.className,descriptionClassName:h==null?void 0:h.descriptionClassName,invert:a,visibleToasts:W,closeButton:T,interacting:z,position:t,style:h==null?void 0:h.style,removeToast:R,toasts:E,heights:D,setHeights:M,expandByDefault:d,expanded:F}))))):null};export{Wt as Toaster,vt 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, 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 setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity) 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 }, [deleteToast, 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 = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n } else if (Math.abs(xPosition) > swipeStartThreshold) {\n // User is swiping in wrong direction so we disable swipe gesture\n // for the current pointer down interaction\n pointerStartRef.current = null;\n }\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label=\"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 || toast.type === 'loading' ? <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\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n } = 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 [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n const [y, x] = position.split('-');\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex((t) => t.id === toast.id);\n\n // 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 if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (typeof window === 'undefined') return;\n\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <section aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={() => {\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(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst 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 loading = (message: string | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n 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 })\n .catch((error) => {\n const message = typeof data.error === 'function' ? data.error(error) : data.error;\n this.create({ id, type: 'error', message });\n })\n .finally(data.finally);\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't create 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 loading: ToastState.loading,\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","deleteToast","h","timeoutId","elapsedTime","_a","event","_b","_c","swipeAmount","yPosition","xPosition","clampedY","swipeStartThreshold","Loader","getAsset","getDocumentDirection","dirAttribute","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","setToasts","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","id","ToastState","t","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
1
+ {"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/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 {\n HeightT,\n Position,\n ToastT,\n ToastToDismiss,\n ExternalToast,\n ToasterProps,\n} from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_THRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\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 dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n\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 until 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(\n () => heightIndex * GAP + toastsHeightBefore,\n [heightIndex, toastsHeightBefore],\n );\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find(\n (height) => height.toastId === toast.id,\n );\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight }, ...heights];\n } else {\n return heights.map((height) =>\n height.toastId === toast.id\n ? { ...height, height: newHeight }\n : height,\n );\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if (\n (toast.promise && toastType === 'loading') ||\n toast.duration === Infinity\n )\n 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 =\n new Date().getTime() - closeTimerStartTimeRef.current;\n\n closeTimerRemainingTimeRef.current =\n 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 }, [\n expanded,\n interacting,\n expandByDefault,\n toast,\n duration,\n deleteToast,\n toast.promise,\n toastType,\n ]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height }, ...h]);\n\n return () =>\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n 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-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(\n toastRef.current?.style\n .getPropertyValue('--swipe-amount')\n .replace('px', '') || 0,\n );\n const timeTaken =\n new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const xPosition = event.clientX - pointerStartRef.current.x;\n\n const clamp = y === 'top' ? Math.min : Math.max;\n const clampedY = clamp(0, yPosition);\n const swipeStartThreshold = event.pointerType === 'touch' ? 10 : 2;\n const isAllowedToSwipe = Math.abs(clampedY) > swipeStartThreshold;\n\n if (isAllowedToSwipe) {\n toastRef.current?.style.setProperty(\n '--swipe-amount',\n `${yPosition}px`,\n );\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 || !dismissible\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 || toast.type === 'loading' ? (\n <Loader visible={toastType === 'loading'} />\n ) : 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\n data-description=\"\"\n className={descriptionClassName + toastDescriptionClassname}\n >\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n if (!dismissible) return;\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\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement)\n .direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n } = 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 [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n const [y, x] = position.split('-');\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey\n .join('+')\n .replace(/Key/g, '')\n .replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback(\n (toast: ToastT) =>\n 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) =>\n toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)),\n );\n return;\n }\n\n // Prevent batching, temp solution.\n setTimeout(() => {\n ReactDOM.flushSync(() => {\n setToasts((toasts) => {\n const indexOfExistingToast = toasts.findIndex(\n (t) => t.id === toast.id,\n );\n\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n { ...toasts[indexOfExistingToast], ...toast },\n ...toasts.slice(indexOfExistingToast + 1),\n ];\n }\n\n return [toast, ...toasts];\n });\n });\n });\n });\n }, []);\n\n React.useEffect(() => {\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n\n if (theme === 'system') {\n // check if current preference is dark\n if (\n window.matchMedia &&\n window.matchMedia('(prefers-color-scheme: dark)').matches\n ) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n\n if (typeof window === 'undefined') return;\n\n window\n .matchMedia('(prefers-color-scheme: dark)')\n .addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n }, [theme]);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every(\n (key) => (event as any)[key] || event.code === key,\n );\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current ||\n listRef.current?.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n React.useEffect(() => {\n if (listRef.current) {\n return () => {\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [listRef.current]);\n\n if (!toasts.length) return null;\n console.log({ expanded, interacting });\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 dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset':\n typeof offset === 'number'\n ? `${offset}px`\n : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (\n isFocusWithinRef.current &&\n !event.currentTarget.contains(event.relatedTarget)\n ) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement &&\n event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\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(\"html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toast][data-theme=dark] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:focus [data-close-button]{opacity:1}[data-sonner-toast]:focus-within [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(--gray4);--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 return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst 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 {\n ExternalToast,\n ToastT,\n PromiseData,\n PromiseT,\n ToastToDismiss,\n ToastTypes,\n} 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 = (\n subscriber: (toast: ToastT | ToastToDismiss) => void,\n ) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: string | React.ReactNode;\n type?: ToastTypes;\n promise?: PromiseT;\n },\n ) => {\n const { message, ...rest } = data;\n const id =\n typeof data?.id === 'number' || data.id?.length > 0\n ? data.id\n : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible =\n data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) =>\n subscriber({ id: toast.id, dismiss: true }),\n );\n });\n }\n\n this.subscribers.forEach((subscriber) =>\n subscriber({ id, dismiss: true }),\n );\n return id;\n };\n\n message = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n ) => {\n return this.create({ ...data, message });\n };\n\n error = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n ) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n ) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n loading = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n ) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(\n promise: PromiseT<ToastData>,\n data?: PromiseData<ToastData>,\n ) => {\n const id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n });\n const p = promise instanceof Promise ? promise : promise();\n p.then((promiseData) => {\n const message =\n typeof data.success === 'function'\n ? data.success(promiseData)\n : data.success;\n this.create({ id, type: 'success', message });\n })\n .catch((error) => {\n const message =\n typeof data.error === 'function'\n ? data.error(error)\n : data.error;\n this.create({ id, type: 'error', message });\n })\n .finally(data.finally);\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't create 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 = (\n jsx: (id: number | string) => React.ReactElement,\n data?: ExternalToast,\n ) => {\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 = (\n message: string | React.ReactNode,\n data?: ExternalToast,\n) => {\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 loading: ToastState.loading,\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","alreadyExists","toast","dismissible","promise","promiseData","error","jsx","ToastState","toastFunction","basicToast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","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","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","toastNode","originalHeight","newHeight","deleteToast","h","timeoutId","elapsedTime","_a","event","_b","_c","_d","swipeAmount","timeTaken","velocity","yPosition","xPosition","clampedY","swipeStartThreshold","Loader","getAsset","getDocumentDirection","dirAttribute","Toaster","hotkey","expand","theme","richColors","toastOptions","dir","setToasts","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","id","ToastState","t","ReactDOM","indexOfExistingToast","matches","handleKeyDown","key"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonner",
3
- "version": "0.7.0",
3
+ "version": "0.7.2",
4
4
  "description": "An opinionated toast component for React.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -14,7 +14,7 @@
14
14
  "dev:website": "turbo run dev --filter=website...",
15
15
  "dev:test": "turbo run dev --filter=test...",
16
16
  "format": "prettier --write .",
17
- "test": "playwright test "
17
+ "test": "playwright test"
18
18
  },
19
19
  "keywords": [
20
20
  "react",