Skip to content

Commit 15cd531

Browse files
committed
[opinionated] Improve focus/hover states of child EuiFilterButtons
- (focus) add manually border radius rounding logic - it's verbose (due to popover anchors) but visually worth it - (hover) force the notification badge to inherit both interactive and disabled cursors
1 parent 29c912a commit 15cd531

4 files changed

Lines changed: 39 additions & 5 deletions

File tree

src/components/filter_group/__snapshots__/filter_group.test.tsx.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
exports[`EuiFilterGroup is rendered 1`] = `
44
<div
55
aria-label="aria-label"
6-
class="euiFilterGroup testClass1 testClass2 emotion-euiFilterGroup-euiTestCss"
6+
class="euiFilterGroup testClass1 testClass2 emotion-euiFilterGroup-uncompressed-euiTestCss"
77
data-test-subj="test subject string"
88
/>
99
`;
@@ -16,6 +16,6 @@ exports[`EuiFilterGroup props compressed is rendered 1`] = `
1616

1717
exports[`EuiFilterGroup props fullWidth is rendered 1`] = `
1818
<div
19-
class="euiFilterGroup emotion-euiFilterGroup-fullWidth"
19+
class="euiFilterGroup emotion-euiFilterGroup-fullWidth-uncompressed"
2020
/>
2121
`;

src/components/filter_group/filter_button.styles.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ export const euiFilterButtonStyles = (euiThemeContext: UseEuiTheme) => {
5151
text-decoration: underline;
5252
}
5353
}
54+
55+
&:focus-visible {
56+
outline-offset: -${euiTheme.focus.width};
57+
}
5458
`,
5559
withNext: css`
5660
& + .euiFilterButton {
@@ -99,7 +103,9 @@ export const euiFilterButtonChildStyles = ({ euiTheme }: UseEuiTheme) => {
99103
`,
100104
},
101105
notification: {
102-
euiFilterButton__notification: css``,
106+
euiFilterButton__notification: css`
107+
cursor: inherit;
108+
`,
103109
disabled: css`
104110
opacity: 0.5;
105111
`,

src/components/filter_group/filter_group.styles.ts

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
* Side Public License, v 1.
77
*/
88

9+
import { CSSProperties } from 'react';
910
import { css } from '@emotion/react';
1011

1112
import { UseEuiTheme } from '../../services';
@@ -30,7 +31,6 @@ export const euiFilterGroupStyles = (euiThemeContext: UseEuiTheme) => {
3031
${logicalCSS('max-width', '100%')}
3132
overflow: hidden;
3233
33-
border-radius: ${controlBorderRadius};
3434
background-color: ${backgroundColor};
3535
box-shadow: inset 0 0 0 ${euiTheme.border.width.thin} ${borderColor};
3636
@@ -62,8 +62,13 @@ export const euiFilterGroupStyles = (euiThemeContext: UseEuiTheme) => {
6262
fullWidth: css`
6363
display: flex;
6464
`,
65+
uncompressed: css`
66+
border-radius: ${controlBorderRadius};
67+
${buttonChildrenBorderRadii(controlBorderRadius)}
68+
`,
6569
compressed: css`
6670
border-radius: ${controlCompressedBorderRadius};
71+
${buttonChildrenBorderRadii(controlCompressedBorderRadius)}
6772
6873
.euiFilterButton {
6974
${logicalCSS('height', controlCompressedHeight)}
@@ -82,3 +87,26 @@ export const euiFilterGroupStyles = (euiThemeContext: UseEuiTheme) => {
8287
`,
8388
};
8489
};
90+
91+
/**
92+
* Small util for manually rounding the borders of the first and last EuiFilterButtons
93+
* - this makes their focus rings appear nicely instead of being cutt off.
94+
* 2nd selector accounts for EuiFilterButtons nested within popover/tooltip wrappers.
95+
*
96+
* NOTE: Do not use `logicalShorthandCSS()` here, as that will cause single buttons to not be rounded
97+
*/
98+
const buttonChildrenBorderRadii = (
99+
radiusSize: CSSProperties['borderRadius']
100+
) => `
101+
> :first-child,
102+
> :first-child .euiFilterButton {
103+
${logicalCSS('border-top-left-radius', radiusSize)}
104+
${logicalCSS('border-bottom-left-radius', radiusSize)}
105+
}
106+
107+
> :last-child,
108+
> :last-child .euiFilterButton {
109+
${logicalCSS('border-top-right-radius', radiusSize)}
110+
${logicalCSS('border-bottom-right-radius', radiusSize)}
111+
}
112+
`;

src/components/filter_group/filter_group.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export const EuiFilterGroup: FunctionComponent<EuiFilterGroupProps> = ({
3939
const cssStyles = [
4040
styles.euiFilterGroup,
4141
fullWidth && styles.fullWidth,
42-
compressed && styles.compressed,
42+
compressed ? styles.compressed : styles.uncompressed,
4343
];
4444

4545
const classes = classNames('euiFilterGroup', className);

0 commit comments

Comments
 (0)