@mui/x-data-grid-premium
Version:
The Premium plan edition of the MUI X Data Grid Components.
99 lines • 3.08 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
const _excluded = ["children", "className"];
import * as React from 'react';
import { styled } from '@mui/material/styles';
import { vars } from '@mui/x-data-grid-pro/internals';
import composeClasses from '@mui/utils/composeClasses';
import { getDataGridUtilityClass } from '@mui/x-data-grid-pro';
import clsx from 'clsx';
import { useGridRootProps } from "../../hooks/utils/useGridRootProps.mjs";
import { useCollapsibleContext } from "./CollapsibleContext.mjs";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
const useUtilityClasses = ownerState => {
const {
classes
} = ownerState;
const slots = {
root: ['collapsibleTrigger'],
icon: ['collapsibleIcon']
};
return composeClasses(slots, getDataGridUtilityClass, classes);
};
const CollapsibleTriggerRoot = styled('button', {
name: 'MuiDataGrid',
slot: 'CollapsibleTrigger'
})(({
ownerState
}) => ({
position: 'relative',
display: 'flex',
alignItems: 'center',
justifyContent: 'space-between',
height: 40,
padding: vars.spacing(0, 1.5),
border: `1px solid ${vars.colors.border.base}`,
background: 'none',
outline: 'none',
borderTopLeftRadius: vars.radius.base,
borderTopRightRadius: vars.radius.base,
borderBottomLeftRadius: ownerState.open ? 0 : vars.radius.base,
borderBottomRightRadius: ownerState.open ? 0 : vars.radius.base,
'&:hover': {
backgroundColor: vars.colors.interactive.hover,
cursor: 'pointer'
},
'&:focus-visible': {
outline: `2px solid ${vars.colors.interactive.selected}`,
outlineOffset: -2
}
}));
const CollapsibleIcon = styled('div', {
name: 'MuiDataGrid',
slot: 'CollapsibleIcon'
})(({
ownerState
}) => ({
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
color: vars.colors.foreground.muted,
transform: ownerState.open ? 'none' : 'rotate(180deg)',
transition: vars.transition(['transform'], {
duration: vars.transitions.duration.short,
easing: vars.transitions.easing.easeInOut
})
}));
function CollapsibleTrigger(props) {
const {
children,
className
} = props,
other = _objectWithoutPropertiesLoose(props, _excluded);
const rootProps = useGridRootProps();
const {
open,
onOpenChange,
panelId
} = useCollapsibleContext();
const ownerState = {
classes: rootProps.classes,
open
};
const classes = useUtilityClasses(ownerState);
return /*#__PURE__*/_jsxs(CollapsibleTriggerRoot, _extends({
ownerState: ownerState,
className: clsx(classes.root, className),
tabIndex: 0,
"aria-controls": open ? panelId : undefined,
"aria-expanded": !open,
onClick: () => onOpenChange(!open)
}, other, {
children: [children, /*#__PURE__*/_jsx(CollapsibleIcon, {
ownerState: ownerState,
className: classes.icon,
children: /*#__PURE__*/_jsx(rootProps.slots.collapsibleIcon, {})
})]
}));
}
export { CollapsibleTrigger };