your-toast 0.0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,17 +1,28 @@
1
1
  # your-toast 🍞
2
2
 
3
+ ![npm](https://img.shields.io/npm/v/your-toast)
4
+ ![GitHub stars](https://img.shields.io/github/stars/masaudahmod/your-toast)
5
+
3
6
  Modern toast notification library for React apps.
4
7
 
5
- ✨ Clean API
6
- 🎨 Glass UI (coming soon)
8
+ ✨ Clean & intuitive API
9
+ 🍏 Glass-style UI
7
10
  ⚡ Lightweight & fast
11
+ 🔄 Promise support
12
+ 🎯 Fully controllable
8
13
 
9
14
  ---
10
15
 
11
- ## 🚧 Status
16
+ ## 🚀 Features
12
17
 
13
- This package is currently under development.
14
- First stable version will be released soon.
18
+ * 🔥 Minimal & powerful API (`toast()`)
19
+ * Promise-based toast (`toast.promise`)
20
+ * 🎨 Multiple variants (default, success, error, loading, action)
21
+ * 📦 Stack management (auto limit)
22
+ * 🔁 Update & dismiss control
23
+ * ⏱ Auto dismiss with duration
24
+ * 🍏 Glass UI (modern design)
25
+ * 🌙 Dark mode ready
15
26
 
16
27
  ---
17
28
 
@@ -26,6 +37,8 @@ npm install your-toast
26
37
  ## 🚀 Basic Usage
27
38
 
28
39
  ```jsx
40
+ "use client";
41
+
29
42
  import { YourToastProvider, toast } from "your-toast";
30
43
 
31
44
  export default function App() {
@@ -41,38 +54,87 @@ export default function App() {
41
54
 
42
55
  ---
43
56
 
44
- ## 🎯 Planned Features
45
-
46
- * 🍏 Apple-style glass UI toast
47
- * ⚡ Promise-based toast system
48
- * 📦 Stack management
49
- * 🎨 Multiple variants (minimal, glass, gradient)
50
- * 🔁 Update & dismiss controls
51
- * 🌙 Dark mode support
52
-
53
- ---
54
-
55
- ## 🧩 Example API (Upcoming)
57
+ ## 🎯 Variants
56
58
 
57
59
  ```js
60
+ toast("Default message");
61
+
58
62
  toast.success("Saved successfully");
59
63
 
60
64
  toast.error("Something went wrong");
61
65
 
66
+ toast.loading("Loading...");
67
+ ```
68
+
69
+ ---
70
+
71
+ ## ⚡ Promise Toast
72
+
73
+ ```js
62
74
  toast.promise(fetchData(), {
63
75
  loading: "Loading...",
64
- success: "Done!",
65
- error: "Error occurred"
76
+ success: "Data loaded!",
77
+ error: "Something went wrong",
66
78
  });
67
79
  ```
68
80
 
69
81
  ---
70
82
 
83
+ ## 🔁 Update & Dismiss
84
+
85
+ ```js
86
+ const id = toast("Uploading...");
87
+
88
+ // update
89
+ toast.update(id, {
90
+ title: "Uploaded!",
91
+ type: "success",
92
+ });
93
+
94
+ // dismiss
95
+ toast.dismiss(id);
96
+ ```
97
+
98
+ ---
99
+
100
+ ## 🧩 Advanced Example
101
+
102
+ ```js
103
+ toast("File deleted", {
104
+ action: {
105
+ label: "Undo",
106
+ onClick: () => console.log("Undo clicked"),
107
+ },
108
+ });
109
+ ```
110
+
111
+ ---
112
+
113
+ ## 🎨 Supported Types
114
+
115
+ * `default`
116
+ * `success`
117
+ * `error`
118
+ * `loading`
119
+ * `action`
120
+
121
+ ---
122
+
71
123
  ## 🛠 Developer Friendly
72
124
 
73
125
  * Simple and predictable API
74
- * Fully customizable
75
- * Built for modern React apps
126
+ * No extra setup required
127
+ * Works with modern React (18+)
128
+ * Lightweight and customizable
129
+
130
+ ---
131
+
132
+ ## 🚧 Roadmap
133
+
134
+ * 🍏 Advanced glass UI polish
135
+ * 🎞 Animation improvements
136
+ * 🎨 Theme system
137
+ * 📱 Mobile UX optimization
76
138
 
77
139
  ---
78
140
 
@@ -84,4 +146,9 @@ MIT
84
146
 
85
147
  ## 👨‍💻 Author
86
148
 
87
- Masaud Ahmod
149
+ Masaud Ahmod
150
+
151
+ ## ⭐ Support
152
+
153
+ If you find this useful, consider giving a ⭐ on GitHub:
154
+ 👉 https://github.com/your-username/your-toast
package/dist/index.cjs ADDED
@@ -0,0 +1,260 @@
1
+ "use strict";
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
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ YourToastProvider: () => YourToastProvider,
24
+ toast: () => toast
25
+ });
26
+ module.exports = __toCommonJS(index_exports);
27
+
28
+ // src/store/toastStore.ts
29
+ var toasts = [];
30
+ var listeners = [];
31
+ function notify() {
32
+ listeners.forEach((listener) => listener(toasts));
33
+ }
34
+ var toastStore = {
35
+ subscribe(listener) {
36
+ listeners.push(listener);
37
+ return () => {
38
+ listeners = listeners.filter((l) => l !== listener);
39
+ };
40
+ },
41
+ getToasts() {
42
+ return toasts;
43
+ },
44
+ add(toast2) {
45
+ toasts = [toast2, ...toasts].slice(0, 5);
46
+ notify();
47
+ },
48
+ remove(id) {
49
+ toasts = toasts.filter((t) => t.id !== id);
50
+ notify();
51
+ },
52
+ update(id, updated) {
53
+ toasts = toasts.map(
54
+ (t) => t.id === id ? { ...t, ...updated } : t
55
+ );
56
+ notify();
57
+ }
58
+ };
59
+
60
+ // src/core/toast.ts
61
+ function createToast(message, type = "default") {
62
+ const id = crypto.randomUUID();
63
+ const duration = 4e3;
64
+ toastStore.add({
65
+ id,
66
+ title: message,
67
+ type,
68
+ duration
69
+ });
70
+ setTimeout(() => {
71
+ toastStore.remove(id);
72
+ }, duration);
73
+ return id;
74
+ }
75
+ var toast = Object.assign(
76
+ (message) => createToast(message, "default"),
77
+ {
78
+ success: (message) => createToast(message, "success"),
79
+ error: (message) => createToast(message, "error"),
80
+ loading: (message) => createToast(message, "loading"),
81
+ action: (message) => createToast(message, "action"),
82
+ dismiss: (id) => {
83
+ toastStore.remove(id);
84
+ },
85
+ update: (id, data) => {
86
+ toastStore.update(id, data);
87
+ },
88
+ promise: async (promise, messages) => {
89
+ const id = createToast(messages.loading, "loading");
90
+ try {
91
+ const result = await promise;
92
+ toastStore.update(id, {
93
+ title: messages.success,
94
+ type: "success"
95
+ });
96
+ return result;
97
+ } catch (err) {
98
+ toastStore.update(id, {
99
+ title: messages.error,
100
+ type: "error"
101
+ });
102
+ throw err;
103
+ }
104
+ }
105
+ }
106
+ );
107
+
108
+ // src/components/YourToastProvider.tsx
109
+ var import_react2 = require("react");
110
+
111
+ // src/hooks/useToast.ts
112
+ var import_react = require("react");
113
+ function useToast() {
114
+ const [toasts2, setToasts] = (0, import_react.useState)(
115
+ toastStore.getToasts()
116
+ );
117
+ (0, import_react.useEffect)(() => {
118
+ const unsubscribe = toastStore.subscribe(setToasts);
119
+ return unsubscribe;
120
+ }, []);
121
+ return { toasts: toasts2 };
122
+ }
123
+
124
+ // src/components/YourToastProvider.tsx
125
+ var import_jsx_runtime = require("react/jsx-runtime");
126
+ var YourToastProvider = ({
127
+ children
128
+ }) => {
129
+ const { toasts: toasts2 } = useToast();
130
+ const [mounted, setMounted] = (0, import_react2.useState)(false);
131
+ (0, import_react2.useEffect)(() => {
132
+ setMounted(true);
133
+ if (typeof document !== "undefined") {
134
+ const style = document.createElement("style");
135
+ style.innerHTML = `
136
+ @keyframes yt-slide-in {
137
+ from {
138
+ opacity: 0;
139
+ transform: translateY(-10px) translateX(10px);
140
+ }
141
+
142
+ to {
143
+ opacity: 1;
144
+ transform: translateY(0) translateX(0);
145
+ }
146
+ }
147
+ `;
148
+ document.head.appendChild(style);
149
+ return () => {
150
+ document.head.removeChild(style);
151
+ };
152
+ }
153
+ }, []);
154
+ if (!mounted) {
155
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children });
156
+ }
157
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
158
+ children,
159
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: containerStyle, children: toasts2.map((toast2) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
160
+ "div",
161
+ {
162
+ style: {
163
+ ...toastStyle,
164
+ ...getVariantStyle(toast2.type)
165
+ },
166
+ children: [
167
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "flex", flexDirection: "column" }, children: [
168
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { style: { fontWeight: 600 }, children: toast2.title }),
169
+ toast2.description && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
170
+ "span",
171
+ {
172
+ style: {
173
+ opacity: 0.7,
174
+ fontSize: "13px"
175
+ },
176
+ children: toast2.description
177
+ }
178
+ )
179
+ ] }),
180
+ toast2.action && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
181
+ "button",
182
+ {
183
+ onClick: toast2.action.onClick,
184
+ style: actionBtn,
185
+ children: toast2.action.label
186
+ }
187
+ ),
188
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
189
+ "button",
190
+ {
191
+ onClick: () => toastStore.remove(toast2.id),
192
+ style: closeBtn,
193
+ children: "\u2715"
194
+ }
195
+ )
196
+ ]
197
+ },
198
+ toast2.id
199
+ )) })
200
+ ] });
201
+ };
202
+ function getVariantStyle(type) {
203
+ switch (type) {
204
+ case "success":
205
+ return { background: "#16a34a" };
206
+ case "error":
207
+ return { background: "#dc2626" };
208
+ case "loading":
209
+ return { background: "#2563eb" };
210
+ case "action":
211
+ return { background: "#7c3aed" };
212
+ default:
213
+ return {
214
+ background: "rgba(255,255,255,0.08)"
215
+ };
216
+ }
217
+ }
218
+ var containerStyle = {
219
+ position: "fixed",
220
+ top: 20,
221
+ right: 20,
222
+ display: "flex",
223
+ flexDirection: "column",
224
+ gap: "10px",
225
+ zIndex: 9999
226
+ };
227
+ var toastStyle = {
228
+ backdropFilter: "blur(16px)",
229
+ color: "#fff",
230
+ padding: "14px 16px",
231
+ borderRadius: "14px",
232
+ display: "flex",
233
+ justifyContent: "space-between",
234
+ alignItems: "center",
235
+ minWidth: "260px",
236
+ gap: "10px",
237
+ border: "1px solid rgba(255,255,255,0.1)",
238
+ boxShadow: "0 8px 30px rgba(0,0,0,0.3)",
239
+ animation: "yt-slide-in 0.3s ease"
240
+ };
241
+ var closeBtn = {
242
+ background: "transparent",
243
+ border: "none",
244
+ color: "#fff",
245
+ cursor: "pointer"
246
+ };
247
+ var actionBtn = {
248
+ background: "rgba(255,255,255,0.1)",
249
+ border: "none",
250
+ padding: "6px 10px",
251
+ borderRadius: "8px",
252
+ color: "#fff",
253
+ cursor: "pointer",
254
+ fontSize: "12px"
255
+ };
256
+ // Annotate the CommonJS export names for ESM import in node:
257
+ 0 && (module.exports = {
258
+ YourToastProvider,
259
+ toast
260
+ });
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React from 'react';
3
+
4
+ declare const toast: ((message: string) => `${string}-${string}-${string}-${string}-${string}`) & {
5
+ success: (message: string) => `${string}-${string}-${string}-${string}-${string}`;
6
+ error: (message: string) => `${string}-${string}-${string}-${string}-${string}`;
7
+ loading: (message: string) => `${string}-${string}-${string}-${string}-${string}`;
8
+ action: (message: string) => `${string}-${string}-${string}-${string}-${string}`;
9
+ dismiss: (id: string) => void;
10
+ update: (id: string, data: Partial<any>) => void;
11
+ promise: <T>(promise: Promise<T>, messages: {
12
+ loading: string;
13
+ success: string;
14
+ error: string;
15
+ }) => Promise<T>;
16
+ };
17
+
18
+ declare const YourToastProvider: ({ children, }: {
19
+ children: React.ReactNode;
20
+ }) => react_jsx_runtime.JSX.Element;
21
+
22
+ export { YourToastProvider, toast };
@@ -0,0 +1,22 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import React from 'react';
3
+
4
+ declare const toast: ((message: string) => `${string}-${string}-${string}-${string}-${string}`) & {
5
+ success: (message: string) => `${string}-${string}-${string}-${string}-${string}`;
6
+ error: (message: string) => `${string}-${string}-${string}-${string}-${string}`;
7
+ loading: (message: string) => `${string}-${string}-${string}-${string}-${string}`;
8
+ action: (message: string) => `${string}-${string}-${string}-${string}-${string}`;
9
+ dismiss: (id: string) => void;
10
+ update: (id: string, data: Partial<any>) => void;
11
+ promise: <T>(promise: Promise<T>, messages: {
12
+ loading: string;
13
+ success: string;
14
+ error: string;
15
+ }) => Promise<T>;
16
+ };
17
+
18
+ declare const YourToastProvider: ({ children, }: {
19
+ children: React.ReactNode;
20
+ }) => react_jsx_runtime.JSX.Element;
21
+
22
+ export { YourToastProvider, toast };
package/dist/index.js CHANGED
@@ -1,3 +1,232 @@
1
- export const toast = () => {
2
- console.log("your-toast coming soon 🚀");
3
- };
1
+ // src/store/toastStore.ts
2
+ var toasts = [];
3
+ var listeners = [];
4
+ function notify() {
5
+ listeners.forEach((listener) => listener(toasts));
6
+ }
7
+ var toastStore = {
8
+ subscribe(listener) {
9
+ listeners.push(listener);
10
+ return () => {
11
+ listeners = listeners.filter((l) => l !== listener);
12
+ };
13
+ },
14
+ getToasts() {
15
+ return toasts;
16
+ },
17
+ add(toast2) {
18
+ toasts = [toast2, ...toasts].slice(0, 5);
19
+ notify();
20
+ },
21
+ remove(id) {
22
+ toasts = toasts.filter((t) => t.id !== id);
23
+ notify();
24
+ },
25
+ update(id, updated) {
26
+ toasts = toasts.map(
27
+ (t) => t.id === id ? { ...t, ...updated } : t
28
+ );
29
+ notify();
30
+ }
31
+ };
32
+
33
+ // src/core/toast.ts
34
+ function createToast(message, type = "default") {
35
+ const id = crypto.randomUUID();
36
+ const duration = 4e3;
37
+ toastStore.add({
38
+ id,
39
+ title: message,
40
+ type,
41
+ duration
42
+ });
43
+ setTimeout(() => {
44
+ toastStore.remove(id);
45
+ }, duration);
46
+ return id;
47
+ }
48
+ var toast = Object.assign(
49
+ (message) => createToast(message, "default"),
50
+ {
51
+ success: (message) => createToast(message, "success"),
52
+ error: (message) => createToast(message, "error"),
53
+ loading: (message) => createToast(message, "loading"),
54
+ action: (message) => createToast(message, "action"),
55
+ dismiss: (id) => {
56
+ toastStore.remove(id);
57
+ },
58
+ update: (id, data) => {
59
+ toastStore.update(id, data);
60
+ },
61
+ promise: async (promise, messages) => {
62
+ const id = createToast(messages.loading, "loading");
63
+ try {
64
+ const result = await promise;
65
+ toastStore.update(id, {
66
+ title: messages.success,
67
+ type: "success"
68
+ });
69
+ return result;
70
+ } catch (err) {
71
+ toastStore.update(id, {
72
+ title: messages.error,
73
+ type: "error"
74
+ });
75
+ throw err;
76
+ }
77
+ }
78
+ }
79
+ );
80
+
81
+ // src/components/YourToastProvider.tsx
82
+ import { useEffect as useEffect2, useState as useState2 } from "react";
83
+
84
+ // src/hooks/useToast.ts
85
+ import { useEffect, useState } from "react";
86
+ function useToast() {
87
+ const [toasts2, setToasts] = useState(
88
+ toastStore.getToasts()
89
+ );
90
+ useEffect(() => {
91
+ const unsubscribe = toastStore.subscribe(setToasts);
92
+ return unsubscribe;
93
+ }, []);
94
+ return { toasts: toasts2 };
95
+ }
96
+
97
+ // src/components/YourToastProvider.tsx
98
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
99
+ var YourToastProvider = ({
100
+ children
101
+ }) => {
102
+ const { toasts: toasts2 } = useToast();
103
+ const [mounted, setMounted] = useState2(false);
104
+ useEffect2(() => {
105
+ setMounted(true);
106
+ if (typeof document !== "undefined") {
107
+ const style = document.createElement("style");
108
+ style.innerHTML = `
109
+ @keyframes yt-slide-in {
110
+ from {
111
+ opacity: 0;
112
+ transform: translateY(-10px) translateX(10px);
113
+ }
114
+
115
+ to {
116
+ opacity: 1;
117
+ transform: translateY(0) translateX(0);
118
+ }
119
+ }
120
+ `;
121
+ document.head.appendChild(style);
122
+ return () => {
123
+ document.head.removeChild(style);
124
+ };
125
+ }
126
+ }, []);
127
+ if (!mounted) {
128
+ return /* @__PURE__ */ jsx(Fragment, { children });
129
+ }
130
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
131
+ children,
132
+ /* @__PURE__ */ jsx("div", { style: containerStyle, children: toasts2.map((toast2) => /* @__PURE__ */ jsxs(
133
+ "div",
134
+ {
135
+ style: {
136
+ ...toastStyle,
137
+ ...getVariantStyle(toast2.type)
138
+ },
139
+ children: [
140
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column" }, children: [
141
+ /* @__PURE__ */ jsx("span", { style: { fontWeight: 600 }, children: toast2.title }),
142
+ toast2.description && /* @__PURE__ */ jsx(
143
+ "span",
144
+ {
145
+ style: {
146
+ opacity: 0.7,
147
+ fontSize: "13px"
148
+ },
149
+ children: toast2.description
150
+ }
151
+ )
152
+ ] }),
153
+ toast2.action && /* @__PURE__ */ jsx(
154
+ "button",
155
+ {
156
+ onClick: toast2.action.onClick,
157
+ style: actionBtn,
158
+ children: toast2.action.label
159
+ }
160
+ ),
161
+ /* @__PURE__ */ jsx(
162
+ "button",
163
+ {
164
+ onClick: () => toastStore.remove(toast2.id),
165
+ style: closeBtn,
166
+ children: "\u2715"
167
+ }
168
+ )
169
+ ]
170
+ },
171
+ toast2.id
172
+ )) })
173
+ ] });
174
+ };
175
+ function getVariantStyle(type) {
176
+ switch (type) {
177
+ case "success":
178
+ return { background: "#16a34a" };
179
+ case "error":
180
+ return { background: "#dc2626" };
181
+ case "loading":
182
+ return { background: "#2563eb" };
183
+ case "action":
184
+ return { background: "#7c3aed" };
185
+ default:
186
+ return {
187
+ background: "rgba(255,255,255,0.08)"
188
+ };
189
+ }
190
+ }
191
+ var containerStyle = {
192
+ position: "fixed",
193
+ top: 20,
194
+ right: 20,
195
+ display: "flex",
196
+ flexDirection: "column",
197
+ gap: "10px",
198
+ zIndex: 9999
199
+ };
200
+ var toastStyle = {
201
+ backdropFilter: "blur(16px)",
202
+ color: "#fff",
203
+ padding: "14px 16px",
204
+ borderRadius: "14px",
205
+ display: "flex",
206
+ justifyContent: "space-between",
207
+ alignItems: "center",
208
+ minWidth: "260px",
209
+ gap: "10px",
210
+ border: "1px solid rgba(255,255,255,0.1)",
211
+ boxShadow: "0 8px 30px rgba(0,0,0,0.3)",
212
+ animation: "yt-slide-in 0.3s ease"
213
+ };
214
+ var closeBtn = {
215
+ background: "transparent",
216
+ border: "none",
217
+ color: "#fff",
218
+ cursor: "pointer"
219
+ };
220
+ var actionBtn = {
221
+ background: "rgba(255,255,255,0.1)",
222
+ border: "none",
223
+ padding: "6px 10px",
224
+ borderRadius: "8px",
225
+ color: "#fff",
226
+ cursor: "pointer",
227
+ fontSize: "12px"
228
+ };
229
+ export {
230
+ YourToastProvider,
231
+ toast
232
+ };
package/package.json CHANGED
@@ -1,20 +1,56 @@
1
1
  {
2
2
  "name": "your-toast",
3
- "version": "0.0.1",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
- "description": "Modern toast notification library for React (coming soon)",
6
- "main": "dist/index.js",
7
- "module": "dist/index.mjs",
5
+ "description": "Modern toast notification library for React and Next.js with glass UI, promise support, and clean API",
6
+ "main": "dist/index.cjs",
7
+ "module": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
9
- "files": ["dist"],
9
+ "scripts": {
10
+ "build": "tsup",
11
+ "dev": "tsup --watch"
12
+ },
13
+ "files": [
14
+ "dist"
15
+ ],
10
16
  "sideEffects": false,
11
17
  "keywords": [
12
- "react",
18
+ "your-toast",
13
19
  "toast",
14
- "notification",
15
- "ui",
16
- "toast-library"
20
+ "my-toast",
21
+ "react-toast",
22
+ "toast-notification",
23
+ "react-notification",
24
+ "toast-library",
25
+ "react-toast-library",
26
+ "nextjs-toast",
27
+ "toast-ui",
28
+ "notification-library",
29
+ "lightweight-toast",
30
+ "modern-toast",
31
+ "react-alert",
32
+ "ui-notification"
17
33
  ],
34
+ "peerDependencies": {
35
+ "react": ">=18",
36
+ "react-dom": ">=18"
37
+ },
18
38
  "author": "Masaud Ahmod",
19
- "license": "MIT"
20
- }
39
+ "license": "MIT",
40
+ "devDependencies": {
41
+ "@types/react": "^19.2.14",
42
+ "@types/react-dom": "^19.2.3",
43
+ "react": "^19.2.5",
44
+ "react-dom": "^19.2.5",
45
+ "tsup": "^8.5.1",
46
+ "typescript": "^6.0.3"
47
+ },
48
+ "homepage": "https://github.com/masaudahmod/your-toast",
49
+ "repository": {
50
+ "type": "git",
51
+ "url": "https://github.com/masaudahmod/your-toast.git"
52
+ },
53
+ "bugs": {
54
+ "url": "https://github.com/masaudahmod/your-toast/issues"
55
+ }
56
+ }