react-toast-msg 0.1.0 → 1.1.0

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/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 SudhuCodes
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -2,27 +2,22 @@
2
2
 
3
3
  A lightweight, zero-config, customizable React toast notification library — just plug and play.
4
4
 
5
- ## Features
5
+ ## Features
6
6
 
7
- - Extremely fast and minimal
8
- - 📦 Tree-shakable and zero external CSS
9
- - 🧩 Works with both `import` and `require`
10
- - 🎨 Easy to style with utility classes
11
- - ✅ Works with React 18+
7
+ - Extremely fast and minimal
8
+ - Works with both `import` and `require`
9
+ - Easy to style with utility classes
10
+ - Works with React 18+
12
11
 
13
- ---
14
12
 
15
- ## 📦 Installation
13
+ ## Installation
16
14
 
17
15
  ```bash
18
16
  npm install react-toast-msg
19
- # or
20
- yarn add react-toast-msg
21
17
  ````
22
18
 
23
- ---
24
19
 
25
- ## 🔧 Usage
20
+ ## Usage
26
21
 
27
22
  ### 1. Add the `ToastContainer` at the root of your app (once):
28
23
 
@@ -39,9 +34,8 @@ function App() {
39
34
  }
40
35
  ```
41
36
 
42
- ---
43
37
 
44
- ## 🪄 Variants
38
+ ## Variants
45
39
 
46
40
  ```js
47
41
  toast('Default toast');
@@ -50,15 +44,13 @@ toast.error('Something went wrong!');
50
44
  toast.info('Some useful info');
51
45
  ```
52
46
 
53
- ---
54
47
 
55
- ## 🎨 Customization (Coming Soon)
48
+ ## Customization (Coming Soon)
56
49
 
57
50
  Style your toasts with Tailwind, classNames, or inline styles. Theme support and placement config coming in the next release.
58
51
 
59
- ---
60
52
 
61
- ## 🔌 API
53
+ ## API
62
54
 
63
55
  | Function | Description |
64
56
  | -------------------- | ------------------ |
@@ -67,16 +59,28 @@ Style your toasts with Tailwind, classNames, or inline styles. Theme support and
67
59
  | `toast.error(msg)` | Error variant |
68
60
  | `toast.info(msg)` | Info variant |
69
61
 
70
- ---
71
62
 
72
- ## 📚 License
63
+ ## Contributing
73
64
 
74
- MIT © [Sudhanshu Kumar](https://github.com/sudhucodes)
65
+ > react-toast-msg is an open-source project — and you can help make it better! Whether you want to:
75
66
 
76
- ---
67
+ - Suggest new features
68
+ - Improve performance or accessibility
69
+ - Fix bugs
70
+ - Refactor code or improve documentation
77
71
 
78
- ## 🌐 Links
79
72
 
80
- * 📁 [GitHub Repo](https://github.com/sudhucodes/react-toast-msg)
81
- * 🐞 [Issue Tracker](https://github.com/sudhucodes/react-toast-msg/issues)
82
- * 📦 [npm Package](https://www.npmjs.com/package/react-toast-msg)
73
+ We’d love your input!
74
+
75
+ Start by checking out the [GitHub repo](https://github.com/sudhucodes/react-toast-msg) — issues, discussions, and PRs are welcome. Let's build something amazing together 🚀
76
+
77
+ ## License
78
+
79
+ MIT © [SudhuCodes](https://github.com/sudhucodes)
80
+
81
+
82
+ ## Links
83
+
84
+ * [GitHub Repo](https://github.com/sudhucodes/react-toast-msg)
85
+ * [Issue Tracker](https://github.com/sudhucodes/react-toast-msg/issues)
86
+ * [npm Package](https://www.npmjs.com/package/react-toast-msg)
package/dist/index.css ADDED
@@ -0,0 +1,2 @@
1
+ :root{--color-success-bg:oklch(0.962 0.044 156.743);--color-success-border:oklch(0.723 0.219 149.579);--color-success-text:oklch(0.393 0.095 152.535);--color-success-icon:oklch(0.627 0.194 149.214)}*{box-sizing:border-box;margin:0;padding:0}.toast-container{display:flex;flex-direction:column;gap:8px;left:50%;max-width:90vw;position:fixed;top:20px;transform:translateX(-50%);width:auto;z-index:9999}.toast{align-items:start;animation:fadeInOut 3s ease-in-out forwards;border-left:4px solid;border-radius:.375rem;display:flex;justify-content:space-between;opacity:0;padding:.5rem .5rem .5rem 0;width:300px}.toast-success{background-color:var(--color-success-bg);border-left-color:var(--color-success-border);color:var(--color-success-text)}.toast-content{align-items:center;display:flex;padding:.5rem}.toast-icon{color:var(--color-success-icon);flex-shrink:0;height:1.75rem;margin-right:.5rem;width:1.75rem}.toast-close{background:none;border:none;color:var(--color-success-text);cursor:pointer;margin-left:1rem}.close-icon{height:1rem;width:1rem}@keyframes fadeInOut{0%{opacity:0;transform:translateY(-10px)}10%{opacity:1;transform:translateY(0)}90%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-10px)}}
2
+ /*# sourceMappingURL=index.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["global.css"],"names":[],"mappings":"AAAA,MACI,6CAA8C,CAC9C,iDAAkD,CAClD,+CAAgD,CAChD,+CACJ,CAEA,EAGI,qBAAsB,CAFtB,QAAS,CACT,SAEJ,CAEA,iBAMI,YAAa,CACb,qBAAsB,CACtB,OAAQ,CALR,QAAS,CAOT,cAAe,CATf,cAAe,CACf,QAAS,CAET,0BAA2B,CAK3B,UAAW,CAJX,YAMJ,CAEA,OAEI,iBAAkB,CAQlB,2CAA4C,CAH5C,qBAAsB,CACtB,qBAAuB,CAPvB,YAAa,CAEb,6BAA8B,CAM9B,SAAU,CAHV,2BAAkB,CAFlB,WAOJ,CAEA,eACI,wCAAyC,CACzC,6CAA8C,CAC9C,+BACJ,CAEA,eAEI,kBAAmB,CADnB,YAAa,CAEb,aACJ,CAEA,YAII,+BAAgC,CAChC,aAAc,CAHd,cAAe,CACf,kBAAoB,CAFpB,aAKJ,CAEA,aAEI,eAAgB,CAChB,WAAY,CACZ,+BAAgC,CAChC,cAAe,CAJf,gBAKJ,CAEA,YAEI,WAAY,CADZ,UAEJ,CAEA,qBACI,GACI,SAAU,CACV,2BACJ,CAEA,IACI,SAAU,CACV,uBACJ,CAEA,IACI,SAAU,CACV,uBACJ,CAEA,GACI,SAAU,CACV,2BACJ,CACJ","file":"index.css","sourcesContent":[":root {\r\n --color-success-bg: oklch(0.962 0.044 156.743);\r\n --color-success-border: oklch(0.723 0.219 149.579);\r\n --color-success-text: oklch(0.393 0.095 152.535);\r\n --color-success-icon: oklch(0.627 0.194 149.214);\r\n}\r\n\r\n* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n}\r\n\r\n.toast-container {\r\n position: fixed;\r\n top: 20px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n z-index: 9999;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n width: auto;\r\n max-width: 90vw;\r\n}\r\n\r\n.toast {\r\n display: flex;\r\n align-items: start;\r\n justify-content: space-between;\r\n width: 300px;\r\n padding: 0.5rem;\r\n padding-left: 0rem;\r\n border-left: 4px solid;\r\n border-radius: 0.375rem;\r\n opacity: 0;\r\n animation: fadeInOut 3s ease-in-out forwards;\r\n}\r\n\r\n.toast-success {\r\n background-color: var(--color-success-bg);\r\n border-left-color: var(--color-success-border);\r\n color: var(--color-success-text);\r\n}\r\n\r\n.toast-content {\r\n display: flex;\r\n align-items: center;\r\n padding: 0.5rem;\r\n}\r\n\r\n.toast-icon {\r\n width: 1.75rem;\r\n height: 1.75rem;\r\n margin-right: 0.5rem;\r\n color: var(--color-success-icon);\r\n flex-shrink: 0;\r\n}\r\n\r\n.toast-close {\r\n margin-left: 1rem;\r\n background: none;\r\n border: none;\r\n color: var(--color-success-text);\r\n cursor: pointer;\r\n}\r\n\r\n.close-icon {\r\n width: 1rem;\r\n height: 1rem;\r\n}\r\n\r\n@keyframes fadeInOut {\r\n 0% {\r\n opacity: 0;\r\n transform: translateY(-10px);\r\n }\r\n\r\n 10% {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n\r\n 90% {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n\r\n 100% {\r\n opacity: 0;\r\n transform: translateY(-10px);\r\n }\r\n}"]}
@@ -0,0 +1,2 @@
1
+ :root{--color-success-bg:oklch(0.962 0.044 156.743);--color-success-border:oklch(0.723 0.219 149.579);--color-success-text:oklch(0.393 0.095 152.535);--color-success-icon:oklch(0.627 0.194 149.214)}*{box-sizing:border-box;margin:0;padding:0}.toast-container{display:flex;flex-direction:column;gap:8px;left:50%;max-width:90vw;position:fixed;top:20px;transform:translateX(-50%);width:auto;z-index:9999}.toast{align-items:start;animation:fadeInOut 3s ease-in-out forwards;border-left:4px solid;border-radius:.375rem;display:flex;justify-content:space-between;opacity:0;padding:.5rem .5rem .5rem 0;width:300px}.toast-success{background-color:var(--color-success-bg);border-left-color:var(--color-success-border);color:var(--color-success-text)}.toast-content{align-items:center;display:flex;padding:.5rem}.toast-icon{color:var(--color-success-icon);flex-shrink:0;height:1.75rem;margin-right:.5rem;width:1.75rem}.toast-close{background:none;border:none;color:var(--color-success-text);cursor:pointer;margin-left:1rem}.close-icon{height:1rem;width:1rem}@keyframes fadeInOut{0%{opacity:0;transform:translateY(-10px)}10%{opacity:1;transform:translateY(0)}90%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-10px)}}
2
+ /*# sourceMappingURL=index.es.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["global.css"],"names":[],"mappings":"AAAA,MACI,6CAA8C,CAC9C,iDAAkD,CAClD,+CAAgD,CAChD,+CACJ,CAEA,EAGI,qBAAsB,CAFtB,QAAS,CACT,SAEJ,CAEA,iBAMI,YAAa,CACb,qBAAsB,CACtB,OAAQ,CALR,QAAS,CAOT,cAAe,CATf,cAAe,CACf,QAAS,CAET,0BAA2B,CAK3B,UAAW,CAJX,YAMJ,CAEA,OAEI,iBAAkB,CAQlB,2CAA4C,CAH5C,qBAAsB,CACtB,qBAAuB,CAPvB,YAAa,CAEb,6BAA8B,CAM9B,SAAU,CAHV,2BAAkB,CAFlB,WAOJ,CAEA,eACI,wCAAyC,CACzC,6CAA8C,CAC9C,+BACJ,CAEA,eAEI,kBAAmB,CADnB,YAAa,CAEb,aACJ,CAEA,YAII,+BAAgC,CAChC,aAAc,CAHd,cAAe,CACf,kBAAoB,CAFpB,aAKJ,CAEA,aAEI,eAAgB,CAChB,WAAY,CACZ,+BAAgC,CAChC,cAAe,CAJf,gBAKJ,CAEA,YAEI,WAAY,CADZ,UAEJ,CAEA,qBACI,GACI,SAAU,CACV,2BACJ,CAEA,IACI,SAAU,CACV,uBACJ,CAEA,IACI,SAAU,CACV,uBACJ,CAEA,GACI,SAAU,CACV,2BACJ,CACJ","file":"index.es.css","sourcesContent":[":root {\r\n --color-success-bg: oklch(0.962 0.044 156.743);\r\n --color-success-border: oklch(0.723 0.219 149.579);\r\n --color-success-text: oklch(0.393 0.095 152.535);\r\n --color-success-icon: oklch(0.627 0.194 149.214);\r\n}\r\n\r\n* {\r\n margin: 0;\r\n padding: 0;\r\n box-sizing: border-box;\r\n}\r\n\r\n.toast-container {\r\n position: fixed;\r\n top: 20px;\r\n left: 50%;\r\n transform: translateX(-50%);\r\n z-index: 9999;\r\n display: flex;\r\n flex-direction: column;\r\n gap: 8px;\r\n width: auto;\r\n max-width: 90vw;\r\n}\r\n\r\n.toast {\r\n display: flex;\r\n align-items: start;\r\n justify-content: space-between;\r\n width: 300px;\r\n padding: 0.5rem;\r\n padding-left: 0rem;\r\n border-left: 4px solid;\r\n border-radius: 0.375rem;\r\n opacity: 0;\r\n animation: fadeInOut 3s ease-in-out forwards;\r\n}\r\n\r\n.toast-success {\r\n background-color: var(--color-success-bg);\r\n border-left-color: var(--color-success-border);\r\n color: var(--color-success-text);\r\n}\r\n\r\n.toast-content {\r\n display: flex;\r\n align-items: center;\r\n padding: 0.5rem;\r\n}\r\n\r\n.toast-icon {\r\n width: 1.75rem;\r\n height: 1.75rem;\r\n margin-right: 0.5rem;\r\n color: var(--color-success-icon);\r\n flex-shrink: 0;\r\n}\r\n\r\n.toast-close {\r\n margin-left: 1rem;\r\n background: none;\r\n border: none;\r\n color: var(--color-success-text);\r\n cursor: pointer;\r\n}\r\n\r\n.close-icon {\r\n width: 1rem;\r\n height: 1rem;\r\n}\r\n\r\n@keyframes fadeInOut {\r\n 0% {\r\n opacity: 0;\r\n transform: translateY(-10px);\r\n }\r\n\r\n 10% {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n\r\n 90% {\r\n opacity: 1;\r\n transform: translateY(0);\r\n }\r\n\r\n 100% {\r\n opacity: 0;\r\n transform: translateY(-10px);\r\n }\r\n}"]}
package/dist/index.es.js CHANGED
@@ -11,6 +11,14 @@ function _arrayWithHoles(r) {
11
11
  function _arrayWithoutHoles(r) {
12
12
  if (Array.isArray(r)) return _arrayLikeToArray(r);
13
13
  }
14
+ function _defineProperty(e, r, t) {
15
+ return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
16
+ value: t,
17
+ enumerable: !0,
18
+ configurable: !0,
19
+ writable: !0
20
+ }) : e[r] = t, e;
21
+ }
14
22
  function _iterableToArray(r) {
15
23
  if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
16
24
  }
@@ -47,12 +55,47 @@ function _nonIterableRest() {
47
55
  function _nonIterableSpread() {
48
56
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
49
57
  }
58
+ function ownKeys(e, r) {
59
+ var t = Object.keys(e);
60
+ if (Object.getOwnPropertySymbols) {
61
+ var o = Object.getOwnPropertySymbols(e);
62
+ r && (o = o.filter(function (r) {
63
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
64
+ })), t.push.apply(t, o);
65
+ }
66
+ return t;
67
+ }
68
+ function _objectSpread2(e) {
69
+ for (var r = 1; r < arguments.length; r++) {
70
+ var t = null != arguments[r] ? arguments[r] : {};
71
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
72
+ _defineProperty(e, r, t[r]);
73
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
74
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
75
+ });
76
+ }
77
+ return e;
78
+ }
50
79
  function _slicedToArray(r, e) {
51
80
  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
52
81
  }
53
82
  function _toConsumableArray(r) {
54
83
  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
55
84
  }
85
+ function _toPrimitive(t, r) {
86
+ if ("object" != typeof t || !t) return t;
87
+ var e = t[Symbol.toPrimitive];
88
+ if (void 0 !== e) {
89
+ var i = e.call(t, r || "default");
90
+ if ("object" != typeof i) return i;
91
+ throw new TypeError("@@toPrimitive must return a primitive value.");
92
+ }
93
+ return ("string" === r ? String : Number)(t);
94
+ }
95
+ function _toPropertyKey(t) {
96
+ var i = _toPrimitive(t, "string");
97
+ return "symbol" == typeof i ? i : i + "";
98
+ }
56
99
  function _unsupportedIterableToArray(r, a) {
57
100
  if (r) {
58
101
  if ("string" == typeof r) return _arrayLikeToArray(r, a);
@@ -68,42 +111,66 @@ function ToastContainer() {
68
111
  setToasts = _useState2[1];
69
112
  useEffect(function () {
70
113
  _register(function (toast) {
114
+ var newToast = _objectSpread2(_objectSpread2({}, toast), {}, {
115
+ id: Date.now() + Math.random()
116
+ });
71
117
  setToasts(function (prev) {
72
- return [].concat(_toConsumableArray(prev), [toast]);
118
+ return [newToast].concat(_toConsumableArray(prev));
73
119
  });
74
120
  setTimeout(function () {
75
121
  setToasts(function (prev) {
76
- return prev.slice(1);
122
+ return prev.filter(function (t) {
123
+ return t.id !== newToast.id;
124
+ });
77
125
  });
78
126
  }, 3000);
79
127
  });
80
128
  }, []);
81
129
  return /*#__PURE__*/React.createElement("div", {
82
- style: {
83
- position: 'fixed',
84
- top: 20,
85
- left: '50%',
86
- transform: 'translateX(-50%)',
87
- zIndex: 9999,
88
- display: 'flex',
89
- flexDirection: 'column',
90
- gap: '8px',
91
- width: 'auto',
92
- maxWidth: '90vw'
93
- }
94
- }, toasts.map(function (t, i) {
130
+ className: "toast-container"
131
+ }, toasts.map(function (t) {
95
132
  return /*#__PURE__*/React.createElement("div", {
96
- key: i,
97
- style: {
98
- padding: '10px 20px',
99
- borderRadius: 4,
100
- color: '#000',
101
- backgroundColor: t.type === 'success' ? '#d4edda' : t.type === 'error' ? '#f8d7da' : '#fff',
102
- boxShadow: '0 2px 6px rgba(0,0,0,0.15)',
103
- minWidth: 200,
104
- maxWidth: 400
133
+ key: t.id,
134
+ className: "toast toast-".concat(t.type)
135
+ }, /*#__PURE__*/React.createElement("div", {
136
+ className: "toast-content"
137
+ }, /*#__PURE__*/React.createElement("svg", {
138
+ className: "toast-icon",
139
+ "aria-hidden": "true",
140
+ xmlns: "http://www.w3.org/2000/svg",
141
+ width: "28",
142
+ height: "28",
143
+ fill: "currentColor",
144
+ viewBox: "0 0 24 24"
145
+ }, /*#__PURE__*/React.createElement("path", {
146
+ fillRule: "evenodd",
147
+ d: "M2 12C2 6.477 6.477 2 12 2s10 4.477 10 10-4.477 10-10 10S2 17.523 2 12Zm13.707-1.293a1 1 0 0 0-1.414-1.414L11 12.586l-1.793-1.793a1 1 0 0 0-1.414 1.414l2.5 2.5a1 1 0 0 0 1.414 0l4-4Z",
148
+ clipRule: "evenodd"
149
+ })), /*#__PURE__*/React.createElement("p", null, t.message)), /*#__PURE__*/React.createElement("button", {
150
+ className: "toast-close",
151
+ "aria-label": "Close",
152
+ onClick: function onClick() {
153
+ return setToasts(function (prev) {
154
+ return prev.filter(function (x) {
155
+ return x.id !== t.id;
156
+ });
157
+ });
105
158
  }
106
- }, t.message);
159
+ }, /*#__PURE__*/React.createElement("svg", {
160
+ className: "close-icon",
161
+ "aria-hidden": "true",
162
+ xmlns: "http://www.w3.org/2000/svg",
163
+ width: "24",
164
+ height: "24",
165
+ fill: "none",
166
+ viewBox: "0 0 24 24"
167
+ }, /*#__PURE__*/React.createElement("path", {
168
+ stroke: "currentColor",
169
+ strokeLinecap: "round",
170
+ strokeLinejoin: "round",
171
+ strokeWidth: "2",
172
+ d: "M6 18 17.94 6M18 18 6.06 6"
173
+ }))));
107
174
  }));
108
175
  }
109
176
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.es.js","sources":["../src/ToastContainer.jsx","../src/index.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\nimport { _register } from './index.js';\r\n\r\nexport default function ToastContainer() {\r\n const [toasts, setToasts] = useState([]);\r\n\r\n useEffect(() => {\r\n _register((toast) => {\r\n setToasts((prev) => [...prev, toast]);\r\n setTimeout(() => {\r\n setToasts((prev) => prev.slice(1));\r\n }, 3000);\r\n });\r\n }, []);\r\n\r\n return (\r\n <div style={{\r\n position: 'fixed',\r\n top: 20,\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n zIndex: 9999,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n width: 'auto',\r\n maxWidth: '90vw',\r\n }}>\r\n {toasts.map((t, i) => (\r\n <div\r\n key={i}\r\n style={{\r\n padding: '10px 20px',\r\n borderRadius: 4,\r\n color: '#000',\r\n backgroundColor:\r\n t.type === 'success' ? '#d4edda' :\r\n t.type === 'error' ? '#f8d7da' :\r\n '#fff',\r\n boxShadow: '0 2px 6px rgba(0,0,0,0.15)',\r\n minWidth: 200,\r\n maxWidth: 400,\r\n }}\r\n >\r\n {t.message}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import ToastContainer from './ToastContainer.jsx';\r\n\r\nlet addToast;\r\n\r\nconst toast = {\r\n show(message) {\r\n addToast && addToast({ message, type: 'default' });\r\n },\r\n success(message) {\r\n addToast && addToast({ message, type: 'success' });\r\n },\r\n error(message) {\r\n addToast && addToast({ message, type: 'error' });\r\n },\r\n};\r\n\r\nfunction _register(fn) {\r\n addToast = fn;\r\n}\r\n\r\nexport { ToastContainer, toast, _register };\r\n"],"names":["ToastContainer","_useState","useState","_useState2","_slicedToArray","toasts","setToasts","useEffect","_register","toast","prev","concat","_toConsumableArray","setTimeout","slice","React","createElement","style","position","top","left","transform","zIndex","display","flexDirection","gap","width","maxWidth","map","t","i","key","padding","borderRadius","color","backgroundColor","type","boxShadow","minWidth","message","addToast","show","success","error","fn"],"mappings":"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"}
1
+ {"version":3,"file":"index.es.js","sources":["../src/ToastContainer.jsx","../src/index.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\nimport { _register } from './index.js';\r\nimport './global.css';\r\n\r\nexport default function ToastContainer() {\r\n const [toasts, setToasts] = useState([]);\r\n\r\n useEffect(() => {\r\n _register((toast) => {\r\n const newToast = { ...toast, id: Date.now() + Math.random() };\r\n setToasts((prev) => [newToast, ...prev]);\r\n\r\n setTimeout(() => {\r\n setToasts((prev) => prev.filter((t) => t.id !== newToast.id));\r\n }, 3000);\r\n });\r\n }, []);\r\n\r\n return (\r\n <div className=\"toast-container\">\r\n {toasts.map((t) => (\r\n <div key={t.id} className={`toast toast-${t.type}`}>\r\n <div className=\"toast-content\">\r\n <svg className=\"toast-icon\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path fillRule=\"evenodd\" d=\"M2 12C2 6.477 6.477 2 12 2s10 4.477 10 10-4.477 10-10 10S2 17.523 2 12Zm13.707-1.293a1 1 0 0 0-1.414-1.414L11 12.586l-1.793-1.793a1 1 0 0 0-1.414 1.414l2.5 2.5a1 1 0 0 0 1.414 0l4-4Z\" clipRule=\"evenodd\" />\r\n </svg>\r\n <p>{t.message}</p>\r\n </div>\r\n <button\r\n className=\"toast-close\"\r\n aria-label=\"Close\"\r\n onClick={() => setToasts((prev) => prev.filter((x) => x.id !== t.id))}\r\n >\r\n <svg className=\"close-icon\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M6 18 17.94 6M18 18 6.06 6\" />\r\n </svg>\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}","import ToastContainer from './ToastContainer.jsx';\r\n\r\nlet addToast;\r\n\r\nconst toast = {\r\n show(message) {\r\n addToast && addToast({ message, type: 'default' });\r\n },\r\n success(message) {\r\n addToast && addToast({ message, type: 'success' });\r\n },\r\n error(message) {\r\n addToast && addToast({ message, type: 'error' });\r\n },\r\n};\r\n\r\nfunction _register(fn) {\r\n addToast = fn;\r\n}\r\n\r\nexport { ToastContainer, toast, _register };"],"names":["ToastContainer","_useState","useState","_useState2","_slicedToArray","toasts","setToasts","useEffect","_register","toast","newToast","_objectSpread","id","Date","now","Math","random","prev","concat","_toConsumableArray","setTimeout","filter","t","React","createElement","className","map","key","type","xmlns","width","height","fill","viewBox","fillRule","d","clipRule","message","onClick","x","stroke","strokeLinecap","strokeLinejoin","strokeWidth","addToast","show","success","error","fn"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -13,6 +13,14 @@ function _arrayWithHoles(r) {
13
13
  function _arrayWithoutHoles(r) {
14
14
  if (Array.isArray(r)) return _arrayLikeToArray(r);
15
15
  }
16
+ function _defineProperty(e, r, t) {
17
+ return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
18
+ value: t,
19
+ enumerable: !0,
20
+ configurable: !0,
21
+ writable: !0
22
+ }) : e[r] = t, e;
23
+ }
16
24
  function _iterableToArray(r) {
17
25
  if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r);
18
26
  }
@@ -49,12 +57,47 @@ function _nonIterableRest() {
49
57
  function _nonIterableSpread() {
50
58
  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
51
59
  }
60
+ function ownKeys(e, r) {
61
+ var t = Object.keys(e);
62
+ if (Object.getOwnPropertySymbols) {
63
+ var o = Object.getOwnPropertySymbols(e);
64
+ r && (o = o.filter(function (r) {
65
+ return Object.getOwnPropertyDescriptor(e, r).enumerable;
66
+ })), t.push.apply(t, o);
67
+ }
68
+ return t;
69
+ }
70
+ function _objectSpread2(e) {
71
+ for (var r = 1; r < arguments.length; r++) {
72
+ var t = null != arguments[r] ? arguments[r] : {};
73
+ r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {
74
+ _defineProperty(e, r, t[r]);
75
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {
76
+ Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));
77
+ });
78
+ }
79
+ return e;
80
+ }
52
81
  function _slicedToArray(r, e) {
53
82
  return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest();
54
83
  }
55
84
  function _toConsumableArray(r) {
56
85
  return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread();
57
86
  }
87
+ function _toPrimitive(t, r) {
88
+ if ("object" != typeof t || !t) return t;
89
+ var e = t[Symbol.toPrimitive];
90
+ if (void 0 !== e) {
91
+ var i = e.call(t, r || "default");
92
+ if ("object" != typeof i) return i;
93
+ throw new TypeError("@@toPrimitive must return a primitive value.");
94
+ }
95
+ return ("string" === r ? String : Number)(t);
96
+ }
97
+ function _toPropertyKey(t) {
98
+ var i = _toPrimitive(t, "string");
99
+ return "symbol" == typeof i ? i : i + "";
100
+ }
58
101
  function _unsupportedIterableToArray(r, a) {
59
102
  if (r) {
60
103
  if ("string" == typeof r) return _arrayLikeToArray(r, a);
@@ -70,42 +113,66 @@ function ToastContainer() {
70
113
  setToasts = _useState2[1];
71
114
  React.useEffect(function () {
72
115
  _register(function (toast) {
116
+ var newToast = _objectSpread2(_objectSpread2({}, toast), {}, {
117
+ id: Date.now() + Math.random()
118
+ });
73
119
  setToasts(function (prev) {
74
- return [].concat(_toConsumableArray(prev), [toast]);
120
+ return [newToast].concat(_toConsumableArray(prev));
75
121
  });
76
122
  setTimeout(function () {
77
123
  setToasts(function (prev) {
78
- return prev.slice(1);
124
+ return prev.filter(function (t) {
125
+ return t.id !== newToast.id;
126
+ });
79
127
  });
80
128
  }, 3000);
81
129
  });
82
130
  }, []);
83
131
  return /*#__PURE__*/React.createElement("div", {
84
- style: {
85
- position: 'fixed',
86
- top: 20,
87
- left: '50%',
88
- transform: 'translateX(-50%)',
89
- zIndex: 9999,
90
- display: 'flex',
91
- flexDirection: 'column',
92
- gap: '8px',
93
- width: 'auto',
94
- maxWidth: '90vw'
95
- }
96
- }, toasts.map(function (t, i) {
132
+ className: "toast-container"
133
+ }, toasts.map(function (t) {
97
134
  return /*#__PURE__*/React.createElement("div", {
98
- key: i,
99
- style: {
100
- padding: '10px 20px',
101
- borderRadius: 4,
102
- color: '#000',
103
- backgroundColor: t.type === 'success' ? '#d4edda' : t.type === 'error' ? '#f8d7da' : '#fff',
104
- boxShadow: '0 2px 6px rgba(0,0,0,0.15)',
105
- minWidth: 200,
106
- maxWidth: 400
135
+ key: t.id,
136
+ className: "toast toast-".concat(t.type)
137
+ }, /*#__PURE__*/React.createElement("div", {
138
+ className: "toast-content"
139
+ }, /*#__PURE__*/React.createElement("svg", {
140
+ className: "toast-icon",
141
+ "aria-hidden": "true",
142
+ xmlns: "http://www.w3.org/2000/svg",
143
+ width: "28",
144
+ height: "28",
145
+ fill: "currentColor",
146
+ viewBox: "0 0 24 24"
147
+ }, /*#__PURE__*/React.createElement("path", {
148
+ fillRule: "evenodd",
149
+ d: "M2 12C2 6.477 6.477 2 12 2s10 4.477 10 10-4.477 10-10 10S2 17.523 2 12Zm13.707-1.293a1 1 0 0 0-1.414-1.414L11 12.586l-1.793-1.793a1 1 0 0 0-1.414 1.414l2.5 2.5a1 1 0 0 0 1.414 0l4-4Z",
150
+ clipRule: "evenodd"
151
+ })), /*#__PURE__*/React.createElement("p", null, t.message)), /*#__PURE__*/React.createElement("button", {
152
+ className: "toast-close",
153
+ "aria-label": "Close",
154
+ onClick: function onClick() {
155
+ return setToasts(function (prev) {
156
+ return prev.filter(function (x) {
157
+ return x.id !== t.id;
158
+ });
159
+ });
107
160
  }
108
- }, t.message);
161
+ }, /*#__PURE__*/React.createElement("svg", {
162
+ className: "close-icon",
163
+ "aria-hidden": "true",
164
+ xmlns: "http://www.w3.org/2000/svg",
165
+ width: "24",
166
+ height: "24",
167
+ fill: "none",
168
+ viewBox: "0 0 24 24"
169
+ }, /*#__PURE__*/React.createElement("path", {
170
+ stroke: "currentColor",
171
+ strokeLinecap: "round",
172
+ strokeLinejoin: "round",
173
+ strokeWidth: "2",
174
+ d: "M6 18 17.94 6M18 18 6.06 6"
175
+ }))));
109
176
  }));
110
177
  }
111
178
 
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/ToastContainer.jsx","../src/index.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\nimport { _register } from './index.js';\r\n\r\nexport default function ToastContainer() {\r\n const [toasts, setToasts] = useState([]);\r\n\r\n useEffect(() => {\r\n _register((toast) => {\r\n setToasts((prev) => [...prev, toast]);\r\n setTimeout(() => {\r\n setToasts((prev) => prev.slice(1));\r\n }, 3000);\r\n });\r\n }, []);\r\n\r\n return (\r\n <div style={{\r\n position: 'fixed',\r\n top: 20,\r\n left: '50%',\r\n transform: 'translateX(-50%)',\r\n zIndex: 9999,\r\n display: 'flex',\r\n flexDirection: 'column',\r\n gap: '8px',\r\n width: 'auto',\r\n maxWidth: '90vw',\r\n }}>\r\n {toasts.map((t, i) => (\r\n <div\r\n key={i}\r\n style={{\r\n padding: '10px 20px',\r\n borderRadius: 4,\r\n color: '#000',\r\n backgroundColor:\r\n t.type === 'success' ? '#d4edda' :\r\n t.type === 'error' ? '#f8d7da' :\r\n '#fff',\r\n boxShadow: '0 2px 6px rgba(0,0,0,0.15)',\r\n minWidth: 200,\r\n maxWidth: 400,\r\n }}\r\n >\r\n {t.message}\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n","import ToastContainer from './ToastContainer.jsx';\r\n\r\nlet addToast;\r\n\r\nconst toast = {\r\n show(message) {\r\n addToast && addToast({ message, type: 'default' });\r\n },\r\n success(message) {\r\n addToast && addToast({ message, type: 'success' });\r\n },\r\n error(message) {\r\n addToast && addToast({ message, type: 'error' });\r\n },\r\n};\r\n\r\nfunction _register(fn) {\r\n addToast = fn;\r\n}\r\n\r\nexport { ToastContainer, toast, _register };\r\n"],"names":["ToastContainer","_useState","useState","_useState2","_slicedToArray","toasts","setToasts","useEffect","_register","toast","prev","concat","_toConsumableArray","setTimeout","slice","React","createElement","style","position","top","left","transform","zIndex","display","flexDirection","gap","width","maxWidth","map","t","i","key","padding","borderRadius","color","backgroundColor","type","boxShadow","minWidth","message","addToast","show","success","error","fn"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/ToastContainer.jsx","../src/index.js"],"sourcesContent":["import React, { useEffect, useState } from 'react';\r\nimport { _register } from './index.js';\r\nimport './global.css';\r\n\r\nexport default function ToastContainer() {\r\n const [toasts, setToasts] = useState([]);\r\n\r\n useEffect(() => {\r\n _register((toast) => {\r\n const newToast = { ...toast, id: Date.now() + Math.random() };\r\n setToasts((prev) => [newToast, ...prev]);\r\n\r\n setTimeout(() => {\r\n setToasts((prev) => prev.filter((t) => t.id !== newToast.id));\r\n }, 3000);\r\n });\r\n }, []);\r\n\r\n return (\r\n <div className=\"toast-container\">\r\n {toasts.map((t) => (\r\n <div key={t.id} className={`toast toast-${t.type}`}>\r\n <div className=\"toast-content\">\r\n <svg className=\"toast-icon\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"28\" height=\"28\" fill=\"currentColor\" viewBox=\"0 0 24 24\">\r\n <path fillRule=\"evenodd\" d=\"M2 12C2 6.477 6.477 2 12 2s10 4.477 10 10-4.477 10-10 10S2 17.523 2 12Zm13.707-1.293a1 1 0 0 0-1.414-1.414L11 12.586l-1.793-1.793a1 1 0 0 0-1.414 1.414l2.5 2.5a1 1 0 0 0 1.414 0l4-4Z\" clipRule=\"evenodd\" />\r\n </svg>\r\n <p>{t.message}</p>\r\n </div>\r\n <button\r\n className=\"toast-close\"\r\n aria-label=\"Close\"\r\n onClick={() => setToasts((prev) => prev.filter((x) => x.id !== t.id))}\r\n >\r\n <svg className=\"close-icon\" aria-hidden=\"true\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <path stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M6 18 17.94 6M18 18 6.06 6\" />\r\n </svg>\r\n </button>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}","import ToastContainer from './ToastContainer.jsx';\r\n\r\nlet addToast;\r\n\r\nconst toast = {\r\n show(message) {\r\n addToast && addToast({ message, type: 'default' });\r\n },\r\n success(message) {\r\n addToast && addToast({ message, type: 'success' });\r\n },\r\n error(message) {\r\n addToast && addToast({ message, type: 'error' });\r\n },\r\n};\r\n\r\nfunction _register(fn) {\r\n addToast = fn;\r\n}\r\n\r\nexport { ToastContainer, toast, _register };"],"names":["ToastContainer","_useState","useState","_useState2","_slicedToArray","toasts","setToasts","useEffect","_register","toast","newToast","_objectSpread","id","Date","now","Math","random","prev","concat","_toConsumableArray","setTimeout","filter","t","React","createElement","className","map","key","type","xmlns","width","height","fill","viewBox","fillRule","d","clipRule","message","onClick","x","stroke","strokeLinecap","strokeLinejoin","strokeWidth","addToast","show","success","error","fn"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-toast-msg",
3
- "version": "0.1.0",
3
+ "version": "1.1.0",
4
4
  "description": "A lightweight, customizable React toast notification library with zero-config and fast setup.",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.js",
@@ -40,6 +40,7 @@
40
40
  "@babel/preset-react": "^7.27.1",
41
41
  "@rollup/plugin-babel": "^6.0.4",
42
42
  "@rollup/plugin-node-resolve": "^15.0.1",
43
- "rollup": "^3.22.0"
43
+ "rollup": "^3.22.0",
44
+ "rollup-plugin-postcss": "^4.0.2"
44
45
  }
45
46
  }