react-strawberry-toast 1.1.0 → 1.2.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/README.md CHANGED
@@ -44,25 +44,26 @@ function App() {
44
44
 
45
45
  ### <ToastContainer />
46
46
 
47
- | Option | Description | Type | Required |
47
+ | Option | Description | Type | Default |
48
48
  |:-----------|:-----------|:-----------|:-----------|
49
- | Position | Global toast's Position | top-left, top-center, top-right, bottom-left, bottom-center, bottom-right | false |
50
- | ContainerId | ToastContainer's unique id | String | false |
51
- | Reverse | Direction when toast appear | Boolean | false |
52
- | Gap | Gap Between toasts | Boolean | false |
49
+ | position | Global toast's Position | top-left, top-center, top-right, bottom-left, bottom-center, bottom-right | top-center |
50
+ | containerId | ToastContainer's unique id | String | |
51
+ | reverse | Direction when toast appear | Boolean | false |
52
+ | gap | Gap Between toasts | Number | 9 |
53
+ | pauseOnActivate | Pause Toast timer when blur events occurs | Boolean | true |
53
54
 
54
55
 
55
56
  ### toast
56
57
 
57
- | Option | Description | Type | Required |
58
+ | Option | Description | Type | Default |
58
59
  |:-----------|:-----------|:-----------|:-----------|
59
- | toastId | Toast's unique Id | String | false |
60
- | Position | Position per toast | top-left, top-center, top-right, bottom-left, bottom-center, bottom-right | false |
61
- | ContainerId | ID shown in the Toast Container Unique ID | String | false |
62
- | PauseOnHover | he Option that sets the timer to stop or not when a hover event occurs | Boolean | false |
63
- | ToastType | Toast Type | default, custom, success, error, laoding, warn | false |
64
- | TimeOut | Time for toast to disappear | Number | false |
65
- | RemoveTimeOut | Time for toast to remove In Toast List | Number | false |
60
+ | toastId | Toast's unique Id | String | |
61
+ | position | Position per toast | top-left, top-center, top-right, bottom-left, bottom-center, bottom-right | top-center |
62
+ | containerId | ID shown in the Toast Container Unique ID | String | |
63
+ | pauseOnHover | Option that sets the timer to stop or not when a hover event occurs | Boolean | true |
64
+ | toastType | Toast Type | default, custom, success, error, loading, warn | default |
65
+ | timeOut | Time for toast to disappear | Number | 3000 |
66
+ | removeTimeOut | Time for toast to remove In Toast List | Number | 200 |
66
67
 
67
68
  ## License
68
69
 
@@ -1,7 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
2
 
3
- type RequiredExcept<T, K extends keyof T> = Required<Omit<T, K>> & Pick<T, K>;
4
-
5
3
  type Position = 'bottom-left' | 'bottom-center' | 'bottom-right' | 'top-left' | 'top-center' | 'top-right';
6
4
  type ToastType = 'default' | 'custom' | 'success' | 'error' | 'loading' | 'warn';
7
5
  interface BaseOptions {
@@ -14,8 +12,8 @@ interface ToastBaseState {
14
12
  data: ReactNode;
15
13
  isVisible: boolean;
16
14
  createdAt: number;
17
- pausedAt?: number;
18
- updated?: boolean;
15
+ pausedAt: number | null;
16
+ updated: boolean | null;
19
17
  }
20
18
  interface Options extends BaseOptions {
21
19
  position?: Position;
@@ -24,6 +22,7 @@ interface Options extends BaseOptions {
24
22
  toastType?: ToastType;
25
23
  }
26
24
  interface ToastDataCallback {
25
+ toastId: ToastBaseState['toastId'];
27
26
  close: () => void;
28
27
  immediatelyClose: () => void;
29
28
  isVisible: boolean;
@@ -31,7 +30,7 @@ interface ToastDataCallback {
31
30
  }
32
31
  type ToastState = ToastBaseState & BaseOptions;
33
32
  type ToastDataWithCallback = (props: ToastDataCallback) => ReactNode;
34
- type NonHeadlessToastState = RequiredExcept<Options, 'containerId' | 'position'> & Omit<ToastState, 'data'> & {
33
+ type NonHeadlessToastState = Required<Options> & Omit<ToastState, 'data'> & {
35
34
  data: ToastDataWithCallback | ReactNode;
36
35
  };
37
36
 
@@ -48,6 +47,7 @@ declare const toast: {
48
47
  toastType: NonHeadlessToastState["toastType"];
49
48
  }) | undefined) => void;
50
49
  remove: (toastId: ToastState["toastId"], timeOut?: number) => void;
50
+ allClear: () => void;
51
51
  };
52
52
 
53
53
  export { type BaseOptions, type ToastState, toast, useToasts };
@@ -1,7 +1,5 @@
1
1
  import { ReactNode } from 'react';
2
2
 
3
- type RequiredExcept<T, K extends keyof T> = Required<Omit<T, K>> & Pick<T, K>;
4
-
5
3
  type Position = 'bottom-left' | 'bottom-center' | 'bottom-right' | 'top-left' | 'top-center' | 'top-right';
6
4
  type ToastType = 'default' | 'custom' | 'success' | 'error' | 'loading' | 'warn';
7
5
  interface BaseOptions {
@@ -14,8 +12,8 @@ interface ToastBaseState {
14
12
  data: ReactNode;
15
13
  isVisible: boolean;
16
14
  createdAt: number;
17
- pausedAt?: number;
18
- updated?: boolean;
15
+ pausedAt: number | null;
16
+ updated: boolean | null;
19
17
  }
20
18
  interface Options extends BaseOptions {
21
19
  position?: Position;
@@ -24,6 +22,7 @@ interface Options extends BaseOptions {
24
22
  toastType?: ToastType;
25
23
  }
26
24
  interface ToastDataCallback {
25
+ toastId: ToastBaseState['toastId'];
27
26
  close: () => void;
28
27
  immediatelyClose: () => void;
29
28
  isVisible: boolean;
@@ -31,7 +30,7 @@ interface ToastDataCallback {
31
30
  }
32
31
  type ToastState = ToastBaseState & BaseOptions;
33
32
  type ToastDataWithCallback = (props: ToastDataCallback) => ReactNode;
34
- type NonHeadlessToastState = RequiredExcept<Options, 'containerId' | 'position'> & Omit<ToastState, 'data'> & {
33
+ type NonHeadlessToastState = Required<Options> & Omit<ToastState, 'data'> & {
35
34
  data: ToastDataWithCallback | ReactNode;
36
35
  };
37
36
 
@@ -48,6 +47,7 @@ declare const toast: {
48
47
  toastType: NonHeadlessToastState["toastType"];
49
48
  }) | undefined) => void;
50
49
  remove: (toastId: ToastState["toastId"], timeOut?: number) => void;
50
+ allClear: () => void;
51
51
  };
52
52
 
53
53
  export { type BaseOptions, type ToastState, toast, useToasts };
package/dist/headless.js CHANGED
@@ -1 +1 @@
1
- "use strict";var I=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var _=Object.prototype.hasOwnProperty;var g=(t,s)=>{for(var r in s)I(t,r,{get:s[r],enumerable:!0})},w=(t,s,r,p)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of x(s))!_.call(t,n)&&n!==r&&I(t,n,{get:()=>s[n],enumerable:!(p=b(s,n))||p.enumerable});return t};var U=t=>w(I({},"__esModule",{value:!0}),t);var H={};g(H,{toast:()=>T,useToasts:()=>R});module.exports=U(H);var h=require("react");var y=()=>{let t=0;return()=>String(t++)};var A=class{state=[];listeners=new Set;activatedToasts=new Set;toastTimers=new Map;constructor(){}subscribe(s){return this.listeners.add(s),()=>{this.listeners.delete(s)}}setState(s){this.state=typeof s=="function"?s(this.state):s,this.listeners.forEach(r=>r())}getSnapShot(){return this.state}};var M=t=>{let s=e=>{let a=t.toastTimers.get(e);clearTimeout(a),t.toastTimers.delete(e)},r=e=>{t.activatedToasts.add(e)},p=e=>t.activatedToasts.has(e),n=(e,a=200)=>{p(e)&&(t.activatedToasts.delete(e),setTimeout(()=>{t.state=t.state.filter(o=>o.toastId!==e),t.setState([...t.state])},a),s(e))},d=(e,a,o)=>{t.state=t.state.map(m=>m.toastId===e?{...m,...o,updated:!0,data:a}:m),t.setState([...t.state])},S=e=>{let a=new Date().getTime();t.state=t.state.map(o=>o.toastId===e?{...o,pausedAt:a}:o),s(e),t.setState([...t.state])},l=(e,a)=>{let o=setTimeout(()=>{var O;t.state=t.state.map(u=>u.toastId===e?{...u,isVisible:!1}:u),t.setState([...t.state]);let m=(O=t.state.find(u=>u.toastId===e))==null?void 0:O.removeTimeOut;n(e,m)},a>2147483647?2147483647:a);t.toastTimers.set(e,o)};return{setActive:r,isActive:p,disappear:l,resume:e=>{if(t.toastTimers.has(e))return;let a=t.state.find(m=>m.toastId===e);if(!a)return;let o=a.createdAt+(a.timeOut||3e3)-(a.pausedAt||0);l(e,o)},pause:S,replace:d,remove:n}};var i=new A,P=y(),D=()=>(t,s={})=>{let{timeOut:r=3e3,removeTimeOut:p=200,toastId:n}=s,d=n||P();if(T.isActive(d))throw new Error("A duplicate custom ID is not available.");let S=new Date().getTime(),l={...s,timeOut:r>2147483647?2147483647:r,toastId:d,data:t,createdAt:S,removeTimeOut:p,isVisible:!0};return i.state.push(l),i.setState([...i.state]),d},T=(t,s={})=>D()(t,s),c=M(i);T.setActive=c.setActive;T.isActive=c.isActive;T.disappear=c.disappear;T.resume=c.resume;T.pause=c.pause;T.replace=c.replace;T.remove=c.remove;var R=()=>(0,h.useSyncExternalStore)(i.subscribe.bind(i),i.getSnapShot.bind(i),i.getSnapShot.bind(i));
1
+ "use strict";var I=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var w=(t,s)=>{for(var r in s)I(t,r,{get:s[r],enumerable:!0})},U=(t,s,r,m)=>{if(s&&typeof s=="object"||typeof s=="function")for(let T of _(s))!g.call(t,T)&&T!==r&&I(t,T,{get:()=>s[T],enumerable:!(m=x(s,T))||m.enumerable});return t};var P=t=>U(I({},"__esModule",{value:!0}),t);var L={};w(L,{toast:()=>n,useToasts:()=>H});module.exports=P(L);var b=require("react");var M=()=>{let t=0;return()=>String(t++)};var f=class{state=[];listeners=new Set;activatedToasts=new Set;toastTimers=new Map;constructor(){}subscribe(s){return this.listeners.add(s),()=>{this.listeners.delete(s)}}setState(s){this.state=typeof s=="function"?s(this.state):s,this.listeners.forEach(r=>r())}getSnapShot(){return this.state}};var h=t=>{let s=e=>{let a=t.toastTimers.get(e);clearTimeout(a),t.toastTimers.delete(e)},r=e=>{t.activatedToasts.add(e)},m=e=>t.activatedToasts.has(e),T=(e,a=200)=>{m(e)&&(t.activatedToasts.delete(e),setTimeout(()=>{t.state=t.state.filter(o=>o.toastId!==e),t.setState([...t.state])},a),s(e))},c=()=>{t.setState([])},A=(e,a,o)=>{t.state=t.state.map(d=>d.toastId===e?{...d,...o,updated:!0,data:a}:d),t.setState([...t.state])},S=e=>{let a=new Date().getTime();t.state=t.state.map(o=>o.toastId===e?{...o,pausedAt:a}:o),s(e),t.setState([...t.state])},O=(e,a)=>{let o=setTimeout(()=>{var y;t.state=t.state.map(u=>u.toastId===e?{...u,isVisible:!1}:u),t.setState([...t.state]);let d=(y=t.state.find(u=>u.toastId===e))==null?void 0:y.removeTimeOut;T(e,d)},a>2147483647?2147483647:a);t.toastTimers.set(e,o)};return{setActive:r,isActive:m,disappear:O,resume:e=>{if(t.toastTimers.has(e))return;let a=t.state.find(d=>d.toastId===e);if(!a)return;let o=a.createdAt+(a.timeOut||3e3)-(a.pausedAt||0);O(e,o)},pause:S,replace:A,remove:T,allClear:c}};var i=new f,D=M(),R=()=>(t,s={})=>{let{timeOut:r=3e3,removeTimeOut:m=200,toastId:T}=s,c=T||D();if(n.isActive(c))throw new Error("A duplicate custom ID is not available.");let A=new Date().getTime(),S={timeOut:r>2147483647?2147483647:r,toastId:c,data:t,pausedAt:null,updated:null,createdAt:A,removeTimeOut:m,isVisible:!0};return i.state.push(S),i.setState([...i.state]),c},n=(t,s={})=>R()(t,s),p=h(i);n.setActive=p.setActive;n.isActive=p.isActive;n.disappear=p.disappear;n.resume=p.resume;n.pause=p.pause;n.replace=p.replace;n.remove=p.remove;n.allClear=p.allClear;var H=()=>(0,b.useSyncExternalStore)(i.subscribe.bind(i),i.getSnapShot.bind(i),i.getSnapShot.bind(i));
package/dist/headless.mjs CHANGED
@@ -1 +1 @@
1
- import{useSyncExternalStore as b}from"react";var O=()=>{let t=0;return()=>String(t++)};var A=class{state=[];listeners=new Set;activatedToasts=new Set;toastTimers=new Map;constructor(){}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}setState(a){this.state=typeof a=="function"?a(this.state):a,this.listeners.forEach(p=>p())}getSnapShot(){return this.state}};var y=t=>{let a=e=>{let s=t.toastTimers.get(e);clearTimeout(s),t.toastTimers.delete(e)},p=e=>{t.activatedToasts.add(e)},u=e=>t.activatedToasts.has(e),f=(e,s=200)=>{u(e)&&(t.activatedToasts.delete(e),setTimeout(()=>{t.state=t.state.filter(r=>r.toastId!==e),t.setState([...t.state])},s),a(e))},m=(e,s,r)=>{t.state=t.state.map(n=>n.toastId===e?{...n,...r,updated:!0,data:s}:n),t.setState([...t.state])},S=e=>{let s=new Date().getTime();t.state=t.state.map(r=>r.toastId===e?{...r,pausedAt:s}:r),a(e),t.setState([...t.state])},l=(e,s)=>{let r=setTimeout(()=>{var E;t.state=t.state.map(c=>c.toastId===e?{...c,isVisible:!1}:c),t.setState([...t.state]);let n=(E=t.state.find(c=>c.toastId===e))==null?void 0:E.removeTimeOut;f(e,n)},s>2147483647?2147483647:s);t.toastTimers.set(e,r)};return{setActive:p,isActive:u,disappear:l,resume:e=>{if(t.toastTimers.has(e))return;let s=t.state.find(n=>n.toastId===e);if(!s)return;let r=s.createdAt+(s.timeOut||3e3)-(s.pausedAt||0);l(e,r)},pause:S,replace:m,remove:f}};var o=new A,M=O(),h=()=>(t,a={})=>{let{timeOut:p=3e3,removeTimeOut:u=200,toastId:f}=a,m=f||M();if(i.isActive(m))throw new Error("A duplicate custom ID is not available.");let S=new Date().getTime(),l={...a,timeOut:p>2147483647?2147483647:p,toastId:m,data:t,createdAt:S,removeTimeOut:u,isVisible:!0};return o.state.push(l),o.setState([...o.state]),m},i=(t,a={})=>h()(t,a),T=y(o);i.setActive=T.setActive;i.isActive=T.isActive;i.disappear=T.disappear;i.resume=T.resume;i.pause=T.pause;i.replace=T.replace;i.remove=T.remove;var X=()=>b(o.subscribe.bind(o),o.getSnapShot.bind(o),o.getSnapShot.bind(o));export{i as toast,X as useToasts};
1
+ import{useSyncExternalStore as x}from"react";var y=()=>{let t=0;return()=>String(t++)};var f=class{state=[];listeners=new Set;activatedToasts=new Set;toastTimers=new Map;constructor(){}subscribe(a){return this.listeners.add(a),()=>{this.listeners.delete(a)}}setState(a){this.state=typeof a=="function"?a(this.state):a,this.listeners.forEach(p=>p())}getSnapShot(){return this.state}};var M=t=>{let a=e=>{let s=t.toastTimers.get(e);clearTimeout(s),t.toastTimers.delete(e)},p=e=>{t.activatedToasts.add(e)},u=e=>t.activatedToasts.has(e),l=(e,s=200)=>{u(e)&&(t.activatedToasts.delete(e),setTimeout(()=>{t.state=t.state.filter(r=>r.toastId!==e),t.setState([...t.state])},s),a(e))},m=()=>{t.setState([])},A=(e,s,r)=>{t.state=t.state.map(T=>T.toastId===e?{...T,...r,updated:!0,data:s}:T),t.setState([...t.state])},S=e=>{let s=new Date().getTime();t.state=t.state.map(r=>r.toastId===e?{...r,pausedAt:s}:r),a(e),t.setState([...t.state])},E=(e,s)=>{let r=setTimeout(()=>{var O;t.state=t.state.map(d=>d.toastId===e?{...d,isVisible:!1}:d),t.setState([...t.state]);let T=(O=t.state.find(d=>d.toastId===e))==null?void 0:O.removeTimeOut;l(e,T)},s>2147483647?2147483647:s);t.toastTimers.set(e,r)};return{setActive:p,isActive:u,disappear:E,resume:e=>{if(t.toastTimers.has(e))return;let s=t.state.find(T=>T.toastId===e);if(!s)return;let r=s.createdAt+(s.timeOut||3e3)-(s.pausedAt||0);E(e,r)},pause:S,replace:A,remove:l,allClear:m}};var o=new f,h=y(),b=()=>(t,a={})=>{let{timeOut:p=3e3,removeTimeOut:u=200,toastId:l}=a,m=l||h();if(i.isActive(m))throw new Error("A duplicate custom ID is not available.");let A=new Date().getTime(),S={timeOut:p>2147483647?2147483647:p,toastId:m,data:t,pausedAt:null,updated:null,createdAt:A,removeTimeOut:u,isVisible:!0};return o.state.push(S),o.setState([...o.state]),m},i=(t,a={})=>b()(t,a),n=M(o);i.setActive=n.setActive;i.isActive=n.isActive;i.disappear=n.disappear;i.resume=n.resume;i.pause=n.pause;i.replace=n.replace;i.remove=n.remove;i.allClear=n.allClear;var X=()=>x(o.subscribe.bind(o),o.getSnapShot.bind(o),o.getSnapShot.bind(o));export{i as toast,X as useToasts};
package/dist/index.d.mts CHANGED
@@ -1,7 +1,5 @@
1
1
  import React, { ReactNode } from 'react';
2
2
 
3
- type RequiredExcept<T, K extends keyof T> = Required<Omit<T, K>> & Pick<T, K>;
4
-
5
3
  type Position = 'bottom-left' | 'bottom-center' | 'bottom-right' | 'top-left' | 'top-center' | 'top-right';
6
4
  type ToastType = 'default' | 'custom' | 'success' | 'error' | 'loading' | 'warn';
7
5
  interface BaseOptions {
@@ -14,8 +12,8 @@ interface ToastBaseState {
14
12
  data: ReactNode;
15
13
  isVisible: boolean;
16
14
  createdAt: number;
17
- pausedAt?: number;
18
- updated?: boolean;
15
+ pausedAt: number | null;
16
+ updated: boolean | null;
19
17
  }
20
18
  interface Options extends BaseOptions {
21
19
  position?: Position;
@@ -24,6 +22,7 @@ interface Options extends BaseOptions {
24
22
  toastType?: ToastType;
25
23
  }
26
24
  interface ToastDataCallback {
25
+ toastId: ToastBaseState['toastId'];
27
26
  close: () => void;
28
27
  immediatelyClose: () => void;
29
28
  isVisible: boolean;
@@ -31,7 +30,7 @@ interface ToastDataCallback {
31
30
  }
32
31
  type ToastState = ToastBaseState & BaseOptions;
33
32
  type ToastDataWithCallback = (props: ToastDataCallback) => ReactNode;
34
- type NonHeadlessToastState = RequiredExcept<Options, 'containerId' | 'position'> & Omit<ToastState, 'data'> & {
33
+ type NonHeadlessToastState = Required<Options> & Omit<ToastState, 'data'> & {
35
34
  data: ToastDataWithCallback | ReactNode;
36
35
  };
37
36
 
@@ -62,6 +61,7 @@ declare const toast: {
62
61
  toastType: NonHeadlessToastState["toastType"];
63
62
  }) | undefined) => void;
64
63
  remove: (toastId: ToastState["toastId"], timeOut?: number) => void;
64
+ allClear: () => void;
65
65
  success: (data: ReactNode, options?: Options) => ToastState["toastId"];
66
66
  error: (data: ReactNode, options?: Options) => ToastState["toastId"];
67
67
  warn: (data: ReactNode, options?: Options) => ToastState["toastId"];
@@ -79,7 +79,10 @@ interface ToastContainerProps {
79
79
  containerId?: string;
80
80
  reverse?: boolean;
81
81
  gap?: number;
82
+ pauseOnActivate?: boolean;
82
83
  }
83
- declare function ToastContainer({ position: globalPosition, containerId, gap, reverse, }: ToastContainerProps): React.JSX.Element;
84
+ declare function ToastContainer({ position: globalPosition, containerId, gap, reverse, pauseOnActivate, }: ToastContainerProps): React.JSX.Element;
85
+
86
+ declare const useToasts: () => Array<NonHeadlessToastState>;
84
87
 
85
- export { type BaseOptions, type NonHeadlessToastState, type Options, type Position, type ToastBaseState, ToastContainer, type ToastDataWithCallback, type ToastState, type ToastType, toast, toastStore };
88
+ export { type BaseOptions, type NonHeadlessToastState, type Options, type Position, type ToastBaseState, ToastContainer, type ToastDataWithCallback, type ToastState, type ToastType, toast, toastStore, useToasts };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  import React, { ReactNode } from 'react';
2
2
 
3
- type RequiredExcept<T, K extends keyof T> = Required<Omit<T, K>> & Pick<T, K>;
4
-
5
3
  type Position = 'bottom-left' | 'bottom-center' | 'bottom-right' | 'top-left' | 'top-center' | 'top-right';
6
4
  type ToastType = 'default' | 'custom' | 'success' | 'error' | 'loading' | 'warn';
7
5
  interface BaseOptions {
@@ -14,8 +12,8 @@ interface ToastBaseState {
14
12
  data: ReactNode;
15
13
  isVisible: boolean;
16
14
  createdAt: number;
17
- pausedAt?: number;
18
- updated?: boolean;
15
+ pausedAt: number | null;
16
+ updated: boolean | null;
19
17
  }
20
18
  interface Options extends BaseOptions {
21
19
  position?: Position;
@@ -24,6 +22,7 @@ interface Options extends BaseOptions {
24
22
  toastType?: ToastType;
25
23
  }
26
24
  interface ToastDataCallback {
25
+ toastId: ToastBaseState['toastId'];
27
26
  close: () => void;
28
27
  immediatelyClose: () => void;
29
28
  isVisible: boolean;
@@ -31,7 +30,7 @@ interface ToastDataCallback {
31
30
  }
32
31
  type ToastState = ToastBaseState & BaseOptions;
33
32
  type ToastDataWithCallback = (props: ToastDataCallback) => ReactNode;
34
- type NonHeadlessToastState = RequiredExcept<Options, 'containerId' | 'position'> & Omit<ToastState, 'data'> & {
33
+ type NonHeadlessToastState = Required<Options> & Omit<ToastState, 'data'> & {
35
34
  data: ToastDataWithCallback | ReactNode;
36
35
  };
37
36
 
@@ -62,6 +61,7 @@ declare const toast: {
62
61
  toastType: NonHeadlessToastState["toastType"];
63
62
  }) | undefined) => void;
64
63
  remove: (toastId: ToastState["toastId"], timeOut?: number) => void;
64
+ allClear: () => void;
65
65
  success: (data: ReactNode, options?: Options) => ToastState["toastId"];
66
66
  error: (data: ReactNode, options?: Options) => ToastState["toastId"];
67
67
  warn: (data: ReactNode, options?: Options) => ToastState["toastId"];
@@ -79,7 +79,10 @@ interface ToastContainerProps {
79
79
  containerId?: string;
80
80
  reverse?: boolean;
81
81
  gap?: number;
82
+ pauseOnActivate?: boolean;
82
83
  }
83
- declare function ToastContainer({ position: globalPosition, containerId, gap, reverse, }: ToastContainerProps): React.JSX.Element;
84
+ declare function ToastContainer({ position: globalPosition, containerId, gap, reverse, pauseOnActivate, }: ToastContainerProps): React.JSX.Element;
85
+
86
+ declare const useToasts: () => Array<NonHeadlessToastState>;
84
87
 
85
- export { type BaseOptions, type NonHeadlessToastState, type Options, type Position, type ToastBaseState, ToastContainer, type ToastDataWithCallback, type ToastState, type ToastType, toast, toastStore };
88
+ export { type BaseOptions, type NonHeadlessToastState, type Options, type Position, type ToastBaseState, ToastContainer, type ToastDataWithCallback, type ToastState, type ToastType, toast, toastStore, useToasts };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- "use strict";var $=Object.create;var _=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var j=Object.getOwnPropertyNames;var F=Object.getPrototypeOf,G=Object.prototype.hasOwnProperty;var q=(t,e)=>{for(var o in e)_(t,o,{get:e[o],enumerable:!0})},P=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of j(e))!G.call(t,n)&&n!==o&&_(t,n,{get:()=>e[n],enumerable:!(i=B(e,n))||i.enumerable});return t};var M=(t,e,o)=>(o=t!=null?$(F(t)):{},P(e||!t||!t.__esModule?_(o,"default",{value:t,enumerable:!0}):o,t)),J=t=>P(_({},"__esModule",{value:!0}),t);var ot={};q(ot,{ToastContainer:()=>et,toast:()=>r,toastStore:()=>l});module.exports=J(ot);var H=()=>{let t=0;return()=>String(t++)};var A=class{state=[];listeners=new Set;activatedToasts=new Set;toastTimers=new Map;constructor(){}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}setState(e){this.state=typeof e=="function"?e(this.state):e,this.listeners.forEach(o=>o())}getSnapShot(){return this.state}};var g="react-strawberry-toast";var z=t=>{let e=a=>{let d=t.toastTimers.get(a);clearTimeout(d),t.toastTimers.delete(a)},o=a=>{t.activatedToasts.add(a)},i=a=>t.activatedToasts.has(a),n=(a,d=200)=>{i(a)&&(t.activatedToasts.delete(a),setTimeout(()=>{t.state=t.state.filter(T=>T.toastId!==a),t.setState([...t.state])},d),e(a))},f=(a,d,T)=>{t.state=t.state.map(b=>b.toastId===a?{...b,...T,updated:!0,data:d}:b),t.setState([...t.state])},s=a=>{let d=new Date().getTime();t.state=t.state.map(T=>T.toastId===a?{...T,pausedAt:d}:T),e(a),t.setState([...t.state])},m=(a,d)=>{let T=setTimeout(()=>{var W;t.state=t.state.map(E=>E.toastId===a?{...E,isVisible:!1}:E),t.setState([...t.state]);let b=(W=t.state.find(E=>E.toastId===a))==null?void 0:W.removeTimeOut;n(a,b)},d>2147483647?2147483647:d);t.toastTimers.set(a,T)};return{setActive:o,isActive:i,disappear:m,resume:a=>{if(t.toastTimers.has(a))return;let d=t.state.find(b=>b.toastId===a);if(!d)return;let T=d.createdAt+(d.timeOut||3e3)-(d.pausedAt||0);m(a,T)},pause:s,replace:f,remove:n}};var l=new A,K=H(),x=(t="default")=>(e,o={})=>{let{timeOut:i=3e3,removeTimeOut:n=200,pauseOnHover:f=!0,toastId:s}=o,m=s||K();if(r.isActive(m))throw new Error("A duplicate custom ID is not available.");let v=new Date().getTime(),a={...o,timeOut:i>2147483647?2147483647:i,toastId:m,data:e,createdAt:v,toastType:t,pauseOnHover:f,removeTimeOut:n,isVisible:!0};return l.state.push(a),l.setState([...l.state]),m},r=(t,e={})=>x()(t,e),I=z(l);r.setActive=I.setActive;r.isActive=I.isActive;r.disappear=I.disappear;r.resume=I.resume;r.pause=I.pause;r.replace=I.replace;r.remove=I.remove;r.success=x("success");r.error=x("error");r.warn=x("warn");r.loading=x("loading");r.custom=x("custom");r.promise=(t,e,o={})=>{let{loading:i,success:n,error:f}=e,s=r.loading(i,{...o,timeOut:2147483647});t.then(m=>{r.replace(s,typeof n=="function"?n(m):n,{...o,timeOut:o.timeOut||3e3,toastType:"success"})}).catch(m=>{r.replace(s,typeof f=="function"?f(m):f,{...o,timeOut:o.timeOut||3e3,toastType:"error"})})};var y=M(require("react")),X=require("react");var p=M(require("react"));var L=require("react");function O({condition:t,children:e}){let o=L.Children.toArray(e);if(o.length>2)throw new Error("The number of children exceeds two.");return o.find(i=>t?i.key===".0":i.key===".1")}function k({children:t}){return t}function C({children:t}){return t}var V=({isVisible:t,position:e})=>t?/top/i.test(e)?`${g}__fade-in`:`${g}__fade-in-reverse`:/bottom/i.test(e)?`${g}__fade-out-reverse`:`${g}__fade-out`;var u=M(require("react"));function Q(){return u.default.createElement("svg",{stroke:"none",fill:"none",strokeWidth:"2",viewBox:"0 0 24 24",strokeLinecap:"round",strokeLinejoin:"round",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},u.default.createElement("path",{stroke:"none",d:"M0 0h24v24H0z"}),u.default.createElement("path",{d:"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z",strokeWidth:"0",fill:"#1ab173"}))}function Z(){return u.default.createElement("svg",{stroke:"none",fill:"#eb2639",strokeWidth:"2",viewBox:"0 0 24 24",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},u.default.createElement("path",{d:"M11.953 2C6.465 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.493 2 11.953 2zM13 17h-2v-2h2v2zm0-4h-2V7h2v6z"}))}function R(){return u.default.createElement("svg",{stroke:"none",fill:"#fcba03",strokeWidth:"0",viewBox:"0 0 1024 1024",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},u.default.createElement("path",{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 0 1 0-96 48.01 48.01 0 0 1 0 96z"}))}var w={success:Q,error:Z,loading:()=>u.default.createElement("div",{className:`${g}__loading`}),warn:R};function U({status:t,children:e}){let o=t==="custom"||t==="default"?null:w[t];return u.default.createElement("div",{style:{boxSizing:"border-box",backgroundColor:"white",padding:"12px 14px 12px 12px",display:"flex",alignItems:"center",gap:5,borderRadius:8,boxShadow:"2px 4px 10px rgba(0, 0, 0, 0.1)"}},o&&u.default.createElement("span",{style:{minWidth:20,maxWidth:20}},u.default.createElement(o,null)),e)}function D({toastProps:t,...e}){let o=V({isVisible:t.isVisible,position:t.position}),i=typeof t.data=="function"?t.data({close:()=>r.disappear(t.toastId,0),immediatelyClose:()=>{r.disappear(t.toastId,0),r.remove(t.toastId,0)},icons:{success:p.default.createElement(w.success,null),error:p.default.createElement(w.error,null),warn:p.default.createElement(w.warn,null),loading:p.default.createElement(w.loading,null)},isVisible:t.isVisible}):t.data,n=()=>{t.pauseOnHover&&r.pause(t.toastId)},f=()=>{t.pauseOnHover&&r.resume(t.toastId)};return(0,p.useEffect)(()=>{r.isActive(t.toastId)||(r.setActive(t.toastId),r.disappear(t.toastId,t.timeOut))},[t.toastId]),(0,p.useEffect)(()=>{if(t.updated!==void 0){let s=t.timeOut>=2147483647?3e3:t.timeOut;r.disappear(t.toastId,s)}},[t.updated]),p.default.createElement("div",{role:"alert","data-testid":`container-${t.containerId}`,className:t.toastType==="custom"?"":o,onMouseEnter:n,onMouseLeave:f,...e},p.default.createElement(O,{condition:t.toastType!=="custom"},p.default.createElement(k,null,p.default.createElement(U,{status:t.toastType},i)),p.default.createElement(C,null,i)))}var Y=({position:t,reverse:e=!1})=>/top/i.test(t)?e?"column-reverse":"column":/bottom/i.test(t)?e?"column":"column-reverse":"column";var c=16,tt={"top-left":{top:c,left:c},"top-center":{top:c,left:"50%",transform:"translateX(-50%)"},"top-right":{top:c,right:c},"bottom-left":{bottom:c,left:c},"bottom-center":{bottom:c,left:"50%",transform:"translateX(-50%)"},"bottom-right":{bottom:c,right:c}};function et({position:t="top-center",containerId:e="",gap:o=9,reverse:i=!1}){let n=(0,X.useSyncExternalStore)(l.subscribe.bind(l),l.getSnapShot.bind(l),l.getSnapShot.bind(l)),f=n.filter(s=>s.containerId===void 0).reduce((s,m)=>{let v=m.position||t;return m.position=v,s[v]=s[v]||[],s[v].push(m),s},{});return y.default.createElement(O,{condition:!!e},y.default.createElement(k,null,y.default.createElement("div",{style:{position:"absolute",zIndex:9999,pointerEvents:"none"}},y.default.createElement("div",{style:{pointerEvents:"auto",display:"flex",flexDirection:i?"column-reverse":"column",gap:o}},n.filter(s=>s.containerId===e).map(s=>y.default.createElement(D,{key:s.toastId,toastProps:s,style:{display:"flex"}}))))),y.default.createElement(C,null,y.default.createElement("div",{style:{position:"fixed",zIndex:9999,top:c,left:c,right:c,bottom:c,pointerEvents:"none"}},Object.entries(f).map(([s,m])=>{let v=tt[s],a=Y({position:s,reverse:i});return y.default.createElement("div",{key:s,"data-testid":s,style:{pointerEvents:"auto",position:"fixed",display:"flex",flexDirection:a,gap:o,...v}},m.map(d=>y.default.createElement(D,{key:d.toastId,toastProps:d,style:{display:"flex",justifyContent:"center"}})))}))))}
2
+ "use strict";var G=Object.create;var P=Object.defineProperty;var q=Object.getOwnPropertyDescriptor;var J=Object.getOwnPropertyNames;var K=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var Z=(t,e)=>{for(var r in e)P(t,r,{get:e[r],enumerable:!0})},V=(t,e,r,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let p of J(e))!Q.call(t,p)&&p!==r&&P(t,p,{get:()=>e[p],enumerable:!(a=q(e,p))||a.enumerable});return t};var H=(t,e,r)=>(r=t!=null?G(K(t)):{},V(e||!t||!t.__esModule?P(r,"default",{value:t,enumerable:!0}):r,t)),R=t=>V(P({},"__esModule",{value:!0}),t);var nt={};Z(nt,{ToastContainer:()=>at,toast:()=>s,toastStore:()=>f,useToasts:()=>W});module.exports=R(nt);var Y=()=>{let t=0;return()=>String(t++)};var k=class{state=[];listeners=new Set;activatedToasts=new Set;toastTimers=new Map;constructor(){}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}setState(e){this.state=typeof e=="function"?e(this.state):e,this.listeners.forEach(r=>r())}getSnapShot(){return this.state}};var x="react-strawberry-toast";var X=t=>{let e=o=>{let i=t.toastTimers.get(o);clearTimeout(i),t.toastTimers.delete(o)},r=o=>{t.activatedToasts.add(o)},a=o=>t.activatedToasts.has(o),p=(o,i=200)=>{a(o)&&(t.activatedToasts.delete(o),setTimeout(()=>{t.state=t.state.filter(u=>u.toastId!==o),t.setState([...t.state])},i),e(o))},l=()=>{t.setState([])},y=(o,i,u)=>{t.state=t.state.map(v=>v.toastId===o?{...v,...u,updated:!0,data:i}:v),t.setState([...t.state])},n=o=>{let i=new Date().getTime();t.state=t.state.map(u=>u.toastId===o?{...u,pausedAt:i}:u),e(o),t.setState([...t.state])},d=(o,i)=>{let u=setTimeout(()=>{var _;t.state=t.state.map(S=>S.toastId===o?{...S,isVisible:!1}:S),t.setState([...t.state]);let v=(_=t.state.find(S=>S.toastId===o))==null?void 0:_.removeTimeOut;p(o,v)},i>2147483647?2147483647:i);t.toastTimers.set(o,u)};return{setActive:r,isActive:a,disappear:d,resume:o=>{if(t.toastTimers.has(o))return;let i=t.state.find(v=>v.toastId===o);if(!i)return;let u=i.createdAt+(i.timeOut||3e3)-(i.pausedAt||0);d(o,u)},pause:n,replace:y,remove:p,allClear:l}};var f=new k,tt=Y(),I=(t="default")=>(e,r={})=>{let{timeOut:a=3e3,removeTimeOut:p=200,pauseOnHover:l=!0,toastId:y}=r,n=y||tt();if(s.isActive(n))throw new Error("A duplicate custom ID is not available.");let d=new Date().getTime(),T={updated:null,pausedAt:null,containerId:r.containerId||"",position:r.position||"top-center",timeOut:a>2147483647?2147483647:a,toastId:n,data:e,createdAt:d,toastType:t,pauseOnHover:l,removeTimeOut:p,isVisible:!0};return f.state.push(T),f.setState([...f.state]),n},s=(t,e={})=>I()(t,e),g=X(f);s.setActive=g.setActive;s.isActive=g.isActive;s.disappear=g.disappear;s.resume=g.resume;s.pause=g.pause;s.replace=g.replace;s.remove=g.remove;s.allClear=g.allClear;s.success=I("success");s.error=I("error");s.warn=I("warn");s.loading=I("loading");s.custom=I("custom");s.promise=(t,e,r={})=>{let{loading:a,success:p,error:l}=e,y=s.loading(a,{...r,timeOut:2147483647});t.then(n=>{s.replace(y,typeof p=="function"?p(n):p,{...r,timeOut:r.timeOut||3e3,toastType:"success"})}).catch(n=>{s.replace(y,typeof l=="function"?l(n):l,{...r,timeOut:r.timeOut||3e3,toastType:"error"})})};var h=H(require("react"));var c=H(require("react"));var $=require("react");function C({condition:t,children:e}){let r=$.Children.toArray(e);if(r.length>2)throw new Error("The number of children exceeds two.");return r.find(a=>t?a.key===".0":a.key===".1")}function M({children:t}){return t}function N({children:t}){return t}var B=({isVisible:t,position:e})=>t?/top/i.test(e)?`${x}__fade-in`:`${x}__fade-in-reverse`:/bottom/i.test(e)?`${x}__fade-out-reverse`:`${x}__fade-out`;var b=H(require("react"));function et(){return b.default.createElement("svg",{stroke:"none",fill:"none",strokeWidth:"2",viewBox:"0 0 24 24",strokeLinecap:"round",strokeLinejoin:"round",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},b.default.createElement("path",{stroke:"none",d:"M0 0h24v24H0z"}),b.default.createElement("path",{d:"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z",strokeWidth:"0",fill:"#1ab173"}))}function ot(){return b.default.createElement("svg",{stroke:"none",fill:"#eb2639",strokeWidth:"2",viewBox:"0 0 24 24",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},b.default.createElement("path",{d:"M11.953 2C6.465 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.493 2 11.953 2zM13 17h-2v-2h2v2zm0-4h-2V7h2v6z"}))}function st(){return b.default.createElement("svg",{stroke:"none",fill:"#fcba03",strokeWidth:"0",viewBox:"0 0 1024 1024",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},b.default.createElement("path",{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 0 1 0-96 48.01 48.01 0 0 1 0 96z"}))}var A={success:et,error:ot,loading:()=>b.default.createElement("div",{className:`${x}__loading`}),warn:st};function L({toastProps:t,pauseOnActivate:e,...r}){let{toastId:a,isVisible:p,timeOut:l,containerId:y,updated:n,toastType:d,position:T,data:o,pauseOnHover:i}=t,u=B({isVisible:p,position:T}),v=typeof o=="function"?o({toastId:a,close:()=>s.disappear(a,0),immediatelyClose:()=>{s.disappear(a,0),s.remove(a,0)},icons:{success:c.default.createElement(A.success,null),error:c.default.createElement(A.error,null),warn:c.default.createElement(A.warn,null),loading:c.default.createElement(A.loading,null)},isVisible:p}):o,_=()=>{i&&s.pause(a)},S=()=>{i&&s.resume(a)};(0,c.useEffect)(()=>{if(!e)return;let O=()=>{s.resume(a)},U=()=>{s.pause(a)};return window.addEventListener("focus",O),window.addEventListener("blur",U),()=>{window.removeEventListener("focus",O),window.removeEventListener("blur",U)}},[]),(0,c.useEffect)(()=>{s.isActive(a)||(s.setActive(a),s.disappear(a,l))},[a]),(0,c.useEffect)(()=>{if(n!==null){let O=l>=2147483647?3e3:l;s.disappear(a,O)}},[n]);let z=d==="custom"||d==="default"?null:A[d];return c.default.createElement("div",{...r},c.default.createElement(C,{condition:d!=="custom"},c.default.createElement(M,null,c.default.createElement("div",{role:"alert",className:d==="custom"?"":u,"data-testid":`container-${y}`,onMouseEnter:_,onMouseLeave:S,style:{boxSizing:"border-box",backgroundColor:"white",padding:"12px 14px 12px 12px",display:"flex",alignItems:"center",gap:5,borderRadius:8,boxShadow:"2px 4px 10px rgba(0, 0, 0, 0.1)"}},z&&c.default.createElement("span",{style:{minWidth:20,maxWidth:20}},c.default.createElement(z,null)),v)),c.default.createElement(N,null,v)))}var j=require("react");var W=()=>(0,j.useSyncExternalStore)(f.subscribe.bind(f),f.getSnapShot.bind(f),f.getSnapShot.bind(f));var F=({position:t,reverse:e=!1})=>/top/i.test(t)?e?"column-reverse":"column":/bottom/i.test(t)?e?"column":"column-reverse":"column";var m=16,rt={"top-left":{top:m,left:m},"top-center":{top:m,left:"50%",transform:"translateX(-50%)"},"top-right":{top:m,right:m},"bottom-left":{bottom:m,left:m},"bottom-center":{bottom:m,left:"50%",transform:"translateX(-50%)"},"bottom-right":{bottom:m,right:m}};function at({position:t="top-center",containerId:e="",gap:r=9,reverse:a=!1,pauseOnActivate:p=!0}){let l=W(),y=l.filter(n=>n.containerId==="").reduce((n,d)=>{let T=d.position||t;return d.position=T,n[T]=n[T]||[],n[T].push(d),n},{});return h.default.createElement(C,{condition:!!e},h.default.createElement(M,null,h.default.createElement("div",{style:{position:"absolute",zIndex:9999,pointerEvents:"none"}},h.default.createElement("div",{style:{pointerEvents:"auto",display:"flex",flexDirection:a?"column-reverse":"column",gap:r}},l.filter(n=>n.containerId===e).map(n=>h.default.createElement(L,{key:n.toastId,pauseOnActivate:p,toastProps:n,style:{display:"flex"}}))))),h.default.createElement(N,null,h.default.createElement("div",{style:{position:"fixed",zIndex:9999,top:m,left:m,right:m,bottom:m,pointerEvents:"none"}},Object.entries(y).map(([n,d])=>{let T=rt[n],o=F({position:n,reverse:a});return h.default.createElement("div",{key:n,"data-testid":n,style:{pointerEvents:"auto",position:"fixed",display:"flex",flexDirection:o,gap:r,...T}},d.map(i=>h.default.createElement(L,{key:i.toastId,toastProps:i,pauseOnActivate:p,style:{display:"flex",justifyContent:"center"}})))}))))}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  "use client";
2
- var D=()=>{let t=0;return()=>String(t++)};var _=class{state=[];listeners=new Set;activatedToasts=new Set;toastTimers=new Map;constructor(){}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}setState(e){this.state=typeof e=="function"?e(this.state):e,this.listeners.forEach(s=>s())}getSnapShot(){return this.state}};var g="react-strawberry-toast";var W=t=>{let e=o=>{let i=t.toastTimers.get(o);clearTimeout(i),t.toastTimers.delete(o)},s=o=>{t.activatedToasts.add(o)},n=o=>t.activatedToasts.has(o),c=(o,i=200)=>{n(o)&&(t.activatedToasts.delete(o),setTimeout(()=>{t.state=t.state.filter(l=>l.toastId!==o),t.setState([...t.state])},i),e(o))},p=(o,i,l)=>{t.state=t.state.map(b=>b.toastId===o?{...b,...l,updated:!0,data:i}:b),t.setState([...t.state])},r=o=>{let i=new Date().getTime();t.state=t.state.map(l=>l.toastId===o?{...l,pausedAt:i}:l),e(o),t.setState([...t.state])},d=(o,i)=>{let l=setTimeout(()=>{var N;t.state=t.state.map(E=>E.toastId===o?{...E,isVisible:!1}:E),t.setState([...t.state]);let b=(N=t.state.find(E=>E.toastId===o))==null?void 0:N.removeTimeOut;c(o,b)},i>2147483647?2147483647:i);t.toastTimers.set(o,l)};return{setActive:s,isActive:n,disappear:d,resume:o=>{if(t.toastTimers.has(o))return;let i=t.state.find(b=>b.toastId===o);if(!i)return;let l=i.createdAt+(i.timeOut||3e3)-(i.pausedAt||0);d(o,l)},pause:r,replace:p,remove:c}};var u=new _,V=D(),x=(t="default")=>(e,s={})=>{let{timeOut:n=3e3,removeTimeOut:c=200,pauseOnHover:p=!0,toastId:r}=s,d=r||V();if(a.isActive(d))throw new Error("A duplicate custom ID is not available.");let T=new Date().getTime(),o={...s,timeOut:n>2147483647?2147483647:n,toastId:d,data:e,createdAt:T,toastType:t,pauseOnHover:p,removeTimeOut:c,isVisible:!0};return u.state.push(o),u.setState([...u.state]),d},a=(t,e={})=>x()(t,e),I=W(u);a.setActive=I.setActive;a.isActive=I.isActive;a.disappear=I.disappear;a.resume=I.resume;a.pause=I.pause;a.replace=I.replace;a.remove=I.remove;a.success=x("success");a.error=x("error");a.warn=x("warn");a.loading=x("loading");a.custom=x("custom");a.promise=(t,e,s={})=>{let{loading:n,success:c,error:p}=e,r=a.loading(n,{...s,timeOut:2147483647});t.then(d=>{a.replace(r,typeof c=="function"?c(d):c,{...s,timeOut:s.timeOut||3e3,toastType:"success"})}).catch(d=>{a.replace(r,typeof p=="function"?p(d):p,{...s,timeOut:s.timeOut||3e3,toastType:"error"})})};import v from"react";import{useSyncExternalStore as B}from"react";import y,{useEffect as z}from"react";import{Children as U}from"react";function A({condition:t,children:e}){let s=U.toArray(e);if(s.length>2)throw new Error("The number of children exceeds two.");return s.find(n=>t?n.key===".0":n.key===".1")}function O({children:t}){return t}function k({children:t}){return t}var P=({isVisible:t,position:e})=>t?/top/i.test(e)?`${g}__fade-in`:`${g}__fade-in-reverse`:/bottom/i.test(e)?`${g}__fade-out-reverse`:`${g}__fade-out`;import f from"react";function Y(){return f.createElement("svg",{stroke:"none",fill:"none",strokeWidth:"2",viewBox:"0 0 24 24",strokeLinecap:"round",strokeLinejoin:"round",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},f.createElement("path",{stroke:"none",d:"M0 0h24v24H0z"}),f.createElement("path",{d:"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z",strokeWidth:"0",fill:"#1ab173"}))}function X(){return f.createElement("svg",{stroke:"none",fill:"#eb2639",strokeWidth:"2",viewBox:"0 0 24 24",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},f.createElement("path",{d:"M11.953 2C6.465 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.493 2 11.953 2zM13 17h-2v-2h2v2zm0-4h-2V7h2v6z"}))}function $(){return f.createElement("svg",{stroke:"none",fill:"#fcba03",strokeWidth:"0",viewBox:"0 0 1024 1024",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},f.createElement("path",{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 0 1 0-96 48.01 48.01 0 0 1 0 96z"}))}var w={success:Y,error:X,loading:()=>f.createElement("div",{className:`${g}__loading`}),warn:$};function H({status:t,children:e}){let s=t==="custom"||t==="default"?null:w[t];return f.createElement("div",{style:{boxSizing:"border-box",backgroundColor:"white",padding:"12px 14px 12px 12px",display:"flex",alignItems:"center",gap:5,borderRadius:8,boxShadow:"2px 4px 10px rgba(0, 0, 0, 0.1)"}},s&&f.createElement("span",{style:{minWidth:20,maxWidth:20}},f.createElement(s,null)),e)}function M({toastProps:t,...e}){let s=P({isVisible:t.isVisible,position:t.position}),n=typeof t.data=="function"?t.data({close:()=>a.disappear(t.toastId,0),immediatelyClose:()=>{a.disappear(t.toastId,0),a.remove(t.toastId,0)},icons:{success:y.createElement(w.success,null),error:y.createElement(w.error,null),warn:y.createElement(w.warn,null),loading:y.createElement(w.loading,null)},isVisible:t.isVisible}):t.data,c=()=>{t.pauseOnHover&&a.pause(t.toastId)},p=()=>{t.pauseOnHover&&a.resume(t.toastId)};return z(()=>{a.isActive(t.toastId)||(a.setActive(t.toastId),a.disappear(t.toastId,t.timeOut))},[t.toastId]),z(()=>{if(t.updated!==void 0){let r=t.timeOut>=2147483647?3e3:t.timeOut;a.disappear(t.toastId,r)}},[t.updated]),y.createElement("div",{role:"alert","data-testid":`container-${t.containerId}`,className:t.toastType==="custom"?"":s,onMouseEnter:c,onMouseLeave:p,...e},y.createElement(A,{condition:t.toastType!=="custom"},y.createElement(O,null,y.createElement(H,{status:t.toastType},n)),y.createElement(k,null,n)))}var L=({position:t,reverse:e=!1})=>/top/i.test(t)?e?"column-reverse":"column":/bottom/i.test(t)?e?"column":"column-reverse":"column";var m=16,j={"top-left":{top:m,left:m},"top-center":{top:m,left:"50%",transform:"translateX(-50%)"},"top-right":{top:m,right:m},"bottom-left":{bottom:m,left:m},"bottom-center":{bottom:m,left:"50%",transform:"translateX(-50%)"},"bottom-right":{bottom:m,right:m}};function _t({position:t="top-center",containerId:e="",gap:s=9,reverse:n=!1}){let c=B(u.subscribe.bind(u),u.getSnapShot.bind(u),u.getSnapShot.bind(u)),p=c.filter(r=>r.containerId===void 0).reduce((r,d)=>{let T=d.position||t;return d.position=T,r[T]=r[T]||[],r[T].push(d),r},{});return v.createElement(A,{condition:!!e},v.createElement(O,null,v.createElement("div",{style:{position:"absolute",zIndex:9999,pointerEvents:"none"}},v.createElement("div",{style:{pointerEvents:"auto",display:"flex",flexDirection:n?"column-reverse":"column",gap:s}},c.filter(r=>r.containerId===e).map(r=>v.createElement(M,{key:r.toastId,toastProps:r,style:{display:"flex"}}))))),v.createElement(k,null,v.createElement("div",{style:{position:"fixed",zIndex:9999,top:m,left:m,right:m,bottom:m,pointerEvents:"none"}},Object.entries(p).map(([r,d])=>{let T=j[r],o=L({position:r,reverse:n});return v.createElement("div",{key:r,"data-testid":r,style:{pointerEvents:"auto",position:"fixed",display:"flex",flexDirection:o,gap:s,...T}},d.map(i=>v.createElement(M,{key:i.toastId,toastProps:i,style:{display:"flex",justifyContent:"center"}})))}))))}export{_t as ToastContainer,a as toast,u as toastStore};
2
+ var z=()=>{let t=0;return()=>String(t++)};var P=class{state=[];listeners=new Set;activatedToasts=new Set;toastTimers=new Map;constructor(){}subscribe(r){return this.listeners.add(r),()=>{this.listeners.delete(r)}}setState(r){this.state=typeof r=="function"?r(this.state):r,this.listeners.forEach(n=>n())}getSnapShot(){return this.state}};var x="react-strawberry-toast";var U=t=>{let r=e=>{let i=t.toastTimers.get(e);clearTimeout(i),t.toastTimers.delete(e)},n=e=>{t.activatedToasts.add(e)},a=e=>t.activatedToasts.has(e),d=(e,i=200)=>{a(e)&&(t.activatedToasts.delete(e),setTimeout(()=>{t.state=t.state.filter(m=>m.toastId!==e),t.setState([...t.state])},i),r(e))},c=()=>{t.setState([])},y=(e,i,m)=>{t.state=t.state.map(v=>v.toastId===e?{...v,...m,updated:!0,data:i}:v),t.setState([...t.state])},s=e=>{let i=new Date().getTime();t.state=t.state.map(m=>m.toastId===e?{...m,pausedAt:i}:m),r(e),t.setState([...t.state])},p=(e,i)=>{let m=setTimeout(()=>{var _;t.state=t.state.map(S=>S.toastId===e?{...S,isVisible:!1}:S),t.setState([...t.state]);let v=(_=t.state.find(S=>S.toastId===e))==null?void 0:_.removeTimeOut;d(e,v)},i>2147483647?2147483647:i);t.toastTimers.set(e,m)};return{setActive:n,isActive:a,disappear:p,resume:e=>{if(t.toastTimers.has(e))return;let i=t.state.find(v=>v.toastId===e);if(!i)return;let m=i.createdAt+(i.timeOut||3e3)-(i.pausedAt||0);p(e,m)},pause:s,replace:y,remove:d,allClear:c}};var f=new P,$=z(),I=(t="default")=>(r,n={})=>{let{timeOut:a=3e3,removeTimeOut:d=200,pauseOnHover:c=!0,toastId:y}=n,s=y||$();if(o.isActive(s))throw new Error("A duplicate custom ID is not available.");let p=new Date().getTime(),u={updated:null,pausedAt:null,containerId:n.containerId||"",position:n.position||"top-center",timeOut:a>2147483647?2147483647:a,toastId:s,data:r,createdAt:p,toastType:t,pauseOnHover:c,removeTimeOut:d,isVisible:!0};return f.state.push(u),f.setState([...f.state]),s},o=(t,r={})=>I()(t,r),w=U(f);o.setActive=w.setActive;o.isActive=w.isActive;o.disappear=w.disappear;o.resume=w.resume;o.pause=w.pause;o.replace=w.replace;o.remove=w.remove;o.allClear=w.allClear;o.success=I("success");o.error=I("error");o.warn=I("warn");o.loading=I("loading");o.custom=I("custom");o.promise=(t,r,n={})=>{let{loading:a,success:d,error:c}=r,y=o.loading(a,{...n,timeOut:2147483647});t.then(s=>{o.replace(y,typeof d=="function"?d(s):d,{...n,timeOut:n.timeOut||3e3,toastType:"success"})}).catch(s=>{o.replace(y,typeof c=="function"?c(s):c,{...n,timeOut:n.timeOut||3e3,toastType:"error"})})};import h from"react";import T,{useEffect as H}from"react";import{Children as B}from"react";function k({condition:t,children:r}){let n=B.toArray(r);if(n.length>2)throw new Error("The number of children exceeds two.");return n.find(a=>t?a.key===".0":a.key===".1")}function C({children:t}){return t}function M({children:t}){return t}var V=({isVisible:t,position:r})=>t?/top/i.test(r)?`${x}__fade-in`:`${x}__fade-in-reverse`:/bottom/i.test(r)?`${x}__fade-out-reverse`:`${x}__fade-out`;import g from"react";function j(){return g.createElement("svg",{stroke:"none",fill:"none",strokeWidth:"2",viewBox:"0 0 24 24",strokeLinecap:"round",strokeLinejoin:"round",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},g.createElement("path",{stroke:"none",d:"M0 0h24v24H0z"}),g.createElement("path",{d:"M17 3.34a10 10 0 1 1 -14.995 8.984l-.005 -.324l.005 -.324a10 10 0 0 1 14.995 -8.336zm-1.293 5.953a1 1 0 0 0 -1.32 -.083l-.094 .083l-3.293 3.292l-1.293 -1.292l-.094 -.083a1 1 0 0 0 -1.403 1.403l.083 .094l2 2l.094 .083a1 1 0 0 0 1.226 0l.094 -.083l4 -4l.083 -.094a1 1 0 0 0 -.083 -1.32z",strokeWidth:"0",fill:"#1ab173"}))}function F(){return g.createElement("svg",{stroke:"none",fill:"#eb2639",strokeWidth:"2",viewBox:"0 0 24 24",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},g.createElement("path",{d:"M11.953 2C6.465 2 2 6.486 2 12s4.486 10 10 10 10-4.486 10-10S17.493 2 11.953 2zM13 17h-2v-2h2v2zm0-4h-2V7h2v6z"}))}function G(){return g.createElement("svg",{stroke:"none",fill:"#fcba03",strokeWidth:"0",viewBox:"0 0 1024 1024",height:"22",width:"22",xmlns:"http://www.w3.org/2000/svg"},g.createElement("path",{d:"M955.7 856l-416-720c-6.2-10.7-16.9-16-27.7-16s-21.6 5.3-27.7 16l-416 720C56 877.4 71.4 904 96 904h832c24.6 0 40-26.6 27.7-48zM480 416c0-4.4 3.6-8 8-8h48c4.4 0 8 3.6 8 8v184c0 4.4-3.6 8-8 8h-48c-4.4 0-8-3.6-8-8V416zm32 352a48.01 48.01 0 0 1 0-96 48.01 48.01 0 0 1 0 96z"}))}var A={success:j,error:F,loading:()=>g.createElement("div",{className:`${x}__loading`}),warn:G};function D({toastProps:t,pauseOnActivate:r,...n}){let{toastId:a,isVisible:d,timeOut:c,containerId:y,updated:s,toastType:p,position:u,data:e,pauseOnHover:i}=t,m=V({isVisible:d,position:u}),v=typeof e=="function"?e({toastId:a,close:()=>o.disappear(a,0),immediatelyClose:()=>{o.disappear(a,0),o.remove(a,0)},icons:{success:T.createElement(A.success,null),error:T.createElement(A.error,null),warn:T.createElement(A.warn,null),loading:T.createElement(A.loading,null)},isVisible:d}):e,_=()=>{i&&o.pause(a)},S=()=>{i&&o.resume(a)};H(()=>{if(!r)return;let O=()=>{o.resume(a)},W=()=>{o.pause(a)};return window.addEventListener("focus",O),window.addEventListener("blur",W),()=>{window.removeEventListener("focus",O),window.removeEventListener("blur",W)}},[]),H(()=>{o.isActive(a)||(o.setActive(a),o.disappear(a,c))},[a]),H(()=>{if(s!==null){let O=c>=2147483647?3e3:c;o.disappear(a,O)}},[s]);let L=p==="custom"||p==="default"?null:A[p];return T.createElement("div",{...n},T.createElement(k,{condition:p!=="custom"},T.createElement(C,null,T.createElement("div",{role:"alert",className:p==="custom"?"":m,"data-testid":`container-${y}`,onMouseEnter:_,onMouseLeave:S,style:{boxSizing:"border-box",backgroundColor:"white",padding:"12px 14px 12px 12px",display:"flex",alignItems:"center",gap:5,borderRadius:8,boxShadow:"2px 4px 10px rgba(0, 0, 0, 0.1)"}},L&&T.createElement("span",{style:{minWidth:20,maxWidth:20}},T.createElement(L,null)),v)),T.createElement(M,null,v)))}import{useSyncExternalStore as q}from"react";var Y=()=>q(f.subscribe.bind(f),f.getSnapShot.bind(f),f.getSnapShot.bind(f));var X=({position:t,reverse:r=!1})=>/top/i.test(t)?r?"column-reverse":"column":/bottom/i.test(t)?r?"column":"column-reverse":"column";var l=16,J={"top-left":{top:l,left:l},"top-center":{top:l,left:"50%",transform:"translateX(-50%)"},"top-right":{top:l,right:l},"bottom-left":{bottom:l,left:l},"bottom-center":{bottom:l,left:"50%",transform:"translateX(-50%)"},"bottom-right":{bottom:l,right:l}};function Mt({position:t="top-center",containerId:r="",gap:n=9,reverse:a=!1,pauseOnActivate:d=!0}){let c=Y(),y=c.filter(s=>s.containerId==="").reduce((s,p)=>{let u=p.position||t;return p.position=u,s[u]=s[u]||[],s[u].push(p),s},{});return h.createElement(k,{condition:!!r},h.createElement(C,null,h.createElement("div",{style:{position:"absolute",zIndex:9999,pointerEvents:"none"}},h.createElement("div",{style:{pointerEvents:"auto",display:"flex",flexDirection:a?"column-reverse":"column",gap:n}},c.filter(s=>s.containerId===r).map(s=>h.createElement(D,{key:s.toastId,pauseOnActivate:d,toastProps:s,style:{display:"flex"}}))))),h.createElement(M,null,h.createElement("div",{style:{position:"fixed",zIndex:9999,top:l,left:l,right:l,bottom:l,pointerEvents:"none"}},Object.entries(y).map(([s,p])=>{let u=J[s],e=X({position:s,reverse:a});return h.createElement("div",{key:s,"data-testid":s,style:{pointerEvents:"auto",position:"fixed",display:"flex",flexDirection:e,gap:n,...u}},p.map(i=>h.createElement(D,{key:i.toastId,toastProps:i,pauseOnActivate:d,style:{display:"flex",justifyContent:"center"}})))}))))}export{Mt as ToastContainer,o as toast,f as toastStore,Y as useToasts};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "react-strawberry-toast",
3
3
  "description": "A simple and customizable React toast library",
4
- "version": "1.1.0",
4
+ "version": "1.2.0",
5
5
  "author": "dkpark10",
6
6
  "license": "MIT",
7
7
  "keywords": [
@@ -9,7 +9,8 @@
9
9
  "toast",
10
10
  "snackbar",
11
11
  "modal",
12
- "alert"
12
+ "alert",
13
+ "notification"
13
14
  ],
14
15
  "repository": {
15
16
  "type": "git",