@mui/x-data-grid
Version:
The Community plan edition of the MUI X Data Grid components.
101 lines • 5.01 kB
JavaScript
import * as React from 'react';
import { alpha, darken, lighten } from '@mui/material/styles';
import { useTheme } from '@mui/material/styles';
import { hash, stringify } from '@mui/x-internals/hash';
import { vars } from "../constants/cssVariables.js";
export function useMaterialCSSVariables() {
const theme = useTheme();
return React.useMemo(() => {
const id = hash(stringify(theme));
const variables = transformTheme(theme);
return {
id,
variables
};
}, [theme]);
}
function transformTheme(t) {
const borderColor = getBorderColor(t);
const dataGridPalette = (t.vars || t).palette.DataGrid;
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) {
// Accounts for disabled typography variants
// See: https://github.com/mui/mui-x/issues/17812
if (!font) {
return undefined;
}
return `${font.fontWeight} ${font.fontSize} / ${font.lineHeight} ${font.fontFamily}`;
}