react-native-bread 0.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.
Files changed (79) hide show
  1. package/README.md +148 -0
  2. package/lib/commonjs/icons/CloseIcon.js +22 -0
  3. package/lib/commonjs/icons/CloseIcon.js.map +1 -0
  4. package/lib/commonjs/icons/GreenCheck.js +27 -0
  5. package/lib/commonjs/icons/GreenCheck.js.map +1 -0
  6. package/lib/commonjs/icons/InfoIcon.js +24 -0
  7. package/lib/commonjs/icons/InfoIcon.js.map +1 -0
  8. package/lib/commonjs/icons/RedX.js +27 -0
  9. package/lib/commonjs/icons/RedX.js.map +1 -0
  10. package/lib/commonjs/icons/index.js +34 -0
  11. package/lib/commonjs/icons/index.js.map +1 -0
  12. package/lib/commonjs/index.js +59 -0
  13. package/lib/commonjs/index.js.map +1 -0
  14. package/lib/commonjs/toast-api.js +127 -0
  15. package/lib/commonjs/toast-api.js.map +1 -0
  16. package/lib/commonjs/toast-provider.js +71 -0
  17. package/lib/commonjs/toast-provider.js.map +1 -0
  18. package/lib/commonjs/toast-store.js +278 -0
  19. package/lib/commonjs/toast-store.js.map +1 -0
  20. package/lib/commonjs/toast.js +445 -0
  21. package/lib/commonjs/toast.js.map +1 -0
  22. package/lib/commonjs/types.js +6 -0
  23. package/lib/commonjs/types.js.map +1 -0
  24. package/lib/module/icons/CloseIcon.js +16 -0
  25. package/lib/module/icons/CloseIcon.js.map +1 -0
  26. package/lib/module/icons/GreenCheck.js +21 -0
  27. package/lib/module/icons/GreenCheck.js.map +1 -0
  28. package/lib/module/icons/InfoIcon.js +18 -0
  29. package/lib/module/icons/InfoIcon.js.map +1 -0
  30. package/lib/module/icons/RedX.js +21 -0
  31. package/lib/module/icons/RedX.js.map +1 -0
  32. package/lib/module/icons/index.js +7 -0
  33. package/lib/module/icons/index.js.map +1 -0
  34. package/lib/module/index.js +14 -0
  35. package/lib/module/index.js.map +1 -0
  36. package/lib/module/toast-api.js +124 -0
  37. package/lib/module/toast-api.js.map +1 -0
  38. package/lib/module/toast-provider.js +67 -0
  39. package/lib/module/toast-provider.js.map +1 -0
  40. package/lib/module/toast-store.js +274 -0
  41. package/lib/module/toast-store.js.map +1 -0
  42. package/lib/module/toast.js +439 -0
  43. package/lib/module/toast.js.map +1 -0
  44. package/lib/module/types.js +4 -0
  45. package/lib/module/types.js.map +1 -0
  46. package/lib/typescript/icons/CloseIcon.d.ts +3 -0
  47. package/lib/typescript/icons/CloseIcon.d.ts.map +1 -0
  48. package/lib/typescript/icons/GreenCheck.d.ts +3 -0
  49. package/lib/typescript/icons/GreenCheck.d.ts.map +1 -0
  50. package/lib/typescript/icons/InfoIcon.d.ts +3 -0
  51. package/lib/typescript/icons/InfoIcon.d.ts.map +1 -0
  52. package/lib/typescript/icons/RedX.d.ts +3 -0
  53. package/lib/typescript/icons/RedX.d.ts.map +1 -0
  54. package/lib/typescript/icons/index.d.ts +5 -0
  55. package/lib/typescript/icons/index.d.ts.map +1 -0
  56. package/lib/typescript/index.d.ts +7 -0
  57. package/lib/typescript/index.d.ts.map +1 -0
  58. package/lib/typescript/toast-api.d.ts +109 -0
  59. package/lib/typescript/toast-api.d.ts.map +1 -0
  60. package/lib/typescript/toast-provider.d.ts +52 -0
  61. package/lib/typescript/toast-provider.d.ts.map +1 -0
  62. package/lib/typescript/toast-store.d.ts +26 -0
  63. package/lib/typescript/toast-store.d.ts.map +1 -0
  64. package/lib/typescript/toast.d.ts +2 -0
  65. package/lib/typescript/toast.d.ts.map +1 -0
  66. package/lib/typescript/types.d.ts +101 -0
  67. package/lib/typescript/types.d.ts.map +1 -0
  68. package/package.json +87 -0
  69. package/src/icons/CloseIcon.tsx +10 -0
  70. package/src/icons/GreenCheck.tsx +16 -0
  71. package/src/icons/InfoIcon.tsx +12 -0
  72. package/src/icons/RedX.tsx +16 -0
  73. package/src/icons/index.ts +4 -0
  74. package/src/index.ts +26 -0
  75. package/src/toast-api.ts +213 -0
  76. package/src/toast-provider.tsx +81 -0
  77. package/src/toast-store.ts +270 -0
  78. package/src/toast.tsx +417 -0
  79. package/src/types.ts +121 -0
@@ -0,0 +1,124 @@
1
+ "use strict";
2
+
3
+ import { toastStore } from "./toast-store.js";
4
+
5
+ /** Second parameter can be a string (description) or options object */
6
+
7
+ const _toast = (title, description, type, duration) => {
8
+ toastStore.show(title, description, type, duration);
9
+ };
10
+
11
+ /** Helper to parse the second argument which can be string or options */
12
+ const parseDescriptionOrOptions = arg => {
13
+ if (!arg) return {};
14
+ if (typeof arg === "string") return {
15
+ description: arg
16
+ };
17
+ return {
18
+ description: arg.description,
19
+ duration: arg.duration,
20
+ options: arg
21
+ };
22
+ };
23
+ const parseMessage = input => typeof input === "string" ? {
24
+ title: input
25
+ } : input;
26
+ const parseErrorMessage = (input, error) => {
27
+ if (typeof input === "function") {
28
+ return parseMessage(input(error));
29
+ }
30
+ return parseMessage(input);
31
+ };
32
+ const promiseToast = async (promise, messages) => {
33
+ const loadingCfg = parseMessage(messages.loading);
34
+
35
+ // Very long duration so it stays visible until we resolve/reject
36
+ const toastId = toastStore.show(loadingCfg.title, loadingCfg.description, "loading", loadingCfg.duration ?? 60 * 60 * 1000);
37
+ try {
38
+ const result = await promise;
39
+ const successCfg = parseMessage(messages.success);
40
+ toastStore.updateToast(toastId, {
41
+ title: successCfg.title,
42
+ description: successCfg.description,
43
+ type: "success",
44
+ duration: successCfg.duration ?? 4000
45
+ });
46
+ return {
47
+ data: result,
48
+ success: true
49
+ };
50
+ } catch (err) {
51
+ const error = err instanceof Error ? err : new Error(String(err));
52
+ const errorCfg = parseErrorMessage(messages.error, error);
53
+ toastStore.updateToast(toastId, {
54
+ title: errorCfg.title,
55
+ description: errorCfg.description,
56
+ type: "error",
57
+ duration: errorCfg.duration ?? 4000
58
+ });
59
+ return {
60
+ error,
61
+ success: false
62
+ };
63
+ }
64
+ };
65
+ // Build the toast API
66
+ const toastFn = _toast;
67
+ toastFn.success = (title, descriptionOrOptions, duration) => {
68
+ const {
69
+ description,
70
+ duration: optDuration,
71
+ options
72
+ } = parseDescriptionOrOptions(descriptionOrOptions);
73
+ toastStore.show(title, description, "success", duration ?? optDuration, options);
74
+ };
75
+ toastFn.error = (title, descriptionOrOptions, duration) => {
76
+ const {
77
+ description,
78
+ duration: optDuration,
79
+ options
80
+ } = parseDescriptionOrOptions(descriptionOrOptions);
81
+ toastStore.show(title, description, "error", duration ?? optDuration, options);
82
+ };
83
+ toastFn.info = (title, descriptionOrOptions, duration) => {
84
+ const {
85
+ description,
86
+ duration: optDuration,
87
+ options
88
+ } = parseDescriptionOrOptions(descriptionOrOptions);
89
+ toastStore.show(title, description, "info", duration ?? optDuration, options);
90
+ };
91
+ toastFn.promise = promiseToast;
92
+ toastFn.dismiss = id => {
93
+ toastStore.hide(id);
94
+ };
95
+ toastFn.dismissAll = () => {
96
+ toastStore.hideAll();
97
+ };
98
+
99
+ /**
100
+ * Toast API for showing notifications.
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * import { toast } from 'react-native-bread';
105
+ *
106
+ * // Basic toasts
107
+ * toast.success("Saved!", "Your changes have been saved");
108
+ * toast.error("Error", "Something went wrong");
109
+ * toast.info("Tip", "Swipe up to dismiss");
110
+ *
111
+ * // Promise toast (loading → success/error)
112
+ * toast.promise(apiCall(), {
113
+ * loading: { title: "Loading..." },
114
+ * success: { title: "Done!" },
115
+ * error: (err) => ({ title: "Failed", description: err.message }),
116
+ * });
117
+ *
118
+ * // Dismiss toasts
119
+ * toast.dismiss(id);
120
+ * toast.dismissAll();
121
+ * ```
122
+ */
123
+ export const toast = toastFn;
124
+ //# sourceMappingURL=toast-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["toastStore","_toast","title","description","type","duration","show","parseDescriptionOrOptions","arg","options","parseMessage","input","parseErrorMessage","error","promiseToast","promise","messages","loadingCfg","loading","toastId","result","successCfg","success","updateToast","data","err","Error","String","errorCfg","toastFn","descriptionOrOptions","optDuration","info","dismiss","id","hide","dismissAll","hideAll","toast"],"sourceRoot":"../../src","sources":["toast-api.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ import { useEffect } from "react";
4
+ import { StyleSheet, View } from "react-native";
5
+ import { ToastContainer } from "./toast.js";
6
+ import { toastStore } from "./toast-store.js";
7
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
+ /**
9
+ * Toast provider component that enables toast notifications in your app.
10
+ * Wrap your root component with `<BreadLoaf>` to start showing toasts.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * import { BreadLoaf } from 'react-native-bread';
15
+ *
16
+ * // Basic usage
17
+ * <BreadLoaf>
18
+ * <App />
19
+ * </BreadLoaf>
20
+ *
21
+ * // With configuration
22
+ * <BreadLoaf
23
+ * config={{
24
+ * position: 'bottom',
25
+ * stacking: false,
26
+ * defaultDuration: 5000,
27
+ * colors: {
28
+ * success: { accent: '#22c55e', background: '#f0fdf4' },
29
+ * error: { accent: '#ef4444', background: '#fef2f2' },
30
+ * },
31
+ * toastStyle: { borderRadius: 12 },
32
+ * }}
33
+ * >
34
+ * <App />
35
+ * </BreadLoaf>
36
+ * ```
37
+ */
38
+ export function BreadLoaf({
39
+ children,
40
+ config
41
+ }) {
42
+ useEffect(() => {
43
+ toastStore.setConfig(config);
44
+ return () => {
45
+ // Reset to defaults when this provider unmounts
46
+ toastStore.setConfig(undefined);
47
+ };
48
+ }, [config]);
49
+ return /*#__PURE__*/_jsxs(View, {
50
+ style: styles.root,
51
+ children: [children, /*#__PURE__*/_jsx(View, {
52
+ style: styles.portalContainer,
53
+ pointerEvents: "box-none",
54
+ children: /*#__PURE__*/_jsx(ToastContainer, {})
55
+ })]
56
+ });
57
+ }
58
+ const styles = StyleSheet.create({
59
+ root: {
60
+ flex: 1
61
+ },
62
+ portalContainer: {
63
+ ...StyleSheet.absoluteFillObject,
64
+ zIndex: 9999
65
+ }
66
+ });
67
+ //# sourceMappingURL=toast-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useEffect","StyleSheet","View","ToastContainer","toastStore","jsx","_jsx","jsxs","_jsxs","BreadLoaf","children","config","setConfig","undefined","style","styles","root","portalContainer","pointerEvents","create","flex","absoluteFillObject","zIndex"],"sourceRoot":"../../src","sources":["toast-provider.tsx"],"mappings":";;AAAA,SAAyBA,SAAS,QAAQ,OAAO;AACjD,SAASC,UAAU,EAAEC,IAAI,QAAQ,cAAc;AAC/C,SAASC,cAAc,QAAQ,YAAS;AACxC,SAASC,UAAU,QAAQ,kBAAe;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAqB3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,SAASA,CAAC;EAAEC,QAAQ;EAAEC;AAAuB,CAAC,EAAE;EAC9DX,SAAS,CAAC,MAAM;IACdI,UAAU,CAACQ,SAAS,CAACD,MAAM,CAAC;IAC5B,OAAO,MAAM;MACX;MACAP,UAAU,CAACQ,SAAS,CAACC,SAAS,CAAC;IACjC,CAAC;EACH,CAAC,EAAE,CAACF,MAAM,CAAC,CAAC;EACZ,oBACEH,KAAA,CAACN,IAAI;IAACY,KAAK,EAAEC,MAAM,CAACC,IAAK;IAAAN,QAAA,GACtBA,QAAQ,eACTJ,IAAA,CAACJ,IAAI;MAACY,KAAK,EAAEC,MAAM,CAACE,eAAgB;MAACC,aAAa,EAAC,UAAU;MAAAR,QAAA,eAC3DJ,IAAA,CAACH,cAAc,IAAE;IAAC,CACd,CAAC;EAAA,CACH,CAAC;AAEX;AAEA,MAAMY,MAAM,GAAGd,UAAU,CAACkB,MAAM,CAAC;EAC/BH,IAAI,EAAE;IACJI,IAAI,EAAE;EACR,CAAC;EACDH,eAAe,EAAE;IACf,GAAGhB,UAAU,CAACoB,kBAAkB;IAChCC,MAAM,EAAE;EACV;AACF,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+
3
+ const EXIT_DURATION = 350;
4
+
5
+ /** Default theme values */
6
+ const DEFAULT_THEME = {
7
+ position: "top",
8
+ offset: 0,
9
+ stacking: true,
10
+ maxStack: 3,
11
+ dismissible: true,
12
+ showCloseButton: true,
13
+ colors: {
14
+ success: {
15
+ accent: "#28B770",
16
+ background: "#FFFFFF"
17
+ },
18
+ error: {
19
+ accent: "#F05964",
20
+ background: "#FFFFFF"
21
+ },
22
+ info: {
23
+ accent: "#EDBE43",
24
+ background: "#FFFFFF"
25
+ },
26
+ loading: {
27
+ accent: "#232323",
28
+ background: "#FFFFFF"
29
+ }
30
+ },
31
+ icons: {},
32
+ toastStyle: {},
33
+ titleStyle: {},
34
+ descriptionStyle: {},
35
+ defaultDuration: 4000
36
+ };
37
+
38
+ /** Deep merge user config with defaults */
39
+ function mergeConfig(config) {
40
+ if (!config) return DEFAULT_THEME;
41
+ const mergedColors = {
42
+ ...DEFAULT_THEME.colors
43
+ };
44
+ if (config.colors) {
45
+ for (const type of Object.keys(config.colors)) {
46
+ const userColors = config.colors[type];
47
+ if (userColors) {
48
+ mergedColors[type] = {
49
+ ...DEFAULT_THEME.colors[type],
50
+ ...userColors
51
+ };
52
+ }
53
+ }
54
+ }
55
+ return {
56
+ position: config.position ?? DEFAULT_THEME.position,
57
+ offset: config.offset ?? DEFAULT_THEME.offset,
58
+ stacking: config.stacking ?? DEFAULT_THEME.stacking,
59
+ maxStack: config.maxStack ?? DEFAULT_THEME.maxStack,
60
+ dismissible: config.dismissible ?? DEFAULT_THEME.dismissible,
61
+ showCloseButton: config.showCloseButton ?? DEFAULT_THEME.showCloseButton,
62
+ colors: mergedColors,
63
+ icons: {
64
+ ...DEFAULT_THEME.icons,
65
+ ...config.icons
66
+ },
67
+ toastStyle: {
68
+ ...DEFAULT_THEME.toastStyle,
69
+ ...config.toastStyle
70
+ },
71
+ titleStyle: {
72
+ ...DEFAULT_THEME.titleStyle,
73
+ ...config.titleStyle
74
+ },
75
+ descriptionStyle: {
76
+ ...DEFAULT_THEME.descriptionStyle,
77
+ ...config.descriptionStyle
78
+ },
79
+ defaultDuration: config.defaultDuration ?? DEFAULT_THEME.defaultDuration
80
+ };
81
+ }
82
+ class ToastStore {
83
+ state = {
84
+ visibleToasts: []
85
+ };
86
+ theme = DEFAULT_THEME;
87
+ listeners = new Set();
88
+ toastIdCounter = 0;
89
+ timeouts = new Map();
90
+ subscribe = listener => {
91
+ this.listeners.add(listener);
92
+ return () => {
93
+ this.listeners.delete(listener);
94
+ };
95
+ };
96
+ emit() {
97
+ for (const listener of this.listeners) {
98
+ listener(this.state);
99
+ }
100
+ }
101
+ setState(partial) {
102
+ this.state = {
103
+ ...this.state,
104
+ ...partial
105
+ };
106
+ this.emit();
107
+ }
108
+ getState = () => this.state;
109
+ getTheme = () => this.theme;
110
+ setConfig = config => {
111
+ this.theme = mergeConfig(config);
112
+ };
113
+ show = (title, description, type = "success", duration, options) => {
114
+ const actualDuration = duration ?? options?.duration ?? this.theme.defaultDuration;
115
+ const maxToasts = this.theme.stacking ? this.theme.maxStack : 1;
116
+ const id = `toast-${++this.toastIdCounter}`;
117
+ const newToast = {
118
+ id,
119
+ title,
120
+ description: description ?? options?.description,
121
+ type,
122
+ duration: actualDuration,
123
+ createdAt: Date.now(),
124
+ isExiting: false,
125
+ options
126
+ };
127
+ const {
128
+ visibleToasts
129
+ } = this.state;
130
+
131
+ // Get only non-exiting toasts for count
132
+ const activeToasts = visibleToasts.filter(t => !t.isExiting);
133
+ if (activeToasts.length >= maxToasts) {
134
+ const toastsToRemove = activeToasts.slice(maxToasts - 1);
135
+ for (const toast of toastsToRemove) {
136
+ // Clear auto-dismiss timeout
137
+ const timeout = this.timeouts.get(toast.id);
138
+ if (timeout) {
139
+ clearTimeout(timeout);
140
+ this.timeouts.delete(toast.id);
141
+ }
142
+ }
143
+ const removeIds = new Set(toastsToRemove.map(t => t.id));
144
+ if (this.theme.stacking) {
145
+ // When stacking is ON: remove old toasts from state immediately (no animation for stack overflow)
146
+ this.setState({
147
+ visibleToasts: visibleToasts.filter(t => !removeIds.has(t.id))
148
+ });
149
+ } else {
150
+ // When stacking is OFF: animate out the old toast, wait, then show new one
151
+ this.setState({
152
+ visibleToasts: visibleToasts.map(t => removeIds.has(t.id) ? {
153
+ ...t,
154
+ isExiting: true
155
+ } : t)
156
+ });
157
+
158
+ // Delay showing the new toast until the old one has animated out
159
+ setTimeout(() => {
160
+ for (const toast of toastsToRemove) {
161
+ this.removeToast(toast.id);
162
+ }
163
+ this.addToast(newToast, actualDuration);
164
+ }, EXIT_DURATION - 220);
165
+ return id;
166
+ }
167
+ }
168
+
169
+ // Add new toast immediately (stacking ON or no existing toasts)
170
+ this.addToast(newToast, actualDuration);
171
+ return id;
172
+ };
173
+ addToast(toast, duration) {
174
+ this.setState({
175
+ visibleToasts: [toast, ...this.state.visibleToasts.filter(t => !t.isExiting)]
176
+ });
177
+
178
+ // Schedule auto-dismiss with duration multiplier based on position
179
+ this.scheduleTimeout(toast.id, duration, 0);
180
+
181
+ // Reschedule timeouts for other toasts based on their new positions
182
+ this.rescheduleAllTimeouts();
183
+ }
184
+ scheduleTimeout(id, baseDuration, index) {
185
+ const existingTimeout = this.timeouts.get(id);
186
+ if (existingTimeout) {
187
+ clearTimeout(existingTimeout);
188
+ }
189
+
190
+ // Duration multiplier: index 0 = 1x, index 1 = 2x, index 2 = 3x
191
+ const duration = baseDuration * (index + 1);
192
+ const timeout = setTimeout(() => {
193
+ this.hide(id);
194
+ }, duration);
195
+ this.timeouts.set(id, timeout);
196
+ }
197
+ rescheduleAllTimeouts() {
198
+ const {
199
+ visibleToasts
200
+ } = this.state;
201
+ visibleToasts.forEach((toast, index) => {
202
+ // Skip if already exiting or index 0 (just scheduled)
203
+ if (toast.isExiting || index === 0) return;
204
+ this.scheduleTimeout(toast.id, toast.duration, index);
205
+ });
206
+ }
207
+ hide = id => {
208
+ const {
209
+ visibleToasts
210
+ } = this.state;
211
+ const toast = visibleToasts.find(t => t.id === id);
212
+ if (!toast || toast.isExiting) return;
213
+
214
+ // Clear the auto-dismiss timeout
215
+ const timeout = this.timeouts.get(id);
216
+ if (timeout) {
217
+ clearTimeout(timeout);
218
+ this.timeouts.delete(id);
219
+ }
220
+
221
+ // Mark as exiting (triggers exit animation in component)
222
+ this.setState({
223
+ visibleToasts: visibleToasts.map(t => t.id === id ? {
224
+ ...t,
225
+ isExiting: true
226
+ } : t)
227
+ });
228
+
229
+ // After exit animation, actually remove the toast
230
+ setTimeout(() => {
231
+ this.removeToast(id);
232
+ }, EXIT_DURATION);
233
+ };
234
+ removeToast(id) {
235
+ const timeout = this.timeouts.get(id);
236
+ if (timeout) {
237
+ clearTimeout(timeout);
238
+ this.timeouts.delete(id);
239
+ }
240
+ this.setState({
241
+ visibleToasts: this.state.visibleToasts.filter(t => t.id !== id)
242
+ });
243
+
244
+ // Reschedule remaining toasts with updated positions
245
+ this.rescheduleAllTimeouts();
246
+ }
247
+ updateToast = (id, data) => {
248
+ const {
249
+ visibleToasts
250
+ } = this.state;
251
+ const index = visibleToasts.findIndex(t => t.id === id);
252
+ if (index === -1) return;
253
+ this.setState({
254
+ visibleToasts: visibleToasts.map(t => t.id === id ? {
255
+ ...t,
256
+ ...data
257
+ } : t)
258
+ });
259
+ if (data.duration !== undefined) {
260
+ this.scheduleTimeout(id, data.duration, index);
261
+ }
262
+ };
263
+ hideAll = () => {
264
+ for (const timeout of this.timeouts.values()) {
265
+ clearTimeout(timeout);
266
+ }
267
+ this.timeouts.clear();
268
+ this.setState({
269
+ visibleToasts: []
270
+ });
271
+ };
272
+ }
273
+ export const toastStore = new ToastStore();
274
+ //# sourceMappingURL=toast-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EXIT_DURATION","DEFAULT_THEME","position","offset","stacking","maxStack","dismissible","showCloseButton","colors","success","accent","background","error","info","loading","icons","toastStyle","titleStyle","descriptionStyle","defaultDuration","mergeConfig","config","mergedColors","type","Object","keys","userColors","ToastStore","state","visibleToasts","theme","listeners","Set","toastIdCounter","timeouts","Map","subscribe","listener","add","delete","emit","setState","partial","getState","getTheme","setConfig","show","title","description","duration","options","actualDuration","maxToasts","id","newToast","createdAt","Date","now","isExiting","activeToasts","filter","t","length","toastsToRemove","slice","toast","timeout","get","clearTimeout","removeIds","map","has","setTimeout","removeToast","addToast","scheduleTimeout","rescheduleAllTimeouts","baseDuration","index","existingTimeout","hide","set","forEach","find","updateToast","data","findIndex","undefined","hideAll","values","clear","toastStore"],"sourceRoot":"../../src","sources":["toast-store.ts"],"mappings":"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","ignoreList":[]}