UNPKG

@grafana/ui

Version:
1 lines 4.52 kB
{"version":3,"file":"SeriesIcon.mjs","sources":["../../../../src/components/VizLegend/SeriesIcon.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport { type CSSProperties } from 'react';\nimport * as React from 'react';\n\nimport { type GrafanaTheme2, fieldColorModeRegistry } from '@grafana/data';\nimport { type LineStyle } from '@grafana/schema';\n\nimport { useTheme2, useStyles2 } from '../../themes/ThemeContext';\n\nexport interface Props extends React.HTMLAttributes<HTMLDivElement> {\n color?: string;\n gradient?: string;\n lineStyle?: LineStyle;\n}\n\nexport const SeriesIcon = React.memo(\n React.forwardRef<HTMLDivElement, Props>(({ color, className, gradient, lineStyle, ...restProps }, ref) => {\n const theme = useTheme2();\n const styles = useStyles2(getStyles);\n\n let cssColor: string;\n\n if (gradient) {\n const colors = fieldColorModeRegistry.get(gradient).getColors?.(theme);\n if (colors?.length) {\n cssColor = `linear-gradient(90deg, ${colors.join(', ')})`;\n } else {\n // Not sure what to default to, this will return gray, this should not happen though.\n cssColor = theme.visualization.getColorByName('');\n }\n } else {\n cssColor = color!;\n }\n\n let customStyle: CSSProperties;\n\n if (lineStyle?.fill === 'dot' && !gradient) {\n // make a circle bg image and repeat it\n customStyle = {\n backgroundImage: `radial-gradient(circle at 2px 2px, ${color} 2px, transparent 0)`,\n backgroundSize: '4px 4px',\n backgroundRepeat: 'space',\n };\n } else if (lineStyle?.fill === 'dash' && !gradient) {\n // make a rectangle bg image and repeat it\n customStyle = {\n backgroundImage: `linear-gradient(to right, ${color} 100%, transparent 0%)`,\n backgroundSize: '6px 4px',\n backgroundRepeat: 'space',\n };\n } else {\n customStyle = {\n background: cssColor,\n borderRadius: theme.shape.radius.pill,\n };\n }\n\n return (\n <div\n data-testid=\"series-icon\"\n ref={ref}\n className={cx(className, styles.forcedColors, styles.container)}\n style={customStyle}\n {...restProps}\n />\n );\n })\n);\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n container: css({\n display: 'inline-block',\n verticalAlign: 'middle',\n width: '14px',\n height: '4px',\n }),\n forcedColors: css({\n '@media (forced-colors: active)': {\n forcedColorAdjust: 'none',\n },\n }),\n});\n\nSeriesIcon.displayName = 'SeriesIcon';\n"],"names":[],"mappings":";;;;;;;AAeO,MAAM,aAAa,KAAA,CAAM,IAAA;AAAA,EAC9B,KAAA,CAAM,UAAA,CAAkC,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,SAAA,EAAW,GAAG,SAAA,EAAU,EAAG,GAAA,KAAQ;AAhB5G,IAAA,IAAA,EAAA,EAAA,EAAA;AAiBI,IAAA,MAAM,QAAQ,SAAA,EAAU;AACxB,IAAA,MAAM,MAAA,GAAS,WAAW,SAAS,CAAA;AAEnC,IAAA,IAAI,QAAA;AAEJ,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAM,UAAS,EAAA,GAAA,CAAA,EAAA,GAAA,sBAAA,CAAuB,GAAA,CAAI,QAAQ,CAAA,EAAE,cAArC,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAiD,KAAA,CAAA;AAChE,MAAA,IAAI,iCAAQ,MAAA,EAAQ;AAClB,QAAA,QAAA,GAAW,CAAA,uBAAA,EAA0B,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,CAAA;AAAA,MACxD,CAAA,MAAO;AAEL,QAAA,QAAA,GAAW,KAAA,CAAM,aAAA,CAAc,cAAA,CAAe,EAAE,CAAA;AAAA,MAClD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,KAAA;AAAA,IACb;AAEA,IAAA,IAAI,WAAA;AAEJ,IAAA,IAAA,CAAI,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,IAAA,MAAS,KAAA,IAAS,CAAC,QAAA,EAAU;AAE1C,MAAA,WAAA,GAAc;AAAA,QACZ,eAAA,EAAiB,sCAAsC,KAAK,CAAA,oBAAA,CAAA;AAAA,QAC5D,cAAA,EAAgB,SAAA;AAAA,QAChB,gBAAA,EAAkB;AAAA,OACpB;AAAA,IACF,CAAA,MAAA,IAAA,CAAW,SAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,SAAA,CAAW,IAAA,MAAS,MAAA,IAAU,CAAC,QAAA,EAAU;AAElD,MAAA,WAAA,GAAc;AAAA,QACZ,eAAA,EAAiB,6BAA6B,KAAK,CAAA,sBAAA,CAAA;AAAA,QACnD,cAAA,EAAgB,SAAA;AAAA,QAChB,gBAAA,EAAkB;AAAA,OACpB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,WAAA,GAAc;AAAA,QACZ,UAAA,EAAY,QAAA;AAAA,QACZ,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO;AAAA,OACnC;AAAA,IACF;AAEA,IAAA,uBACE,GAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,aAAA;AAAA,QACZ,GAAA;AAAA,QACA,WAAW,EAAA,CAAG,SAAA,EAAW,MAAA,CAAO,YAAA,EAAc,OAAO,SAAS,CAAA;AAAA,QAC9D,KAAA,EAAO,WAAA;AAAA,QACN,GAAG;AAAA;AAAA,KACN;AAAA,EAEJ,CAAC;AACH;AAEA,MAAM,SAAA,GAAY,CAAC,KAAA,MAA0B;AAAA,EAC3C,WAAW,GAAA,CAAI;AAAA,IACb,OAAA,EAAS,cAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,KAAA,EAAO,MAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACT,CAAA;AAAA,EACD,cAAc,GAAA,CAAI;AAAA,IAChB,gCAAA,EAAkC;AAAA,MAChC,iBAAA,EAAmB;AAAA;AACrB,GACD;AACH,CAAA,CAAA;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;;;;"}