diff --git a/src/platform/plugins/shared/kql/public/components/query_string_input/filter_button_group.tsx b/src/platform/plugins/shared/kql/public/components/query_string_input/filter_button_group.tsx index 36b11c04d65b0..3f28921a8a43d 100644 --- a/src/platform/plugins/shared/kql/public/components/query_string_input/filter_button_group.tsx +++ b/src/platform/plugins/shared/kql/public/components/query_string_input/filter_button_group.tsx @@ -13,7 +13,7 @@ import classNames from 'classnames'; import type { UseEuiTheme } from '@elastic/eui'; import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'; import { css } from '@emotion/react'; -import { useMemoCss } from '../utils/use_memo_css'; +import { useMemoCss } from '@kbn/css-utils/public/use_memo_css'; interface Props { items: ReactNode[]; diff --git a/src/platform/plugins/shared/kql/public/components/query_string_input/query_string_input.styles.tsx b/src/platform/plugins/shared/kql/public/components/query_string_input/query_string_input.styles.tsx index 5b007ff25c8e0..fdeb769f4d2e3 100644 --- a/src/platform/plugins/shared/kql/public/components/query_string_input/query_string_input.styles.tsx +++ b/src/platform/plugins/shared/kql/public/components/query_string_input/query_string_input.styles.tsx @@ -11,7 +11,7 @@ import React from 'react'; import type { UseEuiTheme } from '@elastic/eui'; import { euiThemeVars } from '@kbn/ui-theme'; import { css } from '@emotion/react'; -import { useMemoCss } from '../utils/use_memo_css'; +import { useMemoCss } from '@kbn/css-utils/public/use_memo_css'; const queryStringInputStyles = { container: ({ euiTheme }: UseEuiTheme) => diff --git a/src/platform/plugins/shared/kql/public/components/typeahead/suggestion_component.tsx b/src/platform/plugins/shared/kql/public/components/typeahead/suggestion_component.tsx index 56f258fdd3cfc..1c95fdb1af443 100644 --- a/src/platform/plugins/shared/kql/public/components/typeahead/suggestion_component.tsx +++ b/src/platform/plugins/shared/kql/public/components/typeahead/suggestion_component.tsx @@ -12,8 +12,7 @@ import { EuiIcon, euiFontSize } from '@elastic/eui'; import classNames from 'classnames'; import React, { useCallback } from 'react'; import { css } from '@emotion/react'; -import type { EmotionStyles } from '../utils/use_memo_css'; -import { useMemoCss } from '../utils/use_memo_css'; +import { type EmotionStyles, useMemoCss } from '@kbn/css-utils/public/use_memo_css'; import type { QuerySuggestion } from '../../autocomplete'; import type { SuggestionOnClick, SuggestionOnMouseEnter } from './types'; diff --git a/src/platform/plugins/shared/kql/public/components/typeahead/suggestions_component.tsx b/src/platform/plugins/shared/kql/public/components/typeahead/suggestions_component.tsx index 86a0b514a45a0..c777a021ed371 100644 --- a/src/platform/plugins/shared/kql/public/components/typeahead/suggestions_component.tsx +++ b/src/platform/plugins/shared/kql/public/components/typeahead/suggestions_component.tsx @@ -16,8 +16,7 @@ import useRafState from 'react-use/lib/useRafState'; import type { UseEuiTheme } from '@elastic/eui'; import { euiShadow, euiShadowFlat } from '@elastic/eui'; import { css } from '@emotion/react'; -import type { EmotionStyles } from '../utils/use_memo_css'; -import { useMemoCss } from '../utils/use_memo_css'; +import { type EmotionStyles, useMemoCss } from '@kbn/css-utils/public/use_memo_css'; import type { QuerySuggestion } from '../../autocomplete'; import { SuggestionComponent } from './suggestion_component'; import { diff --git a/src/platform/plugins/shared/kql/public/components/utils/use_memo_css.ts b/src/platform/plugins/shared/kql/public/components/utils/use_memo_css.ts deleted file mode 100644 index b8da755f9de53..0000000000000 --- a/src/platform/plugins/shared/kql/public/components/utils/use_memo_css.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { useMemo } from 'react'; -import type { CSSInterpolation } from '@emotion/css'; -import type { UseEuiTheme } from '@elastic/eui'; -import { useEuiTheme } from '@elastic/eui'; - -// TODO: Move to use @kbn/css-utils when available https://github.com/elastic/kibana/pull/223933 - -export type EmotionStyles = Record< - string, - CSSInterpolation | ((theme: UseEuiTheme) => CSSInterpolation) ->; - -type StaticEmotionStyles = Record; - -/** - * Custom hook to reduce boilerplate when working with Emotion styles that may depend on - * the EUI theme. - * - * Accepts a map of styles where each entry is either a static Emotion style (via `css`) - * or a function that returns styles based on the current `euiTheme`. - * - * It returns a memoized version of the style map with all values resolved to static - * Emotion styles, allowing components to use a clean and unified object for styling. - * - * This helps simplify component code by centralizing theme-aware style logic. - * - * Example usage: - * const componentStyles = { - * container: css({ overflow: hidden }), - * leftPane: ({ euiTheme }) => css({ paddingTop: euiTheme.size.m }), - * } - * const styles = useMemoCss(componentStyles); - */ -export const useMemoCss = (styleMap: EmotionStyles) => { - const euiThemeContext = useEuiTheme(); - const outputStyles = useMemo(() => { - return Object.entries(styleMap).reduce((acc, [key, value]) => { - acc[key] = typeof value === 'function' ? value(euiThemeContext) : value; - return acc; - }, {}); - }, [euiThemeContext, styleMap]); - return outputStyles; -}; diff --git a/src/platform/plugins/shared/unified_search/public/filter_bar/filter_item/filter_item.tsx b/src/platform/plugins/shared/unified_search/public/filter_bar/filter_item/filter_item.tsx index 55022a51f76aa..1395966a95621 100644 --- a/src/platform/plugins/shared/unified_search/public/filter_bar/filter_item/filter_item.tsx +++ b/src/platform/plugins/shared/unified_search/public/filter_bar/filter_item/filter_item.tsx @@ -24,8 +24,8 @@ import React, { useState, useEffect, useCallback } from 'react'; import { type DocLinksStart, type IUiSettingsClient } from '@kbn/core/public'; import type { DataView, DataViewsContract } from '@kbn/data-views-plugin/public'; import { css } from '@emotion/react'; +import { useMemoCss } from '@kbn/css-utils/public/use_memo_css'; import { getIndexPatternFromFilter, getDisplayValueFromFilter } from '@kbn/data-plugin/public'; -import { useMemoCss } from '../../use_memo_css'; import { FilterEditor } from '../filter_editor/filter_editor'; import { FilterView } from '../filter_view'; import type { FilterPanelOption } from '../../types'; diff --git a/src/platform/plugins/shared/unified_search/public/saved_query_management/saved_query_management_list.tsx b/src/platform/plugins/shared/unified_search/public/saved_query_management/saved_query_management_list.tsx index 128a693e26e81..2708630dce23e 100644 --- a/src/platform/plugins/shared/unified_search/public/saved_query_management/saved_query_management_list.tsx +++ b/src/platform/plugins/shared/unified_search/public/saved_query_management/saved_query_management_list.tsx @@ -32,6 +32,7 @@ import { i18n } from '@kbn/i18n'; import type { RefObject } from 'react'; import React, { useCallback, useState, useRef, useEffect, useMemo } from 'react'; import { renderToStaticMarkup } from 'react-dom/server'; +import { useMemoCss } from '@kbn/css-utils/public/use_memo_css'; import { useKibana } from '@kbn/kibana-react-plugin/public'; import type { SavedQuery, SavedQueryService } from '@kbn/data-plugin/public'; import type { SavedQueryAttributes } from '@kbn/data-plugin/common'; @@ -39,7 +40,6 @@ import { debounce } from 'lodash'; import useLatest from 'react-use/lib/useLatest'; import { KibanaRenderContextProvider } from '@kbn/react-kibana-context-render'; import { css } from '@emotion/react'; -import { useMemoCss } from '../use_memo_css'; import type { IUnifiedSearchPluginServices } from '../types'; import { strings as queryBarMenuPanelsStrings } from '../query_string_input/query_bar_menu_panels'; import { PanelTitle } from '../query_string_input/panel_title'; diff --git a/src/platform/plugins/shared/unified_search/public/use_memo_css.ts b/src/platform/plugins/shared/unified_search/public/use_memo_css.ts deleted file mode 100644 index b8da755f9de53..0000000000000 --- a/src/platform/plugins/shared/unified_search/public/use_memo_css.ts +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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", the "GNU Affero General Public License v3.0 only", and the "Server Side - * Public License v 1"; you may not use this file except in compliance with, at - * your election, the "Elastic License 2.0", the "GNU Affero General Public - * License v3.0 only", or the "Server Side Public License, v 1". - */ - -import { useMemo } from 'react'; -import type { CSSInterpolation } from '@emotion/css'; -import type { UseEuiTheme } from '@elastic/eui'; -import { useEuiTheme } from '@elastic/eui'; - -// TODO: Move to use @kbn/css-utils when available https://github.com/elastic/kibana/pull/223933 - -export type EmotionStyles = Record< - string, - CSSInterpolation | ((theme: UseEuiTheme) => CSSInterpolation) ->; - -type StaticEmotionStyles = Record; - -/** - * Custom hook to reduce boilerplate when working with Emotion styles that may depend on - * the EUI theme. - * - * Accepts a map of styles where each entry is either a static Emotion style (via `css`) - * or a function that returns styles based on the current `euiTheme`. - * - * It returns a memoized version of the style map with all values resolved to static - * Emotion styles, allowing components to use a clean and unified object for styling. - * - * This helps simplify component code by centralizing theme-aware style logic. - * - * Example usage: - * const componentStyles = { - * container: css({ overflow: hidden }), - * leftPane: ({ euiTheme }) => css({ paddingTop: euiTheme.size.m }), - * } - * const styles = useMemoCss(componentStyles); - */ -export const useMemoCss = (styleMap: EmotionStyles) => { - const euiThemeContext = useEuiTheme(); - const outputStyles = useMemo(() => { - return Object.entries(styleMap).reduce((acc, [key, value]) => { - acc[key] = typeof value === 'function' ? value(euiThemeContext) : value; - return acc; - }, {}); - }, [euiThemeContext, styleMap]); - return outputStyles; -};