diff --git a/packages/grafana-ui/src/components/Layout/Grid/Grid.story.tsx b/packages/grafana-ui/src/components/Layout/Grid/Grid.story.tsx index 2c73d9d0f43..d4dadc083ad 100644 --- a/packages/grafana-ui/src/components/Layout/Grid/Grid.story.tsx +++ b/packages/grafana-ui/src/components/Layout/Grid/Grid.story.tsx @@ -6,6 +6,10 @@ import { useTheme2 } from '../../../themes'; import { Grid } from './Grid'; import mdx from './Grid.mdx'; +const dimensions = Array.from({ length: 9 }).map(() => ({ + minHeight: `${Math.random() * 100 + 100}px`, +})); + const meta: Meta = { title: 'General/Layout/Grid', component: Grid, @@ -22,15 +26,21 @@ const meta: Meta = { export const ColumnsNumber: StoryFn = (args) => { const theme = useTheme2(); return ( - + {Array.from({ length: 9 }).map((_, i) => ( -
+
N# {i}
))} ); }; +ColumnsNumber.argTypes = { + alignItems: { + control: 'select', + options: ['stretch', 'flex-start', 'flex-end', 'center', 'baseline', 'start', 'end', 'self-start', 'self-end'], + }, +}; ColumnsNumber.args = { columns: 3, }; diff --git a/packages/grafana-ui/src/components/Layout/Grid/Grid.tsx b/packages/grafana-ui/src/components/Layout/Grid/Grid.tsx index 0a452686b8a..4225bb6074b 100644 --- a/packages/grafana-ui/src/components/Layout/Grid/Grid.tsx +++ b/packages/grafana-ui/src/components/Layout/Grid/Grid.tsx @@ -4,12 +4,14 @@ import React, { forwardRef, HTMLAttributes } from 'react'; import { GrafanaTheme2, ThemeSpacingTokens } from '@grafana/data'; import { useStyles2 } from '../../../themes'; +import { AlignItems } from '../types'; import { getResponsiveStyle, ResponsiveProp } from '../utils/responsiveness'; interface GridPropsBase extends Omit, 'className' | 'style'> { children: NonNullable; /** Specifies the gutters between columns and rows. It is overwritten when a column or row gap has a value. */ gap?: ResponsiveProp; + alignItems?: ResponsiveProp; } interface PropsWithColumns extends GridPropsBase { @@ -30,8 +32,8 @@ interface PropsWithMinColumnWidth extends GridPropsBase { type GridProps = PropsWithColumns | PropsWithMinColumnWidth; export const Grid = forwardRef((props, ref) => { - const { children, gap, columns, minColumnWidth, ...rest } = props; - const styles = useStyles2(getGridStyles, gap, columns, minColumnWidth); + const { alignItems, children, gap, columns, minColumnWidth, ...rest } = props; + const styles = useStyles2(getGridStyles, gap, columns, minColumnWidth, alignItems); return (
@@ -46,7 +48,8 @@ const getGridStyles = ( theme: GrafanaTheme2, gap: GridProps['gap'], columns: GridProps['columns'], - minColumnWidth: GridProps['minColumnWidth'] + minColumnWidth: GridProps['minColumnWidth'], + alignItems: GridProps['alignItems'] ) => { return { grid: css([ @@ -62,6 +65,9 @@ const getGridStyles = ( getResponsiveStyle(theme, columns, (val) => ({ gridTemplateColumns: `repeat(${val}, 1fr)`, })), + getResponsiveStyle(theme, alignItems, (val) => ({ + alignItems: val, + })), ]), }; };