UNPKG

@atlaskit/primitives

Version:

Primitives are token-backed low-level building blocks.

160 lines (159 loc) 4 kB
/** @jsx jsx */ import { forwardRef, memo } from 'react'; import { css, jsx } from '@emotion/react'; import { spaceStylesMap } from '../xcss/style-maps.partial'; import { parseXcss } from '../xcss/xcss'; var justifyContentMap = { start: css({ justifyContent: 'start' }), center: css({ justifyContent: 'center' }), end: css({ justifyContent: 'end' }), 'space-between': css({ justifyContent: 'space-between' }), 'space-around': css({ justifyContent: 'space-around' }), 'space-evenly': css({ justifyContent: 'space-evenly' }), stretch: css({ justifyContent: 'stretch' }) }; var justifyItemsMap = { start: css({ justifyItems: 'start' }), center: css({ justifyItems: 'center' }), end: css({ justifyItems: 'end' }), stretch: css({ justifyItems: 'stretch' }) }; var alignContentMap = { start: css({ alignContent: 'start' }), center: css({ alignContent: 'center' }), end: css({ alignContent: 'end' }), 'space-between': css({ alignContent: 'space-between' }), 'space-around': css({ alignContent: 'space-around' }), 'space-evenly': css({ alignContent: 'space-evenly' }), stretch: css({ alignContent: 'stretch' }) }; var alignItemsMap = { start: css({ alignItems: 'start' }), center: css({ alignItems: 'center' }), baseline: css({ alignItems: 'baseline' }), end: css({ alignItems: 'end' }) }; var baseStyles = css({ display: 'grid', boxSizing: 'border-box' }); var gridAutoFlowMap = { row: css({ gridAutoFlow: 'row' }), column: css({ gridAutoFlow: 'column' }), dense: css({ gridAutoFlow: 'dense' }), 'row dense': css({ gridAutoFlow: 'row dense' }), 'column dense': css({ gridAutoFlow: 'column dense' }) }; /** * __Grid__ * * `Grid` is a primitive component that implements the CSS Grid API. * * - [Examples](https://atlassian.design/components/primitives/grid/examples) * - [Code](https://atlassian.design/components/primitives/grid/code) * * @example * ```tsx * import { Grid, Box } from '@atlaskit/primitives' * * const Component = () => ( * <Grid gap="space.100" gridColumns="1fr 1fr"> * <Box padding="space.100" backgroundColor="neutral"></Box> * <Box padding="space.100" backgroundColor="neutral"></Box> * </Grid> * ) * ``` */ var Grid = /*#__PURE__*/memo( /*#__PURE__*/forwardRef(function (_ref, ref) { var as = _ref.as, alignItems = _ref.alignItems, alignContent = _ref.alignContent, justifyContent = _ref.justifyContent, gap = _ref.gap, columnGap = _ref.columnGap, rowGap = _ref.rowGap, children = _ref.children, id = _ref.id, role = _ref.role, testId = _ref.testId, autoFlow = _ref.autoFlow, gridTemplateAreas = _ref.templateAreas, gridTemplateRows = _ref.templateRows, gridTemplateColumns = _ref.templateColumns, xcss = _ref.xcss; var Component = as || 'div'; var xcssClassName = xcss && parseXcss(xcss); var style = gridTemplateAreas || gridTemplateColumns || gridTemplateRows ? Object.assign({}, { gridTemplateAreas: gridTemplateAreas ? gridTemplateAreas.map(function (str) { return "\"".concat(str, "\""); }).join('\n') : undefined, gridTemplateColumns: gridTemplateColumns, gridTemplateRows: gridTemplateRows }) : undefined; return jsx(Component, { id: id, role: role, style: style, css: [baseStyles, gap && spaceStylesMap.gap[gap], columnGap && spaceStylesMap.columnGap[columnGap], rowGap && spaceStylesMap.rowGap[rowGap], alignItems && alignItemsMap[alignItems], alignContent && alignContentMap[alignContent], justifyContent && justifyContentMap[justifyContent], autoFlow && gridAutoFlowMap[autoFlow], // eslint-disable-next-line @atlaskit/design-system/consistent-css-prop-usage xcssClassName && xcssClassName], "data-testid": testId, ref: ref }, children); })); Grid.displayName = 'Grid'; export default Grid;