diff --git a/package.json b/package.json index 22ac585845216..1655f03ace40a 100644 --- a/package.json +++ b/package.json @@ -102,7 +102,7 @@ "@elastic/datemath": "5.0.3", "@elastic/elasticsearch": "npm:@elastic/elasticsearch-canary@8.9.1-canary.1", "@elastic/ems-client": "8.5.1", - "@elastic/eui": "91.0.0-backport.0", + "@elastic/eui": "91.3.1", "@elastic/filesaver": "1.1.2", "@elastic/node-crypto": "1.2.1", "@elastic/numeral": "^2.5.1", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap index 610656fa96f46..416eba2d6fb6e 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap +++ b/packages/core/i18n/core-i18n-browser-internal/src/__snapshots__/i18n_service.test.tsx.snap @@ -35,6 +35,7 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiCodeBlockFullScreen.fullscreenCollapse": "Collapse", "euiCodeBlockFullScreen.fullscreenExpand": "Expand", "euiCollapsedItemActions.allActions": "All actions", + "euiCollapsedItemActions.allActionsDisabled": "Individual item actions are disabled when rows are being selected.", "euiCollapsibleNavBeta.ariaLabel": "Site menu", "euiCollapsibleNavButton.ariaLabelClose": "Close navigation", "euiCollapsibleNavButton.ariaLabelCollapse": "Collapse navigation", @@ -53,15 +54,12 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiColumnActions.moveRight": "Move right", "euiColumnActions.sort": [Function], "euiColumnSelector.button": "Columns", - "euiColumnSelector.buttonActivePlural": [Function], - "euiColumnSelector.buttonActiveSingular": [Function], "euiColumnSelector.dragHandleAriaLabel": "Drag handle", "euiColumnSelector.hideAll": "Hide all", "euiColumnSelector.search": "Search", "euiColumnSelector.searchcolumns": "Search columns", "euiColumnSelector.selectAll": "Show all", "euiColumnSorting.button": "Sort fields", - "euiColumnSorting.buttonActive": [Function], "euiColumnSorting.clearAll": "Clear sorting", "euiColumnSorting.emptySorting": "Currently no fields are sorted", "euiColumnSorting.pickFields": "Pick fields to sort by", @@ -110,6 +108,7 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiDataGridSchema.jsonSortTextDesc": "Large-Small", "euiDataGridSchema.numberSortTextAsc": "Low-High", "euiDataGridSchema.numberSortTextDesc": "High-Low", + "euiDataGridToolbarControl.badgeAriaLabel": [Function], "euiDatePopoverButton.invalidTitle": [Function], "euiDatePopoverButton.outdatedTitle": [Function], "euiDatePopoverContent.absoluteTabLabel": "Absolute", @@ -133,6 +132,8 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiDisplaySelector.rowHeightLabel": "Row height", "euiDualRange.sliderScreenReaderInstructions": "You are in a custom range slider. Use the Up and Down arrow keys to change the minimum value. Press Tab to interact with the maximum value.", "euiErrorBoundary.error": "Error", + "euiExternalLinkIcon.ariaLabel": "External link", + "euiExternalLinkIcon.newTarget.screenReaderOnlyText": "(opens in a new tab or window)", "euiFieldPassword.maskPassword": "Mask password", "euiFieldPassword.showPassword": "Show password as plain text. Note: this will visually expose your password on the screen.", "euiFilePicker.clearSelectedFiles": "Clear selected files", @@ -185,8 +186,6 @@ exports[`#start() returns \`Context\` component 1`] = ` "euiKeyboardShortcuts.title": "Keyboard shortcuts", "euiKeyboardShortcuts.upArrowDescription": "Move one cell up", "euiKeyboardShortcuts.upArrowTitle": "Up arrow", - "euiLink.external.ariaLabel": "External link", - "euiLink.newTarget.screenReaderOnlyText": "(opens in a new tab or window)", "euiLoadingChart.ariaLabel": "Loading", "euiLoadingStrings.ariaLabel": "Loading", "euiMark.highlightEnd": "highlight end", diff --git a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx index a669a86bfda1c..f542b59c24850 100644 --- a/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx +++ b/packages/core/i18n/core-i18n-browser-internal/src/i18n_eui_mapping.tsx @@ -167,6 +167,13 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'ARIA label and tooltip content describing a button that expands an actions menu', } ), + 'euiCollapsedItemActions.allActionsDisabled': i18n.translate( + 'core.euiCollapsedItemActions.allActionsDisabled', + { + defaultMessage: 'Individual item actions are disabled when rows are being selected.', + description: 'Title content when the actions popover toggle is disabled', + } + ), 'euiCollapsibleNavBeta.ariaLabel': i18n.translate('core.euiCollapsibleNavBeta.ariaLabel', { defaultMessage: 'Site menu', }), @@ -252,16 +259,6 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'euiColumnSelector.searchcolumns': i18n.translate('core.euiColumnSelector.searchcolumns', { defaultMessage: 'Search columns', }), - 'euiColumnSelector.buttonActiveSingular': ({ numberOfHiddenFields }: EuiValues) => - i18n.translate('core.euiColumnSelector.buttonActiveSingular', { - defaultMessage: '{numberOfHiddenFields} column hidden', - values: { numberOfHiddenFields }, - }), - 'euiColumnSelector.buttonActivePlural': ({ numberOfHiddenFields }: EuiValues) => - i18n.translate('core.euiColumnSelector.buttonActivePlural', { - defaultMessage: '{numberOfHiddenFields} columns hidden', - values: { numberOfHiddenFields }, - }), 'euiColumnSorting.clearAll': i18n.translate('core.euiColumnSorting.clearAll', { defaultMessage: 'Clear sorting', }), @@ -280,11 +277,6 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'euiColumnSorting.button': i18n.translate('core.euiColumnSorting.button', { defaultMessage: 'Sort fields', }), - 'euiColumnSorting.buttonActive': ({ numberOfSortedFields }: EuiValues) => - i18n.translate('core.euiColumnSorting.buttonActive', { - defaultMessage: '{numberOfSortedFields, plural, one {# field} other {# fields}} sorted', - values: { numberOfSortedFields }, - }), 'euiColumnSortingDraggable.activeSortLabel': ({ display }: EuiValues) => i18n.translate('core.euiColumnSortingDraggable.activeSortLabel', { defaultMessage: '{display} is sorting this data grid', @@ -673,6 +665,11 @@ export const getEuiContextMapping = (): EuiTokensObject => { description: 'Descending size label', } ), + 'euiDataGridToolbarControl.badgeAriaLabel': ({ count }: EuiValues) => + i18n.translate('core.euiDataGridToolbarControl.badgeAriaLabel', { + defaultMessage: 'Active: {count}', + values: { count }, + }), 'euiDatePopoverButton.invalidTitle': ({ title }: EuiValues) => i18n.translate('core.euiDatePopoverButton.invalidTitle', { defaultMessage: 'Invalid date: {title}', @@ -830,11 +827,11 @@ export const getEuiContextMapping = (): EuiTokensObject => { 'core.euiInlineEditForm.saveButtonAriaLabel', { defaultMessage: 'Save edit' } ), - 'euiLink.external.ariaLabel': i18n.translate('core.euiLink.external.ariaLabel', { + 'euiExternalLinkIcon.ariaLabel': i18n.translate('core.euiExternalLinkIcon.ariaLabel', { defaultMessage: 'External link', }), - 'euiLink.newTarget.screenReaderOnlyText': i18n.translate( - 'core.euiLink.newTarget.screenReaderOnlyText', + 'euiExternalLinkIcon.newTarget.screenReaderOnlyText': i18n.translate( + 'core.euiExternalLinkIcon.newTarget.screenReaderOnlyText', { defaultMessage: '(opens in a new tab or window)', } diff --git a/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap b/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap index d5cbd1a0d408e..3abfdd59567f5 100644 --- a/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap +++ b/packages/kbn-unified-data-table/src/components/__snapshots__/data_table_columns.test.tsx.snap @@ -45,6 +45,17 @@ Array [ ], "display":
+
<> {timeFieldName} diff --git a/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx b/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx index 4f660009a232c..db6ed7680b0be 100644 --- a/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx +++ b/packages/kbn-unified-data-table/src/components/data_table_document_selection.tsx @@ -6,15 +6,13 @@ * Side Public License, v 1. */ import React, { useCallback, useContext, useEffect, useMemo, useState } from 'react'; -import classNames from 'classnames'; import { - EuiButtonEmpty, EuiCheckbox, EuiContextMenuItem, EuiContextMenuPanel, EuiCopy, EuiDataGridCellValueElementProps, - EuiNotificationBadge, + EuiDataGridToolbarControl, EuiPopover, EuiFlexGroup, EuiFlexItem, @@ -183,33 +181,20 @@ export function DataTableDocumentToolbarBtn({ isOpen={isSelectionPopoverOpen} panelPaddingSize="none" button={ - - - - - - - {selectedDocs.length} - - - + + } > {isSelectionPopoverOpen && } diff --git a/src/dev/license_checker/config.ts b/src/dev/license_checker/config.ts index db69bab07e1ea..0d0b59092746e 100644 --- a/src/dev/license_checker/config.ts +++ b/src/dev/license_checker/config.ts @@ -85,7 +85,7 @@ export const LICENSE_OVERRIDES = { 'jsts@1.6.2': ['Eclipse Distribution License - v 1.0'], // cf. https://github.com/bjornharrtell/jsts '@mapbox/jsonlint-lines-primitives@2.0.2': ['MIT'], // license in readme https://github.com/tmcw/jsonlint '@elastic/ems-client@8.5.1': ['Elastic License 2.0'], - '@elastic/eui@91.0.0-backport.0': ['SSPL-1.0 OR Elastic License 2.0'], + '@elastic/eui@91.3.1': ['SSPL-1.0 OR Elastic License 2.0'], 'language-subtag-registry@0.3.21': ['CC-BY-4.0'], // retired ODC‑By license https://github.com/mattcg/language-subtag-registry 'buffers@0.1.1': ['MIT'], // license in importing module https://www.npmjs.com/package/binary '@bufbuild/protobuf@1.2.1': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause) diff --git a/src/plugins/data/public/utils/table_inspector_view/components/download_options.tsx b/src/plugins/data/public/utils/table_inspector_view/components/download_options.tsx index 599de9e82c58c..ef03d9d9d251e 100644 --- a/src/plugins/data/public/utils/table_inspector_view/components/download_options.tsx +++ b/src/plugins/data/public/utils/table_inspector_view/components/download_options.tsx @@ -141,7 +141,7 @@ class DataDownloadOptions extends Component } - toolTipPosition="left" + toolTipProps={{ position: 'left' }} > } - toolTipPosition="left" + toolTipProps={{ position: 'left' }} > , diff --git a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/__snapshots__/url.test.tsx.snap b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/__snapshots__/url.test.tsx.snap index 3685144b15219..9959f3f97edd9 100644 --- a/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/__snapshots__/url.test.tsx.snap +++ b/src/plugins/data_view_field_editor/public/components/field_format_editor/editors/url/__snapshots__/url.test.tsx.snap @@ -179,13 +179,13 @@ exports[`UrlFormatEditor should render normally 1`] = ` URL template help External link (opens in a new tab or window) @@ -244,13 +244,13 @@ exports[`UrlFormatEditor should render normally 1`] = ` Label template help External link (opens in a new tab or window) diff --git a/src/plugins/discover/public/components/discover_grid/render_custom_toolbar.scss b/src/plugins/discover/public/components/discover_grid/render_custom_toolbar.scss index e24f7f8c6fcb1..66a3e9bb4f043 100644 --- a/src/plugins/discover/public/components/discover_grid/render_custom_toolbar.scss +++ b/src/plugins/discover/public/components/discover_grid/render_custom_toolbar.scss @@ -2,7 +2,7 @@ padding: $euiSizeS $euiSizeS $euiSizeXS; } -.dscGridToolbarControlButton .euiDataGrid__controlBtn { +.dscGridToolbarControlButton .euiDataGridToolbarControl { block-size: $euiSizeXL; border: $euiBorderThin; border-radius: $euiBorderRadiusSmall; @@ -13,10 +13,7 @@ block-size: $euiSize; } - // cancel default background and font changes - &.euiDataGrid__controlBtn--active { - font-weight: $euiFontWeightMedium; - } + // cancel default background changes &:active, &:focus { background: transparent; } diff --git a/src/plugins/inspector/public/ui/inspector_view_chooser.tsx b/src/plugins/inspector/public/ui/inspector_view_chooser.tsx index 454bd1917ffd1..d4621be61e73b 100644 --- a/src/plugins/inspector/public/ui/inspector_view_chooser.tsx +++ b/src/plugins/inspector/public/ui/inspector_view_chooser.tsx @@ -60,7 +60,7 @@ export class InspectorViewChooser extends Component { this.closeSelector(); }} toolTipContent={view.help} - toolTipPosition="left" + toolTipProps={{ position: 'left' }} data-test-subj={`inspectorViewChooser${view.title}`} > {view.title} diff --git a/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap b/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap index f1ee3dd03f3e5..829472941701c 100644 --- a/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap +++ b/src/plugins/saved_objects_management/public/management_section/object_view/components/__snapshots__/not_found_errors.test.tsx.snap @@ -35,13 +35,13 @@ exports[`NotFoundErrors component renders correctly for index-pattern type 1`] = > Saved objects APIs External link (opens in a new tab or window) @@ -87,13 +87,13 @@ exports[`NotFoundErrors component renders correctly for index-pattern-field type > Saved objects APIs External link (opens in a new tab or window) @@ -139,13 +139,13 @@ exports[`NotFoundErrors component renders correctly for search type 1`] = ` > Saved objects APIs External link (opens in a new tab or window) @@ -189,13 +189,13 @@ exports[`NotFoundErrors component renders correctly for unknown type 1`] = ` > Saved objects APIs External link (opens in a new tab or window) diff --git a/x-pack/packages/ml/data_grid/components/column_chart.tsx b/x-pack/packages/ml/data_grid/components/column_chart.tsx index 9f8b866bea930..7ebfb6ecaf5d4 100644 --- a/x-pack/packages/ml/data_grid/components/column_chart.tsx +++ b/x-pack/packages/ml/data_grid/components/column_chart.tsx @@ -6,40 +6,27 @@ */ import React, { type FC } from 'react'; -import { css } from '@emotion/react'; import { BarSeries, Chart, Settings, ScaleType, LEGACY_LIGHT_THEME } from '@elastic/charts'; -import { euiTextTruncate, type EuiDataGridColumn } from '@elastic/eui'; - -import { euiThemeVars } from '@kbn/ui-theme'; +import { mathWithUnits, type UseEuiTheme, type EuiDataGridColumn } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; import { isUnsupportedChartData, ChartData } from '../lib/field_histograms'; import { useColumnChart } from '../hooks/use_column_chart'; -const cssHistogram = css({ +const cssHistogram = ({ euiTheme }: UseEuiTheme) => ({ width: '100%', - height: `calc(${euiThemeVars.euiSizeXL} + ${euiThemeVars.euiSizeXXL})`, + height: mathWithUnits([euiTheme.size.xl, euiTheme.size.xxl], (x, y) => x + y), }); -const cssHistogramLegend = css([ - css` - ${euiTextTruncate()} - `, - { - color: euiThemeVars.euiColorMediumShade, - display: 'block', - overflowX: 'hidden', - margin: `${euiThemeVars.euiSizeXS} 0 0 0`, - fontSize: euiThemeVars.euiFontSizeXS, +const cssHistogramLegend = ({ euiTheme }: UseEuiTheme) => + ({ + color: euiTheme.colors.mediumShade, + marginTop: euiTheme.size.xs, fontStyle: 'italic', fontWeight: 'normal', - textAlign: 'left', - }, -]); - -const cssHistogramLegendNumeric = css([cssHistogramLegend, { textAlign: 'right' }]); + } as const); interface Props { chartData: ChartData; @@ -100,12 +87,17 @@ export const ColumnChart: FC = ({
)}
{legendText}
- {!hideLabel &&
{columnType.id}
} + {!hideLabel && ( +
+ {columnType.id} +
+ )}
); }; diff --git a/x-pack/packages/ml/data_grid/components/data_grid.tsx b/x-pack/packages/ml/data_grid/components/data_grid.tsx index d90fdc125e6cd..de0f7d8ee9a34 100644 --- a/x-pack/packages/ml/data_grid/components/data_grid.tsx +++ b/x-pack/packages/ml/data_grid/components/data_grid.tsx @@ -7,7 +7,6 @@ import { isEqual } from 'lodash'; import React, { memo, useEffect, useRef, FC } from 'react'; -import { css } from '@emotion/react'; import { EuiButtonEmpty, @@ -24,6 +23,8 @@ import { EuiSpacer, EuiTitle, EuiToolTip, + UseEuiTheme, + mathWithUnits, } from '@elastic/eui'; import { i18n } from '@kbn/i18n'; @@ -35,18 +36,49 @@ import { isPopulatedObject } from '@kbn/ml-is-populated-object'; import { euiDataGridStyle, euiDataGridToolbarSettings, INDEX_STATUS } from '../lib/common'; import { UseIndexDataReturnType } from '../lib/types'; -const cssOverride = css({ - '.euiDataGridRowCell--boolean': { textTransform: 'none' }, - // Overrides to align the sorting arrow, actions icon and the column header when no chart is available, - // to the bottom of the cell when histogram charts are enabled. - // Note that overrides have to be used as currently it is not possible to add a custom class name - // for the EuiDataGridHeaderCell - see https://github.com/elastic/eui/issues/5106 - '.euiDataGridHeaderCell': { - '.euiDataGridHeaderCell__sortingArrow,.euiDataGridHeaderCell__icon,.euiPopover': { - marginTop: 'auto', +const histogramHeaderProps = { className: 'cellHeaderWithHistogramChart' }; +const cssOverride = ({ euiTheme }: UseEuiTheme) => + ({ + '.euiDataGridRowCell--boolean': { textTransform: 'none' }, + // When a histogram chart is present in the column header, absolutely position + // the sorting arrow and actions icon so that the chart can expand to the full width + // of the header + '.cellHeaderWithHistogramChart': { + '.euiDataGridHeaderCell__content': { + width: '100%', + textAlign: 'left', // Should be overridden by EuiDataGrid's base CSS for numeric & currency schema + }, + '.euiDataGridHeaderCell__sortingArrow': { + position: 'absolute', + bottom: 0, + right: euiTheme.size.base, // Positioned to the left of the actions icon + // If the arrow is visible, ensure the icon is as well + '+ .euiPopover .euiDataGridHeaderCell__icon': { + width: 'auto', + opacity: '1', + }, + }, + '.euiDataGridHeaderCell__button > .euiPopover': { + position: 'absolute', + bottom: 0, + right: 0, + }, + // Re-apply cell icon affordances manually (due to absolute positioning) + '.histogramLabel': { + transition: `margin ${euiTheme.animation.fast} ease-in`, + }, + '&:hover, &:focus-within, &:has(.euiPopover-isOpen)': { + '.histogramLabel': { + marginRight: euiTheme.size.base, + }, + }, + '&:has(.euiDataGridHeaderCell__sortingArrow)': { + '.histogramLabel': { + marginRight: mathWithUnits([euiTheme.size.xl, euiTheme.size.xxs], (x, y) => x + y), + }, + }, }, - }, -}); + } as const); export const DataGridTitle: FC<{ title: string }> = ({ title }) => ( @@ -264,6 +296,7 @@ export const DataGrid: FC = memo( aria-label={isWithHeader(props) ? props.title : ''} columns={columnsWithCharts.map((c) => { c.initialWidth = 165; + if (chartsVisible) c.displayHeaderCellProps = histogramHeaderProps; return c; })} columnVisibility={{ visibleColumns, setVisibleColumns }} diff --git a/x-pack/packages/ml/data_grid/emotion.d.ts b/x-pack/packages/ml/data_grid/emotion.d.ts new file mode 100644 index 0000000000000..213178080e536 --- /dev/null +++ b/x-pack/packages/ml/data_grid/emotion.d.ts @@ -0,0 +1,14 @@ +/* + * Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one + * or more contributor license agreements. Licensed under the Elastic License + * 2.0; you may not use this file except in compliance with the Elastic License + * 2.0. + */ + +import '@emotion/react'; +import type { UseEuiTheme } from '@elastic/eui'; + +declare module '@emotion/react' { + // eslint-disable-next-line @typescript-eslint/no-empty-interface + export interface Theme extends UseEuiTheme {} +} diff --git a/x-pack/packages/ml/data_grid/tsconfig.json b/x-pack/packages/ml/data_grid/tsconfig.json index f074a13b25696..590cb613b7bf0 100644 --- a/x-pack/packages/ml/data_grid/tsconfig.json +++ b/x-pack/packages/ml/data_grid/tsconfig.json @@ -14,6 +14,7 @@ "include": [ "**/*.ts", "**/*.tsx", + "./emotion.d.ts", // Emotion EUI theme typing ], "exclude": [ "target/**/*" diff --git a/x-pack/packages/security-solution/data_table/components/data_table/index.tsx b/x-pack/packages/security-solution/data_table/components/data_table/index.tsx index 99f2f1006a309..3350263513099 100644 --- a/x-pack/packages/security-solution/data_table/components/data_table/index.tsx +++ b/x-pack/packages/security-solution/data_table/components/data_table/index.tsx @@ -118,14 +118,19 @@ const EuiDataGridContainer = styled.div<{ hideLastPage: boolean }>` ${({ hideLastPage }) => `${hideLastPage ? 'display:none' : ''}`}; } } - div .euiDataGridRowCell__contentWrapper { + div .euiDataGridRowCell { display: flex; align-items: center; } - div .euiDataGridRowCell--lastColumn .euiDataGridRowCell__content { - flex-grow: 0; + div .euiDataGridRowCell > [data-focus-lock-disabled] { + display: flex; + align-items: center; + flex-grow: 1; width: 100%; } + div .euiDataGridRowCell__content { + flex-grow: 1; + } div .siemEventsTable__trSupplement--summary { display: block; } diff --git a/x-pack/plugins/aiops/public/components/change_point_detection/fields_config.tsx b/x-pack/plugins/aiops/public/components/change_point_detection/fields_config.tsx index 0776bbba908a6..7429ad7ba9f0a 100644 --- a/x-pack/plugins/aiops/public/components/change_point_detection/fields_config.tsx +++ b/x-pack/plugins/aiops/public/components/change_point_detection/fields_config.tsx @@ -284,7 +284,7 @@ const FieldPanel: FC = ({ disabled: caseAttachmentButtonDisabled, ...(caseAttachmentButtonDisabled ? { - toolTipPosition: 'left' as const, + toolTipProps: { position: 'left' as const }, toolTipContent: i18n.translate( 'xpack.aiops.changePointDetection.attachToCaseTooltipContent', { diff --git a/x-pack/plugins/canvas/shareable_runtime/components/__snapshots__/app.test.tsx.snap b/x-pack/plugins/canvas/shareable_runtime/components/__snapshots__/app.test.tsx.snap index b661ee6e992e7..4b483b69445e8 100644 --- a/x-pack/plugins/canvas/shareable_runtime/components/__snapshots__/app.test.tsx.snap +++ b/x-pack/plugins/canvas/shareable_runtime/components/__snapshots__/app.test.tsx.snap @@ -1,3 +1,3 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[` App renders properly 1`] = `"
markdown mock
markdown mock

Page level controls

My Canvas Workpad

There is a new region landmark with page level controls at the end of the document.

"`; +exports[` App renders properly 1`] = `"
markdown mock
markdown mock

Page level controls

My Canvas Workpad

There is a new region landmark with page level controls at the end of the document.

"`; diff --git a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts index 7823698ebd5c8..fe16f8c98df7e 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts +++ b/x-pack/plugins/cloud_security_posture/public/components/cloud_security_data_table/use_styles.ts @@ -27,22 +27,26 @@ export const useStyles = () => { & .euiDataGrid--headerUnderline .euiDataGridHeaderCell { border-bottom: ${euiTheme.border.width.thick} solid ${euiTheme.colors.fullShade}; } - & .euiDataGridRowCell__contentByHeight + .euiDataGridRowCell__expandActions { - padding: 0; - } & .euiButtonIcon[data-test-subj='docTableExpandToggleColumn'] { color: ${euiTheme.colors.primary}; } & .euiDataGridRowCell { font-size: ${euiTheme.size.m}; - } - & .euiDataGridRowCell__expandFlex { - align-items: center; + + // Vertically center content + .euiDataGridRowCell__content { + display: flex; + align-items: center; + } } & .euiDataGridRowCell.euiDataGridRowCell--numeric { text-align: left; } + & .euiDataGridHeaderCell--numeric .euiDataGridHeaderCell__content { + flex-grow: 0; + text-align: left; + } & .euiDataGrid__controls { gap: ${euiTheme.size.s}; } @@ -55,7 +59,7 @@ export const useStyles = () => { font-size: ${euiTheme.size.m}; font-weight: ${euiTheme.font.weight.bold}; border-right: ${euiTheme.border.thin}; - margin-right: ${euiTheme.size.s}; + margin-inline: ${euiTheme.size.s}; padding-right: ${euiTheme.size.m}; } & .euiDataGrid__rightControls { diff --git a/x-pack/plugins/cloud_security_posture/public/components/timestamp_table_cell.tsx b/x-pack/plugins/cloud_security_posture/public/components/timestamp_table_cell.tsx index 49932d6cf0de3..9b0d8f720dbfb 100644 --- a/x-pack/plugins/cloud_security_posture/public/components/timestamp_table_cell.tsx +++ b/x-pack/plugins/cloud_security_posture/public/components/timestamp_table_cell.tsx @@ -7,11 +7,23 @@ import React from 'react'; import moment, { type MomentInput } from 'moment'; +import { css } from '@emotion/react'; import { EuiToolTip } from '@elastic/eui'; import { CSP_MOMENT_FORMAT } from '../common/constants'; +// Offset top-aligned tooltips so that cell actions are visible +const datagridToolTipOffset = css` + &[data-position='top'] { + margin-block-start: -8px; + } +`; + export const TimestampTableCell = ({ timestamp }: { timestamp: MomentInput }) => ( - + {moment(timestamp).fromNow()} ); diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_styles.ts b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_styles.ts index 9a353da63e058..c09490d719f1f 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_styles.ts +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/hooks/use_styles.ts @@ -45,21 +45,24 @@ export const useStyles = () => { } & .euiDataGridRowCell { font-size: ${euiTheme.size.m}; + + // Vertically center content + .euiDataGridRowCell__content { + display: flex; + align-items: center; + } } - & .euiDataGridRowCell__actions > [data-test-subj='euiDataGridCellExpandButton'] { + /* EUI QUESTION: Why is this being done via CSS instead of setting isExpandable: false in the columns API? */ + & .euiDataGridRowCell__actions > .euiDataGridRowCell__expandCell { display: none; } - & .euiDataGridRowCell__actions--overlay { - padding: 0; - } - - & .euiDataGridRowCell__contentWrapper { - display: flex; - align-items: center; - } & .euiDataGridRowCell.euiDataGridRowCell--numeric { text-align: left; } + & .euiDataGridHeaderCell--numeric .euiDataGridHeaderCell__content { + flex-grow: 0; + text-align: left; + } `; const highlightStyle = css` diff --git a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_by_resource/severity_map.tsx b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_by_resource/severity_map.tsx index af47c20ddc50f..78e5513271441 100644 --- a/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_by_resource/severity_map.tsx +++ b/x-pack/plugins/cloud_security_posture/public/pages/vulnerabilities/vulnerabilities_by_resource/severity_map.tsx @@ -88,6 +88,7 @@ export const SeverityMap = ({ severityMap, total }: Props) => { `} anchorClassName={css` height: ${euiTheme.size.xl}; + flex-grow: 1; display: flex; align-items: center; `} diff --git a/x-pack/plugins/index_lifecycle_management/__jest__/__snapshots__/extend_index_management.test.tsx.snap b/x-pack/plugins/index_lifecycle_management/__jest__/__snapshots__/extend_index_management.test.tsx.snap index 3a85403c5649a..219c054709354 100644 --- a/x-pack/plugins/index_lifecycle_management/__jest__/__snapshots__/extend_index_management.test.tsx.snap +++ b/x-pack/plugins/index_lifecycle_management/__jest__/__snapshots__/extend_index_management.test.tsx.snap @@ -130,13 +130,13 @@ exports[`extend index management ilm summary extension should render a phase def > Edit policy in ILM External link (opens in a new tab or window) @@ -301,13 +301,13 @@ exports[`extend index management ilm summary extension should render a step info > Edit policy in ILM External link (opens in a new tab or window) @@ -468,13 +468,13 @@ exports[`extend index management ilm summary extension should render an error pa > Edit policy in ILM External link (opens in a new tab or window) @@ -636,13 +636,13 @@ exports[`extend index management ilm summary extension should render the tab whe > Edit policy in ILM External link (opens in a new tab or window) diff --git a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_dropdown.tsx b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_dropdown.tsx index bb2dbc7afdc36..6e3e72c5cc8de 100644 --- a/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_dropdown.tsx +++ b/x-pack/plugins/infra/public/alerting/log_threshold/components/alert_dropdown.tsx @@ -85,13 +85,13 @@ export const AlertDropdown = () => { : inlineLogViewTooltipContent : undefined } - toolTipTitle={ - !canCreateAlerts + toolTipProps={{ + title: !canCreateAlerts ? readOnly ? readOnlyUserTooltipTitle : inlineLogViewTooltipTitle - : undefined - } + : undefined, + }} > = ({ }} textProps={{ ...textProps, - className: classNames('kbnToolbarButton__text', textProps?.className), + className: classNames('kbnToolbarButton__text', textProps && textProps.className), }} {...rest} size={size} diff --git a/x-pack/plugins/license_management/__jest__/__snapshots__/request_trial_extension.test.js.snap b/x-pack/plugins/license_management/__jest__/__snapshots__/request_trial_extension.test.js.snap index db99b1a10ea8d..9456222eca7aa 100644 --- a/x-pack/plugins/license_management/__jest__/__snapshots__/request_trial_extension.test.js.snap +++ b/x-pack/plugins/license_management/__jest__/__snapshots__/request_trial_extension.test.js.snap @@ -38,13 +38,13 @@ exports[`RequestTrialExtension component should display when enterprise license > subscription features External link (opens in a new tab or window) @@ -114,13 +114,13 @@ exports[`RequestTrialExtension component should display when license is active a > subscription features External link (opens in a new tab or window) @@ -190,13 +190,13 @@ exports[`RequestTrialExtension component should display when license is not acti > subscription features External link (opens in a new tab or window) @@ -266,13 +266,13 @@ exports[`RequestTrialExtension component should display when platinum license is > subscription features External link (opens in a new tab or window) diff --git a/x-pack/plugins/license_management/__jest__/__snapshots__/revert_to_basic.test.js.snap b/x-pack/plugins/license_management/__jest__/__snapshots__/revert_to_basic.test.js.snap index af9fc4be3f0d0..f1e5a50a309c8 100644 --- a/x-pack/plugins/license_management/__jest__/__snapshots__/revert_to_basic.test.js.snap +++ b/x-pack/plugins/license_management/__jest__/__snapshots__/revert_to_basic.test.js.snap @@ -38,13 +38,13 @@ exports[`RevertToBasic component should display when license is about to expire > subscription features External link (opens in a new tab or window) @@ -112,13 +112,13 @@ exports[`RevertToBasic component should display when license is expired 1`] = ` > subscription features External link (opens in a new tab or window) @@ -186,13 +186,13 @@ exports[`RevertToBasic component should display when trial is active 1`] = ` > subscription features External link (opens in a new tab or window) diff --git a/x-pack/plugins/license_management/__jest__/__snapshots__/start_trial.test.js.snap b/x-pack/plugins/license_management/__jest__/__snapshots__/start_trial.test.js.snap index 9d32a3925f852..64221ba1d1d5c 100644 --- a/x-pack/plugins/license_management/__jest__/__snapshots__/start_trial.test.js.snap +++ b/x-pack/plugins/license_management/__jest__/__snapshots__/start_trial.test.js.snap @@ -38,13 +38,13 @@ exports[`StartTrial component when trial is allowed display for basic license 1` > subscription features External link (opens in a new tab or window) @@ -112,13 +112,13 @@ exports[`StartTrial component when trial is allowed should display for expired e > subscription features External link (opens in a new tab or window) @@ -186,13 +186,13 @@ exports[`StartTrial component when trial is allowed should display for expired p > subscription features External link (opens in a new tab or window) @@ -260,13 +260,13 @@ exports[`StartTrial component when trial is allowed should display for gold lice > subscription features External link (opens in a new tab or window) diff --git a/x-pack/plugins/monitoring/public/components/no_data/explanations/exporters/__snapshots__/exporters.test.js.snap b/x-pack/plugins/monitoring/public/components/no_data/explanations/exporters/__snapshots__/exporters.test.js.snap index dc54838631c06..b987170ab6e10 100644 --- a/x-pack/plugins/monitoring/public/components/no_data/explanations/exporters/__snapshots__/exporters.test.js.snap +++ b/x-pack/plugins/monitoring/public/components/no_data/explanations/exporters/__snapshots__/exporters.test.js.snap @@ -87,13 +87,13 @@ Array [ > Elasticsearch Service Console External link (opens in a new tab or window) @@ -107,13 +107,13 @@ Array [ > Logs and metrics External link (opens in a new tab or window) @@ -127,13 +127,13 @@ Array [ > the documentation page. External link (opens in a new tab or window) diff --git a/x-pack/plugins/monitoring/public/components/no_data/reasons/__snapshots__/reason_found.test.js.snap b/x-pack/plugins/monitoring/public/components/no_data/reasons/__snapshots__/reason_found.test.js.snap index f0a62472dde83..029a2ebf190d3 100644 --- a/x-pack/plugins/monitoring/public/components/no_data/reasons/__snapshots__/reason_found.test.js.snap +++ b/x-pack/plugins/monitoring/public/components/no_data/reasons/__snapshots__/reason_found.test.js.snap @@ -154,13 +154,13 @@ Array [ > Elasticsearch Service Console External link (opens in a new tab or window) @@ -174,13 +174,13 @@ Array [ > Logs and metrics External link (opens in a new tab or window) @@ -194,13 +194,13 @@ Array [ > the documentation page. External link (opens in a new tab or window) diff --git a/x-pack/plugins/osquery/cypress/screens/live_query.ts b/x-pack/plugins/osquery/cypress/screens/live_query.ts index 04c56fbce44c7..f850cbf9538ad 100644 --- a/x-pack/plugins/osquery/cypress/screens/live_query.ts +++ b/x-pack/plugins/osquery/cypress/screens/live_query.ts @@ -14,6 +14,7 @@ export const SUBMIT_BUTTON = '#submit-button'; export const RESULTS_TABLE = 'osqueryResultsTable'; export const RESULTS_TABLE_BUTTON = 'dataGridFullScreenButton'; +export const RESULTS_TABLE_COLUMNS_BUTTON = 'dataGridColumnSelectorButton'; export const RESULTS_TABLE_CELL_WRRAPER = 'EuiDataGridHeaderCellWrapper'; export const getIdFormField = () => cy.get('input[name="id"]'); diff --git a/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts b/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts index b01effba17e65..4b0e40e577674 100644 --- a/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts +++ b/x-pack/plugins/osquery/cypress/tasks/saved_queries.ts @@ -5,7 +5,7 @@ * 2.0. */ -import { RESULTS_TABLE_BUTTON } from '../screens/live_query'; +import { RESULTS_TABLE_BUTTON, RESULTS_TABLE_COLUMNS_BUTTON } from '../screens/live_query'; import { closeToastIfVisible, generateRandomStringName } from './integrations'; import { checkResults, @@ -45,7 +45,7 @@ export const getSavedQueriesComplexTest = () => cy.contains('Exit fullscreen').should('exist'); // hidden columns - cy.contains('columns hidden').should('not.exist'); + cy.getBySel(RESULTS_TABLE_COLUMNS_BUTTON).should('have.text', 'Columns35'); cy.getBySel('dataGridHeaderCell-osquery.cmdline').click(); cy.contains(/Hide column$/).click(); cy.getBySel('dataGridHeaderCell-osquery.cwd').click(); @@ -54,10 +54,10 @@ export const getSavedQueriesComplexTest = () => cy.getBySel('dataGridHeaderCell-osquery.disk_bytes_written.number').click(); cy.contains(/Hide column$/).click(); - cy.contains('columns hidden').should('exist'); + cy.getBySel(RESULTS_TABLE_COLUMNS_BUTTON).should('have.text', 'Columns32/35'); // change pagination cy.getBySel('pagination-button-next').click().wait(500).click(); - cy.contains('columns hidden').should('exist'); + cy.getBySel(RESULTS_TABLE_COLUMNS_BUTTON).should('have.text', 'Columns32/35'); // enter fullscreen cy.getBySel(RESULTS_TABLE_BUTTON).trigger('mouseover'); @@ -69,7 +69,7 @@ export const getSavedQueriesComplexTest = () => cy.getBySel('dataGridHeaderCell-osquery.egid').click(); cy.contains(/Sort A-Z$/).click(); - cy.contains('columns hidden').should('exist'); + cy.getBySel(RESULTS_TABLE_COLUMNS_BUTTON).should('have.text', 'Columns32/35'); cy.getBySel(RESULTS_TABLE_BUTTON).trigger('mouseover'); cy.contains(/Enter fullscreen$/).should('exist'); diff --git a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap index 8eaa66ee35be9..f24357ae373fa 100644 --- a/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap +++ b/x-pack/plugins/security/server/__snapshots__/prompt_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

Some Title

Some Body
Action#1
Action#2
"`; +exports[`PromptPage renders as expected with additional scripts 1`] = `"ElasticMockedFonts

Some Title

Some Body
Action#1
Action#2
"`; -exports[`PromptPage renders as expected without additional scripts 1`] = `"ElasticMockedFonts

Some Title

Some Body
Action#1
Action#2
"`; +exports[`PromptPage renders as expected without additional scripts 1`] = `"ElasticMockedFonts

Some Title

Some Body
Action#1
Action#2
"`; diff --git a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap index d7be0e5f720a5..fb377c8a0b924 100644 --- a/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authentication/__snapshots__/unauthenticated_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; +exports[`UnauthenticatedPage renders as expected 1`] = `"ElasticMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; -exports[`UnauthenticatedPage renders as expected with custom title 1`] = `"My Company NameMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; +exports[`UnauthenticatedPage renders as expected with custom title 1`] = `"My Company NameMockedFonts

We hit an authentication error

Try logging in again, and if the problem persists, contact your system administrator.

"`; diff --git a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap index f66f33000de55..0146a55a9970e 100644 --- a/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap +++ b/x-pack/plugins/security/server/authorization/__snapshots__/reset_session_page.test.tsx.snap @@ -1,5 +1,5 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; +exports[`ResetSessionPage renders as expected 1`] = `"ElasticMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; -exports[`ResetSessionPage renders as expected with custom page title 1`] = `"My Company NameMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; +exports[`ResetSessionPage renders as expected with custom page title 1`] = `"My Company NameMockedFonts

You do not have permission to access the requested page

Either go back to the previous page or log in as a different user.

"`; diff --git a/x-pack/plugins/security_solution/public/common/components/formatted_date/index.tsx b/x-pack/plugins/security_solution/public/common/components/formatted_date/index.tsx index bf7fd230fbfc4..25b7bec640198 100644 --- a/x-pack/plugins/security_solution/public/common/components/formatted_date/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/formatted_date/index.tsx @@ -8,6 +8,7 @@ import moment from 'moment-timezone'; import React from 'react'; import { FormattedRelative } from '@kbn/i18n-react'; +import type { EuiToolTipProps } from '@elastic/eui'; import { useDateFormat, useTimeZone, useUiSetting$ } from '../../lib/kibana'; import { getOrEmptyTagFromValue } from '../empty_value'; @@ -98,16 +99,22 @@ interface FormattedDateProps { fieldName: string; value?: string | number | null; dateFormat?: string; + tooltipProps?: Partial; } export const FormattedDate = React.memo( - ({ value, fieldName, className = '', dateFormat }): JSX.Element => { + ({ value, fieldName, className = '', dateFormat, tooltipProps }): JSX.Element => { if (value == null) { return getOrEmptyTagFromValue(value); } const maybeDate = getMaybeDate(value); return maybeDate.isValid() ? ( - + ) : ( diff --git a/x-pack/plugins/security_solution/public/common/components/localized_date_tooltip/index.tsx b/x-pack/plugins/security_solution/public/common/components/localized_date_tooltip/index.tsx index 34825dfa5ae9d..8f4ed4d34f5c5 100644 --- a/x-pack/plugins/security_solution/public/common/components/localized_date_tooltip/index.tsx +++ b/x-pack/plugins/security_solution/public/common/components/localized_date_tooltip/index.tsx @@ -5,7 +5,7 @@ * 2.0. */ -import { EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; +import { EuiFlexGroup, EuiFlexItem, EuiToolTip, type EuiToolTipProps } from '@elastic/eui'; import { FormattedRelative } from '@kbn/i18n-react'; import moment from 'moment'; import React from 'react'; @@ -15,10 +15,12 @@ export const LocalizedDateTooltip = React.memo<{ date: Date; fieldName?: string; className?: string; -}>(({ children, date, fieldName, className = '' }) => ( + tooltipProps?: Partial; +}>(({ children, date, fieldName, className = '', tooltipProps }) => ( {fieldName != null ? ( diff --git a/x-pack/plugins/security_solution/public/common/components/top_n/top_n.tsx b/x-pack/plugins/security_solution/public/common/components/top_n/top_n.tsx index a93c3fd386382..0dbd55b9bae34 100644 --- a/x-pack/plugins/security_solution/public/common/components/top_n/top_n.tsx +++ b/x-pack/plugins/security_solution/public/common/components/top_n/top_n.tsx @@ -31,7 +31,7 @@ const CloseButton = styled(EuiButtonIcon)` top: 4px; `; -const ViewSelect = styled(EuiSuperSelect)` +const ViewSelect = styled(EuiSuperSelect)` width: 170px; `; diff --git a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx index 41802a4738b8d..d66f1b45feb9a 100644 --- a/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx +++ b/x-pack/plugins/security_solution/public/detection_engine/rule_management_ui/components/rules_table/bulk_actions/use_bulk_actions.tsx @@ -299,7 +299,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, icon: undefined, }, { @@ -311,7 +311,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, icon: undefined, }, { @@ -337,7 +337,7 @@ export const useBulkActions = ({ toolTipContent: !hasActionsPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, icon: undefined, }, { @@ -349,7 +349,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, icon: undefined, }, { @@ -361,7 +361,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, icon: undefined, }, { @@ -382,7 +382,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, icon: undefined, }, { @@ -397,7 +397,7 @@ export const useBulkActions = ({ 'data-test-subj': 'deleteRuleBulk', disabled: isDeleteDisabled, onClick: handleDeleteAction, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, icon: undefined, }, ], @@ -415,7 +415,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, }, { key: i18n.BULK_ACTION_DELETE_TAGS, @@ -426,7 +426,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, }, ], }, @@ -443,7 +443,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, }, { key: i18n.BULK_ACTION_DELETE_INDEX_PATTERNS, @@ -454,7 +454,7 @@ export const useBulkActions = ({ toolTipContent: missingActionPrivileges ? i18n.LACK_OF_KIBANA_ACTIONS_FEATURE_PRIVILEGES : undefined, - toolTipPosition: 'right', + toolTipProps: { position: 'right' }, }, ], }, diff --git a/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx b/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx index 97d86deed7a48..e8ea06867c92a 100644 --- a/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx +++ b/x-pack/plugins/security_solution/public/detections/components/alerts_table/index.tsx @@ -71,15 +71,18 @@ const EuiDataGridContainer = styled.div` }}; } } - div .euiDataGridRowCell__contentWrapper { + div .euiDataGridRowCell { display: flex; align-items: center; } - div .euiDataGridRowCell__content { + div .euiDataGridRowCell > [data-focus-lock-disabled] { + display: flex; + align-items: center; + flex-grow: 1; width: 100%; } - div .euiDataGridRowCell--lastColumn .euiDataGridRowCell__content { - flex-grow: 0; + div .euiDataGridRowCell__content { + flex-grow: 1; } div .siemEventsTable__trSupplement--summary { display: block; diff --git a/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/list/policy_artifacts_list.tsx b/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/list/policy_artifacts_list.tsx index 22ddd31391977..861e407e80824 100644 --- a/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/list/policy_artifacts_list.tsx +++ b/x-pack/plugins/security_solution/public/management/pages/policy/view/artifacts/list/policy_artifacts_list.tsx @@ -144,7 +144,7 @@ export const PolicyArtifactsList = React.memo( }, disabled: isGlobal, toolTipContent: isGlobal ? labels.listRemoveActionNotAllowedMessage : undefined, - toolTipPosition: 'top' as const, + toolTipProps: { position: 'top' as const }, 'data-test-subj': 'remove-from-policy-action', }; return { diff --git a/x-pack/plugins/security_solution/public/timelines/components/field_renderers/__snapshots__/field_renderers.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/field_renderers/__snapshots__/field_renderers.test.tsx.snap index 2f11cdf57c3a6..270ca0c6c54b7 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/field_renderers/__snapshots__/field_renderers.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/field_renderers/__snapshots__/field_renderers.test.tsx.snap @@ -284,13 +284,13 @@ exports[`Field Renderers #whoisRenderer it renders correctly against snapshot 1` > iana.org External link (opens in a new tab or window) diff --git a/x-pack/plugins/security_solution/public/timelines/components/netflow/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/netflow/__snapshots__/index.test.tsx.snap index 919d237027815..5b4bb5021a66e 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/netflow/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/netflow/__snapshots__/index.test.tsx.snap @@ -1118,13 +1118,13 @@ tr:hover .c2:focus::before { > 9987 External link (opens in a new tab or window) @@ -1957,13 +1957,13 @@ tr:hover .c2:focus::before { > 80 External link (opens in a new tab or window) @@ -2406,13 +2406,13 @@ tr:hover .c2:focus::before { > tls.fingerprints.ja3.hash-value External link (opens in a new tab or window) @@ -2504,13 +2504,13 @@ tr:hover .c2:focus::before { > tls.client_certificate.fingerprint.sha1-value External link (opens in a new tab or window) @@ -2602,13 +2602,13 @@ tr:hover .c2:focus::before { > tls.server_certificate.fingerprint.sha1-value External link (opens in a new tab or window) diff --git a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx index 91d865960c813..33d9b66f4d6c6 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/open_timeline/index.test.tsx @@ -389,8 +389,11 @@ describe('StatefulOpenTimeline', () => { /> ); - wrapper.find('[data-test-subj="euiCollapsedItemActionsButton"]').first().simulate('click'); - wrapper.find('[data-test-subj="delete-timeline"]').first().simulate('click'); + wrapper + .find('button[data-test-subj="euiCollapsedItemActionsButton"]') + .first() + .simulate('click'); + wrapper.find('button[data-test-subj="delete-timeline"]').first().simulate('click'); wrapper.find('button[data-test-subj="confirmModalConfirmButton"]').first().simulate('click'); await waitFor(() => { @@ -666,16 +669,16 @@ describe('StatefulOpenTimeline', () => { /> ); - wrapper.find('[data-test-subj="euiCollapsedItemActionsButton"]').first().simulate('click'); - wrapper.find('[data-test-subj="open-duplicate"]').first().simulate('click'); - await waitFor(() => { - wrapper.update(); - - expect((queryTimelineById as jest.Mock).mock.calls[0][0].timelineId).toEqual( - mockOpenTimelineQueryResults.timeline[0].savedObjectId - ); - expect((queryTimelineById as jest.Mock).mock.calls[0][0].duplicate).toEqual(true); - }); + wrapper + .find('button[data-test-subj="euiCollapsedItemActionsButton"]') + .first() + .simulate('click'); + wrapper.find('button[data-test-subj="open-duplicate"]').first().simulate('click'); + + expect((queryTimelineById as jest.Mock).mock.calls[0][0].timelineId).toEqual( + mockOpenTimelineQueryResults.timeline[0].savedObjectId + ); + expect((queryTimelineById as jest.Mock).mock.calls[0][0].duplicate).toEqual(true); }); describe('Create rule from timeline', () => { diff --git a/x-pack/plugins/security_solution/public/timelines/components/side_panel/__snapshots__/index.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/side_panel/__snapshots__/index.test.tsx.snap index 8475b548dd795..463e4a1e2f57a 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/side_panel/__snapshots__/index.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/side_panel/__snapshots__/index.test.tsx.snap @@ -855,13 +855,13 @@ exports[`Details Panel Component DetailsPanel:NetworkDetails: rendering it shoul > iana.org External link (opens in a new tab or window) diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx index ce785cd7b20cb..7062fc7afbb78 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/formatted_field.tsx @@ -11,6 +11,7 @@ import type { EuiButtonEmpty, EuiButtonIcon } from '@elastic/eui'; import { EuiFlexGroup, EuiFlexItem, EuiToolTip } from '@elastic/eui'; import { isNumber, isEmpty } from 'lodash/fp'; import React from 'react'; +import { css } from '@emotion/css'; import { SENTINEL_ONE_AGENT_ID_FIELD } from '../../../../../common/utils/sentinelone_alert_check'; import { SentinelOneAgentStatus } from '../../../../../detections/components/host_isolation/sentinel_one_agent_status'; @@ -48,6 +49,13 @@ import { UserName } from './user_name'; // simple black-list to prevent dragging and dropping fields such as message name const columnNamesNotDraggable = [MESSAGE_FIELD_NAME]; +// Offset top-aligned tooltips so that cell actions are more visible +const dataGridToolTipOffset = css` + &[data-position='top'] { + margin-block-start: -8px; + } +`; + const FormattedFieldValueComponent: React.FC<{ asPlainText?: boolean; /** `Component` is only used with `EuiDataGrid`; the grid keeps a reference to `Component` for show / hide functionality */ @@ -109,6 +117,14 @@ const FormattedFieldValueComponent: React.FC<{ return <>{value}; } else if (fieldType === DATE_FIELD_TYPE) { const classNames = truncate ? 'eui-textTruncate eui-alignMiddle' : undefined; + const date = ( + + ); return isDraggable ? ( - + {date} ) : ( - + date ); } else if (PORT_NAMES.some((portName) => fieldName === portName)) { return ( @@ -274,6 +290,8 @@ const FormattedFieldValueComponent: React.FC<{ diff --git a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/netflow/__snapshots__/netflow_row_renderer.test.tsx.snap b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/netflow/__snapshots__/netflow_row_renderer.test.tsx.snap index 803a4f84552f2..627b209f0fdbe 100644 --- a/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/netflow/__snapshots__/netflow_row_renderer.test.tsx.snap +++ b/x-pack/plugins/security_solution/public/timelines/components/timeline/body/renderers/netflow/__snapshots__/netflow_row_renderer.test.tsx.snap @@ -1309,13 +1309,13 @@ tr:hover .c4:focus::before { > 9987 External link (opens in a new tab or window) @@ -2309,13 +2309,13 @@ tr:hover .c4:focus::before { > 80 External link (opens in a new tab or window) @@ -2827,13 +2827,13 @@ tr:hover .c4:focus::before { > tls.fingerprints.ja3.hash-value External link (opens in a new tab or window) @@ -2935,13 +2935,13 @@ tr:hover .c4:focus::before { > tls.client_certificate.fingerprint.sha1-value External link (opens in a new tab or window) @@ -3043,13 +3043,13 @@ tr:hover .c4:focus::before { > tls.server_certificate.fingerprint.sha1-value External link (opens in a new tab or window) diff --git a/x-pack/plugins/serverless_search/public/application/components/connectors_callout.tsx b/x-pack/plugins/serverless_search/public/application/components/connectors_callout.tsx index 85d3db211c479..f321330eda294 100644 --- a/x-pack/plugins/serverless_search/public/application/components/connectors_callout.tsx +++ b/x-pack/plugins/serverless_search/public/application/components/connectors_callout.tsx @@ -55,19 +55,17 @@ export const ConnectorsCallout = () => {

-

- createConnector()} - isLoading={isLoading} - > - {i18n.translate('xpack.serverlessSearch.selectClient.connectorsCallout.cta', { - defaultMessage: 'Create a connector', - })} - -

+ createConnector()} + isLoading={isLoading} + > + {i18n.translate('xpack.serverlessSearch.selectClient.connectorsCallout.cta', { + defaultMessage: 'Create a connector', + })} +
{showConnectors && @@ -85,14 +83,12 @@ export const ConnectorsCallout = () => { ))} {showConnectors && ( -

- - - -

+ + +
)}
diff --git a/x-pack/plugins/translations/translations/fr-FR.json b/x-pack/plugins/translations/translations/fr-FR.json index 495bf957ea490..bf8aef96fcb4f 100644 --- a/x-pack/plugins/translations/translations/fr-FR.json +++ b/x-pack/plugins/translations/translations/fr-FR.json @@ -564,9 +564,6 @@ "core.euiCodeBlockAnnotations.ariaLabel": "Cliquez pour afficher une annotation de code pour la ligne {lineNumber}", "core.euiColorPickerSwatch.ariaLabel": "Sélectionner {color} comme couleur", "core.euiColumnActions.sort": "Trier {schemaLabel}", - "core.euiColumnSelector.buttonActivePlural": "{numberOfHiddenFields} colonnes masquées", - "core.euiColumnSelector.buttonActiveSingular": "{numberOfHiddenFields} colonne masquée", - "core.euiColumnSorting.buttonActive": "{numberOfSortedFields, plural, one {Champ #} many {# champs} other {# champs triés}}", "core.euiColumnSortingDraggable.activeSortLabel": "{display} trie cette grille de données", "core.euiColumnSortingDraggable.removeSortLabel": "Retirer {display} du tri de la grille de données", "core.euiColumnSortingDraggable.toggleLegend": "Sélectionner la méthode de tri pour {display}", @@ -819,8 +816,6 @@ "core.euiKeyboardShortcuts.title": "Raccourcis clavier", "core.euiKeyboardShortcuts.upArrowDescription": "Aller une cellule vers le haut", "core.euiKeyboardShortcuts.upArrowTitle": "Flèche vers le haut", - "core.euiLink.external.ariaLabel": "Lien externe", - "core.euiLink.newTarget.screenReaderOnlyText": "(s’ouvre dans un nouvel onglet ou une nouvelle fenêtre)", "core.euiLoadingChart.ariaLabel": "Chargement", "core.euiLoadingStrings.ariaLabel": "Chargement", "core.euiMark.highlightEnd": "mettre la fin en surbrillance", diff --git a/x-pack/plugins/translations/translations/ja-JP.json b/x-pack/plugins/translations/translations/ja-JP.json index f7b993b853889..d159282232345 100644 --- a/x-pack/plugins/translations/translations/ja-JP.json +++ b/x-pack/plugins/translations/translations/ja-JP.json @@ -564,9 +564,6 @@ "core.euiCodeBlockAnnotations.ariaLabel": "クリックすると、行番号{lineNumber}のコード注釈が表示されます", "core.euiColorPickerSwatch.ariaLabel": "{color}を色として選択します", "core.euiColumnActions.sort": "{schemaLabel}の並べ替え", - "core.euiColumnSelector.buttonActivePlural": "{numberOfHiddenFields}列が非表示です", - "core.euiColumnSelector.buttonActiveSingular": "{numberOfHiddenFields}列が非表示です", - "core.euiColumnSorting.buttonActive": "{numberOfSortedFields, plural, other {#個のフィールド}}が並べ替えられました", "core.euiColumnSortingDraggable.activeSortLabel": "{display}はこのデータグリッドを並べ替えています", "core.euiColumnSortingDraggable.removeSortLabel": "データグリッドの並べ替えから{display}を削除", "core.euiColumnSortingDraggable.toggleLegend": "{display}の並べ替え方法を選択", @@ -833,8 +830,6 @@ "core.euiKeyboardShortcuts.title": "キーボードショートカット", "core.euiKeyboardShortcuts.upArrowDescription": "セルを1つ上に移動", "core.euiKeyboardShortcuts.upArrowTitle": "上向き矢印", - "core.euiLink.external.ariaLabel": "外部リンク", - "core.euiLink.newTarget.screenReaderOnlyText": "(新しいタブまたはウィンドウで開く)", "core.euiLoadingChart.ariaLabel": "読み込み中", "core.euiLoadingStrings.ariaLabel": "読み込み中", "core.euiMark.highlightEnd": "ハイライト終了", diff --git a/x-pack/plugins/translations/translations/zh-CN.json b/x-pack/plugins/translations/translations/zh-CN.json index ea83c57f02b27..0629f497ff743 100644 --- a/x-pack/plugins/translations/translations/zh-CN.json +++ b/x-pack/plugins/translations/translations/zh-CN.json @@ -564,9 +564,6 @@ "core.euiCodeBlockAnnotations.ariaLabel": "单击以查看行 {lineNumber} 的代码注释", "core.euiColorPickerSwatch.ariaLabel": "将 {color} 选为颜色", "core.euiColumnActions.sort": "排序 {schemaLabel}", - "core.euiColumnSelector.buttonActivePlural": "{numberOfHiddenFields} 列已隐藏", - "core.euiColumnSelector.buttonActiveSingular": "{numberOfHiddenFields} 列已隐藏", - "core.euiColumnSorting.buttonActive": "{numberOfSortedFields, plural, other {# 个字段}}已排序", "core.euiColumnSortingDraggable.activeSortLabel": "{display} 正在排序此数据网格", "core.euiColumnSortingDraggable.removeSortLabel": "从数据网格排序中移除 {display}", "core.euiColumnSortingDraggable.toggleLegend": "为 {display} 选择排序方法", @@ -833,8 +830,6 @@ "core.euiKeyboardShortcuts.title": "快捷键", "core.euiKeyboardShortcuts.upArrowDescription": "上移一个单元格", "core.euiKeyboardShortcuts.upArrowTitle": "向上箭头键", - "core.euiLink.external.ariaLabel": "外部链接", - "core.euiLink.newTarget.screenReaderOnlyText": "(在新选项卡或窗口中打开)", "core.euiLoadingChart.ariaLabel": "正在加载", "core.euiLoadingStrings.ariaLabel": "正在加载", "core.euiMark.highlightEnd": "高亮显示结尾", diff --git a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_column_selector.test.tsx b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_column_selector.test.tsx index 60f52930ffe91..ad623631fe85e 100644 --- a/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_column_selector.test.tsx +++ b/x-pack/plugins/triggers_actions_ui/public/application/sections/rules_list/components/rules_list_column_selector.test.tsx @@ -108,8 +108,8 @@ describe('useRulesListColumnSelector', () => { { field: 'schedule.interval', name: 'Interval' }, ]); - const { getByText } = render(<>{ColumnSelector}); - expect(getByText('1 column hidden')).toBeInTheDocument(); + const { getByLabelText } = render(<>{ColumnSelector}); + expect(getByLabelText('- Active: 5 out of 6')).toBeInTheDocument(); }); it('Lets hide last lastExecutionDate, Interval and duration columns', () => { @@ -127,7 +127,7 @@ describe('useRulesListColumnSelector', () => { { field: 'notify', name: 'Html Notify' }, ]); - const { getByText } = render(<>{ColumnSelector}); - expect(getByText('3 columns hidden')).toBeInTheDocument(); + const { getByLabelText } = render(<>{ColumnSelector}); + expect(getByLabelText('- Active: 3 out of 6')).toBeInTheDocument(); }); }); diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap index 60462feb48cab..b4b7a53c69909 100644 --- a/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/ping_list/__snapshots__/expanded_row.test.tsx.snap @@ -178,13 +178,13 @@ exports[`PingListExpandedRow renders link to docs if body is not recorded but it > docs External link (opens in a new tab or window) diff --git a/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/monitor_status.bar.test.tsx.snap b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/monitor_status.bar.test.tsx.snap index 8a4e0915d4fa3..cae02bf400e2d 100644 --- a/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/monitor_status.bar.test.tsx.snap +++ b/x-pack/plugins/uptime/public/legacy_uptime/components/monitor/status_details/__snapshots__/monitor_status.bar.test.tsx.snap @@ -65,13 +65,13 @@ Array [ > Set tags External link (opens in a new tab or window) diff --git a/x-pack/test/functional/apps/transform/actions/reauthorizing.ts b/x-pack/test/functional/apps/transform/actions/reauthorizing.ts index f256e902eac97..878a351410396 100644 --- a/x-pack/test/functional/apps/transform/actions/reauthorizing.ts +++ b/x-pack/test/functional/apps/transform/actions/reauthorizing.ts @@ -211,7 +211,7 @@ export default function ({ getService }: FtrProviderContext) { await transform.table.assertTransformRowActionMissing(transformId, 'Reauthorize'); } else { await transform.testExecution.logTestStep('should show disabled action menu button'); - await transform.table.assertTransformRowActionsButtonEnabled(transformId, false); + await transform.table.assertTransformRowActionsEnabled(transformId, false); } await transform.table.clearSearchString(testDataList.length); }); diff --git a/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts b/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts index 9e5c1e4f1b081..a18252b47bdbe 100644 --- a/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts +++ b/x-pack/test/functional/apps/transform/creation/index_pattern/creation_index_pattern.ts @@ -271,7 +271,7 @@ export default function ({ getService, getPageObjects }: FtrProviderContext) { legend: '7 categories', colorStats: [ { color: '#000000', percentage: 20 }, - { color: '#54B399', percentage: 75 }, + { color: '#54B399', percentage: 80 }, ], }, { diff --git a/x-pack/test/functional/apps/transform/permissions/full_transform_access.ts b/x-pack/test/functional/apps/transform/permissions/full_transform_access.ts index e5e24657789a1..5cd04c4e33577 100644 --- a/x-pack/test/functional/apps/transform/permissions/full_transform_access.ts +++ b/x-pack/test/functional/apps/transform/permissions/full_transform_access.ts @@ -97,10 +97,7 @@ export default function ({ getService }: FtrProviderContext) { await transform.table.filterWithSearchString(transformConfigWithPivot.id, 1); await transform.testExecution.logTestStep('should show the actions popover'); - await transform.table.assertTransformRowActionsButtonEnabled( - transformConfigWithPivot.id, - true - ); + await transform.table.assertTransformRowActionsEnabled(transformConfigWithPivot.id, true); await transform.table.assertTransformRowActions(transformConfigWithPivot.id, false); await transform.testExecution.logTestStep('should have the edit action enabled'); diff --git a/x-pack/test/functional/apps/transform/permissions/read_transform_access.ts b/x-pack/test/functional/apps/transform/permissions/read_transform_access.ts index 02cfcfdfba003..216bb287f0e5e 100644 --- a/x-pack/test/functional/apps/transform/permissions/read_transform_access.ts +++ b/x-pack/test/functional/apps/transform/permissions/read_transform_access.ts @@ -97,10 +97,7 @@ export default function ({ getService }: FtrProviderContext) { await transform.table.filterWithSearchString(transformConfigWithPivot.id, 1); await transform.testExecution.logTestStep('should display a disabled actions popover'); - await transform.table.assertTransformRowActionsButtonEnabled( - transformConfigWithPivot.id, - false - ); + await transform.table.assertTransformRowActionsEnabled(transformConfigWithPivot.id, false); await transform.testExecution.logTestStep('should show content in the expanded table row'); await transform.table.assertTransformExpandedRow(); diff --git a/x-pack/test/functional/page_objects/lens_page.ts b/x-pack/test/functional/page_objects/lens_page.ts index 2d3766c137667..2af514b4a1fdc 100644 --- a/x-pack/test/functional/page_objects/lens_page.ts +++ b/x-pack/test/functional/page_objects/lens_page.ts @@ -1187,6 +1187,7 @@ export function LensPageProvider({ getService, getPageObjects }: FtrProviderCont async changeTableSortingBy(colIndex = 0, direction: 'none' | 'ascending' | 'descending') { const el = await this.getDatatableHeader(colIndex); + await el.moveMouseTo({ xOffset: 0, yOffset: -20 }); // Prevent the first data row's cell actions from overlapping/intercepting the header click await el.click(); let buttonEl; if (direction !== 'none') { diff --git a/x-pack/test/functional/page_objects/tag_management_page.ts b/x-pack/test/functional/page_objects/tag_management_page.ts index 30c6689d87b8f..80f64243fe31b 100644 --- a/x-pack/test/functional/page_objects/tag_management_page.ts +++ b/x-pack/test/functional/page_objects/tag_management_page.ts @@ -428,6 +428,16 @@ export class TagManagementPageObject extends FtrService { await checkbox.click(); } + /** + * Select all checkboxes + */ + async selectAllTagRows() { + const checkbox = await this.testSubjects.find( + 'tagsManagementTable table-is-ready > checkboxSelectAll' + ); + await checkbox.click(); + } + /** * Returns true if the tag bulk action menu is displayed, false otherwise. */ diff --git a/x-pack/test/functional/services/transform/transform_table.ts b/x-pack/test/functional/services/transform/transform_table.ts index 7a5f303ba155b..48110a7ec4b21 100644 --- a/x-pack/test/functional/services/transform/transform_table.ts +++ b/x-pack/test/functional/services/transform/transform_table.ts @@ -6,6 +6,7 @@ */ import expect from '@kbn/expect'; +import { asyncForEach } from '@kbn/std'; import { WebElementWrapper } from '@kbn/ftr-common-functional-ui-services'; @@ -426,19 +427,23 @@ export function TransformTableProvider({ getPageObject, getService }: FtrProvide }); } - public async assertTransformRowActionsButtonEnabled( - transformId: string, - expectedValue: boolean - ) { - const isEnabled = await testSubjects.isEnabled( - this.rowSelector(transformId, 'euiCollapsedItemActionsButton') - ); - expect(isEnabled).to.eql( - expectedValue, - `Expected transform row actions button to be '${ - expectedValue ? 'enabled' : 'disabled' - }' (got '${isEnabled ? 'enabled' : 'disabled'}')` + public async assertTransformRowActionsEnabled(transformId: string, expectedValue: boolean) { + await this.ensureTransformActionsMenuOpen(transformId); + + // Check whether all menu actions are disabled + let allDisabled = true; + const actions = await find.allByCssSelector('.euiBasicTable__collapsedAction'); + await asyncForEach(actions, async (action) => { + if (await action.isEnabled()) { + allDisabled = false; + } + }); + expect(allDisabled).to.eql( + !expectedValue, + `Expected all transform row actions to '${expectedValue ? 'not' : ''}' be disabled.` ); + + await this.ensureTransformActionsMenuClosed(); } public async assertTransformRowActions(transformId: string, isTransformRunning = false) { diff --git a/x-pack/test/functional_with_es_ssl/apps/cases/group2/upgrade.ts b/x-pack/test/functional_with_es_ssl/apps/cases/group2/upgrade.ts index ebbace48f6aad..8320ac9707e3a 100644 --- a/x-pack/test/functional_with_es_ssl/apps/cases/group2/upgrade.ts +++ b/x-pack/test/functional_with_es_ssl/apps/cases/group2/upgrade.ts @@ -340,7 +340,7 @@ export default ({ getPageObject, getService }: FtrProviderContext) => { const link = await testSubjects.find('case-table-column-external'); const upToDate = await testSubjects.find('case-table-column-external-upToDate'); - expect(await link.getVisibleText()).equal('ROC-526\n(opens in a new tab or window)'); + expect(await link.getVisibleText()).equal('ROC-526'); expect(await upToDate.getVisibleText()).equal('is up to date'); }); diff --git a/x-pack/test/saved_object_tagging/functional/tests/feature_control.ts b/x-pack/test/saved_object_tagging/functional/tests/feature_control.ts index 90b6e1d360d4e..f226423100451 100644 --- a/x-pack/test/saved_object_tagging/functional/tests/feature_control.ts +++ b/x-pack/test/saved_object_tagging/functional/tests/feature_control.ts @@ -43,6 +43,13 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { } }; + const unselectTags = async () => { + if (await tagManagementPage.isSelectionColumnDisplayed()) { + await tagManagementPage.selectAllTagRows(); + await tagManagementPage.selectAllTagRows(); + } + }; + const addFeatureControlSuite = ({ user, description, privileges }: FeatureControlUserSuite) => { const testPrefix = (allowed: boolean) => (allowed ? `can` : `can't`); @@ -69,6 +76,7 @@ export default function ({ getPageObjects, getService }: FtrProviderContext) { it(`${testPrefix(privileges.delete)} bulk delete tags`, async () => { await selectSomeTags(); expect(await tagManagementPage.isBulkActionPresent('delete')).to.be(privileges.delete); + await unselectTags(); }); it(`${testPrefix(privileges.create)} create tag`, async () => { diff --git a/yarn.lock b/yarn.lock index 70df97c2fb219..0457de5cfa53f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1740,10 +1740,10 @@ resolved "https://registry.yarnpkg.com/@elastic/eslint-plugin-eui/-/eslint-plugin-eui-0.0.2.tgz#56b9ef03984a05cc213772ae3713ea8ef47b0314" integrity sha512-IoxURM5zraoQ7C8f+mJb9HYSENiZGgRVcG4tLQxE61yHNNRDXtGDWTZh8N1KIHcsqN1CEPETjuzBXkJYF/fDiQ== -"@elastic/eui@91.0.0-backport.0": - version "91.0.0-backport.0" - resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-91.0.0-backport.0.tgz#821306a580cc8fcf1a142106e425f3fcd1bebfbf" - integrity sha512-2T+8JiPs1Ejh2T8l7cwqv/IIlNV6I9RbXtJ60L9U4lJGtS/R8zIoikrR/2SEs8bXwyXXg4i/trhfbYbylAvZpw== +"@elastic/eui@91.3.1": + version "91.3.1" + resolved "https://registry.yarnpkg.com/@elastic/eui/-/eui-91.3.1.tgz#2289b1683f0409c043150c39f5fb7233aa7beb16" + integrity sha512-zxnhBaAsykmDqjbZ3i++CFTyv2dKZSe3UUZKSgYj5MaMnbE86uzeWGjhp3gh1b+LxJZP2672MbNZ6qxVOh1vcQ== dependencies: "@hello-pangea/dnd" "^16.3.0" "@types/lodash" "^4.14.198"