@atlaskit/page
Version:
A page layout organizes sections on a page using a grid and grid columns.
114 lines (108 loc) • 4.43 kB
JavaScript
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;