diff --git a/packages/grafana-ui/src/components/Layout/Box/Box.tsx b/packages/grafana-ui/src/components/Layout/Box/Box.tsx index 3f4a36c6950..34ff3d88611 100644 --- a/packages/grafana-ui/src/components/Layout/Box/Box.tsx +++ b/packages/grafana-ui/src/components/Layout/Box/Box.tsx @@ -1,4 +1,5 @@ import { css } from '@emotion/css'; +import { Property } from 'csstype'; import React, { ElementType, forwardRef, PropsWithChildren } from 'react'; import { GrafanaTheme2, ThemeSpacingTokens, ThemeShape, ThemeShadows } from '@grafana/data'; @@ -58,6 +59,15 @@ interface BoxProps extends FlexProps, Omit, 'c justifyContent?: ResponsiveProp; gap?: ResponsiveProp; + // Size props + minWidth?: ResponsiveProp>; + maxWidth?: ResponsiveProp>; + width?: ResponsiveProp>; + + minHeight?: ResponsiveProp>; + maxHeight?: ResponsiveProp>; + height?: ResponsiveProp>; + // Other props backgroundColor?: ResponsiveProp; display?: ResponsiveProp; @@ -98,6 +108,12 @@ export const Box = forwardRef>((props, boxShadow, element, gap, + width, + minWidth, + maxWidth, + height, + minHeight, + maxHeight, ...rest } = props; const styles = useStyles2( @@ -129,7 +145,13 @@ export const Box = forwardRef>((props, justifyContent, alignItems, boxShadow, - gap + gap, + width, + minWidth, + maxWidth, + height, + minHeight, + maxHeight ); const Element = element ?? 'div'; @@ -195,7 +217,13 @@ const getStyles = ( justifyContent: BoxProps['justifyContent'], alignItems: BoxProps['alignItems'], boxShadow: BoxProps['boxShadow'], - gap: BoxProps['gap'] + gap: BoxProps['gap'], + width: BoxProps['width'], + minWidth: BoxProps['minWidth'], + maxWidth: BoxProps['maxWidth'], + height: BoxProps['height'], + minHeight: BoxProps['minHeight'], + maxHeight: BoxProps['maxHeight'] ) => { return { root: css([ @@ -290,6 +318,24 @@ const getStyles = ( getResponsiveStyle(theme, gap, (val) => ({ gap: theme.spacing(val), })), + getResponsiveStyle(theme, width, (val) => ({ + width: theme.spacing(val), + })), + getResponsiveStyle(theme, minWidth, (val) => ({ + minWidth: theme.spacing(val), + })), + getResponsiveStyle(theme, maxWidth, (val) => ({ + maxWidth: theme.spacing(val), + })), + getResponsiveStyle(theme, height, (val) => ({ + height: theme.spacing(val), + })), + getResponsiveStyle(theme, minHeight, (val) => ({ + minHeight: theme.spacing(val), + })), + getResponsiveStyle(theme, maxHeight, (val) => ({ + maxHeight: theme.spacing(val), + })), ]), }; };