@grafana/ui
Version:
Grafana Components Library
1 lines • 6.15 kB
Source Map (JSON)
{"version":3,"file":"VizLegendList.mjs","sources":["../../../../src/components/VizLegend/VizLegendList.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes';\nimport { InlineList } from '../List/InlineList';\nimport { List } from '../List/List';\n\nimport { VizLegendListItem } from './VizLegendListItem';\nimport { VizLegendBaseProps, VizLegendItem } from './types';\n\nexport interface Props<T> extends VizLegendBaseProps<T> {}\n\n/**\n * @internal\n */\nexport const VizLegendList = <T extends unknown>({\n items,\n itemRenderer,\n onLabelMouseOver,\n onLabelMouseOut,\n onLabelClick,\n placement,\n className,\n readonly,\n}: Props<T>) => {\n const styles = useStyles2(getStyles);\n\n if (!itemRenderer) {\n /* eslint-disable-next-line react/display-name */\n itemRenderer = (item) => (\n <VizLegendListItem\n item={item}\n onLabelClick={onLabelClick}\n onLabelMouseOver={onLabelMouseOver}\n onLabelMouseOut={onLabelMouseOut}\n readonly={readonly}\n />\n );\n }\n\n const getItemKey = (item: VizLegendItem<T>) => `${item.getItemKey ? item.getItemKey() : item.label}`;\n\n switch (placement) {\n case 'right': {\n const renderItem = (item: VizLegendItem<T>, index: number) => {\n return <span className={styles.itemRight}>{itemRenderer!(item, index)}</span>;\n };\n\n return (\n <div className={cx(styles.rightWrapper, className)}>\n <List items={items} renderItem={renderItem} getItemKey={getItemKey} />\n </div>\n );\n }\n case 'bottom':\n default: {\n const leftItems = items.filter((item) => item.yAxis === 1);\n const rightItems = items.filter((item) => item.yAxis !== 1);\n\n const renderItem = (item: VizLegendItem<T>, index: number) => {\n return <span className={styles.itemBottom}>{itemRenderer!(item, index)}</span>;\n };\n\n return (\n <div className={cx(styles.bottomWrapper, className)}>\n {leftItems.length > 0 && (\n <div className={styles.section}>\n <InlineList items={leftItems} renderItem={renderItem} getItemKey={getItemKey} />\n </div>\n )}\n {rightItems.length > 0 && (\n <div className={cx(styles.section, styles.sectionRight)}>\n <InlineList items={rightItems} renderItem={renderItem} getItemKey={getItemKey} />\n </div>\n )}\n </div>\n );\n }\n }\n};\n\nVizLegendList.displayName = 'VizLegendList';\n\nconst getStyles = (theme: GrafanaTheme2) => {\n const itemStyles = css({\n paddingRight: '10px',\n display: 'flex',\n fontSize: theme.typography.bodySmall.fontSize,\n whiteSpace: 'nowrap',\n });\n\n return {\n itemBottom: itemStyles,\n itemRight: cx(\n itemStyles,\n css({\n marginBottom: theme.spacing(0.5),\n })\n ),\n rightWrapper: css({\n padding: theme.spacing(0.5),\n }),\n bottomWrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n justifyContent: 'space-between',\n width: '100%',\n padding: theme.spacing(0.5),\n gap: '15px 25px',\n }),\n section: css({\n display: 'flex',\n }),\n sectionRight: css({\n justifyContent: 'flex-end',\n flexGrow: 1,\n flexBasis: '50%',\n }),\n };\n};\n"],"names":[],"mappings":"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"}