Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
d9967c8
chore: upgrade `@elastic/eui` to v111.0.0
tkajtoch Dec 8, 2025
58d2256
fix: update EuiFlyout `ref` usage to not use string refs
tkajtoch Oct 29, 2025
6c53a96
chore: update i18n mapping
tkajtoch Nov 26, 2025
7eb2062
test: update snapshots in src/platform/packages/shared/shared-ux/page…
tkajtoch Nov 26, 2025
084c866
test: update snapshots in src/platform/plugins/private/vis_types/visl…
tkajtoch Nov 26, 2025
255d5d1
test: update snapshots in x-pack/platform/plugins/shared/security/jes…
tkajtoch Nov 26, 2025
2af1cc7
style: remove unnecessary `z-index` overrides
tkajtoch Dec 4, 2025
7d045e2
style(ActionLogButton): remove unnecessary `z-index` override
tkajtoch Dec 4, 2025
3bf82f1
chore: update styled-components mapping
tkajtoch Dec 8, 2025
5c07799
TO FIX: Run node 'scripts/yarn_deduplicate && yarn kbn bootstrap' loc…
kibanamachine Dec 8, 2025
90e390b
Merge branch 'main' into feat/eui-v111.0.0
elasticmachine Dec 8, 2025
64af251
test: fix runtime field input selector to not target the overlay mask…
tkajtoch Dec 8, 2025
8d50ca0
fix: remove remaining `z-index` overrides related to flyouts
tkajtoch Dec 8, 2025
c59b0af
fix: add `useEuiTheme` back to create_case_flyout.tsx
tkajtoch Dec 8, 2025
2f082e3
Merge branch 'main' into feat/eui-v111.0.0
elasticmachine Dec 10, 2025
c59cd2e
Merge branch 'main' into feat/eui-v111.0.0
elasticmachine Dec 11, 2025
effc35d
Merge branch 'main' into feat/eui-v111.0.0
elasticmachine Dec 15, 2025
76aece0
fix: remove unwanted z-index override on PageOverlay that causes flyo…
tkajtoch Dec 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,8 @@
"@elastic/ecs": "^9.0.0",
"@elastic/elasticsearch": "9.1.1",
"@elastic/ems-client": "8.6.3",
"@elastic/eui": "110.0.0",
"@elastic/eui-theme-borealis": "5.1.0",
"@elastic/eui": "111.0.0",
"@elastic/eui-theme-borealis": "5.2.0",
"@elastic/filesaver": "1.1.2",
"@elastic/kibana-d3-color": "npm:@elastic/kibana-d3-color@2.0.1",
"@elastic/monaco-esql": "^3.1.11",
Expand Down
1 change: 0 additions & 1 deletion packages/kbn-babel-preset/styled_components_files.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -799,6 +799,15 @@ export const getEuiContextMapping = (): EuiTokensObject => {
defaultMessage: 'You can still continue tabbing through other global page landmarks.',
}
),
'euiFlyoutMenu.back': i18n.translate('core.euiFlyoutMenu.back', {
defaultMessage: 'Back',
}),
'euiFlyoutMenu.history': i18n.translate('core.euiFlyoutMenu.history', {
defaultMessage: 'History',
}),
'euiFlyoutManaged.defaultTitle': i18n.translate('core.euiFlyoutManaged.defaultTitle', {
defaultMessage: 'Unknown Flyout',
}),
'euiForm.addressFormErrors': i18n.translate('core.euiForm.addressFormErrors', {
defaultMessage: 'Please address the highlighted errors.',
}),
Expand Down
4 changes: 2 additions & 2 deletions src/dev/license_checker/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,8 +92,8 @@ 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.6.3': ['Elastic License 2.0'],
'@elastic/eui@110.0.0': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'],
'@elastic/eui-theme-borealis@5.1.0': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'],
'@elastic/eui@111.0.0': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.0'],
'@elastic/eui-theme-borealis@5.2.0': ['Elastic License 2.0 OR AGPL-3.0-only OR SSPL-1.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@2.5.2': ['Apache-2.0'], // license (Apache-2.0 AND BSD-3-Clause)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import useUnmount from 'react-use/lib/useUnmount';
export const useFlyoutA11y = ({ isXlScreen }: { isXlScreen: boolean }) => {
const descriptionId = useGeneratedHtmlId();
const [triggerEl] = useState(document.activeElement);
const [flyoutEl, setFlyoutEl] = useState<HTMLElement>();
const [flyoutEl, setFlyoutEl] = useState<HTMLElement | null>(null);

// Auto-focus push flyout on open or when switching to XL screen
useEffect(() => {
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -92,10 +92,6 @@ export const getEditorOpener =
{
hideCloseButton: true,
size: 'l',
// EUI TODO: This z-index override of EuiOverlayMask is a workaround, and ideally should be resolved with a cleaner UI/UX flow long-term
maskProps: {
style: 'z-index: 1004', // we need this flyout to be above the timeline flyout (which has a z-index of 1003)
},
'aria-labelledby': 'dataViewEditorFlyoutTitle',
}
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -242,11 +242,6 @@ export const getFieldEditorOpener =
flyout.close();
}
},
maskProps: {
className: 'indexPatternFieldEditorMaskOverlay',
// // EUI TODO: This z-index override of EuiOverlayMask is a workaround, and ideally should be resolved with a cleaner UI/UX flow long-term
style: 'z-index: 1004', // we need this flyout to be above the timeline flyout (which has a z-index of 1003)
},
}
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import useUnmount from 'react-use/lib/useUnmount';
export const useFlyoutA11y = ({ isXlScreen }: { isXlScreen: boolean }) => {
const descriptionId = useGeneratedHtmlId();
const [triggerEl] = useState(document.activeElement);
const [flyoutEl, setFlyoutEl] = useState<HTMLElement>();
const [flyoutEl, setFlyoutEl] = useState<HTMLElement | null>(null);

// Auto-focus push flyout on open or when switching to XL screen
useEffect(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { EuiFlyoutResizable } from '@elastic/eui';
import useEvent from 'react-use/lib/useEvent';
import { css } from '@emotion/react';

import { createGlobalStyle } from 'styled-components';
import type { ShowAssistantOverlayProps } from '../../assistant_context';
import { useAssistantContext } from '../../assistant_context';
import { Assistant, CONVERSATION_SIDE_PANEL_WIDTH } from '..';
Expand All @@ -23,17 +22,6 @@ import {

const isMac = navigator.platform.toLowerCase().indexOf('mac') >= 0;

/**
* Modal container for Elastic AI Assistant conversations, receiving the page contents as context, plus whatever
* component currently has focus and any specific context it may provide through the SAssInterface.
*/

export const UnifiedTimelineGlobalStyles = createGlobalStyle`
body:has(.timeline-portal-overlay-mask) .euiOverlayMask {
z-index: 1003 !important;
}
`;

export const AssistantOverlay = React.memo(() => {
const spaceId = useAssistantSpaceId();
const [isModalVisible, setIsModalVisible] = useState(false);
Expand Down Expand Up @@ -118,6 +106,8 @@ export const AssistantOverlay = React.memo(() => {
);
useEvent('keydown', onKeyDown);

const flyoutRef = useRef<HTMLElement>(null);

// Modal control functions
const cleanupAndCloseModal = useCallback(() => {
setIsModalVisible(false);
Expand All @@ -144,8 +134,6 @@ export const AssistantOverlay = React.memo(() => {
});
}, []);

const flyoutRef = useRef<HTMLDivElement>();

if (!isModalVisible) return null;

return (
Expand All @@ -172,7 +160,6 @@ export const AssistantOverlay = React.memo(() => {
setChatHistoryVisible={toggleChatHistory}
/>
</EuiFlyoutResizable>
<UnifiedTimelineGlobalStyles />
</>
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
* 2.0.
*/

import React, { useMemo } from 'react';
import React from 'react';
import { css } from '@emotion/react';
import { EuiFlyout, EuiFlyoutBody, EuiFlyoutHeader, EuiTitle, useEuiTheme } from '@elastic/eui';

Expand Down Expand Up @@ -41,15 +41,10 @@ export const CreateCaseFlyout = React.memo<CreateCaseFlyoutProps>(
onSuccess,
observables = [],
}) => {
const { euiTheme } = useEuiTheme();
const handleCancel = onClose || noop;
const handleOnSuccess = onSuccess || noop;

const { euiTheme } = useEuiTheme();
const maskProps = useMemo(
() => ({ style: `z-index: ${(euiTheme.levels.flyout as number) + 4}` }), // we need this flyout to be above the timeline flyout (which has a z-index of 1003)
[euiTheme.levels.flyout]
);

return (
<>
<ReactQueryDevtools initialIsOpen={false} />
Expand All @@ -58,8 +53,6 @@ export const CreateCaseFlyout = React.memo<CreateCaseFlyoutProps>(
tour-step="create-case-flyout"
aria-label={i18n.CREATE_CASE_LABEL}
data-test-subj="create-case-flyout"
// EUI TODO: This z-index override of EuiOverlayMask is a workaround, and ideally should be resolved with a cleaner UI/UX flow long-term
maskProps={maskProps}
>
<EuiFlyoutHeader data-test-subj="create-case-flyout-header" hasBorder>
<EuiTitle size="m">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -199,8 +199,14 @@ export const CreateAgentPolicyFlyout: React.FunctionComponent<Props> = ({
</EuiFlyoutFooter>
);

// ref={null} is needed to fix styled-components' ref prop type
return (
<FlyoutWithHigherZIndex onClose={() => onClose()} {...restOfProps} maxWidth={MAX_FLYOUT_WIDTH}>
<FlyoutWithHigherZIndex
onClose={() => onClose()}
{...restOfProps}
maxWidth={MAX_FLYOUT_WIDTH}
ref={null}
Copy link
Copy Markdown
Member

@criamico criamico Dec 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have a couple questions regarding this:

  • I'm curious, why is it still necessary to keep the higher z-index? i saw it's being removed elsewhere.
  • I think we're (slowly) moving away from styled components. Would it make sense to update the component to use emotion rather than doing this?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great catch! It's probably not necessary at this point - when I was refactoring this file, I was focused on getting the ref fixed and, at that time, we still haven't had the dynamic z-index calculation implemented. I'll update it

>
{header}
{body}
{footer}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,8 @@ import {
EuiPortal,
EuiSpacer,
EuiTitle,
useEuiTheme,
} from '@elastic/eui';
import React, { useMemo } from 'react';
import React from 'react';
import { FormattedMessage } from '@kbn/i18n-react';

interface QueryDetailsFlyoutProps {
Expand All @@ -27,64 +26,46 @@ interface QueryDetailsFlyoutProps {
onClose: () => void;
}

const QueryDetailsFlyoutComponent: React.FC<QueryDetailsFlyoutProps> = ({ action, onClose }) => {
const { euiTheme } = useEuiTheme();
const maskProps = useMemo(
() => ({ style: `z-index: ${(euiTheme.levels.flyout as number) + 4}` }), // we need this flyout to be above the timeline flyout (which has a z-index of 1003)
[euiTheme.levels.flyout]
);

return (
<EuiPortal>
<EuiFlyout
size="m"
ownFocus
onClose={onClose}
aria-labelledby="flyoutTitle"
// EUI TODO: This z-index override of EuiOverlayMask is a workaround, and ideally should be resolved with a cleaner UI/UX flow long-term
maskProps={maskProps}
>
<EuiFlyoutHeader hasBorder>
<EuiTitle size="s">
<h2 id="flyoutTitle">
<FormattedMessage
id="xpack.osquery.liveQueryActions.details.title"
defaultMessage="Query Details"
/>
</h2>
</EuiTitle>
</EuiFlyoutHeader>
<EuiFlyoutBody>
<EuiFlexItem grow={false}>
<strong>
<FormattedMessage
id="xpack.osquery.liveQueryActions.details.id"
defaultMessage="Id"
/>
</strong>
<EuiSpacer size="xs" />
<EuiCodeBlock fontSize="m" paddingSize="s" isCopyable={true}>
{action.id}
</EuiCodeBlock>
</EuiFlexItem>
<EuiSpacer size="m" />
<EuiFlexItem grow={false}>
<strong>
<FormattedMessage
id="xpack.osquery.liveQueryActions.details.query"
defaultMessage="Query"
/>
</strong>
<EuiSpacer size="xs" />
<EuiCodeBlock language="sql" fontSize="m" paddingSize="s" isCopyable={true}>
{action.query}
</EuiCodeBlock>
</EuiFlexItem>
<EuiSpacer size="m" />
</EuiFlyoutBody>
</EuiFlyout>
</EuiPortal>
);
};
const QueryDetailsFlyoutComponent: React.FC<QueryDetailsFlyoutProps> = ({ action, onClose }) => (
<EuiPortal>
<EuiFlyout size="m" ownFocus onClose={onClose} aria-labelledby="flyoutTitle">
<EuiFlyoutHeader hasBorder>
<EuiTitle size="s">
<h2 id="flyoutTitle">
<FormattedMessage
id="xpack.osquery.liveQueryActions.details.title"
defaultMessage="Query Details"
/>
</h2>
</EuiTitle>
</EuiFlyoutHeader>
<EuiFlyoutBody>
<EuiFlexItem grow={false}>
<strong>
<FormattedMessage id="xpack.osquery.liveQueryActions.details.id" defaultMessage="Id" />
</strong>
<EuiSpacer size="xs" />
<EuiCodeBlock fontSize="m" paddingSize="s" isCopyable={true}>
{action.id}
</EuiCodeBlock>
</EuiFlexItem>
<EuiSpacer size="m" />
<EuiFlexItem grow={false}>
<strong>
<FormattedMessage
id="xpack.osquery.liveQueryActions.details.query"
defaultMessage="Query"
/>
</strong>
<EuiSpacer size="xs" />
<EuiCodeBlock language="sql" fontSize="m" paddingSize="s" isCopyable={true}>
{action.query}
</EuiCodeBlock>
</EuiFlexItem>
<EuiSpacer size="m" />
</EuiFlyoutBody>
</EuiFlyout>
</EuiPortal>
);

export const QueryDetailsFlyout = React.memo(QueryDetailsFlyoutComponent);

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading