UNPKG

@atlaskit/page

Version:

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

114 lines (108 loc) 4.43 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; /** * @jsxRuntime classic * @jsx jsx */ import { createContext, useContext, useMemo } from 'react'; // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766 import { css, jsx } from '@emotion/react'; import { defaultMedium, varColumnsNum, varColumnSpan, varGridSpacing } from './constants'; import { GridContext } from './grid-context'; /** * 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 === 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(varColumnsNum, "))"); var gridColumnStyles = 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(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(varGridSpacing, ") / 2)"), flexGrow: 1, flexShrink: 0, wordWrap: 'break-word' }); var gridColumnWidthStyles = _defineProperty(_defineProperty(_defineProperty({}, ColumnVariant.Auto, 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(varGridSpacing, "))"), flexBasis: "auto" })), ColumnVariant.Bounded, 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(varColumnSpan, ") - var(").concat(varGridSpacing, "))"), flexBasis: "100%" })), ColumnVariant.FullWidth, 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(varGridSpacing, "))"), flexBasis: "100%" })); /** * __Grid column context__ * * @internal */ export var GridColumnContext = /*#__PURE__*/createContext({ medium: 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 ? defaultMedium : _ref2$medium, children = _ref2.children, testId = _ref2.testId; var _useContext = useContext(GridContext), columns = _useContext.columns; var contextValue = 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 jsx(GridColumnContext.Provider, { value: contextValue }, jsx("div", { css: [gridColumnStyles, gridColumnWidthStyles[variant]] // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop -- Ignored via go/DSP-18766 , style: _defineProperty({}, varColumnSpan, variant === ColumnVariant.Auto ? 'auto' : colSpan), "data-testid": testId }, children)); }; export default GridColumn;