@nayhoo/ui 0.9.6 → 0.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-DMFP5JKO.mjs → chunk-2BB77GZV.mjs} +3 -3
- package/dist/{chunk-T3GW2EMR.mjs → chunk-2TMFRLMM.mjs} +1 -1
- package/dist/{chunk-T3GW2EMR.mjs.map → chunk-2TMFRLMM.mjs.map} +1 -1
- package/dist/{chunk-ZNKUE6YY.mjs → chunk-3STUDMUG.mjs} +1 -1
- package/dist/{chunk-ZNKUE6YY.mjs.map → chunk-3STUDMUG.mjs.map} +1 -1
- package/dist/{chunk-QMCIR3TI.mjs → chunk-4C5Q6VK2.mjs} +3 -3
- package/dist/{chunk-64TEKDKL.mjs → chunk-52RVZRC4.mjs} +2 -2
- package/dist/{chunk-G4YCF3A2.mjs → chunk-AIOSEM6O.mjs} +1 -1
- package/dist/{chunk-G4YCF3A2.mjs.map → chunk-AIOSEM6O.mjs.map} +1 -1
- package/dist/{chunk-QCNMRBLN.mjs → chunk-BXK6WSNP.mjs} +1 -1
- package/dist/{chunk-QCNMRBLN.mjs.map → chunk-BXK6WSNP.mjs.map} +1 -1
- package/dist/chunk-CYDWEPFL.mjs +1 -0
- package/dist/chunk-CYDWEPFL.mjs.map +1 -0
- package/dist/{chunk-QEBSZEY2.mjs → chunk-HFMY3EF3.mjs} +1 -1
- package/dist/{chunk-QEBSZEY2.mjs.map → chunk-HFMY3EF3.mjs.map} +1 -1
- package/dist/{chunk-QBPEU3GK.mjs → chunk-JSUIFF36.mjs} +1 -1
- package/dist/{chunk-QBPEU3GK.mjs.map → chunk-JSUIFF36.mjs.map} +1 -1
- package/dist/{chunk-DC6VQ7BG.mjs → chunk-LF6VSYRD.mjs} +2 -2
- package/dist/{chunk-IEZTYE5I.mjs → chunk-M6OYH5UA.mjs} +1 -1
- package/dist/{chunk-IEZTYE5I.mjs.map → chunk-M6OYH5UA.mjs.map} +1 -1
- package/dist/{chunk-GGJKRS5V.mjs → chunk-PIOIL3MF.mjs} +2 -2
- package/dist/{chunk-MDAIXJU2.mjs → chunk-QCTQCZQV.mjs} +1 -1
- package/dist/{chunk-MDAIXJU2.mjs.map → chunk-QCTQCZQV.mjs.map} +1 -1
- package/dist/{chunk-3HV65JYW.mjs → chunk-RD6HAWH5.mjs} +1 -1
- package/dist/{chunk-3HV65JYW.mjs.map → chunk-RD6HAWH5.mjs.map} +1 -1
- package/dist/{chunk-HRXZ3ELS.mjs → chunk-SC6WBBXG.mjs} +1 -1
- package/dist/{chunk-HRXZ3ELS.mjs.map → chunk-SC6WBBXG.mjs.map} +1 -1
- package/dist/{chunk-YO4LZRGU.mjs → chunk-SI36SYJ2.mjs} +1 -1
- package/dist/{chunk-YO4LZRGU.mjs.map → chunk-SI36SYJ2.mjs.map} +1 -1
- package/dist/{chunk-PGCB7RGD.mjs → chunk-TPPKQCXG.mjs} +1 -1
- package/dist/{chunk-PGCB7RGD.mjs.map → chunk-TPPKQCXG.mjs.map} +1 -1
- package/dist/{chunk-6UOQ737G.mjs → chunk-UVLWN6WJ.mjs} +1 -1
- package/dist/{chunk-6UOQ737G.mjs.map → chunk-UVLWN6WJ.mjs.map} +1 -1
- package/dist/{chunk-DERDJR33.mjs → chunk-VSQHQBZX.mjs} +1 -1
- package/dist/chunk-VSQHQBZX.mjs.map +1 -0
- package/dist/{chunk-RYAY35UB.mjs → chunk-WUIQQ7C2.mjs} +2 -2
- package/dist/{chunk-IQLI5J2V.mjs → chunk-YZNF3EIN.mjs} +1 -1
- package/dist/{chunk-IQLI5J2V.mjs.map → chunk-YZNF3EIN.mjs.map} +1 -1
- package/dist/components/avatar.css +1 -1
- package/dist/components/avatar.css.map +1 -1
- package/dist/components/avatar.js.map +1 -1
- package/dist/components/avatar.mjs +1 -1
- package/dist/components/badge.css +1 -1
- package/dist/components/badge.css.map +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/badge.mjs +1 -1
- package/dist/components/button.css +2 -2
- package/dist/components/button.css.map +1 -1
- package/dist/components/button.js.map +1 -1
- package/dist/components/button.mjs +4 -4
- package/dist/components/checkbox.css +1 -1
- package/dist/components/checkbox.css.map +1 -1
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/checkbox.mjs +1 -1
- package/dist/components/dropdown-menu.css +3 -2
- package/dist/components/dropdown-menu.css.map +1 -1
- package/dist/components/dropdown-menu.js.map +1 -1
- package/dist/components/dropdown-menu.mjs +3 -3
- package/dist/components/flex.css +1 -1
- package/dist/components/flex.css.map +1 -1
- package/dist/components/flex.js.map +1 -1
- package/dist/components/flex.mjs +2 -2
- package/dist/components/grid.css +1 -1
- package/dist/components/grid.css.map +1 -1
- package/dist/components/grid.js.map +1 -1
- package/dist/components/grid.mjs +1 -1
- package/dist/components/heading.css +1 -1
- package/dist/components/heading.css.map +1 -1
- package/dist/components/heading.js.map +1 -1
- package/dist/components/heading.mjs +2 -2
- package/dist/components/icon-button.css +2 -2
- package/dist/components/icon-button.css.map +1 -1
- package/dist/components/icon-button.js.map +1 -1
- package/dist/components/icon-button.mjs +4 -4
- package/dist/components/label.css +1 -1
- package/dist/components/label.css.map +1 -1
- package/dist/components/label.js.map +1 -1
- package/dist/components/label.mjs +1 -1
- package/dist/components/link.css +1 -1
- package/dist/components/link.css.map +1 -1
- package/dist/components/link.js.map +1 -1
- package/dist/components/link.mjs +1 -1
- package/dist/components/menu.css +3 -2
- package/dist/components/menu.css.map +1 -1
- package/dist/components/menu.js.map +1 -1
- package/dist/components/menu.mjs +3 -3
- package/dist/components/paragraph.css +1 -1
- package/dist/components/paragraph.css.map +1 -1
- package/dist/components/paragraph.js.map +1 -1
- package/dist/components/paragraph.mjs +1 -1
- package/dist/components/popover.css +58 -0
- package/dist/components/popover.css.map +1 -0
- package/dist/components/popover.d.mts +11 -0
- package/dist/components/popover.d.ts +11 -0
- package/dist/components/popover.js +76 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/popover.mjs +39 -0
- package/dist/components/popover.mjs.map +1 -0
- package/dist/components/select.css +110 -58
- package/dist/components/select.css.map +1 -1
- package/dist/components/select.d.mts +2 -3
- package/dist/components/select.d.ts +2 -3
- package/dist/components/select.js +65 -38
- package/dist/components/select.js.map +1 -1
- package/dist/components/select.mjs +15 -25
- package/dist/components/select.mjs.map +1 -1
- package/dist/components/skeleton.css +1 -1
- package/dist/components/skeleton.css.map +1 -1
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/skeleton.mjs +1 -1
- package/dist/components/spinner.css +1 -1
- package/dist/components/spinner.css.map +1 -1
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/spinner.mjs +2 -2
- package/dist/components/switch.css +1 -1
- package/dist/components/switch.css.map +1 -1
- package/dist/components/switch.js.map +1 -1
- package/dist/components/switch.mjs +1 -1
- package/dist/components/text-field.css +1 -1
- package/dist/components/text-field.css.map +1 -1
- package/dist/components/text-field.js.map +1 -1
- package/dist/components/text-field.mjs +1 -1
- package/dist/components/text.css +1 -1
- package/dist/components/text.css.map +1 -1
- package/dist/components/text.js.map +1 -1
- package/dist/components/text.mjs +2 -2
- package/dist/components/tooltip.css +1 -1
- package/dist/components/tooltip.css.map +1 -1
- package/dist/components/tooltip.js.map +1 -1
- package/dist/components/tooltip.mjs +2 -2
- package/dist/providers/index.css +8 -8
- package/dist/providers/index.css.map +1 -1
- package/dist/providers/index.d.mts +23 -14
- package/dist/providers/index.d.ts +23 -14
- package/dist/providers/index.js +151 -77
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/index.mjs +159 -91
- package/dist/providers/index.mjs.map +1 -1
- package/dist/theme/index.css +21 -20
- package/dist/theme/index.css.map +1 -1
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/index.mjs +18 -18
- package/dist/theme/index.mjs.map +1 -1
- package/dist/utils/index.mjs +1 -0
- package/package.json +6 -1
- package/dist/chunk-DERDJR33.mjs.map +0 -1
- /package/dist/{chunk-DMFP5JKO.mjs.map → chunk-2BB77GZV.mjs.map} +0 -0
- /package/dist/{chunk-QMCIR3TI.mjs.map → chunk-4C5Q6VK2.mjs.map} +0 -0
- /package/dist/{chunk-64TEKDKL.mjs.map → chunk-52RVZRC4.mjs.map} +0 -0
- /package/dist/{chunk-DC6VQ7BG.mjs.map → chunk-LF6VSYRD.mjs.map} +0 -0
- /package/dist/{chunk-GGJKRS5V.mjs.map → chunk-PIOIL3MF.mjs.map} +0 -0
- /package/dist/{chunk-RYAY35UB.mjs.map → chunk-WUIQQ7C2.mjs.map} +0 -0
package/dist/providers/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Text
|
|
3
|
-
} from "../chunk-
|
|
3
|
+
} from "../chunk-WUIQQ7C2.mjs";
|
|
4
4
|
import {
|
|
5
5
|
checkmark,
|
|
6
6
|
darkTheme,
|
|
@@ -10,124 +10,170 @@ import {
|
|
|
10
10
|
toastInner,
|
|
11
11
|
toastRoot,
|
|
12
12
|
toastViewport
|
|
13
|
-
} from "../chunk-
|
|
13
|
+
} from "../chunk-BXK6WSNP.mjs";
|
|
14
14
|
import {
|
|
15
15
|
Heading
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-PIOIL3MF.mjs";
|
|
17
17
|
import {
|
|
18
18
|
IconButton
|
|
19
|
-
} from "../chunk-
|
|
20
|
-
import "../chunk-
|
|
21
|
-
import "../chunk-
|
|
19
|
+
} from "../chunk-2BB77GZV.mjs";
|
|
20
|
+
import "../chunk-JSUIFF36.mjs";
|
|
21
|
+
import "../chunk-AIOSEM6O.mjs";
|
|
22
22
|
import {
|
|
23
23
|
Button
|
|
24
|
-
} from "../chunk-
|
|
25
|
-
import "../chunk-
|
|
26
|
-
import "../chunk-
|
|
27
|
-
import "../chunk-
|
|
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
|
-
|
|
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
|
|
72
|
-
|
|
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
|
|
79
|
-
|
|
80
|
-
|
|
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
|
-
|
|
85
|
-
|
|
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
|
-
|
|
88
|
-
|
|
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;
|
|
89
88
|
}, []);
|
|
90
|
-
|
|
89
|
+
const setTheme = React.useCallback((value) => {
|
|
90
|
+
setThemeState(value);
|
|
91
|
+
saveToLS(storageKey, value);
|
|
92
|
+
}, []);
|
|
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
|
-
|
|
93
|
-
|
|
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
|
-
|
|
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
|
-
|
|
139
|
+
ThemeScript,
|
|
113
140
|
{
|
|
114
|
-
|
|
115
|
-
|
|
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
|
+
classes
|
|
155
|
+
]).slice(1, -1);
|
|
156
|
+
return /* @__PURE__ */ jsx(
|
|
157
|
+
"script",
|
|
158
|
+
{
|
|
159
|
+
...scriptProps,
|
|
160
|
+
suppressHydrationWarning: true,
|
|
161
|
+
dangerouslySetInnerHTML: {
|
|
162
|
+
__html: `(${script.toString()})(${scriptArgs})`
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
);
|
|
168
|
+
ThemeScript.displayName = "ThemeScript";
|
|
123
169
|
var getTheme = () => {
|
|
124
|
-
if (isServer) return
|
|
125
|
-
let
|
|
170
|
+
if (isServer) return void 0;
|
|
171
|
+
let theme;
|
|
126
172
|
try {
|
|
127
|
-
|
|
173
|
+
theme = localStorage.getItem(storageKey) || void 0;
|
|
128
174
|
} catch (e) {
|
|
129
175
|
}
|
|
130
|
-
return
|
|
176
|
+
return theme !== void 0 && isTheme(theme) ? theme : defaultTheme;
|
|
131
177
|
};
|
|
132
178
|
var getSystemTheme = (e) => {
|
|
133
179
|
if (!e) e = window.matchMedia(MEDIA);
|
|
@@ -135,12 +181,27 @@ var getSystemTheme = (e) => {
|
|
|
135
181
|
const systemTheme = isDark ? "dark" : "light";
|
|
136
182
|
return systemTheme;
|
|
137
183
|
};
|
|
138
|
-
var
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
184
|
+
var isTheme = (value) => themes.some((theme) => theme === value);
|
|
185
|
+
var isSystemTheme = (value) => systemThemes.some((theme) => theme === value);
|
|
186
|
+
var script = () => {
|
|
187
|
+
const el = document.documentElement;
|
|
188
|
+
function updateDOM(theme) {
|
|
189
|
+
el.classList.remove(...Object.values(classes));
|
|
190
|
+
el.classList.add(classes[theme]);
|
|
191
|
+
setColorScheme(theme);
|
|
192
|
+
}
|
|
193
|
+
function setColorScheme(theme) {
|
|
194
|
+
if (systemThemes.some((systemTheme) => systemTheme === theme)) {
|
|
195
|
+
el.style.colorScheme = theme;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
try {
|
|
199
|
+
const themeName = localStorage.getItem(storageKey) || defaultTheme;
|
|
200
|
+
const isSystem = themeName === "system";
|
|
201
|
+
const theme = isSystem || !isSystemTheme(themeName) ? getSystemTheme() : themeName;
|
|
202
|
+
updateDOM(theme);
|
|
203
|
+
} catch (e) {
|
|
142
204
|
}
|
|
143
|
-
return resolved;
|
|
144
205
|
};
|
|
145
206
|
|
|
146
207
|
// src/providers/toast-provider.tsx
|
|
@@ -148,14 +209,21 @@ import { Cross2Icon } from "@radix-ui/react-icons";
|
|
|
148
209
|
import * as ToastPrimitives from "@radix-ui/react-toast";
|
|
149
210
|
import * as React2 from "react";
|
|
150
211
|
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
151
|
-
var
|
|
152
|
-
|
|
153
|
-
success: () => {
|
|
212
|
+
var defaultContext2 = Object.assign(
|
|
213
|
+
() => {
|
|
154
214
|
},
|
|
155
|
-
|
|
215
|
+
{
|
|
216
|
+
success: () => {
|
|
217
|
+
},
|
|
218
|
+
error: () => {
|
|
219
|
+
}
|
|
156
220
|
}
|
|
157
|
-
|
|
158
|
-
var ToastContext = React2.createContext(
|
|
221
|
+
);
|
|
222
|
+
var ToastContext = React2.createContext(defaultContext2);
|
|
223
|
+
var useToast = () => {
|
|
224
|
+
var _a;
|
|
225
|
+
return (_a = React2.useContext(ToastContext)) != null ? _a : defaultContext2;
|
|
226
|
+
};
|
|
159
227
|
var toastElementsMapRef = React2.createRef();
|
|
160
228
|
var defaultToastImpl = {
|
|
161
229
|
toastElementsMapRef,
|
|
@@ -363,10 +431,10 @@ var ToastAction = ({
|
|
|
363
431
|
);
|
|
364
432
|
};
|
|
365
433
|
export {
|
|
366
|
-
ThemeContext,
|
|
367
434
|
ThemeProvider,
|
|
368
435
|
ToastAction,
|
|
369
|
-
|
|
370
|
-
|
|
436
|
+
ToastProvider,
|
|
437
|
+
useTheme,
|
|
438
|
+
useToast
|
|
371
439
|
};
|
|
372
440
|
//# 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 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\nconst isSystemTheme = (value: string): value is SystemTheme =>\n systemThemes.some((theme) => theme === value);\n\n// Credits: https://github.com/pacocoursey/next-themes/blob/main/next-themes/src/script.ts\nconst script = () => {\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 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","React","jsx","jsxs","defaultContext","toastElementsMapRef"]}
|