@mui/x-data-grid
Version:
The Community plan edition of the Data Grid components (MUI X).
97 lines (96 loc) • 4.89 kB
JavaScript
import * as React from 'react';
import { alpha, darken, lighten } from '@mui/material/styles';
import { useTheme } from '@mui/material/styles';
import { hash } from '@mui/x-internals/hash';
import { vars } from "../constants/cssVariables.js";
export function useMaterialCSSVariables() {
const theme = useTheme();
return React.useMemo(() => {
const id = hash(JSON.stringify(theme));
const variables = transformTheme(theme);
return {
id,
variables
};
}, [theme]);
}
function transformTheme(t) {
const borderColor = getBorderColor(t);
const dataGridPalette = t.palette.DataGrid; // FIXME: docs typecheck error
const backgroundBase = dataGridPalette?.bg ?? (t.vars || t).palette.background.default;
const backgroundHeader = dataGridPalette?.headerBg ?? backgroundBase;
const backgroundPinned = dataGridPalette?.pinnedBg ?? backgroundBase;
const backgroundBackdrop = t.vars ? `rgba(${t.vars.palette.background.defaultChannel} / ${t.vars.palette.action.disabledOpacity})` : alpha(t.palette.background.default, t.palette.action.disabledOpacity);
const backgroundOverlay = t.palette.mode === 'dark' ? `color-mix(in srgb, ${(t.vars || t).palette.background.paper} 95%,
const selectedColor = t.vars ? `rgb(${t.vars.palette.primary.mainChannel})` : t.palette.primary.main;
const radius = getRadius(t);
const fontBody = t.vars?.font?.body2 ?? formatFont(t.typography.body2);
const fontSmall = t.vars?.font?.caption ?? formatFont(t.typography.caption);
const fontLarge = t.vars?.font?.body1 ?? formatFont(t.typography.body1);
const k = vars.keys;
return {
[ ]: t.vars ? t.vars.spacing ?? t.spacing(1) : t.spacing(1),
[ ]: borderColor,
[ ]: backgroundBase,
[ ]: backgroundOverlay,
[ ]: backgroundBackdrop,
[ ]: (t.vars || t).palette.text.primary,
[ ]: (t.vars || t).palette.text.secondary,
[ ]: (t.vars || t).palette.primary.dark,
[ ]: (t.vars || t).palette.text.disabled,
[ ]: (t.vars || t).palette.error.dark,
[ ]: (t.vars || t).palette.action.hover,
[ ]: (t.vars || t).palette.action.hoverOpacity,
[ ]: removeOpacity((t.vars || t).palette.primary.main),
[ ]: (t.vars || t).palette.action.focusOpacity,
[ ]: removeOpacity((t.vars || t).palette.action.disabled),
[ ]: (t.vars || t).palette.action.disabledOpacity,
[ ]: selectedColor,
[ ]: (t.vars || t).palette.action.selectedOpacity,
[ ]: backgroundHeader,
[ ]: backgroundPinned,
[ ]: radius,
[ ]: t.typography.fontFamily,
[ ]: t.typography.fontWeightLight,
[ ]: t.typography.fontWeightRegular,
[ ]: t.typography.fontWeightMedium,
[ ]: t.typography.fontWeightBold,
[ ]: fontBody,
[ ]: fontSmall,
[ ]: fontLarge,
[ ]: t.transitions.easing.easeIn,
[ ]: t.transitions.easing.easeOut,
[ ]: t.transitions.easing.easeInOut,
[ ]: `${t.transitions.duration.shorter}ms`,
[ ]: `${t.transitions.duration.short}ms`,
[ ]: `${t.transitions.duration.standard}ms`,
[ ]: (t.vars || t).shadows[2],
[ ]: (t.vars || t).shadows[8],
[ ]: (t.vars || t).zIndex.modal,
[ ]: (t.vars || t).zIndex.modal
};
}
function getRadius(theme) {
if (theme.vars) {
return theme.vars.shape.borderRadius;
}
return typeof theme.shape.borderRadius === 'number' ? `${theme.shape.borderRadius}px` : theme.shape.borderRadius;
}
function getBorderColor(theme) {
if (theme.vars) {
return theme.vars.palette.TableCell.border;
}
if (theme.palette.mode === 'light') {
return lighten(alpha(theme.palette.divider, 1), 0.88);
}
return darken(alpha(theme.palette.divider, 1), 0.68);
}
function setOpacity(color, opacity) {
return `rgba(from ${color} r g b / ${opacity})`;
}
function removeOpacity(color) {
return setOpacity(color, 1);
}
function formatFont(font) {
return `${font.fontWeight} ${font.fontSize} / ${font.lineHeight} ${font.fontFamily}`;
}