@grafana/ui
Version:
Grafana Components Library
1 lines • 6.24 kB
Source Map (JSON)
{"version":3,"file":"TypeaheadItem.mjs","sources":["../../../../src/components/Typeahead/TypeaheadItem.tsx"],"sourcesContent":["import { css, cx } from '@emotion/css';\nimport * as React from 'react';\nimport Highlighter from 'react-highlight-words';\n\nimport { GrafanaTheme2 } from '@grafana/data';\n\nimport { useStyles2 } from '../../themes/ThemeContext';\nimport { CompletionItem, CompletionItemKind } from '../../types/completion';\n\nimport { PartialHighlighter } from './PartialHighlighter';\n\ninterface Props {\n isSelected: boolean;\n item: CompletionItem;\n style: React.CSSProperties;\n prefix?: string;\n\n onClickItem?: (event: React.MouseEvent) => void;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n typeaheadItem: css({\n border: 'none',\n background: 'none',\n textAlign: 'left',\n label: 'type-ahead-item',\n height: 'auto',\n fontFamily: theme.typography.fontFamilyMonospace,\n padding: theme.spacing(1, 1, 1, 2),\n fontSize: theme.typography.bodySmall.fontSize,\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n zIndex: 11,\n display: 'block',\n whiteSpace: 'nowrap',\n cursor: 'pointer',\n [theme.transitions.handleMotion('no-preference', 'reduce')]: {\n transition:\n 'color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), border-color 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), background 0.3s cubic-bezier(0.645, 0.045, 0.355, 1), padding 0.15s cubic-bezier(0.645, 0.045, 0.355, 1)',\n },\n }),\n\n typeaheadItemSelected: css({\n label: 'type-ahead-item-selected',\n backgroundColor: theme.colors.background.secondary,\n }),\n\n typeaheadItemMatch: css({\n label: 'type-ahead-item-match',\n color: theme.v1.palette.yellow,\n borderBottom: `1px solid ${theme.v1.palette.yellow}`,\n padding: 'inherit',\n background: 'inherit',\n }),\n\n typeaheadItemGroupTitle: css({\n label: 'type-ahead-item-group-title',\n color: theme.colors.text.secondary,\n fontSize: theme.typography.bodySmall.fontSize,\n lineHeight: theme.typography.body.lineHeight,\n padding: theme.spacing(1),\n }),\n});\n\nexport const TypeaheadItem = (props: Props) => {\n const styles = useStyles2(getStyles);\n\n const { isSelected, item, prefix, style, onMouseEnter, onMouseLeave, onClickItem } = props;\n const className = isSelected ? cx([styles.typeaheadItem, styles.typeaheadItemSelected]) : cx([styles.typeaheadItem]);\n const highlightClassName = cx([styles.typeaheadItemMatch]);\n const itemGroupTitleClassName = cx([styles.typeaheadItemGroupTitle]);\n const label = item.label || '';\n\n if (item.kind === CompletionItemKind.GroupTitle) {\n return (\n <li className={itemGroupTitleClassName} style={style}>\n <span>{label}</span>\n </li>\n );\n }\n\n return (\n <li role=\"none\">\n <button\n role=\"menuitem\"\n className={className}\n style={style}\n onMouseDown={onClickItem}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n type=\"button\"\n >\n {item.highlightParts !== undefined ? (\n <PartialHighlighter\n text={label}\n highlightClassName={highlightClassName}\n highlightParts={item.highlightParts}\n ></PartialHighlighter>\n ) : (\n <Highlighter\n textToHighlight={label}\n searchWords={[prefix ?? '']}\n autoEscape={true}\n highlightClassName={highlightClassName}\n />\n )}\n </button>\n </li>\n );\n};\n"],"names":[],"mappings":"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"}