toastflux 1.0.2 → 1.0.3
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 +53 -239
- package/package.json +4 -4
- package/packages/core/dist/index.d.mts +18 -3
- package/packages/core/dist/index.d.ts +18 -3
- package/packages/core/dist/index.js +1 -83
- package/packages/core/dist/index.js.map +1 -1
- package/packages/core/dist/index.mjs +1 -55
- package/packages/core/dist/index.mjs.map +1 -1
- package/packages/react/dist/index.d.mts +16 -7
- package/packages/react/dist/index.d.ts +16 -7
- package/packages/react/dist/index.js +2 -338
- package/packages/react/dist/index.js.map +1 -1
- package/packages/react/dist/index.mjs +2 -311
- package/packages/react/dist/index.mjs.map +1 -1
- package/packages/styles/toast.css +202 -202
package/README.md
CHANGED
|
@@ -1,27 +1,10 @@
|
|
|
1
1
|
# 🚀 ToastFlux
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
[](https://www.npmjs.com/package/toastflux)
|
|
4
|
+
[](https://bundlephobia.com/package/toastflux)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
## ✨ Why ToastFlux?
|
|
9
|
-
|
|
10
|
-
ToastFlux is built for developers who want **speed, flexibility, and clean UI** without complexity.
|
|
11
|
-
|
|
12
|
-
- ⚡ Blazing fast & lightweight
|
|
13
|
-
- 🎨 Beautiful default UI (no extra styling needed)
|
|
14
|
-
- 🧩 Fully customizable (style, icon, font, layout)
|
|
15
|
-
- 📍 Flexible positioning system
|
|
16
|
-
- 🎯 Action buttons (Undo, Retry, etc.)
|
|
17
|
-
- ⏱ Smart duration & dismiss control
|
|
18
|
-
- 📊 Progress bar support
|
|
19
|
-
- 📝 Description text support
|
|
20
|
-
- 🌗 Built-in dark & light themes
|
|
21
|
-
- ⚛️ Works with React & Next.js App Router
|
|
22
|
-
- 👆 Swipe to dismiss (touch & pointer support)
|
|
23
|
-
|
|
24
|
-
---
|
|
6
|
+
> ⚡ **Ultra Lightweight (~2.8kb gzipped) • 🎨 Beautiful • 🧠 Powerful**
|
|
7
|
+
> A modern scalable toast notification library for React & Next.js. **[Live Demo →](https://toastflux.versintal.in)**
|
|
25
8
|
|
|
26
9
|
## 📦 Installation
|
|
27
10
|
|
|
@@ -29,255 +12,86 @@ ToastFlux is built for developers who want **speed, flexibility, and clean UI**
|
|
|
29
12
|
npm install toastflux
|
|
30
13
|
```
|
|
31
14
|
|
|
32
|
-
|
|
15
|
+
## 🚀 Quick Usage
|
|
33
16
|
|
|
34
|
-
|
|
17
|
+
Add `<Toaster />` once to your app root (or `app/layout.tsx` for Next.js App Router).
|
|
35
18
|
|
|
36
|
-
```
|
|
19
|
+
```tsx
|
|
37
20
|
import { Toaster, toast } from "toastflux";
|
|
38
21
|
import "toastflux/styles/toast.css";
|
|
39
22
|
|
|
40
|
-
function App() {
|
|
23
|
+
export default function App() {
|
|
41
24
|
return (
|
|
42
25
|
<>
|
|
43
|
-
<Toaster theme="dark" />
|
|
44
|
-
|
|
26
|
+
<Toaster theme="dark" position="bottom-right" />
|
|
45
27
|
<button onClick={() => toast.success("Event created 🚀")}>
|
|
46
28
|
Show Toast
|
|
47
29
|
</button>
|
|
48
30
|
</>
|
|
49
31
|
);
|
|
50
32
|
}
|
|
51
|
-
|
|
52
|
-
export default App;
|
|
53
33
|
```
|
|
54
34
|
|
|
55
|
-
|
|
35
|
+
## ⚡ Toast Types & Capabilities
|
|
56
36
|
|
|
57
|
-
|
|
37
|
+
ToastFlux handles basic toasts, promises, lifecycle events, and complex UI smoothly:
|
|
58
38
|
|
|
59
|
-
```
|
|
39
|
+
```tsx
|
|
40
|
+
// Basic Types
|
|
60
41
|
toast.success("Saved successfully!");
|
|
61
|
-
toast.info("Meeting starts soon.");
|
|
62
|
-
toast.warning("Storage almost full.");
|
|
63
42
|
toast.error("Upload failed.");
|
|
64
|
-
toast.
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
---
|
|
68
|
-
|
|
69
|
-
## 🎨 Customization
|
|
43
|
+
toast.loading("Fetching data...");
|
|
70
44
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
toast.success("Event has been created", {
|
|
77
|
-
description: "Monday, January 3rd at 6:00pm",
|
|
45
|
+
// Promise Handling
|
|
46
|
+
toast.promise(fetchData(), {
|
|
47
|
+
loading: "Loading...",
|
|
48
|
+
success: (data) => `Loaded ${data.name}!`,
|
|
49
|
+
error: "Error loading data",
|
|
78
50
|
});
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
### ⏱ Duration & Dismiss
|
|
84
|
-
|
|
85
|
-
```jsx
|
|
86
|
-
toast.success("I stay longer!", {
|
|
87
|
-
duration: 6000,
|
|
88
|
-
dismissible: true,
|
|
89
|
-
});
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
---
|
|
93
|
-
|
|
94
|
-
### 🎯 Action Buttons
|
|
95
51
|
|
|
96
|
-
|
|
97
|
-
toast
|
|
98
|
-
|
|
99
|
-
label: "Undo",
|
|
100
|
-
onClick: () => console.log("Undo clicked"),
|
|
101
|
-
},
|
|
102
|
-
});
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
### 📍 Positioning
|
|
108
|
-
|
|
109
|
-
```jsx
|
|
110
|
-
toast.success("Bottom right toast!", {
|
|
111
|
-
position: "bottom-right",
|
|
112
|
-
});
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
Or globally via `<Toaster />`:
|
|
116
|
-
|
|
117
|
-
```jsx
|
|
118
|
-
<Toaster position="top-right" />
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
### 📊 Progress Bar
|
|
124
|
-
|
|
125
|
-
```jsx
|
|
126
|
-
toast.info("Uploading file...", {
|
|
127
|
-
progress: 45,
|
|
128
|
-
});
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
### 🎨 Custom Style & Icon
|
|
134
|
-
|
|
135
|
-
```jsx
|
|
136
|
-
toast.default("Custom styled toast", {
|
|
137
|
-
style: {
|
|
138
|
-
border: "1px solid #ec4899",
|
|
139
|
-
background: "#fdf2f8",
|
|
140
|
-
color: "#000",
|
|
141
|
-
},
|
|
52
|
+
// Advanced (Actions, Progress, Hooks)
|
|
53
|
+
toast("System Update", {
|
|
54
|
+
description: "Version 2.0 downloaded",
|
|
142
55
|
icon: <span>🌟</span>,
|
|
143
|
-
|
|
56
|
+
action: { label: "Install", onClick: () => console.log("Installing") },
|
|
57
|
+
onClose: (t) => console.log(`Toast ${t.id} closed!`),
|
|
58
|
+
progress: 80,
|
|
59
|
+
duration: 6000,
|
|
144
60
|
});
|
|
145
61
|
```
|
|
146
62
|
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
## 🎭 Themes
|
|
150
|
-
|
|
151
|
-
ToastFlux supports built-in dark and light themes:
|
|
63
|
+
## ⚙️ `<Toaster />` Global Defaults
|
|
64
|
+
Keep your code DRY by defining global configurations on the Toaster itself.
|
|
152
65
|
|
|
153
|
-
```
|
|
154
|
-
<Toaster
|
|
155
|
-
|
|
66
|
+
```tsx
|
|
67
|
+
<Toaster
|
|
68
|
+
theme="light"
|
|
69
|
+
position="bottom-left"
|
|
70
|
+
duration={5000}
|
|
71
|
+
toastOptions={{ style: { borderRadius: '12px' } }}
|
|
72
|
+
/>
|
|
156
73
|
```
|
|
157
74
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
## 🧠 API Overview
|
|
75
|
+
## 🧠 API Reference
|
|
161
76
|
|
|
162
77
|
### `toast(message, options?)`
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
|
166
|
-
| `
|
|
167
|
-
| `
|
|
168
|
-
| `
|
|
169
|
-
| `
|
|
170
|
-
| `
|
|
171
|
-
| `
|
|
172
|
-
| `
|
|
173
|
-
| `
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## 📍 Supported Positions
|
|
180
|
-
|
|
181
|
-
| Position | Description |
|
|
182
|
-
| --------------- | -------------------------- |
|
|
183
|
-
| `top-left` | Top left corner |
|
|
184
|
-
| `top-center` | Top center |
|
|
185
|
-
| `top-right` | Top right corner (default) |
|
|
186
|
-
| `bottom-left` | Bottom left corner |
|
|
187
|
-
| `bottom-center` | Bottom center |
|
|
188
|
-
| `bottom-right` | Bottom right corner |
|
|
189
|
-
|
|
190
|
-
---
|
|
191
|
-
|
|
192
|
-
## 🔤 Custom Font (CSS Variable)
|
|
193
|
-
|
|
194
|
-
ToastFlux uses a clean system font by default. To match your app's custom font, set the `--tf-font-family` CSS variable:
|
|
195
|
-
|
|
78
|
+
| Option | Type | Description |
|
|
79
|
+
|--------|------|-------------|
|
|
80
|
+
| `description` | ReactNode | Subtitle text below the title |
|
|
81
|
+
| `duration` | number | Auto dismiss time in ms (Default: `4000`) |
|
|
82
|
+
| `dismissible` | boolean | Enable manual ✖ close button |
|
|
83
|
+
| `position` | string | `top-right`, `bottom-center`, `top-left`, etc. |
|
|
84
|
+
| `style` / `className` | CSS / string | Inline styles and class overrides |
|
|
85
|
+
| `icon` / `iconColor` | ReactNode / string | Custom icon / SVG color override |
|
|
86
|
+
| `action` | `{ label, onClick }` | Action button configuration |
|
|
87
|
+
| `progress` | number (0-100) | Built-in progress bar value |
|
|
88
|
+
| `onShow` / `onClose` / `onClick` | `(toast) => void` | Lifecycle hooks for analytics/tracking |
|
|
89
|
+
|
|
90
|
+
## 🔤 Custom Font
|
|
91
|
+
Use the CSS variable `--tf-font-family` to automatically match your app's font:
|
|
196
92
|
```css
|
|
197
|
-
|
|
198
|
-
:root {
|
|
199
|
-
--tf-font-family: "Inter", sans-serif;
|
|
200
|
-
}
|
|
93
|
+
:root { --tf-font-family: "Inter", sans-serif; }
|
|
201
94
|
```
|
|
202
95
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
---
|
|
206
|
-
|
|
207
|
-
## ⚙️ Next.js (App Router) Usage
|
|
208
|
-
|
|
209
|
-
ToastFlux works seamlessly with Next.js App Router. Since it uses client-side state, add `"use client"` where needed.
|
|
210
|
-
|
|
211
|
-
### 1. Add `<Toaster />` to Root Layout
|
|
212
|
-
|
|
213
|
-
```tsx
|
|
214
|
-
// app/layout.tsx
|
|
215
|
-
import { Toaster } from "toastflux";
|
|
216
|
-
import "toastflux/styles/toast.css";
|
|
217
|
-
|
|
218
|
-
export default function RootLayout({
|
|
219
|
-
children,
|
|
220
|
-
}: {
|
|
221
|
-
children: React.ReactNode;
|
|
222
|
-
}) {
|
|
223
|
-
return (
|
|
224
|
-
<html lang="en">
|
|
225
|
-
<body>
|
|
226
|
-
{children}
|
|
227
|
-
<Toaster theme="dark" />
|
|
228
|
-
</body>
|
|
229
|
-
</html>
|
|
230
|
-
);
|
|
231
|
-
}
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
### 2. Use `toast` in Any Client Component
|
|
235
|
-
|
|
236
|
-
```tsx
|
|
237
|
-
// app/page.tsx
|
|
238
|
-
"use client";
|
|
239
|
-
|
|
240
|
-
import { toast } from "toastflux";
|
|
241
|
-
|
|
242
|
-
export default function HomePage() {
|
|
243
|
-
return (
|
|
244
|
-
<button onClick={() => toast.success("It works in Next.js too! 🚀")}>
|
|
245
|
-
Show Toast
|
|
246
|
-
</button>
|
|
247
|
-
);
|
|
248
|
-
}
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
## 🚀 Roadmap
|
|
252
|
-
|
|
253
|
-
- [x] Toast types (success, error, info, warning, default)
|
|
254
|
-
- [x] Dark & Light themes
|
|
255
|
-
- [x] Description support
|
|
256
|
-
- [x] Custom font via CSS variable
|
|
257
|
-
- [x] Action buttons
|
|
258
|
-
- [x] Progress bar
|
|
259
|
-
- [x] Swipe to dismiss
|
|
260
|
-
- [x] Next.js App Router support
|
|
261
|
-
- [ ] Promise-based toasts (`toast.promise`)
|
|
262
|
-
- [ ] Smart toast grouping
|
|
263
|
-
- [ ] Advanced animations
|
|
264
|
-
- [ ] DevTools panel
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
## 🤝 Contributing
|
|
269
|
-
|
|
270
|
-
PRs and ideas are welcome!
|
|
271
|
-
Feel free to open issues or suggest improvements.
|
|
272
|
-
|
|
273
|
-
---
|
|
274
|
-
|
|
275
|
-
## 📄 License
|
|
276
|
-
|
|
277
|
-
MIT
|
|
278
|
-
|
|
279
|
-
---
|
|
280
|
-
|
|
281
|
-
## ❤️ Author
|
|
282
|
-
|
|
283
|
-
Built with passion by **Rahul Bairwa**
|
|
96
|
+
## 🤝 License
|
|
97
|
+
[MIT](https://github.com/Rahul-Bairwa/toastflux/blob/main/LICENSE) © [Rahul Bairwa](https://github.com/Rahul-Bairwa)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "toastflux",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "A lightweight, beautiful, and fully customizable toast notification library for React & Next.js with modern UI, themes, actions, and progress support.",
|
|
5
5
|
"author": "Rahul",
|
|
6
6
|
"license": "MIT",
|
|
@@ -27,16 +27,16 @@
|
|
|
27
27
|
],
|
|
28
28
|
"exports": {
|
|
29
29
|
".": {
|
|
30
|
+
"types": "./packages/react/dist/index.d.ts",
|
|
30
31
|
"import": "./packages/react/dist/index.mjs",
|
|
31
|
-
"require": "./packages/react/dist/index.js"
|
|
32
|
-
"types": "./packages/react/dist/index.d.ts"
|
|
32
|
+
"require": "./packages/react/dist/index.js"
|
|
33
33
|
},
|
|
34
34
|
"./styles/toast.css": "./packages/styles/toast.css"
|
|
35
35
|
},
|
|
36
36
|
"sideEffects": [
|
|
37
37
|
"*.css"
|
|
38
38
|
],
|
|
39
|
-
"homepage": "https://
|
|
39
|
+
"homepage": "https://toastflux.versintal.in",
|
|
40
40
|
"repository": {
|
|
41
41
|
"type": "git",
|
|
42
42
|
"url": "https://github.com/Rahul-Bairwa/toastflux.git"
|
|
@@ -21,10 +21,16 @@ interface Toast {
|
|
|
21
21
|
};
|
|
22
22
|
render?: () => ReactNode;
|
|
23
23
|
progress?: number;
|
|
24
|
-
|
|
24
|
+
onShow?: (toast: Toast) => void;
|
|
25
|
+
onClose?: (toast: Toast) => void;
|
|
26
|
+
onClick?: (toast: Toast) => void;
|
|
25
27
|
}
|
|
26
|
-
|
|
27
28
|
type ToastOptions = Partial<Omit<Toast, "id" | "type" | "createdAt">>;
|
|
29
|
+
declare const PEEK_OFFSET = 10;
|
|
30
|
+
declare const MAX_STACK_VISIBLE = 3;
|
|
31
|
+
declare const SCALE_STEP = 0.05;
|
|
32
|
+
declare const OPACITY_STEP = 0.15;
|
|
33
|
+
|
|
28
34
|
declare const toast: {
|
|
29
35
|
(msg: string | undefined, type?: ToastType, options?: ToastOptions): string;
|
|
30
36
|
success(msg: string, options?: ToastOptions): string;
|
|
@@ -34,6 +40,11 @@ declare const toast: {
|
|
|
34
40
|
loading(msg: string, options?: ToastOptions): string;
|
|
35
41
|
default(msg: string, options?: ToastOptions): string;
|
|
36
42
|
custom(options: ToastOptions): string;
|
|
43
|
+
promise<T>(promise: Promise<T>, msgs: {
|
|
44
|
+
loading: string;
|
|
45
|
+
success: string | ((data: T) => string);
|
|
46
|
+
error: string | ((err: any) => string);
|
|
47
|
+
}, options?: ToastOptions): Promise<T>;
|
|
37
48
|
dismiss(id: string): void;
|
|
38
49
|
};
|
|
39
50
|
|
|
@@ -41,12 +52,16 @@ type Listener = () => void;
|
|
|
41
52
|
declare class ToastStore {
|
|
42
53
|
private toasts;
|
|
43
54
|
private listeners;
|
|
55
|
+
private config;
|
|
56
|
+
updateConfig(newConfig: ToastOptions): void;
|
|
57
|
+
getConfig(): Partial<Omit<Toast, "id" | "type" | "createdAt">>;
|
|
44
58
|
subscribe(listener: Listener): () => void;
|
|
45
59
|
getToasts(): Toast[];
|
|
46
60
|
add(toast: Toast): void;
|
|
47
61
|
remove(id: string): void;
|
|
62
|
+
update(id: string, newToastInfo: Partial<Toast>): void;
|
|
48
63
|
private emit;
|
|
49
64
|
}
|
|
50
65
|
declare const toastStore: ToastStore;
|
|
51
66
|
|
|
52
|
-
export { type Toast, type ToastOptions, type ToastPosition, type ToastType, toast, toastStore };
|
|
67
|
+
export { MAX_STACK_VISIBLE, OPACITY_STEP, PEEK_OFFSET, SCALE_STEP, type Toast, type ToastOptions, type ToastPosition, type ToastType, toast, toastStore };
|
|
@@ -21,10 +21,16 @@ interface Toast {
|
|
|
21
21
|
};
|
|
22
22
|
render?: () => ReactNode;
|
|
23
23
|
progress?: number;
|
|
24
|
-
|
|
24
|
+
onShow?: (toast: Toast) => void;
|
|
25
|
+
onClose?: (toast: Toast) => void;
|
|
26
|
+
onClick?: (toast: Toast) => void;
|
|
25
27
|
}
|
|
26
|
-
|
|
27
28
|
type ToastOptions = Partial<Omit<Toast, "id" | "type" | "createdAt">>;
|
|
29
|
+
declare const PEEK_OFFSET = 10;
|
|
30
|
+
declare const MAX_STACK_VISIBLE = 3;
|
|
31
|
+
declare const SCALE_STEP = 0.05;
|
|
32
|
+
declare const OPACITY_STEP = 0.15;
|
|
33
|
+
|
|
28
34
|
declare const toast: {
|
|
29
35
|
(msg: string | undefined, type?: ToastType, options?: ToastOptions): string;
|
|
30
36
|
success(msg: string, options?: ToastOptions): string;
|
|
@@ -34,6 +40,11 @@ declare const toast: {
|
|
|
34
40
|
loading(msg: string, options?: ToastOptions): string;
|
|
35
41
|
default(msg: string, options?: ToastOptions): string;
|
|
36
42
|
custom(options: ToastOptions): string;
|
|
43
|
+
promise<T>(promise: Promise<T>, msgs: {
|
|
44
|
+
loading: string;
|
|
45
|
+
success: string | ((data: T) => string);
|
|
46
|
+
error: string | ((err: any) => string);
|
|
47
|
+
}, options?: ToastOptions): Promise<T>;
|
|
37
48
|
dismiss(id: string): void;
|
|
38
49
|
};
|
|
39
50
|
|
|
@@ -41,12 +52,16 @@ type Listener = () => void;
|
|
|
41
52
|
declare class ToastStore {
|
|
42
53
|
private toasts;
|
|
43
54
|
private listeners;
|
|
55
|
+
private config;
|
|
56
|
+
updateConfig(newConfig: ToastOptions): void;
|
|
57
|
+
getConfig(): Partial<Omit<Toast, "id" | "type" | "createdAt">>;
|
|
44
58
|
subscribe(listener: Listener): () => void;
|
|
45
59
|
getToasts(): Toast[];
|
|
46
60
|
add(toast: Toast): void;
|
|
47
61
|
remove(id: string): void;
|
|
62
|
+
update(id: string, newToastInfo: Partial<Toast>): void;
|
|
48
63
|
private emit;
|
|
49
64
|
}
|
|
50
65
|
declare const toastStore: ToastStore;
|
|
51
66
|
|
|
52
|
-
export { type Toast, type ToastOptions, type ToastPosition, type ToastType, toast, toastStore };
|
|
67
|
+
export { MAX_STACK_VISIBLE, OPACITY_STEP, PEEK_OFFSET, SCALE_STEP, type Toast, type ToastOptions, type ToastPosition, type ToastType, toast, toastStore };
|
|
@@ -1,84 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
var __defProp = Object.defineProperty;
|
|
3
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
-
var __export = (target, all) => {
|
|
7
|
-
for (var name in all)
|
|
8
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
-
};
|
|
10
|
-
var __copyProps = (to, from, except, desc) => {
|
|
11
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
-
for (let key of __getOwnPropNames(from))
|
|
13
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
-
|
|
20
|
-
// packages/core/src/index.ts
|
|
21
|
-
var index_exports = {};
|
|
22
|
-
__export(index_exports, {
|
|
23
|
-
toast: () => toast,
|
|
24
|
-
toastStore: () => toastStore
|
|
25
|
-
});
|
|
26
|
-
module.exports = __toCommonJS(index_exports);
|
|
27
|
-
|
|
28
|
-
// packages/core/src/store.ts
|
|
29
|
-
var ToastStore = class {
|
|
30
|
-
constructor() {
|
|
31
|
-
this.toasts = [];
|
|
32
|
-
this.listeners = [];
|
|
33
|
-
}
|
|
34
|
-
subscribe(listener) {
|
|
35
|
-
this.listeners.push(listener);
|
|
36
|
-
return () => {
|
|
37
|
-
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
getToasts() {
|
|
41
|
-
return this.toasts;
|
|
42
|
-
}
|
|
43
|
-
add(toast2) {
|
|
44
|
-
this.toasts = [toast2, ...this.toasts];
|
|
45
|
-
this.emit();
|
|
46
|
-
}
|
|
47
|
-
remove(id) {
|
|
48
|
-
this.toasts = this.toasts.filter((t) => t.id !== id);
|
|
49
|
-
this.emit();
|
|
50
|
-
}
|
|
51
|
-
emit() {
|
|
52
|
-
this.listeners.forEach((l) => l());
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
var toastStore = new ToastStore();
|
|
56
|
-
|
|
57
|
-
// packages/core/src/toast.ts
|
|
58
|
-
function createToast(message, type, options) {
|
|
59
|
-
const id = crypto.randomUUID();
|
|
60
|
-
toastStore.add({
|
|
61
|
-
id,
|
|
62
|
-
message,
|
|
63
|
-
type,
|
|
64
|
-
createdAt: Date.now(),
|
|
65
|
-
...options
|
|
66
|
-
});
|
|
67
|
-
return id;
|
|
68
|
-
}
|
|
69
|
-
var toastFn = (msg, type = "default", options) => createToast(msg, type, options);
|
|
70
|
-
toastFn.success = (msg, options) => createToast(msg, "success", options);
|
|
71
|
-
toastFn.error = (msg, options) => createToast(msg, "error", options);
|
|
72
|
-
toastFn.info = (msg, options) => createToast(msg, "info", options);
|
|
73
|
-
toastFn.warning = (msg, options) => createToast(msg, "warning", options);
|
|
74
|
-
toastFn.loading = (msg, options) => createToast(msg, "loading", options);
|
|
75
|
-
toastFn.default = (msg, options) => createToast(msg, "default", options);
|
|
76
|
-
toastFn.custom = (options) => createToast(options.message, "default", options);
|
|
77
|
-
toastFn.dismiss = (id) => toastStore.remove(id);
|
|
78
|
-
var toast = toastFn;
|
|
79
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
80
|
-
0 && (module.exports = {
|
|
81
|
-
toast,
|
|
82
|
-
toastStore
|
|
83
|
-
});
|
|
1
|
+
'use strict';var d=class{constructor(){this.toasts=[];this.listeners=[];this.config={};}updateConfig(t){this.config={...this.config,...t};}getConfig(){return this.config}subscribe(t){return this.listeners.push(t),()=>{this.listeners=this.listeners.filter(s=>s!==t);}}getToasts(){return this.toasts}add(t){this.toasts=[t,...this.toasts],this.emit();}remove(t){this.toasts=this.toasts.filter(s=>s.id!==t),this.emit();}update(t,s){this.toasts=this.toasts.map(i=>i.id===t?{...i,...s}:i),this.emit();}emit(){this.listeners.forEach(t=>t());}},n=new d;function r(o,t,s){let i=crypto.randomUUID(),a=n.getConfig();return n.add({id:i,message:o,type:t,createdAt:Date.now(),...a,...s}),i}var e=(o,t="default",s)=>r(o,t,s);e.success=(o,t)=>r(o,"success",t);e.error=(o,t)=>r(o,"error",t);e.info=(o,t)=>r(o,"info",t);e.warning=(o,t)=>r(o,"warning",t);e.loading=(o,t)=>r(o,"loading",t);e.default=(o,t)=>r(o,"default",t);e.custom=o=>r(o.message,"default",o);e.promise=(o,t,s)=>{let i=(s==null?void 0:s.duration)||n.getConfig().duration||4e3,a=e.loading(t.loading,{...s,duration:1/0});return o.then(c=>{let p=typeof t.success=="function"?t.success(c):t.success;n.update(a,{type:"success",message:p,duration:i});}).catch(c=>{let p=typeof t.error=="function"?t.error(c):t.error;n.update(a,{type:"error",message:p,duration:i});}),o};e.dismiss=o=>n.remove(o);var u=e;var l=10,m=3,h=.05,y=.15;exports.MAX_STACK_VISIBLE=m;exports.OPACITY_STEP=y;exports.PEEK_OFFSET=l;exports.SCALE_STEP=h;exports.toast=u;exports.toastStore=n;//# sourceMappingURL=index.js.map
|
|
84
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/
|
|
1
|
+
{"version":3,"sources":["../src/store.ts","../src/toast.ts","../src/types.ts"],"names":["ToastStore","newConfig","listener","l","toast","id","t","newToastInfo","toastStore","createToast","message","type","options","defaultOptions","toastFn","msg","promise","msgs","defaultDuration","data","err","PEEK_OFFSET","MAX_STACK_VISIBLE","SCALE_STEP","OPACITY_STEP"],"mappings":"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","file":"index.js","sourcesContent":["import { Toast, ToastOptions } from \"./types\";\r\n\r\ntype Listener = () => void;\r\n\r\nclass ToastStore {\r\n private toasts: Toast[] = [];\r\n private listeners: Listener[] = [];\r\n private config: ToastOptions = {};\r\n\r\n updateConfig(newConfig: ToastOptions) {\r\n this.config = { ...this.config, ...newConfig };\r\n }\r\n\r\n getConfig() {\r\n return this.config;\r\n }\r\n\r\n subscribe(listener: Listener) {\r\n this.listeners.push(listener);\r\n return () => {\r\n this.listeners = this.listeners.filter((l) => l !== listener);\r\n };\r\n }\r\n\r\n getToasts() {\r\n return this.toasts;\r\n }\r\n\r\n add(toast: Toast) {\r\n this.toasts = [toast, ...this.toasts];\r\n this.emit();\r\n }\r\n\r\n remove(id: string) {\r\n this.toasts = this.toasts.filter((t) => t.id !== id);\r\n this.emit();\r\n }\r\n\r\n update(id: string, newToastInfo: Partial<Toast>) {\r\n this.toasts = this.toasts.map((t) => (t.id === id ? { ...t, ...newToastInfo } : t));\r\n this.emit();\r\n }\r\n\r\n\r\n private emit() {\r\n this.listeners.forEach((l) => l());\r\n }\r\n}\r\n\r\nexport const toastStore = new ToastStore();\r\n","import { toastStore } from \"./store\";\r\nimport { Toast, ToastType, ToastOptions } from \"./types\";\r\n\r\nfunction createToast(message: string | undefined, type: ToastType, options?: ToastOptions) {\r\n const id = crypto.randomUUID();\r\n\r\n const defaultOptions = toastStore.getConfig();\r\n\r\n toastStore.add({\r\n id,\r\n message,\r\n type,\r\n createdAt: Date.now(),\r\n ...defaultOptions,\r\n ...options,\r\n });\r\n\r\n return id;\r\n}\r\n\r\nconst toastFn = (msg: string | undefined, type: ToastType = \"default\", options?: ToastOptions) => createToast(msg, type, options);\r\n\r\ntoastFn.success = (msg: string, options?: ToastOptions) => createToast(msg, \"success\", options);\r\ntoastFn.error = (msg: string, options?: ToastOptions) => createToast(msg, \"error\", options);\r\ntoastFn.info = (msg: string, options?: ToastOptions) => createToast(msg, \"info\", options);\r\ntoastFn.warning = (msg: string, options?: ToastOptions) => createToast(msg, \"warning\", options);\r\ntoastFn.loading = (msg: string, options?: ToastOptions) => createToast(msg, \"loading\", options);\r\ntoastFn.default = (msg: string, options?: ToastOptions) => createToast(msg, \"default\", options);\r\ntoastFn.custom = (options: ToastOptions) => createToast(options.message, \"default\", options);\r\n\r\ntoastFn.promise = <T>(\r\n promise: Promise<T>,\r\n msgs: {\r\n loading: string;\r\n success: string | ((data: T) => string);\r\n error: string | ((err: any) => string);\r\n },\r\n options?: ToastOptions\r\n) => {\r\n const defaultDuration = options?.duration || toastStore.getConfig().duration || 4000;\r\n const id = toastFn.loading(msgs.loading, { ...options, duration: Infinity });\r\n\r\n promise\r\n .then((data) => {\r\n const message = typeof msgs.success === \"function\" ? msgs.success(data) : msgs.success;\r\n toastStore.update(id, { type: \"success\", message, duration: defaultDuration });\r\n })\r\n .catch((err) => {\r\n const message = typeof msgs.error === \"function\" ? msgs.error(err) : msgs.error;\r\n toastStore.update(id, { type: \"error\", message, duration: defaultDuration });\r\n });\r\n\r\n return promise;\r\n};\r\n\r\ntoastFn.dismiss = (id: string) => toastStore.remove(id);\r\n\r\nexport const toast = toastFn;\r\n","import { ReactNode, CSSProperties } from \"react\";\r\n\r\nexport type ToastType =\r\n | \"success\"\r\n | \"error\"\r\n | \"info\"\r\n | \"warning\"\r\n | \"loading\"\r\n | \"default\";\r\n\r\nexport type ToastPosition =\r\n | \"top-left\"\r\n | \"top-center\"\r\n | \"top-right\"\r\n | \"bottom-left\"\r\n | \"bottom-center\"\r\n | \"bottom-right\";\r\n\r\nexport interface Toast {\r\n id: string;\r\n message?: string;\r\n description?: ReactNode;\r\n type?: ToastType;\r\n createdAt: number;\r\n style?: CSSProperties;\r\n className?: string;\r\n duration?: number;\r\n dismissible?: boolean;\r\n position?: ToastPosition;\r\n icon?: ReactNode;\r\n iconColor?: string;\r\n action?: {\r\n label: string;\r\n onClick: () => void;\r\n };\r\n render?: () => ReactNode;\r\n progress?: number;\r\n onShow?: (toast: Toast) => void;\r\n onClose?: (toast: Toast) => void;\r\n onClick?: (toast: Toast) => void;\r\n}\r\n\r\nexport type ToastOptions = Partial<Omit<Toast, \"id\" | \"type\" | \"createdAt\">>;\r\n\r\nexport const PEEK_OFFSET = 10;\r\nexport const MAX_STACK_VISIBLE = 3;\r\nexport const SCALE_STEP = 0.05;\r\nexport const OPACITY_STEP = 0.15;\r\n"]}
|
|
@@ -1,56 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
var ToastStore = class {
|
|
3
|
-
constructor() {
|
|
4
|
-
this.toasts = [];
|
|
5
|
-
this.listeners = [];
|
|
6
|
-
}
|
|
7
|
-
subscribe(listener) {
|
|
8
|
-
this.listeners.push(listener);
|
|
9
|
-
return () => {
|
|
10
|
-
this.listeners = this.listeners.filter((l) => l !== listener);
|
|
11
|
-
};
|
|
12
|
-
}
|
|
13
|
-
getToasts() {
|
|
14
|
-
return this.toasts;
|
|
15
|
-
}
|
|
16
|
-
add(toast2) {
|
|
17
|
-
this.toasts = [toast2, ...this.toasts];
|
|
18
|
-
this.emit();
|
|
19
|
-
}
|
|
20
|
-
remove(id) {
|
|
21
|
-
this.toasts = this.toasts.filter((t) => t.id !== id);
|
|
22
|
-
this.emit();
|
|
23
|
-
}
|
|
24
|
-
emit() {
|
|
25
|
-
this.listeners.forEach((l) => l());
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
var toastStore = new ToastStore();
|
|
29
|
-
|
|
30
|
-
// packages/core/src/toast.ts
|
|
31
|
-
function createToast(message, type, options) {
|
|
32
|
-
const id = crypto.randomUUID();
|
|
33
|
-
toastStore.add({
|
|
34
|
-
id,
|
|
35
|
-
message,
|
|
36
|
-
type,
|
|
37
|
-
createdAt: Date.now(),
|
|
38
|
-
...options
|
|
39
|
-
});
|
|
40
|
-
return id;
|
|
41
|
-
}
|
|
42
|
-
var toastFn = (msg, type = "default", options) => createToast(msg, type, options);
|
|
43
|
-
toastFn.success = (msg, options) => createToast(msg, "success", options);
|
|
44
|
-
toastFn.error = (msg, options) => createToast(msg, "error", options);
|
|
45
|
-
toastFn.info = (msg, options) => createToast(msg, "info", options);
|
|
46
|
-
toastFn.warning = (msg, options) => createToast(msg, "warning", options);
|
|
47
|
-
toastFn.loading = (msg, options) => createToast(msg, "loading", options);
|
|
48
|
-
toastFn.default = (msg, options) => createToast(msg, "default", options);
|
|
49
|
-
toastFn.custom = (options) => createToast(options.message, "default", options);
|
|
50
|
-
toastFn.dismiss = (id) => toastStore.remove(id);
|
|
51
|
-
var toast = toastFn;
|
|
52
|
-
export {
|
|
53
|
-
toast,
|
|
54
|
-
toastStore
|
|
55
|
-
};
|
|
1
|
+
var d=class{constructor(){this.toasts=[];this.listeners=[];this.config={};}updateConfig(t){this.config={...this.config,...t};}getConfig(){return this.config}subscribe(t){return this.listeners.push(t),()=>{this.listeners=this.listeners.filter(s=>s!==t);}}getToasts(){return this.toasts}add(t){this.toasts=[t,...this.toasts],this.emit();}remove(t){this.toasts=this.toasts.filter(s=>s.id!==t),this.emit();}update(t,s){this.toasts=this.toasts.map(i=>i.id===t?{...i,...s}:i),this.emit();}emit(){this.listeners.forEach(t=>t());}},n=new d;function r(o,t,s){let i=crypto.randomUUID(),a=n.getConfig();return n.add({id:i,message:o,type:t,createdAt:Date.now(),...a,...s}),i}var e=(o,t="default",s)=>r(o,t,s);e.success=(o,t)=>r(o,"success",t);e.error=(o,t)=>r(o,"error",t);e.info=(o,t)=>r(o,"info",t);e.warning=(o,t)=>r(o,"warning",t);e.loading=(o,t)=>r(o,"loading",t);e.default=(o,t)=>r(o,"default",t);e.custom=o=>r(o.message,"default",o);e.promise=(o,t,s)=>{let i=(s==null?void 0:s.duration)||n.getConfig().duration||4e3,a=e.loading(t.loading,{...s,duration:1/0});return o.then(c=>{let p=typeof t.success=="function"?t.success(c):t.success;n.update(a,{type:"success",message:p,duration:i});}).catch(c=>{let p=typeof t.error=="function"?t.error(c):t.error;n.update(a,{type:"error",message:p,duration:i});}),o};e.dismiss=o=>n.remove(o);var u=e;var l=10,m=3,h=.05,y=.15;export{m as MAX_STACK_VISIBLE,y as OPACITY_STEP,l as PEEK_OFFSET,h as SCALE_STEP,u as toast,n as toastStore};//# sourceMappingURL=index.mjs.map
|
|
56
2
|
//# sourceMappingURL=index.mjs.map
|