d9-toast 1.0.8 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Toast.js CHANGED
@@ -75,21 +75,21 @@ var Toast = function Toast(_ref) {
75
75
  // time to left...
76
76
  var timeToLeft = remaining.current - elapsed;
77
77
  // set shrink bar...
78
- setProgressWidth(timeToLeft / duration * 100);
78
+ setProgressWidth(Math.max(timeToLeft / duration * 100, 0));
79
79
  if (timeToLeft <= 0) {
80
80
  // stop timer...
81
81
  clearInterval(intervalRef.current);
82
82
  // remove toast.
83
83
  remove();
84
84
  }
85
- }, 100);
85
+ }, 50);
86
86
  };
87
87
 
88
88
  // for pause
89
89
  var pauseTimer = function pauseTimer() {
90
90
  if (isPaused) return;
91
91
  clearInterval(intervalRef.current);
92
- remaining.current = remaining.current - (Date.now() - start.current);
92
+ remaining.current -= Date.now() - start.current;
93
93
  setPaused(true);
94
94
  };
95
95
 
@@ -110,8 +110,8 @@ var Toast = function Toast(_ref) {
110
110
  loading: theme === "light" ? "bg-gray-950/20 text-gray-950" : "bg-gray-50/20 text-gray-50",
111
111
  submit: theme === "light" ? "bg-gray-600/20 text-gray-600" : "bg-gray-600/50 text-gray-200"
112
112
  };
113
- var keyframes = "\n @keyframes downToUp{\n from {\n transform: translateY(100%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n @keyframes upToDown{\n from {\n transform: translateY(-100%);\n opacity: 0;\n }\n to {\n transform: translateY(0);\n opacity: 1;\n }\n }\n ";
114
- var animation = "".concat(position.startsWith("top") && "upToDown" || position.startsWith("bottom") && "downToUp" || position.endsWith("top") && "upToDown" || position.endsWith("bottom") && "downToUp", " 0.3s ease-in");
113
+ var keyframes = "\n @keyframes downToUp{ from {transform: translateY(100%); opacity:0} to {transform:translateY(0); opacity:1} }\n @keyframes upToDown{ from {transform: translateY(-100%); opacity:0} to {transform:translateY(0); opacity:1} }\n ";
114
+ var animation = "".concat(position.includes("top") ? "upToDown" : "downToUp", " 0.3s ease-in");
115
115
  return /*#__PURE__*/_jsxs(_Fragment, {
116
116
  children: [/*#__PURE__*/_jsx("style", {
117
117
  children: keyframes
@@ -21,8 +21,6 @@ var ToastContext = /*#__PURE__*/createContext();
21
21
  export var useToast = function useToast() {
22
22
  return useContext(ToastContext);
23
23
  };
24
- var id = 0; // For unique toast id.
25
-
26
24
  export var ToastProvider = function ToastProvider(_ref) {
27
25
  var children = _ref.children,
28
26
  _ref$position = _ref.position,
@@ -32,40 +30,32 @@ export var ToastProvider = function ToastProvider(_ref) {
32
30
  toasts = _useState2[0],
33
31
  setToasts = _useState2[1];
34
32
 
35
- // Set position by class.
33
+ // Generate unique ID safely
34
+ var generateId = function generateId() {
35
+ return Date.now() + Math.random();
36
+ };
37
+
38
+ // Position classes
36
39
  var getPositionClasses = function getPositionClasses(position) {
37
- switch (position) {
38
- case "top-right":
39
- return "top-4 max-sm:right-0 right-4 flex-col";
40
- case "top-left":
41
- return "top-4 max-sm:left-0 left-4 flex-col";
42
- case "bottom-right":
43
- return "bottom-4 max-sm:right-0 right-4 flex-col-reverse";
44
- case "bottom-left":
45
- return "bottom-4 max-sm:left-0 left-4 flex-col-reverse";
46
- case "center":
47
- return "top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex-col";
48
- case "center-top":
49
- return "top-4 left-1/2 -translate-x-1/2 flex-col";
50
- case "center-bottom":
51
- return "bottom-4 left-1/2 -translate-x-1/2 flex-col-reverse";
52
- default:
53
- return "top-4 max-sm:right-0 right-4 flex-col";
54
- }
40
+ var classes = "fixed z-50 flex gap-3 ";
41
+ if (position.includes("top")) classes += "top-4 flex-col ";
42
+ if (position.includes("bottom")) classes += "bottom-4 flex-col-reverse ";
43
+ if (position.includes("right")) classes += "right-4 ";
44
+ if (position.includes("left")) classes += "left-4 ";
45
+ if (position === "center") classes += "top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 flex-col ";
46
+ if (position === "center-top") classes += "top-4 left-1/2 -translate-x-1/2 flex-col ";
47
+ if (position === "center-bottom") classes += "bottom-4 left-1/2 -translate-x-1/2 flex-col-reverse ";
48
+ return classes.trim();
55
49
  };
56
50
 
57
- // Show toast.
51
+ // Show toast
58
52
  var showToast = useCallback(function (toast) {
59
- id++;
60
- // Set new toast.
61
53
  var newToast = _objectSpread({
62
- id: id
54
+ id: generateId()
63
55
  }, toast);
64
- // Add new toast to Toast list.
65
56
  setToasts(function (prev) {
66
57
  return [].concat(_toConsumableArray(prev), [newToast]);
67
58
  });
68
- // Automatically remove toast.
69
59
  if (toast.duration !== 0) {
70
60
  setTimeout(function () {
71
61
  return removeToast(newToast.id);
@@ -73,7 +63,7 @@ export var ToastProvider = function ToastProvider(_ref) {
73
63
  }
74
64
  }, []);
75
65
 
76
- // Remove toast.
66
+ // Remove toast
77
67
  var removeToast = useCallback(function (id) {
78
68
  setToasts(function (prev) {
79
69
  return prev.filter(function (t) {
@@ -87,7 +77,7 @@ export var ToastProvider = function ToastProvider(_ref) {
87
77
  removeToast: removeToast
88
78
  },
89
79
  children: [children, /*#__PURE__*/_jsx("div", {
90
- className: "fixed z-50 flex gap-3 ".concat(getPositionClasses(position)),
80
+ className: getPositionClasses(position),
91
81
  children: toasts.map(function (toast) {
92
82
  return /*#__PURE__*/_jsx(Toast, _objectSpread(_objectSpread({}, toast), {}, {
93
83
  position: position,
@@ -1,22 +1,20 @@
1
1
  declare module "d9-toast" {
2
- import { ReactNode } from "react";
2
+ import React from "react";
3
3
 
4
- export interface Toast {
4
+ export type ToastType = "success" | "error" | "info" | "warning" | "loading" | "submit";
5
+
6
+ export interface ToastOptions {
5
7
  message: string;
6
- type?: "success" | "error" | "info" | "warning" | "loading" | "submit";
8
+ type?: ToastType;
7
9
  duration?: number;
8
10
  actions?: { text: string; callback?: (toast: { id: number }) => void }[];
9
- closable?: boolean;
10
- progress?: boolean;
11
11
  theme?: "light" | "dark";
12
+ progress?: boolean;
13
+ closable?: boolean;
12
14
  pauseOnHover?: boolean;
13
15
  pauseOnFocusLoss?: boolean;
14
16
  }
15
17
 
16
- export const ToastProvider: (props: { children: ReactNode; position?: string }) => JSX.Element;
17
-
18
- export const useToast: () => {
19
- showToast: (toast: Toast) => void;
20
- removeToast: (id: number) => void;
21
- };
18
+ export const ToastProvider: React.FC<{ children: React.ReactNode; position?: string }>;
19
+ export const useToast: () => { showToast: (toast: ToastOptions) => void; removeToast: (id: number) => void };
22
20
  }
package/dist/index.js CHANGED
@@ -1,2 +1,4 @@
1
1
  import React from "react";
2
- export { ToastProvider, useToast } from "./ToastContext";
2
+ import { ToastProvider, useToast } from "./ToastContext";
3
+ import "./toast.css";
4
+ export { ToastProvider, useToast };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "d9-toast",
3
- "version": "1.0.8",
3
+ "version": "1.0.10",
4
4
  "description": "Customizable toast notifications for React",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",