UNPKG

@mui/system

Version:

MUI System is a set of CSS utilities to help you build custom designs more efficiently. It makes it possible to rapidly lay out custom designs.

209 lines (208 loc) 6.28 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSpacingClassNames = exports.generateSizeClassNames = exports.generateGridStyles = exports.generateGridSizeStyles = exports.generateGridRowSpacingStyles = exports.generateGridOffsetStyles = exports.generateGridDirectionStyles = exports.generateGridColumnsStyles = exports.generateGridColumnSpacingStyles = exports.generateDirectionClasses = void 0; var _traverseBreakpoints = require("./traverseBreakpoints"); function getSelfSpacingVar(axis) { return `--Grid-${axis}Spacing`; } function getParentSpacingVar(axis) { return `--Grid-parent-${axis}Spacing`; } const selfColumnsVar = '--Grid-columns'; const parentColumnsVar = '--Grid-parent-columns'; const generateGridSizeStyles = ({ theme, ownerState }) => { const styles = {}; (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.size, (appendStyle, value) => { let style = {}; if (value === 'grow') { style = { flexBasis: 0, flexGrow: 1, maxWidth: '100%' }; } if (value === 'auto') { style = { flexBasis: 'auto', flexGrow: 0, flexShrink: 0, maxWidth: 'none', width: 'auto' }; } if (typeof value === 'number') { style = { flexGrow: 0, flexBasis: 'auto', width: `calc(100% * ${value} / var(${parentColumnsVar}) - (var(${parentColumnsVar}) - ${value}) * (var(${getParentSpacingVar('column')}) / var(${parentColumnsVar})))` }; } appendStyle(styles, style); }); return styles; }; exports.generateGridSizeStyles = generateGridSizeStyles; const generateGridOffsetStyles = ({ theme, ownerState }) => { const styles = {}; (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.offset, (appendStyle, value) => { let style = {}; if (value === 'auto') { style = { marginLeft: 'auto' }; } if (typeof value === 'number') { style = { marginLeft: value === 0 ? '0px' : `calc(100% * ${value} / var(${parentColumnsVar}) + var(${getParentSpacingVar('column')}) * ${value} / var(${parentColumnsVar}))` }; } appendStyle(styles, style); }); return styles; }; exports.generateGridOffsetStyles = generateGridOffsetStyles; const generateGridColumnsStyles = ({ theme, ownerState }) => { if (!ownerState.container) { return {}; } const styles = { [selfColumnsVar]: 12 }; (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.columns, (appendStyle, value) => { const columns = value ?? 12; appendStyle(styles, { [selfColumnsVar]: columns, '> *': { [parentColumnsVar]: columns } }); }); return styles; }; exports.generateGridColumnsStyles = generateGridColumnsStyles; const generateGridRowSpacingStyles = ({ theme, ownerState }) => { if (!ownerState.container) { return {}; } const styles = {}; (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.rowSpacing, (appendStyle, value) => { const spacing = typeof value === 'string' ? value : theme.spacing?.(value); appendStyle(styles, { [getSelfSpacingVar('row')]: spacing, '> *': { [getParentSpacingVar('row')]: spacing } }); }); return styles; }; exports.generateGridRowSpacingStyles = generateGridRowSpacingStyles; const generateGridColumnSpacingStyles = ({ theme, ownerState }) => { if (!ownerState.container) { return {}; } const styles = {}; (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.columnSpacing, (appendStyle, value) => { const spacing = typeof value === 'string' ? value : theme.spacing?.(value); appendStyle(styles, { [getSelfSpacingVar('column')]: spacing, '> *': { [getParentSpacingVar('column')]: spacing } }); }); return styles; }; exports.generateGridColumnSpacingStyles = generateGridColumnSpacingStyles; const generateGridDirectionStyles = ({ theme, ownerState }) => { if (!ownerState.container) { return {}; } const styles = {}; (0, _traverseBreakpoints.traverseBreakpoints)(theme.breakpoints, ownerState.direction, (appendStyle, value) => { appendStyle(styles, { flexDirection: value }); }); return styles; }; exports.generateGridDirectionStyles = generateGridDirectionStyles; const generateGridStyles = ({ ownerState }) => { return { minWidth: 0, boxSizing: 'border-box', ...(ownerState.container && { display: 'flex', flexWrap: 'wrap', ...(ownerState.wrap && ownerState.wrap !== 'wrap' && { flexWrap: ownerState.wrap }), gap: `var(${getSelfSpacingVar('row')}) var(${getSelfSpacingVar('column')})` }) }; }; exports.generateGridStyles = generateGridStyles; const generateSizeClassNames = size => { const classNames = []; Object.entries(size).forEach(([key, value]) => { if (value !== false && value !== undefined) { classNames.push(`grid-${key}-${String(value)}`); } }); return classNames; }; exports.generateSizeClassNames = generateSizeClassNames; const generateSpacingClassNames = (spacing, smallestBreakpoint = 'xs') => { function isValidSpacing(val) { if (val === undefined) { return false; } return typeof val === 'string' && !Number.isNaN(Number(val)) || typeof val === 'number' && val > 0; } if (isValidSpacing(spacing)) { return [`spacing-${smallestBreakpoint}-${String(spacing)}`]; } if (typeof spacing === 'object' && !Array.isArray(spacing)) { const classNames = []; Object.entries(spacing).forEach(([key, value]) => { if (isValidSpacing(value)) { classNames.push(`spacing-${key}-${String(value)}`); } }); return classNames; } return []; }; exports.generateSpacingClassNames = generateSpacingClassNames; const generateDirectionClasses = direction => { if (direction === undefined) { return []; } if (typeof direction === 'object') { return Object.entries(direction).map(([key, value]) => `direction-${key}-${value}`); } return [`direction-xs-${String(direction)}`]; }; exports.generateDirectionClasses = generateDirectionClasses;