@nayhoo/ui 0.10.0 → 0.10.2

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 (140) hide show
  1. package/dist/{chunk-DMFP5JKO.mjs → chunk-2BB77GZV.mjs} +3 -3
  2. package/dist/{chunk-T3GW2EMR.mjs → chunk-2TMFRLMM.mjs} +1 -1
  3. package/dist/{chunk-T3GW2EMR.mjs.map → chunk-2TMFRLMM.mjs.map} +1 -1
  4. package/dist/{chunk-ZNKUE6YY.mjs → chunk-3STUDMUG.mjs} +1 -1
  5. package/dist/{chunk-ZNKUE6YY.mjs.map → chunk-3STUDMUG.mjs.map} +1 -1
  6. package/dist/{chunk-QMCIR3TI.mjs → chunk-4C5Q6VK2.mjs} +3 -3
  7. package/dist/{chunk-64TEKDKL.mjs → chunk-52RVZRC4.mjs} +2 -2
  8. package/dist/{chunk-G4YCF3A2.mjs → chunk-AIOSEM6O.mjs} +1 -1
  9. package/dist/{chunk-G4YCF3A2.mjs.map → chunk-AIOSEM6O.mjs.map} +1 -1
  10. package/dist/{chunk-U6MTU5FF.mjs → chunk-CQA7ZREU.mjs} +1 -1
  11. package/dist/{chunk-U6MTU5FF.mjs.map → chunk-CQA7ZREU.mjs.map} +1 -1
  12. package/dist/{chunk-QEBSZEY2.mjs → chunk-HFMY3EF3.mjs} +1 -1
  13. package/dist/{chunk-QEBSZEY2.mjs.map → chunk-HFMY3EF3.mjs.map} +1 -1
  14. package/dist/{chunk-QBPEU3GK.mjs → chunk-JSUIFF36.mjs} +1 -1
  15. package/dist/{chunk-QBPEU3GK.mjs.map → chunk-JSUIFF36.mjs.map} +1 -1
  16. package/dist/{chunk-DC6VQ7BG.mjs → chunk-LF6VSYRD.mjs} +2 -2
  17. package/dist/{chunk-IEZTYE5I.mjs → chunk-M6OYH5UA.mjs} +1 -1
  18. package/dist/{chunk-IEZTYE5I.mjs.map → chunk-M6OYH5UA.mjs.map} +1 -1
  19. package/dist/{chunk-GGJKRS5V.mjs → chunk-PIOIL3MF.mjs} +2 -2
  20. package/dist/{chunk-MDAIXJU2.mjs → chunk-QCTQCZQV.mjs} +1 -1
  21. package/dist/{chunk-MDAIXJU2.mjs.map → chunk-QCTQCZQV.mjs.map} +1 -1
  22. package/dist/{chunk-3HV65JYW.mjs → chunk-RD6HAWH5.mjs} +1 -1
  23. package/dist/{chunk-3HV65JYW.mjs.map → chunk-RD6HAWH5.mjs.map} +1 -1
  24. package/dist/{chunk-HRXZ3ELS.mjs → chunk-SC6WBBXG.mjs} +1 -1
  25. package/dist/{chunk-HRXZ3ELS.mjs.map → chunk-SC6WBBXG.mjs.map} +1 -1
  26. package/dist/{chunk-YO4LZRGU.mjs → chunk-SI36SYJ2.mjs} +1 -1
  27. package/dist/{chunk-YO4LZRGU.mjs.map → chunk-SI36SYJ2.mjs.map} +1 -1
  28. package/dist/{chunk-PGCB7RGD.mjs → chunk-TPPKQCXG.mjs} +1 -1
  29. package/dist/{chunk-PGCB7RGD.mjs.map → chunk-TPPKQCXG.mjs.map} +1 -1
  30. package/dist/{chunk-6UOQ737G.mjs → chunk-UVLWN6WJ.mjs} +1 -1
  31. package/dist/{chunk-6UOQ737G.mjs.map → chunk-UVLWN6WJ.mjs.map} +1 -1
  32. package/dist/{chunk-XX6PQF7O.mjs → chunk-VSQHQBZX.mjs} +1 -1
  33. package/dist/{chunk-XX6PQF7O.mjs.map → chunk-VSQHQBZX.mjs.map} +1 -1
  34. package/dist/{chunk-RYAY35UB.mjs → chunk-WUIQQ7C2.mjs} +2 -2
  35. package/dist/{chunk-IQLI5J2V.mjs → chunk-YZNF3EIN.mjs} +1 -1
  36. package/dist/{chunk-IQLI5J2V.mjs.map → chunk-YZNF3EIN.mjs.map} +1 -1
  37. package/dist/components/avatar.css +1 -1
  38. package/dist/components/avatar.css.map +1 -1
  39. package/dist/components/avatar.js.map +1 -1
  40. package/dist/components/avatar.mjs +1 -1
  41. package/dist/components/badge.css +1 -1
  42. package/dist/components/badge.css.map +1 -1
  43. package/dist/components/badge.js.map +1 -1
  44. package/dist/components/badge.mjs +1 -1
  45. package/dist/components/button.css +2 -2
  46. package/dist/components/button.css.map +1 -1
  47. package/dist/components/button.js.map +1 -1
  48. package/dist/components/button.mjs +4 -4
  49. package/dist/components/checkbox.css +1 -1
  50. package/dist/components/checkbox.css.map +1 -1
  51. package/dist/components/checkbox.js.map +1 -1
  52. package/dist/components/checkbox.mjs +1 -1
  53. package/dist/components/dropdown-menu.css +2 -2
  54. package/dist/components/dropdown-menu.css.map +1 -1
  55. package/dist/components/dropdown-menu.js.map +1 -1
  56. package/dist/components/dropdown-menu.mjs +3 -3
  57. package/dist/components/flex.css +1 -1
  58. package/dist/components/flex.css.map +1 -1
  59. package/dist/components/flex.js.map +1 -1
  60. package/dist/components/flex.mjs +2 -2
  61. package/dist/components/grid.css +1 -1
  62. package/dist/components/grid.css.map +1 -1
  63. package/dist/components/grid.js.map +1 -1
  64. package/dist/components/grid.mjs +1 -1
  65. package/dist/components/heading.css +1 -1
  66. package/dist/components/heading.css.map +1 -1
  67. package/dist/components/heading.js.map +1 -1
  68. package/dist/components/heading.mjs +2 -2
  69. package/dist/components/icon-button.css +2 -2
  70. package/dist/components/icon-button.css.map +1 -1
  71. package/dist/components/icon-button.js.map +1 -1
  72. package/dist/components/icon-button.mjs +4 -4
  73. package/dist/components/label.css +1 -1
  74. package/dist/components/label.css.map +1 -1
  75. package/dist/components/label.js.map +1 -1
  76. package/dist/components/label.mjs +1 -1
  77. package/dist/components/link.css +1 -1
  78. package/dist/components/link.css.map +1 -1
  79. package/dist/components/link.js.map +1 -1
  80. package/dist/components/link.mjs +1 -1
  81. package/dist/components/menu.css +2 -2
  82. package/dist/components/menu.css.map +1 -1
  83. package/dist/components/menu.js.map +1 -1
  84. package/dist/components/menu.mjs +3 -3
  85. package/dist/components/paragraph.css +1 -1
  86. package/dist/components/paragraph.css.map +1 -1
  87. package/dist/components/paragraph.js.map +1 -1
  88. package/dist/components/paragraph.mjs +1 -1
  89. package/dist/components/popover.css +1 -1
  90. package/dist/components/popover.css.map +1 -1
  91. package/dist/components/popover.js.map +1 -1
  92. package/dist/components/popover.mjs +1 -1
  93. package/dist/components/select.css +3 -3
  94. package/dist/components/select.css.map +1 -1
  95. package/dist/components/select.js.map +1 -1
  96. package/dist/components/select.mjs +5 -5
  97. package/dist/components/skeleton.css +1 -1
  98. package/dist/components/skeleton.css.map +1 -1
  99. package/dist/components/skeleton.js.map +1 -1
  100. package/dist/components/skeleton.mjs +1 -1
  101. package/dist/components/spinner.css +1 -1
  102. package/dist/components/spinner.css.map +1 -1
  103. package/dist/components/spinner.js.map +1 -1
  104. package/dist/components/spinner.mjs +2 -2
  105. package/dist/components/switch.css +1 -1
  106. package/dist/components/switch.css.map +1 -1
  107. package/dist/components/switch.js.map +1 -1
  108. package/dist/components/switch.mjs +1 -1
  109. package/dist/components/text-field.css +1 -1
  110. package/dist/components/text-field.css.map +1 -1
  111. package/dist/components/text-field.js.map +1 -1
  112. package/dist/components/text-field.mjs +1 -1
  113. package/dist/components/text.css +1 -1
  114. package/dist/components/text.css.map +1 -1
  115. package/dist/components/text.js.map +1 -1
  116. package/dist/components/text.mjs +2 -2
  117. package/dist/components/tooltip.css +1 -1
  118. package/dist/components/tooltip.css.map +1 -1
  119. package/dist/components/tooltip.js.map +1 -1
  120. package/dist/components/tooltip.mjs +2 -2
  121. package/dist/providers/index.css +8 -8
  122. package/dist/providers/index.css.map +1 -1
  123. package/dist/providers/index.d.mts +23 -14
  124. package/dist/providers/index.d.ts +23 -14
  125. package/dist/providers/index.js +157 -77
  126. package/dist/providers/index.js.map +1 -1
  127. package/dist/providers/index.mjs +165 -91
  128. package/dist/providers/index.mjs.map +1 -1
  129. package/dist/theme/index.css +20 -20
  130. package/dist/theme/index.css.map +1 -1
  131. package/dist/theme/index.js.map +1 -1
  132. package/dist/theme/index.mjs +15 -15
  133. package/dist/theme/index.mjs.map +1 -1
  134. package/package.json +1 -1
  135. /package/dist/{chunk-DMFP5JKO.mjs.map → chunk-2BB77GZV.mjs.map} +0 -0
  136. /package/dist/{chunk-QMCIR3TI.mjs.map → chunk-4C5Q6VK2.mjs.map} +0 -0
  137. /package/dist/{chunk-64TEKDKL.mjs.map → chunk-52RVZRC4.mjs.map} +0 -0
  138. /package/dist/{chunk-DC6VQ7BG.mjs.map → chunk-LF6VSYRD.mjs.map} +0 -0
  139. /package/dist/{chunk-GGJKRS5V.mjs.map → chunk-PIOIL3MF.mjs.map} +0 -0
  140. /package/dist/{chunk-RYAY35UB.mjs.map → chunk-WUIQQ7C2.mjs.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Text
3
- } from "../chunk-RYAY35UB.mjs";
3
+ } from "../chunk-WUIQQ7C2.mjs";
4
4
  import {
5
5
  checkmark,
6
6
  darkTheme,
@@ -10,124 +10,171 @@ import {
10
10
  toastInner,
11
11
  toastRoot,
12
12
  toastViewport
13
- } from "../chunk-U6MTU5FF.mjs";
13
+ } from "../chunk-CQA7ZREU.mjs";
14
14
  import {
15
15
  Heading
16
- } from "../chunk-GGJKRS5V.mjs";
16
+ } from "../chunk-PIOIL3MF.mjs";
17
17
  import {
18
18
  IconButton
19
- } from "../chunk-DMFP5JKO.mjs";
20
- import "../chunk-QBPEU3GK.mjs";
21
- import "../chunk-G4YCF3A2.mjs";
19
+ } from "../chunk-2BB77GZV.mjs";
20
+ import "../chunk-JSUIFF36.mjs";
21
+ import "../chunk-AIOSEM6O.mjs";
22
22
  import {
23
23
  Button
24
- } from "../chunk-QMCIR3TI.mjs";
25
- import "../chunk-MDAIXJU2.mjs";
26
- import "../chunk-DC6VQ7BG.mjs";
27
- import "../chunk-QEBSZEY2.mjs";
24
+ } from "../chunk-4C5Q6VK2.mjs";
25
+ import "../chunk-QCTQCZQV.mjs";
26
+ import "../chunk-LF6VSYRD.mjs";
27
+ import "../chunk-HFMY3EF3.mjs";
28
28
  import "../chunk-4N6P3Y54.mjs";
29
29
  import "../chunk-7EGQM3ZL.mjs";
30
30
  import "../chunk-LZOMFHX3.mjs";
31
31
 
32
32
  // src/providers/theme-provider.tsx
33
- import {
34
- createContext,
35
- useCallback,
36
- useEffect,
37
- useMemo,
38
- useState
39
- } from "react";
40
-
41
- // src/providers/script.ts
42
- var script = (storageKey2, defaultTheme2, classes2) => {
43
- const el = document.documentElement;
44
- function updateDOM(theme) {
45
- el.classList.remove(...Object.values(classes2));
46
- el.classList.add(classes2[theme]);
47
- }
48
- function getSystemTheme2() {
49
- return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
50
- }
51
- try {
52
- const themeName = localStorage.getItem(storageKey2) || defaultTheme2;
53
- const isSystem = themeName === "system";
54
- const theme = isSystem ? getSystemTheme2() : themeName;
55
- updateDOM(theme);
56
- } catch (e) {
57
- }
58
- };
59
-
60
- // src/providers/theme-provider.tsx
61
- import { jsx, jsxs } from "react/jsx-runtime";
62
- var MEDIA = "(prefers-color-scheme: dark)";
63
- var isServer = typeof window === "undefined";
64
- var storageKey = "nayhoo-theme";
65
- var themes = ["light", "dark", "system"];
66
- var defaultTheme = "system";
33
+ import * as React from "react";
34
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
67
35
  var classes = {
68
36
  light: lightTheme,
69
37
  dark: darkTheme
70
38
  };
71
- var ThemeContext = createContext({
72
- theme: defaultTheme,
39
+ var defaultTheme = "system";
40
+ var storageKey = "nayhoo-theme";
41
+ var systemThemes = ["light", "dark"];
42
+ var themes = [...systemThemes, "system"];
43
+ var colorSchemes = ["light", "dark"];
44
+ var MEDIA = "(prefers-color-scheme: dark)";
45
+ var isServer = typeof window === "undefined";
46
+ var ThemeContext = React.createContext(void 0);
47
+ var defaultContext = {
73
48
  setTheme: () => {
74
49
  },
75
- resolvedTheme: "light",
76
50
  themes
77
- });
78
- var ThemeProvider = ({ children }) => {
79
- const [theme, setTheme] = useState(() => getTheme());
80
- const [resolvedTheme, setResolvedTheme] = useState(
51
+ };
52
+ var saveToLS = (storageKey2, value) => {
53
+ try {
54
+ localStorage.setItem(storageKey2, value);
55
+ } catch (e) {
56
+ }
57
+ };
58
+ var useTheme = () => {
59
+ var _a;
60
+ return (_a = React.useContext(ThemeContext)) != null ? _a : defaultContext;
61
+ };
62
+ var ThemeProvider = (props) => {
63
+ const context = React.useContext(ThemeContext);
64
+ if (context) return /* @__PURE__ */ jsx(Fragment, { children: props.children });
65
+ return /* @__PURE__ */ jsx(Theme, { ...props });
66
+ };
67
+ var Theme = ({ children, scriptProps }) => {
68
+ const [theme, setThemeState] = React.useState(() => getTheme());
69
+ const [resolvedTheme, setResolvedTheme] = React.useState(
81
70
  () => theme === "system" ? getSystemTheme() : theme
82
71
  );
83
- const applyTheme = useCallback((theme2) => {
84
- const resolved = resolveTheme(theme2);
85
- setResolvedTheme(resolved);
72
+ const applyTheme = React.useCallback((theme2) => {
73
+ let resolved = theme2;
74
+ if (!resolved) return;
75
+ if (theme2 === "system") {
76
+ resolved = getSystemTheme();
77
+ }
86
78
  const d = document.documentElement;
87
- d.classList.remove(...Object.values(classes));
88
- d.classList.add(classes[resolved]);
79
+ const handleAttribute = () => {
80
+ d.classList.remove(...Object.values(classes));
81
+ if (resolved) d.classList.add(classes[resolved]);
82
+ };
83
+ handleAttribute();
84
+ const colorScheme = colorSchemes.some(
85
+ (colorScheme2) => colorScheme2 === resolved
86
+ ) ? resolved : null;
87
+ if (colorScheme) d.style.colorScheme = colorScheme;
88
+ }, []);
89
+ const setTheme = React.useCallback((value) => {
90
+ setThemeState(value);
91
+ saveToLS(storageKey, value);
89
92
  }, []);
90
- useEffect(() => {
93
+ const handleMediaQuery = React.useCallback(
94
+ (e) => {
95
+ const resolved = getSystemTheme(e);
96
+ setResolvedTheme(resolved);
97
+ if (theme === "system") {
98
+ applyTheme("system");
99
+ }
100
+ },
101
+ // eslint-disable-next-line react-hooks/exhaustive-deps
102
+ [theme]
103
+ );
104
+ React.useEffect(() => {
105
+ const media = window.matchMedia(MEDIA);
106
+ media.addListener(handleMediaQuery);
107
+ handleMediaQuery(media);
108
+ return () => media.removeListener(handleMediaQuery);
109
+ }, [handleMediaQuery]);
110
+ React.useEffect(() => {
111
+ const handleStorage = (e) => {
112
+ if (e.key !== storageKey) {
113
+ return;
114
+ }
115
+ if (!e.newValue || !isTheme(e.newValue)) {
116
+ setTheme(defaultTheme);
117
+ } else {
118
+ setThemeState(e.newValue);
119
+ }
120
+ };
121
+ window.addEventListener("storage", handleStorage);
122
+ return () => window.removeEventListener("storage", handleStorage);
123
+ }, [setTheme]);
124
+ React.useEffect(() => {
91
125
  applyTheme(theme);
92
- try {
93
- localStorage.setItem(storageKey, theme);
94
- } catch {
95
- }
96
- }, [applyTheme, theme]);
97
- const value = useMemo(
126
+ }, [theme]);
127
+ const providerValue = React.useMemo(
98
128
  () => ({
99
129
  theme,
100
130
  setTheme,
101
131
  resolvedTheme: theme === "system" ? resolvedTheme : theme,
102
- themes
132
+ themes,
133
+ systemTheme: resolvedTheme
103
134
  }),
104
135
  [theme, setTheme, resolvedTheme]
105
136
  );
106
- const scriptArgs = JSON.stringify([storageKey, defaultTheme, classes]).slice(
107
- 1,
108
- -1
109
- );
110
- return /* @__PURE__ */ jsxs(ThemeContext, { value, children: [
137
+ return /* @__PURE__ */ jsxs(ThemeContext.Provider, { value: providerValue, children: [
111
138
  /* @__PURE__ */ jsx(
112
- "script",
139
+ ThemeScript,
113
140
  {
114
- suppressHydrationWarning: true,
115
- dangerouslySetInnerHTML: {
116
- __html: `(${script.toString()})(${scriptArgs})`
141
+ ...{
142
+ scriptProps
117
143
  }
118
144
  }
119
145
  ),
120
146
  children
121
147
  ] });
122
148
  };
149
+ var ThemeScript = React.memo(
150
+ ({ scriptProps }) => {
151
+ const scriptArgs = JSON.stringify([
152
+ storageKey,
153
+ defaultTheme,
154
+ systemThemes,
155
+ classes
156
+ ]).slice(1, -1);
157
+ return /* @__PURE__ */ jsx(
158
+ "script",
159
+ {
160
+ ...scriptProps,
161
+ suppressHydrationWarning: true,
162
+ dangerouslySetInnerHTML: {
163
+ __html: `(${script.toString()})(${scriptArgs})`
164
+ }
165
+ }
166
+ );
167
+ }
168
+ );
169
+ ThemeScript.displayName = "ThemeScript";
123
170
  var getTheme = () => {
124
- if (isServer) return defaultTheme;
125
- let themeName;
171
+ if (isServer) return void 0;
172
+ let theme;
126
173
  try {
127
- themeName = localStorage.getItem(storageKey) || void 0;
174
+ theme = localStorage.getItem(storageKey) || void 0;
128
175
  } catch (e) {
129
176
  }
130
- return themes.find((theme) => theme === themeName) || defaultTheme;
177
+ return theme !== void 0 && isTheme(theme) ? theme : defaultTheme;
131
178
  };
132
179
  var getSystemTheme = (e) => {
133
180
  if (!e) e = window.matchMedia(MEDIA);
@@ -135,12 +182,32 @@ var getSystemTheme = (e) => {
135
182
  const systemTheme = isDark ? "dark" : "light";
136
183
  return systemTheme;
137
184
  };
138
- var resolveTheme = (theme) => {
139
- let resolved = theme;
140
- if (theme === "system") {
141
- resolved = getSystemTheme();
185
+ var isTheme = (value) => themes.some((theme) => theme === value);
186
+ var script = (storageKey2, defaultTheme2, systemThemes2, classes2) => {
187
+ const el = document.documentElement;
188
+ function updateDOM(theme) {
189
+ el.classList.remove(...Object.values(classes2));
190
+ el.classList.add(classes2[theme]);
191
+ setColorScheme(theme);
192
+ }
193
+ function setColorScheme(theme) {
194
+ if (systemThemes2.some((systemTheme) => systemTheme === theme)) {
195
+ el.style.colorScheme = theme;
196
+ }
197
+ }
198
+ function getSystemTheme2() {
199
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
200
+ }
201
+ function isSystemTheme(value) {
202
+ return systemThemes2.some((theme) => theme === value);
203
+ }
204
+ try {
205
+ const themeName = localStorage.getItem(storageKey2) || defaultTheme2;
206
+ const isSystem = themeName === "system";
207
+ const theme = isSystem || !isSystemTheme(themeName) ? getSystemTheme2() : themeName;
208
+ updateDOM(theme);
209
+ } catch (e) {
142
210
  }
143
- return resolved;
144
211
  };
145
212
 
146
213
  // src/providers/toast-provider.tsx
@@ -148,14 +215,21 @@ import { Cross2Icon } from "@radix-ui/react-icons";
148
215
  import * as ToastPrimitives from "@radix-ui/react-toast";
149
216
  import * as React2 from "react";
150
217
  import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
151
- var defaultToast = Object.assign(() => {
152
- }, {
153
- success: () => {
218
+ var defaultContext2 = Object.assign(
219
+ () => {
154
220
  },
155
- error: () => {
221
+ {
222
+ success: () => {
223
+ },
224
+ error: () => {
225
+ }
156
226
  }
157
- });
158
- var ToastContext = React2.createContext(defaultToast);
227
+ );
228
+ var ToastContext = React2.createContext(defaultContext2);
229
+ var useToast = () => {
230
+ var _a;
231
+ return (_a = React2.useContext(ToastContext)) != null ? _a : defaultContext2;
232
+ };
159
233
  var toastElementsMapRef = React2.createRef();
160
234
  var defaultToastImpl = {
161
235
  toastElementsMapRef,
@@ -363,10 +437,10 @@ var ToastAction = ({
363
437
  );
364
438
  };
365
439
  export {
366
- ThemeContext,
367
440
  ThemeProvider,
368
441
  ToastAction,
369
- ToastContext,
370
- ToastProvider
442
+ ToastProvider,
443
+ useTheme,
444
+ useToast
371
445
  };
372
446
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/theme-provider.tsx","../../src/providers/script.ts","../../src/providers/toast-provider.tsx"],"sourcesContent":["// Credit: https://github.com/pacocoursey/next-themes/blob/main/next-themes/src/index.tsx\n\nimport { darkTheme } from \"@/theme/themes/dark-theme.css\";\nimport { lightTheme } from \"@/theme/themes/light-theme.css\";\nimport { Theme } from \"@/types/theme\";\nimport React, {\n createContext,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { script } from \"./script\";\n\nconst MEDIA = \"(prefers-color-scheme: dark)\";\nconst isServer = typeof window === \"undefined\";\n\nconst storageKey = \"nayhoo-theme\";\nconst themes: Theme[] = [\"light\", \"dark\", \"system\"];\nconst defaultTheme: Theme = \"system\";\n\ntype ResolvedTheme = Exclude<Theme, \"system\">;\nconst classes: Record<ResolvedTheme, string> = {\n light: lightTheme,\n dark: darkTheme,\n};\n\ntype ThemeContextProps = {\n theme: Theme;\n setTheme: React.Dispatch<React.SetStateAction<Theme>>;\n resolvedTheme: ResolvedTheme;\n themes: Theme[];\n};\n\nexport const ThemeContext = createContext<ThemeContextProps>({\n theme: defaultTheme,\n setTheme: () => {},\n resolvedTheme: \"light\",\n themes,\n});\n\ntype ThemeProviderProps = {\n children: React.ReactNode;\n};\n\nexport const ThemeProvider = ({ children }: ThemeProviderProps) => {\n const [theme, setTheme] = useState(() => getTheme());\n const [resolvedTheme, setResolvedTheme] = useState(() =>\n theme === \"system\" ? getSystemTheme() : theme,\n );\n\n const applyTheme = useCallback((theme: Theme) => {\n const resolved = resolveTheme(theme);\n\n setResolvedTheme(resolved);\n\n const d = document.documentElement;\n d.classList.remove(...Object.values(classes));\n d.classList.add(classes[resolved]);\n }, []);\n\n useEffect(() => {\n applyTheme(theme);\n\n try {\n localStorage.setItem(storageKey, theme);\n } catch {}\n }, [applyTheme, theme]);\n\n const value = useMemo(\n () => ({\n theme,\n setTheme,\n resolvedTheme: theme === \"system\" ? resolvedTheme : theme,\n themes,\n }),\n [theme, setTheme, resolvedTheme],\n );\n\n const scriptArgs = JSON.stringify([storageKey, defaultTheme, classes]).slice(\n 1,\n -1,\n );\n\n return (\n <ThemeContext value={value}>\n <script\n suppressHydrationWarning\n dangerouslySetInnerHTML={{\n __html: `(${script.toString()})(${scriptArgs})`,\n }}\n />\n\n {children}\n </ThemeContext>\n );\n};\n\nconst getTheme = () => {\n if (isServer) return defaultTheme;\n let themeName: string | undefined;\n\n try {\n themeName = localStorage.getItem(storageKey) || undefined;\n } catch (e) {\n // Unsupported\n }\n\n return themes.find((theme) => theme === themeName) || defaultTheme;\n};\n\nconst getSystemTheme = (\n e?: MediaQueryList | MediaQueryListEvent,\n): ResolvedTheme => {\n if (!e) e = window.matchMedia(MEDIA);\n const isDark = e.matches;\n const systemTheme = isDark ? \"dark\" : \"light\";\n\n return systemTheme;\n};\n\nconst resolveTheme = (theme: Theme) => {\n let resolved = theme;\n\n if (theme === \"system\") {\n resolved = getSystemTheme();\n }\n\n return resolved as ResolvedTheme;\n};\n","// Credit: https://github.com/pacocoursey/next-themes/blob/main/next-themes/src/script.ts\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n\nexport const script = (storageKey, defaultTheme, classes) => {\n const el = document.documentElement;\n\n function updateDOM(theme) {\n el.classList.remove(...Object.values(classes));\n el.classList.add(classes[theme]);\n }\n\n function getSystemTheme() {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n\n try {\n const themeName = localStorage.getItem(storageKey) || defaultTheme;\n const isSystem = themeName === \"system\";\n const theme = isSystem ? getSystemTheme() : themeName;\n updateDOM(theme);\n } catch (e) {\n //\n }\n};\n","// Credits: https://codesandbox.io/p/sandbox/radix-toast-stack-dpfx5f\n\nimport { Button } from \"@/components/button\";\nimport { Heading } from \"@/components/heading\";\nimport { IconButton } from \"@/components/icon-button\";\nimport { Text } from \"@/components/text\";\nimport {\n checkmark,\n error,\n toastClose,\n toastInner,\n toastRoot,\n toastViewport,\n} from \"@/theme/styles/toast.css\";\nimport { Cross2Icon } from \"@radix-ui/react-icons\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport * as React from \"react\";\n\ntype Toast = {\n title?: string;\n description?: string;\n status: \"default\" | \"error\" | \"success\";\n action?: React.ReactNode;\n} & ToastPrimitives.ToastProps;\n\ntype AddToastPayload = Omit<Toast, \"status\">;\n\ntype ToastContextProps = ((payload: AddToastPayload) => void) & {\n error: (payload: AddToastPayload) => void;\n success: (payload: AddToastPayload) => void;\n};\n\nconst defaultToast: ToastContextProps = Object.assign(() => {}, {\n success: () => {},\n error: () => {},\n});\n\nexport const ToastContext = React.createContext(defaultToast);\n\ntype ToastContextImplProps = {\n toastElementsMapRef: React.RefObject<Map<string, HTMLLIElement> | null>;\n sortToasts: () => void;\n};\n\nconst toastElementsMapRef = React.createRef<Map<string, HTMLLIElement>>();\n\nconst defaultToastImpl: ToastContextImplProps = {\n toastElementsMapRef,\n sortToasts: () => {},\n};\n\nconst ToastContextImpl = React.createContext(defaultToastImpl);\n\nconst ANIMATION_OUT_DURATION = 350;\n\nexport const ToastProvider = ({\n children,\n ...props\n}: ToastPrimitives.ToastProviderProps) => {\n const [toasts, setToasts] = React.useState<Map<string, Toast>>(new Map());\n const toastElementsMapRef = React.useRef<Map<string, HTMLLIElement>>(\n new Map(),\n );\n const viewportRef = React.useRef<HTMLOListElement>(null);\n\n const sortToasts = React.useCallback(() => {\n const toastElements = Array.from(toastElementsMapRef.current).reverse();\n const heights: number[] = [];\n\n toastElements.forEach(([, toast], index) => {\n if (!toast) return;\n const height = toast.clientHeight;\n heights.push(height);\n const frontToastHeight = heights[0];\n toast.setAttribute(\"data-front\", `${index === 0}`);\n toast.setAttribute(\"data-hidden\", `${index > 2}`);\n toast.style.setProperty(\"--index\", `${index}`);\n toast.style.setProperty(\"--height\", `${height}px`);\n toast.style.setProperty(\"--front-height\", `${frontToastHeight}px`);\n const hoverOffsetY = heights\n .slice(0, index)\n .reduce((res, next) => (res += next), 0);\n toast.style.setProperty(\"--hover-offset-y\", `-${hoverOffsetY}px`);\n });\n }, []);\n\n const handleAddToast = React.useCallback((toast: Toast) => {\n setToasts((currentToasts) => {\n const newMap = new Map(currentToasts);\n newMap.set(String(Date.now()), { ...toast, open: true });\n\n return newMap;\n });\n }, []);\n\n const handleRemoveToast = React.useCallback((key: string) => {\n setToasts((currentToasts) => {\n const newMap = new Map(currentToasts);\n newMap.delete(key);\n\n return newMap;\n });\n }, []);\n\n const handleDispatchDefault = React.useCallback(\n (payload: AddToastPayload) =>\n handleAddToast({ ...payload, status: \"default\" }),\n [handleAddToast],\n );\n\n const handleDispatchSuccess = React.useCallback(\n (payload: AddToastPayload) =>\n handleAddToast({ ...payload, status: \"success\" }),\n [handleAddToast],\n );\n\n const handleDispatchError = React.useCallback(\n (payload: AddToastPayload) =>\n // default duration of 10 mins for `status: \"error\"`.\n handleAddToast({ duration: 60 * 1000 * 10, ...payload, status: \"error\" }),\n [handleAddToast],\n );\n\n React.useEffect(() => {\n const viewport = viewportRef.current;\n\n if (viewport) {\n const handleFocus = () => {\n toastElementsMapRef.current.forEach((toast) => {\n toast.setAttribute(\"data-hovering\", \"true\");\n });\n };\n\n // @ts-expect-error TODO: get the correct type\n const handleBlur = (event) => {\n if (!viewport.contains(event.target) || viewport === event.target) {\n toastElementsMapRef.current.forEach((toast) => {\n toast.setAttribute(\"data-hovering\", \"false\");\n });\n }\n };\n\n viewport.addEventListener(\"pointermove\", handleFocus);\n viewport.addEventListener(\"pointerleave\", handleBlur);\n viewport.addEventListener(\"focusin\", handleFocus);\n viewport.addEventListener(\"focusout\", handleBlur);\n\n return () => {\n viewport.removeEventListener(\"pointermove\", handleFocus);\n viewport.removeEventListener(\"pointerleave\", handleBlur);\n viewport.removeEventListener(\"focusin\", handleFocus);\n viewport.removeEventListener(\"focusout\", handleBlur);\n };\n }\n }, []);\n\n const toastApi = React.useMemo(\n () =>\n Object.assign(handleDispatchDefault, {\n success: handleDispatchSuccess,\n error: handleDispatchError,\n }),\n [handleDispatchDefault, handleDispatchSuccess, handleDispatchError],\n );\n\n return (\n <ToastContext.Provider value={toastApi}>\n <ToastContextImpl.Provider\n value={React.useMemo(\n () => ({\n toastElementsMapRef,\n sortToasts,\n }),\n [sortToasts],\n )}\n >\n <ToastPrimitives.Provider {...props}>\n {children}\n {Array.from(toasts).map(([key, toast]) => (\n <Toast\n key={key}\n id={key}\n toast={toast}\n onOpenChange={(open) => {\n if (!open) {\n toastElementsMapRef.current.delete(key);\n sortToasts();\n\n if (!open) {\n setTimeout(() => {\n handleRemoveToast(key);\n }, ANIMATION_OUT_DURATION);\n }\n }\n }}\n />\n ))}\n <ToastPrimitives.Viewport\n ref={viewportRef}\n className={toastViewport}\n />\n </ToastPrimitives.Provider>\n </ToastContextImpl.Provider>\n </ToastContext.Provider>\n );\n};\n\nconst Toast = (props: ToastPrimitives.ToastProps & { toast: Toast }) => {\n const { onOpenChange, toast, id, ...toastProps } = props;\n const ref = React.useRef<HTMLLIElement>(null);\n const context = React.useContext(ToastContextImpl);\n const { sortToasts, toastElementsMapRef } = context;\n const toastElementsMap = toastElementsMapRef.current;\n\n React.useLayoutEffect(() => {\n if (ref.current) {\n toastElementsMap?.set(id as string, ref.current);\n sortToasts();\n }\n }, [id, sortToasts, toastElementsMap]);\n\n return (\n <ToastPrimitives.Root\n {...toastProps}\n ref={ref}\n type={toast.type}\n duration={toast.duration}\n className={toastRoot}\n onOpenChange={onOpenChange}\n >\n <div className={toastInner} data-status={toast.status}>\n <ToastStatusIcon status={toast.status} />\n <ToastPrimitives.Title asChild style={{ gridArea: \"title\" }}>\n <Heading level=\"6\">{toast.title}</Heading>\n </ToastPrimitives.Title>\n <ToastPrimitives.Description\n asChild\n style={{ gridArea: \"description\" }}\n >\n <Text color=\"subtle\" size=\"2\">\n {toast.description}\n </Text>\n </ToastPrimitives.Description>\n {toast.action}\n <ToastPrimitives.Close\n aria-label=\"Close\"\n asChild\n className={toastClose}\n >\n <IconButton variant=\"outline\">\n <Cross2Icon />\n </IconButton>\n </ToastPrimitives.Close>\n </div>\n </ToastPrimitives.Root>\n );\n};\n\nconst ToastStatusIcon = ({ status }: { status: Toast[\"status\"] }) => {\n return status !== \"default\" ? (\n <div style={{ gridArea: \"icon\", alignSelf: \"start\" }}>\n {status === \"success\" && <CheckmarkIcon />}\n {status === \"error\" && <ErrorIcon />}\n </div>\n ) : null;\n};\n\nconst ErrorIcon = () => <div aria-hidden className={error} />;\nconst CheckmarkIcon = () => <div aria-hidden className={checkmark} />;\n\nexport const ToastAction = ({\n ...props\n}: Omit<ToastPrimitives.ToastActionProps, \"asChild\">) => {\n return (\n <ToastPrimitives.Action\n {...props}\n style={{ gridArea: \"action\", ...props.style }}\n asChild\n >\n <Button size=\"1\" variant=\"outline\">\n {props.children}\n </Button>\n </ToastPrimitives.Action>\n );\n};\n"],"mappings":"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","names":["storageKey","defaultTheme","classes","getSystemTheme","theme","React","jsx","jsxs","toastElementsMapRef"]}
1
+ {"version":3,"sources":["../../src/providers/theme-provider.tsx","../../src/providers/toast-provider.tsx"],"sourcesContent":["\"use client\";\n\nimport { darkTheme } from \"@/theme/themes/dark-theme.css\";\nimport { lightTheme } from \"@/theme/themes/light-theme.css\";\nimport { SystemTheme } from \"@/types/system-theme\";\nimport { Theme as ITheme } from \"@/types/theme\";\nimport * as React from \"react\";\n\nconst classes: Record<SystemTheme, string> = {\n light: lightTheme,\n dark: darkTheme,\n};\nconst defaultTheme: ITheme = \"system\";\nconst storageKey = \"nayhoo-theme\";\nconst systemThemes: SystemTheme[] = [\"light\", \"dark\"];\nconst themes: ITheme[] = [...systemThemes, \"system\"];\n\n// Credits: https://github.com/pacocoursey/next-themes/blob/main/next-themes/src/types.ts\ninterface ScriptProps\n extends React.DetailedHTMLProps<\n React.ScriptHTMLAttributes<HTMLScriptElement>,\n HTMLScriptElement\n > {}\n\nexport interface UseThemeProps {\n /** List of all available theme names */\n themes: ITheme[];\n /** Update the theme */\n setTheme: (value: ITheme) => void;\n /** Active theme name */\n theme?: ITheme | undefined;\n /** If the active theme is \"system\", this returns whether the system preference resolved to \"dark\" or \"light\". Otherwise, identical to `theme` */\n resolvedTheme?: ITheme | undefined;\n /** Returns the System theme preference (\"dark\" or \"light\"), regardless what the active theme is */\n systemTheme?: SystemTheme | undefined;\n}\n\nexport interface ThemeProviderProps extends React.PropsWithChildren {\n /** Props to pass the inline script */\n scriptProps?: ScriptProps;\n}\n\n// Credits: https://github.com/pacocoursey/next-themes/blob/main/next-themes/src/index.tsx\nconst colorSchemes: SystemTheme[] = [\"light\", \"dark\"];\nconst MEDIA = \"(prefers-color-scheme: dark)\";\nconst isServer = typeof window === \"undefined\";\nconst ThemeContext = React.createContext<UseThemeProps | undefined>(undefined);\nconst defaultContext: UseThemeProps = {\n setTheme: () => {\n // TODO: something about needs to be in a provider\n },\n themes,\n};\n\nconst saveToLS = (storageKey: string, value: string) => {\n // Save to storage\n try {\n localStorage.setItem(storageKey, value);\n } catch (e) {\n // Unsupported\n }\n};\n\nexport const useTheme = () => React.useContext(ThemeContext) ?? defaultContext;\n\nexport const ThemeProvider = (props: ThemeProviderProps) => {\n const context = React.useContext(ThemeContext);\n\n // Ignore nested context providers, just passthrough children\n if (context) return <>{props.children}</>;\n\n return <Theme {...props} />;\n};\n\nconst Theme = ({ children, scriptProps }: ThemeProviderProps) => {\n const [theme, setThemeState] = React.useState(() => getTheme());\n const [resolvedTheme, setResolvedTheme] = React.useState(() =>\n theme === \"system\" ? getSystemTheme() : theme,\n );\n\n const applyTheme = React.useCallback((theme?: ITheme) => {\n let resolved = theme;\n\n if (!resolved) return;\n\n // If theme is system, resolve it before setting theme\n if (theme === \"system\") {\n resolved = getSystemTheme();\n }\n\n const d = document.documentElement;\n\n const handleAttribute = () => {\n d.classList.remove(...Object.values(classes));\n\n if (resolved) d.classList.add(classes[resolved as SystemTheme]);\n };\n\n handleAttribute();\n\n const colorScheme = colorSchemes.some(\n (colorScheme) => colorScheme === resolved,\n )\n ? resolved\n : null;\n\n if (colorScheme) d.style.colorScheme = colorScheme;\n }, []);\n\n const setTheme = React.useCallback((value: ITheme) => {\n setThemeState(value);\n saveToLS(storageKey, value);\n }, []);\n\n const handleMediaQuery = React.useCallback(\n (e: MediaQueryListEvent | MediaQueryList) => {\n const resolved = getSystemTheme(e);\n setResolvedTheme(resolved);\n\n if (theme === \"system\") {\n applyTheme(\"system\");\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [theme],\n );\n\n // Always listen to System preference\n React.useEffect(() => {\n const media = window.matchMedia(MEDIA);\n\n // Intentionally use deprecated listener methods to support iOS & old browsers\n media.addListener(handleMediaQuery);\n handleMediaQuery(media);\n\n return () => media.removeListener(handleMediaQuery);\n }, [handleMediaQuery]);\n\n // localStorage event handling\n React.useEffect(() => {\n const handleStorage = (e: StorageEvent) => {\n if (e.key !== storageKey) {\n return;\n }\n\n // If default theme set, use it if localstorage === null (happens on local storage manual deletion)\n if (!e.newValue || !isTheme(e.newValue)) {\n setTheme(defaultTheme);\n } else {\n setThemeState(e.newValue); // Direct state update to avoid loops\n }\n };\n\n window.addEventListener(\"storage\", handleStorage);\n\n return () => window.removeEventListener(\"storage\", handleStorage);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [setTheme]);\n\n // Whenever theme changes, apply it\n React.useEffect(() => {\n applyTheme(theme);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [theme]);\n\n const providerValue = React.useMemo(\n () => ({\n theme,\n setTheme,\n resolvedTheme: theme === \"system\" ? resolvedTheme : theme,\n themes,\n systemTheme: resolvedTheme as SystemTheme | undefined,\n }),\n [theme, setTheme, resolvedTheme],\n );\n\n return (\n <ThemeContext.Provider value={providerValue}>\n <ThemeScript\n {...{\n scriptProps,\n }}\n />\n\n {children}\n </ThemeContext.Provider>\n );\n};\n\nconst ThemeScript = React.memo(\n ({ scriptProps }: Omit<ThemeProviderProps, \"children\">) => {\n const scriptArgs = JSON.stringify([\n storageKey,\n defaultTheme,\n systemThemes,\n classes,\n ]).slice(1, -1);\n\n return (\n <script\n {...scriptProps}\n suppressHydrationWarning\n dangerouslySetInnerHTML={{\n __html: `(${script.toString()})(${scriptArgs})`,\n }}\n />\n );\n },\n);\n\nThemeScript.displayName = \"ThemeScript\";\n\n// Helpers\nconst getTheme = () => {\n if (isServer) return undefined;\n let theme;\n\n try {\n theme = localStorage.getItem(storageKey) || undefined;\n } catch (e) {\n // Unsupported\n }\n\n return theme !== undefined && isTheme(theme) ? theme : defaultTheme;\n};\n\nconst getSystemTheme = (e?: MediaQueryList | MediaQueryListEvent) => {\n if (!e) e = window.matchMedia(MEDIA);\n const isDark = e.matches;\n const systemTheme = isDark ? \"dark\" : \"light\";\n\n return systemTheme;\n};\n\nconst isTheme = (value: string): value is ITheme =>\n themes.some((theme) => theme === value);\n\n// Credits: https://github.com/pacocoursey/next-themes/blob/main/next-themes/src/script.ts\nconst script = (\n storageKey: string,\n defaultTheme: ITheme,\n systemThemes: SystemTheme[],\n classes: Record<SystemTheme, string>,\n) => {\n const el = document.documentElement;\n\n function updateDOM(theme: SystemTheme) {\n el.classList.remove(...Object.values(classes));\n el.classList.add(classes[theme]);\n\n setColorScheme(theme);\n }\n\n function setColorScheme(theme: string) {\n if (systemThemes.some((systemTheme) => systemTheme === theme)) {\n el.style.colorScheme = theme;\n }\n }\n\n function getSystemTheme() {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n }\n\n function isSystemTheme(value: string): value is SystemTheme {\n return systemThemes.some((theme) => theme === value);\n }\n\n try {\n const themeName = localStorage.getItem(storageKey) || defaultTheme;\n const isSystem = themeName === \"system\";\n const theme =\n isSystem || !isSystemTheme(themeName) ? getSystemTheme() : themeName;\n updateDOM(theme);\n } catch (e) {\n //\n }\n};\n","// Credits: https://codesandbox.io/p/sandbox/radix-toast-stack-dpfx5f\n\nimport { Button } from \"@/components/button\";\nimport { Heading } from \"@/components/heading\";\nimport { IconButton } from \"@/components/icon-button\";\nimport { Text } from \"@/components/text\";\nimport {\n checkmark,\n error,\n toastClose,\n toastInner,\n toastRoot,\n toastViewport,\n} from \"@/theme/styles/toast.css\";\nimport { Cross2Icon } from \"@radix-ui/react-icons\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport * as React from \"react\";\n\ntype Toast = {\n title?: string;\n description?: string;\n status: \"default\" | \"error\" | \"success\";\n action?: React.ReactNode;\n} & ToastPrimitives.ToastProps;\n\ntype AddToastPayload = Omit<Toast, \"status\">;\n\ntype ToastContextProps = ((payload: AddToastPayload) => void) & {\n error: (payload: AddToastPayload) => void;\n success: (payload: AddToastPayload) => void;\n};\n\nconst defaultContext: ToastContextProps = Object.assign(\n () => {\n // TODO: something about needs to be in a provider\n },\n {\n success: () => {\n // TODO: something about needs to be in a provider\n },\n error: () => {\n // TODO: something about needs to be in a provider\n },\n },\n);\n\nconst ToastContext = React.createContext(defaultContext);\n\nexport const useToast = () => React.useContext(ToastContext) ?? defaultContext;\n\ntype ToastContextImplProps = {\n toastElementsMapRef: React.RefObject<Map<string, HTMLLIElement> | null>;\n sortToasts: () => void;\n};\n\nconst toastElementsMapRef = React.createRef<Map<string, HTMLLIElement>>();\n\nconst defaultToastImpl: ToastContextImplProps = {\n toastElementsMapRef,\n sortToasts: () => {},\n};\n\nconst ToastContextImpl = React.createContext(defaultToastImpl);\n\nconst ANIMATION_OUT_DURATION = 350;\n\nexport const ToastProvider = ({\n children,\n ...props\n}: ToastPrimitives.ToastProviderProps) => {\n const [toasts, setToasts] = React.useState<Map<string, Toast>>(new Map());\n const toastElementsMapRef = React.useRef<Map<string, HTMLLIElement>>(\n new Map(),\n );\n const viewportRef = React.useRef<HTMLOListElement>(null);\n\n const sortToasts = React.useCallback(() => {\n const toastElements = Array.from(toastElementsMapRef.current).reverse();\n const heights: number[] = [];\n\n toastElements.forEach(([, toast], index) => {\n if (!toast) return;\n const height = toast.clientHeight;\n heights.push(height);\n const frontToastHeight = heights[0];\n toast.setAttribute(\"data-front\", `${index === 0}`);\n toast.setAttribute(\"data-hidden\", `${index > 2}`);\n toast.style.setProperty(\"--index\", `${index}`);\n toast.style.setProperty(\"--height\", `${height}px`);\n toast.style.setProperty(\"--front-height\", `${frontToastHeight}px`);\n const hoverOffsetY = heights\n .slice(0, index)\n .reduce((res, next) => (res += next), 0);\n toast.style.setProperty(\"--hover-offset-y\", `-${hoverOffsetY}px`);\n });\n }, []);\n\n const handleAddToast = React.useCallback((toast: Toast) => {\n setToasts((currentToasts) => {\n const newMap = new Map(currentToasts);\n newMap.set(String(Date.now()), { ...toast, open: true });\n\n return newMap;\n });\n }, []);\n\n const handleRemoveToast = React.useCallback((key: string) => {\n setToasts((currentToasts) => {\n const newMap = new Map(currentToasts);\n newMap.delete(key);\n\n return newMap;\n });\n }, []);\n\n const handleDispatchDefault = React.useCallback(\n (payload: AddToastPayload) =>\n handleAddToast({ ...payload, status: \"default\" }),\n [handleAddToast],\n );\n\n const handleDispatchSuccess = React.useCallback(\n (payload: AddToastPayload) =>\n handleAddToast({ ...payload, status: \"success\" }),\n [handleAddToast],\n );\n\n const handleDispatchError = React.useCallback(\n (payload: AddToastPayload) =>\n // default duration of 10 mins for `status: \"error\"`.\n handleAddToast({ duration: 60 * 1000 * 10, ...payload, status: \"error\" }),\n [handleAddToast],\n );\n\n React.useEffect(() => {\n const viewport = viewportRef.current;\n\n if (viewport) {\n const handleFocus = () => {\n toastElementsMapRef.current.forEach((toast) => {\n toast.setAttribute(\"data-hovering\", \"true\");\n });\n };\n\n // @ts-expect-error TODO: get the correct type\n const handleBlur = (event) => {\n if (!viewport.contains(event.target) || viewport === event.target) {\n toastElementsMapRef.current.forEach((toast) => {\n toast.setAttribute(\"data-hovering\", \"false\");\n });\n }\n };\n\n viewport.addEventListener(\"pointermove\", handleFocus);\n viewport.addEventListener(\"pointerleave\", handleBlur);\n viewport.addEventListener(\"focusin\", handleFocus);\n viewport.addEventListener(\"focusout\", handleBlur);\n\n return () => {\n viewport.removeEventListener(\"pointermove\", handleFocus);\n viewport.removeEventListener(\"pointerleave\", handleBlur);\n viewport.removeEventListener(\"focusin\", handleFocus);\n viewport.removeEventListener(\"focusout\", handleBlur);\n };\n }\n }, []);\n\n const toastApi = React.useMemo(\n () =>\n Object.assign(handleDispatchDefault, {\n success: handleDispatchSuccess,\n error: handleDispatchError,\n }),\n [handleDispatchDefault, handleDispatchSuccess, handleDispatchError],\n );\n\n return (\n <ToastContext.Provider value={toastApi}>\n <ToastContextImpl.Provider\n value={React.useMemo(\n () => ({\n toastElementsMapRef,\n sortToasts,\n }),\n [sortToasts],\n )}\n >\n <ToastPrimitives.Provider {...props}>\n {children}\n {Array.from(toasts).map(([key, toast]) => (\n <Toast\n key={key}\n id={key}\n toast={toast}\n onOpenChange={(open) => {\n if (!open) {\n toastElementsMapRef.current.delete(key);\n sortToasts();\n\n if (!open) {\n setTimeout(() => {\n handleRemoveToast(key);\n }, ANIMATION_OUT_DURATION);\n }\n }\n }}\n />\n ))}\n <ToastPrimitives.Viewport\n ref={viewportRef}\n className={toastViewport}\n />\n </ToastPrimitives.Provider>\n </ToastContextImpl.Provider>\n </ToastContext.Provider>\n );\n};\n\nconst Toast = (props: ToastPrimitives.ToastProps & { toast: Toast }) => {\n const { onOpenChange, toast, id, ...toastProps } = props;\n const ref = React.useRef<HTMLLIElement>(null);\n const context = React.useContext(ToastContextImpl);\n const { sortToasts, toastElementsMapRef } = context;\n const toastElementsMap = toastElementsMapRef.current;\n\n React.useLayoutEffect(() => {\n if (ref.current) {\n toastElementsMap?.set(id as string, ref.current);\n sortToasts();\n }\n }, [id, sortToasts, toastElementsMap]);\n\n return (\n <ToastPrimitives.Root\n {...toastProps}\n ref={ref}\n type={toast.type}\n duration={toast.duration}\n className={toastRoot}\n onOpenChange={onOpenChange}\n >\n <div className={toastInner} data-status={toast.status}>\n <ToastStatusIcon status={toast.status} />\n <ToastPrimitives.Title asChild style={{ gridArea: \"title\" }}>\n <Heading level=\"6\">{toast.title}</Heading>\n </ToastPrimitives.Title>\n <ToastPrimitives.Description\n asChild\n style={{ gridArea: \"description\" }}\n >\n <Text color=\"subtle\" size=\"2\">\n {toast.description}\n </Text>\n </ToastPrimitives.Description>\n {toast.action}\n <ToastPrimitives.Close\n aria-label=\"Close\"\n asChild\n className={toastClose}\n >\n <IconButton variant=\"outline\">\n <Cross2Icon />\n </IconButton>\n </ToastPrimitives.Close>\n </div>\n </ToastPrimitives.Root>\n );\n};\n\nconst ToastStatusIcon = ({ status }: { status: Toast[\"status\"] }) => {\n return status !== \"default\" ? (\n <div style={{ gridArea: \"icon\", alignSelf: \"start\" }}>\n {status === \"success\" && <CheckmarkIcon />}\n {status === \"error\" && <ErrorIcon />}\n </div>\n ) : null;\n};\n\nconst ErrorIcon = () => <div aria-hidden className={error} />;\nconst CheckmarkIcon = () => <div aria-hidden className={checkmark} />;\n\nexport const ToastAction = ({\n ...props\n}: Omit<ToastPrimitives.ToastActionProps, \"asChild\">) => {\n return (\n <ToastPrimitives.Action\n {...props}\n style={{ gridArea: \"action\", ...props.style }}\n asChild\n >\n <Button size=\"1\" variant=\"outline\">\n {props.children}\n </Button>\n </ToastPrimitives.Action>\n );\n};\n"],"mappings":"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","names":["storageKey","theme","colorScheme","defaultTheme","systemThemes","classes","getSystemTheme","React","jsx","jsxs","defaultContext","toastElementsMapRef"]}