@elastic/eui 102.2.0 → 102.3.0

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.
Files changed (162) hide show
  1. package/dist/eui_theme_borealis_dark.json +1 -1
  2. package/es/components/badge/color_utils.js +1 -3
  3. package/es/components/badge/notification_badge/badge_notification.styles.js +6 -1
  4. package/es/components/basic_table/basic_table.js +4 -1
  5. package/es/components/basic_table/in_memory_table.js +4 -1
  6. package/es/components/breadcrumbs/_breadcrumb_content.styles.js +6 -3
  7. package/es/components/button/button_display/_button_display.js +1 -1
  8. package/es/components/button/button_display/_button_display.styles.js +11 -2
  9. package/es/components/button/button_display/_button_display_content.styles.js +6 -3
  10. package/es/components/button/button_empty/button_empty.styles.js +9 -12
  11. package/es/components/button/button_group/button_group.styles.js +5 -3
  12. package/es/components/button/button_group/button_group_button.js +19 -9
  13. package/es/components/button/button_group/button_group_button.styles.js +43 -19
  14. package/es/components/button/button_icon/button_icon.js +4 -2
  15. package/es/components/collapsible_nav/collapsible_nav.js +1 -0
  16. package/es/components/datagrid/controls/data_grid_toolbar_control.js +11 -1
  17. package/es/components/datagrid/utils/focus.js +2 -2
  18. package/es/components/filter_group/filter_button.js +88 -23
  19. package/es/components/filter_group/filter_button.styles.js +51 -15
  20. package/es/components/filter_group/filter_group.styles.js +18 -6
  21. package/es/components/markdown_editor/markdown_editor_footer.js +9 -4
  22. package/es/components/search_bar/filters/field_value_selection_filter.js +1 -0
  23. package/es/components/search_bar/filters/field_value_toggle_filter.js +3 -1
  24. package/es/components/search_bar/filters/field_value_toggle_group_filter.js +3 -1
  25. package/es/components/search_bar/filters/is_filter.js +3 -1
  26. package/es/components/search_bar/search_bar.a11y.js +3 -3
  27. package/es/global_styling/mixins/_button.js +95 -28
  28. package/es/services/theme/index.js +2 -1
  29. package/es/services/theme/provider.js +28 -2
  30. package/es/services/theme/theme_variant.js +22 -0
  31. package/es/themes/amsterdam/global_styling/variables/_buttons.js +348 -147
  32. package/es/themes/amsterdam/global_styling/variables/_components.js +229 -224
  33. package/es/themes/amsterdam/theme.js +2 -1
  34. package/es/themes/json/eui_theme_borealis_dark.json +1 -1
  35. package/eui.d.ts +194 -161
  36. package/lib/components/badge/color_utils.js +1 -3
  37. package/lib/components/badge/notification_badge/badge_notification.styles.js +6 -1
  38. package/lib/components/basic_table/basic_table.js +4 -1
  39. package/lib/components/basic_table/in_memory_table.js +4 -1
  40. package/lib/components/breadcrumbs/_breadcrumb_content.styles.js +5 -2
  41. package/lib/components/button/button_display/_button_display.js +1 -1
  42. package/lib/components/button/button_display/_button_display.styles.js +11 -2
  43. package/lib/components/button/button_display/_button_display_content.styles.js +6 -3
  44. package/lib/components/button/button_empty/button_empty.styles.js +10 -11
  45. package/lib/components/button/button_group/button_group.styles.js +5 -3
  46. package/lib/components/button/button_group/button_group_button.js +18 -8
  47. package/lib/components/button/button_group/button_group_button.styles.js +41 -17
  48. package/lib/components/button/button_icon/button_icon.js +3 -1
  49. package/lib/components/collapsible_nav/collapsible_nav.js +1 -0
  50. package/lib/components/datagrid/controls/data_grid_toolbar_control.js +11 -1
  51. package/lib/components/datagrid/utils/focus.js +1 -1
  52. package/lib/components/filter_group/filter_button.js +86 -21
  53. package/lib/components/filter_group/filter_button.styles.js +51 -15
  54. package/lib/components/filter_group/filter_group.styles.js +18 -6
  55. package/lib/components/markdown_editor/markdown_editor_footer.js +8 -3
  56. package/lib/components/search_bar/filters/field_value_selection_filter.js +1 -0
  57. package/lib/components/search_bar/filters/field_value_toggle_filter.js +3 -1
  58. package/lib/components/search_bar/filters/field_value_toggle_group_filter.js +3 -1
  59. package/lib/components/search_bar/filters/is_filter.js +3 -1
  60. package/lib/components/search_bar/search_bar.a11y.js +3 -3
  61. package/lib/global_styling/mixins/_button.js +94 -27
  62. package/lib/services/theme/index.js +42 -1
  63. package/lib/services/theme/provider.js +28 -2
  64. package/lib/services/theme/theme_variant.js +28 -0
  65. package/lib/themes/amsterdam/global_styling/variables/_buttons.js +348 -147
  66. package/lib/themes/amsterdam/global_styling/variables/_components.js +229 -224
  67. package/lib/themes/amsterdam/theme.js +2 -1
  68. package/lib/themes/json/eui_theme_borealis_dark.json +1 -1
  69. package/optimize/es/components/badge/color_utils.js +1 -3
  70. package/optimize/es/components/badge/notification_badge/badge_notification.styles.js +6 -1
  71. package/optimize/es/components/breadcrumbs/_breadcrumb_content.styles.js +6 -3
  72. package/optimize/es/components/button/button_display/_button_display.js +1 -1
  73. package/optimize/es/components/button/button_display/_button_display.styles.js +11 -2
  74. package/optimize/es/components/button/button_display/_button_display_content.styles.js +6 -3
  75. package/optimize/es/components/button/button_empty/button_empty.styles.js +9 -12
  76. package/optimize/es/components/button/button_group/button_group.styles.js +5 -3
  77. package/optimize/es/components/button/button_group/button_group_button.js +12 -8
  78. package/optimize/es/components/button/button_group/button_group_button.styles.js +43 -19
  79. package/optimize/es/components/button/button_icon/button_icon.js +4 -2
  80. package/optimize/es/components/datagrid/controls/data_grid_toolbar_control.js +11 -1
  81. package/optimize/es/components/datagrid/utils/focus.js +2 -2
  82. package/optimize/es/components/filter_group/filter_button.js +78 -21
  83. package/optimize/es/components/filter_group/filter_button.styles.js +51 -15
  84. package/optimize/es/components/filter_group/filter_group.styles.js +18 -6
  85. package/optimize/es/components/markdown_editor/markdown_editor_footer.js +9 -4
  86. package/optimize/es/components/search_bar/filters/field_value_selection_filter.js +1 -0
  87. package/optimize/es/components/search_bar/filters/field_value_toggle_filter.js +3 -1
  88. package/optimize/es/components/search_bar/filters/field_value_toggle_group_filter.js +3 -1
  89. package/optimize/es/components/search_bar/filters/is_filter.js +3 -1
  90. package/optimize/es/components/search_bar/search_bar.a11y.js +3 -3
  91. package/optimize/es/global_styling/mixins/_button.js +95 -28
  92. package/optimize/es/services/theme/index.js +2 -1
  93. package/optimize/es/services/theme/provider.js +28 -2
  94. package/optimize/es/services/theme/theme_variant.js +22 -0
  95. package/optimize/es/themes/amsterdam/global_styling/variables/_buttons.js +348 -147
  96. package/optimize/es/themes/amsterdam/global_styling/variables/_components.js +229 -224
  97. package/optimize/es/themes/amsterdam/theme.js +2 -1
  98. package/optimize/es/themes/json/eui_theme_borealis_dark.json +1 -1
  99. package/optimize/lib/components/badge/color_utils.js +1 -3
  100. package/optimize/lib/components/badge/notification_badge/badge_notification.styles.js +6 -1
  101. package/optimize/lib/components/breadcrumbs/_breadcrumb_content.styles.js +5 -2
  102. package/optimize/lib/components/button/button_display/_button_display.js +1 -1
  103. package/optimize/lib/components/button/button_display/_button_display.styles.js +11 -2
  104. package/optimize/lib/components/button/button_display/_button_display_content.styles.js +6 -3
  105. package/optimize/lib/components/button/button_empty/button_empty.styles.js +10 -11
  106. package/optimize/lib/components/button/button_group/button_group.styles.js +5 -3
  107. package/optimize/lib/components/button/button_group/button_group_button.js +11 -7
  108. package/optimize/lib/components/button/button_group/button_group_button.styles.js +41 -17
  109. package/optimize/lib/components/button/button_icon/button_icon.js +3 -1
  110. package/optimize/lib/components/datagrid/controls/data_grid_toolbar_control.js +11 -1
  111. package/optimize/lib/components/datagrid/utils/focus.js +1 -1
  112. package/optimize/lib/components/filter_group/filter_button.js +76 -19
  113. package/optimize/lib/components/filter_group/filter_button.styles.js +51 -15
  114. package/optimize/lib/components/filter_group/filter_group.styles.js +18 -6
  115. package/optimize/lib/components/markdown_editor/markdown_editor_footer.js +8 -3
  116. package/optimize/lib/components/search_bar/filters/field_value_selection_filter.js +1 -0
  117. package/optimize/lib/components/search_bar/filters/field_value_toggle_filter.js +3 -1
  118. package/optimize/lib/components/search_bar/filters/field_value_toggle_group_filter.js +3 -1
  119. package/optimize/lib/components/search_bar/filters/is_filter.js +3 -1
  120. package/optimize/lib/components/search_bar/search_bar.a11y.js +3 -3
  121. package/optimize/lib/global_styling/mixins/_button.js +94 -27
  122. package/optimize/lib/services/theme/index.js +42 -1
  123. package/optimize/lib/services/theme/provider.js +28 -2
  124. package/optimize/lib/services/theme/theme_variant.js +28 -0
  125. package/optimize/lib/themes/amsterdam/global_styling/variables/_buttons.js +348 -147
  126. package/optimize/lib/themes/amsterdam/global_styling/variables/_components.js +229 -224
  127. package/optimize/lib/themes/amsterdam/theme.js +2 -1
  128. package/optimize/lib/themes/json/eui_theme_borealis_dark.json +1 -1
  129. package/package.json +4 -4
  130. package/test-env/components/badge/color_utils.js +1 -3
  131. package/test-env/components/badge/notification_badge/badge_notification.styles.js +6 -1
  132. package/test-env/components/basic_table/basic_table.js +4 -1
  133. package/test-env/components/basic_table/in_memory_table.js +4 -1
  134. package/test-env/components/breadcrumbs/_breadcrumb_content.styles.js +5 -2
  135. package/test-env/components/button/button_display/_button_display.js +1 -1
  136. package/test-env/components/button/button_display/_button_display.styles.js +11 -2
  137. package/test-env/components/button/button_display/_button_display_content.styles.js +6 -3
  138. package/test-env/components/button/button_empty/button_empty.styles.js +10 -11
  139. package/test-env/components/button/button_group/button_group.styles.js +5 -3
  140. package/test-env/components/button/button_group/button_group_button.js +18 -8
  141. package/test-env/components/button/button_group/button_group_button.styles.js +41 -17
  142. package/test-env/components/button/button_icon/button_icon.js +3 -1
  143. package/test-env/components/collapsible_nav/collapsible_nav.js +1 -0
  144. package/test-env/components/datagrid/controls/data_grid_toolbar_control.js +11 -1
  145. package/test-env/components/datagrid/utils/focus.js +1 -1
  146. package/test-env/components/filter_group/filter_button.js +86 -21
  147. package/test-env/components/filter_group/filter_button.styles.js +51 -15
  148. package/test-env/components/filter_group/filter_group.styles.js +18 -6
  149. package/test-env/components/markdown_editor/markdown_editor_footer.js +8 -3
  150. package/test-env/components/search_bar/filters/field_value_selection_filter.js +1 -0
  151. package/test-env/components/search_bar/filters/field_value_toggle_filter.js +3 -1
  152. package/test-env/components/search_bar/filters/field_value_toggle_group_filter.js +3 -1
  153. package/test-env/components/search_bar/filters/is_filter.js +3 -1
  154. package/test-env/components/search_bar/search_bar.a11y.js +3 -3
  155. package/test-env/global_styling/mixins/_button.js +94 -27
  156. package/test-env/services/theme/index.js +42 -1
  157. package/test-env/services/theme/provider.js +28 -2
  158. package/test-env/services/theme/theme_variant.js +28 -0
  159. package/test-env/themes/amsterdam/global_styling/variables/_buttons.js +348 -147
  160. package/test-env/themes/amsterdam/global_styling/variables/_components.js +229 -224
  161. package/test-env/themes/amsterdam/theme.js +2 -1
  162. package/test-env/themes/json/eui_theme_borealis_dark.json +1 -1
@@ -1,8 +1,8 @@
1
- import _extends from "@babel/runtime/helpers/extends";
2
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
+ import _extends from "@babel/runtime/helpers/extends";
3
3
  import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
4
4
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
5
- var _excluded = ["children", "className", "iconType", "iconSide", "color", "badgeColor", "hasActiveFilters", "numFilters", "numActiveFilters", "isDisabled", "isSelected", "type", "grow", "withNext", "textProps", "contentProps"];
5
+ var _excluded = ["children", "className", "iconType", "iconSide", "color", "badgeColor", "hasActiveFilters", "numFilters", "numActiveFilters", "isToggle", "isDisabled", "isSelected", "type", "grow", "withNext", "textProps", "contentProps"];
6
6
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
7
7
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
8
8
  /*
@@ -15,12 +15,14 @@ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t =
15
15
 
16
16
  import React from 'react';
17
17
  import classNames from 'classnames';
18
- import { useEuiMemoizedStyles } from '../../services';
18
+ import { EuiThemeProvider, useEuiMemoizedStyles, useEuiTheme, useGeneratedHtmlId, useEuiThemeRefreshVariant } from '../../services';
19
19
  import { useEuiI18n } from '../i18n';
20
20
  import { useInnerText } from '../inner_text';
21
21
  import { EuiNotificationBadge } from '../badge';
22
22
  import { EuiButtonEmpty } from '../button/button_empty';
23
- import { euiFilterButtonStyles, euiFilterButtonChildStyles } from './filter_button.styles';
23
+ import { euiFilterButtonStyles, euiFilterButtonWrapperStyles, euiFilterButtonChildStyles } from './filter_button.styles';
24
+ import { EuiButtonGroupButton } from '../button/button_group/button_group_button';
25
+ import { _compressedButtonFocusColors } from '../button/button_group/button_group_button.styles';
24
26
  import { jsx as ___EmotionJSX } from "@emotion/react";
25
27
  export var EuiFilterButton = function EuiFilterButton(_ref) {
26
28
  var children = _ref.children,
@@ -35,6 +37,7 @@ export var EuiFilterButton = function EuiFilterButton(_ref) {
35
37
  hasActiveFilters = _ref.hasActiveFilters,
36
38
  numFilters = _ref.numFilters,
37
39
  numActiveFilters = _ref.numActiveFilters,
40
+ isToggle = _ref.isToggle,
38
41
  isDisabled = _ref.isDisabled,
39
42
  isSelected = _ref.isSelected,
40
43
  _ref$type = _ref.type,
@@ -45,18 +48,37 @@ export var EuiFilterButton = function EuiFilterButton(_ref) {
45
48
  textProps = _ref.textProps,
46
49
  contentProps = _ref.contentProps,
47
50
  rest = _objectWithoutProperties(_ref, _excluded);
51
+ var id = useGeneratedHtmlId({
52
+ prefix: 'filter-button'
53
+ });
48
54
  var numFiltersDefined = numFilters != null; // != instead of !== to allow for null and undefined
49
55
  var numActiveFiltersDefined = numActiveFilters != null && numActiveFilters > 0;
56
+ var euiThemeContext = useEuiTheme();
57
+ var colorMode = euiThemeContext.colorMode;
58
+ var isRefreshVariant = useEuiThemeRefreshVariant('buttonVariant');
59
+
60
+ // assumption about type of usage based on icon usage
61
+ // requires manual override to apply correct aria attributes for more custom usages
62
+ var isCollapsible = !isToggle && iconType === 'arrowDown';
63
+ // NOTE: in Amsterdam `hasActiveFilters` applies selected styling while `isSelected` does not.
64
+ // With Borealis this is more granular as EuiFilterButton now supports proper toggle buttons next to regular buttons
65
+ var isExpanded = isCollapsible && (isSelected !== null && isSelected !== void 0 ? isSelected : hasActiveFilters);
50
66
  var styles = useEuiMemoizedStyles(euiFilterButtonStyles);
51
- var cssStyles = [styles.euiFilterButton, withNext && styles.withNext, !grow && styles.noGrow, hasActiveFilters && styles.hasActiveFilters, numFiltersDefined && styles.hasNotification];
67
+ var focusColorStyles = useEuiMemoizedStyles(_compressedButtonFocusColors);
68
+ var toggleVariantStyles = isRefreshVariant ? [isToggle && styles.buttonType.toggle, !isToggle && !isDisabled && focusColorStyles[color], !isToggle && styles.buttonType.default] : [isToggle && styles.buttonType.toggle];
69
+ var cssStyles = [styles.euiFilterButton, !isRefreshVariant && withNext && styles.withNext, hasActiveFilters && styles.hasActiveFilters].concat(toggleVariantStyles);
70
+ var wrapperStyles = useEuiMemoizedStyles(euiFilterButtonWrapperStyles);
71
+ var wrapperCssStyles = [wrapperStyles.wrapper, isRefreshVariant && withNext && styles.withNext, numFiltersDefined && styles.hasNotification, isToggle && wrapperStyles.hasToggle, !grow && styles.noGrow];
52
72
  var _useEuiMemoizedStyles = useEuiMemoizedStyles(euiFilterButtonChildStyles),
53
73
  contentStyles = _useEuiMemoizedStyles.content,
54
74
  textStyles = _useEuiMemoizedStyles.text,
55
75
  notificationStyles = _useEuiMemoizedStyles.notification;
76
+ var wrapperClasses = classNames('euiFilterButton__wrapper');
56
77
  var classes = classNames('euiFilterButton', {
57
78
  'euiFilterButton-isSelected': isSelected,
58
79
  'euiFilterButton-hasActiveFilters': hasActiveFilters,
59
- 'euiFilterButton-hasNotification': numFiltersDefined
80
+ 'euiFilterButton-hasNotification': numFiltersDefined,
81
+ 'euiFilterButton-isToggle': isRefreshVariant && isToggle
60
82
  }, className);
61
83
 
62
84
  /**
@@ -71,6 +93,16 @@ export var EuiFilterButton = function EuiFilterButton(_ref) {
71
93
  count: badgeCount
72
94
  });
73
95
  var badgeStyles = [notificationStyles.euiFilterButton__notification, isDisabled && notificationStyles.disabled];
96
+ var badgeContent = ___EmotionJSX(EuiNotificationBadge, {
97
+ className: "euiFilterButton__notification",
98
+ css: badgeStyles,
99
+ "aria-label": hasActiveFilters ? activeBadgeLabel : availableBadgeLabel,
100
+ color: isDisabled || !hasActiveFilters ? 'subdued' : badgeColor,
101
+ role: "marquee" // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/marquee_role
102
+ }, badgeCount);
103
+ var badgeElement = showBadge && (isRefreshVariant ? ___EmotionJSX(EuiThemeProvider, {
104
+ colorMode: isToggle && isSelected ? 'INVERSE' : colorMode
105
+ }, badgeContent) : badgeContent);
74
106
 
75
107
  /**
76
108
  * Text
@@ -84,7 +116,17 @@ export var EuiFilterButton = function EuiFilterButton(_ref) {
84
116
  ref = _useInnerText2[0],
85
117
  innerText = _useInnerText2[1];
86
118
  var dataText = children && typeof children === 'string' ? children : innerText;
87
- return ___EmotionJSX(EuiButtonEmpty, _extends({
119
+ var textContent = ___EmotionJSX("span", _extends({
120
+ ref: ref,
121
+ "data-text": dataText,
122
+ title: dataText
123
+ }, textProps, {
124
+ className: buttonTextClassNames,
125
+ css: textCssStyles
126
+ }), children);
127
+
128
+ /** Button element */
129
+ var button = ___EmotionJSX(EuiButtonEmpty, _extends({
88
130
  className: classes,
89
131
  css: cssStyles,
90
132
  color: color,
@@ -93,21 +135,36 @@ export var EuiFilterButton = function EuiFilterButton(_ref) {
93
135
  iconType: iconType,
94
136
  type: type,
95
137
  textProps: false,
138
+ contentProps: _objectSpread(_objectSpread({}, contentProps), {}, {
139
+ css: [contentStyles.euiFilterButton__content, iconType && contentStyles.hasIcon, contentProps === null || contentProps === void 0 ? void 0 : contentProps.css]
140
+ }),
141
+ "aria-expanded": isCollapsible ? isExpanded : undefined
142
+ }, rest), textContent, badgeElement);
143
+ var onToggleClick = function onToggleClick(e) {
144
+ var _rest$onClick;
145
+ rest === null || rest === void 0 || (_rest$onClick = rest.onClick) === null || _rest$onClick === void 0 || _rest$onClick.call(rest, e);
146
+ };
147
+ return ___EmotionJSX("div", {
148
+ className: wrapperClasses,
149
+ css: wrapperCssStyles
150
+ }, isToggle && !isCollapsible ? ___EmotionJSX(EuiButtonGroupButton, _extends({
151
+ id: id,
152
+ label: ___EmotionJSX(React.Fragment, null, textContent, badgeElement),
153
+ className: classes,
154
+ css: cssStyles,
155
+ color: color,
156
+ isSelected: isSelected,
157
+ size: "compressed",
158
+ isDisabled: isDisabled,
159
+ iconSide: iconSide,
160
+ iconType: iconType,
161
+ isIconOnly: false,
162
+ type: type,
163
+ textProps: false,
96
164
  contentProps: _objectSpread(_objectSpread({}, contentProps), {}, {
97
165
  css: [contentStyles.euiFilterButton__content, iconType && contentStyles.hasIcon, contentProps === null || contentProps === void 0 ? void 0 : contentProps.css]
98
166
  })
99
- }, rest), ___EmotionJSX("span", _extends({
100
- ref: ref,
101
- "data-text": dataText,
102
- title: dataText
103
- }, textProps, {
104
- className: buttonTextClassNames,
105
- css: textCssStyles
106
- }), children), showBadge && ___EmotionJSX(EuiNotificationBadge, {
107
- className: "euiFilterButton__notification",
108
- css: badgeStyles,
109
- "aria-label": hasActiveFilters ? activeBadgeLabel : availableBadgeLabel,
110
- color: isDisabled || !hasActiveFilters ? 'subdued' : badgeColor,
111
- role: "marquee" // https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles/marquee_role
112
- }, badgeCount));
167
+ }, rest, {
168
+ onClick: onToggleClick
169
+ })) : button);
113
170
  };
@@ -8,14 +8,17 @@ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringif
8
8
  */
9
9
 
10
10
  import { css } from '@emotion/react';
11
- import { logicalCSS, mathWithUnits, euiTextShift, euiTextTruncate } from '../../global_styling';
11
+ import { isEuiThemeRefreshVariant } from '../../services';
12
+ import { logicalCSS, mathWithUnits, euiTextShift, euiTextTruncate, highContrastModeStyles, preventForcedColors, euiButtonEmptyColor } from '../../global_styling';
13
+ import { cssSupportsHasWithNextSibling } from '../../global_styling/functions/supports';
12
14
  import { euiFormVariables } from '../form/form.styles';
13
- export var euiFilterButtonDisplay = function euiFilterButtonDisplay(_ref4) {
14
- var euiTheme = _ref4.euiTheme;
15
+ export var euiFilterButtonDisplay = function euiFilterButtonDisplay(euiThemeContext) {
16
+ var euiTheme = euiThemeContext.euiTheme;
17
+ var isRefreshVariant = isEuiThemeRefreshVariant(euiThemeContext, 'buttonVariant');
15
18
  return {
16
19
  flex: '1 1 auto',
17
20
  minInlineSize: mathWithUnits(euiTheme.size.base, function (x) {
18
- return x * 3;
21
+ return x * (isRefreshVariant ? 2.75 : 3);
19
22
  })
20
23
  };
21
24
  };
@@ -29,9 +32,11 @@ var _ref3 = process.env.NODE_ENV === "production" ? {
29
32
  };
30
33
  export var euiFilterButtonStyles = function euiFilterButtonStyles(euiThemeContext) {
31
34
  var euiTheme = euiThemeContext.euiTheme;
35
+ var isRefreshVariant = isEuiThemeRefreshVariant(euiThemeContext, 'buttonVariant');
32
36
  var _euiFormVariables = euiFormVariables(euiThemeContext),
33
37
  controlHeight = _euiFormVariables.controlHeight,
34
38
  borderColor = _euiFormVariables.borderColor;
39
+ var selectedSelector = '.euiFilterButton-isSelected';
35
40
  var border = "".concat(euiTheme.border.width.thin, " solid ").concat(borderColor);
36
41
 
37
42
  // Pseudo elements create borders without affecting width. We also prefer them
@@ -39,14 +44,44 @@ export var euiFilterButtonStyles = function euiFilterButtonStyles(euiThemeContex
39
44
  var leftBorder = "\n &::before {\n content: '';\n position: absolute;\n ".concat(logicalCSS('right', '100%'), "\n ").concat(logicalCSS('vertical', 0), "\n ").concat(logicalCSS('border-left', border), "\n }\n ");
40
45
  // Bottom borders are needed for responsive flex-wrap behavior
41
46
  var bottomBorder = "\n &::after {\n content: '';\n position: absolute;\n ".concat(logicalCSS('top', '100%'), "\n ").concat(logicalCSS('horizontal', 0), "\n ").concat(logicalCSS('border-bottom', border), "\n }\n ");
47
+ var buttonStyles = isRefreshVariant ? "\n ".concat(logicalCSS('width', '100%'), "\n\n &:not(").concat(selectedSelector, ") {\n &:hover,\n &:active {\n .euiFilterButton__notification[class*=\"subdued\"] {\n background-color: ").concat(euiTheme.components.filterButtonBadgeBackgroundHover, "\n }\n }\n }\n ") : "\n ".concat(logicalCSS('height', controlHeight), "\n border-radius: 0;\n ").concat(leftBorder, "\n ").concat(bottomBorder, "\n\n /* :not(:disabled) specificity needed to override EuiButtonEmpty styles */\n &:hover:not(:disabled),\n &:focus:not(:disabled) {\n /* Remove underline from whole button so notifications don't get the underline */\n text-decoration: none;\n\n .euiFilterButton__text {\n /* And put it only on the actual text part */\n text-decoration: underline;\n }\n }\n ");
48
+ var toggleTypeStyles = isRefreshVariant ? "\n ".concat(euiFilterButtonDisplay(euiThemeContext), ";\n\n ").concat(highContrastModeStyles(euiThemeContext, {
49
+ forced: "\n &:is(".concat(selectedSelector, ") {\n ").concat(preventForcedColors(euiThemeContext), "\n color: ").concat(euiTheme.colors.emptyShade, ";\n background-color: ").concat(euiTheme.colors.fullShade, ";\n }\n ")
50
+ }), "\n ") : "\n font-weight: ".concat(euiTheme.font.weight.medium, ";\n padding: 0;\n\n &:is(").concat(selectedSelector, ") {\n color: ").concat(euiButtonEmptyColor(euiThemeContext, 'text').color, ";\n background-color: transparent;\n font-weight: ").concat(euiTheme.font.weight.bold, ";\n }\n ");
51
+ var withNextSelector = isRefreshVariant ? '& + .euiFilterButton__wrapper' : '.euiFilterButton__wrapper:has(&) + .euiFilterButton__wrapper';
52
+ // handles display of borders between buttons
53
+ var withNextStyles = isRefreshVariant ? "\n &::before {\n border: none;\n }\n\n ".concat(cssSupportsHasWithNextSibling("\n &:has(+ :not(&)) {\n ".concat(logicalCSS('padding-right', '0'), "\n }\n ")), "\n ") : "\n .euiFilterButton {\n &::before {\n border: none;\n }\n }\n ";
42
54
  return {
43
- euiFilterButton: /*#__PURE__*/css("position:relative;", euiFilterButtonDisplay(euiThemeContext), " ", logicalCSS('height', controlHeight), " border-radius:0;", leftBorder, " ", bottomBorder, "&:hover:not(:disabled),&:focus:not(:disabled){text-decoration:none;.euiFilterButton__text{text-decoration:underline;}}&:focus-visible{outline-offset:-", euiTheme.focus.width, ";};label:euiFilterButton;"),
44
- withNext: /*#__PURE__*/css("&+.euiFilterButton{", logicalCSS('margin-left', "-".concat(euiTheme.size.xs)), "&::before{display:none;}};label:withNext;"),
55
+ euiFilterButton: /*#__PURE__*/css(!isRefreshVariant && euiFilterButtonDisplay(euiThemeContext), ";position:relative;", buttonStyles, ";;label:euiFilterButton;"),
56
+ buttonType: {
57
+ default: /*#__PURE__*/css(isRefreshVariant && "\n border-radius: 0;\n\n &:focus-visible {\n z-index: 1;\n outline-offset: -".concat(euiTheme.border.width.thick, ";\n border-radius: ").concat(euiTheme.border.radius.small, ";\n transition: none;\n }\n "), ";;label:default;"),
58
+ toggle: /*#__PURE__*/css("&:focus-visible{outline-offset:", mathWithUnits(euiTheme.focus.width, function (x) {
59
+ return isRefreshVariant ? x / 2 : x * -1;
60
+ }), ";}", toggleTypeStyles, ";;label:toggle;")
61
+ },
62
+ withNext: /*#__PURE__*/css(withNextSelector, "{", logicalCSS('margin-left', "-".concat(euiTheme.size.xs)), withNextStyles, ";};label:withNext;"),
45
63
  noGrow: _ref3,
46
64
  hasNotification: /*#__PURE__*/css(logicalCSS('min-width', mathWithUnits(euiTheme.size.base, function (x) {
47
65
  return x * 6;
48
66
  })), ";;label:hasNotification;"),
49
- hasActiveFilters: /*#__PURE__*/css("font-weight:", euiTheme.font.weight.bold, ";;label:hasActiveFilters;")
67
+ hasActiveFilters: /*#__PURE__*/css("font-weight:", isRefreshVariant ? euiTheme.font.weight.regular : euiTheme.font.weight.bold, ";;label:hasActiveFilters;")
68
+ };
69
+ };
70
+ export var euiFilterButtonWrapperStyles = function euiFilterButtonWrapperStyles(euiThemeContext) {
71
+ var euiTheme = euiThemeContext.euiTheme;
72
+ var isRefreshVariant = isEuiThemeRefreshVariant(euiThemeContext, 'buttonVariant');
73
+ var _euiFormVariables2 = euiFormVariables(euiThemeContext),
74
+ borderColor = _euiFormVariables2.borderColor;
75
+ var border = "".concat(euiTheme.border.width.thin, " solid ").concat(borderColor);
76
+
77
+ // Pseudo elements create borders without affecting width. We also prefer them
78
+ // over box-shadow for Windows high contrast theme compatibility
79
+ var leftBorder = "\n &::before {\n content: '';\n position: absolute;\n inset: 0;\n ".concat(logicalCSS('border-left', border), "\n\n pointer-events: none;\n }\n ");
80
+ // Bottom borders are needed for responsive flex-wrap behavior
81
+ var bottomBorder = "\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n ".concat(logicalCSS('border-bottom', border), "\n pointer-events: none;\n }\n ");
82
+ return {
83
+ wrapper: /*#__PURE__*/css(euiFilterButtonDisplay(euiThemeContext), " position:relative;display:flex;align-items:center;", isRefreshVariant && "\n ".concat(leftBorder, "\n ").concat(bottomBorder, "\n "), " ", logicalCSS('padding-vertical', euiTheme.border.width.thin), ";;label:wrapper;"),
84
+ hasToggle: /*#__PURE__*/css(logicalCSS('padding-horizontal', isRefreshVariant ? euiTheme.border.width.thin : '0'), cssSupportsHasWithNextSibling("\n &:not([class*=\"withNext\"]):has(+ :not(&)) {\n ".concat(logicalCSS('padding-right', '0'), "\n }\n ")), ";;label:hasToggle;")
50
85
  };
51
86
  };
52
87
  var _ref = process.env.NODE_ENV === "production" ? {
@@ -58,24 +93,25 @@ var _ref = process.env.NODE_ENV === "production" ? {
58
93
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
59
94
  };
60
95
  var _ref2 = process.env.NODE_ENV === "production" ? {
61
- name: "nd1u8j-euiFilterButton__notification",
62
- styles: "cursor:inherit;label:euiFilterButton__notification;"
96
+ name: "zxesfz-euiFilterButton__notification",
97
+ styles: "cursor:inherit;forced-color-adjust:auto;&{transition:none;};label:euiFilterButton__notification;"
63
98
  } : {
64
- name: "nd1u8j-euiFilterButton__notification",
65
- styles: "cursor:inherit;label:euiFilterButton__notification;",
99
+ name: "zxesfz-euiFilterButton__notification",
100
+ styles: "cursor:inherit;forced-color-adjust:auto;&{transition:none;};label:euiFilterButton__notification;",
66
101
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
67
102
  };
68
- export var euiFilterButtonChildStyles = function euiFilterButtonChildStyles(_ref5) {
69
- var euiTheme = _ref5.euiTheme;
103
+ export var euiFilterButtonChildStyles = function euiFilterButtonChildStyles(euiThemeContext) {
104
+ var euiTheme = euiThemeContext.euiTheme;
105
+ var isRefreshVariant = isEuiThemeRefreshVariant(euiThemeContext, 'buttonVariant');
70
106
  return {
71
107
  content: {
72
- euiFilterButton__content: /*#__PURE__*/css(";label:euiFilterButton__content;"),
108
+ euiFilterButton__content: /*#__PURE__*/css(isRefreshVariant && "\n .euiThemeProvider {\n display: inline-flex;\n }\n ", ";;label:euiFilterButton__content;"),
73
109
  hasIcon: /*#__PURE__*/css("&>.euiIcon:last-child{", logicalCSS('margin-left', 'auto'), ";};label:hasIcon;")
74
110
  },
75
111
  text: {
76
112
  euiFilterButton__text: /*#__PURE__*/css(euiTextShift('bold', 'data-text', euiTheme), " ", euiTextTruncate(), ";;label:euiFilterButton__text;"),
77
113
  hasNotification: /*#__PURE__*/css(logicalCSS('min-width', mathWithUnits(euiTheme.size.base, function (x) {
78
- return x * 3;
114
+ return x * (isRefreshVariant ? 2 : 3);
79
115
  })), ";;label:hasNotification;")
80
116
  },
81
117
  notification: {
@@ -8,6 +8,7 @@ function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringif
8
8
  */
9
9
 
10
10
  import { css } from '@emotion/react';
11
+ import { isEuiThemeRefreshVariant } from '../../services';
11
12
  import { logicalCSS, mathWithUnits, euiBreakpoint } from '../../global_styling';
12
13
  import { highContrastModeStyles } from '../../global_styling/functions/high_contrast';
13
14
  import { euiFormVariables } from '../form/form.styles';
@@ -22,20 +23,31 @@ var _ref = process.env.NODE_ENV === "production" ? {
22
23
  };
23
24
  export var euiFilterGroupStyles = function euiFilterGroupStyles(euiThemeContext) {
24
25
  var euiTheme = euiThemeContext.euiTheme;
26
+ var isRefreshVariant = isEuiThemeRefreshVariant(euiThemeContext, 'buttonVariant');
25
27
  var _euiFormVariables = euiFormVariables(euiThemeContext),
26
28
  backgroundColor = _euiFormVariables.backgroundColor,
27
29
  borderColor = _euiFormVariables.borderColor,
28
30
  controlBorderRadius = _euiFormVariables.controlBorderRadius,
31
+ controlHeight = _euiFormVariables.controlHeight,
29
32
  controlCompressedBorderRadius = _euiFormVariables.controlCompressedBorderRadius,
30
33
  controlCompressedHeight = _euiFormVariables.controlCompressedHeight;
34
+ var borderRadius = isRefreshVariant ? euiTheme.border.radius.small : controlBorderRadius;
35
+ var borderRadiusCompressed = isRefreshVariant ? euiTheme.border.radius.small : controlCompressedBorderRadius;
36
+ var borderStyle = isRefreshVariant ? "\n /* Adds the border on a pseudo element to prevent height differences between wrapper and buttons.\n Uses ::after to ensure overlap and prevents blocking by setting pointer-events: none */\n &::after {\n content: '';\n position: absolute;\n inset: 0;\n border: ".concat(euiTheme.border.width.thin, " solid ").concat(euiTheme.colors.borderBasePlain, ";\n border-radius: inherit;\n pointer-events: none;\n }\n ") : "\n ".concat(highContrastModeStyles(euiThemeContext, {
37
+ none: "box-shadow: inset 0 0 0 ".concat(euiTheme.border.width.thin, " ").concat(borderColor, ";"),
38
+ forced: "border: ".concat(euiTheme.border.thin, ";")
39
+ }), "\n ");
31
40
  return {
32
- euiFilterGroup: /*#__PURE__*/css("display:inline-flex;", logicalCSS('max-width', '100%'), " overflow:hidden;background-color:", backgroundColor, ";", highContrastModeStyles(euiThemeContext, {
33
- none: "box-shadow: inset 0 0 0 ".concat(euiTheme.border.width.thin, " ").concat(borderColor, ";"),
34
- forced: "border: ".concat(euiTheme.border.thin, ";")
35
- }), ">*:not(.euiFilterButton){", euiFilterButtonDisplay(euiThemeContext), ";}.euiPopover>.euiFilterButton{", logicalCSS('width', '100%'), ";}", euiBreakpoint(euiThemeContext, ['xs', 's']), "{flex-wrap:wrap;}", euiBreakpoint(euiThemeContext, ['xs']), "{display:flex;.euiFilterButton{flex-grow:1;}};label:euiFilterGroup;"),
41
+ euiFilterGroup: /*#__PURE__*/css(isRefreshVariant && "position: relative;", " display:inline-flex;", logicalCSS('max-width', '100%'), " overflow:hidden;background-color:", backgroundColor, ";", borderStyle, ">*:not(.euiFilterButton__wrapper, .euiFilterButton){", euiFilterButtonDisplay(euiThemeContext), ";}.euiPopover>.euiFilterButton{", logicalCSS('width', '100%'), ";}", euiBreakpoint(euiThemeContext, ['xs', 's']), "{flex-wrap:wrap;}", euiBreakpoint(euiThemeContext, ['xs']), "{display:flex;", isRefreshVariant && "\n .euiPopover:focus-within {\n z-index: 1;\n }\n \n .euiFilterButton__wrapper {\n flex-grow: 1;\n }\n ", ";.euiFilterButton__wrapper{flex-grow:1;}};label:euiFilterGroup;"),
36
42
  fullWidth: _ref,
37
- uncompressed: /*#__PURE__*/css("border-radius:", controlBorderRadius, ";", buttonChildrenBorderRadii(controlBorderRadius), ";;label:uncompressed;"),
38
- compressed: /*#__PURE__*/css("border-radius:", controlCompressedBorderRadius, ";", buttonChildrenBorderRadii(controlCompressedBorderRadius), " .euiFilterButton{", logicalCSS('height', controlCompressedHeight), ";};label:compressed;"),
43
+ uncompressed: /*#__PURE__*/css("border-radius:", borderRadius, ";.euiFilterButton__wrapper{", logicalCSS('height', controlHeight), ";}.euiFilterButton{", logicalCSS('height', controlHeight), ";}", !isRefreshVariant && buttonChildrenBorderRadii(borderRadius), " ", isRefreshVariant && "\n .euiFilterButton-isToggle {\n ".concat(logicalCSS('height', mathWithUnits([controlHeight, euiTheme.size.xxs], function (x, y) {
44
+ return x - 3 * y;
45
+ })), "\n }\n "), ";;label:uncompressed;"),
46
+ compressed: /*#__PURE__*/css("border-radius:", borderRadiusCompressed, ";", !isRefreshVariant && buttonChildrenBorderRadii(borderRadiusCompressed), " .euiFilterButton{", logicalCSS('height', isRefreshVariant ? mathWithUnits([controlCompressedHeight, euiTheme.border.width.thin], function (x, y) {
47
+ return x - 2 * y;
48
+ }) : controlCompressedHeight), ";}", isRefreshVariant && "\n .euiFilterButton-isToggle {\n ".concat(logicalCSS('height', mathWithUnits([controlCompressedHeight, euiTheme.size.xxs], function (x, y) {
49
+ return x - 3 * y;
50
+ })), "\n }\n "), ";;label:compressed;"),
39
51
  /**
40
52
  * Not used in EuiFilterGroup directly, but used by EuiSearchBar and consumers
41
53
  * A fixed width is required because of the shift in widths that can be caused
@@ -8,7 +8,7 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
8
8
  */
9
9
 
10
10
  import React, { useState, useMemo, Fragment, forwardRef, useContext } from 'react';
11
- import { useEuiMemoizedStyles } from '../../services';
11
+ import { useEuiMemoizedStyles, useGeneratedHtmlId } from '../../services';
12
12
  import { EuiLoadingSpinner } from '../loading';
13
13
  import { EuiButton, EuiButtonEmpty, EuiButtonIcon } from '../button';
14
14
  import { EuiTitle } from '../title';
@@ -73,6 +73,7 @@ export var EuiMarkdownEditorFooter = /*#__PURE__*/forwardRef(function (props, re
73
73
  var syntaxTitle = useEuiI18n('euiMarkdownEditorFooter.syntaxTitle', 'Syntax help');
74
74
  var _useContext = useContext(EuiMarkdownContext),
75
75
  readOnly = _useContext.readOnly;
76
+ var helpModalTitleId = useGeneratedHtmlId();
76
77
  if (isUploadingFiles) {
77
78
  uploadButton = ___EmotionJSX(EuiButtonIcon, {
78
79
  size: "s",
@@ -163,8 +164,11 @@ export var EuiMarkdownEditorFooter = /*#__PURE__*/forwardRef(function (props, re
163
164
  })), isShowingHelpModal && ___EmotionJSX(EuiModal, {
164
165
  onClose: function onClose() {
165
166
  return setIsShowingHelpModal(false);
166
- }
167
- }, ___EmotionJSX(EuiModalHeader, null, ___EmotionJSX(EuiTitle, null, ___EmotionJSX("h1", null, syntaxTitle))), ___EmotionJSX(EuiModalBody, null, ___EmotionJSX(EuiText, null, ___EmotionJSX(EuiI18n, {
167
+ },
168
+ "aria-labelledby": helpModalTitleId
169
+ }, ___EmotionJSX(EuiModalHeader, null, ___EmotionJSX(EuiTitle, null, ___EmotionJSX("h1", {
170
+ id: helpModalTitleId
171
+ }, syntaxTitle))), ___EmotionJSX(EuiModalBody, null, ___EmotionJSX(EuiText, null, ___EmotionJSX(EuiI18n, {
168
172
  tokens: ['euiMarkdownEditorFooter.syntaxModalDescriptionPrefix', 'euiMarkdownEditorFooter.syntaxModalDescriptionSuffix'],
169
173
  defaults: ['This editor uses', 'You can also utilize these additional syntax plugins to add rich content to your text.']
170
174
  }, function (_ref3) {
@@ -212,7 +216,8 @@ export var EuiMarkdownEditorFooter = /*#__PURE__*/forwardRef(function (props, re
212
216
  return setIsShowingHelpPopover(false);
213
217
  },
214
218
  panelPaddingSize: "s",
215
- anchorPosition: "upCenter"
219
+ anchorPosition: "upCenter",
220
+ "aria-labelledby": helpModalTitleId
216
221
  }, ___EmotionJSX(EuiI18n, {
217
222
  tokens: ['euiMarkdownEditorFooter.syntaxPopoverDescription'],
218
223
  defaults: ['This editor uses']
@@ -284,6 +284,7 @@ export var FieldValueSelectionFilter = /*#__PURE__*/function (_Component) {
284
284
  return ___EmotionJSX(EuiFilterButton, {
285
285
  iconType: "arrowDown",
286
286
  iconSide: "right",
287
+ isSelected: active,
287
288
  hasActiveFilters: active,
288
289
  numActiveFilters: active ? activeItemsCount : undefined,
289
290
  grow: true,
@@ -71,8 +71,10 @@ export var FieldValueToggleFilter = /*#__PURE__*/function (_Component) {
71
71
  };
72
72
  return ___EmotionJSX(EuiFilterButton, {
73
73
  onClick: onClick,
74
+ isSelected: hasActiveFilters,
74
75
  hasActiveFilters: hasActiveFilters,
75
- "aria-pressed": !!hasActiveFilters
76
+ "aria-pressed": !!hasActiveFilters,
77
+ isToggle: true
76
78
  }, name);
77
79
  }
78
80
  }]);
@@ -72,9 +72,11 @@ export var FieldValueToggleGroupFilter = /*#__PURE__*/function (_Component) {
72
72
  return ___EmotionJSX(EuiFilterButton, {
73
73
  key: key,
74
74
  onClick: onClick,
75
+ isSelected: active,
75
76
  hasActiveFilters: active,
76
77
  "aria-pressed": !!active,
77
- withNext: !isLastItem
78
+ withNext: !isLastItem,
79
+ isToggle: true
78
80
  }, name);
79
81
  });
80
82
  }
@@ -67,8 +67,10 @@ export var IsFilter = /*#__PURE__*/function (_Component) {
67
67
  };
68
68
  return ___EmotionJSX(EuiFilterButton, {
69
69
  onClick: onClick,
70
+ isSelected: hasActiveFilters,
70
71
  hasActiveFilters: hasActiveFilters,
71
- "aria-pressed": !!hasActiveFilters
72
+ "aria-pressed": !!hasActiveFilters,
73
+ isToggle: true
72
74
  }, name);
73
75
  }
74
76
  }]);
@@ -184,7 +184,7 @@ describe('EuiSearchBar', function () {
184
184
  cy.checkAxe();
185
185
  });
186
186
  it('has zero violations after filtering on Open items', function () {
187
- cy.get('button.euiButtonEmpty').first().focus();
187
+ cy.get('button.euiFilterButton').first().focus();
188
188
  cy.realPress('Enter');
189
189
  cy.get('table.euiTable tbody').find('tr').should('have.length', 3);
190
190
  cy.checkAxe();
@@ -195,12 +195,12 @@ describe('EuiSearchBar', function () {
195
195
  cy.checkAxe();
196
196
  });
197
197
  it('has zero violations after filtering by Tags', function () {
198
- cy.get('button.euiButtonEmpty').last().focus();
198
+ cy.get('button.euiFilterButton').last().focus();
199
199
  cy.realPress('Enter');
200
200
  cy.realPress('ArrowDown');
201
201
  cy.realPress('Enter');
202
202
  cy.realPress('Escape');
203
- cy.get('button.euiButtonEmpty').last().should('have.focus');
203
+ cy.get('button.euiFilterButton').last().should('have.focus');
204
204
  cy.get('table.euiTable tbody').find('tr').should('have.length', 3);
205
205
  cy.checkAxe();
206
206
  cy.repeatRealPress(['Shift', 'Tab'], 3);