UNPKG

11.6 kBJavaScriptView Raw
1"use strict";
2
3function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports.default = exports.flexGridItemStyle = exports.getResponsiveValue = exports.flexGridItemMediaQueryStyle = void 0;
9
10var React = _interopRequireWildcard(require("react"));
11
12var _index = require("../block/index.js");
13
14var _overrides = require("../helpers/overrides.js");
15
16var _responsiveHelpers = require("../helpers/responsive-helpers.js");
17
18function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
19
20function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
21
22function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
23
24function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
25
26function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
27
28function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
29
30function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
31
32function _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === "[object Arguments]")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
33
34function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
35
36function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
37
38function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
39
40function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
41
42function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
43
44function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
45
46function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
47
48function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
49
50var flexGridItemMediaQueryStyle = function flexGridItemMediaQueryStyle(_ref) {
51 var _objectSpread2;
52
53 var $theme = _ref.$theme,
54 colCount = _ref.flexGridColumnCount,
55 flexGridColumnGap = _ref.flexGridColumnGap,
56 flexGridRowGap = _ref.flexGridRowGap,
57 itemIndex = _ref.flexGridItemIndex,
58 itemCount = _ref.flexGridItemCount;
59 // 0px needed for calc() to behave properly
60 var colGap = $theme.sizing[flexGridColumnGap] || flexGridColumnGap || '0px';
61 var colGapQuantity = parseFloat(colGap);
62 var colGapUnit = colGap.match(/[a-zA-Z]+/)[0];
63 var rowGap = $theme.sizing[flexGridRowGap] || flexGridRowGap || '0px';
64 var rowGapQuantity = parseFloat(rowGap);
65 var widthCalc = "(100% - ".concat((colCount - 1) * colGapQuantity).concat(colGapUnit, ") / ").concat(colCount);
66 var marginDirection = $theme.direction === 'rtl' ? 'marginLeft' : 'marginRight';
67 return Object.freeze(_objectSpread((_objectSpread2 = {
68 // Subtract .5px to avoid rounding issues on IE/Edge
69 // See https://github.com/uber/baseweb/pull/1748
70 width: "calc(".concat(widthCalc, " - .5px)")
71 }, _defineProperty(_objectSpread2, marginDirection, colGapQuantity && ((itemIndex + 1) % colCount !== 0 ? colGap : 0)), _defineProperty(_objectSpread2, "marginBottom", rowGapQuantity && (~~(itemIndex / colCount) !== ~~((itemCount - 1) / colCount) ? rowGap : 0)), _objectSpread2), itemIndex === itemCount - 1 && (itemIndex + 1) % colCount !== 0 ? _defineProperty({}, marginDirection, "calc(".concat(colCount - itemIndex % colCount - 1, " * (").concat(colGap, " + ").concat(widthCalc, "))")) : {}));
72};
73
74exports.flexGridItemMediaQueryStyle = flexGridItemMediaQueryStyle;
75
76var getResponsiveValue = function getResponsiveValue(responsive, i) {
77 if (!responsive) {
78 return null;
79 }
80
81 if (!Array.isArray(responsive)) {
82 return responsive;
83 }
84
85 return responsive[i] || responsive[responsive.length - 1];
86};
87
88exports.getResponsiveValue = getResponsiveValue;
89
90var flexGridItemStyle = function flexGridItemStyle(_ref3) {
91 var $flexGridColumnCount = _ref3.$flexGridColumnCount,
92 $flexGridColumnGap = _ref3.$flexGridColumnGap,
93 $flexGridRowGap = _ref3.$flexGridRowGap,
94 $flexGridItemIndex = _ref3.$flexGridItemIndex,
95 $flexGridItemCount = _ref3.$flexGridItemCount,
96 $theme = _ref3.$theme;
97 var baseFlexGridItemStyle = {
98 flexGrow: 1
99 };
100 var mediaQueries = (0, _responsiveHelpers.getMediaQueries)($theme.breakpoints); // Get the length of the longest responsive array
101
102 var maxResponsiveLength = Math.max.apply(Math, _toConsumableArray([$flexGridColumnCount, $flexGridColumnGap, $flexGridRowGap].map(function (r) {
103 return Array.isArray(r) ? r.length : 0;
104 }))); // No media queries for non-responsive FlexGrids
105
106 if (maxResponsiveLength < 2) {
107 return _objectSpread({}, baseFlexGridItemStyle, {}, flexGridItemMediaQueryStyle({
108 $theme: $theme,
109 flexGridColumnCount: getResponsiveValue($flexGridColumnCount, 0) || 1,
110 flexGridColumnGap: getResponsiveValue($flexGridColumnGap, 0) || 0,
111 flexGridRowGap: getResponsiveValue($flexGridRowGap, 0) || 0,
112 flexGridItemIndex: $flexGridItemIndex || 0,
113 flexGridItemCount: $flexGridItemCount || 1
114 }));
115 } // Generate style by iterating up to maxResponsiveLength for each responsive
116 // breakpoint. Will end up with styles for one of the following media queries
117 // depending on maxResponsiveLength:
118 // - {mobile, small}
119 // - {mobile, small, medium}
120 // - {mobile, small, medium, large}
121
122
123 return _toConsumableArray(Array(maxResponsiveLength).keys()).reduce(function (acc, i) {
124 var _map = [$flexGridColumnCount, $flexGridColumnGap, $flexGridRowGap].map(function (r) {
125 return getResponsiveValue(r, i);
126 }),
127 _map2 = _slicedToArray(_map, 3),
128 flexGridColumnCountValue = _map2[0],
129 flexGridColumnGapValue = _map2[1],
130 flexGridRowGapValue = _map2[2];
131
132 var mediaQuery = i === 0 ? // Custom media query needed so :nth-child styles don't conflict
133 (0, _responsiveHelpers.getMediaQuery)(0) : mediaQueries[i - 1];
134
135 if (mediaQuery) {
136 acc[mediaQuery] = flexGridItemMediaQueryStyle({
137 $theme: $theme,
138 flexGridColumnCount: flexGridColumnCountValue || 1,
139 flexGridColumnGap: flexGridColumnGapValue || 0,
140 flexGridRowGap: flexGridRowGapValue || 0,
141 flexGridItemIndex: $flexGridItemIndex || 0,
142 flexGridItemCount: $flexGridItemCount || 1
143 });
144 }
145
146 return acc;
147 }, baseFlexGridItemStyle);
148};
149
150exports.flexGridItemStyle = flexGridItemStyle;
151
152var FlexGridItem = function FlexGridItem(_ref4) {
153 var forwardedRef = _ref4.forwardedRef,
154 children = _ref4.children,
155 as = _ref4.as,
156 overrides = _ref4.overrides,
157 flexGridColumnCount = _ref4.flexGridColumnCount,
158 flexGridColumnGap = _ref4.flexGridColumnGap,
159 flexGridRowGap = _ref4.flexGridRowGap,
160 flexGridItemIndex = _ref4.flexGridItemIndex,
161 flexGridItemCount = _ref4.flexGridItemCount,
162 restProps = _objectWithoutProperties(_ref4, ["forwardedRef", "children", "as", "overrides", "flexGridColumnCount", "flexGridColumnGap", "flexGridRowGap", "flexGridItemIndex", "flexGridItemCount"]);
163
164 var flexGridItemOverrides = {
165 Block: {
166 style: flexGridItemStyle
167 }
168 };
169 var blockOverrides = overrides ? (0, _overrides.mergeOverrides)(flexGridItemOverrides, overrides) : flexGridItemOverrides;
170 return React.createElement(_index.Block // coerced to any because because of how react components are typed.
171 // cannot guarantee an html element
172 // eslint-disable-next-line flowtype/no-weak-types
173 , _extends({
174 ref: forwardedRef,
175 as: as,
176 overrides: blockOverrides,
177 $flexGridColumnCount: flexGridColumnCount,
178 $flexGridColumnGap: flexGridColumnGap,
179 $flexGridRowGap: flexGridRowGap,
180 $flexGridItemIndex: flexGridItemIndex,
181 $flexGridItemCount: flexGridItemCount,
182 "data-baseweb": "flex-grid-item"
183 }, restProps), children);
184};
185
186var FlexGridItemComponent = React.forwardRef(function (props, ref) {
187 return React.createElement(FlexGridItem, _extends({}, props, {
188 forwardedRef: ref
189 }));
190});
191FlexGridItemComponent.displayName = 'FlexGridItem';
192var _default = FlexGridItemComponent;
193exports.default = _default;
\No newline at end of file