Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

133 linhas
4.1 KiB

  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.default = void 0;
  7. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  8. var _warning = _interopRequireDefault(require("warning"));
  9. var _responsivePropType = _interopRequireDefault(require("./responsivePropType"));
  10. var _breakpoints = require("./breakpoints");
  11. var _merge = _interopRequireDefault(require("./merge"));
  12. var _memoize = _interopRequireDefault(require("./memoize"));
  13. var properties = {
  14. m: 'margin',
  15. p: 'padding'
  16. };
  17. var directions = {
  18. t: 'Top',
  19. r: 'Right',
  20. b: 'Bottom',
  21. l: 'Left',
  22. x: ['Left', 'Right'],
  23. y: ['Top', 'Bottom']
  24. }; // memoize() impact:
  25. // From 300,000 ops/sec
  26. // To 350,000 ops/sec
  27. var getCssProperties = (0, _memoize.default)(function (prop) {
  28. // It's not a shorthand notation.
  29. if (prop.length > 3) {
  30. return [prop];
  31. }
  32. var _prop$split = prop.split(''),
  33. _prop$split2 = (0, _slicedToArray2.default)(_prop$split, 2),
  34. a = _prop$split2[0],
  35. b = _prop$split2[1];
  36. var property = properties[a];
  37. var direction = directions[b] || '';
  38. return Array.isArray(direction) ? direction.map(function (dir) {
  39. return property + dir;
  40. }) : [property + direction];
  41. });
  42. var spacingKeys = ['m', 'mt', 'mr', 'mb', 'ml', 'mx', 'my', 'p', 'pt', 'pr', 'pb', 'pl', 'px', 'py', 'margin', 'marginLeft', 'marginTop', 'marginRight', 'marginBottom', 'padding', 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft'];
  43. function getTransformer(theme) {
  44. var themeTransformer = theme.spacing && theme.spacing.unit != null ? theme.spacing.unit : theme.spacing || 8;
  45. if (typeof themeTransformer === 'number') {
  46. return function (abs) {
  47. return themeTransformer * abs;
  48. };
  49. }
  50. if (Array.isArray(themeTransformer)) {
  51. return function (abs) {
  52. process.env.NODE_ENV !== "production" ? (0, _warning.default)(abs <= themeTransformer.length - 1, ["@material-ui/system: the value provided (".concat(abs, ") overflows."), "The supported values are: ".concat(JSON.stringify(themeTransformer), "."), "".concat(abs, " > ").concat(themeTransformer.length - 1, ", you need to add the missing values.")].join('\n')) : void 0;
  53. return themeTransformer[abs];
  54. };
  55. }
  56. if (typeof themeTransformer === 'function') {
  57. return themeTransformer;
  58. }
  59. process.env.NODE_ENV !== "production" ? (0, _warning.default)(false, ["@material-ui/system: the `theme.spacing` value (".concat(themeTransformer, ") is invalid."), 'It should be a number, an array or a function.'].join('\n')) : void 0;
  60. return function () {
  61. return undefined;
  62. };
  63. }
  64. function getValue(transformer, propValue) {
  65. if (typeof propValue === 'string') {
  66. return propValue;
  67. }
  68. var abs = Math.abs(propValue);
  69. var transformed = transformer(abs);
  70. if (propValue >= 0) {
  71. return transformed;
  72. }
  73. if (typeof transformed === 'number') {
  74. return -transformed;
  75. }
  76. return "-".concat(transformed);
  77. }
  78. function getStyleFromPropValue(cssProperties, transformer) {
  79. return function (propValue) {
  80. return cssProperties.reduce(function (acc, cssProperty) {
  81. acc[cssProperty] = getValue(transformer, propValue);
  82. return acc;
  83. }, {});
  84. };
  85. }
  86. function spacing(props) {
  87. var theme = props.theme;
  88. var transformer = getTransformer(theme);
  89. return Object.keys(props).map(function (prop) {
  90. // Using a hash computation over an array iteration could be faster, but with only 14 items,
  91. // it's doesn't worth the bundle size.
  92. if (spacingKeys.indexOf(prop) === -1) {
  93. return null;
  94. }
  95. var cssProperties = getCssProperties(prop);
  96. var styleFromPropValue = getStyleFromPropValue(cssProperties, transformer);
  97. var propValue = props[prop];
  98. return (0, _breakpoints.handleBreakpoints)(props, propValue, styleFromPropValue);
  99. }).reduce(_merge.default, {});
  100. }
  101. spacing.propTypes = process.env.NODE_ENV !== 'production' ? spacingKeys.reduce(function (obj, key) {
  102. obj[key] = _responsivePropType.default;
  103. return obj;
  104. }, {}) : {};
  105. spacing.filterProps = spacingKeys;
  106. var _default = spacing;
  107. exports.default = _default;