UNPKG

@nestbotics/nct_frontend_common_components

Version:

A collection of reusable React components with theme management and styling utilities

255 lines (247 loc) 6.58 kB
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } import { createContext, useState, useMemo, useEffect } from "react"; import { createTheme } from "@mui/material/styles"; // color design tokens export export var tokens = function tokens(mode) { return _objectSpread({}, mode === "dark" ? { grey: { 100: "#e0e0e0", 200: "#c2c2c2", 300: "#a3a3a3", 400: "#858585", 500: "#666666", 600: "#525252", 700: "#3d3d3d", 800: "#292929", 900: "#141414" }, primary: { 100: "#d0d1d5", 200: "#a1a4ab", 300: "#727681", 400: "#1F2A40", 500: "#141b2d", 600: "#101624", 700: "#0c101b", 800: "#080b12", 900: "#040509" }, greenAccent: { 100: "#dbf5ee", 200: "#b7ebde", 300: "#94e2cd", 400: "#70d8bd", 500: "#4cceac", 600: "#3da58a", 700: "#2e7c67", 800: "#1e5245", 900: "#0f2922" }, redAccent: { 100: "#f8dcdb", 200: "#f1b9b7", 300: "#e99592", 400: "#e2726e", 500: "#db4f4a", 600: "#af3f3b", 700: "#832f2c", 800: "#58201e", 900: "#2c100f" }, blueAccent: { 100: "#e1e2fe", 200: "#c3c6fd", 300: "#a4a9fc", 400: "#868dfb", 500: "#6870fa", 600: "#535ac8", 700: "#3e4396", 800: "#2a2d64", 900: "#151632" }, purple: { 100: "#ded2e7", 200: "#bca4cf", 300: "#9b77b7", 400: "#79499f", 500: "#581c87", 600: "#46166c", 700: "#351151", 800: "#230b36", 900: "#12061b" } } : { // Here we change HexaCode Arrangements grey: { 100: "#141414", 200: "#292929", 300: "#3d3d3d", 400: "#525252", 500: "#666666", 600: "#858585", 700: "#a3a3a3", 800: "#c2c2c2", 900: "#e0e0e0" }, primary: { 100: "#040509", 200: "#080b12", 300: "#0c101b", 400: "#f2f0f0", 500: "#141b2d", 600: "#1F2A40", 700: "#727681", 800: "#a1a4ab", 900: "#d0d1d5", 950: "#fff" }, greenAccent: { 100: "#0f2922", 200: "#1e5245", 300: "#2e7c67", 400: "#3da58a", 500: "#4cceac", 600: "#70d8bd", 700: "#94e2cd", 800: "#b7ebde", 900: "#dbf5ee" }, redAccent: { 100: "#2c100f", 200: "#58201e", 300: "#832f2c", 400: "#af3f3b", 500: "#db4f4a", 600: "#e2726e", 700: "#e99592", 800: "#f1b9b7", 900: "#f8dcdb" }, blueAccent: { 100: "#151632", 200: "#2a2d64", 300: "#3e4396", 400: "#535ac8", 500: "#6870fa", 600: "#868dfb", 700: "#a4a9fc", 800: "#c3c6fd", 900: "#e1e2fe" }, purple: { 900: "#ded2e7", 800: "#bca4cf", 700: "#9b77b7", 600: "#581c87", 500: "#79499f", 400: "#46166c", 300: "#351151", 200: "#230b36", 100: "#12061b" } }); }; // mui theme settings export var themeSettings = function themeSettings(mode) { var colors = tokens(mode); return { palette: _objectSpread({ mode: mode }, mode === "dark" ? { // palette values for dark mode primary: { main: colors.primary[500] }, secondary: { main: colors.greenAccent[500] }, neutral: { dark: colors.grey[700], main: colors.grey[500], light: colors.grey[100] }, background: { default: colors.primary[500] } } : { // palette values for light mode primary: { main: colors.primary[100] }, secondary: { main: colors.greenAccent[500] }, neutral: { dark: colors.grey[700], main: colors.grey[500], light: colors.grey[100] }, background: { default: "#fcfcfc" } }), typography: { fontFamily: ["Source Sans Pro", "sans-serif"].join(","), fontSize: 12, h1: { fontFamily: ["Source Sans Pro", "sans-serif"].join(","), fontSize: 40 }, h2: { fontFamily: ["Source Sans Pro", "sans-serif"].join(","), fontSize: 32 }, h3: { fontFamily: ["Source Sans Pro", "sans-serif"].join(","), fontSize: 24 }, h4: { fontFamily: ["Source Sans Pro", "sans-serif"].join(","), fontSize: 20 }, h5: { fontFamily: ["Source Sans Pro", "sans-serif"].join(","), fontSize: 16 }, h6: { fontFamily: ["Source Sans Pro", "sans-serif"].join(","), fontSize: 14 } } }; }; // context for color mode export var ColorModeContext = /*#__PURE__*/createContext({ toggleColorMode: function toggleColorMode() {} }); export var useMode = function useMode() { // Initialize mode state, defaulting to "dark" if no mode is stored in localStorage var savedMode = "light"; var _useState = useState(savedMode), _useState2 = _slicedToArray(_useState, 2), mode = _useState2[0], setMode = _useState2[1]; // Update local storage when mode changes useEffect(function () { localStorage.setItem("themeMode", mode); }, [mode]); // Memoize color mode object with toggle function var colorMode = useMemo(function () { return { toggleColorMode: function toggleColorMode() { return setMode(function (prev) { return prev === "light" ? "dark" : "light"; }); } }; }, []); // Memoize theme object based on current mode var theme = useMemo(function () { return createTheme(themeSettings(mode)); }, [mode]); // Return array for backward compatibility (destructuring as [theme, colorMode]) return [theme, colorMode]; };