UNPKG

@atlaskit/page

Version:

A page layout organizes sections on a page using a grid and grid columns.

120 lines (114 loc) 4.94 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.GridColumnContext = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = require("react"); var _react2 = require("@emotion/react"); var _constants = require("./constants"); var _gridContext = require("./grid-context"); /** * @jsxRuntime classic * @jsx jsx */ // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766 /** * Determines the method by which column width is calculated. */ var ColumnVariant = /*#__PURE__*/function (ColumnVariant) { ColumnVariant["Auto"] = "auto"; ColumnVariant["Bounded"] = "bounded"; ColumnVariant["FullWidth"] = "fullWidth"; return ColumnVariant; }(ColumnVariant || {}); var getVariant = function getVariant(_ref) { var medium = _ref.medium, columns = _ref.columns; if (medium === _constants.defaultMedium) { return ColumnVariant.Auto; } else if (medium < columns) { return ColumnVariant.Bounded; } return ColumnVariant.FullWidth; }; /** * IE11 and Edge both have rounding issues for flexbox which is why a width of * 99.9999% is used. Using 100% here causes columns to wrap prematurely. */ var availableWidth = '99.9999%'; // eslint-disable-next-line @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 var singleColumnWidth = "(".concat(availableWidth, " / var(").concat(_constants.varColumnsNum, "))"); var gridColumnStyles = (0, _react2.css)({ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 minWidth: "calc(".concat(singleColumnWidth, " - var(").concat(_constants.varGridSpacing, "))"), // eslint-disable-next-line @atlaskit/design-system/ensure-design-token-usage, @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 margin: "0 calc(var(".concat(_constants.varGridSpacing, ") / 2)"), flexGrow: 1, flexShrink: 0, wordWrap: 'break-word' }); var gridColumnWidthStyles = (0, _defineProperty2.default)((0, _defineProperty2.default)((0, _defineProperty2.default)({}, ColumnVariant.Auto, (0, _react2.css)({ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 maxWidth: "calc(100% - var(".concat(_constants.varGridSpacing, "))"), flexBasis: "auto" })), ColumnVariant.Bounded, (0, _react2.css)({ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 maxWidth: "calc(".concat(singleColumnWidth, " * var(").concat(_constants.varColumnSpan, ") - var(").concat(_constants.varGridSpacing, "))"), flexBasis: "100%" })), ColumnVariant.FullWidth, (0, _react2.css)({ // eslint-disable-next-line @atlaskit/ui-styling-standard/no-imported-style-values, @atlaskit/ui-styling-standard/no-unsafe-values -- Ignored via go/DSP-18766 maxWidth: "calc(100% - var(".concat(_constants.varGridSpacing, "))"), flexBasis: "100%" })); /** * __Grid column context__ * * @internal */ var GridColumnContext = exports.GridColumnContext = /*#__PURE__*/(0, _react.createContext)({ medium: _constants.defaultMedium }); /** * __Grid column__ * * A grid column can span one or more column positions within a grid. * * - [Examples](https://atlaskit.atlassian.com/packages/design-system/page) */ var GridColumn = function GridColumn(_ref2) { var _ref2$medium = _ref2.medium, medium = _ref2$medium === void 0 ? _constants.defaultMedium : _ref2$medium, children = _ref2.children, testId = _ref2.testId; var _useContext = (0, _react.useContext)(_gridContext.GridContext), columns = _useContext.columns; var contextValue = (0, _react.useMemo)(function () { return { medium: medium }; }, [medium]); /** * The real column span, * obtained by clamping the passed `medium` value within the allowed range. */ var colSpan = Math.max(1, Math.min(medium, columns)); /** * How we should calculate the column width. */ var variant = getVariant({ medium: medium, columns: columns }); return (0, _react2.jsx)(GridColumnContext.Provider, { value: contextValue }, (0, _react2.jsx)("div", { css: [gridColumnStyles, gridColumnWidthStyles[variant]] // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766 , style: (0, _defineProperty2.default)({}, _constants.varColumnSpan, variant === ColumnVariant.Auto ? 'auto' : colSpan), "data-testid": testId }, children)); }; var _default = exports.default = GridColumn;