diff --git a/superset-frontend/src/dashboard/components/FiltersBadge/Styles.tsx b/superset-frontend/src/dashboard/components/FiltersBadge/Styles.tsx index 301b4ac4d59..b58b5d27d85 100644 --- a/superset-frontend/src/dashboard/components/FiltersBadge/Styles.tsx +++ b/superset-frontend/src/dashboard/components/FiltersBadge/Styles.tsx @@ -82,6 +82,7 @@ export const FilterItem = styled.button` background: none; outline: none; width: 100%; + color: inherit; &::-moz-focus-inner { border: 0; diff --git a/superset-frontend/src/filters/components/Range/RangeFilterPlugin.tsx b/superset-frontend/src/filters/components/Range/RangeFilterPlugin.tsx index 60d0d53d06e..a1c22bd20df 100644 --- a/superset-frontend/src/filters/components/Range/RangeFilterPlugin.tsx +++ b/superset-frontend/src/filters/components/Range/RangeFilterPlugin.tsx @@ -25,6 +25,7 @@ import { styled, useTheme, t, + css, } from '@superset-ui/core'; import { useCallback, useEffect, useMemo, useState, useRef } from 'react'; import { FilterBarOrientation } from 'src/dashboard/types'; @@ -70,7 +71,7 @@ const SliderWrapper = styled.div` const TooltipContainer = styled.div` ${({ theme }) => ` position: absolute; - top: -${theme.sizeUnit * 10}px; + top: -${theme.sizeUnit * 6}px; right: 0px; z-index: 100; display: flex; @@ -85,42 +86,40 @@ const TooltipContainer = styled.div` const HorizontalLayout = styled.div` ${({ theme }) => ` display: flex; - flex-direction: column; gap: ${theme.sizeUnit * 4}px; width: 100%; + align-items: center; - .controls-container { + .slider-wrapper { display: flex; align-items: center; - gap: ${theme.sizeUnit * 4}px; - width: 100%; - - .slider-wrapper { - display: flex; - align-items: center; - flex: 2; - } - - .slider-container { - flex: 1; - min-width: 180px; - } - - .inputs-container { - min-width: 160px; - max-width: 200px; - } - + flex: 2; } - .message-container { - width: 100%; - text-align: center; - padding-top: ${theme.sizeUnit * 2}px; + .slider-container { + flex: 1; + min-width: 180px; + } + + .inputs-container { + min-width: 160px; + max-width: 200px; } `} `; +const FocusContainer = styled.div` + ${({ theme }) => ` + border-radius: ${theme.borderRadius}px; + transition: box-shadow ${theme.motionDurationMid} ease-in-out; + &:focus { + box-shadow: 0 0 0 2px ${theme.colorPrimary}; + } + &:focus-visible { + outline: none; + }`} +`; + const numberFormatter = getNumberFormatter(NumberFormats.SMART_NUMBER); const getLabel = ( @@ -579,7 +578,6 @@ export default function RangeFilterPlugin(props: PluginFilterRangeProps) { const renderInputs = () => ( {filterBarOrientation === FilterBarOrientation.Horizontal && !isOverflowingFilterBar ? ( - -
+ + {(rangeDisplayMode === RangeDisplayMode.Slider || rangeDisplayMode === RangeDisplayMode.SliderAndInput) && ( @@ -640,8 +638,8 @@ export default function RangeFilterPlugin(props: PluginFilterRangeProps) { rangeDisplayMode === RangeDisplayMode.SliderAndInput) && (
{renderInputs()}
)} -
-
+ + ) : ( <>
@@ -650,12 +648,21 @@ export default function RangeFilterPlugin(props: PluginFilterRangeProps) { )} - {(rangeDisplayMode === RangeDisplayMode.Slider || - rangeDisplayMode === RangeDisplayMode.SliderAndInput) && - renderSlider()} - {(rangeDisplayMode === RangeDisplayMode.Input || - rangeDisplayMode === RangeDisplayMode.SliderAndInput) && - renderInputs()} + + {(rangeDisplayMode === RangeDisplayMode.Slider || + rangeDisplayMode === RangeDisplayMode.SliderAndInput) && + renderSlider()} + {(rangeDisplayMode === RangeDisplayMode.Input || + rangeDisplayMode === RangeDisplayMode.SliderAndInput) && + renderInputs()} +
diff --git a/superset-frontend/src/filters/components/Time/TimeFilterPlugin.tsx b/superset-frontend/src/filters/components/Time/TimeFilterPlugin.tsx index a2f11978d3a..be49e2eba2e 100644 --- a/superset-frontend/src/filters/components/Time/TimeFilterPlugin.tsx +++ b/superset-frontend/src/filters/components/Time/TimeFilterPlugin.tsx @@ -29,7 +29,7 @@ import { FilterPluginStyle } from '../common'; const TimeFilterStyles = styled(FilterPluginStyle)` display: flex; align-items: center; - overflow-x: auto; + overflow-x: visible; & .ant-tag { margin-right: 0; @@ -62,6 +62,12 @@ const ControlContainer = styled.div<{ & > div { width: 100%; } + + &:focus > div { + border-color: ${({ theme }) => theme.colorPrimary}; + box-shadow: ${({ theme }) => `0 0 0 2px ${theme.controlOutline}`}; + outline: 0; + } `; export default function TimeFilterPlugin(props: PluginFilterTimeProps) { @@ -115,6 +121,7 @@ export default function TimeFilterPlugin(props: PluginFilterTimeProps) { onBlur={unsetFocusedFilter} onMouseEnter={setHoveredFilter} onMouseLeave={unsetHoveredFilter} + tabIndex={-1} >