sonner 1.6.0 → 1.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- "use client";var Jt=Object.create;var st=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Gt=Object.getOwnPropertyNames;var Qt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var Zt=(a,e)=>{for(var t in e)st(a,t,{get:e[t],enumerable:!0})},Dt=(a,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let d of Gt(e))!qt.call(a,d)&&d!==t&&st(a,d,{get:()=>e[d],enumerable:!(r=Xt(e,d))||r.enumerable});return a};var K=(a,e,t)=>(t=a!=null?Jt(Qt(a)):{},Dt(e||!a||!a.__esModule?st(t,"default",{value:a,enumerable:!0}):t,a)),te=a=>Dt(st({},"__esModule",{value:!0}),a);var ve={};Zt(ve,{Toaster:()=>xe,toast:()=>jt,useSonner:()=>ye});module.exports=te(ve);var o=K(require("react")),$t=K(require("react-dom"));var T=K(require("react")),Ht=a=>{switch(a){case"success":return oe;case"info":return ne;case"warning":return ae;case"error":return se;default:return null}},ee=Array(12).fill(0),Mt=({visible:a,className:e})=>T.default.createElement("div",{className:["sonner-loading-wrapper",e].filter(Boolean).join(" "),"data-visible":a},T.default.createElement("div",{className:"sonner-spinner"},ee.map((t,r)=>T.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${r}`})))),oe=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),ae=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),ne=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),se=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),At=T.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"},T.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),T.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}));var mt=K(require("react")),Lt=()=>{let[a,e]=mt.default.useState(document.hidden);return mt.default.useEffect(()=>{let t=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),a};var zt=K(require("react")),pt=1,gt=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 C;let{message:t,...r}=e,d=typeof(e==null?void 0:e.id)=="number"||((C=e.id)==null?void 0:C.length)>0?e.id:pt++,l=this.toasts.find(b=>b.id===d),E=e.dismissible===void 0?!0:e.dismissible;return l?this.toasts=this.toasts.map(b=>b.id===d?(this.publish({...b,...e,id:d,title:t}),{...b,...e,id:d,dismissible:E,title:t}):b):this.addToast({title:t,...r,dismissible:E,id:d}),d};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.info=(e,t)=>this.create({...t,type:"info",message:e});this.warning=(e,t)=>this.create({...t,type:"warning",message:e});this.loading=(e,t)=>this.create({...t,type:"loading",message:e});this.promise=(e,t)=>{if(!t)return;let r;t.loading!==void 0&&(r=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let d=e instanceof Promise?e:e(),l=r!==void 0,E,C=d.then(async u=>{if(E=["resolve",u],zt.default.isValidElement(u))l=!1,this.create({id:r,type:"default",message:u});else if(ie(u)&&!u.ok){l=!1;let k=typeof t.error=="function"?await t.error(`HTTP error! status: ${u.status}`):t.error,j=typeof t.description=="function"?await t.description(`HTTP error! status: ${u.status}`):t.description;this.create({id:r,type:"error",message:k,description:j})}else if(t.success!==void 0){l=!1;let k=typeof t.success=="function"?await t.success(u):t.success,j=typeof t.description=="function"?await t.description(u):t.description;this.create({id:r,type:"success",message:k,description:j})}}).catch(async u=>{if(E=["reject",u],t.error!==void 0){l=!1;let y=typeof t.error=="function"?await t.error(u):t.error,k=typeof t.description=="function"?await t.description(u):t.description;this.create({id:r,type:"error",message:y,description:k})}}).finally(()=>{var u;l&&(this.dismiss(r),r=void 0),(u=t.finally)==null||u.call(t)}),b=()=>new Promise((u,y)=>C.then(()=>E[0]==="reject"?y(E[1]):u(E[1])).catch(y));return typeof r!="string"&&typeof r!="number"?{unwrap:b}:Object.assign(r,{unwrap:b})};this.custom=(e,t)=>{let r=(t==null?void 0:t.id)||pt++;return this.create({jsx:e(r),id:r,...t}),r};this.subscribers=[],this.toasts=[]}},R=new gt,re=(a,e)=>{let t=(e==null?void 0:e.id)||pt++;return R.addToast({title:a,...e,id:t}),t},ie=a=>a&&typeof a=="object"&&"ok"in a&&typeof a.ok=="boolean"&&"status"in a&&typeof a.status=="number",le=re,ce=()=>R.toasts,jt=Object.assign(le,{success:R.success,info:R.info,warning:R.warning,error:R.error,custom:R.custom,message:R.message,promise:R.promise,dismiss:R.dismiss,loading:R.loading},{getHistory:ce});function ht(a,{insertAt:e}={}){if(!a||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=a:r.appendChild(document.createTextNode(a))}ht(`:where(html[dir="ltr"]),:where([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%)}:where(html[dir="rtl"]),:where([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%)}:where([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}:where([data-sonner-toaster][data-x-position="right"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position="left"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([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)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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;user-select: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][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
2
- `);function J(a){return a.label!==void 0}var de=3,ue="32px",Yt=4e3,fe=356,me=14,pe=20,ge=200;function he(...a){return a.filter(Boolean).join(" ")}var be=a=>{var vt,wt,Tt,Rt,St,Et,Nt,Pt,Ct,Bt,kt;let{invert:e,toast:t,unstyled:r,interacting:d,setHeights:l,visibleToasts:E,heights:C,index:b,toasts:u,expanded:y,removeToast:k,defaultRichColors:j,closeButton:X,style:rt,cancelButtonStyle:i,actionButtonStyle:G,className:Q="",descriptionClassName:it="",duration:W,position:lt,gap:ct,loadingIcon:q,expandByDefault:I,classNames:n,icons:N,closeButtonAriaLabel:Z="Close toast",pauseWhenPageIsHidden:tt,cn:S}=a,[B,et]=o.default.useState(!1),[_,dt]=o.default.useState(!1),[D,H]=o.default.useState(!1),[ot,M]=o.default.useState(!1),[Y,U]=o.default.useState(0),[c,f]=o.default.useState(0),h=o.default.useRef(t.duration||W||Yt),v=o.default.useRef(null),P=o.default.useRef(null),m=b===0,V=b+1<=E,w=t.type,A=t.dismissible!==!1,O=t.className||"",Wt=t.descriptionClassName||"",at=o.default.useMemo(()=>C.findIndex(s=>s.toastId===t.id)||0,[C,t.id]),_t=o.default.useMemo(()=>{var s;return(s=t.closeButton)!=null?s:X},[t.closeButton,X]),we=o.default.useMemo(()=>t.duration||W||Yt,[t.duration,W]),ut=o.default.useRef(0),F=o.default.useRef(0),bt=o.default.useRef(0),nt=o.default.useRef(null),[Ut,Vt]=lt.split("-"),yt=o.default.useMemo(()=>C.reduce((s,p,g)=>g>=at?s:s+p.height,0),[C,at]),xt=Lt(),Ot=t.invert||e,ft=w==="loading";F.current=o.default.useMemo(()=>at*ct+yt,[at,yt]),o.default.useEffect(()=>{et(!0)},[]),o.default.useEffect(()=>{let s=P.current;if(s){let p=s.getBoundingClientRect().height;return f(p),l(g=>[{toastId:t.id,height:p,position:t.position},...g]),()=>l(g=>g.filter(x=>x.toastId!==t.id))}},[l,t.id]),o.default.useLayoutEffect(()=>{if(!B)return;let s=P.current,p=s.style.height;s.style.height="auto";let g=s.getBoundingClientRect().height;s.style.height=p,f(g),l(x=>x.find(z=>z.toastId===t.id)?x.map(z=>z.toastId===t.id?{...z,height:g}:z):[{toastId:t.id,height:g,position:t.position},...x])},[B,t.title,t.description,l,t.id]);let L=o.default.useCallback(()=>{dt(!0),U(F.current),l(s=>s.filter(p=>p.toastId!==t.id)),setTimeout(()=>{k(t)},ge)},[t,k,l,F]);o.default.useEffect(()=>{if(t.promise&&w==="loading"||t.duration===1/0||t.type==="loading")return;let s;return y||d||tt&&xt?(()=>{if(bt.current<ut.current){let x=new Date().getTime()-ut.current;h.current=h.current-x}bt.current=new Date().getTime()})():(()=>{h.current!==1/0&&(ut.current=new Date().getTime(),s=setTimeout(()=>{var x;(x=t.onAutoClose)==null||x.call(t,t),L()},h.current))})(),()=>clearTimeout(s)},[y,d,t,w,tt,xt,L]),o.default.useEffect(()=>{t.delete&&L()},[L,t.delete]);function Kt(){var s,p,g;return N!=null&&N.loading?o.default.createElement("div",{className:S(n==null?void 0:n.loader,(s=t==null?void 0:t.classNames)==null?void 0:s.loader,"sonner-loader"),"data-visible":w==="loading"},N.loading):q?o.default.createElement("div",{className:S(n==null?void 0:n.loader,(p=t==null?void 0:t.classNames)==null?void 0:p.loader,"sonner-loader"),"data-visible":w==="loading"},q):o.default.createElement(Mt,{className:S(n==null?void 0:n.loader,(g=t==null?void 0:t.classNames)==null?void 0:g.loader),visible:w==="loading"})}return o.default.createElement("li",{tabIndex:0,ref:P,className:S(Q,O,n==null?void 0:n.toast,(vt=t==null?void 0:t.classNames)==null?void 0:vt.toast,n==null?void 0:n.default,n==null?void 0:n[w],(wt=t==null?void 0:t.classNames)==null?void 0:wt[w]),"data-sonner-toast":"","data-rich-colors":(Tt=t.richColors)!=null?Tt:j,"data-styled":!(t.jsx||t.unstyled||r),"data-mounted":B,"data-promise":!!t.promise,"data-removed":_,"data-visible":V,"data-y-position":Ut,"data-x-position":Vt,"data-index":b,"data-front":m,"data-swiping":D,"data-dismissible":A,"data-type":w,"data-invert":Ot,"data-swipe-out":ot,"data-expanded":!!(y||I&&B),style:{"--index":b,"--toasts-before":b,"--z-index":u.length-b,"--offset":`${_?Y:F.current}px`,"--initial-height":I?"auto":`${c}px`,...rt,...t.style},onPointerDown:s=>{ft||!A||(v.current=new Date,U(F.current),s.target.setPointerCapture(s.pointerId),s.target.tagName!=="BUTTON"&&(H(!0),nt.current={x:s.clientX,y:s.clientY}))},onPointerUp:()=>{var x,$,z,It;if(ot||!A)return;nt.current=null;let s=Number(((x=P.current)==null?void 0:x.style.getPropertyValue("--swipe-amount").replace("px",""))||0),p=new Date().getTime()-(($=v.current)==null?void 0:$.getTime()),g=Math.abs(s)/p;if(Math.abs(s)>=pe||g>.11){U(F.current),(z=t.onDismiss)==null||z.call(t,t),L(),M(!0);return}(It=P.current)==null||It.style.setProperty("--swipe-amount","0px"),H(!1)},onPointerMove:s=>{var x,$;if(!nt.current||!A)return;let p=s.clientY-nt.current.y;((x=window.getSelection())==null?void 0:x.toString().length)>0||($=P.current)==null||$.style.setProperty("--swipe-amount",`${Math.max(0,p)}px`)}},_t&&!t.jsx?o.default.createElement("button",{"aria-label":Z,"data-disabled":ft,"data-close-button":!0,onClick:ft||!A?()=>{}:()=>{var s;L(),(s=t.onDismiss)==null||s.call(t,t)},className:S(n==null?void 0:n.closeButton,(Rt=t==null?void 0:t.classNames)==null?void 0:Rt.closeButton)},(St=N==null?void 0:N.close)!=null?St:At):null,t.jsx||o.default.isValidElement(t.title)?t.jsx?t.jsx:typeof t.title=="function"?t.title():t.title:o.default.createElement(o.default.Fragment,null,w||t.icon||t.promise?o.default.createElement("div",{"data-icon":"",className:S(n==null?void 0:n.icon,(Et=t==null?void 0:t.classNames)==null?void 0:Et.icon)},t.promise||t.type==="loading"&&!t.icon?t.icon||Kt():null,t.type!=="loading"?t.icon||(N==null?void 0:N[w])||Ht(w):null):null,o.default.createElement("div",{"data-content":"",className:S(n==null?void 0:n.content,(Nt=t==null?void 0:t.classNames)==null?void 0:Nt.content)},o.default.createElement("div",{"data-title":"",className:S(n==null?void 0:n.title,(Pt=t==null?void 0:t.classNames)==null?void 0:Pt.title)},typeof t.title=="function"?t.title():t.title),t.description?o.default.createElement("div",{"data-description":"",className:S(it,Wt,n==null?void 0:n.description,(Ct=t==null?void 0:t.classNames)==null?void 0:Ct.description)},typeof t.description=="function"?t.description():t.description):null),o.default.isValidElement(t.cancel)?t.cancel:t.cancel&&J(t.cancel)?o.default.createElement("button",{"data-button":!0,"data-cancel":!0,style:t.cancelButtonStyle||i,onClick:s=>{var p,g;J(t.cancel)&&A&&((g=(p=t.cancel).onClick)==null||g.call(p,s),L())},className:S(n==null?void 0:n.cancelButton,(Bt=t==null?void 0:t.classNames)==null?void 0:Bt.cancelButton)},t.cancel.label):null,o.default.isValidElement(t.action)?t.action:t.action&&J(t.action)?o.default.createElement("button",{"data-button":!0,"data-action":!0,style:t.actionButtonStyle||G,onClick:s=>{var p,g;J(t.action)&&((g=(p=t.action).onClick)==null||g.call(p,s),!s.defaultPrevented&&L())},className:S(n==null?void 0:n.actionButton,(kt=t==null?void 0:t.classNames)==null?void 0:kt.actionButton)},t.action.label):null))};function Ft(){if(typeof window=="undefined"||typeof document=="undefined")return"ltr";let a=document.documentElement.getAttribute("dir");return a==="auto"||!a?window.getComputedStyle(document.documentElement).direction:a}function ye(){let[a,e]=o.default.useState([]);return o.default.useEffect(()=>R.subscribe(t=>{e(r=>{if("dismiss"in t&&t.dismiss)return r.filter(l=>l.id!==t.id);let d=r.findIndex(l=>l.id===t.id);if(d!==-1){let l=[...r];return l[d]={...l[d],...t},l}else return[t,...r]})}),[]),{toasts:a}}var xe=(0,o.forwardRef)(function(e,t){let{invert:r,position:d="bottom-right",hotkey:l=["altKey","KeyT"],expand:E,closeButton:C,className:b,offset:u,theme:y="light",richColors:k,duration:j,style:X,visibleToasts:rt=de,toastOptions:i,dir:G=Ft(),gap:Q=me,loadingIcon:it,icons:W,containerAriaLabel:lt="Notifications",pauseWhenPageIsHidden:ct,cn:q=he}=e,[I,n]=o.default.useState([]),N=o.default.useMemo(()=>Array.from(new Set([d].concat(I.filter(c=>c.position).map(c=>c.position)))),[I,d]),[Z,tt]=o.default.useState([]),[S,B]=o.default.useState(!1),[et,_]=o.default.useState(!1),[dt,D]=o.default.useState(y!=="system"?y:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),H=o.default.useRef(null),ot=l.join("+").replace(/Key/g,"").replace(/Digit/g,""),M=o.default.useRef(null),Y=o.default.useRef(!1),U=o.default.useCallback(c=>{n(f=>{var h;return(h=f.find(v=>v.id===c.id))!=null&&h.delete||R.dismiss(c.id),f.filter(({id:v})=>v!==c.id)})},[]);return o.default.useEffect(()=>R.subscribe(c=>{if(c.dismiss){n(f=>f.map(h=>h.id===c.id?{...h,delete:!0}:h));return}setTimeout(()=>{$t.default.flushSync(()=>{n(f=>{let h=f.findIndex(v=>v.id===c.id);return h!==-1?[...f.slice(0,h),{...f[h],...c},...f.slice(h+1)]:[c,...f]})})})}),[]),o.default.useEffect(()=>{if(y!=="system"){D(y);return}if(y==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?D("dark"):D("light")),typeof window=="undefined")return;let c=window.matchMedia("(prefers-color-scheme: dark)");try{c.addEventListener("change",({matches:f})=>{D(f?"dark":"light")})}catch(f){c.addListener(({matches:h})=>{try{D(h?"dark":"light")}catch(v){console.error(v)}})}},[y]),o.default.useEffect(()=>{I.length<=1&&B(!1)},[I]),o.default.useEffect(()=>{let c=f=>{var v,P;l.every(m=>f[m]||f.code===m)&&(B(!0),(v=H.current)==null||v.focus()),f.code==="Escape"&&(document.activeElement===H.current||(P=H.current)!=null&&P.contains(document.activeElement))&&B(!1)};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[l]),o.default.useEffect(()=>{if(H.current)return()=>{M.current&&(M.current.focus({preventScroll:!0}),M.current=null,Y.current=!1)}},[H.current]),o.default.createElement("section",{"aria-label":`${lt} ${ot}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false"},N.map((c,f)=>{var P;let[h,v]=c.split("-");return I.length?o.default.createElement("ol",{key:c,dir:G==="auto"?Ft():G,tabIndex:-1,ref:H,className:b,"data-sonner-toaster":!0,"data-theme":dt,"data-y-position":h,"data-x-position":v,style:{"--front-toast-height":`${((P=Z[0])==null?void 0:P.height)||0}px`,"--offset":typeof u=="number"?`${u}px`:u||ue,"--width":`${fe}px`,"--gap":`${Q}px`,...X},onBlur:m=>{Y.current&&!m.currentTarget.contains(m.relatedTarget)&&(Y.current=!1,M.current&&(M.current.focus({preventScroll:!0}),M.current=null))},onFocus:m=>{m.target instanceof HTMLElement&&m.target.dataset.dismissible==="false"||Y.current||(Y.current=!0,M.current=m.relatedTarget)},onMouseEnter:()=>B(!0),onMouseMove:()=>B(!0),onMouseLeave:()=>{et||B(!1)},onPointerDown:m=>{m.target instanceof HTMLElement&&m.target.dataset.dismissible==="false"||_(!0)},onPointerUp:()=>_(!1)},I.filter(m=>!m.position&&f===0||m.position===c).map((m,V)=>{var w,A;return o.default.createElement(be,{key:m.id,icons:W,index:V,toast:m,defaultRichColors:k,duration:(w=i==null?void 0:i.duration)!=null?w:j,className:i==null?void 0:i.className,descriptionClassName:i==null?void 0:i.descriptionClassName,invert:r,visibleToasts:rt,closeButton:(A=i==null?void 0:i.closeButton)!=null?A:C,interacting:et,position:c,style:i==null?void 0:i.style,unstyled:i==null?void 0:i.unstyled,classNames:i==null?void 0:i.classNames,cancelButtonStyle:i==null?void 0:i.cancelButtonStyle,actionButtonStyle:i==null?void 0:i.actionButtonStyle,removeToast:U,toasts:I.filter(O=>O.position==m.position),heights:Z.filter(O=>O.position==m.position),setHeights:tt,expandByDefault:E,gap:Q,loadingIcon:it,expanded:S,pauseWhenPageIsHidden:ct,cn:q})})):null}))});0&&(module.exports={Toaster,toast,useSonner});
1
+ "use client";var Jt=Object.create;var rt=Object.defineProperty;var Xt=Object.getOwnPropertyDescriptor;var Gt=Object.getOwnPropertyNames;var Qt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var Zt=(a,e)=>{for(var t in e)rt(a,t,{get:e[t],enumerable:!0})},Dt=(a,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let d of Gt(e))!qt.call(a,d)&&d!==t&&rt(a,d,{get:()=>e[d],enumerable:!(s=Xt(e,d))||s.enumerable});return a};var K=(a,e,t)=>(t=a!=null?Jt(Qt(a)):{},Dt(e||!a||!a.__esModule?rt(t,"default",{value:a,enumerable:!0}):t,a)),te=a=>Dt(rt({},"__esModule",{value:!0}),a);var ve={};Zt(ve,{Toaster:()=>xe,toast:()=>jt,useSonner:()=>ye});module.exports=te(ve);var o=K(require("react")),$t=K(require("react-dom"));var T=K(require("react")),Ht=a=>{switch(a){case"success":return oe;case"info":return ne;case"warning":return ae;case"error":return re;default:return null}},ee=Array(12).fill(0),Mt=({visible:a,className:e})=>T.default.createElement("div",{className:["sonner-loading-wrapper",e].filter(Boolean).join(" "),"data-visible":a},T.default.createElement("div",{className:"sonner-spinner"},ee.map((t,s)=>T.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${s}`})))),oe=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),ae=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),ne=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),re=T.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),At=T.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"},T.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),T.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}));var mt=K(require("react")),Lt=()=>{let[a,e]=mt.default.useState(document.hidden);return mt.default.useEffect(()=>{let t=()=>{e(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),a};var zt=K(require("react")),pt=1,gt=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 C;let{message:t,...s}=e,d=typeof(e==null?void 0:e.id)=="number"||((C=e.id)==null?void 0:C.length)>0?e.id:pt++,l=this.toasts.find(b=>b.id===d),E=e.dismissible===void 0?!0:e.dismissible;return l?this.toasts=this.toasts.map(b=>b.id===d?(this.publish({...b,...e,id:d,title:t}),{...b,...e,id:d,dismissible:E,title:t}):b):this.addToast({title:t,...s,dismissible:E,id:d}),d};this.dismiss=e=>(e||this.toasts.forEach(t=>{this.subscribers.forEach(s=>s({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e);this.message=(e,t)=>this.create({...t,message:e});this.error=(e,t)=>this.create({...t,message:e,type:"error"});this.success=(e,t)=>this.create({...t,type:"success",message:e});this.info=(e,t)=>this.create({...t,type:"info",message:e});this.warning=(e,t)=>this.create({...t,type:"warning",message:e});this.loading=(e,t)=>this.create({...t,type:"loading",message:e});this.promise=(e,t)=>{if(!t)return;let s;t.loading!==void 0&&(s=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let d=e instanceof Promise?e:e(),l=s!==void 0,E,C=d.then(async u=>{if(E=["resolve",u],zt.default.isValidElement(u))l=!1,this.create({id:s,type:"default",message:u});else if(ie(u)&&!u.ok){l=!1;let k=typeof t.error=="function"?await t.error(`HTTP error! status: ${u.status}`):t.error,j=typeof t.description=="function"?await t.description(`HTTP error! status: ${u.status}`):t.description;this.create({id:s,type:"error",message:k,description:j})}else if(t.success!==void 0){l=!1;let k=typeof t.success=="function"?await t.success(u):t.success,j=typeof t.description=="function"?await t.description(u):t.description;this.create({id:s,type:"success",message:k,description:j})}}).catch(async u=>{if(E=["reject",u],t.error!==void 0){l=!1;let y=typeof t.error=="function"?await t.error(u):t.error,k=typeof t.description=="function"?await t.description(u):t.description;this.create({id:s,type:"error",message:y,description:k})}}).finally(()=>{var u;l&&(this.dismiss(s),s=void 0),(u=t.finally)==null||u.call(t)}),b=()=>new Promise((u,y)=>C.then(()=>E[0]==="reject"?y(E[1]):u(E[1])).catch(y));return typeof s!="string"&&typeof s!="number"?{unwrap:b}:Object.assign(s,{unwrap:b})};this.custom=(e,t)=>{let s=(t==null?void 0:t.id)||pt++;return this.create({jsx:e(s),id:s,...t}),s};this.subscribers=[],this.toasts=[]}},R=new gt,se=(a,e)=>{let t=(e==null?void 0:e.id)||pt++;return R.addToast({title:a,...e,id:t}),t},ie=a=>a&&typeof a=="object"&&"ok"in a&&typeof a.ok=="boolean"&&"status"in a&&typeof a.status=="number",le=se,ce=()=>R.toasts,jt=Object.assign(le,{success:R.success,info:R.info,warning:R.warning,error:R.error,custom:R.custom,message:R.message,promise:R.promise,dismiss:R.dismiss,loading:R.loading},{getHistory:ce});function ht(a,{insertAt:e}={}){if(!a||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css",e==="top"&&t.firstChild?t.insertBefore(s,t.firstChild):t.appendChild(s),s.styleSheet?s.styleSheet.cssText=a:s.appendChild(document.createTextNode(a))}ht(`:where(html[dir="ltr"]),:where([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%)}:where(html[dir="rtl"]),:where([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%)}:where([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;transition:transform .4s ease}:where([data-sonner-toaster]:hover){transform:translateY(-10px)}:where([data-sonner-toaster][data-x-position="right"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position="left"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([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)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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;user-select: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][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
2
+ `);function J(a){return a.label!==void 0}var de=3,ue="32px",Yt=4e3,fe=356,me=14,pe=20,ge=200;function he(...a){return a.filter(Boolean).join(" ")}var be=a=>{var vt,wt,Tt,Rt,St,Et,Nt,Pt,Ct,Bt,kt;let{invert:e,toast:t,unstyled:s,interacting:d,setHeights:l,visibleToasts:E,heights:C,index:b,toasts:u,expanded:y,removeToast:k,defaultRichColors:j,closeButton:X,style:st,cancelButtonStyle:i,actionButtonStyle:G,className:Q="",descriptionClassName:it="",duration:W,position:lt,gap:ct,loadingIcon:q,expandByDefault:I,classNames:n,icons:N,closeButtonAriaLabel:Z="Close toast",pauseWhenPageIsHidden:tt,cn:S}=a,[B,et]=o.default.useState(!1),[_,dt]=o.default.useState(!1),[D,H]=o.default.useState(!1),[ot,M]=o.default.useState(!1),[Y,U]=o.default.useState(0),[c,f]=o.default.useState(0),h=o.default.useRef(t.duration||W||Yt),v=o.default.useRef(null),P=o.default.useRef(null),m=b===0,V=b+1<=E,w=t.type,A=t.dismissible!==!1,O=t.className||"",Wt=t.descriptionClassName||"",at=o.default.useMemo(()=>C.findIndex(r=>r.toastId===t.id)||0,[C,t.id]),_t=o.default.useMemo(()=>{var r;return(r=t.closeButton)!=null?r:X},[t.closeButton,X]),we=o.default.useMemo(()=>t.duration||W||Yt,[t.duration,W]),ut=o.default.useRef(0),F=o.default.useRef(0),bt=o.default.useRef(0),nt=o.default.useRef(null),[Ut,Vt]=lt.split("-"),yt=o.default.useMemo(()=>C.reduce((r,p,g)=>g>=at?r:r+p.height,0),[C,at]),xt=Lt(),Ot=t.invert||e,ft=w==="loading";F.current=o.default.useMemo(()=>at*ct+yt,[at,yt]),o.default.useEffect(()=>{et(!0)},[]),o.default.useEffect(()=>{let r=P.current;if(r){let p=r.getBoundingClientRect().height;return f(p),l(g=>[{toastId:t.id,height:p,position:t.position},...g]),()=>l(g=>g.filter(x=>x.toastId!==t.id))}},[l,t.id]),o.default.useLayoutEffect(()=>{if(!B)return;let r=P.current,p=r.style.height;r.style.height="auto";let g=r.getBoundingClientRect().height;r.style.height=p,f(g),l(x=>x.find(z=>z.toastId===t.id)?x.map(z=>z.toastId===t.id?{...z,height:g}:z):[{toastId:t.id,height:g,position:t.position},...x])},[B,t.title,t.description,l,t.id]);let L=o.default.useCallback(()=>{dt(!0),U(F.current),l(r=>r.filter(p=>p.toastId!==t.id)),setTimeout(()=>{k(t)},ge)},[t,k,l,F]);o.default.useEffect(()=>{if(t.promise&&w==="loading"||t.duration===1/0||t.type==="loading")return;let r;return y||d||tt&&xt?(()=>{if(bt.current<ut.current){let x=new Date().getTime()-ut.current;h.current=h.current-x}bt.current=new Date().getTime()})():(()=>{h.current!==1/0&&(ut.current=new Date().getTime(),r=setTimeout(()=>{var x;(x=t.onAutoClose)==null||x.call(t,t),L()},h.current))})(),()=>clearTimeout(r)},[y,d,t,w,tt,xt,L]),o.default.useEffect(()=>{t.delete&&L()},[L,t.delete]);function Kt(){var r,p,g;return N!=null&&N.loading?o.default.createElement("div",{className:S(n==null?void 0:n.loader,(r=t==null?void 0:t.classNames)==null?void 0:r.loader,"sonner-loader"),"data-visible":w==="loading"},N.loading):q?o.default.createElement("div",{className:S(n==null?void 0:n.loader,(p=t==null?void 0:t.classNames)==null?void 0:p.loader,"sonner-loader"),"data-visible":w==="loading"},q):o.default.createElement(Mt,{className:S(n==null?void 0:n.loader,(g=t==null?void 0:t.classNames)==null?void 0:g.loader),visible:w==="loading"})}return o.default.createElement("li",{tabIndex:0,ref:P,className:S(Q,O,n==null?void 0:n.toast,(vt=t==null?void 0:t.classNames)==null?void 0:vt.toast,n==null?void 0:n.default,n==null?void 0:n[w],(wt=t==null?void 0:t.classNames)==null?void 0:wt[w]),"data-sonner-toast":"","data-rich-colors":(Tt=t.richColors)!=null?Tt:j,"data-styled":!(t.jsx||t.unstyled||s),"data-mounted":B,"data-promise":!!t.promise,"data-removed":_,"data-visible":V,"data-y-position":Ut,"data-x-position":Vt,"data-index":b,"data-front":m,"data-swiping":D,"data-dismissible":A,"data-type":w,"data-invert":Ot,"data-swipe-out":ot,"data-expanded":!!(y||I&&B),style:{"--index":b,"--toasts-before":b,"--z-index":u.length-b,"--offset":`${_?Y:F.current}px`,"--initial-height":I?"auto":`${c}px`,...st,...t.style},onPointerDown:r=>{ft||!A||(v.current=new Date,U(F.current),r.target.setPointerCapture(r.pointerId),r.target.tagName!=="BUTTON"&&(H(!0),nt.current={x:r.clientX,y:r.clientY}))},onPointerUp:()=>{var x,$,z,It;if(ot||!A)return;nt.current=null;let r=Number(((x=P.current)==null?void 0:x.style.getPropertyValue("--swipe-amount").replace("px",""))||0),p=new Date().getTime()-(($=v.current)==null?void 0:$.getTime()),g=Math.abs(r)/p;if(Math.abs(r)>=pe||g>.11){U(F.current),(z=t.onDismiss)==null||z.call(t,t),L(),M(!0);return}(It=P.current)==null||It.style.setProperty("--swipe-amount","0px"),H(!1)},onPointerMove:r=>{var x,$;if(!nt.current||!A)return;let p=r.clientY-nt.current.y;((x=window.getSelection())==null?void 0:x.toString().length)>0||($=P.current)==null||$.style.setProperty("--swipe-amount",`${Math.max(0,p)}px`)}},_t&&!t.jsx?o.default.createElement("button",{"aria-label":Z,"data-disabled":ft,"data-close-button":!0,onClick:ft||!A?()=>{}:()=>{var r;L(),(r=t.onDismiss)==null||r.call(t,t)},className:S(n==null?void 0:n.closeButton,(Rt=t==null?void 0:t.classNames)==null?void 0:Rt.closeButton)},(St=N==null?void 0:N.close)!=null?St:At):null,t.jsx||o.default.isValidElement(t.title)?t.jsx?t.jsx:typeof t.title=="function"?t.title():t.title:o.default.createElement(o.default.Fragment,null,w||t.icon||t.promise?o.default.createElement("div",{"data-icon":"",className:S(n==null?void 0:n.icon,(Et=t==null?void 0:t.classNames)==null?void 0:Et.icon)},t.promise||t.type==="loading"&&!t.icon?t.icon||Kt():null,t.type!=="loading"?t.icon||(N==null?void 0:N[w])||Ht(w):null):null,o.default.createElement("div",{"data-content":"",className:S(n==null?void 0:n.content,(Nt=t==null?void 0:t.classNames)==null?void 0:Nt.content)},o.default.createElement("div",{"data-title":"",className:S(n==null?void 0:n.title,(Pt=t==null?void 0:t.classNames)==null?void 0:Pt.title)},typeof t.title=="function"?t.title():t.title),t.description?o.default.createElement("div",{"data-description":"",className:S(it,Wt,n==null?void 0:n.description,(Ct=t==null?void 0:t.classNames)==null?void 0:Ct.description)},typeof t.description=="function"?t.description():t.description):null),o.default.isValidElement(t.cancel)?t.cancel:t.cancel&&J(t.cancel)?o.default.createElement("button",{"data-button":!0,"data-cancel":!0,style:t.cancelButtonStyle||i,onClick:r=>{var p,g;J(t.cancel)&&A&&((g=(p=t.cancel).onClick)==null||g.call(p,r),L())},className:S(n==null?void 0:n.cancelButton,(Bt=t==null?void 0:t.classNames)==null?void 0:Bt.cancelButton)},t.cancel.label):null,o.default.isValidElement(t.action)?t.action:t.action&&J(t.action)?o.default.createElement("button",{"data-button":!0,"data-action":!0,style:t.actionButtonStyle||G,onClick:r=>{var p,g;J(t.action)&&((g=(p=t.action).onClick)==null||g.call(p,r),!r.defaultPrevented&&L())},className:S(n==null?void 0:n.actionButton,(kt=t==null?void 0:t.classNames)==null?void 0:kt.actionButton)},t.action.label):null))};function Ft(){if(typeof window=="undefined"||typeof document=="undefined")return"ltr";let a=document.documentElement.getAttribute("dir");return a==="auto"||!a?window.getComputedStyle(document.documentElement).direction:a}function ye(){let[a,e]=o.default.useState([]);return o.default.useEffect(()=>R.subscribe(t=>{e(s=>{if("dismiss"in t&&t.dismiss)return s.filter(l=>l.id!==t.id);let d=s.findIndex(l=>l.id===t.id);if(d!==-1){let l=[...s];return l[d]={...l[d],...t},l}else return[t,...s]})}),[]),{toasts:a}}var xe=(0,o.forwardRef)(function(e,t){let{invert:s,position:d="bottom-right",hotkey:l=["altKey","KeyT"],expand:E,closeButton:C,className:b,offset:u,theme:y="light",richColors:k,duration:j,style:X,visibleToasts:st=de,toastOptions:i,dir:G=Ft(),gap:Q=me,loadingIcon:it,icons:W,containerAriaLabel:lt="Notifications",pauseWhenPageIsHidden:ct,cn:q=he}=e,[I,n]=o.default.useState([]),N=o.default.useMemo(()=>Array.from(new Set([d].concat(I.filter(c=>c.position).map(c=>c.position)))),[I,d]),[Z,tt]=o.default.useState([]),[S,B]=o.default.useState(!1),[et,_]=o.default.useState(!1),[dt,D]=o.default.useState(y!=="system"?y:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),H=o.default.useRef(null),ot=l.join("+").replace(/Key/g,"").replace(/Digit/g,""),M=o.default.useRef(null),Y=o.default.useRef(!1),U=o.default.useCallback(c=>{n(f=>{var h;return(h=f.find(v=>v.id===c.id))!=null&&h.delete||R.dismiss(c.id),f.filter(({id:v})=>v!==c.id)})},[]);return o.default.useEffect(()=>R.subscribe(c=>{if(c.dismiss){n(f=>f.map(h=>h.id===c.id?{...h,delete:!0}:h));return}setTimeout(()=>{$t.default.flushSync(()=>{n(f=>{let h=f.findIndex(v=>v.id===c.id);return h!==-1?[...f.slice(0,h),{...f[h],...c},...f.slice(h+1)]:[c,...f]})})})}),[]),o.default.useEffect(()=>{if(y!=="system"){D(y);return}if(y==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?D("dark"):D("light")),typeof window=="undefined")return;let c=window.matchMedia("(prefers-color-scheme: dark)");try{c.addEventListener("change",({matches:f})=>{D(f?"dark":"light")})}catch(f){c.addListener(({matches:h})=>{try{D(h?"dark":"light")}catch(v){console.error(v)}})}},[y]),o.default.useEffect(()=>{I.length<=1&&B(!1)},[I]),o.default.useEffect(()=>{let c=f=>{var v,P;l.every(m=>f[m]||f.code===m)&&(B(!0),(v=H.current)==null||v.focus()),f.code==="Escape"&&(document.activeElement===H.current||(P=H.current)!=null&&P.contains(document.activeElement))&&B(!1)};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[l]),o.default.useEffect(()=>{if(H.current)return()=>{M.current&&(M.current.focus({preventScroll:!0}),M.current=null,Y.current=!1)}},[H.current]),o.default.createElement("section",{"aria-label":`${lt} ${ot}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false"},N.map((c,f)=>{var P;let[h,v]=c.split("-");return I.length?o.default.createElement("ol",{key:c,dir:G==="auto"?Ft():G,tabIndex:-1,ref:H,className:b,"data-sonner-toaster":!0,"data-theme":dt,"data-y-position":h,"data-x-position":v,style:{"--front-toast-height":`${((P=Z[0])==null?void 0:P.height)||0}px`,"--offset":typeof u=="number"?`${u}px`:u||ue,"--width":`${fe}px`,"--gap":`${Q}px`,...X},onBlur:m=>{Y.current&&!m.currentTarget.contains(m.relatedTarget)&&(Y.current=!1,M.current&&(M.current.focus({preventScroll:!0}),M.current=null))},onFocus:m=>{m.target instanceof HTMLElement&&m.target.dataset.dismissible==="false"||Y.current||(Y.current=!0,M.current=m.relatedTarget)},onMouseEnter:()=>B(!0),onMouseMove:()=>B(!0),onMouseLeave:()=>{et||B(!1)},onPointerDown:m=>{m.target instanceof HTMLElement&&m.target.dataset.dismissible==="false"||_(!0)},onPointerUp:()=>_(!1)},I.filter(m=>!m.position&&f===0||m.position===c).map((m,V)=>{var w,A;return o.default.createElement(be,{key:m.id,icons:W,index:V,toast:m,defaultRichColors:k,duration:(w=i==null?void 0:i.duration)!=null?w:j,className:i==null?void 0:i.className,descriptionClassName:i==null?void 0:i.descriptionClassName,invert:s,visibleToasts:st,closeButton:(A=i==null?void 0:i.closeButton)!=null?A:C,interacting:et,position:c,style:i==null?void 0:i.style,unstyled:i==null?void 0:i.unstyled,classNames:i==null?void 0:i.classNames,cancelButtonStyle:i==null?void 0:i.cancelButtonStyle,actionButtonStyle:i==null?void 0:i.actionButtonStyle,removeToast:U,toasts:I.filter(O=>O.position==m.position),heights:Z.filter(O=>O.position==m.position),setHeights:tt,expandByDefault:E,gap:Q,loadingIcon:it,expanded:S,pauseWhenPageIsHidden:ct,cn:q})})):null}))});0&&(module.exports={Toaster,toast,useSonner});
3
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/assets.tsx","../src/hooks.tsx","../src/state.ts","#style-inject:#style-inject","../src/styles.css","../src/types.ts"],"sourcesContent":["'use client';\n\nimport React, { forwardRef } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { CloseIcon, getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport { toast, ToastState } from './state';\nimport './styles.css';\nimport {\n isAction,\n type ExternalToast,\n type HeightT,\n type ToasterProps,\n type ToastProps,\n type ToastT,\n type ToastToDismiss,\n} from './types';\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\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 20;\n\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction _cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n defaultRichColors,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n icons,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n cn,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime.current);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, toast, toastType, pauseWhenPageIsHidden, isDocumentHidden, deleteToast]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (icons?.loading) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {icons.loading}\n </div>\n );\n }\n\n if (loadingIconProp) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {loadingIconProp}\n </div>\n );\n }\n return <Loader className={cn(classNames?.loader, toast?.classNames?.loader)} visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.default,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-rich-colors={toast.richColors ?? defaultRichColors}\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const isHighlighted = window.getSelection()?.toString().length > 0;\n\n if (isHighlighted) return;\n\n toastRef.current?.style.setProperty('--swipe-amount', `${Math.max(0, yPosition)}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n {icons?.close ?? CloseIcon}\n </button>\n ) : null}\n {/* TODO: This can be cleaner */}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx ? (\n toast.jsx\n ) : typeof toast.title === 'function' ? (\n toast.title()\n ) : (\n toast.title\n )\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\" className={cn(classNames?.icon, toast?.classNames?.icon)}>\n {toast.promise || (toast.type === 'loading' && !toast.icon) ? toast.icon || getLoadingIcon() : null}\n {toast.type !== 'loading' ? toast.icon || icons?.[toastType] || getAsset(toastType) : null}\n </div>\n ) : null}\n\n <div data-content=\"\" className={cn(classNames?.content, toast?.classNames?.content)}>\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {typeof toast.title === 'function' ? toast.title() : toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {typeof toast.description === 'function' ? toast.description() : toast.description}\n </div>\n ) : null}\n </div>\n {React.isValidElement(toast.cancel) ? (\n toast.cancel\n ) : toast.cancel && isAction(toast.cancel) ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick?.(event);\n deleteToast();\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {React.isValidElement(toast.action) ? (\n toast.action\n ) : toast.action && isAction(toast.action) ? (\n <button\n data-button\n data-action\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick?.(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState<ToastT[]>([]);\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n setActiveToasts((currentToasts) => {\n if ('dismiss' in toast && toast.dismiss) {\n return currentToasts.filter((t) => t.id !== toast.id);\n }\n\n const existingToastIndex = currentToasts.findIndex((t) => t.id === toast.id);\n if (existingToastIndex !== -1) {\n const updatedToasts = [...currentToasts];\n updatedToasts[existingToastIndex] = { ...updatedToasts[existingToastIndex], ...toast };\n return updatedToasts;\n } else {\n return [toast, ...currentToasts];\n }\n });\n });\n }, []);\n\n return {\n toasts: activeToasts,\n };\n}\n\nconst Toaster = forwardRef<HTMLElement, ToasterProps>(function Toaster(props, ref) {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap = GAP,\n loadingIcon,\n icons,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n cn = _cn,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback((toastToRemove: ToastT) => {\n setToasts((toasts) => {\n if (!toasts.find((toast) => toast.id === toastToRemove.id)?.delete) {\n ToastState.dismiss(toastToRemove.id);\n }\n\n return toasts.filter(({ id }) => id !== toastToRemove.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 const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches }) => {\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\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 return (\n // Remove item from normal navigation flow, only available via hotkey\n <section\n aria-label={`${containerAriaLabel} ${hotkeyLabel}`}\n tabIndex={-1}\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n >\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n\n if (!toasts.length) return null;\n\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height || 0}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n icons={icons}\n index={index}\n toast={toast}\n defaultRichColors={richColors}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter((t) => t.position == toast.position)}\n heights={heights.filter((h) => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n cn={cn}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n});\nexport { toast, Toaster, type ExternalToast, type ToastT, type ToasterProps, useSonner };\nexport { type ToastClassnames, type ToastToDismiss, type Action } from './types';\n","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible, className }: { visible: boolean, className?: string }) => {\n return (\n <div className={['sonner-loading-wrapper', className].filter(Boolean).join(' ')} data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nexport const CloseIcon = (\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);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import type { ExternalToast, PromiseData, PromiseT, ToastT, ToastToDismiss, ToastTypes } from './types';\n\nimport React from 'react';\n\nlet toastsCounter = 1;\n\ntype titleT = (() => React.ReactNode) | React.ReactNode;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: titleT;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n let result: ['resolve', ToastData] | ['reject', unknown];\n\n const originalPromise = p\n .then(async (response) => {\n result = ['resolve', response];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({ id, type: 'default', message: response });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const message =\n typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? await data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description =\n typeof data.description === 'function' ? await data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch(async (error) => {\n result = ['reject', error];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n const unwrap = () =>\n new Promise<ToastData>((resolve, reject) =>\n originalPromise.then(() => (result[0] === 'reject' ? reject(result[1]) : resolve(result[1]))).catch(reject),\n );\n\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return { unwrap };\n } else {\n return Object.assign(id, { unwrap });\n }\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: titleT, 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 isHttpResponse = (data: any): data is Response => {\n return (\n data &&\n typeof data === 'object' &&\n 'ok' in data &&\n typeof data.ok === 'boolean' &&\n 'status' in data &&\n typeof data.status === 'number'\n );\n};\n\nconst basicToast = toastFunction;\n\nconst getHistory = () => ToastState.toasts;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(\n basicToast,\n {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n },\n { getHistory },\n);\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(\":where(html[dir=\\\"ltr\\\"]),:where([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%)}:where(html[dir=\\\"rtl\\\"]),:where([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%)}:where([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}:where([data-sonner-toaster][data-x-position=\\\"right\\\"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position=\\\"left\\\"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position=\\\"center\\\"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=\\\"top\\\"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position=\\\"bottom\\\"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=\\\"top\\\"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise=\\\"true\\\"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme=\\\"dark\\\"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=\\\"true\\\"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=\\\"top\\\"][data-swiping=\\\"true\\\"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"][data-swiping=\\\"true\\\"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=\\\"false\\\"][data-removed=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=\\\"true\\\"]){--y: translateY(0);opacity:1}:where([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)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=\\\"false\\\"][data-front=\\\"false\\\"][data-styled=\\\"true\\\"])>*{opacity:0}:where([data-sonner-toast][data-visible=\\\"false\\\"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=\\\"true\\\"][data-expanded=\\\"true\\\"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=\\\"true\\\"][data-front=\\\"true\\\"][data-swipe-out=\\\"false\\\"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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;user-select: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][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","import React from 'react';\n\nexport type ToastTypes = 'normal' | 'action' | 'success' | 'info' | 'warning' | 'error' | 'loading' | 'default';\n\nexport type PromiseT<Data = any> = Promise<Data> | (() => Promise<Data>);\n\nexport type PromiseTResult<Data = any> =\n | string\n | React.ReactNode\n | ((data: Data) => React.ReactNode | string | Promise<React.ReactNode | string>);\n\nexport type PromiseExternalToast = Omit<ExternalToast, 'description'>;\n\nexport type PromiseData<ToastData = any> = PromiseExternalToast & {\n loading?: string | React.ReactNode;\n success?: PromiseTResult<ToastData>;\n error?: PromiseTResult;\n description?: PromiseTResult;\n finally?: () => void | Promise<void>;\n};\n\nexport interface ToastClassnames {\n toast?: string;\n title?: string;\n description?: string;\n loader?: string;\n closeButton?: string;\n cancelButton?: string;\n actionButton?: string;\n success?: string;\n error?: string;\n info?: string;\n warning?: string;\n loading?: string;\n default?: string;\n content?: string;\n icon?: string;\n}\n\nexport interface ToastIcons {\n success?: React.ReactNode;\n info?: React.ReactNode;\n warning?: React.ReactNode;\n error?: React.ReactNode;\n loading?: React.ReactNode;\n close?: React.ReactNode;\n}\n\nexport interface Action {\n label: React.ReactNode;\n onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n actionButtonStyle?: React.CSSProperties;\n}\n\nexport interface ToastT {\n id: number | string;\n title?: (() => React.ReactNode) | React.ReactNode;\n type?: ToastTypes;\n icon?: React.ReactNode;\n jsx?: React.ReactNode;\n richColors?: boolean;\n invert?: boolean;\n closeButton?: boolean;\n dismissible?: boolean;\n description?: (() => React.ReactNode) | React.ReactNode;\n duration?: number;\n delete?: boolean;\n action?: Action | React.ReactNode;\n cancel?: Action | React.ReactNode;\n onDismiss?: (toast: ToastT) => void;\n onAutoClose?: (toast: ToastT) => void;\n promise?: PromiseT;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n unstyled?: boolean;\n className?: string;\n classNames?: ToastClassnames;\n descriptionClassName?: string;\n position?: Position;\n}\n\nexport function isAction(action: Action | React.ReactNode): action is Action {\n return (action as Action).label !== undefined;\n}\n\nexport type Position = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center';\nexport interface HeightT {\n height: number;\n toastId: number | string;\n position: Position;\n}\n\ninterface ToastOptions {\n className?: string;\n closeButton?: boolean;\n descriptionClassName?: string;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n unstyled?: boolean;\n classNames?: ToastClassnames;\n}\n\ntype CnFunction = (...classes: Array<string | undefined>) => string;\n\nexport interface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark' | 'system';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n gap?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: string | number;\n dir?: 'rtl' | 'ltr' | 'auto';\n /**\n * @deprecated Please use the `icons` prop instead:\n * ```jsx\n * <Toaster\n * icons={{ loading: <LoadingIcon /> }}\n * />\n * ```\n */\n loadingIcon?: React.ReactNode;\n icons?: ToastIcons;\n containerAriaLabel?: string;\n pauseWhenPageIsHidden?: boolean;\n cn?: CnFunction;\n}\n\nexport interface 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 gap?: number;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n className?: string;\n unstyled?: boolean;\n descriptionClassName?: string;\n loadingIcon?: React.ReactNode;\n classNames?: ToastClassnames;\n icons?: ToastIcons;\n closeButtonAriaLabel?: string;\n pauseWhenPageIsHidden: boolean;\n cn: CnFunction;\n defaultRichColors?: boolean;\n}\n\nexport enum SwipeStateTypes {\n SwipedOut = 'SwipedOut',\n SwipedBack = 'SwipedBack',\n NotSwiped = 'NotSwiped',\n}\n\nexport type Theme = 'light' | 'dark';\n\nexport interface ToastToDismiss {\n id: number | string;\n dismiss: boolean;\n}\n\nexport type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title' | 'jsx' | 'delete' | 'promise'> & {\n id?: number | string;\n};\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","useSonner","__toCommonJS","import_react","import_react_dom","import_react","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","className","React","_","i","CloseIcon","import_react","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","React","callback","import_react","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","result","originalPromise","response","React","isHttpResponse","description","error","unwrap","resolve","reject","jsx","ToastState","toastFunction","basicToast","getHistory","styleInject","css","insertAt","head","style","styleInject","isAction","action","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","_cn","classes","Toast","props","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","ToasterInvert","toast","unstyled","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","defaultRichColors","closeButtonFromToaster","style","cancelButtonStyle","actionButtonStyle","className","descriptionClassName","durationFromToaster","position","gap","loadingIconProp","expandByDefault","classNames","icons","closeButtonAriaLabel","pauseWhenPageIsHidden","cn","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","remainingTime","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","isDocumentHidden","useIsDocumentHidden","invert","disabled","toastNode","h","originalHeight","newHeight","deleteToast","timeoutId","elapsedTime","getLoadingIcon","Loader","event","swipeAmount","timeTaken","velocity","yPosition","CloseIcon","getAsset","isAction","getDocumentDirection","dirAttribute","useSonner","activeToasts","setActiveToasts","ToastState","currentToasts","t","existingToastIndex","updatedToasts","Toaster","ref","hotkey","expand","theme","richColors","toastOptions","dir","loadingIcon","containerAriaLabel","setToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","id","ReactDOM","indexOfExistingToast","darkMediaQuery","matches","error","e","handleKeyDown","key"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/assets.tsx","../src/hooks.tsx","../src/state.ts","#style-inject:#style-inject","../src/styles.css","../src/types.ts"],"sourcesContent":["'use client';\n\nimport React, { forwardRef } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { CloseIcon, getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport { toast, ToastState } from './state';\nimport './styles.css';\nimport {\n isAction,\n type ExternalToast,\n type HeightT,\n type ToasterProps,\n type ToastProps,\n type ToastT,\n type ToastToDismiss,\n} from './types';\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\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 20;\n\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction _cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n defaultRichColors,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n icons,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n cn,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime.current);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, toast, toastType, pauseWhenPageIsHidden, isDocumentHidden, deleteToast]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (icons?.loading) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {icons.loading}\n </div>\n );\n }\n\n if (loadingIconProp) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {loadingIconProp}\n </div>\n );\n }\n return <Loader className={cn(classNames?.loader, toast?.classNames?.loader)} visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.default,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-rich-colors={toast.richColors ?? defaultRichColors}\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const isHighlighted = window.getSelection()?.toString().length > 0;\n\n if (isHighlighted) return;\n\n toastRef.current?.style.setProperty('--swipe-amount', `${Math.max(0, yPosition)}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n {icons?.close ?? CloseIcon}\n </button>\n ) : null}\n {/* TODO: This can be cleaner */}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx ? (\n toast.jsx\n ) : typeof toast.title === 'function' ? (\n toast.title()\n ) : (\n toast.title\n )\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\" className={cn(classNames?.icon, toast?.classNames?.icon)}>\n {toast.promise || (toast.type === 'loading' && !toast.icon) ? toast.icon || getLoadingIcon() : null}\n {toast.type !== 'loading' ? toast.icon || icons?.[toastType] || getAsset(toastType) : null}\n </div>\n ) : null}\n\n <div data-content=\"\" className={cn(classNames?.content, toast?.classNames?.content)}>\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {typeof toast.title === 'function' ? toast.title() : toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {typeof toast.description === 'function' ? toast.description() : toast.description}\n </div>\n ) : null}\n </div>\n {React.isValidElement(toast.cancel) ? (\n toast.cancel\n ) : toast.cancel && isAction(toast.cancel) ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick?.(event);\n deleteToast();\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {React.isValidElement(toast.action) ? (\n toast.action\n ) : toast.action && isAction(toast.action) ? (\n <button\n data-button\n data-action\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick?.(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState<ToastT[]>([]);\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n setActiveToasts((currentToasts) => {\n if ('dismiss' in toast && toast.dismiss) {\n return currentToasts.filter((t) => t.id !== toast.id);\n }\n\n const existingToastIndex = currentToasts.findIndex((t) => t.id === toast.id);\n if (existingToastIndex !== -1) {\n const updatedToasts = [...currentToasts];\n updatedToasts[existingToastIndex] = { ...updatedToasts[existingToastIndex], ...toast };\n return updatedToasts;\n } else {\n return [toast, ...currentToasts];\n }\n });\n });\n }, []);\n\n return {\n toasts: activeToasts,\n };\n}\n\nconst Toaster = forwardRef<HTMLElement, ToasterProps>(function Toaster(props, ref) {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap = GAP,\n loadingIcon,\n icons,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n cn = _cn,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback((toastToRemove: ToastT) => {\n setToasts((toasts) => {\n if (!toasts.find((toast) => toast.id === toastToRemove.id)?.delete) {\n ToastState.dismiss(toastToRemove.id);\n }\n\n return toasts.filter(({ id }) => id !== toastToRemove.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 const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches }) => {\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\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 return (\n // Remove item from normal navigation flow, only available via hotkey\n <section\n aria-label={`${containerAriaLabel} ${hotkeyLabel}`}\n tabIndex={-1}\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n >\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n\n if (!toasts.length) return null;\n\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height || 0}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n icons={icons}\n index={index}\n toast={toast}\n defaultRichColors={richColors}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter((t) => t.position == toast.position)}\n heights={heights.filter((h) => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n cn={cn}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n});\nexport { toast, Toaster, type ExternalToast, type ToastT, type ToasterProps, useSonner };\nexport { type ToastClassnames, type ToastToDismiss, type Action } from './types';\n","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible, className }: { visible: boolean, className?: string }) => {\n return (\n <div className={['sonner-loading-wrapper', className].filter(Boolean).join(' ')} data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nexport const CloseIcon = (\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);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import type { ExternalToast, PromiseData, PromiseT, ToastT, ToastToDismiss, ToastTypes } from './types';\n\nimport React from 'react';\n\nlet toastsCounter = 1;\n\ntype titleT = (() => React.ReactNode) | React.ReactNode;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: titleT;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n let result: ['resolve', ToastData] | ['reject', unknown];\n\n const originalPromise = p\n .then(async (response) => {\n result = ['resolve', response];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({ id, type: 'default', message: response });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const message =\n typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? await data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description =\n typeof data.description === 'function' ? await data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch(async (error) => {\n result = ['reject', error];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n const unwrap = () =>\n new Promise<ToastData>((resolve, reject) =>\n originalPromise.then(() => (result[0] === 'reject' ? reject(result[1]) : resolve(result[1]))).catch(reject),\n );\n\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return { unwrap };\n } else {\n return Object.assign(id, { unwrap });\n }\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: titleT, 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 isHttpResponse = (data: any): data is Response => {\n return (\n data &&\n typeof data === 'object' &&\n 'ok' in data &&\n typeof data.ok === 'boolean' &&\n 'status' in data &&\n typeof data.status === 'number'\n );\n};\n\nconst basicToast = toastFunction;\n\nconst getHistory = () => ToastState.toasts;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(\n basicToast,\n {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n },\n { getHistory },\n);\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(\":where(html[dir=\\\"ltr\\\"]),:where([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%)}:where(html[dir=\\\"rtl\\\"]),:where([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%)}:where([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;transition:transform .4s ease}:where([data-sonner-toaster]:hover){transform:translateY(-10px)}:where([data-sonner-toaster][data-x-position=\\\"right\\\"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position=\\\"left\\\"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position=\\\"center\\\"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=\\\"top\\\"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position=\\\"bottom\\\"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=\\\"top\\\"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise=\\\"true\\\"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme=\\\"dark\\\"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=\\\"true\\\"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=\\\"top\\\"][data-swiping=\\\"true\\\"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"][data-swiping=\\\"true\\\"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=\\\"false\\\"][data-removed=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=\\\"true\\\"]){--y: translateY(0);opacity:1}:where([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)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=\\\"false\\\"][data-front=\\\"false\\\"][data-styled=\\\"true\\\"])>*{opacity:0}:where([data-sonner-toast][data-visible=\\\"false\\\"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=\\\"true\\\"][data-expanded=\\\"true\\\"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=\\\"true\\\"][data-front=\\\"true\\\"][data-swipe-out=\\\"false\\\"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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;user-select: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][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","import React from 'react';\n\nexport type ToastTypes = 'normal' | 'action' | 'success' | 'info' | 'warning' | 'error' | 'loading' | 'default';\n\nexport type PromiseT<Data = any> = Promise<Data> | (() => Promise<Data>);\n\nexport type PromiseTResult<Data = any> =\n | string\n | React.ReactNode\n | ((data: Data) => React.ReactNode | string | Promise<React.ReactNode | string>);\n\nexport type PromiseExternalToast = Omit<ExternalToast, 'description'>;\n\nexport type PromiseData<ToastData = any> = PromiseExternalToast & {\n loading?: string | React.ReactNode;\n success?: PromiseTResult<ToastData>;\n error?: PromiseTResult;\n description?: PromiseTResult;\n finally?: () => void | Promise<void>;\n};\n\nexport interface ToastClassnames {\n toast?: string;\n title?: string;\n description?: string;\n loader?: string;\n closeButton?: string;\n cancelButton?: string;\n actionButton?: string;\n success?: string;\n error?: string;\n info?: string;\n warning?: string;\n loading?: string;\n default?: string;\n content?: string;\n icon?: string;\n}\n\nexport interface ToastIcons {\n success?: React.ReactNode;\n info?: React.ReactNode;\n warning?: React.ReactNode;\n error?: React.ReactNode;\n loading?: React.ReactNode;\n close?: React.ReactNode;\n}\n\nexport interface Action {\n label: React.ReactNode;\n onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n actionButtonStyle?: React.CSSProperties;\n}\n\nexport interface ToastT {\n id: number | string;\n title?: (() => React.ReactNode) | React.ReactNode;\n type?: ToastTypes;\n icon?: React.ReactNode;\n jsx?: React.ReactNode;\n richColors?: boolean;\n invert?: boolean;\n closeButton?: boolean;\n dismissible?: boolean;\n description?: (() => React.ReactNode) | React.ReactNode;\n duration?: number;\n delete?: boolean;\n action?: Action | React.ReactNode;\n cancel?: Action | React.ReactNode;\n onDismiss?: (toast: ToastT) => void;\n onAutoClose?: (toast: ToastT) => void;\n promise?: PromiseT;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n unstyled?: boolean;\n className?: string;\n classNames?: ToastClassnames;\n descriptionClassName?: string;\n position?: Position;\n}\n\nexport function isAction(action: Action | React.ReactNode): action is Action {\n return (action as Action).label !== undefined;\n}\n\nexport type Position = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center';\nexport interface HeightT {\n height: number;\n toastId: number | string;\n position: Position;\n}\n\ninterface ToastOptions {\n className?: string;\n closeButton?: boolean;\n descriptionClassName?: string;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n unstyled?: boolean;\n classNames?: ToastClassnames;\n}\n\ntype CnFunction = (...classes: Array<string | undefined>) => string;\n\nexport interface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark' | 'system';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n gap?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: string | number;\n dir?: 'rtl' | 'ltr' | 'auto';\n /**\n * @deprecated Please use the `icons` prop instead:\n * ```jsx\n * <Toaster\n * icons={{ loading: <LoadingIcon /> }}\n * />\n * ```\n */\n loadingIcon?: React.ReactNode;\n icons?: ToastIcons;\n containerAriaLabel?: string;\n pauseWhenPageIsHidden?: boolean;\n cn?: CnFunction;\n}\n\nexport interface 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 gap?: number;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n className?: string;\n unstyled?: boolean;\n descriptionClassName?: string;\n loadingIcon?: React.ReactNode;\n classNames?: ToastClassnames;\n icons?: ToastIcons;\n closeButtonAriaLabel?: string;\n pauseWhenPageIsHidden: boolean;\n cn: CnFunction;\n defaultRichColors?: boolean;\n}\n\nexport enum SwipeStateTypes {\n SwipedOut = 'SwipedOut',\n SwipedBack = 'SwipedBack',\n NotSwiped = 'NotSwiped',\n}\n\nexport type Theme = 'light' | 'dark';\n\nexport interface ToastToDismiss {\n id: number | string;\n dismiss: boolean;\n}\n\nexport type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title' | 'jsx' | 'delete' | 'promise'> & {\n id?: number | string;\n};\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","useSonner","__toCommonJS","import_react","import_react_dom","import_react","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","className","React","_","i","CloseIcon","import_react","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","React","callback","import_react","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","result","originalPromise","response","React","isHttpResponse","description","error","unwrap","resolve","reject","jsx","ToastState","toastFunction","basicToast","getHistory","styleInject","css","insertAt","head","style","styleInject","isAction","action","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","_cn","classes","Toast","props","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","ToasterInvert","toast","unstyled","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","defaultRichColors","closeButtonFromToaster","style","cancelButtonStyle","actionButtonStyle","className","descriptionClassName","durationFromToaster","position","gap","loadingIconProp","expandByDefault","classNames","icons","closeButtonAriaLabel","pauseWhenPageIsHidden","cn","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","remainingTime","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","isDocumentHidden","useIsDocumentHidden","invert","disabled","toastNode","h","originalHeight","newHeight","deleteToast","timeoutId","elapsedTime","getLoadingIcon","Loader","event","swipeAmount","timeTaken","velocity","yPosition","CloseIcon","getAsset","isAction","getDocumentDirection","dirAttribute","useSonner","activeToasts","setActiveToasts","ToastState","currentToasts","t","existingToastIndex","updatedToasts","Toaster","ref","hotkey","expand","theme","richColors","toastOptions","dir","loadingIcon","containerAriaLabel","setToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","id","ReactDOM","indexOfExistingToast","darkMediaQuery","matches","error","e","handleKeyDown","key"]}
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
- "use client";import e,{forwardRef as Zt}from"react";import te from"react-dom";import R from"react";var Bt=r=>{switch(r){case"success":return _t;case"info":return Vt;case"warning":return Ut;case"error":return Ot;default:return null}},Wt=Array(12).fill(0),kt=({visible:r,className:o})=>R.createElement("div",{className:["sonner-loading-wrapper",o].filter(Boolean).join(" "),"data-visible":r},R.createElement("div",{className:"sonner-spinner"},Wt.map((t,s)=>R.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${s}`})))),_t=R.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},R.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"})),Ut=R.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},R.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Vt=R.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},R.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),Ot=R.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},R.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"})),It=R.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"},R.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),R.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}));import Dt from"react";var Ht=()=>{let[r,o]=Dt.useState(document.hidden);return Dt.useEffect(()=>{let t=()=>{o(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),r};import Kt from"react";var ut=1,ft=class{constructor(){this.subscribe=o=>(this.subscribers.push(o),()=>{let t=this.subscribers.indexOf(o);this.subscribers.splice(t,1)});this.publish=o=>{this.subscribers.forEach(t=>t(o))};this.addToast=o=>{this.publish(o),this.toasts=[...this.toasts,o]};this.create=o=>{var C;let{message:t,...s}=o,h=typeof(o==null?void 0:o.id)=="number"||((C=o.id)==null?void 0:C.length)>0?o.id:ut++,l=this.toasts.find(b=>b.id===h),E=o.dismissible===void 0?!0:o.dismissible;return l?this.toasts=this.toasts.map(b=>b.id===h?(this.publish({...b,...o,id:h,title:t}),{...b,...o,id:h,dismissible:E,title:t}):b):this.addToast({title:t,...s,dismissible:E,id:h}),h};this.dismiss=o=>(o||this.toasts.forEach(t=>{this.subscribers.forEach(s=>s({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:o,dismiss:!0})),o);this.message=(o,t)=>this.create({...t,message:o});this.error=(o,t)=>this.create({...t,message:o,type:"error"});this.success=(o,t)=>this.create({...t,type:"success",message:o});this.info=(o,t)=>this.create({...t,type:"info",message:o});this.warning=(o,t)=>this.create({...t,type:"warning",message:o});this.loading=(o,t)=>this.create({...t,type:"loading",message:o});this.promise=(o,t)=>{if(!t)return;let s;t.loading!==void 0&&(s=this.create({...t,promise:o,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let h=o instanceof Promise?o:o(),l=s!==void 0,E,C=h.then(async d=>{if(E=["resolve",d],Kt.isValidElement(d))l=!1,this.create({id:s,type:"default",message:d});else if(Xt(d)&&!d.ok){l=!1;let k=typeof t.error=="function"?await t.error(`HTTP error! status: ${d.status}`):t.error,j=typeof t.description=="function"?await t.description(`HTTP error! status: ${d.status}`):t.description;this.create({id:s,type:"error",message:k,description:j})}else if(t.success!==void 0){l=!1;let k=typeof t.success=="function"?await t.success(d):t.success,j=typeof t.description=="function"?await t.description(d):t.description;this.create({id:s,type:"success",message:k,description:j})}}).catch(async d=>{if(E=["reject",d],t.error!==void 0){l=!1;let y=typeof t.error=="function"?await t.error(d):t.error,k=typeof t.description=="function"?await t.description(d):t.description;this.create({id:s,type:"error",message:y,description:k})}}).finally(()=>{var d;l&&(this.dismiss(s),s=void 0),(d=t.finally)==null||d.call(t)}),b=()=>new Promise((d,y)=>C.then(()=>E[0]==="reject"?y(E[1]):d(E[1])).catch(y));return typeof s!="string"&&typeof s!="number"?{unwrap:b}:Object.assign(s,{unwrap:b})};this.custom=(o,t)=>{let s=(t==null?void 0:t.id)||ut++;return this.create({jsx:o(s),id:s,...t}),s};this.subscribers=[],this.toasts=[]}},T=new ft,Jt=(r,o)=>{let t=(o==null?void 0:o.id)||ut++;return T.addToast({title:r,...o,id:t}),t},Xt=r=>r&&typeof r=="object"&&"ok"in r&&typeof r.ok=="boolean"&&"status"in r&&typeof r.status=="number",Gt=Jt,Qt=()=>T.toasts,qt=Object.assign(Gt,{success:T.success,info:T.info,warning:T.warning,error:T.error,custom:T.custom,message:T.message,promise:T.promise,dismiss:T.dismiss,loading:T.loading},{getHistory:Qt});function mt(r,{insertAt:o}={}){if(!r||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],s=document.createElement("style");s.type="text/css",o==="top"&&t.firstChild?t.insertBefore(s,t.firstChild):t.appendChild(s),s.styleSheet?s.styleSheet.cssText=r:s.appendChild(document.createTextNode(r))}mt(`:where(html[dir="ltr"]),:where([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%)}:where(html[dir="rtl"]),:where([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%)}:where([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}:where([data-sonner-toaster][data-x-position="right"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position="left"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([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)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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;user-select: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][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
2
- `);function K(r){return r.label!==void 0}var ee=3,oe="32px",Mt=4e3,ae=356,ne=14,se=20,re=200;function ie(...r){return r.filter(Boolean).join(" ")}var le=r=>{var bt,yt,xt,vt,wt,Tt,Rt,St,Et,Nt,Pt;let{invert:o,toast:t,unstyled:s,interacting:h,setHeights:l,visibleToasts:E,heights:C,index:b,toasts:d,expanded:y,removeToast:k,defaultRichColors:j,closeButton:J,style:nt,cancelButtonStyle:i,actionButtonStyle:X,className:G="",descriptionClassName:st="",duration:W,position:rt,gap:it,loadingIcon:Q,expandByDefault:I,classNames:a,icons:N,closeButtonAriaLabel:q="Close toast",pauseWhenPageIsHidden:Z,cn:S}=r,[B,tt]=e.useState(!1),[_,lt]=e.useState(!1),[D,H]=e.useState(!1),[et,M]=e.useState(!1),[Y,U]=e.useState(0),[c,u]=e.useState(0),g=e.useRef(t.duration||W||Mt),v=e.useRef(null),P=e.useRef(null),f=b===0,V=b+1<=E,w=t.type,A=t.dismissible!==!1,O=t.className||"",Lt=t.descriptionClassName||"",ot=e.useMemo(()=>C.findIndex(n=>n.toastId===t.id)||0,[C,t.id]),zt=e.useMemo(()=>{var n;return(n=t.closeButton)!=null?n:J},[t.closeButton,J]),ce=e.useMemo(()=>t.duration||W||Mt,[t.duration,W]),ct=e.useRef(0),F=e.useRef(0),pt=e.useRef(0),at=e.useRef(null),[jt,Yt]=rt.split("-"),gt=e.useMemo(()=>C.reduce((n,m,p)=>p>=ot?n:n+m.height,0),[C,ot]),ht=Ht(),Ft=t.invert||o,dt=w==="loading";F.current=e.useMemo(()=>ot*it+gt,[ot,gt]),e.useEffect(()=>{tt(!0)},[]),e.useEffect(()=>{let n=P.current;if(n){let m=n.getBoundingClientRect().height;return u(m),l(p=>[{toastId:t.id,height:m,position:t.position},...p]),()=>l(p=>p.filter(x=>x.toastId!==t.id))}},[l,t.id]),e.useLayoutEffect(()=>{if(!B)return;let n=P.current,m=n.style.height;n.style.height="auto";let p=n.getBoundingClientRect().height;n.style.height=m,u(p),l(x=>x.find(z=>z.toastId===t.id)?x.map(z=>z.toastId===t.id?{...z,height:p}:z):[{toastId:t.id,height:p,position:t.position},...x])},[B,t.title,t.description,l,t.id]);let L=e.useCallback(()=>{lt(!0),U(F.current),l(n=>n.filter(m=>m.toastId!==t.id)),setTimeout(()=>{k(t)},re)},[t,k,l,F]);e.useEffect(()=>{if(t.promise&&w==="loading"||t.duration===1/0||t.type==="loading")return;let n;return y||h||Z&&ht?(()=>{if(pt.current<ct.current){let x=new Date().getTime()-ct.current;g.current=g.current-x}pt.current=new Date().getTime()})():(()=>{g.current!==1/0&&(ct.current=new Date().getTime(),n=setTimeout(()=>{var x;(x=t.onAutoClose)==null||x.call(t,t),L()},g.current))})(),()=>clearTimeout(n)},[y,h,t,w,Z,ht,L]),e.useEffect(()=>{t.delete&&L()},[L,t.delete]);function $t(){var n,m,p;return N!=null&&N.loading?e.createElement("div",{className:S(a==null?void 0:a.loader,(n=t==null?void 0:t.classNames)==null?void 0:n.loader,"sonner-loader"),"data-visible":w==="loading"},N.loading):Q?e.createElement("div",{className:S(a==null?void 0:a.loader,(m=t==null?void 0:t.classNames)==null?void 0:m.loader,"sonner-loader"),"data-visible":w==="loading"},Q):e.createElement(kt,{className:S(a==null?void 0:a.loader,(p=t==null?void 0:t.classNames)==null?void 0:p.loader),visible:w==="loading"})}return e.createElement("li",{tabIndex:0,ref:P,className:S(G,O,a==null?void 0:a.toast,(bt=t==null?void 0:t.classNames)==null?void 0:bt.toast,a==null?void 0:a.default,a==null?void 0:a[w],(yt=t==null?void 0:t.classNames)==null?void 0:yt[w]),"data-sonner-toast":"","data-rich-colors":(xt=t.richColors)!=null?xt:j,"data-styled":!(t.jsx||t.unstyled||s),"data-mounted":B,"data-promise":!!t.promise,"data-removed":_,"data-visible":V,"data-y-position":jt,"data-x-position":Yt,"data-index":b,"data-front":f,"data-swiping":D,"data-dismissible":A,"data-type":w,"data-invert":Ft,"data-swipe-out":et,"data-expanded":!!(y||I&&B),style:{"--index":b,"--toasts-before":b,"--z-index":d.length-b,"--offset":`${_?Y:F.current}px`,"--initial-height":I?"auto":`${c}px`,...nt,...t.style},onPointerDown:n=>{dt||!A||(v.current=new Date,U(F.current),n.target.setPointerCapture(n.pointerId),n.target.tagName!=="BUTTON"&&(H(!0),at.current={x:n.clientX,y:n.clientY}))},onPointerUp:()=>{var x,$,z,Ct;if(et||!A)return;at.current=null;let n=Number(((x=P.current)==null?void 0:x.style.getPropertyValue("--swipe-amount").replace("px",""))||0),m=new Date().getTime()-(($=v.current)==null?void 0:$.getTime()),p=Math.abs(n)/m;if(Math.abs(n)>=se||p>.11){U(F.current),(z=t.onDismiss)==null||z.call(t,t),L(),M(!0);return}(Ct=P.current)==null||Ct.style.setProperty("--swipe-amount","0px"),H(!1)},onPointerMove:n=>{var x,$;if(!at.current||!A)return;let m=n.clientY-at.current.y;((x=window.getSelection())==null?void 0:x.toString().length)>0||($=P.current)==null||$.style.setProperty("--swipe-amount",`${Math.max(0,m)}px`)}},zt&&!t.jsx?e.createElement("button",{"aria-label":q,"data-disabled":dt,"data-close-button":!0,onClick:dt||!A?()=>{}:()=>{var n;L(),(n=t.onDismiss)==null||n.call(t,t)},className:S(a==null?void 0:a.closeButton,(vt=t==null?void 0:t.classNames)==null?void 0:vt.closeButton)},(wt=N==null?void 0:N.close)!=null?wt:It):null,t.jsx||e.isValidElement(t.title)?t.jsx?t.jsx:typeof t.title=="function"?t.title():t.title:e.createElement(e.Fragment,null,w||t.icon||t.promise?e.createElement("div",{"data-icon":"",className:S(a==null?void 0:a.icon,(Tt=t==null?void 0:t.classNames)==null?void 0:Tt.icon)},t.promise||t.type==="loading"&&!t.icon?t.icon||$t():null,t.type!=="loading"?t.icon||(N==null?void 0:N[w])||Bt(w):null):null,e.createElement("div",{"data-content":"",className:S(a==null?void 0:a.content,(Rt=t==null?void 0:t.classNames)==null?void 0:Rt.content)},e.createElement("div",{"data-title":"",className:S(a==null?void 0:a.title,(St=t==null?void 0:t.classNames)==null?void 0:St.title)},typeof t.title=="function"?t.title():t.title),t.description?e.createElement("div",{"data-description":"",className:S(st,Lt,a==null?void 0:a.description,(Et=t==null?void 0:t.classNames)==null?void 0:Et.description)},typeof t.description=="function"?t.description():t.description):null),e.isValidElement(t.cancel)?t.cancel:t.cancel&&K(t.cancel)?e.createElement("button",{"data-button":!0,"data-cancel":!0,style:t.cancelButtonStyle||i,onClick:n=>{var m,p;K(t.cancel)&&A&&((p=(m=t.cancel).onClick)==null||p.call(m,n),L())},className:S(a==null?void 0:a.cancelButton,(Nt=t==null?void 0:t.classNames)==null?void 0:Nt.cancelButton)},t.cancel.label):null,e.isValidElement(t.action)?t.action:t.action&&K(t.action)?e.createElement("button",{"data-button":!0,"data-action":!0,style:t.actionButtonStyle||X,onClick:n=>{var m,p;K(t.action)&&((p=(m=t.action).onClick)==null||p.call(m,n),!n.defaultPrevented&&L())},className:S(a==null?void 0:a.actionButton,(Pt=t==null?void 0:t.classNames)==null?void 0:Pt.actionButton)},t.action.label):null))};function At(){if(typeof window=="undefined"||typeof document=="undefined")return"ltr";let r=document.documentElement.getAttribute("dir");return r==="auto"||!r?window.getComputedStyle(document.documentElement).direction:r}function Ne(){let[r,o]=e.useState([]);return e.useEffect(()=>T.subscribe(t=>{o(s=>{if("dismiss"in t&&t.dismiss)return s.filter(l=>l.id!==t.id);let h=s.findIndex(l=>l.id===t.id);if(h!==-1){let l=[...s];return l[h]={...l[h],...t},l}else return[t,...s]})}),[]),{toasts:r}}var Pe=Zt(function(o,t){let{invert:s,position:h="bottom-right",hotkey:l=["altKey","KeyT"],expand:E,closeButton:C,className:b,offset:d,theme:y="light",richColors:k,duration:j,style:J,visibleToasts:nt=ee,toastOptions:i,dir:X=At(),gap:G=ne,loadingIcon:st,icons:W,containerAriaLabel:rt="Notifications",pauseWhenPageIsHidden:it,cn:Q=ie}=o,[I,a]=e.useState([]),N=e.useMemo(()=>Array.from(new Set([h].concat(I.filter(c=>c.position).map(c=>c.position)))),[I,h]),[q,Z]=e.useState([]),[S,B]=e.useState(!1),[tt,_]=e.useState(!1),[lt,D]=e.useState(y!=="system"?y:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),H=e.useRef(null),et=l.join("+").replace(/Key/g,"").replace(/Digit/g,""),M=e.useRef(null),Y=e.useRef(!1),U=e.useCallback(c=>{a(u=>{var g;return(g=u.find(v=>v.id===c.id))!=null&&g.delete||T.dismiss(c.id),u.filter(({id:v})=>v!==c.id)})},[]);return e.useEffect(()=>T.subscribe(c=>{if(c.dismiss){a(u=>u.map(g=>g.id===c.id?{...g,delete:!0}:g));return}setTimeout(()=>{te.flushSync(()=>{a(u=>{let g=u.findIndex(v=>v.id===c.id);return g!==-1?[...u.slice(0,g),{...u[g],...c},...u.slice(g+1)]:[c,...u]})})})}),[]),e.useEffect(()=>{if(y!=="system"){D(y);return}if(y==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?D("dark"):D("light")),typeof window=="undefined")return;let c=window.matchMedia("(prefers-color-scheme: dark)");try{c.addEventListener("change",({matches:u})=>{D(u?"dark":"light")})}catch(u){c.addListener(({matches:g})=>{try{D(g?"dark":"light")}catch(v){console.error(v)}})}},[y]),e.useEffect(()=>{I.length<=1&&B(!1)},[I]),e.useEffect(()=>{let c=u=>{var v,P;l.every(f=>u[f]||u.code===f)&&(B(!0),(v=H.current)==null||v.focus()),u.code==="Escape"&&(document.activeElement===H.current||(P=H.current)!=null&&P.contains(document.activeElement))&&B(!1)};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[l]),e.useEffect(()=>{if(H.current)return()=>{M.current&&(M.current.focus({preventScroll:!0}),M.current=null,Y.current=!1)}},[H.current]),e.createElement("section",{"aria-label":`${rt} ${et}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false"},N.map((c,u)=>{var P;let[g,v]=c.split("-");return I.length?e.createElement("ol",{key:c,dir:X==="auto"?At():X,tabIndex:-1,ref:H,className:b,"data-sonner-toaster":!0,"data-theme":lt,"data-y-position":g,"data-x-position":v,style:{"--front-toast-height":`${((P=q[0])==null?void 0:P.height)||0}px`,"--offset":typeof d=="number"?`${d}px`:d||oe,"--width":`${ae}px`,"--gap":`${G}px`,...J},onBlur:f=>{Y.current&&!f.currentTarget.contains(f.relatedTarget)&&(Y.current=!1,M.current&&(M.current.focus({preventScroll:!0}),M.current=null))},onFocus:f=>{f.target instanceof HTMLElement&&f.target.dataset.dismissible==="false"||Y.current||(Y.current=!0,M.current=f.relatedTarget)},onMouseEnter:()=>B(!0),onMouseMove:()=>B(!0),onMouseLeave:()=>{tt||B(!1)},onPointerDown:f=>{f.target instanceof HTMLElement&&f.target.dataset.dismissible==="false"||_(!0)},onPointerUp:()=>_(!1)},I.filter(f=>!f.position&&u===0||f.position===c).map((f,V)=>{var w,A;return e.createElement(le,{key:f.id,icons:W,index:V,toast:f,defaultRichColors:k,duration:(w=i==null?void 0:i.duration)!=null?w:j,className:i==null?void 0:i.className,descriptionClassName:i==null?void 0:i.descriptionClassName,invert:s,visibleToasts:nt,closeButton:(A=i==null?void 0:i.closeButton)!=null?A:C,interacting:tt,position:c,style:i==null?void 0:i.style,unstyled:i==null?void 0:i.unstyled,classNames:i==null?void 0:i.classNames,cancelButtonStyle:i==null?void 0:i.cancelButtonStyle,actionButtonStyle:i==null?void 0:i.actionButtonStyle,removeToast:U,toasts:I.filter(O=>O.position==f.position),heights:q.filter(O=>O.position==f.position),setHeights:Z,expandByDefault:E,gap:G,loadingIcon:st,expanded:S,pauseWhenPageIsHidden:it,cn:Q})})):null}))});export{Pe as Toaster,qt as toast,Ne as useSonner};
1
+ "use client";import e,{forwardRef as Zt}from"react";import te from"react-dom";import R from"react";var Bt=s=>{switch(s){case"success":return _t;case"info":return Vt;case"warning":return Ut;case"error":return Ot;default:return null}},Wt=Array(12).fill(0),kt=({visible:s,className:o})=>R.createElement("div",{className:["sonner-loading-wrapper",o].filter(Boolean).join(" "),"data-visible":s},R.createElement("div",{className:"sonner-spinner"},Wt.map((t,r)=>R.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${r}`})))),_t=R.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},R.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"})),Ut=R.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},R.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),Vt=R.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},R.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),Ot=R.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},R.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"})),It=R.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"},R.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),R.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}));import Dt from"react";var Ht=()=>{let[s,o]=Dt.useState(document.hidden);return Dt.useEffect(()=>{let t=()=>{o(document.hidden)};return document.addEventListener("visibilitychange",t),()=>window.removeEventListener("visibilitychange",t)},[]),s};import Kt from"react";var ut=1,ft=class{constructor(){this.subscribe=o=>(this.subscribers.push(o),()=>{let t=this.subscribers.indexOf(o);this.subscribers.splice(t,1)});this.publish=o=>{this.subscribers.forEach(t=>t(o))};this.addToast=o=>{this.publish(o),this.toasts=[...this.toasts,o]};this.create=o=>{var C;let{message:t,...r}=o,h=typeof(o==null?void 0:o.id)=="number"||((C=o.id)==null?void 0:C.length)>0?o.id:ut++,l=this.toasts.find(b=>b.id===h),E=o.dismissible===void 0?!0:o.dismissible;return l?this.toasts=this.toasts.map(b=>b.id===h?(this.publish({...b,...o,id:h,title:t}),{...b,...o,id:h,dismissible:E,title:t}):b):this.addToast({title:t,...r,dismissible:E,id:h}),h};this.dismiss=o=>(o||this.toasts.forEach(t=>{this.subscribers.forEach(r=>r({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:o,dismiss:!0})),o);this.message=(o,t)=>this.create({...t,message:o});this.error=(o,t)=>this.create({...t,message:o,type:"error"});this.success=(o,t)=>this.create({...t,type:"success",message:o});this.info=(o,t)=>this.create({...t,type:"info",message:o});this.warning=(o,t)=>this.create({...t,type:"warning",message:o});this.loading=(o,t)=>this.create({...t,type:"loading",message:o});this.promise=(o,t)=>{if(!t)return;let r;t.loading!==void 0&&(r=this.create({...t,promise:o,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let h=o instanceof Promise?o:o(),l=r!==void 0,E,C=h.then(async d=>{if(E=["resolve",d],Kt.isValidElement(d))l=!1,this.create({id:r,type:"default",message:d});else if(Xt(d)&&!d.ok){l=!1;let k=typeof t.error=="function"?await t.error(`HTTP error! status: ${d.status}`):t.error,j=typeof t.description=="function"?await t.description(`HTTP error! status: ${d.status}`):t.description;this.create({id:r,type:"error",message:k,description:j})}else if(t.success!==void 0){l=!1;let k=typeof t.success=="function"?await t.success(d):t.success,j=typeof t.description=="function"?await t.description(d):t.description;this.create({id:r,type:"success",message:k,description:j})}}).catch(async d=>{if(E=["reject",d],t.error!==void 0){l=!1;let y=typeof t.error=="function"?await t.error(d):t.error,k=typeof t.description=="function"?await t.description(d):t.description;this.create({id:r,type:"error",message:y,description:k})}}).finally(()=>{var d;l&&(this.dismiss(r),r=void 0),(d=t.finally)==null||d.call(t)}),b=()=>new Promise((d,y)=>C.then(()=>E[0]==="reject"?y(E[1]):d(E[1])).catch(y));return typeof r!="string"&&typeof r!="number"?{unwrap:b}:Object.assign(r,{unwrap:b})};this.custom=(o,t)=>{let r=(t==null?void 0:t.id)||ut++;return this.create({jsx:o(r),id:r,...t}),r};this.subscribers=[],this.toasts=[]}},T=new ft,Jt=(s,o)=>{let t=(o==null?void 0:o.id)||ut++;return T.addToast({title:s,...o,id:t}),t},Xt=s=>s&&typeof s=="object"&&"ok"in s&&typeof s.ok=="boolean"&&"status"in s&&typeof s.status=="number",Gt=Jt,Qt=()=>T.toasts,qt=Object.assign(Gt,{success:T.success,info:T.info,warning:T.warning,error:T.error,custom:T.custom,message:T.message,promise:T.promise,dismiss:T.dismiss,loading:T.loading},{getHistory:Qt});function mt(s,{insertAt:o}={}){if(!s||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",o==="top"&&t.firstChild?t.insertBefore(r,t.firstChild):t.appendChild(r),r.styleSheet?r.styleSheet.cssText=s:r.appendChild(document.createTextNode(s))}mt(`:where(html[dir="ltr"]),:where([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%)}:where(html[dir="rtl"]),:where([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%)}:where([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;transition:transform .4s ease}:where([data-sonner-toaster]:hover){transform:translateY(-10px)}:where([data-sonner-toaster][data-x-position="right"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position="left"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([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)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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;user-select: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][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
2
+ `);function K(s){return s.label!==void 0}var ee=3,oe="32px",Mt=4e3,ae=356,ne=14,re=20,se=200;function ie(...s){return s.filter(Boolean).join(" ")}var le=s=>{var bt,yt,xt,vt,wt,Tt,Rt,St,Et,Nt,Pt;let{invert:o,toast:t,unstyled:r,interacting:h,setHeights:l,visibleToasts:E,heights:C,index:b,toasts:d,expanded:y,removeToast:k,defaultRichColors:j,closeButton:J,style:nt,cancelButtonStyle:i,actionButtonStyle:X,className:G="",descriptionClassName:rt="",duration:W,position:st,gap:it,loadingIcon:Q,expandByDefault:I,classNames:a,icons:N,closeButtonAriaLabel:q="Close toast",pauseWhenPageIsHidden:Z,cn:S}=s,[B,tt]=e.useState(!1),[_,lt]=e.useState(!1),[D,H]=e.useState(!1),[et,M]=e.useState(!1),[Y,U]=e.useState(0),[c,u]=e.useState(0),g=e.useRef(t.duration||W||Mt),v=e.useRef(null),P=e.useRef(null),f=b===0,V=b+1<=E,w=t.type,A=t.dismissible!==!1,O=t.className||"",Lt=t.descriptionClassName||"",ot=e.useMemo(()=>C.findIndex(n=>n.toastId===t.id)||0,[C,t.id]),zt=e.useMemo(()=>{var n;return(n=t.closeButton)!=null?n:J},[t.closeButton,J]),ce=e.useMemo(()=>t.duration||W||Mt,[t.duration,W]),ct=e.useRef(0),F=e.useRef(0),pt=e.useRef(0),at=e.useRef(null),[jt,Yt]=st.split("-"),gt=e.useMemo(()=>C.reduce((n,m,p)=>p>=ot?n:n+m.height,0),[C,ot]),ht=Ht(),Ft=t.invert||o,dt=w==="loading";F.current=e.useMemo(()=>ot*it+gt,[ot,gt]),e.useEffect(()=>{tt(!0)},[]),e.useEffect(()=>{let n=P.current;if(n){let m=n.getBoundingClientRect().height;return u(m),l(p=>[{toastId:t.id,height:m,position:t.position},...p]),()=>l(p=>p.filter(x=>x.toastId!==t.id))}},[l,t.id]),e.useLayoutEffect(()=>{if(!B)return;let n=P.current,m=n.style.height;n.style.height="auto";let p=n.getBoundingClientRect().height;n.style.height=m,u(p),l(x=>x.find(z=>z.toastId===t.id)?x.map(z=>z.toastId===t.id?{...z,height:p}:z):[{toastId:t.id,height:p,position:t.position},...x])},[B,t.title,t.description,l,t.id]);let L=e.useCallback(()=>{lt(!0),U(F.current),l(n=>n.filter(m=>m.toastId!==t.id)),setTimeout(()=>{k(t)},se)},[t,k,l,F]);e.useEffect(()=>{if(t.promise&&w==="loading"||t.duration===1/0||t.type==="loading")return;let n;return y||h||Z&&ht?(()=>{if(pt.current<ct.current){let x=new Date().getTime()-ct.current;g.current=g.current-x}pt.current=new Date().getTime()})():(()=>{g.current!==1/0&&(ct.current=new Date().getTime(),n=setTimeout(()=>{var x;(x=t.onAutoClose)==null||x.call(t,t),L()},g.current))})(),()=>clearTimeout(n)},[y,h,t,w,Z,ht,L]),e.useEffect(()=>{t.delete&&L()},[L,t.delete]);function $t(){var n,m,p;return N!=null&&N.loading?e.createElement("div",{className:S(a==null?void 0:a.loader,(n=t==null?void 0:t.classNames)==null?void 0:n.loader,"sonner-loader"),"data-visible":w==="loading"},N.loading):Q?e.createElement("div",{className:S(a==null?void 0:a.loader,(m=t==null?void 0:t.classNames)==null?void 0:m.loader,"sonner-loader"),"data-visible":w==="loading"},Q):e.createElement(kt,{className:S(a==null?void 0:a.loader,(p=t==null?void 0:t.classNames)==null?void 0:p.loader),visible:w==="loading"})}return e.createElement("li",{tabIndex:0,ref:P,className:S(G,O,a==null?void 0:a.toast,(bt=t==null?void 0:t.classNames)==null?void 0:bt.toast,a==null?void 0:a.default,a==null?void 0:a[w],(yt=t==null?void 0:t.classNames)==null?void 0:yt[w]),"data-sonner-toast":"","data-rich-colors":(xt=t.richColors)!=null?xt:j,"data-styled":!(t.jsx||t.unstyled||r),"data-mounted":B,"data-promise":!!t.promise,"data-removed":_,"data-visible":V,"data-y-position":jt,"data-x-position":Yt,"data-index":b,"data-front":f,"data-swiping":D,"data-dismissible":A,"data-type":w,"data-invert":Ft,"data-swipe-out":et,"data-expanded":!!(y||I&&B),style:{"--index":b,"--toasts-before":b,"--z-index":d.length-b,"--offset":`${_?Y:F.current}px`,"--initial-height":I?"auto":`${c}px`,...nt,...t.style},onPointerDown:n=>{dt||!A||(v.current=new Date,U(F.current),n.target.setPointerCapture(n.pointerId),n.target.tagName!=="BUTTON"&&(H(!0),at.current={x:n.clientX,y:n.clientY}))},onPointerUp:()=>{var x,$,z,Ct;if(et||!A)return;at.current=null;let n=Number(((x=P.current)==null?void 0:x.style.getPropertyValue("--swipe-amount").replace("px",""))||0),m=new Date().getTime()-(($=v.current)==null?void 0:$.getTime()),p=Math.abs(n)/m;if(Math.abs(n)>=re||p>.11){U(F.current),(z=t.onDismiss)==null||z.call(t,t),L(),M(!0);return}(Ct=P.current)==null||Ct.style.setProperty("--swipe-amount","0px"),H(!1)},onPointerMove:n=>{var x,$;if(!at.current||!A)return;let m=n.clientY-at.current.y;((x=window.getSelection())==null?void 0:x.toString().length)>0||($=P.current)==null||$.style.setProperty("--swipe-amount",`${Math.max(0,m)}px`)}},zt&&!t.jsx?e.createElement("button",{"aria-label":q,"data-disabled":dt,"data-close-button":!0,onClick:dt||!A?()=>{}:()=>{var n;L(),(n=t.onDismiss)==null||n.call(t,t)},className:S(a==null?void 0:a.closeButton,(vt=t==null?void 0:t.classNames)==null?void 0:vt.closeButton)},(wt=N==null?void 0:N.close)!=null?wt:It):null,t.jsx||e.isValidElement(t.title)?t.jsx?t.jsx:typeof t.title=="function"?t.title():t.title:e.createElement(e.Fragment,null,w||t.icon||t.promise?e.createElement("div",{"data-icon":"",className:S(a==null?void 0:a.icon,(Tt=t==null?void 0:t.classNames)==null?void 0:Tt.icon)},t.promise||t.type==="loading"&&!t.icon?t.icon||$t():null,t.type!=="loading"?t.icon||(N==null?void 0:N[w])||Bt(w):null):null,e.createElement("div",{"data-content":"",className:S(a==null?void 0:a.content,(Rt=t==null?void 0:t.classNames)==null?void 0:Rt.content)},e.createElement("div",{"data-title":"",className:S(a==null?void 0:a.title,(St=t==null?void 0:t.classNames)==null?void 0:St.title)},typeof t.title=="function"?t.title():t.title),t.description?e.createElement("div",{"data-description":"",className:S(rt,Lt,a==null?void 0:a.description,(Et=t==null?void 0:t.classNames)==null?void 0:Et.description)},typeof t.description=="function"?t.description():t.description):null),e.isValidElement(t.cancel)?t.cancel:t.cancel&&K(t.cancel)?e.createElement("button",{"data-button":!0,"data-cancel":!0,style:t.cancelButtonStyle||i,onClick:n=>{var m,p;K(t.cancel)&&A&&((p=(m=t.cancel).onClick)==null||p.call(m,n),L())},className:S(a==null?void 0:a.cancelButton,(Nt=t==null?void 0:t.classNames)==null?void 0:Nt.cancelButton)},t.cancel.label):null,e.isValidElement(t.action)?t.action:t.action&&K(t.action)?e.createElement("button",{"data-button":!0,"data-action":!0,style:t.actionButtonStyle||X,onClick:n=>{var m,p;K(t.action)&&((p=(m=t.action).onClick)==null||p.call(m,n),!n.defaultPrevented&&L())},className:S(a==null?void 0:a.actionButton,(Pt=t==null?void 0:t.classNames)==null?void 0:Pt.actionButton)},t.action.label):null))};function At(){if(typeof window=="undefined"||typeof document=="undefined")return"ltr";let s=document.documentElement.getAttribute("dir");return s==="auto"||!s?window.getComputedStyle(document.documentElement).direction:s}function Ne(){let[s,o]=e.useState([]);return e.useEffect(()=>T.subscribe(t=>{o(r=>{if("dismiss"in t&&t.dismiss)return r.filter(l=>l.id!==t.id);let h=r.findIndex(l=>l.id===t.id);if(h!==-1){let l=[...r];return l[h]={...l[h],...t},l}else return[t,...r]})}),[]),{toasts:s}}var Pe=Zt(function(o,t){let{invert:r,position:h="bottom-right",hotkey:l=["altKey","KeyT"],expand:E,closeButton:C,className:b,offset:d,theme:y="light",richColors:k,duration:j,style:J,visibleToasts:nt=ee,toastOptions:i,dir:X=At(),gap:G=ne,loadingIcon:rt,icons:W,containerAriaLabel:st="Notifications",pauseWhenPageIsHidden:it,cn:Q=ie}=o,[I,a]=e.useState([]),N=e.useMemo(()=>Array.from(new Set([h].concat(I.filter(c=>c.position).map(c=>c.position)))),[I,h]),[q,Z]=e.useState([]),[S,B]=e.useState(!1),[tt,_]=e.useState(!1),[lt,D]=e.useState(y!=="system"?y:typeof window!="undefined"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),H=e.useRef(null),et=l.join("+").replace(/Key/g,"").replace(/Digit/g,""),M=e.useRef(null),Y=e.useRef(!1),U=e.useCallback(c=>{a(u=>{var g;return(g=u.find(v=>v.id===c.id))!=null&&g.delete||T.dismiss(c.id),u.filter(({id:v})=>v!==c.id)})},[]);return e.useEffect(()=>T.subscribe(c=>{if(c.dismiss){a(u=>u.map(g=>g.id===c.id?{...g,delete:!0}:g));return}setTimeout(()=>{te.flushSync(()=>{a(u=>{let g=u.findIndex(v=>v.id===c.id);return g!==-1?[...u.slice(0,g),{...u[g],...c},...u.slice(g+1)]:[c,...u]})})})}),[]),e.useEffect(()=>{if(y!=="system"){D(y);return}if(y==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?D("dark"):D("light")),typeof window=="undefined")return;let c=window.matchMedia("(prefers-color-scheme: dark)");try{c.addEventListener("change",({matches:u})=>{D(u?"dark":"light")})}catch(u){c.addListener(({matches:g})=>{try{D(g?"dark":"light")}catch(v){console.error(v)}})}},[y]),e.useEffect(()=>{I.length<=1&&B(!1)},[I]),e.useEffect(()=>{let c=u=>{var v,P;l.every(f=>u[f]||u.code===f)&&(B(!0),(v=H.current)==null||v.focus()),u.code==="Escape"&&(document.activeElement===H.current||(P=H.current)!=null&&P.contains(document.activeElement))&&B(!1)};return document.addEventListener("keydown",c),()=>document.removeEventListener("keydown",c)},[l]),e.useEffect(()=>{if(H.current)return()=>{M.current&&(M.current.focus({preventScroll:!0}),M.current=null,Y.current=!1)}},[H.current]),e.createElement("section",{"aria-label":`${st} ${et}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false"},N.map((c,u)=>{var P;let[g,v]=c.split("-");return I.length?e.createElement("ol",{key:c,dir:X==="auto"?At():X,tabIndex:-1,ref:H,className:b,"data-sonner-toaster":!0,"data-theme":lt,"data-y-position":g,"data-x-position":v,style:{"--front-toast-height":`${((P=q[0])==null?void 0:P.height)||0}px`,"--offset":typeof d=="number"?`${d}px`:d||oe,"--width":`${ae}px`,"--gap":`${G}px`,...J},onBlur:f=>{Y.current&&!f.currentTarget.contains(f.relatedTarget)&&(Y.current=!1,M.current&&(M.current.focus({preventScroll:!0}),M.current=null))},onFocus:f=>{f.target instanceof HTMLElement&&f.target.dataset.dismissible==="false"||Y.current||(Y.current=!0,M.current=f.relatedTarget)},onMouseEnter:()=>B(!0),onMouseMove:()=>B(!0),onMouseLeave:()=>{tt||B(!1)},onPointerDown:f=>{f.target instanceof HTMLElement&&f.target.dataset.dismissible==="false"||_(!0)},onPointerUp:()=>_(!1)},I.filter(f=>!f.position&&u===0||f.position===c).map((f,V)=>{var w,A;return e.createElement(le,{key:f.id,icons:W,index:V,toast:f,defaultRichColors:k,duration:(w=i==null?void 0:i.duration)!=null?w:j,className:i==null?void 0:i.className,descriptionClassName:i==null?void 0:i.descriptionClassName,invert:r,visibleToasts:nt,closeButton:(A=i==null?void 0:i.closeButton)!=null?A:C,interacting:tt,position:c,style:i==null?void 0:i.style,unstyled:i==null?void 0:i.unstyled,classNames:i==null?void 0:i.classNames,cancelButtonStyle:i==null?void 0:i.cancelButtonStyle,actionButtonStyle:i==null?void 0:i.actionButtonStyle,removeToast:U,toasts:I.filter(O=>O.position==f.position),heights:q.filter(O=>O.position==f.position),setHeights:Z,expandByDefault:E,gap:G,loadingIcon:rt,expanded:S,pauseWhenPageIsHidden:it,cn:Q})})):null}))});export{Pe as Toaster,qt as toast,Ne as useSonner};
3
3
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.tsx","../src/assets.tsx","../src/hooks.tsx","../src/state.ts","#style-inject:#style-inject","../src/styles.css","../src/types.ts"],"sourcesContent":["'use client';\n\nimport React, { forwardRef } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { CloseIcon, getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport { toast, ToastState } from './state';\nimport './styles.css';\nimport {\n isAction,\n type ExternalToast,\n type HeightT,\n type ToasterProps,\n type ToastProps,\n type ToastT,\n type ToastToDismiss,\n} from './types';\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\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 20;\n\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction _cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n defaultRichColors,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n icons,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n cn,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime.current);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, toast, toastType, pauseWhenPageIsHidden, isDocumentHidden, deleteToast]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (icons?.loading) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {icons.loading}\n </div>\n );\n }\n\n if (loadingIconProp) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {loadingIconProp}\n </div>\n );\n }\n return <Loader className={cn(classNames?.loader, toast?.classNames?.loader)} visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.default,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-rich-colors={toast.richColors ?? defaultRichColors}\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const isHighlighted = window.getSelection()?.toString().length > 0;\n\n if (isHighlighted) return;\n\n toastRef.current?.style.setProperty('--swipe-amount', `${Math.max(0, yPosition)}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n {icons?.close ?? CloseIcon}\n </button>\n ) : null}\n {/* TODO: This can be cleaner */}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx ? (\n toast.jsx\n ) : typeof toast.title === 'function' ? (\n toast.title()\n ) : (\n toast.title\n )\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\" className={cn(classNames?.icon, toast?.classNames?.icon)}>\n {toast.promise || (toast.type === 'loading' && !toast.icon) ? toast.icon || getLoadingIcon() : null}\n {toast.type !== 'loading' ? toast.icon || icons?.[toastType] || getAsset(toastType) : null}\n </div>\n ) : null}\n\n <div data-content=\"\" className={cn(classNames?.content, toast?.classNames?.content)}>\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {typeof toast.title === 'function' ? toast.title() : toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {typeof toast.description === 'function' ? toast.description() : toast.description}\n </div>\n ) : null}\n </div>\n {React.isValidElement(toast.cancel) ? (\n toast.cancel\n ) : toast.cancel && isAction(toast.cancel) ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick?.(event);\n deleteToast();\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {React.isValidElement(toast.action) ? (\n toast.action\n ) : toast.action && isAction(toast.action) ? (\n <button\n data-button\n data-action\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick?.(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState<ToastT[]>([]);\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n setActiveToasts((currentToasts) => {\n if ('dismiss' in toast && toast.dismiss) {\n return currentToasts.filter((t) => t.id !== toast.id);\n }\n\n const existingToastIndex = currentToasts.findIndex((t) => t.id === toast.id);\n if (existingToastIndex !== -1) {\n const updatedToasts = [...currentToasts];\n updatedToasts[existingToastIndex] = { ...updatedToasts[existingToastIndex], ...toast };\n return updatedToasts;\n } else {\n return [toast, ...currentToasts];\n }\n });\n });\n }, []);\n\n return {\n toasts: activeToasts,\n };\n}\n\nconst Toaster = forwardRef<HTMLElement, ToasterProps>(function Toaster(props, ref) {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap = GAP,\n loadingIcon,\n icons,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n cn = _cn,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback((toastToRemove: ToastT) => {\n setToasts((toasts) => {\n if (!toasts.find((toast) => toast.id === toastToRemove.id)?.delete) {\n ToastState.dismiss(toastToRemove.id);\n }\n\n return toasts.filter(({ id }) => id !== toastToRemove.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 const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches }) => {\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\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 return (\n // Remove item from normal navigation flow, only available via hotkey\n <section\n aria-label={`${containerAriaLabel} ${hotkeyLabel}`}\n tabIndex={-1}\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n >\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n\n if (!toasts.length) return null;\n\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height || 0}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n icons={icons}\n index={index}\n toast={toast}\n defaultRichColors={richColors}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter((t) => t.position == toast.position)}\n heights={heights.filter((h) => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n cn={cn}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n});\nexport { toast, Toaster, type ExternalToast, type ToastT, type ToasterProps, useSonner };\nexport { type ToastClassnames, type ToastToDismiss, type Action } from './types';\n","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible, className }: { visible: boolean, className?: string }) => {\n return (\n <div className={['sonner-loading-wrapper', className].filter(Boolean).join(' ')} data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nexport const CloseIcon = (\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);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import type { ExternalToast, PromiseData, PromiseT, ToastT, ToastToDismiss, ToastTypes } from './types';\n\nimport React from 'react';\n\nlet toastsCounter = 1;\n\ntype titleT = (() => React.ReactNode) | React.ReactNode;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: titleT;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n let result: ['resolve', ToastData] | ['reject', unknown];\n\n const originalPromise = p\n .then(async (response) => {\n result = ['resolve', response];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({ id, type: 'default', message: response });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const message =\n typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? await data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description =\n typeof data.description === 'function' ? await data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch(async (error) => {\n result = ['reject', error];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n const unwrap = () =>\n new Promise<ToastData>((resolve, reject) =>\n originalPromise.then(() => (result[0] === 'reject' ? reject(result[1]) : resolve(result[1]))).catch(reject),\n );\n\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return { unwrap };\n } else {\n return Object.assign(id, { unwrap });\n }\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: titleT, 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 isHttpResponse = (data: any): data is Response => {\n return (\n data &&\n typeof data === 'object' &&\n 'ok' in data &&\n typeof data.ok === 'boolean' &&\n 'status' in data &&\n typeof data.status === 'number'\n );\n};\n\nconst basicToast = toastFunction;\n\nconst getHistory = () => ToastState.toasts;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(\n basicToast,\n {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n },\n { getHistory },\n);\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(\":where(html[dir=\\\"ltr\\\"]),:where([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%)}:where(html[dir=\\\"rtl\\\"]),:where([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%)}:where([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}:where([data-sonner-toaster][data-x-position=\\\"right\\\"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position=\\\"left\\\"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position=\\\"center\\\"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=\\\"top\\\"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position=\\\"bottom\\\"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=\\\"top\\\"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise=\\\"true\\\"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme=\\\"dark\\\"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=\\\"true\\\"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=\\\"top\\\"][data-swiping=\\\"true\\\"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"][data-swiping=\\\"true\\\"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=\\\"false\\\"][data-removed=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=\\\"true\\\"]){--y: translateY(0);opacity:1}:where([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)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=\\\"false\\\"][data-front=\\\"false\\\"][data-styled=\\\"true\\\"])>*{opacity:0}:where([data-sonner-toast][data-visible=\\\"false\\\"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=\\\"true\\\"][data-expanded=\\\"true\\\"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=\\\"true\\\"][data-front=\\\"true\\\"][data-swipe-out=\\\"false\\\"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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;user-select: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][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","import React from 'react';\n\nexport type ToastTypes = 'normal' | 'action' | 'success' | 'info' | 'warning' | 'error' | 'loading' | 'default';\n\nexport type PromiseT<Data = any> = Promise<Data> | (() => Promise<Data>);\n\nexport type PromiseTResult<Data = any> =\n | string\n | React.ReactNode\n | ((data: Data) => React.ReactNode | string | Promise<React.ReactNode | string>);\n\nexport type PromiseExternalToast = Omit<ExternalToast, 'description'>;\n\nexport type PromiseData<ToastData = any> = PromiseExternalToast & {\n loading?: string | React.ReactNode;\n success?: PromiseTResult<ToastData>;\n error?: PromiseTResult;\n description?: PromiseTResult;\n finally?: () => void | Promise<void>;\n};\n\nexport interface ToastClassnames {\n toast?: string;\n title?: string;\n description?: string;\n loader?: string;\n closeButton?: string;\n cancelButton?: string;\n actionButton?: string;\n success?: string;\n error?: string;\n info?: string;\n warning?: string;\n loading?: string;\n default?: string;\n content?: string;\n icon?: string;\n}\n\nexport interface ToastIcons {\n success?: React.ReactNode;\n info?: React.ReactNode;\n warning?: React.ReactNode;\n error?: React.ReactNode;\n loading?: React.ReactNode;\n close?: React.ReactNode;\n}\n\nexport interface Action {\n label: React.ReactNode;\n onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n actionButtonStyle?: React.CSSProperties;\n}\n\nexport interface ToastT {\n id: number | string;\n title?: (() => React.ReactNode) | React.ReactNode;\n type?: ToastTypes;\n icon?: React.ReactNode;\n jsx?: React.ReactNode;\n richColors?: boolean;\n invert?: boolean;\n closeButton?: boolean;\n dismissible?: boolean;\n description?: (() => React.ReactNode) | React.ReactNode;\n duration?: number;\n delete?: boolean;\n action?: Action | React.ReactNode;\n cancel?: Action | React.ReactNode;\n onDismiss?: (toast: ToastT) => void;\n onAutoClose?: (toast: ToastT) => void;\n promise?: PromiseT;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n unstyled?: boolean;\n className?: string;\n classNames?: ToastClassnames;\n descriptionClassName?: string;\n position?: Position;\n}\n\nexport function isAction(action: Action | React.ReactNode): action is Action {\n return (action as Action).label !== undefined;\n}\n\nexport type Position = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center';\nexport interface HeightT {\n height: number;\n toastId: number | string;\n position: Position;\n}\n\ninterface ToastOptions {\n className?: string;\n closeButton?: boolean;\n descriptionClassName?: string;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n unstyled?: boolean;\n classNames?: ToastClassnames;\n}\n\ntype CnFunction = (...classes: Array<string | undefined>) => string;\n\nexport interface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark' | 'system';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n gap?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: string | number;\n dir?: 'rtl' | 'ltr' | 'auto';\n /**\n * @deprecated Please use the `icons` prop instead:\n * ```jsx\n * <Toaster\n * icons={{ loading: <LoadingIcon /> }}\n * />\n * ```\n */\n loadingIcon?: React.ReactNode;\n icons?: ToastIcons;\n containerAriaLabel?: string;\n pauseWhenPageIsHidden?: boolean;\n cn?: CnFunction;\n}\n\nexport interface 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 gap?: number;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n className?: string;\n unstyled?: boolean;\n descriptionClassName?: string;\n loadingIcon?: React.ReactNode;\n classNames?: ToastClassnames;\n icons?: ToastIcons;\n closeButtonAriaLabel?: string;\n pauseWhenPageIsHidden: boolean;\n cn: CnFunction;\n defaultRichColors?: boolean;\n}\n\nexport enum SwipeStateTypes {\n SwipedOut = 'SwipedOut',\n SwipedBack = 'SwipedBack',\n NotSwiped = 'NotSwiped',\n}\n\nexport type Theme = 'light' | 'dark';\n\nexport interface ToastToDismiss {\n id: number | string;\n dismiss: boolean;\n}\n\nexport type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title' | 'jsx' | 'delete' | 'promise'> & {\n id?: number | string;\n};\n"],"mappings":"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","names":["React","forwardRef","ReactDOM","React","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","className","_","i","CloseIcon","React","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","callback","React","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","result","originalPromise","response","isHttpResponse","description","error","unwrap","resolve","reject","jsx","ToastState","toastFunction","basicToast","getHistory","styleInject","css","insertAt","head","style","styleInject","isAction","action","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","_cn","classes","Toast","props","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","ToasterInvert","toast","unstyled","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","defaultRichColors","closeButtonFromToaster","style","cancelButtonStyle","actionButtonStyle","className","descriptionClassName","durationFromToaster","position","gap","loadingIconProp","expandByDefault","classNames","icons","closeButtonAriaLabel","pauseWhenPageIsHidden","cn","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","remainingTime","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","isDocumentHidden","useIsDocumentHidden","invert","disabled","toastNode","h","originalHeight","newHeight","deleteToast","timeoutId","elapsedTime","getLoadingIcon","Loader","event","swipeAmount","timeTaken","velocity","yPosition","CloseIcon","getAsset","isAction","getDocumentDirection","dirAttribute","useSonner","activeToasts","setActiveToasts","ToastState","currentToasts","t","existingToastIndex","updatedToasts","Toaster","forwardRef","ref","hotkey","expand","theme","richColors","toastOptions","dir","loadingIcon","containerAriaLabel","setToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","id","ReactDOM","indexOfExistingToast","darkMediaQuery","matches","error","e","handleKeyDown","key"]}
1
+ {"version":3,"sources":["../src/index.tsx","../src/assets.tsx","../src/hooks.tsx","../src/state.ts","#style-inject:#style-inject","../src/styles.css","../src/types.ts"],"sourcesContent":["'use client';\n\nimport React, { forwardRef } from 'react';\nimport ReactDOM from 'react-dom';\n\nimport { CloseIcon, getAsset, Loader } from './assets';\nimport { useIsDocumentHidden } from './hooks';\nimport { toast, ToastState } from './state';\nimport './styles.css';\nimport {\n isAction,\n type ExternalToast,\n type HeightT,\n type ToasterProps,\n type ToastProps,\n type ToastT,\n type ToastToDismiss,\n} from './types';\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\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 20;\n\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\n\nfunction _cn(...classes: (string | undefined)[]) {\n return classes.filter(Boolean).join(' ');\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n unstyled,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n defaultRichColors,\n closeButton: closeButtonFromToaster,\n style,\n cancelButtonStyle,\n actionButtonStyle,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n gap,\n loadingIcon: loadingIconProp,\n expandByDefault,\n classNames,\n icons,\n closeButtonAriaLabel = 'Close toast',\n pauseWhenPageIsHidden,\n cn,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef<Date | null>(null);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const closeButton = React.useMemo(\n () => toast.closeButton ?? closeButtonFromToaster,\n [toast.closeButton, closeButtonFromToaster],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef<{ x: number; y: number } | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const isDocumentHidden = useIsDocumentHidden();\n\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n\n offset.current = React.useMemo(() => heightIndex * gap + toastsHeightBefore, [heightIndex, toastsHeightBefore]);\n\n React.useEffect(() => {\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height, position: toast.position }, ...h]);\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useLayoutEffect(() => {\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n\n setInitialHeight(newHeight);\n\n setHeights((heights) => {\n const alreadyExists = heights.find((height) => height.toastId === toast.id);\n if (!alreadyExists) {\n return [{ toastId: toast.id, height: newHeight, position: toast.position }, ...heights];\n } else {\n return heights.map((height) => (height.toastId === toast.id ? { ...height, height: newHeight } : height));\n }\n });\n }, [mounted, toast.title, toast.description, setHeights, toast.id]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if ((toast.promise && toastType === 'loading') || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n\n closeTimerStartTimeRef.current = new Date().getTime();\n\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n toast.onAutoClose?.(toast);\n deleteToast();\n }, remainingTime.current);\n };\n\n if (expanded || interacting || (pauseWhenPageIsHidden && isDocumentHidden)) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, toast, toastType, pauseWhenPageIsHidden, isDocumentHidden, deleteToast]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [deleteToast, toast.delete]);\n\n function getLoadingIcon() {\n if (icons?.loading) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {icons.loading}\n </div>\n );\n }\n\n if (loadingIconProp) {\n return (\n <div\n className={cn(classNames?.loader, toast?.classNames?.loader, 'sonner-loader')}\n data-visible={toastType === 'loading'}\n >\n {loadingIconProp}\n </div>\n );\n }\n return <Loader className={cn(classNames?.loader, toast?.classNames?.loader)} visible={toastType === 'loading'} />;\n }\n\n return (\n <li\n tabIndex={0}\n ref={toastRef}\n className={cn(\n className,\n toastClassname,\n classNames?.toast,\n toast?.classNames?.toast,\n classNames?.default,\n classNames?.[toastType],\n toast?.classNames?.[toastType],\n )}\n data-sonner-toast=\"\"\n data-rich-colors={toast.richColors ?? defaultRichColors}\n data-styled={!Boolean(toast.jsx || toast.unstyled || unstyled)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-dismissible={dismissible}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = { x: event.clientX, y: event.clientY };\n }}\n onPointerUp={() => {\n if (swipeOut || !dismissible) return;\n\n pointerStartRef.current = null;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n const timeTaken = new Date().getTime() - dragStartTime.current?.getTime();\n const velocity = Math.abs(swipeAmount) / timeTaken;\n\n // Remove only if threshold is met\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss?.(toast);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartRef.current || !dismissible) return;\n\n const yPosition = event.clientY - pointerStartRef.current.y;\n const isHighlighted = window.getSelection()?.toString().length > 0;\n\n if (isHighlighted) return;\n\n toastRef.current?.style.setProperty('--swipe-amount', `${Math.max(0, yPosition)}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label={closeButtonAriaLabel}\n data-disabled={disabled}\n data-close-button\n onClick={\n disabled || !dismissible\n ? () => {}\n : () => {\n deleteToast();\n toast.onDismiss?.(toast);\n }\n }\n className={cn(classNames?.closeButton, toast?.classNames?.closeButton)}\n >\n {icons?.close ?? CloseIcon}\n </button>\n ) : null}\n {/* TODO: This can be cleaner */}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx ? (\n toast.jsx\n ) : typeof toast.title === 'function' ? (\n toast.title()\n ) : (\n toast.title\n )\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\" className={cn(classNames?.icon, toast?.classNames?.icon)}>\n {toast.promise || (toast.type === 'loading' && !toast.icon) ? toast.icon || getLoadingIcon() : null}\n {toast.type !== 'loading' ? toast.icon || icons?.[toastType] || getAsset(toastType) : null}\n </div>\n ) : null}\n\n <div data-content=\"\" className={cn(classNames?.content, toast?.classNames?.content)}>\n <div data-title=\"\" className={cn(classNames?.title, toast?.classNames?.title)}>\n {typeof toast.title === 'function' ? toast.title() : toast.title}\n </div>\n {toast.description ? (\n <div\n data-description=\"\"\n className={cn(\n descriptionClassName,\n toastDescriptionClassname,\n classNames?.description,\n toast?.classNames?.description,\n )}\n >\n {typeof toast.description === 'function' ? toast.description() : toast.description}\n </div>\n ) : null}\n </div>\n {React.isValidElement(toast.cancel) ? (\n toast.cancel\n ) : toast.cancel && isAction(toast.cancel) ? (\n <button\n data-button\n data-cancel\n style={toast.cancelButtonStyle || cancelButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick?.(event);\n deleteToast();\n }}\n className={cn(classNames?.cancelButton, toast?.classNames?.cancelButton)}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {React.isValidElement(toast.action) ? (\n toast.action\n ) : toast.action && isAction(toast.action) ? (\n <button\n data-button\n data-action\n style={toast.actionButtonStyle || actionButtonStyle}\n onClick={(event) => {\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick?.(event);\n if (event.defaultPrevented) return;\n deleteToast();\n }}\n className={cn(classNames?.actionButton, toast?.classNames?.actionButton)}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\nfunction getDocumentDirection(): ToasterProps['dir'] {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n\n const dirAttribute = document.documentElement.getAttribute('dir');\n\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction as ToasterProps['dir'];\n }\n\n return dirAttribute as ToasterProps['dir'];\n}\n\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState<ToastT[]>([]);\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n setActiveToasts((currentToasts) => {\n if ('dismiss' in toast && toast.dismiss) {\n return currentToasts.filter((t) => t.id !== toast.id);\n }\n\n const existingToastIndex = currentToasts.findIndex((t) => t.id === toast.id);\n if (existingToastIndex !== -1) {\n const updatedToasts = [...currentToasts];\n updatedToasts[existingToastIndex] = { ...updatedToasts[existingToastIndex], ...toast };\n return updatedToasts;\n } else {\n return [toast, ...currentToasts];\n }\n });\n });\n }, []);\n\n return {\n toasts: activeToasts,\n };\n}\n\nconst Toaster = forwardRef<HTMLElement, ToasterProps>(function Toaster(props, ref) {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n dir = getDocumentDirection(),\n gap = GAP,\n loadingIcon,\n icons,\n containerAriaLabel = 'Notifications',\n pauseWhenPageIsHidden,\n cn = _cn,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const possiblePositions = React.useMemo(() => {\n return Array.from(\n new Set([position].concat(toasts.filter((toast) => toast.position).map((toast) => toast.position))),\n );\n }, [toasts, position]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(\n theme !== 'system'\n ? theme\n : typeof window !== 'undefined'\n ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : 'light',\n );\n\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef<HTMLElement>(null);\n const isFocusWithinRef = React.useRef(false);\n\n const removeToast = React.useCallback((toastToRemove: ToastT) => {\n setToasts((toasts) => {\n if (!toasts.find((toast) => toast.id === toastToRemove.id)?.delete) {\n ToastState.dismiss(toastToRemove.id);\n }\n\n return toasts.filter(({ id }) => id !== toastToRemove.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 const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches }) => {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches }) => {\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\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 return (\n // Remove item from normal navigation flow, only available via hotkey\n <section\n aria-label={`${containerAriaLabel} ${hotkeyLabel}`}\n tabIndex={-1}\n aria-live=\"polite\"\n aria-relevant=\"additions text\"\n aria-atomic=\"false\"\n >\n {possiblePositions.map((position, index) => {\n const [y, x] = position.split('-');\n\n if (!toasts.length) return null;\n\n return (\n <ol\n key={position}\n dir={dir === 'auto' ? getDocumentDirection() : dir}\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={actualTheme}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height || 0}px`,\n '--offset': typeof offset === 'number' ? `${offset}px` : offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n } as React.CSSProperties\n }\n onBlur={(event) => {\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({ preventScroll: true });\n lastFocusedElementRef.current = null;\n }\n }\n }}\n onFocus={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget as HTMLElement;\n }\n }}\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={(event) => {\n const isNotDismissible =\n event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n\n if (isNotDismissible) return;\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts\n .filter((toast) => (!toast.position && index === 0) || toast.position === position)\n .map((toast, index) => (\n <Toast\n key={toast.id}\n icons={icons}\n index={index}\n toast={toast}\n defaultRichColors={richColors}\n duration={toastOptions?.duration ?? duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={toastOptions?.closeButton ?? closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n unstyled={toastOptions?.unstyled}\n classNames={toastOptions?.classNames}\n cancelButtonStyle={toastOptions?.cancelButtonStyle}\n actionButtonStyle={toastOptions?.actionButtonStyle}\n removeToast={removeToast}\n toasts={toasts.filter((t) => t.position == toast.position)}\n heights={heights.filter((h) => h.position == toast.position)}\n setHeights={setHeights}\n expandByDefault={expand}\n gap={gap}\n loadingIcon={loadingIcon}\n expanded={expanded}\n pauseWhenPageIsHidden={pauseWhenPageIsHidden}\n cn={cn}\n />\n ))}\n </ol>\n );\n })}\n </section>\n );\n});\nexport { toast, Toaster, type ExternalToast, type ToastT, type ToasterProps, useSonner };\nexport { type ToastClassnames, type ToastToDismiss, type Action } from './types';\n","'use client';\nimport React from 'react';\nimport type { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'info':\n return InfoIcon;\n\n case 'warning':\n return WarningIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n return null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible, className }: { visible: boolean, className?: string }) => {\n return (\n <div className={['sonner-loading-wrapper', className].filter(Boolean).join(' ')} data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst WarningIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nexport const CloseIcon = (\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);\n","import React from 'react';\n\nexport const useIsDocumentHidden = () => {\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n\n React.useEffect(() => {\n const callback = () => {\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return () => window.removeEventListener('visibilitychange', callback);\n }, []);\n\n return isDocumentHidden;\n};\n","import type { ExternalToast, PromiseData, PromiseT, ToastT, ToastToDismiss, ToastTypes } from './types';\n\nimport React from 'react';\n\nlet toastsCounter = 1;\n\ntype titleT = (() => React.ReactNode) | React.ReactNode;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n toasts: Array<ToastT | ToastToDismiss>;\n\n constructor() {\n this.subscribers = [];\n this.toasts = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT | ToastToDismiss) => void) => {\n this.subscribers.push(subscriber);\n\n return () => {\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n\n publish = (data: ToastT) => {\n this.subscribers.forEach((subscriber) => subscriber(data));\n };\n\n addToast = (data: ToastT) => {\n this.publish(data);\n this.toasts = [...this.toasts, data];\n };\n\n create = (\n data: ExternalToast & {\n message?: titleT;\n type?: ToastTypes;\n promise?: PromiseT;\n jsx?: React.ReactElement;\n },\n ) => {\n const { message, ...rest } = data;\n const id = typeof data?.id === 'number' || data.id?.length > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast) => {\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast) => {\n if (toast.id === id) {\n this.publish({ ...toast, ...data, id, title: message });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message,\n };\n }\n\n return toast;\n });\n } else {\n this.addToast({ title: message, ...rest, dismissible, id });\n }\n\n return id;\n };\n\n dismiss = (id?: number | string) => {\n if (!id) {\n this.toasts.forEach((toast) => {\n this.subscribers.forEach((subscriber) => subscriber({ id: toast.id, dismiss: true }));\n });\n }\n\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message });\n };\n\n error = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, message, type: 'error' });\n };\n\n success = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'success', message });\n };\n\n info = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'info', message });\n };\n\n warning = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'warning', message });\n };\n\n loading = (message: titleT | React.ReactNode, data?: ExternalToast) => {\n return this.create({ ...data, type: 'loading', message });\n };\n\n promise = <ToastData>(promise: PromiseT<ToastData>, data?: PromiseData<ToastData>) => {\n if (!data) {\n // Nothing to show\n return;\n }\n\n let id: string | number | undefined = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined,\n });\n }\n\n const p = promise instanceof Promise ? promise : promise();\n\n let shouldDismiss = id !== undefined;\n let result: ['resolve', ToastData] | ['reject', unknown];\n\n const originalPromise = p\n .then(async (response) => {\n result = ['resolve', response];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({ id, type: 'default', message: response });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const message =\n typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description =\n typeof data.description === 'function'\n ? await data.description(`HTTP error! status: ${response.status}`)\n : data.description;\n this.create({ id, type: 'error', message, description });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const message = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description =\n typeof data.description === 'function' ? await data.description(response) : data.description;\n this.create({ id, type: 'success', message, description });\n }\n })\n .catch(async (error) => {\n result = ['reject', error];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const message = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n this.create({ id, type: 'error', message, description });\n }\n })\n .finally(() => {\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n\n data.finally?.();\n });\n\n const unwrap = () =>\n new Promise<ToastData>((resolve, reject) =>\n originalPromise.then(() => (result[0] === 'reject' ? reject(result[1]) : resolve(result[1]))).catch(reject),\n );\n\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return { unwrap };\n } else {\n return Object.assign(id, { unwrap });\n }\n };\n\n custom = (jsx: (id: number | string) => React.ReactElement, data?: ExternalToast) => {\n const id = data?.id || toastsCounter++;\n this.create({ jsx: jsx(id), id, ...data });\n return id;\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: titleT, 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 isHttpResponse = (data: any): data is Response => {\n return (\n data &&\n typeof data === 'object' &&\n 'ok' in data &&\n typeof data.ok === 'boolean' &&\n 'status' in data &&\n typeof data.status === 'number'\n );\n};\n\nconst basicToast = toastFunction;\n\nconst getHistory = () => ToastState.toasts;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(\n basicToast,\n {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading,\n },\n { getHistory },\n);\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(\":where(html[dir=\\\"ltr\\\"]),:where([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%)}:where(html[dir=\\\"rtl\\\"]),:where([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%)}:where([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;transition:transform .4s ease}:where([data-sonner-toaster]:hover){transform:translateY(-10px)}:where([data-sonner-toaster][data-x-position=\\\"right\\\"]){right:max(var(--offset),env(safe-area-inset-right))}:where([data-sonner-toaster][data-x-position=\\\"left\\\"]){left:max(var(--offset),env(safe-area-inset-left))}:where([data-sonner-toaster][data-x-position=\\\"center\\\"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position=\\\"top\\\"]){top:max(var(--offset),env(safe-area-inset-top))}:where([data-sonner-toaster][data-y-position=\\\"bottom\\\"]){bottom:max(var(--offset),env(safe-area-inset-bottom))}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([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}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position=\\\"top\\\"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([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)}:where([data-sonner-toast][data-promise=\\\"true\\\"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme=\\\"dark\\\"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([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;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled=\\\"true\\\"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position=\\\"top\\\"][data-swiping=\\\"true\\\"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position=\\\"bottom\\\"][data-swiping=\\\"true\\\"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping=\\\"false\\\"][data-removed=\\\"true\\\"]):before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted=\\\"true\\\"]){--y: translateY(0);opacity:1}:where([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)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded=\\\"false\\\"][data-front=\\\"false\\\"][data-styled=\\\"true\\\"])>*{opacity:0}:where([data-sonner-toast][data-visible=\\\"false\\\"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted=\\\"true\\\"][data-expanded=\\\"true\\\"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed=\\\"true\\\"][data-front=\\\"true\\\"][data-swipe-out=\\\"false\\\"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([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}:where([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}:where([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;user-select: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][dir=rtl]{left:calc(var(--mobile-offset) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\\n\")","import React from 'react';\n\nexport type ToastTypes = 'normal' | 'action' | 'success' | 'info' | 'warning' | 'error' | 'loading' | 'default';\n\nexport type PromiseT<Data = any> = Promise<Data> | (() => Promise<Data>);\n\nexport type PromiseTResult<Data = any> =\n | string\n | React.ReactNode\n | ((data: Data) => React.ReactNode | string | Promise<React.ReactNode | string>);\n\nexport type PromiseExternalToast = Omit<ExternalToast, 'description'>;\n\nexport type PromiseData<ToastData = any> = PromiseExternalToast & {\n loading?: string | React.ReactNode;\n success?: PromiseTResult<ToastData>;\n error?: PromiseTResult;\n description?: PromiseTResult;\n finally?: () => void | Promise<void>;\n};\n\nexport interface ToastClassnames {\n toast?: string;\n title?: string;\n description?: string;\n loader?: string;\n closeButton?: string;\n cancelButton?: string;\n actionButton?: string;\n success?: string;\n error?: string;\n info?: string;\n warning?: string;\n loading?: string;\n default?: string;\n content?: string;\n icon?: string;\n}\n\nexport interface ToastIcons {\n success?: React.ReactNode;\n info?: React.ReactNode;\n warning?: React.ReactNode;\n error?: React.ReactNode;\n loading?: React.ReactNode;\n close?: React.ReactNode;\n}\n\nexport interface Action {\n label: React.ReactNode;\n onClick: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\n actionButtonStyle?: React.CSSProperties;\n}\n\nexport interface ToastT {\n id: number | string;\n title?: (() => React.ReactNode) | React.ReactNode;\n type?: ToastTypes;\n icon?: React.ReactNode;\n jsx?: React.ReactNode;\n richColors?: boolean;\n invert?: boolean;\n closeButton?: boolean;\n dismissible?: boolean;\n description?: (() => React.ReactNode) | React.ReactNode;\n duration?: number;\n delete?: boolean;\n action?: Action | React.ReactNode;\n cancel?: Action | React.ReactNode;\n onDismiss?: (toast: ToastT) => void;\n onAutoClose?: (toast: ToastT) => void;\n promise?: PromiseT;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n style?: React.CSSProperties;\n unstyled?: boolean;\n className?: string;\n classNames?: ToastClassnames;\n descriptionClassName?: string;\n position?: Position;\n}\n\nexport function isAction(action: Action | React.ReactNode): action is Action {\n return (action as Action).label !== undefined;\n}\n\nexport type Position = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center';\nexport interface HeightT {\n height: number;\n toastId: number | string;\n position: Position;\n}\n\ninterface ToastOptions {\n className?: string;\n closeButton?: boolean;\n descriptionClassName?: string;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n unstyled?: boolean;\n classNames?: ToastClassnames;\n}\n\ntype CnFunction = (...classes: Array<string | undefined>) => string;\n\nexport interface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark' | 'system';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n gap?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: string | number;\n dir?: 'rtl' | 'ltr' | 'auto';\n /**\n * @deprecated Please use the `icons` prop instead:\n * ```jsx\n * <Toaster\n * icons={{ loading: <LoadingIcon /> }}\n * />\n * ```\n */\n loadingIcon?: React.ReactNode;\n icons?: ToastIcons;\n containerAriaLabel?: string;\n pauseWhenPageIsHidden?: boolean;\n cn?: CnFunction;\n}\n\nexport interface 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 gap?: number;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n cancelButtonStyle?: React.CSSProperties;\n actionButtonStyle?: React.CSSProperties;\n duration?: number;\n className?: string;\n unstyled?: boolean;\n descriptionClassName?: string;\n loadingIcon?: React.ReactNode;\n classNames?: ToastClassnames;\n icons?: ToastIcons;\n closeButtonAriaLabel?: string;\n pauseWhenPageIsHidden: boolean;\n cn: CnFunction;\n defaultRichColors?: boolean;\n}\n\nexport enum SwipeStateTypes {\n SwipedOut = 'SwipedOut',\n SwipedBack = 'SwipedBack',\n NotSwiped = 'NotSwiped',\n}\n\nexport type Theme = 'light' | 'dark';\n\nexport interface ToastToDismiss {\n id: number | string;\n dismiss: boolean;\n}\n\nexport type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title' | 'jsx' | 'delete' | 'promise'> & {\n id?: number | string;\n};\n"],"mappings":"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","names":["React","forwardRef","ReactDOM","React","getAsset","type","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","className","_","i","CloseIcon","React","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","callback","React","toastsCounter","Observer","subscriber","index","data","_a","message","rest","id","alreadyExists","toast","dismissible","promise","p","shouldDismiss","result","originalPromise","response","isHttpResponse","description","error","unwrap","resolve","reject","jsx","ToastState","toastFunction","basicToast","getHistory","styleInject","css","insertAt","head","style","styleInject","isAction","action","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","_cn","classes","Toast","props","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","_k","ToasterInvert","toast","unstyled","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","defaultRichColors","closeButtonFromToaster","style","cancelButtonStyle","actionButtonStyle","className","descriptionClassName","durationFromToaster","position","gap","loadingIconProp","expandByDefault","classNames","icons","closeButtonAriaLabel","pauseWhenPageIsHidden","cn","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","remainingTime","dragStartTime","toastRef","isFront","isVisible","toastType","dismissible","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","duration","closeTimerStartTimeRef","offset","lastCloseTimerStartTimeRef","pointerStartRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","isDocumentHidden","useIsDocumentHidden","invert","disabled","toastNode","h","originalHeight","newHeight","deleteToast","timeoutId","elapsedTime","getLoadingIcon","Loader","event","swipeAmount","timeTaken","velocity","yPosition","CloseIcon","getAsset","isAction","getDocumentDirection","dirAttribute","useSonner","activeToasts","setActiveToasts","ToastState","currentToasts","t","existingToastIndex","updatedToasts","Toaster","forwardRef","ref","hotkey","expand","theme","richColors","toastOptions","dir","loadingIcon","containerAriaLabel","setToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","id","ReactDOM","indexOfExistingToast","darkMediaQuery","matches","error","e","handleKeyDown","key"]}
package/dist/styles.css CHANGED
@@ -48,6 +48,11 @@
48
48
  list-style: none;
49
49
  outline: none;
50
50
  z-index: 999999999;
51
+ transition: transform 400ms ease;
52
+ }
53
+
54
+ :where([data-sonner-toaster]:hover) {
55
+ transform: translateY(-10px);
51
56
  }
52
57
 
53
58
  :where([data-sonner-toaster][data-x-position='right']) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sonner",
3
- "version": "1.6.0",
3
+ "version": "1.6.1",
4
4
  "description": "An opinionated toast component for React.",
5
5
  "exports": {
6
6
  "types": "./dist/index.d.ts",