@grafana/scenes 8.20.0 → 8.20.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
# v8.20.1 (Wed Sep 30 2026)
|
|
2
|
+
|
|
3
|
+
#### 🐛 Bug Fix
|
|
4
|
+
|
|
5
|
+
- Chore: update adhoc filter styles [#1668](https://github.com/grafana/scenes/pull/1668) ([@ashharrison90](https://github.com/ashharrison90))
|
|
6
|
+
|
|
7
|
+
#### Authors: 1
|
|
8
|
+
|
|
9
|
+
- Ashley Harrison ([@ashharrison90](https://github.com/ashharrison90))
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
1
13
|
# v8.20.0 (Wed Sep 30 2026)
|
|
2
14
|
|
|
3
15
|
#### 🚀 Enhancement
|
|
@@ -853,9 +853,10 @@ const getStyles$g = (theme) => ({
|
|
|
853
853
|
}
|
|
854
854
|
}),
|
|
855
855
|
dropdownWrapper: css({
|
|
856
|
-
backgroundColor: theme.colors.background.
|
|
856
|
+
backgroundColor: theme.colors.background.elevated,
|
|
857
857
|
color: theme.colors.text.primary,
|
|
858
858
|
boxShadow: theme.shadows.z2,
|
|
859
|
+
borderRadius: theme.shape.radius.default,
|
|
859
860
|
overflowY: "auto",
|
|
860
861
|
zIndex: theme.zIndex.portal
|
|
861
862
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AdHocFiltersCombobox.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FloatingFocusManager, FloatingPortal, UseFloatingOptions } from '@floating-ui/react';\nimport { Spinner, Text, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { AdHocFilterWithLabels, isMultiValueOperator, ONE_OF_OPERATOR, OPERATORS } from '../AdHocFiltersVariable';\nimport { ALL_VARIABLE_VALUE } from '../../constants';\nimport { AdHocFiltersController } from '../controller/AdHocFiltersController';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n DropdownItem,\n ExpressionHintPlaceholder,\n LoadingOptionsPlaceholder,\n MultiValueApplyButton,\n NoOptionsPlaceholder,\n OptionsErrorPlaceholder,\n} from './DropdownItem';\nimport {\n ERROR_STATE_DROPDOWN_WIDTH,\n flattenOptionGroups,\n generateFilterUpdatePayload,\n generatePlaceholder,\n populateInputValueOnInputTypeSwitch,\n setupDropdownAccessibility,\n switchInputType,\n switchToNextInputType,\n VIRTUAL_LIST_ITEM_HEIGHT,\n VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION,\n VIRTUAL_LIST_OVERSCAN,\n} from './utils';\nimport { handleOptionGroups } from '../../utils';\nimport { useFloatingInteractions, MAX_MENU_HEIGHT } from './useFloatingInteractions';\nimport { useFreeFormExpression } from './useFreeFormExpression';\nimport { MultiValuePill } from './MultiValuePill';\nimport { getAdhocOptionSearcher } from '../getAdhocOptionSearcher';\nimport {\n FILTER_CHANGED_INTERACTION,\n ADHOC_KEYS_DROPDOWN_INTERACTION,\n ADHOC_VALUES_DROPDOWN_INTERACTION,\n} from '../../../performance/interactionConstants';\n\ninterface AdHocComboboxProps {\n filter?: AdHocFilterWithLabels;\n isAlwaysWip?: boolean;\n isGroupBy?: boolean;\n controller: AdHocFiltersController;\n handleChangeViewMode?: (event?: React.MouseEvent, shouldFocusOnPillWrapperOverride?: boolean) => void;\n focusOnWipInputRef?: () => void;\n populateInputOnEdit?: boolean;\n onInputClick?: () => void;\n}\n\nexport type AdHocInputType = 'key' | 'operator' | 'value';\n\nexport const AdHocCombobox = forwardRef(function AdHocCombobox(\n {\n filter,\n controller,\n isAlwaysWip,\n isGroupBy,\n handleChangeViewMode,\n focusOnWipInputRef,\n populateInputOnEdit,\n onInputClick,\n }: AdHocComboboxProps,\n parentRef\n) {\n const [open, setOpen] = useState(false);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>([]);\n const [optionsLoading, setOptionsLoading] = useState<boolean>(false);\n const [optionsError, setOptionsError] = useState<boolean>(false);\n const [inputValue, setInputValue] = useState('');\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n\n const initialInputType: AdHocInputType = isAlwaysWip || isGroupBy ? 'key' : 'value';\n const [filterInputType, setInputType] = useState<AdHocInputType>(initialInputType);\n const [preventFiltering, setPreventFiltering] = useState<boolean>(initialInputType === 'value');\n\n const styles = useStyles2(getStyles);\n // control multi values with local state in order to commit all values at once and avoid wip reset mid creation\n const [filterMultiValues, setFilterMultiValues] = useState<Array<SelectableValue<string>>>([]);\n const [_, setForceRefresh] = useState({});\n const {\n allowCustomValue = true,\n onAddCustomValue,\n filters,\n inputPlaceholder,\n groupByInputPlaceholder,\n } = controller.useState();\n\n const multiValuePillWrapperRef = useRef<HTMLDivElement>(null);\n\n const hasMultiValueOperator = isMultiValueOperator(filter?.operator || '');\n const isMultiValueEdit = hasMultiValueOperator && filterInputType === 'value';\n // Origin (default) filters with the \"one of\" operator offer an explicit \"All\" option\n const offersAllOption = Boolean(filter?.origin) && filter?.operator === ONE_OF_OPERATOR;\n\n // used to identify operator element and prevent dismiss because it registers as outside click\n const operatorIdentifier = useId();\n\n const listRef = useRef<Array<HTMLElement | null>>([]);\n const disabledIndicesRef = useRef<number[]>([]);\n const filterInputTypeRef = useRef<AdHocInputType>(initialInputType);\n\n const optionsSearcher = useMemo(() => getAdhocOptionSearcher(options), [options]);\n\n const { canCommitExpressionUpdate, canCommitFullExpression, parseExpression, commitExpressionUpdate } =\n useFreeFormExpression({\n controller,\n filter,\n inputValue,\n filterInputType,\n allowCustomValue,\n isGroupBy,\n populateInputOnEdit,\n });\n\n const isLastFilter = useMemo(() => {\n if (isAlwaysWip) {\n return false;\n }\n\n if (filters.at(-1) === filter) {\n return true;\n }\n return false;\n }, [filter, isAlwaysWip, filters]);\n\n // reset wip filter. Used when navigating away with incomplete wip filer or when selecting wip filter value\n const handleResetWip = useCallback(() => {\n if (isAlwaysWip) {\n if (!isGroupBy) {\n controller.addWip();\n }\n setInputType('key');\n setInputValue('');\n }\n }, [controller, isAlwaysWip, isGroupBy]);\n\n const handleMultiValueFilterCommit = useCallback(\n (\n controller: AdHocFiltersController,\n filter: AdHocFilterWithLabels,\n filterMultiValues: Array<SelectableValue<string>>,\n preventFocus?: boolean\n ) => {\n if (!filterMultiValues.length && filter.origin) {\n controller.updateToMatchAll(filter);\n }\n\n // Selecting All commits as a regular value update: the variable derives the match all\n // flags from the value itself. Hosts are free to map updateToMatchAll to something else\n // (the default filters editor maps it to a removal), so it must not be used to author All.\n if (filterMultiValues.length) {\n const valueLabels: string[] = [];\n const values: string[] = [];\n filterMultiValues.forEach((item) => {\n valueLabels.push(item.label ?? item.value!);\n values.push(item.value!);\n });\n\n // Only update if values have changed\n let shouldUpdate = true;\n if (Array.isArray(filter.values) && filter.values.length === values.length) {\n shouldUpdate = !filter.values.every((v, i) => v === values[i]);\n }\n\n if (shouldUpdate) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n\n controller.updateFilter(filter!, { valueLabels, values, value: values[0] });\n setFilterMultiValues([]);\n }\n\n if (!preventFocus) {\n setTimeout(() => refs.domReference.current?.focus());\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const handleLocalMultiValueChange = useCallback((selectedItem: SelectableValue<string>) => {\n setFilterMultiValues((items) => {\n // \"All\" is exclusive: selecting it clears other values, selecting a value clears \"All\"\n if (selectedItem.value === ALL_VARIABLE_VALUE) {\n return items.some((item) => item.value === ALL_VARIABLE_VALUE) ? [] : [selectedItem];\n }\n const itemsWithoutAll = items.filter((item) => item.value !== ALL_VARIABLE_VALUE);\n if (itemsWithoutAll.some((item) => item.value === selectedItem.value)) {\n return itemsWithoutAll.filter((item) => item.value !== selectedItem.value);\n }\n return [...itemsWithoutAll, selectedItem];\n });\n }, []);\n\n const onOpenChange = useCallback<NonNullable<UseFloatingOptions['onOpenChange']>>(\n (nextOpen, _, reason) => {\n const isExplicitDismiss = reason === 'outside-press' || reason === 'escape-key';\n\n // In edit mode, only allow explicit dismiss (outside-press / escape-key).\n // Ignore every other close trigger (e.g. FloatingFocusManager focus-out\n // when a multi-value pill is removed and focus drifts to <body>).\n if (!nextOpen && !isAlwaysWip && !isExplicitDismiss) {\n return;\n }\n\n setOpen(nextOpen);\n\n if (isExplicitDismiss) {\n if (isMultiValueEdit) {\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n } else {\n if (filter && filter.origin && inputValue === '') {\n controller.updateToMatchAll(filter);\n }\n }\n\n handleResetWip();\n handleChangeViewMode?.();\n }\n },\n [\n filter,\n filterMultiValues,\n handleChangeViewMode,\n handleMultiValueFilterCommit,\n handleResetWip,\n inputValue,\n isMultiValueEdit,\n isAlwaysWip,\n controller,\n ]\n );\n\n // generate ids from multi values in order to prevent outside click based on those ids\n const outsidePressIdsToIgnore = useMemo(() => {\n return [\n operatorIdentifier,\n ...filterMultiValues.reduce<string[]>(\n (acc, item, i) => [...acc, `${item.value}-${i}`, `${item.value}-${i}-close-icon`],\n []\n ),\n ];\n }, [operatorIdentifier, filterMultiValues]);\n\n const { refs, floatingStyles, context, getReferenceProps, getFloatingProps, getItemProps } = useFloatingInteractions({\n open,\n onOpenChange,\n activeIndex,\n setActiveIndex,\n outsidePressIdsToIgnore,\n listRef,\n disabledIndicesRef,\n });\n\n // pass ability to focus on input element back to parent\n // parentRef is coming from AdHocFiltersComboboxRenderer\n useImperativeHandle(parentRef, () => () => refs.domReference.current?.focus(), [refs.domReference]);\n\n function onChange(event: React.ChangeEvent<HTMLInputElement>) {\n const value = event.target.value;\n setInputValue(value);\n\n const nextIsExpressionInput = parseExpression(value) !== null;\n const nextFilteredItems = flattenOptionGroups(handleOptionGroups(optionsSearcher(value)));\n\n if (nextIsExpressionInput) {\n setActiveIndex(null);\n } else if (!nextFilteredItems.length && allowCustomValue) {\n setActiveIndex(0);\n } else if (isMultiValueEdit && offersAllOption && !value) {\n // An empty input re-prepends the All row, which shifts every index by one\n setActiveIndex(0);\n } else {\n setActiveIndex(getFirstSelectableIndex(nextFilteredItems));\n }\n if (preventFiltering) {\n setPreventFiltering(false);\n }\n }\n\n const handleRemoveMultiValue = useCallback(\n (item: SelectableValue<string>) => {\n setFilterMultiValues((selected) => selected.filter((option) => option.value !== item.value));\n setTimeout(() => refs.domReference.current?.focus());\n },\n [refs.domReference]\n );\n\n // operation order on fetched options:\n // fuzzy search -> extract into groups -> flatten group labels and options\n const filteredDropDownItems = flattenOptionGroups(\n handleOptionGroups(optionsSearcher(preventFiltering ? '' : inputValue))\n );\n\n const getFirstSelectableIndex = useCallback((items: Array<SelectableValue<string>>) => {\n const index = items.findIndex((item) => !item.options);\n return index >= 0 ? index : null;\n }, []);\n\n // adding custom option this way so that virtualiser is aware of it and can scroll to\n if (allowCustomValue && filterInputType !== 'operator' && inputValue && !canCommitExpressionUpdate) {\n const operatorDefinition = OPERATORS.find((op) => filter?.operator === op.value);\n const customOptionValue: SelectableValue<string> = {\n value: inputValue.trim(),\n label: inputValue.trim(),\n isCustom: true,\n };\n\n // If operator is regex, add custom value option first\n if (operatorDefinition?.isRegex) {\n filteredDropDownItems.unshift(customOptionValue);\n } else {\n filteredDropDownItems.push(customOptionValue);\n }\n }\n\n // Selecting All commits the special $__all value, which lifts the filter's restriction\n // from queries. Not offered for \"not one of\" where \"All\" would read as excluding everything.\n if (isMultiValueEdit && offersAllOption && !inputValue) {\n filteredDropDownItems.unshift({\n label: t('grafana-scenes.components.adhoc-filters-combobox.all-values', 'All'),\n value: ALL_VARIABLE_VALUE,\n });\n }\n\n // calculate width and populate listRef and disabledIndicesRef for arrow key navigation\n const maxOptionWidth = setupDropdownAccessibility(filteredDropDownItems, listRef, disabledIndicesRef);\n\n const handleFetchOptions = useCallback(\n async (inputType: AdHocInputType) => {\n // Start profiling the user interaction\n const interactionName = inputType === 'key' ? ADHOC_KEYS_DROPDOWN_INTERACTION : ADHOC_VALUES_DROPDOWN_INTERACTION;\n\n if (inputType !== 'operator') {\n controller.startInteraction?.(interactionName);\n }\n\n setOptionsError(false);\n setOptionsLoading(true);\n setOptions([]);\n\n let options: Array<SelectableValue<string>> = [];\n\n try {\n if (inputType === 'key') {\n if (isGroupBy && controller.getGroupByKeys) {\n options = await controller.getGroupByKeys(null);\n } else {\n options = await controller.getKeys(null);\n }\n } else if (inputType === 'operator') {\n options = controller.getOperators();\n } else if (inputType === 'value') {\n options = await controller.getValuesFor(filter!);\n }\n\n // if input type changed before fetch completed then abort updating options\n // this can cause race condition and return incorrect options when input type changed\n if (filterInputTypeRef.current !== inputType) {\n controller.stopInteraction?.();\n return;\n }\n setOptions(options);\n if (inputType === 'value' && offersAllOption) {\n // The prepended All row takes the initial highlight, keeping the index valid\n // when the first fetched option is a group header\n setActiveIndex(0);\n } else if (options[0]?.group) {\n setActiveIndex(1);\n } else {\n setActiveIndex(0);\n }\n } catch (e) {\n setOptionsError(true);\n }\n\n setOptionsLoading(false);\n\n controller.stopInteraction?.();\n },\n [filter, controller, isGroupBy, offersAllOption]\n );\n\n const rowVirtualizer = useVirtualizer({\n count: filteredDropDownItems.length,\n getScrollElement: () => refs.floating.current,\n estimateSize: (index) =>\n filteredDropDownItems[index].description ? VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION : VIRTUAL_LIST_ITEM_HEIGHT,\n overscan: VIRTUAL_LIST_OVERSCAN,\n });\n\n //\n // Keyboard interactions\n //\n\n const handleBackspaceInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit: boolean) => {\n if (event.key === 'Backspace' && !inputValue) {\n if (filterInputType === 'value') {\n if (multiValueEdit) {\n if (filterMultiValues.length) {\n setFilterMultiValues((items) => {\n const updated = [...items];\n updated.splice(-1, 1);\n\n return updated;\n });\n return;\n }\n }\n if (filter?.origin) {\n return;\n }\n\n setInputType('operator');\n return;\n }\n\n if (filterInputType === 'operator') {\n event.preventDefault();\n setInputValue('');\n if (filter) {\n controller.updateFilter(filter, {\n key: '',\n keyLabel: '',\n operator: '',\n value: '',\n valueLabels: [],\n values: undefined,\n });\n }\n switchInputType('key', setInputType, undefined, refs.domReference.current);\n return;\n }\n if (isGroupBy && filter?.origin) {\n controller.updateToMatchAll(filter);\n focusOnWipInputRef?.();\n return;\n }\n\n // focus back on always wip input when you delete filter with backspace\n focusOnWipInputRef?.();\n\n if (!isGroupBy) {\n setOpen(false);\n }\n controller.handleComboboxBackspace(filter!);\n\n if (isAlwaysWip) {\n handleResetWip();\n }\n }\n },\n [\n inputValue,\n filterInputType,\n focusOnWipInputRef,\n filter,\n controller,\n isAlwaysWip,\n isGroupBy,\n filterMultiValues.length,\n refs.domReference,\n handleResetWip,\n ]\n );\n\n const commitFullParsedExpression = useCallback(\n (parsed: Partial<AdHocFilterWithLabels>): boolean => {\n if (!filter || !parsed.value) {\n return false;\n }\n\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n\n const isMultiValueCommit = Boolean(parsed.operator && isMultiValueOperator(parsed.operator));\n if (!isMultiValueCommit && onAddCustomValue) {\n const custom = onAddCustomValue({ label: parsed.value, value: parsed.value, isCustom: true }, filter);\n parsed.value = custom.value;\n parsed.valueLabels = custom.valueLabels;\n }\n\n controller.updateFilter(filter, parsed);\n setActiveIndex(null);\n return isMultiValueCommit;\n },\n [controller, filter, onAddCustomValue]\n );\n\n const handleTabInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n // change filter to view mode when navigating away with Tab key\n // this is needed because useDismiss only reacts to mousedown\n if (event.key === 'Tab' && !event.shiftKey) {\n if (multiValueEdit) {\n // commit multi value filter values on tab away\n event.preventDefault();\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n refs.domReference.current?.focus();\n } else if (canCommitFullExpression && filter) {\n // Free-form commit on tab away.\n // Tab accepts the current value and moves focus to the next focusable element.\n const parsed = commitExpressionUpdate();\n if (parsed?.value) {\n commitFullParsedExpression(parsed);\n }\n }\n\n handleChangeViewMode?.();\n handleResetWip();\n }\n },\n [\n filter,\n filterMultiValues,\n handleChangeViewMode,\n handleMultiValueFilterCommit,\n handleResetWip,\n canCommitFullExpression,\n commitExpressionUpdate,\n commitFullParsedExpression,\n controller,\n refs.domReference,\n ]\n );\n\n const handleShiftTabInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n if (event.key === 'Tab' && event.shiftKey) {\n if (multiValueEdit) {\n // commit multi value filter values on shift tab away\n event.preventDefault();\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues, true);\n }\n handleChangeViewMode?.();\n handleResetWip();\n }\n },\n [filter, filterMultiValues, handleChangeViewMode, handleMultiValueFilterCommit, handleResetWip, controller]\n );\n\n const handleEnterInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n if (event.key === 'Enter' && canCommitExpressionUpdate && filter) {\n const parsed = commitExpressionUpdate();\n\n if (parsed) {\n event.preventDefault();\n\n if (!parsed.value) {\n controller.updateFilter(filter, parsed);\n switchInputType('value', setInputType, undefined, refs.domReference.current);\n setInputValue('');\n setActiveIndex(null);\n return;\n }\n\n const isMultiValueCommit = commitFullParsedExpression(parsed);\n\n if (isAlwaysWip) {\n handleResetWip();\n setTimeout(() => refs.domReference.current?.focus());\n } else {\n handleChangeViewMode?.(undefined, false);\n focusOnWipInputRef?.();\n }\n\n if (isMultiValueCommit) {\n setOpen(false);\n }\n\n return;\n }\n }\n\n if (event.key === 'Enter' && activeIndex != null) {\n // safeguard for non existing items\n // note: custom item is added to filteredDropDownItems if allowed\n if (!filteredDropDownItems[activeIndex]) {\n return;\n }\n const selectedItem = filteredDropDownItems[activeIndex];\n\n if (isGroupBy) {\n if (isAlwaysWip) {\n controller.addGroupByFilter?.(selectedItem);\n handleResetWip();\n } else {\n controller.updateFilter(filter!, {\n key: selectedItem.value!,\n keyLabel: selectedItem.label || selectedItem.value!,\n });\n handleChangeViewMode?.();\n }\n setActiveIndex(null);\n return;\n }\n\n if (multiValueEdit) {\n handleLocalMultiValueChange(selectedItem);\n setInputValue('');\n } else {\n const payload = generateFilterUpdatePayload({\n filterInputType,\n item: selectedItem,\n filter: filter!,\n setFilterMultiValues,\n onAddCustomValue,\n });\n\n // Only start profile if value has changed\n if (filterInputType === 'value' && payload.value !== filter?.value) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n\n controller.updateFilter(filter!, payload);\n\n populateInputValueOnInputTypeSwitch({\n populateInputOnEdit,\n item: selectedItem,\n filterInputType,\n setInputValue,\n filter,\n });\n\n switchToNextInputType(\n filterInputType,\n setInputType,\n handleChangeViewMode,\n refs.domReference.current,\n // preventing focus on filter pill only when last filter for better backspace experience\n isLastFilter ? false : undefined\n );\n setActiveIndex(null);\n if (isLastFilter) {\n focusOnWipInputRef?.();\n }\n }\n }\n },\n [\n activeIndex,\n filteredDropDownItems,\n handleLocalMultiValueChange,\n controller,\n filter,\n filterInputType,\n canCommitExpressionUpdate,\n commitExpressionUpdate,\n commitFullParsedExpression,\n populateInputOnEdit,\n handleChangeViewMode,\n refs.domReference,\n isLastFilter,\n focusOnWipInputRef,\n onAddCustomValue,\n isGroupBy,\n isAlwaysWip,\n handleResetWip,\n setInputType,\n ]\n );\n\n const handleEditMultiValuePill = useCallback(\n (value: SelectableValue<string>) => {\n const valueLabel = value.label || value.value!;\n setFilterMultiValues((prev) => prev.filter((item) => item.value !== value.value));\n setPreventFiltering(true);\n setInputValue(valueLabel);\n refs.domReference.current?.focus();\n setTimeout(() => {\n refs.domReference.current?.select();\n });\n },\n [refs.domReference]\n );\n\n //\n // Effects\n //\n\n useEffect(() => {\n // fetch options when dropdown is opened.\n if (open) {\n handleFetchOptions(filterInputType);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, filterInputType]);\n\n // when not in wip mode this is the point of switching from view to edit mode\n // and in this case we default to 'value' input type and focus input\n useEffect(() => {\n if (!isAlwaysWip) {\n if (hasMultiValueOperator && filter?.values?.length) {\n const multiValueOptions = (filter.values as string[]).reduce<Array<SelectableValue<string>>>(\n (acc, value, i) => [\n ...acc,\n {\n label:\n value === ALL_VARIABLE_VALUE\n ? t('grafana-scenes.components.adhoc-filters-combobox.all-values', 'All')\n : filter.valueLabels?.[i] || value,\n value: value,\n },\n ],\n []\n );\n // populate filter multi values to local state on pill edit enter\n setFilterMultiValues(multiValueOptions);\n }\n\n // populate input when selecting pill for edit\n // this avoids populating input during delete with backspace\n if (!hasMultiValueOperator && populateInputOnEdit) {\n setInputValue(filter?.valueLabels?.[0] ?? (filter?.value || ''));\n setTimeout(() => {\n refs.domReference.current?.select();\n });\n }\n\n refs.domReference.current?.focus();\n setOpen(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // this is required only with multi value select in order to update position\n // of the multi value apply button\n useEffect(() => {\n if (isMultiValueEdit && filterMultiValues) {\n setTimeout(() => setForceRefresh({}));\n }\n }, [filterMultiValues, isMultiValueEdit]);\n\n // synch filterInputTypeRef with filterInputType state\n useLayoutEffect(() => {\n if (filterInputTypeRef.current) {\n filterInputTypeRef.current = filterInputType;\n }\n }, [filterInputType]);\n\n useLayoutEffect(() => {\n // this is needed to scroll virtual list to the position of currently selected\n // dropdown item when navigating with arrow up/down keys to end/start of list\n if (\n activeIndex !== null &&\n rowVirtualizer.range &&\n (activeIndex > rowVirtualizer.range?.endIndex || activeIndex < rowVirtualizer.range?.startIndex)\n ) {\n rowVirtualizer.scrollToIndex(activeIndex);\n }\n }, [activeIndex, rowVirtualizer]);\n\n const keyLabel = filter?.keyLabel ?? filter?.key;\n\n return (\n <div className={styles.comboboxWrapper}>\n {filter && !isGroupBy ? (\n <div className={styles.pillWrapper}>\n {/* Filter key pill render */}\n {filter?.key ? <div className={cx(styles.basePill, styles.keyPill)}>{keyLabel}</div> : null}\n {/* Filter operator pill render */}\n {filter?.key && filter?.operator && filterInputType !== 'operator' ? (\n <div\n id={operatorIdentifier}\n className={cx(\n styles.basePill,\n !filter.origin && styles.operatorPill,\n filter.origin && styles.keyPill,\n operatorIdentifier\n )}\n aria-label={t(\n 'grafana-scenes.variables.ad-hoc-combobox.aria-label-edit-filter-operator',\n 'Edit filter operator'\n )}\n tabIndex={filter.origin ? -1 : 0}\n onClick={(event) => {\n if (filter.origin) {\n handleChangeViewMode?.();\n return;\n }\n\n event.stopPropagation();\n setInputValue('');\n switchInputType('operator', setInputType, undefined, refs.domReference.current);\n }}\n onKeyDown={(event) => {\n if (filter.origin) {\n return;\n }\n\n handleShiftTabInput(event, hasMultiValueOperator);\n if (event.key === 'Enter') {\n setInputValue('');\n switchInputType('operator', setInputType, undefined, refs.domReference.current);\n }\n }}\n {...(!filter.origin && { role: 'button' })}\n >\n {filter.operator}\n </div>\n ) : null}\n\n <div ref={multiValuePillWrapperRef}></div>\n {isMultiValueEdit\n ? filterMultiValues.map((item, i) => (\n <MultiValuePill\n key={`${item.value}-${i}`}\n item={item}\n index={i}\n handleRemoveMultiValue={handleRemoveMultiValue}\n handleEditMultiValuePill={handleEditMultiValuePill}\n />\n ))\n : null}\n </div>\n ) : null}\n\n <input\n {...getReferenceProps({\n ref: refs.setReference,\n id: controller.getControlId?.(),\n onChange,\n value: inputValue,\n // dynamic placeholder to display operator and/or value in filter edit mode\n placeholder: generatePlaceholder(\n filter!,\n filterInputType,\n isMultiValueEdit,\n isAlwaysWip,\n isGroupBy ? groupByInputPlaceholder : inputPlaceholder,\n isGroupBy\n ),\n 'aria-autocomplete': 'list',\n onKeyDown(event) {\n if (!open) {\n setOpen(true);\n return;\n }\n\n if (filterInputType === 'operator') {\n handleShiftTabInput(event);\n }\n handleBackspaceInput(event, isMultiValueEdit);\n handleTabInput(event, isMultiValueEdit);\n handleEnterInput(event, isMultiValueEdit);\n },\n })}\n className={cx(styles.inputStyle)}\n onClick={(event) => {\n event.stopPropagation();\n onInputClick?.();\n setOpen(true);\n }}\n />\n {optionsLoading ? <Spinner className={styles.loadingIndicator} inline={true} /> : null}\n <FloatingPortal>\n {open && (\n <FloatingFocusManager context={context} initialFocus={-1} visuallyHiddenDismiss modal={true}>\n <>\n <div\n style={{\n ...floatingStyles,\n width: `${optionsError ? ERROR_STATE_DROPDOWN_WIDTH : maxOptionWidth}px`,\n transform: isMultiValueEdit\n ? `translate(${multiValuePillWrapperRef.current?.getBoundingClientRect().left || 0}px, ${\n (refs.domReference.current?.getBoundingClientRect().bottom || 0) + 10\n }px )`\n : floatingStyles.transform,\n }}\n ref={refs.setFloating}\n className={styles.dropdownWrapper}\n tabIndex={-1}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize() || VIRTUAL_LIST_ITEM_HEIGHT}px`, // fallback to 38px for loading/error/no options placeholders\n }}\n {...getFloatingProps()}\n tabIndex={-1}\n >\n {optionsLoading ? (\n <LoadingOptionsPlaceholder />\n ) : optionsError ? (\n <OptionsErrorPlaceholder handleFetchOptions={() => handleFetchOptions(filterInputType)} />\n ) : !filteredDropDownItems.length && canCommitExpressionUpdate ? (\n <ExpressionHintPlaceholder />\n ) : !filteredDropDownItems.length &&\n (!allowCustomValue || filterInputType === 'operator' || !inputValue) ? (\n <NoOptionsPlaceholder />\n ) : (\n rowVirtualizer.getVirtualItems().map((virtualItem) => {\n const item = filteredDropDownItems[virtualItem.index];\n const index = virtualItem.index;\n\n // render group label\n if (item.options) {\n return (\n <div\n key={`${item.label}+${index}`}\n className={cx(styles.optionGroupLabel, styles.groupTopBorder)}\n style={{\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n <Text weight=\"bold\" variant=\"bodySmall\" color=\"secondary\">\n {item.label!}\n </Text>\n </div>\n );\n }\n\n const nextItem: SelectableValue<string> | undefined =\n filteredDropDownItems[virtualItem.index + 1];\n const shouldAddBottomBorder = nextItem && !nextItem.group && !nextItem.options && item.group;\n\n const itemLabel = item.label ?? item.value;\n\n return (\n // key is included in getItemProps()\n // eslint-disable-next-line react/jsx-key\n <DropdownItem\n {...getItemProps({\n key: `${item.value!}-${index}`,\n ref(node) {\n listRef.current[index] = node;\n },\n onClick(event) {\n if (filterInputType !== 'value') {\n event.stopPropagation();\n }\n\n if (isGroupBy) {\n event.stopPropagation();\n if (isAlwaysWip) {\n controller.addGroupByFilter?.(item);\n handleResetWip();\n } else {\n controller.updateFilter(filter!, {\n key: item.value!,\n keyLabel: item.label || item.value!,\n });\n handleChangeViewMode?.();\n }\n return;\n }\n\n if (isMultiValueEdit) {\n event.preventDefault();\n event.stopPropagation();\n handleLocalMultiValueChange(item);\n setInputValue('');\n refs.domReference.current?.focus();\n } else {\n const payload = generateFilterUpdatePayload({\n filterInputType,\n item,\n filter: filter!,\n setFilterMultiValues,\n onAddCustomValue,\n });\n\n if (filterInputType === 'value' && payload.value !== filter?.value) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n controller.updateFilter(filter!, payload);\n\n populateInputValueOnInputTypeSwitch({\n populateInputOnEdit,\n item,\n filterInputType,\n setInputValue,\n filter,\n });\n switchToNextInputType(\n filterInputType,\n setInputType,\n handleChangeViewMode,\n refs.domReference.current,\n // preventing focus on filter pill only when last filter for better backspace experience\n isLastFilter ? false : undefined\n );\n if (isLastFilter) {\n focusOnWipInputRef?.();\n }\n }\n },\n })}\n active={activeIndex === index}\n addGroupBottomBorder={shouldAddBottomBorder}\n // virtual item positioning and accessibility\n style={{\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n aria-setsize={filteredDropDownItems.length}\n aria-posinset={virtualItem.index + 1}\n isMultiValueEdit={isMultiValueEdit}\n checked={filterMultiValues.some((val) => val.value === item.value)}\n testIdValue={String(itemLabel)}\n >\n <span>\n {item.isCustom\n ? t(\n 'grafana-scenes.components.adhoc-filters-combobox.use-custom-value',\n 'Use custom value: {{itemLabel}}',\n { itemLabel, interpolation: { escapeValue: false } }\n )\n : itemLabel}\n </span>\n {item.description ? <div className={styles.descriptionText}>{item.description}</div> : null}\n </DropdownItem>\n );\n })\n )}\n </div>\n </div>\n {isMultiValueEdit && !optionsLoading && !optionsError && filteredDropDownItems.length ? (\n <MultiValueApplyButton\n onApply={() => {\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n handleResetWip();\n handleChangeViewMode?.();\n setOpen(false);\n }}\n floatingElement={refs.floating.current}\n maxOptionWidth={maxOptionWidth}\n menuHeight={Math.min(rowVirtualizer.getTotalSize(), MAX_MENU_HEIGHT)}\n />\n ) : null}\n </>\n </FloatingFocusManager>\n )}\n </FloatingPortal>\n </div>\n );\n});\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n comboboxWrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n }),\n pillWrapper: css({\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n }),\n basePill: css({\n display: 'flex',\n alignItems: 'center',\n background: theme.colors.action.disabledBackground,\n border: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(0.125, 1, 0.125, 1),\n color: theme.colors.text.primary,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n minHeight: theme.spacing(2.75),\n ...theme.typography.bodySmall,\n cursor: 'pointer',\n }),\n keyPill: css({\n fontWeight: theme.typography.fontWeightBold,\n cursor: 'default',\n }),\n operatorPill: css({\n '&:hover': {\n background: theme.colors.action.hover,\n },\n }),\n dropdownWrapper: css({\n backgroundColor: theme.colors.background.primary,\n color: theme.colors.text.primary,\n boxShadow: theme.shadows.z2,\n overflowY: 'auto',\n zIndex: theme.zIndex.portal,\n }),\n inputStyle: css({\n paddingBlock: 0,\n width: '90px',\n minWidth: '90px',\n maxWidth: '200px',\n '@supports (field-sizing: content)': {\n width: 'auto',\n minWidth: 'auto',\n fieldSizing: 'content',\n },\n '&:focus': {\n outline: 'none',\n },\n }),\n loadingIndicator: css({\n display: 'flex',\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(0.5),\n alignItems: 'center',\n }),\n optionGroupLabel: css({\n padding: theme.spacing(1),\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n }),\n groupTopBorder: css({\n '&:not(:first-child)': {\n borderTop: `1px solid ${theme.colors.border.weak}`,\n },\n }),\n descriptionText: css({\n ...theme.typography.bodySmall,\n color: theme.colors.text.secondary,\n paddingTop: theme.spacing(0.5),\n }),\n});\n"],"names":["AdHocCombobox","getStyles","controller","filter","filterMultiValues","_a","_","_b","_c","_d","options"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"AdHocFiltersCombobox.js","sources":["../../../../../src/variables/adhoc/AdHocFiltersCombobox/AdHocFiltersCombobox.tsx"],"sourcesContent":["import { t } from '@grafana/i18n';\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FloatingFocusManager, FloatingPortal, UseFloatingOptions } from '@floating-ui/react';\nimport { Spinner, Text, useStyles2 } from '@grafana/ui';\nimport { GrafanaTheme2, SelectableValue } from '@grafana/data';\nimport { css, cx } from '@emotion/css';\nimport { AdHocFilterWithLabels, isMultiValueOperator, ONE_OF_OPERATOR, OPERATORS } from '../AdHocFiltersVariable';\nimport { ALL_VARIABLE_VALUE } from '../../constants';\nimport { AdHocFiltersController } from '../controller/AdHocFiltersController';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n DropdownItem,\n ExpressionHintPlaceholder,\n LoadingOptionsPlaceholder,\n MultiValueApplyButton,\n NoOptionsPlaceholder,\n OptionsErrorPlaceholder,\n} from './DropdownItem';\nimport {\n ERROR_STATE_DROPDOWN_WIDTH,\n flattenOptionGroups,\n generateFilterUpdatePayload,\n generatePlaceholder,\n populateInputValueOnInputTypeSwitch,\n setupDropdownAccessibility,\n switchInputType,\n switchToNextInputType,\n VIRTUAL_LIST_ITEM_HEIGHT,\n VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION,\n VIRTUAL_LIST_OVERSCAN,\n} from './utils';\nimport { handleOptionGroups } from '../../utils';\nimport { useFloatingInteractions, MAX_MENU_HEIGHT } from './useFloatingInteractions';\nimport { useFreeFormExpression } from './useFreeFormExpression';\nimport { MultiValuePill } from './MultiValuePill';\nimport { getAdhocOptionSearcher } from '../getAdhocOptionSearcher';\nimport {\n FILTER_CHANGED_INTERACTION,\n ADHOC_KEYS_DROPDOWN_INTERACTION,\n ADHOC_VALUES_DROPDOWN_INTERACTION,\n} from '../../../performance/interactionConstants';\n\ninterface AdHocComboboxProps {\n filter?: AdHocFilterWithLabels;\n isAlwaysWip?: boolean;\n isGroupBy?: boolean;\n controller: AdHocFiltersController;\n handleChangeViewMode?: (event?: React.MouseEvent, shouldFocusOnPillWrapperOverride?: boolean) => void;\n focusOnWipInputRef?: () => void;\n populateInputOnEdit?: boolean;\n onInputClick?: () => void;\n}\n\nexport type AdHocInputType = 'key' | 'operator' | 'value';\n\nexport const AdHocCombobox = forwardRef(function AdHocCombobox(\n {\n filter,\n controller,\n isAlwaysWip,\n isGroupBy,\n handleChangeViewMode,\n focusOnWipInputRef,\n populateInputOnEdit,\n onInputClick,\n }: AdHocComboboxProps,\n parentRef\n) {\n const [open, setOpen] = useState(false);\n const [options, setOptions] = useState<Array<SelectableValue<string>>>([]);\n const [optionsLoading, setOptionsLoading] = useState<boolean>(false);\n const [optionsError, setOptionsError] = useState<boolean>(false);\n const [inputValue, setInputValue] = useState('');\n const [activeIndex, setActiveIndex] = useState<number | null>(null);\n\n const initialInputType: AdHocInputType = isAlwaysWip || isGroupBy ? 'key' : 'value';\n const [filterInputType, setInputType] = useState<AdHocInputType>(initialInputType);\n const [preventFiltering, setPreventFiltering] = useState<boolean>(initialInputType === 'value');\n\n const styles = useStyles2(getStyles);\n // control multi values with local state in order to commit all values at once and avoid wip reset mid creation\n const [filterMultiValues, setFilterMultiValues] = useState<Array<SelectableValue<string>>>([]);\n const [_, setForceRefresh] = useState({});\n const {\n allowCustomValue = true,\n onAddCustomValue,\n filters,\n inputPlaceholder,\n groupByInputPlaceholder,\n } = controller.useState();\n\n const multiValuePillWrapperRef = useRef<HTMLDivElement>(null);\n\n const hasMultiValueOperator = isMultiValueOperator(filter?.operator || '');\n const isMultiValueEdit = hasMultiValueOperator && filterInputType === 'value';\n // Origin (default) filters with the \"one of\" operator offer an explicit \"All\" option\n const offersAllOption = Boolean(filter?.origin) && filter?.operator === ONE_OF_OPERATOR;\n\n // used to identify operator element and prevent dismiss because it registers as outside click\n const operatorIdentifier = useId();\n\n const listRef = useRef<Array<HTMLElement | null>>([]);\n const disabledIndicesRef = useRef<number[]>([]);\n const filterInputTypeRef = useRef<AdHocInputType>(initialInputType);\n\n const optionsSearcher = useMemo(() => getAdhocOptionSearcher(options), [options]);\n\n const { canCommitExpressionUpdate, canCommitFullExpression, parseExpression, commitExpressionUpdate } =\n useFreeFormExpression({\n controller,\n filter,\n inputValue,\n filterInputType,\n allowCustomValue,\n isGroupBy,\n populateInputOnEdit,\n });\n\n const isLastFilter = useMemo(() => {\n if (isAlwaysWip) {\n return false;\n }\n\n if (filters.at(-1) === filter) {\n return true;\n }\n return false;\n }, [filter, isAlwaysWip, filters]);\n\n // reset wip filter. Used when navigating away with incomplete wip filer or when selecting wip filter value\n const handleResetWip = useCallback(() => {\n if (isAlwaysWip) {\n if (!isGroupBy) {\n controller.addWip();\n }\n setInputType('key');\n setInputValue('');\n }\n }, [controller, isAlwaysWip, isGroupBy]);\n\n const handleMultiValueFilterCommit = useCallback(\n (\n controller: AdHocFiltersController,\n filter: AdHocFilterWithLabels,\n filterMultiValues: Array<SelectableValue<string>>,\n preventFocus?: boolean\n ) => {\n if (!filterMultiValues.length && filter.origin) {\n controller.updateToMatchAll(filter);\n }\n\n // Selecting All commits as a regular value update: the variable derives the match all\n // flags from the value itself. Hosts are free to map updateToMatchAll to something else\n // (the default filters editor maps it to a removal), so it must not be used to author All.\n if (filterMultiValues.length) {\n const valueLabels: string[] = [];\n const values: string[] = [];\n filterMultiValues.forEach((item) => {\n valueLabels.push(item.label ?? item.value!);\n values.push(item.value!);\n });\n\n // Only update if values have changed\n let shouldUpdate = true;\n if (Array.isArray(filter.values) && filter.values.length === values.length) {\n shouldUpdate = !filter.values.every((v, i) => v === values[i]);\n }\n\n if (shouldUpdate) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n\n controller.updateFilter(filter!, { valueLabels, values, value: values[0] });\n setFilterMultiValues([]);\n }\n\n if (!preventFocus) {\n setTimeout(() => refs.domReference.current?.focus());\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n );\n\n const handleLocalMultiValueChange = useCallback((selectedItem: SelectableValue<string>) => {\n setFilterMultiValues((items) => {\n // \"All\" is exclusive: selecting it clears other values, selecting a value clears \"All\"\n if (selectedItem.value === ALL_VARIABLE_VALUE) {\n return items.some((item) => item.value === ALL_VARIABLE_VALUE) ? [] : [selectedItem];\n }\n const itemsWithoutAll = items.filter((item) => item.value !== ALL_VARIABLE_VALUE);\n if (itemsWithoutAll.some((item) => item.value === selectedItem.value)) {\n return itemsWithoutAll.filter((item) => item.value !== selectedItem.value);\n }\n return [...itemsWithoutAll, selectedItem];\n });\n }, []);\n\n const onOpenChange = useCallback<NonNullable<UseFloatingOptions['onOpenChange']>>(\n (nextOpen, _, reason) => {\n const isExplicitDismiss = reason === 'outside-press' || reason === 'escape-key';\n\n // In edit mode, only allow explicit dismiss (outside-press / escape-key).\n // Ignore every other close trigger (e.g. FloatingFocusManager focus-out\n // when a multi-value pill is removed and focus drifts to <body>).\n if (!nextOpen && !isAlwaysWip && !isExplicitDismiss) {\n return;\n }\n\n setOpen(nextOpen);\n\n if (isExplicitDismiss) {\n if (isMultiValueEdit) {\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n } else {\n if (filter && filter.origin && inputValue === '') {\n controller.updateToMatchAll(filter);\n }\n }\n\n handleResetWip();\n handleChangeViewMode?.();\n }\n },\n [\n filter,\n filterMultiValues,\n handleChangeViewMode,\n handleMultiValueFilterCommit,\n handleResetWip,\n inputValue,\n isMultiValueEdit,\n isAlwaysWip,\n controller,\n ]\n );\n\n // generate ids from multi values in order to prevent outside click based on those ids\n const outsidePressIdsToIgnore = useMemo(() => {\n return [\n operatorIdentifier,\n ...filterMultiValues.reduce<string[]>(\n (acc, item, i) => [...acc, `${item.value}-${i}`, `${item.value}-${i}-close-icon`],\n []\n ),\n ];\n }, [operatorIdentifier, filterMultiValues]);\n\n const { refs, floatingStyles, context, getReferenceProps, getFloatingProps, getItemProps } = useFloatingInteractions({\n open,\n onOpenChange,\n activeIndex,\n setActiveIndex,\n outsidePressIdsToIgnore,\n listRef,\n disabledIndicesRef,\n });\n\n // pass ability to focus on input element back to parent\n // parentRef is coming from AdHocFiltersComboboxRenderer\n useImperativeHandle(parentRef, () => () => refs.domReference.current?.focus(), [refs.domReference]);\n\n function onChange(event: React.ChangeEvent<HTMLInputElement>) {\n const value = event.target.value;\n setInputValue(value);\n\n const nextIsExpressionInput = parseExpression(value) !== null;\n const nextFilteredItems = flattenOptionGroups(handleOptionGroups(optionsSearcher(value)));\n\n if (nextIsExpressionInput) {\n setActiveIndex(null);\n } else if (!nextFilteredItems.length && allowCustomValue) {\n setActiveIndex(0);\n } else if (isMultiValueEdit && offersAllOption && !value) {\n // An empty input re-prepends the All row, which shifts every index by one\n setActiveIndex(0);\n } else {\n setActiveIndex(getFirstSelectableIndex(nextFilteredItems));\n }\n if (preventFiltering) {\n setPreventFiltering(false);\n }\n }\n\n const handleRemoveMultiValue = useCallback(\n (item: SelectableValue<string>) => {\n setFilterMultiValues((selected) => selected.filter((option) => option.value !== item.value));\n setTimeout(() => refs.domReference.current?.focus());\n },\n [refs.domReference]\n );\n\n // operation order on fetched options:\n // fuzzy search -> extract into groups -> flatten group labels and options\n const filteredDropDownItems = flattenOptionGroups(\n handleOptionGroups(optionsSearcher(preventFiltering ? '' : inputValue))\n );\n\n const getFirstSelectableIndex = useCallback((items: Array<SelectableValue<string>>) => {\n const index = items.findIndex((item) => !item.options);\n return index >= 0 ? index : null;\n }, []);\n\n // adding custom option this way so that virtualiser is aware of it and can scroll to\n if (allowCustomValue && filterInputType !== 'operator' && inputValue && !canCommitExpressionUpdate) {\n const operatorDefinition = OPERATORS.find((op) => filter?.operator === op.value);\n const customOptionValue: SelectableValue<string> = {\n value: inputValue.trim(),\n label: inputValue.trim(),\n isCustom: true,\n };\n\n // If operator is regex, add custom value option first\n if (operatorDefinition?.isRegex) {\n filteredDropDownItems.unshift(customOptionValue);\n } else {\n filteredDropDownItems.push(customOptionValue);\n }\n }\n\n // Selecting All commits the special $__all value, which lifts the filter's restriction\n // from queries. Not offered for \"not one of\" where \"All\" would read as excluding everything.\n if (isMultiValueEdit && offersAllOption && !inputValue) {\n filteredDropDownItems.unshift({\n label: t('grafana-scenes.components.adhoc-filters-combobox.all-values', 'All'),\n value: ALL_VARIABLE_VALUE,\n });\n }\n\n // calculate width and populate listRef and disabledIndicesRef for arrow key navigation\n const maxOptionWidth = setupDropdownAccessibility(filteredDropDownItems, listRef, disabledIndicesRef);\n\n const handleFetchOptions = useCallback(\n async (inputType: AdHocInputType) => {\n // Start profiling the user interaction\n const interactionName = inputType === 'key' ? ADHOC_KEYS_DROPDOWN_INTERACTION : ADHOC_VALUES_DROPDOWN_INTERACTION;\n\n if (inputType !== 'operator') {\n controller.startInteraction?.(interactionName);\n }\n\n setOptionsError(false);\n setOptionsLoading(true);\n setOptions([]);\n\n let options: Array<SelectableValue<string>> = [];\n\n try {\n if (inputType === 'key') {\n if (isGroupBy && controller.getGroupByKeys) {\n options = await controller.getGroupByKeys(null);\n } else {\n options = await controller.getKeys(null);\n }\n } else if (inputType === 'operator') {\n options = controller.getOperators();\n } else if (inputType === 'value') {\n options = await controller.getValuesFor(filter!);\n }\n\n // if input type changed before fetch completed then abort updating options\n // this can cause race condition and return incorrect options when input type changed\n if (filterInputTypeRef.current !== inputType) {\n controller.stopInteraction?.();\n return;\n }\n setOptions(options);\n if (inputType === 'value' && offersAllOption) {\n // The prepended All row takes the initial highlight, keeping the index valid\n // when the first fetched option is a group header\n setActiveIndex(0);\n } else if (options[0]?.group) {\n setActiveIndex(1);\n } else {\n setActiveIndex(0);\n }\n } catch (e) {\n setOptionsError(true);\n }\n\n setOptionsLoading(false);\n\n controller.stopInteraction?.();\n },\n [filter, controller, isGroupBy, offersAllOption]\n );\n\n const rowVirtualizer = useVirtualizer({\n count: filteredDropDownItems.length,\n getScrollElement: () => refs.floating.current,\n estimateSize: (index) =>\n filteredDropDownItems[index].description ? VIRTUAL_LIST_ITEM_HEIGHT_WITH_DESCRIPTION : VIRTUAL_LIST_ITEM_HEIGHT,\n overscan: VIRTUAL_LIST_OVERSCAN,\n });\n\n //\n // Keyboard interactions\n //\n\n const handleBackspaceInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit: boolean) => {\n if (event.key === 'Backspace' && !inputValue) {\n if (filterInputType === 'value') {\n if (multiValueEdit) {\n if (filterMultiValues.length) {\n setFilterMultiValues((items) => {\n const updated = [...items];\n updated.splice(-1, 1);\n\n return updated;\n });\n return;\n }\n }\n if (filter?.origin) {\n return;\n }\n\n setInputType('operator');\n return;\n }\n\n if (filterInputType === 'operator') {\n event.preventDefault();\n setInputValue('');\n if (filter) {\n controller.updateFilter(filter, {\n key: '',\n keyLabel: '',\n operator: '',\n value: '',\n valueLabels: [],\n values: undefined,\n });\n }\n switchInputType('key', setInputType, undefined, refs.domReference.current);\n return;\n }\n if (isGroupBy && filter?.origin) {\n controller.updateToMatchAll(filter);\n focusOnWipInputRef?.();\n return;\n }\n\n // focus back on always wip input when you delete filter with backspace\n focusOnWipInputRef?.();\n\n if (!isGroupBy) {\n setOpen(false);\n }\n controller.handleComboboxBackspace(filter!);\n\n if (isAlwaysWip) {\n handleResetWip();\n }\n }\n },\n [\n inputValue,\n filterInputType,\n focusOnWipInputRef,\n filter,\n controller,\n isAlwaysWip,\n isGroupBy,\n filterMultiValues.length,\n refs.domReference,\n handleResetWip,\n ]\n );\n\n const commitFullParsedExpression = useCallback(\n (parsed: Partial<AdHocFilterWithLabels>): boolean => {\n if (!filter || !parsed.value) {\n return false;\n }\n\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n\n const isMultiValueCommit = Boolean(parsed.operator && isMultiValueOperator(parsed.operator));\n if (!isMultiValueCommit && onAddCustomValue) {\n const custom = onAddCustomValue({ label: parsed.value, value: parsed.value, isCustom: true }, filter);\n parsed.value = custom.value;\n parsed.valueLabels = custom.valueLabels;\n }\n\n controller.updateFilter(filter, parsed);\n setActiveIndex(null);\n return isMultiValueCommit;\n },\n [controller, filter, onAddCustomValue]\n );\n\n const handleTabInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n // change filter to view mode when navigating away with Tab key\n // this is needed because useDismiss only reacts to mousedown\n if (event.key === 'Tab' && !event.shiftKey) {\n if (multiValueEdit) {\n // commit multi value filter values on tab away\n event.preventDefault();\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n refs.domReference.current?.focus();\n } else if (canCommitFullExpression && filter) {\n // Free-form commit on tab away.\n // Tab accepts the current value and moves focus to the next focusable element.\n const parsed = commitExpressionUpdate();\n if (parsed?.value) {\n commitFullParsedExpression(parsed);\n }\n }\n\n handleChangeViewMode?.();\n handleResetWip();\n }\n },\n [\n filter,\n filterMultiValues,\n handleChangeViewMode,\n handleMultiValueFilterCommit,\n handleResetWip,\n canCommitFullExpression,\n commitExpressionUpdate,\n commitFullParsedExpression,\n controller,\n refs.domReference,\n ]\n );\n\n const handleShiftTabInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n if (event.key === 'Tab' && event.shiftKey) {\n if (multiValueEdit) {\n // commit multi value filter values on shift tab away\n event.preventDefault();\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues, true);\n }\n handleChangeViewMode?.();\n handleResetWip();\n }\n },\n [filter, filterMultiValues, handleChangeViewMode, handleMultiValueFilterCommit, handleResetWip, controller]\n );\n\n const handleEnterInput = useCallback(\n (event: React.KeyboardEvent, multiValueEdit?: boolean) => {\n if (event.key === 'Enter' && canCommitExpressionUpdate && filter) {\n const parsed = commitExpressionUpdate();\n\n if (parsed) {\n event.preventDefault();\n\n if (!parsed.value) {\n controller.updateFilter(filter, parsed);\n switchInputType('value', setInputType, undefined, refs.domReference.current);\n setInputValue('');\n setActiveIndex(null);\n return;\n }\n\n const isMultiValueCommit = commitFullParsedExpression(parsed);\n\n if (isAlwaysWip) {\n handleResetWip();\n setTimeout(() => refs.domReference.current?.focus());\n } else {\n handleChangeViewMode?.(undefined, false);\n focusOnWipInputRef?.();\n }\n\n if (isMultiValueCommit) {\n setOpen(false);\n }\n\n return;\n }\n }\n\n if (event.key === 'Enter' && activeIndex != null) {\n // safeguard for non existing items\n // note: custom item is added to filteredDropDownItems if allowed\n if (!filteredDropDownItems[activeIndex]) {\n return;\n }\n const selectedItem = filteredDropDownItems[activeIndex];\n\n if (isGroupBy) {\n if (isAlwaysWip) {\n controller.addGroupByFilter?.(selectedItem);\n handleResetWip();\n } else {\n controller.updateFilter(filter!, {\n key: selectedItem.value!,\n keyLabel: selectedItem.label || selectedItem.value!,\n });\n handleChangeViewMode?.();\n }\n setActiveIndex(null);\n return;\n }\n\n if (multiValueEdit) {\n handleLocalMultiValueChange(selectedItem);\n setInputValue('');\n } else {\n const payload = generateFilterUpdatePayload({\n filterInputType,\n item: selectedItem,\n filter: filter!,\n setFilterMultiValues,\n onAddCustomValue,\n });\n\n // Only start profile if value has changed\n if (filterInputType === 'value' && payload.value !== filter?.value) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n\n controller.updateFilter(filter!, payload);\n\n populateInputValueOnInputTypeSwitch({\n populateInputOnEdit,\n item: selectedItem,\n filterInputType,\n setInputValue,\n filter,\n });\n\n switchToNextInputType(\n filterInputType,\n setInputType,\n handleChangeViewMode,\n refs.domReference.current,\n // preventing focus on filter pill only when last filter for better backspace experience\n isLastFilter ? false : undefined\n );\n setActiveIndex(null);\n if (isLastFilter) {\n focusOnWipInputRef?.();\n }\n }\n }\n },\n [\n activeIndex,\n filteredDropDownItems,\n handleLocalMultiValueChange,\n controller,\n filter,\n filterInputType,\n canCommitExpressionUpdate,\n commitExpressionUpdate,\n commitFullParsedExpression,\n populateInputOnEdit,\n handleChangeViewMode,\n refs.domReference,\n isLastFilter,\n focusOnWipInputRef,\n onAddCustomValue,\n isGroupBy,\n isAlwaysWip,\n handleResetWip,\n setInputType,\n ]\n );\n\n const handleEditMultiValuePill = useCallback(\n (value: SelectableValue<string>) => {\n const valueLabel = value.label || value.value!;\n setFilterMultiValues((prev) => prev.filter((item) => item.value !== value.value));\n setPreventFiltering(true);\n setInputValue(valueLabel);\n refs.domReference.current?.focus();\n setTimeout(() => {\n refs.domReference.current?.select();\n });\n },\n [refs.domReference]\n );\n\n //\n // Effects\n //\n\n useEffect(() => {\n // fetch options when dropdown is opened.\n if (open) {\n handleFetchOptions(filterInputType);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open, filterInputType]);\n\n // when not in wip mode this is the point of switching from view to edit mode\n // and in this case we default to 'value' input type and focus input\n useEffect(() => {\n if (!isAlwaysWip) {\n if (hasMultiValueOperator && filter?.values?.length) {\n const multiValueOptions = (filter.values as string[]).reduce<Array<SelectableValue<string>>>(\n (acc, value, i) => [\n ...acc,\n {\n label:\n value === ALL_VARIABLE_VALUE\n ? t('grafana-scenes.components.adhoc-filters-combobox.all-values', 'All')\n : filter.valueLabels?.[i] || value,\n value: value,\n },\n ],\n []\n );\n // populate filter multi values to local state on pill edit enter\n setFilterMultiValues(multiValueOptions);\n }\n\n // populate input when selecting pill for edit\n // this avoids populating input during delete with backspace\n if (!hasMultiValueOperator && populateInputOnEdit) {\n setInputValue(filter?.valueLabels?.[0] ?? (filter?.value || ''));\n setTimeout(() => {\n refs.domReference.current?.select();\n });\n }\n\n refs.domReference.current?.focus();\n setOpen(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // this is required only with multi value select in order to update position\n // of the multi value apply button\n useEffect(() => {\n if (isMultiValueEdit && filterMultiValues) {\n setTimeout(() => setForceRefresh({}));\n }\n }, [filterMultiValues, isMultiValueEdit]);\n\n // synch filterInputTypeRef with filterInputType state\n useLayoutEffect(() => {\n if (filterInputTypeRef.current) {\n filterInputTypeRef.current = filterInputType;\n }\n }, [filterInputType]);\n\n useLayoutEffect(() => {\n // this is needed to scroll virtual list to the position of currently selected\n // dropdown item when navigating with arrow up/down keys to end/start of list\n if (\n activeIndex !== null &&\n rowVirtualizer.range &&\n (activeIndex > rowVirtualizer.range?.endIndex || activeIndex < rowVirtualizer.range?.startIndex)\n ) {\n rowVirtualizer.scrollToIndex(activeIndex);\n }\n }, [activeIndex, rowVirtualizer]);\n\n const keyLabel = filter?.keyLabel ?? filter?.key;\n\n return (\n <div className={styles.comboboxWrapper}>\n {filter && !isGroupBy ? (\n <div className={styles.pillWrapper}>\n {/* Filter key pill render */}\n {filter?.key ? <div className={cx(styles.basePill, styles.keyPill)}>{keyLabel}</div> : null}\n {/* Filter operator pill render */}\n {filter?.key && filter?.operator && filterInputType !== 'operator' ? (\n <div\n id={operatorIdentifier}\n className={cx(\n styles.basePill,\n !filter.origin && styles.operatorPill,\n filter.origin && styles.keyPill,\n operatorIdentifier\n )}\n aria-label={t(\n 'grafana-scenes.variables.ad-hoc-combobox.aria-label-edit-filter-operator',\n 'Edit filter operator'\n )}\n tabIndex={filter.origin ? -1 : 0}\n onClick={(event) => {\n if (filter.origin) {\n handleChangeViewMode?.();\n return;\n }\n\n event.stopPropagation();\n setInputValue('');\n switchInputType('operator', setInputType, undefined, refs.domReference.current);\n }}\n onKeyDown={(event) => {\n if (filter.origin) {\n return;\n }\n\n handleShiftTabInput(event, hasMultiValueOperator);\n if (event.key === 'Enter') {\n setInputValue('');\n switchInputType('operator', setInputType, undefined, refs.domReference.current);\n }\n }}\n {...(!filter.origin && { role: 'button' })}\n >\n {filter.operator}\n </div>\n ) : null}\n\n <div ref={multiValuePillWrapperRef}></div>\n {isMultiValueEdit\n ? filterMultiValues.map((item, i) => (\n <MultiValuePill\n key={`${item.value}-${i}`}\n item={item}\n index={i}\n handleRemoveMultiValue={handleRemoveMultiValue}\n handleEditMultiValuePill={handleEditMultiValuePill}\n />\n ))\n : null}\n </div>\n ) : null}\n\n <input\n {...getReferenceProps({\n ref: refs.setReference,\n id: controller.getControlId?.(),\n onChange,\n value: inputValue,\n // dynamic placeholder to display operator and/or value in filter edit mode\n placeholder: generatePlaceholder(\n filter!,\n filterInputType,\n isMultiValueEdit,\n isAlwaysWip,\n isGroupBy ? groupByInputPlaceholder : inputPlaceholder,\n isGroupBy\n ),\n 'aria-autocomplete': 'list',\n onKeyDown(event) {\n if (!open) {\n setOpen(true);\n return;\n }\n\n if (filterInputType === 'operator') {\n handleShiftTabInput(event);\n }\n handleBackspaceInput(event, isMultiValueEdit);\n handleTabInput(event, isMultiValueEdit);\n handleEnterInput(event, isMultiValueEdit);\n },\n })}\n className={cx(styles.inputStyle)}\n onClick={(event) => {\n event.stopPropagation();\n onInputClick?.();\n setOpen(true);\n }}\n />\n {optionsLoading ? <Spinner className={styles.loadingIndicator} inline={true} /> : null}\n <FloatingPortal>\n {open && (\n <FloatingFocusManager context={context} initialFocus={-1} visuallyHiddenDismiss modal={true}>\n <>\n <div\n style={{\n ...floatingStyles,\n width: `${optionsError ? ERROR_STATE_DROPDOWN_WIDTH : maxOptionWidth}px`,\n transform: isMultiValueEdit\n ? `translate(${multiValuePillWrapperRef.current?.getBoundingClientRect().left || 0}px, ${\n (refs.domReference.current?.getBoundingClientRect().bottom || 0) + 10\n }px )`\n : floatingStyles.transform,\n }}\n ref={refs.setFloating}\n className={styles.dropdownWrapper}\n tabIndex={-1}\n >\n <div\n style={{\n height: `${rowVirtualizer.getTotalSize() || VIRTUAL_LIST_ITEM_HEIGHT}px`, // fallback to 38px for loading/error/no options placeholders\n }}\n {...getFloatingProps()}\n tabIndex={-1}\n >\n {optionsLoading ? (\n <LoadingOptionsPlaceholder />\n ) : optionsError ? (\n <OptionsErrorPlaceholder handleFetchOptions={() => handleFetchOptions(filterInputType)} />\n ) : !filteredDropDownItems.length && canCommitExpressionUpdate ? (\n <ExpressionHintPlaceholder />\n ) : !filteredDropDownItems.length &&\n (!allowCustomValue || filterInputType === 'operator' || !inputValue) ? (\n <NoOptionsPlaceholder />\n ) : (\n rowVirtualizer.getVirtualItems().map((virtualItem) => {\n const item = filteredDropDownItems[virtualItem.index];\n const index = virtualItem.index;\n\n // render group label\n if (item.options) {\n return (\n <div\n key={`${item.label}+${index}`}\n className={cx(styles.optionGroupLabel, styles.groupTopBorder)}\n style={{\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n >\n <Text weight=\"bold\" variant=\"bodySmall\" color=\"secondary\">\n {item.label!}\n </Text>\n </div>\n );\n }\n\n const nextItem: SelectableValue<string> | undefined =\n filteredDropDownItems[virtualItem.index + 1];\n const shouldAddBottomBorder = nextItem && !nextItem.group && !nextItem.options && item.group;\n\n const itemLabel = item.label ?? item.value;\n\n return (\n // key is included in getItemProps()\n // eslint-disable-next-line react/jsx-key\n <DropdownItem\n {...getItemProps({\n key: `${item.value!}-${index}`,\n ref(node) {\n listRef.current[index] = node;\n },\n onClick(event) {\n if (filterInputType !== 'value') {\n event.stopPropagation();\n }\n\n if (isGroupBy) {\n event.stopPropagation();\n if (isAlwaysWip) {\n controller.addGroupByFilter?.(item);\n handleResetWip();\n } else {\n controller.updateFilter(filter!, {\n key: item.value!,\n keyLabel: item.label || item.value!,\n });\n handleChangeViewMode?.();\n }\n return;\n }\n\n if (isMultiValueEdit) {\n event.preventDefault();\n event.stopPropagation();\n handleLocalMultiValueChange(item);\n setInputValue('');\n refs.domReference.current?.focus();\n } else {\n const payload = generateFilterUpdatePayload({\n filterInputType,\n item,\n filter: filter!,\n setFilterMultiValues,\n onAddCustomValue,\n });\n\n if (filterInputType === 'value' && payload.value !== filter?.value) {\n controller.startProfile?.(FILTER_CHANGED_INTERACTION);\n }\n controller.updateFilter(filter!, payload);\n\n populateInputValueOnInputTypeSwitch({\n populateInputOnEdit,\n item,\n filterInputType,\n setInputValue,\n filter,\n });\n switchToNextInputType(\n filterInputType,\n setInputType,\n handleChangeViewMode,\n refs.domReference.current,\n // preventing focus on filter pill only when last filter for better backspace experience\n isLastFilter ? false : undefined\n );\n if (isLastFilter) {\n focusOnWipInputRef?.();\n }\n }\n },\n })}\n active={activeIndex === index}\n addGroupBottomBorder={shouldAddBottomBorder}\n // virtual item positioning and accessibility\n style={{\n height: `${virtualItem.size}px`,\n transform: `translateY(${virtualItem.start}px)`,\n }}\n aria-setsize={filteredDropDownItems.length}\n aria-posinset={virtualItem.index + 1}\n isMultiValueEdit={isMultiValueEdit}\n checked={filterMultiValues.some((val) => val.value === item.value)}\n testIdValue={String(itemLabel)}\n >\n <span>\n {item.isCustom\n ? t(\n 'grafana-scenes.components.adhoc-filters-combobox.use-custom-value',\n 'Use custom value: {{itemLabel}}',\n { itemLabel, interpolation: { escapeValue: false } }\n )\n : itemLabel}\n </span>\n {item.description ? <div className={styles.descriptionText}>{item.description}</div> : null}\n </DropdownItem>\n );\n })\n )}\n </div>\n </div>\n {isMultiValueEdit && !optionsLoading && !optionsError && filteredDropDownItems.length ? (\n <MultiValueApplyButton\n onApply={() => {\n handleMultiValueFilterCommit(controller, filter!, filterMultiValues);\n handleResetWip();\n handleChangeViewMode?.();\n setOpen(false);\n }}\n floatingElement={refs.floating.current}\n maxOptionWidth={maxOptionWidth}\n menuHeight={Math.min(rowVirtualizer.getTotalSize(), MAX_MENU_HEIGHT)}\n />\n ) : null}\n </>\n </FloatingFocusManager>\n )}\n </FloatingPortal>\n </div>\n );\n});\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n comboboxWrapper: css({\n display: 'flex',\n flexWrap: 'wrap',\n }),\n pillWrapper: css({\n display: 'flex',\n alignItems: 'center',\n flexWrap: 'wrap',\n }),\n basePill: css({\n display: 'flex',\n alignItems: 'center',\n background: theme.colors.action.disabledBackground,\n border: `1px solid ${theme.colors.border.weak}`,\n padding: theme.spacing(0.125, 1, 0.125, 1),\n color: theme.colors.text.primary,\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n minHeight: theme.spacing(2.75),\n ...theme.typography.bodySmall,\n cursor: 'pointer',\n }),\n keyPill: css({\n fontWeight: theme.typography.fontWeightBold,\n cursor: 'default',\n }),\n operatorPill: css({\n '&:hover': {\n background: theme.colors.action.hover,\n },\n }),\n dropdownWrapper: css({\n backgroundColor: theme.colors.background.elevated,\n color: theme.colors.text.primary,\n boxShadow: theme.shadows.z2,\n borderRadius: theme.shape.radius.default,\n overflowY: 'auto',\n zIndex: theme.zIndex.portal,\n }),\n inputStyle: css({\n paddingBlock: 0,\n width: '90px',\n minWidth: '90px',\n maxWidth: '200px',\n '@supports (field-sizing: content)': {\n width: 'auto',\n minWidth: 'auto',\n fieldSizing: 'content',\n },\n '&:focus': {\n outline: 'none',\n },\n }),\n loadingIndicator: css({\n display: 'flex',\n color: theme.colors.text.secondary,\n marginLeft: theme.spacing(0.5),\n alignItems: 'center',\n }),\n optionGroupLabel: css({\n padding: theme.spacing(1),\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n }),\n groupTopBorder: css({\n '&:not(:first-child)': {\n borderTop: `1px solid ${theme.colors.border.weak}`,\n },\n }),\n descriptionText: css({\n ...theme.typography.bodySmall,\n color: theme.colors.text.secondary,\n paddingTop: theme.spacing(0.5),\n }),\n});\n"],"names":["AdHocCombobox","getStyles","controller","filter","filterMultiValues","_a","_","_b","_c","_d","options"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -8249,9 +8249,10 @@ const getStyles$g = (theme) => ({
|
|
|
8249
8249
|
}
|
|
8250
8250
|
}),
|
|
8251
8251
|
dropdownWrapper: css.css({
|
|
8252
|
-
backgroundColor: theme.colors.background.
|
|
8252
|
+
backgroundColor: theme.colors.background.elevated,
|
|
8253
8253
|
color: theme.colors.text.primary,
|
|
8254
8254
|
boxShadow: theme.shadows.z2,
|
|
8255
|
+
borderRadius: theme.shape.radius.default,
|
|
8255
8256
|
overflowY: "auto",
|
|
8256
8257
|
zIndex: theme.zIndex.portal
|
|
8257
8258
|
}),
|