UNPKG

@grafana/ui

Version:
1 lines 16.6 kB
{"version":3,"file":"Box.mjs","sources":["../../../../../src/components/Layout/Box/Box.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { Property } from 'csstype';\nimport { ElementType, forwardRef, PropsWithChildren } from 'react';\nimport * as React from 'react';\n\nimport { GrafanaTheme2, ThemeSpacingTokens, ThemeShape, ThemeShadows } from '@grafana/data';\n\nimport { useStyles2 } from '../../../themes/ThemeContext';\nimport { AlignItems, Direction, FlexProps, JustifyContent } from '../types';\nimport { ResponsiveProp, getResponsiveStyle } from '../utils/responsiveness';\nimport { getSizeStyles, SizeProps } from '../utils/styles';\n\ntype Display = 'flex' | 'block' | 'inline' | 'inline-block' | 'none';\nexport type BackgroundColor = keyof GrafanaTheme2['colors']['background'] | 'error' | 'success' | 'warning' | 'info';\nexport type BorderStyle = 'solid' | 'dashed';\nexport type BorderColor = keyof GrafanaTheme2['colors']['border'] | 'error' | 'success' | 'warning' | 'info';\nexport type BorderRadius = keyof ThemeShape['radius'];\nexport type BoxShadow = keyof ThemeShadows;\n\nexport interface BoxProps extends FlexProps, SizeProps, Omit<React.HTMLAttributes<HTMLElement>, 'className' | 'style'> {\n // Margin props\n /** Sets the property `margin` */\n margin?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the properties `margin-top` and `margin-bottom`. Higher priority than margin. */\n marginX?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the properties `margin-left` and `margin-right`. Higher priority than margin. */\n marginY?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the property `margin-top`. Higher priority than margin and marginY. */\n marginTop?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the property `margin-bottom`. Higher priority than margin and marginXY */\n marginBottom?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the property `margin-left`. Higher priority than margin and marginX. */\n marginLeft?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the property `margin-right`. Higher priority than margin and marginX. */\n marginRight?: ResponsiveProp<ThemeSpacingTokens>;\n\n // Padding props\n /** Sets the property `padding` */\n padding?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the properties `padding-top` and `padding-bottom`. Higher priority than padding. */\n paddingX?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the properties `padding-left` and `padding-right`. Higher priority than padding. */\n paddingY?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the property `padding-top`. Higher priority than padding and paddingY. */\n paddingTop?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the property `padding-bottom`. Higher priority than padding and paddingY. */\n paddingBottom?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the property `padding-left`. Higher priority than padding and paddingX. */\n paddingLeft?: ResponsiveProp<ThemeSpacingTokens>;\n /** Sets the property `padding-right`. Higher priority than padding and paddingX. */\n paddingRight?: ResponsiveProp<ThemeSpacingTokens>;\n\n // Border Props\n borderStyle?: ResponsiveProp<BorderStyle>;\n borderColor?: ResponsiveProp<BorderColor>;\n borderRadius?: ResponsiveProp<BorderRadius>;\n\n // Flex Props\n alignItems?: ResponsiveProp<AlignItems>;\n direction?: ResponsiveProp<Direction>;\n justifyContent?: ResponsiveProp<JustifyContent>;\n gap?: ResponsiveProp<ThemeSpacingTokens>;\n\n // Other props\n backgroundColor?: ResponsiveProp<BackgroundColor>;\n display?: ResponsiveProp<Display>;\n boxShadow?: ResponsiveProp<BoxShadow>;\n /** Sets the HTML element that will be rendered as a Box. Defaults to 'div' */\n element?: ElementType;\n position?: ResponsiveProp<Property.Position>;\n}\n\nexport const Box = forwardRef<HTMLElement, PropsWithChildren<BoxProps>>((props, ref) => {\n const {\n children,\n margin,\n marginX,\n marginY,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n display,\n backgroundColor,\n grow,\n shrink,\n basis,\n flex,\n borderColor,\n borderStyle,\n borderRadius,\n direction,\n justifyContent,\n alignItems,\n boxShadow,\n element,\n gap,\n width,\n minWidth,\n maxWidth,\n height,\n minHeight,\n maxHeight,\n position,\n ...rest\n } = props;\n const styles = useStyles2(\n getStyles,\n margin,\n marginX,\n marginY,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n display,\n backgroundColor,\n grow,\n shrink,\n basis,\n flex,\n borderColor,\n borderStyle,\n borderRadius,\n direction,\n justifyContent,\n alignItems,\n boxShadow,\n gap,\n position\n );\n const sizeStyles = useStyles2(getSizeStyles, width, minWidth, maxWidth, height, minHeight, maxHeight);\n const Element = element ?? 'div';\n\n return (\n <Element ref={ref} className={cx(styles.root, sizeStyles)} {...rest}>\n {children}\n </Element>\n );\n});\n\nBox.displayName = 'Box';\n\nconst customBorderColor = (color: BorderColor, theme: GrafanaTheme2) => {\n switch (color) {\n case 'error':\n case 'success':\n case 'info':\n case 'warning':\n return theme.colors[color].borderTransparent;\n default:\n return color ? theme.colors.border[color] : undefined;\n }\n};\n\nconst customBackgroundColor = (color: BackgroundColor, theme: GrafanaTheme2) => {\n switch (color) {\n case 'error':\n case 'success':\n case 'info':\n case 'warning':\n return theme.colors[color].transparent;\n default:\n return color ? theme.colors.background[color] : undefined;\n }\n};\n\nconst getStyles = (\n theme: GrafanaTheme2,\n margin: BoxProps['margin'],\n marginX: BoxProps['marginX'],\n marginY: BoxProps['marginY'],\n marginTop: BoxProps['marginTop'],\n marginBottom: BoxProps['marginBottom'],\n marginLeft: BoxProps['marginLeft'],\n marginRight: BoxProps['marginRight'],\n padding: BoxProps['padding'],\n paddingX: BoxProps['paddingX'],\n paddingY: BoxProps['paddingY'],\n paddingTop: BoxProps['paddingTop'],\n paddingBottom: BoxProps['paddingBottom'],\n paddingLeft: BoxProps['paddingLeft'],\n paddingRight: BoxProps['paddingRight'],\n display: BoxProps['display'],\n backgroundColor: BoxProps['backgroundColor'],\n grow: BoxProps['grow'],\n shrink: BoxProps['shrink'],\n basis: BoxProps['basis'],\n flex: BoxProps['flex'],\n borderColor: BoxProps['borderColor'],\n borderStyle: BoxProps['borderStyle'],\n borderRadius: BoxProps['borderRadius'],\n direction: BoxProps['direction'],\n justifyContent: BoxProps['justifyContent'],\n alignItems: BoxProps['alignItems'],\n boxShadow: BoxProps['boxShadow'],\n gap: BoxProps['gap'],\n position: BoxProps['position']\n) => {\n return {\n root: css([\n getResponsiveStyle(theme, margin, (val) => ({\n margin: theme.spacing(val),\n })),\n getResponsiveStyle(theme, marginX, (val) => ({\n marginLeft: theme.spacing(val),\n marginRight: theme.spacing(val),\n })),\n getResponsiveStyle(theme, marginY, (val) => ({\n marginTop: theme.spacing(val),\n marginBottom: theme.spacing(val),\n })),\n getResponsiveStyle(theme, marginTop, (val) => ({\n marginTop: theme.spacing(val),\n })),\n getResponsiveStyle(theme, marginBottom, (val) => ({\n marginBottom: theme.spacing(val),\n })),\n getResponsiveStyle(theme, marginLeft, (val) => ({\n marginLeft: theme.spacing(val),\n })),\n getResponsiveStyle(theme, marginRight, (val) => ({\n marginRight: theme.spacing(val),\n })),\n getResponsiveStyle(theme, padding, (val) => ({\n padding: theme.spacing(val),\n })),\n getResponsiveStyle(theme, paddingX, (val) => ({\n paddingLeft: theme.spacing(val),\n paddingRight: theme.spacing(val),\n })),\n getResponsiveStyle(theme, paddingY, (val) => ({\n paddingTop: theme.spacing(val),\n paddingBottom: theme.spacing(val),\n })),\n getResponsiveStyle(theme, paddingTop, (val) => ({\n paddingTop: theme.spacing(val),\n })),\n getResponsiveStyle(theme, paddingBottom, (val) => ({\n paddingBottom: theme.spacing(val),\n })),\n getResponsiveStyle(theme, paddingLeft, (val) => ({\n paddingLeft: theme.spacing(val),\n })),\n getResponsiveStyle(theme, paddingRight, (val) => ({\n paddingRight: theme.spacing(val),\n })),\n getResponsiveStyle(theme, display, (val) => ({\n display: val,\n })),\n getResponsiveStyle(theme, backgroundColor, (val) => ({\n backgroundColor: customBackgroundColor(val, theme),\n })),\n getResponsiveStyle(theme, direction, (val) => ({\n flexDirection: val,\n })),\n getResponsiveStyle(theme, grow, (val) => ({\n flexGrow: val,\n })),\n getResponsiveStyle(theme, shrink, (val) => ({\n flexShrink: val,\n })),\n getResponsiveStyle(theme, basis, (val) => ({\n flexBasis: val,\n })),\n getResponsiveStyle(theme, flex, (val) => ({\n flex: val,\n })),\n getResponsiveStyle(theme, borderStyle, (val) => ({\n borderStyle: val,\n })),\n getResponsiveStyle(theme, borderColor, (val) => ({\n borderColor: customBorderColor(val, theme),\n })),\n (borderStyle || borderColor) && {\n borderWidth: '1px',\n },\n getResponsiveStyle(theme, justifyContent, (val) => ({\n justifyContent: val,\n })),\n getResponsiveStyle(theme, alignItems, (val) => ({\n alignItems: val,\n })),\n getResponsiveStyle(theme, borderRadius, (val) => ({\n borderRadius: theme.shape.radius[val],\n })),\n getResponsiveStyle(theme, boxShadow, (val) => ({\n boxShadow: theme.shadows[val],\n })),\n getResponsiveStyle(theme, gap, (val) => ({\n gap: theme.spacing(val),\n })),\n getResponsiveStyle(theme, position, (val) => ({\n position: val,\n })),\n ]),\n };\n};\n"],"names":[],"mappings":"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"}