From 4cf11b721aeade73b37551382f5202ecef94d49a Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Fri, 17 Oct 2025 15:40:08 +0100 Subject: [PATCH] PanelChrome: Put `overflow: hidden;` behind a feature toggle for safety (#112580) put overflow: hidden behind a feature toggle for safety --- .../configure-grafana/feature-toggles/index.md | 1 + .../grafana-data/src/types/featureToggles.gen.ts | 5 +++++ .../src/components/PanelChrome/PanelChrome.tsx | 3 ++- pkg/services/featuremgmt/registry.go | 8 ++++++++ pkg/services/featuremgmt/toggles_gen.csv | 1 + pkg/services/featuremgmt/toggles_gen.go | 4 ++++ pkg/services/featuremgmt/toggles_gen.json | 14 ++++++++++++++ 7 files changed, 35 insertions(+), 1 deletion(-) diff --git a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md index f4826193d63..9ab20621103 100644 --- a/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md +++ b/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @@ -111,6 +111,7 @@ Most [generally available](https://grafana.com/docs/release-life-cycle/#general- | `logsPanelControls` | Enables a control component for the logs panel in Explore | | `grafanaPathfinder` | Enables Pathfinder app | | `azureResourcePickerUpdates` | Enables the updated Azure Monitor resource picker | +| `preventPanelChromeOverflow` | Restrict PanelChrome contents with overflow: hidden; | ## Development feature toggles diff --git a/packages/grafana-data/src/types/featureToggles.gen.ts b/packages/grafana-data/src/types/featureToggles.gen.ts index e649d310ead..dfa24406d21 100644 --- a/packages/grafana-data/src/types/featureToggles.gen.ts +++ b/packages/grafana-data/src/types/featureToggles.gen.ts @@ -1213,4 +1213,9 @@ export interface FeatureToggles { * @default false */ cdnPluginsUrls?: boolean; + /** + * Restrict PanelChrome contents with overflow: hidden; + * @default true + */ + preventPanelChromeOverflow?: boolean; } diff --git a/packages/grafana-ui/src/components/PanelChrome/PanelChrome.tsx b/packages/grafana-ui/src/components/PanelChrome/PanelChrome.tsx index 18714d51307..16d67ea51db 100644 --- a/packages/grafana-ui/src/components/PanelChrome/PanelChrome.tsx +++ b/packages/grafana-ui/src/components/PanelChrome/PanelChrome.tsx @@ -10,6 +10,7 @@ import { t } from '@grafana/i18n'; import { useStyles2, useTheme2 } from '../../themes/ThemeContext'; import { getFocusStyles } from '../../themes/mixins'; import { DelayRender } from '../../utils/DelayRender'; +import { getFeatureToggle } from '../../utils/featureToggle'; import { usePointerDistance } from '../../utils/usePointerDistance'; import { useElementSelection } from '../ElementSelectionContext/ElementSelectionContext'; import { Icon } from '../Icon/Icon'; @@ -484,7 +485,7 @@ const getStyles = (theme: GrafanaTheme2) => { height: '100%', display: 'flex', flexDirection: 'column', - overflow: 'hidden', + overflow: getFeatureToggle('preventPanelChromeOverflow') ? 'hidden' : 'initial', '.always-show': { background: 'none', diff --git a/pkg/services/featuremgmt/registry.go b/pkg/services/featuremgmt/registry.go index 25117d19452..2dd58e490a4 100644 --- a/pkg/services/featuremgmt/registry.go +++ b/pkg/services/featuremgmt/registry.go @@ -2103,6 +2103,14 @@ var ( Owner: grafanaPluginsPlatformSquad, Expression: "false", }, + { + Name: "preventPanelChromeOverflow", + Description: "Restrict PanelChrome contents with overflow: hidden;", + Stage: FeatureStagePublicPreview, + FrontendOnly: true, + Owner: grafanaFrontendPlatformSquad, + Expression: "true", + }, } ) diff --git a/pkg/services/featuremgmt/toggles_gen.csv b/pkg/services/featuremgmt/toggles_gen.csv index 23288bb362d..ad0a99827db 100644 --- a/pkg/services/featuremgmt/toggles_gen.csv +++ b/pkg/services/featuremgmt/toggles_gen.csv @@ -270,3 +270,4 @@ pluginContainers,privatePreview,@grafana/plugins-platform-backend,false,true,fal tempoSearchBackendMigration,GA,@grafana/oss-big-tent,false,true,false cdnPluginsLoadFirst,experimental,@grafana/plugins-platform-backend,false,false,false cdnPluginsUrls,experimental,@grafana/plugins-platform-backend,false,false,false +preventPanelChromeOverflow,preview,@grafana/grafana-frontend-platform,false,false,true diff --git a/pkg/services/featuremgmt/toggles_gen.go b/pkg/services/featuremgmt/toggles_gen.go index 2939cdf4f56..c2a51b6360a 100644 --- a/pkg/services/featuremgmt/toggles_gen.go +++ b/pkg/services/featuremgmt/toggles_gen.go @@ -1089,4 +1089,8 @@ const ( // FlagCdnPluginsUrls // Enable loading plugins via declarative URLs FlagCdnPluginsUrls = "cdnPluginsUrls" + + // FlagPreventPanelChromeOverflow + // Restrict PanelChrome contents with overflow: hidden; + FlagPreventPanelChromeOverflow = "preventPanelChromeOverflow" ) diff --git a/pkg/services/featuremgmt/toggles_gen.json b/pkg/services/featuremgmt/toggles_gen.json index 5a0c300a243..07201201e35 100644 --- a/pkg/services/featuremgmt/toggles_gen.json +++ b/pkg/services/featuremgmt/toggles_gen.json @@ -3038,6 +3038,20 @@ "hideFromDocs": true } }, + { + "metadata": { + "name": "preventPanelChromeOverflow", + "resourceVersion": "1760704390127", + "creationTimestamp": "2025-10-17T12:33:10Z" + }, + "spec": { + "description": "Restrict PanelChrome contents with overflow: hidden;", + "stage": "preview", + "codeowner": "@grafana/grafana-frontend-platform", + "frontend": true, + "expression": "true" + } + }, { "metadata": { "name": "promQLScope",