UNPKG

5.66 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7var slicedToArray = require('./slicedToArray-0711941d.js');
8require('./unsupportedIterableToArray-68db1d3b.js');
9var React = require('react');
10var React__default = _interopDefault(React);
11require('./_commonjsHelpers-72d386ba.js');
12var index = require('./index-b0606964.js');
13var defineProperty = require('./defineProperty-0921a47c.js');
14require('./toConsumableArray-d8a4a2c3.js');
15var _styled = require('styled-components');
16var _styled__default = _interopDefault(_styled);
17require('./getPrototypeOf-2a661a20.js');
18require('./color.js');
19require('./components.js');
20require('./contains-component.js');
21var css = require('./css.js');
22require('./dayjs.min-e07657bf.js');
23require('./date.js');
24require('./miscellaneous.js');
25require('./environment.js');
26require('./font.js');
27require('./math-f4029164.js');
28require('./characters.js');
29require('./format.js');
30require('./keycodes.js');
31require('./url.js');
32require('./web3.js');
33var constants = require('./constants.js');
34var breakpoints = require('./breakpoints.js');
35require('./springs.js');
36require('./text-styles.js');
37var _extends = require('./extends-40571110.js');
38var objectWithoutProperties = require('./objectWithoutProperties-35db8ab0.js');
39require('./isObject-ec755c87.js');
40var Viewport = require('./Viewport-15101437.js');
41
42function 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; }
43
44function _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._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; }
45
46function getSizes(breakpoints) {
47 return Object.entries(breakpoints).filter(function (_ref) {
48 var _ref2 = slicedToArray._slicedToArray(_ref, 1),
49 name = _ref2[0];
50
51 return name !== 'min';
52 }).sort(function (a, b) {
53 return a[1] - b[1];
54 });
55} // Minimum margin around a layouts
56
57
58var MIN_MARGIN = 3 * constants.GU;
59
60function getLayoutSize(parentWidth, breakpoints) {
61 var sizes = getSizes(breakpoints);
62 var index = sizes.length;
63
64 while (index--) {
65 if (parentWidth >= sizes[index][1]) {
66 return [sizes[index][0], sizes[index][1] - (index === 0 ? 0 : MIN_MARGIN * 2)];
67 }
68 }
69
70 return sizes[0];
71}
72
73var LayoutContext = React__default.createContext({});
74
75function useLayout() {
76 var _useContext = React.useContext(LayoutContext),
77 layoutWidth = _useContext.layoutWidth,
78 layoutName = _useContext.layoutName;
79
80 return {
81 layoutName: layoutName,
82 layoutWidth: layoutWidth,
83 // deprecated
84 name: layoutName,
85 width: layoutWidth
86 };
87}
88
89var _StyledDiv = _styled__default("div").withConfig({
90 displayName: "Layout___StyledDiv",
91 componentId: "sc-16bvfls-0"
92})(["width:", ";min-width:", "px;margin:0 auto;padding-bottom:", ";"], function (p) {
93 return p._css;
94}, function (p) {
95 return p._css2;
96}, function (p) {
97 return p._css3;
98});
99
100function Layout(_ref3) {
101 var breakpoints$1 = _ref3.breakpoints,
102 children = _ref3.children,
103 paddingBottom = _ref3.paddingBottom,
104 parentWidth = _ref3.parentWidth,
105 props = objectWithoutProperties._objectWithoutProperties(_ref3, ["breakpoints", "children", "paddingBottom", "parentWidth"]);
106
107 var _useViewport = Viewport.useViewport(),
108 viewportWidth = _useViewport.width;
109
110 var mergedBreakpoints = React.useMemo(function () {
111 return _objectSpread({}, breakpoints.BREAKPOINTS, {}, breakpoints$1);
112 }, [breakpoints$1]); // If the parent width is not passed, use the viewport width.
113
114 var _useMemo = React.useMemo(function () {
115 return getLayoutSize(parentWidth === undefined ? viewportWidth : parentWidth, mergedBreakpoints);
116 }, [viewportWidth, parentWidth, mergedBreakpoints]),
117 _useMemo2 = slicedToArray._slicedToArray(_useMemo, 2),
118 layoutName = _useMemo2[0],
119 layoutWidth = _useMemo2[1];
120
121 return /*#__PURE__*/React__default.createElement(LayoutContext.Provider, {
122 value: {
123 layoutWidth: layoutWidth,
124 layoutName: layoutName
125 }
126 }, /*#__PURE__*/React__default.createElement(_StyledDiv, _extends._extends({}, props, {
127 _css: layoutName === 'small' ? 'auto' : "".concat(layoutWidth, "px"),
128 _css2: mergedBreakpoints.min,
129 _css3: css.cssPx(paddingBottom)
130 }), children));
131}
132
133Layout.propTypes = {
134 breakpoints: index.PropTypes.shape({
135 min: index.PropTypes.number,
136 small: index.PropTypes.number,
137 medium: index.PropTypes.number,
138 large: index.PropTypes.number
139 }),
140 children: index.PropTypes.node,
141 paddingBottom: index.PropTypes.oneOfType([index.PropTypes.number, index.PropTypes.string]),
142 parentWidth: index.PropTypes.number
143};
144Layout.defaultProps = {
145 breakpoints: {},
146 paddingBottom: 3 * constants.GU
147}; // Can be used to build an alternative Layout component
148
149Layout.__Context = LayoutContext;
150
151exports.default = Layout;
152exports.useLayout = useLayout;
153//# sourceMappingURL=Layout.js.map