use-luminance
Version:
A React hook for using luminance,support React18
31 lines • 1.37 kB
JavaScript
import { useCallback, useEffect, useState, useDeferredValue } from "react";
function useLuminance(bgColor) {
var _a = useState(0), luminance = _a[0], setLuminance = _a[1];
var deferredColor = useDeferredValue(bgColor);
var hexToRgb = useCallback(function (bgColor) {
var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(bgColor);
if (result) {
var r = parseInt(result[1], 16);
var g = parseInt(result[2], 16);
var b = parseInt(result[3], 16);
return [r, g, b];
}
else {
return [255, 255, 255];
}
}, []);
useEffect(function () {
var _a;
var rgb = [];
if (deferredColor === null || deferredColor === void 0 ? void 0 : deferredColor.includes("rgb")) {
rgb = (_a = deferredColor === null || deferredColor === void 0 ? void 0 : deferredColor.match(/\d+(\.\d+)?/g)) === null || _a === void 0 ? void 0 : _a.slice(0, 3);
}
else if (deferredColor === null || deferredColor === void 0 ? void 0 : deferredColor.includes("#")) {
rgb = hexToRgb(deferredColor);
}
setLuminance(+rgb[0] * 0.212656 + +rgb[1] * 0.715158 + +rgb[2] * 0.072186);
}, [deferredColor, hexToRgb]);
return luminance / 255;
}
export default useLuminance;
//# sourceMappingURL=useLuminance.js.map