@ngrok/mantle 0.0.2 → 0.0.3
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/dts/theme-provider/index.d.ts +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.js +41 -20
- package/dist/tailwind.preset.js +1 -1
- package/package.json +2 -2
|
@@ -37,9 +37,9 @@ declare function useTheme(): ThemeProviderState;
|
|
|
37
37
|
* determineThemeFromMediaQuery returns the theme that should be used based on the user's media query preferences.
|
|
38
38
|
* @private
|
|
39
39
|
*/
|
|
40
|
-
export declare function determineThemeFromMediaQuery({ prefersDarkMode,
|
|
40
|
+
export declare function determineThemeFromMediaQuery({ prefersDarkMode, prefersHighContrast, }: {
|
|
41
41
|
prefersDarkMode: boolean;
|
|
42
|
-
|
|
42
|
+
prefersHighContrast: boolean;
|
|
43
43
|
}): "dark" | "light" | "light-high-contrast" | "dark-high-contrast";
|
|
44
44
|
/**
|
|
45
45
|
* PreventWrongThemeFlash is a React component that prevents the wrong theme from flashing on initial page load.
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @ngrok/mantle v0.0.
|
|
2
|
+
* @ngrok/mantle v0.0.3
|
|
3
3
|
*
|
|
4
4
|
* Copyright (c) ngrok.
|
|
5
5
|
*
|
|
@@ -1193,15 +1193,19 @@ var isBrowser = function isBrowser() {
|
|
|
1193
1193
|
return typeof window !== "undefined";
|
|
1194
1194
|
};
|
|
1195
1195
|
/**
|
|
1196
|
-
*
|
|
1196
|
+
* Gets the stored theme from localStorage or returns the default theme if no theme is stored.
|
|
1197
1197
|
*/
|
|
1198
|
-
function
|
|
1199
|
-
var
|
|
1198
|
+
function getStoredTheme(storageKey, defaultTheme) {
|
|
1199
|
+
var _defaultTheme;
|
|
1200
|
+
if (defaultTheme === void 0) {
|
|
1201
|
+
defaultTheme = "system";
|
|
1202
|
+
}
|
|
1203
|
+
var fallbackTheme = (_defaultTheme = defaultTheme) != null ? _defaultTheme : "system";
|
|
1200
1204
|
if (isBrowser()) {
|
|
1201
|
-
var
|
|
1202
|
-
return (
|
|
1205
|
+
var storedTheme = window.localStorage.getItem(storageKey);
|
|
1206
|
+
return isTheme(storedTheme) ? storedTheme : fallbackTheme;
|
|
1203
1207
|
}
|
|
1204
|
-
return
|
|
1208
|
+
return fallbackTheme;
|
|
1205
1209
|
}
|
|
1206
1210
|
/**
|
|
1207
1211
|
* ThemeProvider is a React Context Provider that provides the current theme and a function to set the theme.
|
|
@@ -1213,26 +1217,43 @@ function ThemeProvider(_ref) {
|
|
|
1213
1217
|
_ref$storageKey = _ref.storageKey,
|
|
1214
1218
|
storageKey = _ref$storageKey === void 0 ? DEFAULT_STORAGE_KEY : _ref$storageKey;
|
|
1215
1219
|
var _useState = useState(function () {
|
|
1216
|
-
var initialTheme =
|
|
1220
|
+
var initialTheme = getStoredTheme(storageKey, defaultTheme);
|
|
1217
1221
|
applyTheme(initialTheme);
|
|
1218
1222
|
return initialTheme;
|
|
1219
1223
|
}),
|
|
1220
1224
|
theme = _useState[0],
|
|
1221
1225
|
setTheme = _useState[1];
|
|
1222
1226
|
useEffect(function () {
|
|
1223
|
-
var storedTheme =
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1227
|
+
var storedTheme = getStoredTheme(storageKey, defaultTheme);
|
|
1228
|
+
setTheme(storedTheme);
|
|
1229
|
+
applyTheme(storedTheme);
|
|
1230
|
+
}, [defaultTheme, storageKey]);
|
|
1231
|
+
useEffect(function () {
|
|
1232
|
+
var prefersDarkMql = window.matchMedia(prefersDarkModeMediaQuery);
|
|
1233
|
+
var prefersHighContrastMql = window.matchMedia(prefersHighContrastMediaQuery);
|
|
1234
|
+
var onChange = function onChange() {
|
|
1235
|
+
var storedTheme = getStoredTheme(storageKey, defaultTheme);
|
|
1236
|
+
// If the stored theme is not "system", then the user has explicitly set a theme and we should not
|
|
1237
|
+
// automatically change the theme when the user's system preferences change.
|
|
1238
|
+
if (storedTheme !== "system") {
|
|
1239
|
+
return;
|
|
1240
|
+
}
|
|
1241
|
+
applyTheme("system");
|
|
1242
|
+
};
|
|
1243
|
+
prefersDarkMql.addEventListener("change", onChange);
|
|
1244
|
+
prefersHighContrastMql.addEventListener("change", onChange);
|
|
1245
|
+
return function () {
|
|
1246
|
+
prefersDarkMql.removeEventListener("change", onChange);
|
|
1247
|
+
prefersHighContrastMql.removeEventListener("change", onChange);
|
|
1248
|
+
};
|
|
1249
|
+
}, [defaultTheme, storageKey]);
|
|
1229
1250
|
var value = useMemo(function () {
|
|
1230
1251
|
return [theme, function (theme) {
|
|
1231
1252
|
window.localStorage.setItem(storageKey, theme);
|
|
1232
1253
|
setTheme(theme);
|
|
1233
1254
|
applyTheme(theme);
|
|
1234
1255
|
}];
|
|
1235
|
-
}, [
|
|
1256
|
+
}, [storageKey, theme]);
|
|
1236
1257
|
return jsx(ThemeProviderContext.Provider, {
|
|
1237
1258
|
value: value,
|
|
1238
1259
|
children: children
|
|
@@ -1259,10 +1280,10 @@ function applyTheme(theme) {
|
|
|
1259
1280
|
var htmlElement = window.document.documentElement;
|
|
1260
1281
|
(_htmlElement$classLis = htmlElement.classList).remove.apply(_htmlElement$classLis, themes);
|
|
1261
1282
|
var prefersDarkMode = window.matchMedia(prefersDarkModeMediaQuery).matches;
|
|
1262
|
-
var
|
|
1283
|
+
var prefersHighContrast = window.matchMedia(prefersHighContrastMediaQuery).matches;
|
|
1263
1284
|
var newTheme = theme === "system" ? determineThemeFromMediaQuery({
|
|
1264
1285
|
prefersDarkMode: prefersDarkMode,
|
|
1265
|
-
|
|
1286
|
+
prefersHighContrast: prefersHighContrast
|
|
1266
1287
|
}) : theme;
|
|
1267
1288
|
htmlElement.classList.add(newTheme);
|
|
1268
1289
|
htmlElement.dataset.theme = newTheme;
|
|
@@ -1273,8 +1294,8 @@ function applyTheme(theme) {
|
|
|
1273
1294
|
*/
|
|
1274
1295
|
function determineThemeFromMediaQuery(_ref2) {
|
|
1275
1296
|
var prefersDarkMode = _ref2.prefersDarkMode,
|
|
1276
|
-
|
|
1277
|
-
if (
|
|
1297
|
+
prefersHighContrast = _ref2.prefersHighContrast;
|
|
1298
|
+
if (prefersHighContrast) {
|
|
1278
1299
|
return prefersDarkMode ? "dark-high-contrast" : "light-high-contrast";
|
|
1279
1300
|
}
|
|
1280
1301
|
return prefersDarkMode ? "dark" : "light";
|
|
@@ -1290,7 +1311,7 @@ var PreventWrongThemeFlash = function PreventWrongThemeFlash(_ref3) {
|
|
|
1290
1311
|
storageKey = _ref3$storageKey === void 0 ? DEFAULT_STORAGE_KEY : _ref3$storageKey;
|
|
1291
1312
|
return jsx("script", {
|
|
1292
1313
|
dangerouslySetInnerHTML: {
|
|
1293
|
-
__html: ("\n(function() {\n\tconst themes = " + JSON.stringify(themes) + ";\n\tconst isTheme = (value) => typeof value === \"string\" && themes.includes(value);\n\tconst fallbackTheme = \"" + defaultTheme + "\" ?? \"system\";\n\tconst maybeStoredTheme = window.localStorage.getItem(\"" + storageKey + "\");\n\tconst
|
|
1314
|
+
__html: ("\n(function() {\n\tconst themes = " + JSON.stringify(themes) + ";\n\tconst isTheme = (value) => typeof value === \"string\" && themes.includes(value);\n\tconst fallbackTheme = \"" + defaultTheme + "\" ?? \"system\";\n\tconst maybeStoredTheme = window.localStorage.getItem(\"" + storageKey + "\");\n\tconst hasStoredTheme = isTheme(maybeStoredTheme);\n\tif (!hasStoredTheme) {\n\t\twindow.localStorage.setItem(\"" + storageKey + "\", fallbackTheme);\n\t}\n\tconst themePreference = hasStoredTheme ? maybeStoredTheme : fallbackTheme;\n\tconst prefersDarkMode = window.matchMedia(\"" + prefersDarkModeMediaQuery + "\").matches;\n\tconst prefersHighContrast = window.matchMedia(\"" + prefersHighContrastMediaQuery + "\").matches;\n\tlet initialTheme = themePreference;\n\tif (initialTheme === \"system\") {\n\t\tif (prefersHighContrast) {\n\t\t\tinitialTheme = prefersDarkMode ? \"dark-high-contrast\" : \"light-high-contrast\";\n\t\t} else {\n\t\t\tinitialTheme = prefersDarkMode ? \"dark\" : \"light\";\n\t\t}\n\t}\n\tconst htmlElement = document.documentElement;\n\thtmlElement.classList.remove(...themes);\n\thtmlElement.classList.add(initialTheme);\n\thtmlElement.dataset.theme = initialTheme;\n})();\n").trim()
|
|
1294
1315
|
}
|
|
1295
1316
|
});
|
|
1296
1317
|
};
|
package/dist/tailwind.preset.js
CHANGED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "mantle is ngrok's UI library and design system.",
|
|
4
4
|
"author": "ngrok",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "0.0.
|
|
6
|
+
"version": "0.0.3",
|
|
7
7
|
"homepage": "https://mantle.ngrok.com",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
@@ -98,7 +98,7 @@
|
|
|
98
98
|
"prettier-plugin-tailwindcss": "0.5.7",
|
|
99
99
|
"react": "18.2.0",
|
|
100
100
|
"react-dom": "18.2.0",
|
|
101
|
-
"rollup": "4.6.
|
|
101
|
+
"rollup": "4.6.1",
|
|
102
102
|
"rollup-plugin-copy": "3.5.0",
|
|
103
103
|
"rollup-plugin-dts": "6.1.0",
|
|
104
104
|
"rollup-plugin-extensions": "0.1.0",
|