sonner 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -4
- package/dist/index.d.ts +14 -11
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -90,16 +90,28 @@ toast.promise(() => new Promise((resolve) => setTimeout(resolve, 2000)), {
|
|
|
90
90
|
});
|
|
91
91
|
```
|
|
92
92
|
|
|
93
|
-
### Custom
|
|
93
|
+
### Custom JSX
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
You can pass jsx as the first argument instead of a string to render custom jsx while maintaining default styling. You can use the headless version below for a custom, unstyled toast.
|
|
96
96
|
|
|
97
97
|
```jsx
|
|
98
|
-
toast
|
|
98
|
+
toast(<div>A custom toast with default styling</div>);
|
|
99
99
|
```
|
|
100
100
|
|
|
101
101
|
## Customization
|
|
102
102
|
|
|
103
|
+
### Headless
|
|
104
|
+
|
|
105
|
+
You can use `toast.custom` to render an unstyled toast with custom jsx while maintaining the functionality.
|
|
106
|
+
|
|
107
|
+
```jsx
|
|
108
|
+
toast.custom((t) => (
|
|
109
|
+
<div>
|
|
110
|
+
This is a custom component <button onClick={() => toast.dismiss(t)}>close</button>
|
|
111
|
+
</div>
|
|
112
|
+
));
|
|
113
|
+
```
|
|
114
|
+
|
|
103
115
|
### Theme
|
|
104
116
|
|
|
105
117
|
You can change the theme using the `theme` prop. Default theme is light.
|
|
@@ -132,7 +144,9 @@ Toasts can also be expanded by default through the `expand` prop. You can also c
|
|
|
132
144
|
You can style your toasts globally with the `toastOptions` prop in the `Toaster` component.
|
|
133
145
|
|
|
134
146
|
```jsx
|
|
135
|
-
<Toaster
|
|
147
|
+
<Toaster
|
|
148
|
+
toastOptions={{ style: { background: 'red' }, className: 'my-toast', descriptionClassName: 'my-toast-description' }}
|
|
149
|
+
/>
|
|
136
150
|
```
|
|
137
151
|
|
|
138
152
|
### Styling for individual toast
|
|
@@ -143,6 +157,7 @@ toast('Event has been created', {
|
|
|
143
157
|
background: 'red',
|
|
144
158
|
},
|
|
145
159
|
className: 'my-toast',
|
|
160
|
+
descriptionClassName: 'my-toast-description',
|
|
146
161
|
});
|
|
147
162
|
```
|
|
148
163
|
|
|
@@ -170,6 +185,16 @@ Offset from the edges of the screen.
|
|
|
170
185
|
<Toaster offset="80px" />
|
|
171
186
|
```
|
|
172
187
|
|
|
188
|
+
### Programmatically remove toast
|
|
189
|
+
|
|
190
|
+
To remove a toast programmatically use `toast.dismiss(id)`.
|
|
191
|
+
|
|
192
|
+
```jsx
|
|
193
|
+
const toastId = toast('Event has been created');
|
|
194
|
+
|
|
195
|
+
toast.dismiss(toastId);
|
|
196
|
+
```
|
|
197
|
+
|
|
173
198
|
## Keyboard focus
|
|
174
199
|
|
|
175
200
|
You can focus on the toast area by pressing ⌥/alt + T. You can override it by providing an array of event.code values for each key.
|
|
@@ -177,3 +202,7 @@ You can focus on the toast area by pressing ⌥/alt + T. You can override it by
|
|
|
177
202
|
```jsx
|
|
178
203
|
<Toaster hotkey={['KeyC']} />
|
|
179
204
|
```
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
```
|
package/dist/index.d.ts
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
|
|
3
3
|
type ToastTypes = 'normal' | 'action' | 'success' | 'error' | 'loading';
|
|
4
|
-
type
|
|
5
|
-
|
|
4
|
+
type PromiseT = Promise<any> | (() => Promise<any>);
|
|
5
|
+
type PromiseData = ExternalToast & {
|
|
6
|
+
loading: string | React.ReactNode;
|
|
6
7
|
success: string | React.ReactNode;
|
|
7
8
|
error: string | React.ReactNode;
|
|
8
9
|
};
|
|
9
|
-
type PromiseT = Promise<any> | (() => Promise<any>);
|
|
10
10
|
interface ToastT {
|
|
11
11
|
id: number;
|
|
12
|
-
title?: string;
|
|
12
|
+
title?: string | React.ReactNode;
|
|
13
13
|
type?: ToastTypes;
|
|
14
14
|
icon?: React.ReactNode;
|
|
15
15
|
jsx?: React.ReactNode;
|
|
16
16
|
invert?: boolean;
|
|
17
17
|
description?: string;
|
|
18
18
|
duration?: number;
|
|
19
|
+
delete?: boolean;
|
|
19
20
|
important?: boolean;
|
|
20
21
|
action?: {
|
|
21
22
|
label: string;
|
|
@@ -26,23 +27,25 @@ interface ToastT {
|
|
|
26
27
|
onClick?: () => void;
|
|
27
28
|
};
|
|
28
29
|
promise?: PromiseT;
|
|
29
|
-
promiseData?: PromiseData;
|
|
30
30
|
style?: React.CSSProperties;
|
|
31
31
|
className?: string;
|
|
32
|
+
descriptionClassName?: string;
|
|
32
33
|
}
|
|
33
34
|
type Position = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center';
|
|
34
35
|
type ExternalToast = Omit<ToastT, 'id' | 'type' | 'title'>;
|
|
35
36
|
|
|
36
|
-
declare const toast: ((message: string, data?: ExternalToast) =>
|
|
37
|
-
success: (message: string, data?: ExternalToast) =>
|
|
38
|
-
error: (message: string, data?: ExternalToast) =>
|
|
39
|
-
custom: (jsx: (id: number) => React.ReactElement) => void;
|
|
40
|
-
message: (message: string, data?: ExternalToast) =>
|
|
41
|
-
promise: (promise: PromiseT, data?: PromiseData) =>
|
|
37
|
+
declare const toast: ((message: string | React.ReactNode, data?: ExternalToast) => number) & {
|
|
38
|
+
success: (message: string | React.ReactNode, data?: ExternalToast) => number;
|
|
39
|
+
error: (message: string | React.ReactNode, data?: ExternalToast) => number;
|
|
40
|
+
custom: (jsx: (id: number) => React.ReactElement, data?: ExternalToast) => void;
|
|
41
|
+
message: (message: string | React.ReactNode, data?: ExternalToast) => number;
|
|
42
|
+
promise: (promise: PromiseT, data?: PromiseData) => number;
|
|
43
|
+
dismiss: (id: number) => number;
|
|
42
44
|
};
|
|
43
45
|
|
|
44
46
|
interface ToastOptions {
|
|
45
47
|
className?: string;
|
|
48
|
+
descriptionClassName?: string;
|
|
46
49
|
style?: React.CSSProperties;
|
|
47
50
|
}
|
|
48
51
|
interface ToasterProps {
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use client"
|
|
2
|
-
var ht=Object.create;var j=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var bt=Object.getOwnPropertyNames;var vt=Object.getPrototypeOf,yt=Object.prototype.hasOwnProperty;var xt=(o,a)=>{for(var t in a)j(o,t,{get:a[t],enumerable:!0})},st=(o,a,t,r)=>{if(a&&typeof a=="object"||typeof a=="function")for(let i of bt(a))!yt.call(o,i)&&i!==t&&j(o,i,{get:()=>a[i],enumerable:!(r=gt(a,i))||r.enumerable});return o};var rt=(o,a,t)=>(t=o!=null?ht(vt(o)):{},st(a||!o||!o.__esModule?j(t,"default",{value:o,enumerable:!0}):t,o)),Tt=o=>st(j({},"__esModule",{value:!0}),o);var Yt={};xt(Yt,{Toaster:()=>Dt,toast:()=>lt});module.exports=Tt(Yt);var e=rt(require("react"));function G(o,{insertAt:a}={}){if(!o||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],r=document.createElement("style");r.type="text/css",a==="top"&&t.firstChild?t.insertBefore(r,t.firstChild):t.appendChild(r),r.styleSheet?r.styleSheet.cssText=o:r.appendChild(document.createTextNode(o))}G(`[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 6px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);display:flex;align-items:center;gap:6px;position:absolute;opacity:0;transform:var(--y);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;touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:-3px;margin-right:4px}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:auto;border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{opacity:0}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}
|
|
3
|
-
`);var
|
|
2
|
+
var bt=Object.create;var j=Object.defineProperty;var vt=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var xt=Object.getPrototypeOf,Tt=Object.prototype.hasOwnProperty;var wt=(s,a)=>{for(var t in a)j(s,t,{get:a[t],enumerable:!0})},st=(s,a,t,o)=>{if(a&&typeof a=="object"||typeof a=="function")for(let l of yt(a))!Tt.call(s,l)&&l!==t&&j(s,l,{get:()=>a[l],enumerable:!(o=vt(a,l))||o.enumerable});return s};var rt=(s,a,t)=>(t=s!=null?bt(xt(s)):{},st(a||!s||!s.__esModule?j(t,"default",{value:s,enumerable:!0}):t,s)),St=s=>st(j({},"__esModule",{value:!0}),s);var At={};wt(At,{Toaster:()=>Yt,toast:()=>lt});module.exports=St(At);var e=rt(require("react"));function G(s,{insertAt:a}={}){if(!s||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",a==="top"&&t.firstChild?t.insertBefore(o,t.firstChild):t.appendChild(o),o.styleSheet?o.styleSheet.cssText=s:o.appendChild(document.createTextNode(s))}G(`[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 6px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:-3px;margin-right:4px}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:auto;border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{opacity:0}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}
|
|
3
|
+
`);var y=rt(require("react")),nt=s=>{switch(s){case"success":return kt;case"error":return Ct;default:}},Et=Array(12).fill(0),it=({visible:s})=>y.default.createElement("div",{className:"sonner-loading-wrapper","data-visible":s},y.default.createElement("div",{className:"sonner-spinner"},Et.map((a,t)=>y.default.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),kt=y.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},y.default.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"}));var Ct=y.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},y.default.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"}));var N=0,X=class{constructor(){this.subscribe=a=>(this.subscribers.push(a),()=>{let t=this.subscribers.indexOf(a);this.subscribers.splice(t,1)});this.publish=a=>{this.subscribers.forEach(t=>t(a))};this.dismiss=a=>(this.subscribers.forEach(t=>t({id:a,dismiss:!0})),a);this.message=(a,t)=>{let o=N++;return this.publish({...t,id:o,title:a}),o};this.error=(a,t)=>{let o=N++;return this.publish({...t,id:o,type:"error",title:a}),o};this.success=(a,t)=>{let o=N++;return this.publish({...t,id:o,type:"success",title:a}),o};this.promise=(a,t)=>{let o=N++;return this.publish({...t,promise:a,id:o}),o};this.custom=(a,t)=>{let o=N++;this.publish({jsx:a(o),id:o,...t})};this.subscribers=[]}},f=new X,Nt=(s,a)=>{let t=N++;return f.publish({title:s,...a,id:t}),t},Pt=Nt,lt=Object.assign(Pt,{success:f.success,error:f.error,custom:f.custom,message:f.message,promise:f.promise,dismiss:f.dismiss});var It=3,Bt="32px",Mt=4e3,zt=356,dt=14,Dt=20,Ht=200,Rt=s=>{var at;let{invert:a,toast:t,interacting:o,setHeights:l,visibleToasts:O,heights:w,index:h,toasts:U,expanded:P,removeToast:M,closeButton:_,style:F,className:c="",descriptionClassName:S="",duration:E,position:z,expandByDefault:I}=s,[D,g]=e.default.useState(!1),[B,H]=e.default.useState(!1),[$,R]=e.default.useState(!1),[x,K]=e.default.useState(!1),[u,b]=e.default.useState(null),[d,i]=e.default.useState(0),[v,Y]=e.default.useState(0),m=e.default.useRef(null),ct=h===0,ut=h+1<=O,q=t.type,pt=t.className||"",mt=t.descriptionClassName||"",A=e.default.useMemo(()=>w.findIndex(r=>r.toastId===t.id)||0,[w,t.id]),Q=e.default.useMemo(()=>t.duration||E||Mt,[t.duration,E]),V=e.default.useRef(0),k=e.default.useRef(0),W=e.default.useRef(Q),Z=e.default.useRef(0),L=e.default.useRef(null),[tt,ft]=z.split("-"),et=e.default.useMemo(()=>w.reduce((r,n,p)=>p>=A?r:r+n.height,0),[w,A]),ht=t.invert||a,J=u==="loading";k.current=e.default.useMemo(()=>A*dt+et,[A,et]),e.default.useEffect(()=>{g(!0)},[]),e.default.useEffect(()=>{t.promise&&(b("loading"),t.promise instanceof Promise?t.promise.then(()=>{b("success")}).catch(()=>{b("error")}):typeof t.promise=="function"&&t.promise().then(()=>{b("success")}).catch(()=>{b("error")}))},[t]);let T=e.default.useCallback(()=>{H(!0),i(k.current),l(r=>r.filter(n=>n.toastId!==t.id)),setTimeout(()=>{M(t)},Ht)},[t,M,l,k]);e.default.useEffect(()=>{if(t.promise&&u==="loading")return;let r;return P||o?(()=>{if(Z.current<V.current){let C=new Date().getTime()-V.current;W.current=W.current-C}Z.current=new Date().getTime()})():(()=>{V.current=new Date().getTime(),r=setTimeout(()=>{T()},W.current)})(),()=>clearTimeout(r)},[P,o,I,t,Q,T,t.promise,u]),e.default.useEffect(()=>{let r=m.current;if(r){let n=r.getBoundingClientRect().height;return Y(n),l(p=>[{toastId:t.id,height:n},...p]),()=>l(p=>p.filter(C=>C.toastId!==t.id))}},[l,t.id]),e.default.useEffect(()=>{t.delete&&T()},[t.delete]);let gt=e.default.useMemo(()=>{if(!(n=>Boolean(n.promise))(t))return null;switch(u){case"loading":return t.loading;case"success":return t.success;case"error":return t.error;default:return null}},[u]);return e.default.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:m,className:c+" "+pt,"data-sonner-toast":"","data-styled":!Boolean(t.jsx),"data-mounted":D,"data-promise":Boolean(t.promise),"data-removed":B,"data-visible":ut,"data-y-position":tt,"data-x-position":ft,"data-index":h,"data-front":ct,"data-swiping":$,"data-type":q,"data-invert":ht,"data-swipe-out":x,"data-expanded":Boolean(P||I&&D),style:{"--index":h,"--toasts-before":h,"--z-index":U.length-h,"--offset":`${B?d:k.current}px`,"--initial-height":I?"auto":`${v}px`,...F,...t.style},onPointerDown:r=>{J||(i(k.current),r.target.setPointerCapture(r.pointerId),r.target.tagName!=="BUTTON"&&(R(!0),L.current=r.clientY))},onPointerUp:()=>{var n,p;if(x)return;let r=Number(((n=m.current)==null?void 0:n.style.getPropertyValue("--swipe-amount").replace("px",""))||0);if(Math.abs(r)>=Dt){i(k.current),T(),K(!0);return}(p=m.current)==null||p.style.setProperty("--swipe-amount","0px"),L.current=null,R(!1)},onPointerMove:r=>{var C,ot;if(!L.current)return;let n=r.clientY-L.current;if(!(tt==="top"?n<0:n>0)){(C=m.current)==null||C.style.setProperty("--swipe-amount","0px");return}(ot=m.current)==null||ot.style.setProperty("--swipe-amount",`${n}px`)}},_&&!t.jsx?e.default.createElement("button",{"aria-label":"Close toast","data-disabled":J,"data-close-button":!0,onClick:J?void 0:T},e.default.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},e.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,t.jsx||e.default.isValidElement(t.title)?t.jsx||t.title:e.default.createElement(e.default.Fragment,null,q||t.icon||t.promise?e.default.createElement("div",{"data-icon":""},t.promise?e.default.createElement(it,{visible:u==="loading"}):null,t.icon||nt(u!=null?u:t.type)):null,e.default.createElement("div",{"data-content":""},e.default.createElement("div",{"data-title":""},(at=t.title)!=null?at:gt),t.description?e.default.createElement("div",{"data-description":"",className:S+mt},t.description):null),t.cancel?e.default.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var r;T(),(r=t.cancel)!=null&&r.onClick&&t.cancel.onClick()}},t.cancel.label):null,t.action?e.default.createElement("button",{"data-button":"",onClick:()=>{var r;T(),(r=t.action)==null||r.onClick()}},t.action.label):null))},Yt=s=>{var b;let{invert:a,position:t="bottom-right",hotkey:o=["altKey","KeyT"],expand:l,closeButton:O,className:w,offset:h,theme:U="light",richColors:P,duration:M,style:_,visibleToasts:F=It,toastOptions:c}=s,[S,E]=e.default.useState([]),[z,I]=e.default.useState([]),[D,g]=e.default.useState(!1),[B,H]=e.default.useState(!1),[$,R]=t.split("-"),x=e.default.useRef(null),K=o.join("+").replace(/Key/g,"").replace(/Digit/g,""),u=e.default.useCallback(d=>E(i=>i.filter(({id:v})=>v!==d.id)),[]);return e.default.useEffect(()=>f.subscribe(d=>{if(d.dismiss){E(i=>i.map(v=>v.id===d.id?{...v,delete:!0}:v));return}E(i=>[d,...i])}),[]),e.default.useEffect(()=>{S.length<=1&&g(!1)},[S]),e.default.useEffect(()=>{let d=i=>{var Y;o.every(m=>i[m]||i.code===m)&&(g(!0),(Y=x.current)==null||Y.focus()),i.code==="Escape"&&(document.activeElement===x.current||x.current.contains(document.activeElement))&&g(!1)};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[o]),e.default.createElement("div",{role:"region","aria-label":`Notifications ${K}`,tabIndex:-1},e.default.createElement("ol",{tabIndex:-1,ref:x,className:w,"data-sonner-toaster":!0,"data-theme":U,"data-rich-colors":P,"data-y-position":$,"data-x-position":R,style:{"--front-toast-height":`${(b=z[0])==null?void 0:b.height}px`,"--offset":h||Bt,"--width":`${zt}px`,"--gap":`${dt}px`,..._},onMouseEnter:()=>g(!0),onMouseMove:()=>g(!0),onMouseLeave:()=>{B||g(!1)},onPointerDown:()=>{H(!0)},onPointerUp:()=>H(!1)},S.map((d,i)=>e.default.createElement(Rt,{key:d.id,index:i,toast:d,duration:M,className:c==null?void 0:c.className,descriptionClassName:c==null?void 0:c.descriptionClassName,invert:a,visibleToasts:F,closeButton:O,interacting:B,position:t,style:c==null?void 0:c.style,removeToast:u,toasts:S,heights:z,setHeights:I,expandByDefault:l,expanded:D}))))};0&&(module.exports={Toaster,toast});
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/state.ts"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport './styles.css';\nimport { getAsset, Loader } from './assets';\nimport { HeightT, Position, ToastT } from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_TRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\ninterface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n duration?: number;\n className?: string;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton,\n style,\n className = '',\n duration: durationFromToaster,\n position,\n expandByDefault,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [promiseStatus, setPromiseStatus] = React.useState<'loading' | 'success' | 'error' | null>(null);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const toastClassname = toast.className || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const closeTimerRemainingTimeRef = React.useRef(duration);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartYRef = React.useRef<number | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up untill current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const invert = toast.invert || ToasterInvert;\n const disabled = promiseStatus === 'loading';\n 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 if (toast.promise) {\n setPromiseStatus('loading');\n if (toast.promise instanceof Promise) {\n toast.promise\n .then(() => {\n setPromiseStatus('success');\n })\n .catch(() => {\n setPromiseStatus('error');\n });\n } else if (typeof toast.promise === 'function') {\n toast\n .promise()\n .then(() => {\n setPromiseStatus('success');\n })\n .catch(() => {\n setPromiseStatus('error');\n });\n }\n }\n }, [toast]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if (toast.promise && promiseStatus === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n deleteToast();\n }, closeTimerRemainingTimeRef.current);\n };\n\n if (expanded || interacting) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, expandByDefault, toast, duration, deleteToast, toast.promise, promiseStatus]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height }, ...h]);\n\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n const promiseTitle = React.useMemo(() => {\n switch (promiseStatus) {\n case 'loading':\n return toast.promiseData.loading;\n case 'success':\n return toast.promiseData.success;\n case 'error':\n return toast.promiseData.error;\n default:\n return null;\n }\n }, [toast.promiseData, promiseStatus]);\n\n return (\n <li\n aria-live={toast.important ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n role=\"status\"\n tabIndex={0}\n ref={toastRef}\n className={className + ' ' + toastClassname}\n data-sonner-toast=\"\"\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled) return;\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartYRef.current = event.clientY;\n }}\n onPointerUp={() => {\n if (swipeOut) return;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n\n // Remove only if treshold is met\n if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {\n setOffsetBeforeRemove(offset.current);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n pointerStartYRef.current = null;\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartYRef.current) return;\n\n const yPosition = event.clientY - pointerStartYRef.current;\n\n const isAllowedToSwipe = y === 'top' ? yPosition < 0 : yPosition > 0;\n // We don't want to swipe to the left and vice versa depending on toast position\n if (!isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n }}\n >\n {closeButton ? (\n <button\n aria-label=\"Close toast\"\n data-disabled={disabled}\n data-close-button\n onClick={disabled ? undefined : deleteToast}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n ) : null}\n {toast.jsx ? (\n toast.jsx\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\">\n {toast.promise ? <Loader visible={promiseStatus === 'loading'} /> : null}\n {toast.icon || getAsset(promiseStatus ?? toast.type)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\">{toast.title ?? promiseTitle}</div>\n {toast.description ? <div data-description=\"\">{toast.description}</div> : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick();\n }\n }}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n onClick={() => {\n deleteToast();\n toast.action?.onClick();\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\ninterface ToastOptions {\n className?: string;\n style?: React.CSSProperties;\n}\n\ninterface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: number;\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [y, x] = position.split('-');\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n setToasts((toasts) => [toast, ...toasts]);\n });\n }, []);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <div role=\"region\" aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={theme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={() => {\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts.map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={duration}\n className={toastOptions?.className}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n removeToast={removeToast}\n toasts={toasts}\n heights={heights}\n setHeights={setHeights}\n expandByDefault={expand}\n expanded={expanded}\n />\n ))}\n </ol>\n </div>\n );\n};\nexport { toast, Toaster };\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 6px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);display:flex;align-items:center;gap:6px;position:absolute;opacity:0;transform:var(--y);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;touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:-3px;margin-right:4px}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:auto;border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{opacity:0}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}\\n\")","'use client';\nimport React from 'react';\nimport { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from 'react';\nimport { ExternalToast, ToastT, PromiseData, PromiseT } from './types';\n\nlet toastsCounter = 0;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast) => void>;\n\n constructor() {\n this.subscribers = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT) => 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 message = (message: string, data?: ExternalToast) => {\n this.publish({ ...data, id: toastsCounter++, title: message });\n };\n\n error = (message: string, data?: ExternalToast) => {\n this.publish({ ...data, id: toastsCounter++, type: 'error', title: message });\n };\n\n success = (message: string, data?: ExternalToast) => {\n this.publish({ ...data, id: toastsCounter++, type: 'success', title: message });\n };\n\n promise = (promise: PromiseT, data?: PromiseData) => {\n this.publish({ promiseData: data, promise, id: toastsCounter++ });\n };\n\n // We can't provide the toast we just created as a prop as we didn't creat it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?\n custom = (jsx: (id: number) => React.ReactElement) => {\n const id = toastsCounter++;\n this.publish({ jsx: jsx(id), id });\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: string, data?: ExternalToast) => {\n ToastState.publish({\n title: message,\n ...data,\n id: toastsCounter++,\n });\n};\n\nconst basicToast = toastFunction;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(basicToast, {\n success: ToastState.success,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n});\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","__toCommonJS","import_react","styleInject","css","insertAt","head","style","styleInject","import_react","getAsset","type","SuccessIcon","ErrorIcon","bars","Loader","visible","React","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","message","promise","jsx","id","ToastState","toastFunction","basicToast","toast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_TRESHOLD","TIME_BEFORE_UNMOUNT","Toast","props","_a","ToasterInvert","toast","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButton","style","className","durationFromToaster","position","expandByDefault","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","promiseStatus","setPromiseStatus","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","toastRef","isFront","isVisible","toastType","toastClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartYRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","deleteToast","h","timeoutId","elapsedTime","toastNode","promiseTitle","event","_b","swipeAmount","yPosition","Loader","getAsset","Toaster","hotkey","expand","theme","richColors","toastOptions","setToasts","setExpanded","setInteracting","listRef","hotkeyLabel","id","ToastState","handleKeyDown","key"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/state.ts"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport './styles.css';\nimport { getAsset, Loader } from './assets';\nimport { HeightT, Position, PromiseData, ToastT, ToastToDismiss } from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_TRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\ninterface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n duration?: number;\n className?: string;\n descriptionClassName?: string;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton,\n style,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n expandByDefault,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [promiseStatus, setPromiseStatus] = React.useState<'loading' | 'success' | 'error' | null>(null);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const closeTimerRemainingTimeRef = React.useRef(duration);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartYRef = React.useRef<number | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up untill current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const invert = toast.invert || ToasterInvert;\n const disabled = promiseStatus === 'loading';\n 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 if (toast.promise) {\n setPromiseStatus('loading');\n if (toast.promise instanceof Promise) {\n toast.promise\n .then(() => {\n setPromiseStatus('success');\n })\n .catch(() => {\n setPromiseStatus('error');\n });\n } else if (typeof toast.promise === 'function') {\n toast\n .promise()\n .then(() => {\n setPromiseStatus('success');\n })\n .catch(() => {\n setPromiseStatus('error');\n });\n }\n }\n }, [toast]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if (toast.promise && promiseStatus === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n deleteToast();\n }, closeTimerRemainingTimeRef.current);\n };\n\n if (expanded || interacting) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, expandByDefault, toast, duration, deleteToast, toast.promise, promiseStatus]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height }, ...h]);\n\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [toast.delete]);\n\n const promiseTitle = React.useMemo(() => {\n const isPromise = (toast: ToastT): toast is PromiseData & { id: number } => Boolean(toast.promise);\n\n if (!isPromise(toast)) return null;\n\n switch (promiseStatus) {\n case 'loading':\n return toast.loading;\n case 'success':\n return toast.success;\n case 'error':\n return toast.error;\n default:\n return null;\n }\n }, [promiseStatus]);\n\n return (\n <li\n aria-live={toast.important ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n role=\"status\"\n tabIndex={0}\n ref={toastRef}\n className={className + ' ' + toastClassname}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled) return;\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartYRef.current = event.clientY;\n }}\n onPointerUp={() => {\n if (swipeOut) return;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n\n // Remove only if treshold is met\n if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {\n setOffsetBeforeRemove(offset.current);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n pointerStartYRef.current = null;\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartYRef.current) return;\n\n const yPosition = event.clientY - pointerStartYRef.current;\n\n const isAllowedToSwipe = y === 'top' ? yPosition < 0 : yPosition > 0;\n // We don't want to swipe to the left and vice versa depending on toast position\n if (!isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label=\"Close toast\"\n data-disabled={disabled}\n data-close-button\n onClick={disabled ? undefined : deleteToast}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n ) : null}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx || toast.title\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\">\n {toast.promise ? <Loader visible={promiseStatus === 'loading'} /> : null}\n {toast.icon || getAsset(promiseStatus ?? toast.type)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\">{toast.title ?? promiseTitle}</div>\n {toast.description ? (\n <div data-description=\"\" className={descriptionClassName + toastDescriptionClassname}>\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick();\n }\n }}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n onClick={() => {\n deleteToast();\n toast.action?.onClick();\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\ninterface ToastOptions {\n className?: string;\n descriptionClassName?: string;\n style?: React.CSSProperties;\n}\n\ninterface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: number;\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [y, x] = position.split('-');\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n setToasts((toasts) => [toast, ...toasts]);\n });\n }, []);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <div role=\"region\" aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={theme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={() => {\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts.map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n removeToast={removeToast}\n toasts={toasts}\n heights={heights}\n setHeights={setHeights}\n expandByDefault={expand}\n expanded={expanded}\n />\n ))}\n </ol>\n </div>\n );\n};\nexport { toast, Toaster };\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 6px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:-3px;margin-right:4px}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:auto;border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{opacity:0}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}\\n\")","'use client';\nimport React from 'react';\nimport { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from 'react';\nimport { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss } from './types';\n\nlet toastsCounter = 0;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n\n constructor() {\n this.subscribers = [];\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 dismiss = (id: number) => {\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = toastsCounter++;\n this.publish({ ...data, id, title: message });\n return id;\n };\n\n error = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = toastsCounter++;\n this.publish({ ...data, id, type: 'error', title: message });\n return id;\n };\n\n success = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = toastsCounter++;\n this.publish({ ...data, id, type: 'success', title: message });\n return id;\n };\n\n promise = (promise: PromiseT, data?: PromiseData) => {\n const id = toastsCounter++;\n this.publish({ ...data, promise, id });\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't creat it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?\n custom = (jsx: (id: number) => React.ReactElement, data?: ExternalToast) => {\n const id = toastsCounter++;\n this.publish({ jsx: jsx(id), id, ...data });\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = toastsCounter++;\n ToastState.publish({\n title: message,\n ...data,\n id,\n });\n return id;\n};\n\nconst basicToast = toastFunction;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(basicToast, {\n success: ToastState.success,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n});\n"],"mappings":"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","names":["src_exports","__export","Toaster","toast","__toCommonJS","import_react","styleInject","css","insertAt","head","style","styleInject","import_react","getAsset","type","SuccessIcon","ErrorIcon","bars","Loader","visible","React","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","id","message","promise","jsx","ToastState","toastFunction","basicToast","toast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_TRESHOLD","TIME_BEFORE_UNMOUNT","Toast","props","_a","ToasterInvert","toast","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButton","style","className","descriptionClassName","durationFromToaster","position","expandByDefault","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","promiseStatus","setPromiseStatus","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartYRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","deleteToast","h","timeoutId","elapsedTime","toastNode","promiseTitle","event","_b","swipeAmount","yPosition","Loader","getAsset","Toaster","hotkey","expand","theme","richColors","toastOptions","setToasts","setExpanded","setInteracting","listRef","hotkeyLabel","id","ToastState","t","handleKeyDown","key"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
"use client"
|
|
2
|
-
import e from"react";function J(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))}J(`[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 6px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);display:flex;align-items:center;gap:6px;position:absolute;opacity:0;transform:var(--y);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;touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:-3px;margin-right:4px}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:auto;border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{opacity:0}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}
|
|
3
|
-
`);import
|
|
2
|
+
import e from"react";function J(i,{insertAt:s}={}){if(!i||typeof document=="undefined")return;let t=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",s==="top"&&t.firstChild?t.insertBefore(a,t.firstChild):t.appendChild(a),a.styleSheet?a.styleSheet.cssText=i:a.appendChild(document.createTextNode(i))}J(`[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 6px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:-3px;margin-right:4px}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:auto;border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{opacity:0}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}
|
|
3
|
+
`);import T from"react";var ot=i=>{switch(i){case"success":return ft;case"error":return ht;default:}},mt=Array(12).fill(0),st=({visible:i})=>T.createElement("div",{className:"sonner-loading-wrapper","data-visible":i},T.createElement("div",{className:"sonner-spinner"},mt.map((s,t)=>T.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${t}`})))),ft=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"}));var ht=T.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},T.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"}));var N=0,G=class{constructor(){this.subscribe=s=>(this.subscribers.push(s),()=>{let t=this.subscribers.indexOf(s);this.subscribers.splice(t,1)});this.publish=s=>{this.subscribers.forEach(t=>t(s))};this.dismiss=s=>(this.subscribers.forEach(t=>t({id:s,dismiss:!0})),s);this.message=(s,t)=>{let a=N++;return this.publish({...t,id:a,title:s}),a};this.error=(s,t)=>{let a=N++;return this.publish({...t,id:a,type:"error",title:s}),a};this.success=(s,t)=>{let a=N++;return this.publish({...t,id:a,type:"success",title:s}),a};this.promise=(s,t)=>{let a=N++;return this.publish({...t,promise:s,id:a}),a};this.custom=(s,t)=>{let a=N++;this.publish({jsx:s(a),id:a,...t})};this.subscribers=[]}},m=new G,gt=(i,s)=>{let t=N++;return m.publish({title:i,...s,id:t}),t},bt=gt,vt=Object.assign(bt,{success:m.success,error:m.error,custom:m.custom,message:m.message,promise:m.promise,dismiss:m.dismiss});var yt=3,xt="32px",Tt=4e3,wt=356,rt=14,St=20,Et=200,kt=i=>{var et;let{invert:s,toast:t,interacting:a,setHeights:v,visibleToasts:j,heights:w,index:f,toasts:O,expanded:P,removeToast:M,closeButton:U,style:_,className:d="",descriptionClassName:S="",duration:E,position:z,expandByDefault:I}=i,[D,h]=e.useState(!1),[B,H]=e.useState(!1),[F,R]=e.useState(!1),[y,$]=e.useState(!1),[c,g]=e.useState(null),[l,n]=e.useState(0),[b,Y]=e.useState(0),p=e.useRef(null),nt=f===0,it=f+1<=j,X=t.type,lt=t.className||"",dt=t.descriptionClassName||"",A=e.useMemo(()=>w.findIndex(o=>o.toastId===t.id)||0,[w,t.id]),q=e.useMemo(()=>t.duration||E||Tt,[t.duration,E]),K=e.useRef(0),k=e.useRef(0),V=e.useRef(q),Q=e.useRef(0),L=e.useRef(null),[Z,ct]=z.split("-"),tt=e.useMemo(()=>w.reduce((o,r,u)=>u>=A?o:o+r.height,0),[w,A]),ut=t.invert||s,W=c==="loading";k.current=e.useMemo(()=>A*rt+tt,[A,tt]),e.useEffect(()=>{h(!0)},[]),e.useEffect(()=>{t.promise&&(g("loading"),t.promise instanceof Promise?t.promise.then(()=>{g("success")}).catch(()=>{g("error")}):typeof t.promise=="function"&&t.promise().then(()=>{g("success")}).catch(()=>{g("error")}))},[t]);let x=e.useCallback(()=>{H(!0),n(k.current),v(o=>o.filter(r=>r.toastId!==t.id)),setTimeout(()=>{M(t)},Et)},[t,M,v,k]);e.useEffect(()=>{if(t.promise&&c==="loading")return;let o;return P||a?(()=>{if(Q.current<K.current){let C=new Date().getTime()-K.current;V.current=V.current-C}Q.current=new Date().getTime()})():(()=>{K.current=new Date().getTime(),o=setTimeout(()=>{x()},V.current)})(),()=>clearTimeout(o)},[P,a,I,t,q,x,t.promise,c]),e.useEffect(()=>{let o=p.current;if(o){let r=o.getBoundingClientRect().height;return Y(r),v(u=>[{toastId:t.id,height:r},...u]),()=>v(u=>u.filter(C=>C.toastId!==t.id))}},[v,t.id]),e.useEffect(()=>{t.delete&&x()},[t.delete]);let pt=e.useMemo(()=>{if(!(r=>Boolean(r.promise))(t))return null;switch(c){case"loading":return t.loading;case"success":return t.success;case"error":return t.error;default:return null}},[c]);return e.createElement("li",{"aria-live":t.important?"assertive":"polite","aria-atomic":"true",role:"status",tabIndex:0,ref:p,className:d+" "+lt,"data-sonner-toast":"","data-styled":!Boolean(t.jsx),"data-mounted":D,"data-promise":Boolean(t.promise),"data-removed":B,"data-visible":it,"data-y-position":Z,"data-x-position":ct,"data-index":f,"data-front":nt,"data-swiping":F,"data-type":X,"data-invert":ut,"data-swipe-out":y,"data-expanded":Boolean(P||I&&D),style:{"--index":f,"--toasts-before":f,"--z-index":O.length-f,"--offset":`${B?l:k.current}px`,"--initial-height":I?"auto":`${b}px`,..._,...t.style},onPointerDown:o=>{W||(n(k.current),o.target.setPointerCapture(o.pointerId),o.target.tagName!=="BUTTON"&&(R(!0),L.current=o.clientY))},onPointerUp:()=>{var r,u;if(y)return;let o=Number(((r=p.current)==null?void 0:r.style.getPropertyValue("--swipe-amount").replace("px",""))||0);if(Math.abs(o)>=St){n(k.current),x(),$(!0);return}(u=p.current)==null||u.style.setProperty("--swipe-amount","0px"),L.current=null,R(!1)},onPointerMove:o=>{var C,at;if(!L.current)return;let r=o.clientY-L.current;if(!(Z==="top"?r<0:r>0)){(C=p.current)==null||C.style.setProperty("--swipe-amount","0px");return}(at=p.current)==null||at.style.setProperty("--swipe-amount",`${r}px`)}},U&&!t.jsx?e.createElement("button",{"aria-label":"Close toast","data-disabled":W,"data-close-button":!0,onClick:W?void 0:x},e.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},e.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))):null,t.jsx||e.isValidElement(t.title)?t.jsx||t.title:e.createElement(e.Fragment,null,X||t.icon||t.promise?e.createElement("div",{"data-icon":""},t.promise?e.createElement(st,{visible:c==="loading"}):null,t.icon||ot(c!=null?c:t.type)):null,e.createElement("div",{"data-content":""},e.createElement("div",{"data-title":""},(et=t.title)!=null?et:pt),t.description?e.createElement("div",{"data-description":"",className:S+dt},t.description):null),t.cancel?e.createElement("button",{"data-button":!0,"data-cancel":!0,onClick:()=>{var o;x(),(o=t.cancel)!=null&&o.onClick&&t.cancel.onClick()}},t.cancel.label):null,t.action?e.createElement("button",{"data-button":"",onClick:()=>{var o;x(),(o=t.action)==null||o.onClick()}},t.action.label):null))},Rt=i=>{var g;let{invert:s,position:t="bottom-right",hotkey:a=["altKey","KeyT"],expand:v,closeButton:j,className:w,offset:f,theme:O="light",richColors:P,duration:M,style:U,visibleToasts:_=yt,toastOptions:d}=i,[S,E]=e.useState([]),[z,I]=e.useState([]),[D,h]=e.useState(!1),[B,H]=e.useState(!1),[F,R]=t.split("-"),y=e.useRef(null),$=a.join("+").replace(/Key/g,"").replace(/Digit/g,""),c=e.useCallback(l=>E(n=>n.filter(({id:b})=>b!==l.id)),[]);return e.useEffect(()=>m.subscribe(l=>{if(l.dismiss){E(n=>n.map(b=>b.id===l.id?{...b,delete:!0}:b));return}E(n=>[l,...n])}),[]),e.useEffect(()=>{S.length<=1&&h(!1)},[S]),e.useEffect(()=>{let l=n=>{var Y;a.every(p=>n[p]||n.code===p)&&(h(!0),(Y=y.current)==null||Y.focus()),n.code==="Escape"&&(document.activeElement===y.current||y.current.contains(document.activeElement))&&h(!1)};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[a]),e.createElement("div",{role:"region","aria-label":`Notifications ${$}`,tabIndex:-1},e.createElement("ol",{tabIndex:-1,ref:y,className:w,"data-sonner-toaster":!0,"data-theme":O,"data-rich-colors":P,"data-y-position":F,"data-x-position":R,style:{"--front-toast-height":`${(g=z[0])==null?void 0:g.height}px`,"--offset":f||xt,"--width":`${wt}px`,"--gap":`${rt}px`,...U},onMouseEnter:()=>h(!0),onMouseMove:()=>h(!0),onMouseLeave:()=>{B||h(!1)},onPointerDown:()=>{H(!0)},onPointerUp:()=>H(!1)},S.map((l,n)=>e.createElement(kt,{key:l.id,index:n,toast:l,duration:M,className:d==null?void 0:d.className,descriptionClassName:d==null?void 0:d.descriptionClassName,invert:s,visibleToasts:_,closeButton:j,interacting:B,position:t,style:d==null?void 0:d.style,removeToast:c,toasts:S,heights:z,setHeights:I,expandByDefault:v,expanded:D}))))};export{Rt as Toaster,vt as toast};
|
|
4
4
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/state.ts"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport './styles.css';\nimport { getAsset, Loader } from './assets';\nimport { HeightT, Position, ToastT } from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_TRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\ninterface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n duration?: number;\n className?: string;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton,\n style,\n className = '',\n duration: durationFromToaster,\n position,\n expandByDefault,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [promiseStatus, setPromiseStatus] = React.useState<'loading' | 'success' | 'error' | null>(null);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const toastClassname = toast.className || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const closeTimerRemainingTimeRef = React.useRef(duration);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartYRef = React.useRef<number | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up untill current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const invert = toast.invert || ToasterInvert;\n const disabled = promiseStatus === 'loading';\n 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 if (toast.promise) {\n setPromiseStatus('loading');\n if (toast.promise instanceof Promise) {\n toast.promise\n .then(() => {\n setPromiseStatus('success');\n })\n .catch(() => {\n setPromiseStatus('error');\n });\n } else if (typeof toast.promise === 'function') {\n toast\n .promise()\n .then(() => {\n setPromiseStatus('success');\n })\n .catch(() => {\n setPromiseStatus('error');\n });\n }\n }\n }, [toast]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if (toast.promise && promiseStatus === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n deleteToast();\n }, closeTimerRemainingTimeRef.current);\n };\n\n if (expanded || interacting) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, expandByDefault, toast, duration, deleteToast, toast.promise, promiseStatus]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height }, ...h]);\n\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n const promiseTitle = React.useMemo(() => {\n switch (promiseStatus) {\n case 'loading':\n return toast.promiseData.loading;\n case 'success':\n return toast.promiseData.success;\n case 'error':\n return toast.promiseData.error;\n default:\n return null;\n }\n }, [toast.promiseData, promiseStatus]);\n\n return (\n <li\n aria-live={toast.important ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n role=\"status\"\n tabIndex={0}\n ref={toastRef}\n className={className + ' ' + toastClassname}\n data-sonner-toast=\"\"\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled) return;\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartYRef.current = event.clientY;\n }}\n onPointerUp={() => {\n if (swipeOut) return;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n\n // Remove only if treshold is met\n if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {\n setOffsetBeforeRemove(offset.current);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n pointerStartYRef.current = null;\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartYRef.current) return;\n\n const yPosition = event.clientY - pointerStartYRef.current;\n\n const isAllowedToSwipe = y === 'top' ? yPosition < 0 : yPosition > 0;\n // We don't want to swipe to the left and vice versa depending on toast position\n if (!isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n }}\n >\n {closeButton ? (\n <button\n aria-label=\"Close toast\"\n data-disabled={disabled}\n data-close-button\n onClick={disabled ? undefined : deleteToast}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n ) : null}\n {toast.jsx ? (\n toast.jsx\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\">\n {toast.promise ? <Loader visible={promiseStatus === 'loading'} /> : null}\n {toast.icon || getAsset(promiseStatus ?? toast.type)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\">{toast.title ?? promiseTitle}</div>\n {toast.description ? <div data-description=\"\">{toast.description}</div> : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick();\n }\n }}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n onClick={() => {\n deleteToast();\n toast.action?.onClick();\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\ninterface ToastOptions {\n className?: string;\n style?: React.CSSProperties;\n}\n\ninterface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: number;\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [y, x] = position.split('-');\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n setToasts((toasts) => [toast, ...toasts]);\n });\n }, []);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <div role=\"region\" aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={theme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={() => {\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts.map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={duration}\n className={toastOptions?.className}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n removeToast={removeToast}\n toasts={toasts}\n heights={heights}\n setHeights={setHeights}\n expandByDefault={expand}\n expanded={expanded}\n />\n ))}\n </ol>\n </div>\n );\n};\nexport { toast, Toaster };\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 6px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);display:flex;align-items:center;gap:6px;position:absolute;opacity:0;transform:var(--y);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;touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:-3px;margin-right:4px}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:auto;border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{opacity:0}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}\\n\")","'use client';\nimport React from 'react';\nimport { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from 'react';\nimport { ExternalToast, ToastT, PromiseData, PromiseT } from './types';\n\nlet toastsCounter = 0;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast) => void>;\n\n constructor() {\n this.subscribers = [];\n }\n\n // We use arrow functions to maintain the correct `this` reference\n subscribe = (subscriber: (toast: ToastT) => 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 message = (message: string, data?: ExternalToast) => {\n this.publish({ ...data, id: toastsCounter++, title: message });\n };\n\n error = (message: string, data?: ExternalToast) => {\n this.publish({ ...data, id: toastsCounter++, type: 'error', title: message });\n };\n\n success = (message: string, data?: ExternalToast) => {\n this.publish({ ...data, id: toastsCounter++, type: 'success', title: message });\n };\n\n promise = (promise: PromiseT, data?: PromiseData) => {\n this.publish({ promiseData: data, promise, id: toastsCounter++ });\n };\n\n // We can't provide the toast we just created as a prop as we didn't creat it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?\n custom = (jsx: (id: number) => React.ReactElement) => {\n const id = toastsCounter++;\n this.publish({ jsx: jsx(id), id });\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: string, data?: ExternalToast) => {\n ToastState.publish({\n title: message,\n ...data,\n id: toastsCounter++,\n });\n};\n\nconst basicToast = toastFunction;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(basicToast, {\n success: ToastState.success,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n});\n"],"mappings":"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","names":["React","styleInject","css","insertAt","head","style","styleInject","React","getAsset","type","SuccessIcon","ErrorIcon","bars","Loader","visible","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","message","promise","jsx","id","ToastState","toastFunction","basicToast","toast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_TRESHOLD","TIME_BEFORE_UNMOUNT","Toast","props","_a","ToasterInvert","toast","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButton","style","className","durationFromToaster","position","expandByDefault","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","promiseStatus","setPromiseStatus","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","toastRef","isFront","isVisible","toastType","toastClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartYRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","deleteToast","h","timeoutId","elapsedTime","toastNode","promiseTitle","event","_b","swipeAmount","yPosition","Loader","getAsset","Toaster","hotkey","expand","theme","richColors","toastOptions","setToasts","setExpanded","setInteracting","listRef","hotkeyLabel","id","ToastState","handleKeyDown","key"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.tsx","#style-inject:#style-inject","../src/styles.css","../src/assets.tsx","../src/state.ts"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport './styles.css';\nimport { getAsset, Loader } from './assets';\nimport { HeightT, Position, PromiseData, ToastT, ToastToDismiss } from './types';\nimport { ToastState, toast } from './state';\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n\n// Viewport padding\nconst VIEWPORT_OFFSET = '32px';\n\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n\n// Default toast width\nconst TOAST_WIDTH = 356;\n\n// Default gap between toasts\nconst GAP = 14;\n\nconst SWIPE_TRESHOLD = 20;\n\nconst TIME_BEFORE_UNMOUNT = 200;\n\ninterface ToastProps {\n toast: ToastT;\n toasts: ToastT[];\n index: number;\n expanded: boolean;\n invert: boolean;\n heights: HeightT[];\n setHeights: React.Dispatch<React.SetStateAction<HeightT[]>>;\n removeToast: (toast: ToastT) => void;\n position: Position;\n visibleToasts: number;\n expandByDefault: boolean;\n closeButton: boolean;\n interacting: boolean;\n style?: React.CSSProperties;\n duration?: number;\n className?: string;\n descriptionClassName?: string;\n}\n\nconst Toast = (props: ToastProps) => {\n const {\n invert: ToasterInvert,\n toast,\n interacting,\n setHeights,\n visibleToasts,\n heights,\n index,\n toasts,\n expanded,\n removeToast,\n closeButton,\n style,\n className = '',\n descriptionClassName = '',\n duration: durationFromToaster,\n position,\n expandByDefault,\n } = props;\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [promiseStatus, setPromiseStatus] = React.useState<'loading' | 'success' | 'error' | null>(null);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const toastRef = React.useRef<HTMLLIElement>(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(\n () => heights.findIndex((height) => height.toastId === toast.id) || 0,\n [heights, toast.id],\n );\n const duration = React.useMemo(\n () => toast.duration || durationFromToaster || TOAST_LIFETIME,\n [toast.duration, durationFromToaster],\n );\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const closeTimerRemainingTimeRef = React.useRef(duration);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartYRef = React.useRef<number | null>(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(() => {\n return heights.reduce((prev, curr, reducerIndex) => {\n // Calculate offset up untill current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n\n return prev + curr.height;\n }, 0);\n }, [heights, heightIndex]);\n const invert = toast.invert || ToasterInvert;\n const disabled = promiseStatus === 'loading';\n 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 if (toast.promise) {\n setPromiseStatus('loading');\n if (toast.promise instanceof Promise) {\n toast.promise\n .then(() => {\n setPromiseStatus('success');\n })\n .catch(() => {\n setPromiseStatus('error');\n });\n } else if (typeof toast.promise === 'function') {\n toast\n .promise()\n .then(() => {\n setPromiseStatus('success');\n })\n .catch(() => {\n setPromiseStatus('error');\n });\n }\n }\n }, [toast]);\n\n const deleteToast = React.useCallback(() => {\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n\n setTimeout(() => {\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [toast, removeToast, setHeights, offset]);\n\n React.useEffect(() => {\n if (toast.promise && promiseStatus === 'loading') return;\n let timeoutId: NodeJS.Timeout;\n\n // Pause the timer on each hover\n const pauseTimer = () => {\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n\n closeTimerRemainingTimeRef.current = closeTimerRemainingTimeRef.current - elapsedTime;\n }\n\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n\n const startTimer = () => {\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(() => {\n deleteToast();\n }, closeTimerRemainingTimeRef.current);\n };\n\n if (expanded || interacting) {\n pauseTimer();\n } else {\n startTimer();\n }\n\n return () => clearTimeout(timeoutId);\n }, [expanded, interacting, expandByDefault, toast, duration, deleteToast, toast.promise, promiseStatus]);\n\n React.useEffect(() => {\n const toastNode = toastRef.current;\n\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height tot heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h) => [{ toastId: toast.id, height }, ...h]);\n\n return () => setHeights((h) => h.filter((height) => height.toastId !== toast.id));\n }\n }, [setHeights, toast.id]);\n\n React.useEffect(() => {\n if (toast.delete) {\n deleteToast();\n }\n }, [toast.delete]);\n\n const promiseTitle = React.useMemo(() => {\n const isPromise = (toast: ToastT): toast is PromiseData & { id: number } => Boolean(toast.promise);\n\n if (!isPromise(toast)) return null;\n\n switch (promiseStatus) {\n case 'loading':\n return toast.loading;\n case 'success':\n return toast.success;\n case 'error':\n return toast.error;\n default:\n return null;\n }\n }, [promiseStatus]);\n\n return (\n <li\n aria-live={toast.important ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n role=\"status\"\n tabIndex={0}\n ref={toastRef}\n className={className + ' ' + toastClassname}\n data-sonner-toast=\"\"\n data-styled={!Boolean(toast.jsx)}\n data-mounted={mounted}\n data-promise={Boolean(toast.promise)}\n data-removed={removed}\n data-visible={isVisible}\n data-y-position={y}\n data-x-position={x}\n data-index={index}\n data-front={isFront}\n data-swiping={swiping}\n data-type={toastType}\n data-invert={invert}\n data-swipe-out={swipeOut}\n data-expanded={Boolean(expanded || (expandByDefault && mounted))}\n style={\n {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style,\n } as React.CSSProperties\n }\n onPointerDown={(event) => {\n if (disabled) return;\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n (event.target as HTMLElement).setPointerCapture(event.pointerId);\n if ((event.target as HTMLElement).tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartYRef.current = event.clientY;\n }}\n onPointerUp={() => {\n if (swipeOut) return;\n const swipeAmount = Number(toastRef.current?.style.getPropertyValue('--swipe-amount').replace('px', '') || 0);\n\n // Remove only if treshold is met\n if (Math.abs(swipeAmount) >= SWIPE_TRESHOLD) {\n setOffsetBeforeRemove(offset.current);\n deleteToast();\n setSwipeOut(true);\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n pointerStartYRef.current = null;\n setSwiping(false);\n }}\n onPointerMove={(event) => {\n if (!pointerStartYRef.current) return;\n\n const yPosition = event.clientY - pointerStartYRef.current;\n\n const isAllowedToSwipe = y === 'top' ? yPosition < 0 : yPosition > 0;\n // We don't want to swipe to the left and vice versa depending on toast position\n if (!isAllowedToSwipe) {\n toastRef.current?.style.setProperty('--swipe-amount', '0px');\n return;\n }\n\n toastRef.current?.style.setProperty('--swipe-amount', `${yPosition}px`);\n }}\n >\n {closeButton && !toast.jsx ? (\n <button\n aria-label=\"Close toast\"\n data-disabled={disabled}\n data-close-button\n onClick={disabled ? undefined : deleteToast}\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.5\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n ) : null}\n {toast.jsx || React.isValidElement(toast.title) ? (\n toast.jsx || toast.title\n ) : (\n <>\n {toastType || toast.icon || toast.promise ? (\n <div data-icon=\"\">\n {toast.promise ? <Loader visible={promiseStatus === 'loading'} /> : null}\n {toast.icon || getAsset(promiseStatus ?? toast.type)}\n </div>\n ) : null}\n\n <div data-content=\"\">\n <div data-title=\"\">{toast.title ?? promiseTitle}</div>\n {toast.description ? (\n <div data-description=\"\" className={descriptionClassName + toastDescriptionClassname}>\n {toast.description}\n </div>\n ) : null}\n </div>\n {toast.cancel ? (\n <button\n data-button\n data-cancel\n onClick={() => {\n deleteToast();\n if (toast.cancel?.onClick) {\n toast.cancel.onClick();\n }\n }}\n >\n {toast.cancel.label}\n </button>\n ) : null}\n {toast.action ? (\n <button\n data-button=\"\"\n onClick={() => {\n deleteToast();\n toast.action?.onClick();\n }}\n >\n {toast.action.label}\n </button>\n ) : null}\n </>\n )}\n </li>\n );\n};\n\ninterface ToastOptions {\n className?: string;\n descriptionClassName?: string;\n style?: React.CSSProperties;\n}\n\ninterface ToasterProps {\n invert?: boolean;\n theme?: 'light' | 'dark';\n position?: Position;\n hotkey?: string[];\n richColors?: boolean;\n expand?: boolean;\n duration?: number;\n visibleToasts?: number;\n closeButton?: boolean;\n toastOptions?: ToastOptions;\n className?: string;\n style?: React.CSSProperties;\n offset?: number;\n}\n\nconst Toaster = (props: ToasterProps) => {\n const {\n invert,\n position = 'bottom-right',\n hotkey = ['altKey', 'KeyT'],\n expand,\n closeButton,\n className,\n offset,\n theme = 'light',\n richColors,\n duration,\n style,\n visibleToasts = VISIBLE_TOASTS_AMOUNT,\n toastOptions,\n } = props;\n const [toasts, setToasts] = React.useState<ToastT[]>([]);\n const [heights, setHeights] = React.useState<HeightT[]>([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [y, x] = position.split('-');\n const listRef = React.useRef<HTMLOListElement>(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n\n const removeToast = React.useCallback(\n (toast: ToastT) => setToasts((toasts) => toasts.filter(({ id }) => id !== toast.id)),\n [],\n );\n\n React.useEffect(() => {\n return ToastState.subscribe((toast) => {\n if ((toast as ToastToDismiss).dismiss) {\n setToasts((toasts) => toasts.map((t) => (t.id === toast.id ? { ...t, delete: true } : t)));\n return;\n }\n\n setToasts((toasts) => [toast, ...toasts]);\n });\n }, []);\n\n React.useEffect(() => {\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [toasts]);\n\n React.useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n const isHotkeyPressed = hotkey.every((key) => (event as any)[key] || event.code === key);\n\n if (isHotkeyPressed) {\n setExpanded(true);\n listRef.current?.focus();\n }\n\n if (\n event.code === 'Escape' &&\n (document.activeElement === listRef.current || listRef.current.contains(document.activeElement))\n ) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [hotkey]);\n\n return (\n // Remove item from normal navigation flow, only available via hotkey\n <div role=\"region\" aria-label={`Notifications ${hotkeyLabel}`} tabIndex={-1}>\n <ol\n tabIndex={-1}\n ref={listRef}\n className={className}\n data-sonner-toaster\n data-theme={theme}\n data-rich-colors={richColors}\n data-y-position={y}\n data-x-position={x}\n style={\n {\n '--front-toast-height': `${heights[0]?.height}px`,\n '--offset': offset || VIEWPORT_OFFSET,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${GAP}px`,\n ...style,\n } as React.CSSProperties\n }\n onMouseEnter={() => setExpanded(true)}\n onMouseMove={() => setExpanded(true)}\n onMouseLeave={() => {\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n }}\n onPointerDown={() => {\n setInteracting(true);\n }}\n onPointerUp={() => setInteracting(false)}\n >\n {toasts.map((toast, index) => (\n <Toast\n key={toast.id}\n index={index}\n toast={toast}\n duration={duration}\n className={toastOptions?.className}\n descriptionClassName={toastOptions?.descriptionClassName}\n invert={invert}\n visibleToasts={visibleToasts}\n closeButton={closeButton}\n interacting={interacting}\n position={position}\n style={toastOptions?.style}\n removeToast={removeToast}\n toasts={toasts}\n heights={heights}\n setHeights={setHeights}\n expandByDefault={expand}\n expanded={expanded}\n />\n ))}\n </ol>\n </div>\n );\n};\nexport { toast, Toaster };\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\"[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 6px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999}[data-sonner-toaster][data-x-position=right]{right:max(var(--offset),env(safe-area-inset-right))}[data-sonner-toaster][data-x-position=left]{left:max(var(--offset),env(safe-area-inset-left))}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:max(var(--offset),env(safe-area-inset-top))}[data-sonner-toaster][data-y-position=bottom]{bottom:max(var(--offset),env(safe-area-inset-bottom))}[data-sonner-toast]{--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;will-change:transform,opacity,height;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}[data-sonner-toast] [data-description]{font-weight:400;line-height:1.4;color:inherit}[data-sonner-toast] [data-title]{font-weight:500;color:inherit}[data-sonner-toast] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:-3px;margin-right:4px}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);animation:sonner-fade-in .3s ease forwards}[data-sonner-toast] [data-icon]>*{flex-shrink:0}[data-sonner-toast] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:auto;border:none;cursor:pointer;outline:none;transition:opacity .4s,box-shadow .2s}[data-sonner-toast] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast] [data-button]:first-of-type{margin-left:auto}[data-sonner-toast] [data-cancel]{color:var(--color);background:var(--border-color)}[data-sonner-toast] [data-close-button]{position:absolute;left:0;top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;background:var(--gray1);color:var(--gray12);border:1px solid var(--gray4);transform:translate(-35%,-35%);border-radius:50%;opacity:0;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast]:hover [data-close-button]{opacity:1}[data-sonner-toast]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:\\\"\\\";position:absolute;left:0;right:0;height:100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:\\\"\\\";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast]:after{content:\\\"\\\";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y: translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y: translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{opacity:0}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount, 0px));transition:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation:swipe-out .2s ease-out forwards}@keyframes swipe-out{0%{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount)));opacity:1}to{transform:translateY(calc(var(--lift) * var(--offset) + var(--swipe-amount) + var(--lift) * -100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;--mobile-offset: 16px;right:var(--mobile-offset);left:var(--mobile-offset);width:100%}[data-sonner-toast]{left:0;right:0;width:calc(100% - 32px)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset)}[data-sonner-toaster][data-y-position=bottom]{bottom:20px}[data-sonner-toaster][data-y-position=top]{top:20px}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset);right:var(--mobile-offset);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);--error-text: hsl(358, 100%, 81%)}[data-rich-colors=true] [data-sonner-toast][data-type=success],[data-rich-colors=true] [data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true] [data-sonner-toast][data-type=error],[data-rich-colors=true] [data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}\\n\")","'use client';\nimport React from 'react';\nimport { ToastTypes } from './types';\n\nexport const getAsset = (type: ToastTypes): JSX.Element | null => {\n switch (type) {\n case 'success':\n return SuccessIcon;\n\n case 'error':\n return ErrorIcon;\n\n default:\n null;\n }\n};\n\nconst bars = Array(12).fill(0);\n\nexport const Loader = ({ visible }: { visible: boolean }) => {\n return (\n <div className=\"sonner-loading-wrapper\" data-visible={visible}>\n <div className=\"sonner-spinner\">\n {bars.map((_, i) => (\n <div className=\"sonner-loading-bar\" key={`spinner-bar-${i}`} />\n ))}\n </div>\n </div>\n );\n};\n\nconst SuccessIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst InfoIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" height=\"20\" width=\"20\">\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n","import React from 'react';\nimport { ExternalToast, ToastT, PromiseData, PromiseT, ToastToDismiss } from './types';\n\nlet toastsCounter = 0;\n\nclass Observer {\n subscribers: Array<(toast: ExternalToast | ToastToDismiss) => void>;\n\n constructor() {\n this.subscribers = [];\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 dismiss = (id: number) => {\n this.subscribers.forEach((subscriber) => subscriber({ id, dismiss: true }));\n return id;\n };\n\n message = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = toastsCounter++;\n this.publish({ ...data, id, title: message });\n return id;\n };\n\n error = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = toastsCounter++;\n this.publish({ ...data, id, type: 'error', title: message });\n return id;\n };\n\n success = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = toastsCounter++;\n this.publish({ ...data, id, type: 'success', title: message });\n return id;\n };\n\n promise = (promise: PromiseT, data?: PromiseData) => {\n const id = toastsCounter++;\n this.publish({ ...data, promise, id });\n return id;\n };\n\n // We can't provide the toast we just created as a prop as we didn't creat it yet, so we can create a default toast object, I just don't know how to use function in argument when calling()?\n custom = (jsx: (id: number) => React.ReactElement, data?: ExternalToast) => {\n const id = toastsCounter++;\n this.publish({ jsx: jsx(id), id, ...data });\n };\n}\n\nexport const ToastState = new Observer();\n\n// bind this to the toast function\nconst toastFunction = (message: string | React.ReactNode, data?: ExternalToast) => {\n const id = toastsCounter++;\n ToastState.publish({\n title: message,\n ...data,\n id,\n });\n return id;\n};\n\nconst basicToast = toastFunction;\n\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nexport const toast = Object.assign(basicToast, {\n success: ToastState.success,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n});\n"],"mappings":"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","names":["React","styleInject","css","insertAt","head","style","styleInject","React","getAsset","type","SuccessIcon","ErrorIcon","bars","Loader","visible","_","i","ErrorIcon","React","toastsCounter","Observer","subscriber","index","data","id","message","promise","jsx","ToastState","toastFunction","basicToast","toast","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_TRESHOLD","TIME_BEFORE_UNMOUNT","Toast","props","_a","ToasterInvert","toast","interacting","setHeights","visibleToasts","heights","index","toasts","expanded","removeToast","closeButton","style","className","descriptionClassName","durationFromToaster","position","expandByDefault","mounted","setMounted","React","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","promiseStatus","setPromiseStatus","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","duration","closeTimerStartTimeRef","offset","closeTimerRemainingTimeRef","lastCloseTimerStartTimeRef","pointerStartYRef","y","x","toastsHeightBefore","prev","curr","reducerIndex","invert","disabled","deleteToast","h","timeoutId","elapsedTime","toastNode","promiseTitle","event","_b","swipeAmount","yPosition","Loader","getAsset","Toaster","hotkey","expand","theme","richColors","toastOptions","setToasts","setExpanded","setInteracting","listRef","hotkeyLabel","id","ToastState","t","handleKeyDown","key"]}
|