Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@ribbon-studios/react-utils

Package Overview
Dependencies
Maintainers
2
Versions
15
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@ribbon-studios/react-utils - npm Package Compare versions

Comparing version
4.2.0
to
4.2.1
+1
-0
dist/hooks/index.d.ts

@@ -6,2 +6,3 @@ import { default as classNames } from 'classnames';

export * from './use-subtle-crypto';
export * from './use-theme';
export { classNames };

@@ -62,2 +62,37 @@ "use strict";

}
function createThemeHook(options) {
const hook = () => {
const [mode, setMode] = useLocalStorage("theme", "auto");
const [theme, setTheme] = require$$0.useState(createThemeHook.getTheme(mode, options));
require$$0.useEffect(() => {
if (mode === "auto") {
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
const listener = (event) => {
setTheme(event.matches ? options.dark : options.light);
};
mediaQuery.addEventListener("change", listener);
return () => {
mediaQuery.removeEventListener("change", listener);
};
} else {
setTheme(mode);
}
}, [mode, setTheme]);
require$$0.useEffect(() => {
document.body.setAttribute("data-theme", theme);
}, [theme]);
return [mode, setMode, theme];
};
hook.$modes = [...options.themes, "auto"];
return hook;
}
((createThemeHook2) => {
function getTheme(mode, options) {
if (mode === "auto") {
return window.matchMedia("(prefers-color-scheme: dark)").matches ? options.dark : options.light;
}
return mode;
}
createThemeHook2.getTheme = getTheme;
})(createThemeHook || (createThemeHook = {}));
function toArgs(props) {

@@ -81,2 +116,3 @@ if (Array.isArray(props)) return props;

exports.$useStorage = $useStorage;
exports.createThemeHook = createThemeHook;
exports.crypto = subtleCrypto;

@@ -83,0 +119,0 @@ exports.hooked = hooked;

@@ -61,2 +61,37 @@ import { default as default2 } from "classnames";

}
function createThemeHook(options) {
const hook = () => {
const [mode, setMode] = useLocalStorage("theme", "auto");
const [theme, setTheme] = useState(createThemeHook.getTheme(mode, options));
useEffect(() => {
if (mode === "auto") {
const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)");
const listener = (event) => {
setTheme(event.matches ? options.dark : options.light);
};
mediaQuery.addEventListener("change", listener);
return () => {
mediaQuery.removeEventListener("change", listener);
};
} else {
setTheme(mode);
}
}, [mode, setTheme]);
useEffect(() => {
document.body.setAttribute("data-theme", theme);
}, [theme]);
return [mode, setMode, theme];
};
hook.$modes = [...options.themes, "auto"];
return hook;
}
((createThemeHook2) => {
function getTheme(mode, options) {
if (mode === "auto") {
return window.matchMedia("(prefers-color-scheme: dark)").matches ? options.dark : options.light;
}
return mode;
}
createThemeHook2.getTheme = getTheme;
})(createThemeHook || (createThemeHook = {}));
function toArgs(props) {

@@ -77,2 +112,3 @@ if (Array.isArray(props)) return props;

default2 as classNames,
createThemeHook,
subtleCrypto as crypto,

@@ -79,0 +115,0 @@ hooked,

+1
-1
{
"name": "@ribbon-studios/react-utils",
"description": "Collection of react utilities curated by the Ribbon Studios Team~",
"version": "4.2.0",
"version": "4.2.1",
"type": "module",

@@ -6,0 +6,0 @@ "source": "src/*.ts",

@@ -21,3 +21,3 @@ [![NPM Version][npm-version-image]][npm-url]

- [`useSessionStorage`](#usesessionstorage)
- [`useTheme`](#usetheme)
- [`createThemeHook`](#createthemehook)
- [React Router](#react-router)

@@ -24,0 +24,0 @@ - [`useLoaderData`](#useloaderdata)