Spaces:
Sleeping
Sleeping
| import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; | |
| import responsivePropType from './responsivePropType'; | |
| import { handleBreakpoints } from './breakpoints'; | |
| import { getPath } from './style'; | |
| import merge from './merge'; | |
| import memoize from './memoize'; | |
| var properties = { | |
| m: 'margin', | |
| p: 'padding' | |
| }; | |
| var directions = { | |
| t: 'Top', | |
| r: 'Right', | |
| b: 'Bottom', | |
| l: 'Left', | |
| x: ['Left', 'Right'], | |
| y: ['Top', 'Bottom'] | |
| }; | |
| var aliases = { | |
| marginX: 'mx', | |
| marginY: 'my', | |
| paddingX: 'px', | |
| paddingY: 'py' | |
| }; | |
| // memoize() impact: | |
| // From 300,000 ops/sec | |
| // To 350,000 ops/sec | |
| var getCssProperties = memoize(function (prop) { | |
| // It's not a shorthand notation. | |
| if (prop.length > 2) { | |
| if (aliases[prop]) { | |
| prop = aliases[prop]; | |
| } else { | |
| return [prop]; | |
| } | |
| } | |
| var _prop$split = prop.split(''), | |
| _prop$split2 = _slicedToArray(_prop$split, 2), | |
| a = _prop$split2[0], | |
| b = _prop$split2[1]; | |
| var property = properties[a]; | |
| var direction = directions[b] || ''; | |
| return Array.isArray(direction) ? direction.map(function (dir) { | |
| return property + dir; | |
| }) : [property + direction]; | |
| }); | |
| export var marginKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'margin', 'marginTop', 'marginRight', 'marginBottom', 'marginLeft', 'marginX', 'marginY', 'marginInline', 'marginInlineStart', 'marginInlineEnd', 'marginBlock', 'marginBlockStart', 'marginBlockEnd']; | |
| export var paddingKeys = ['p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft', 'paddingX', 'paddingY', 'paddingInline', 'paddingInlineStart', 'paddingInlineEnd', 'paddingBlock', 'paddingBlockStart', 'paddingBlockEnd']; | |
| var spacingKeys = [].concat(marginKeys, paddingKeys); | |
| export function createUnaryUnit(theme, themeKey, defaultValue, propName) { | |
| var _getPath; | |
| var themeSpacing = (_getPath = getPath(theme, themeKey, false)) != null ? _getPath : defaultValue; | |
| if (typeof themeSpacing === 'number') { | |
| return function (abs) { | |
| if (typeof abs === 'string') { | |
| return abs; | |
| } | |
| if (process.env.NODE_ENV !== 'production') { | |
| if (typeof abs !== 'number') { | |
| console.error("MUI: Expected ".concat(propName, " argument to be a number or a string, got ").concat(abs, ".")); | |
| } | |
| } | |
| return themeSpacing * abs; | |
| }; | |
| } | |
| if (Array.isArray(themeSpacing)) { | |
| return function (abs) { | |
| if (typeof abs === 'string') { | |
| return abs; | |
| } | |
| if (process.env.NODE_ENV !== 'production') { | |
| if (!Number.isInteger(abs)) { | |
| console.error(["MUI: The `theme.".concat(themeKey, "` array type cannot be combined with non integer values.") + "You should either use an integer value that can be used as index, or define the `theme.".concat(themeKey, "` as a number.")].join('\n')); | |
| } else if (abs > themeSpacing.length - 1) { | |
| console.error(["MUI: The value provided (".concat(abs, ") overflows."), "The supported values are: ".concat(JSON.stringify(themeSpacing), "."), "".concat(abs, " > ").concat(themeSpacing.length - 1, ", you need to add the missing values.")].join('\n')); | |
| } | |
| } | |
| return themeSpacing[abs]; | |
| }; | |
| } | |
| if (typeof themeSpacing === 'function') { | |
| return themeSpacing; | |
| } | |
| if (process.env.NODE_ENV !== 'production') { | |
| console.error(["MUI: The `theme.".concat(themeKey, "` value (").concat(themeSpacing, ") is invalid."), 'It should be a number, an array or a function.'].join('\n')); | |
| } | |
| return function () { | |
| return undefined; | |
| }; | |
| } | |
| export function createUnarySpacing(theme) { | |
| return createUnaryUnit(theme, 'spacing', 8, 'spacing'); | |
| } | |
| export function getValue(transformer, propValue) { | |
| if (typeof propValue === 'string' || propValue == null) { | |
| return propValue; | |
| } | |
| var abs = Math.abs(propValue); | |
| var transformed = transformer(abs); | |
| if (propValue >= 0) { | |
| return transformed; | |
| } | |
| if (typeof transformed === 'number') { | |
| return -transformed; | |
| } | |
| return "-".concat(transformed); | |
| } | |
| export function getStyleFromPropValue(cssProperties, transformer) { | |
| return function (propValue) { | |
| return cssProperties.reduce(function (acc, cssProperty) { | |
| acc[cssProperty] = getValue(transformer, propValue); | |
| return acc; | |
| }, {}); | |
| }; | |
| } | |
| function resolveCssProperty(props, keys, prop, transformer) { | |
| // Using a hash computation over an array iteration could be faster, but with only 28 items, | |
| // it's doesn't worth the bundle size. | |
| if (keys.indexOf(prop) === -1) { | |
| return null; | |
| } | |
| var cssProperties = getCssProperties(prop); | |
| var styleFromPropValue = getStyleFromPropValue(cssProperties, transformer); | |
| var propValue = props[prop]; | |
| return handleBreakpoints(props, propValue, styleFromPropValue); | |
| } | |
| function style(props, keys) { | |
| var transformer = createUnarySpacing(props.theme); | |
| return Object.keys(props).map(function (prop) { | |
| return resolveCssProperty(props, keys, prop, transformer); | |
| }).reduce(merge, {}); | |
| } | |
| export function margin(props) { | |
| return style(props, marginKeys); | |
| } | |
| margin.propTypes = process.env.NODE_ENV !== 'production' ? marginKeys.reduce(function (obj, key) { | |
| obj[key] = responsivePropType; | |
| return obj; | |
| }, {}) : {}; | |
| margin.filterProps = marginKeys; | |
| export function padding(props) { | |
| return style(props, paddingKeys); | |
| } | |
| padding.propTypes = process.env.NODE_ENV !== 'production' ? paddingKeys.reduce(function (obj, key) { | |
| obj[key] = responsivePropType; | |
| return obj; | |
| }, {}) : {}; | |
| padding.filterProps = paddingKeys; | |
| function spacing(props) { | |
| return style(props, spacingKeys); | |
| } | |
| spacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce(function (obj, key) { | |
| obj[key] = responsivePropType; | |
| return obj; | |
| }, {}) : {}; | |
| spacing.filterProps = spacingKeys; | |
| export default spacing; |