@grafana/ui
Version:
Grafana Components Library
1 lines • 16.9 kB
Source Map (JSON)
{"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\n/**\n * The Box Component is the most basic layout component. It can be used to build more complex components and layouts with properties that use our design tokens instead of using CSS.\n *\n * https://developers.grafana.com/ui/latest/index.html?path=/docs/layout-box--docs\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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"}