From d7a081e3a1ebabcddc43a1f25c05b246037f8c01 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Wed, 26 Feb 2025 11:38:13 +0000 Subject: [PATCH] Theme: Add `ThemePreview` component (#101287) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ThemeDrawer: Change theme from anywhere and preview them * Update * extract ThemePreview into it's own component * undo changes everywhere else --------- Co-authored-by: Torkel Ödegaard --- .../core/components/Theme/ThemePreview.tsx | 145 ++++++++++++++++++ public/locales/en-US/grafana.json | 10 ++ public/locales/pseudo-LOCALE/grafana.json | 10 ++ 3 files changed, 165 insertions(+) create mode 100644 public/app/core/components/Theme/ThemePreview.tsx diff --git a/public/app/core/components/Theme/ThemePreview.tsx b/public/app/core/components/Theme/ThemePreview.tsx new file mode 100644 index 00000000000..4d60222dcc6 --- /dev/null +++ b/public/app/core/components/Theme/ThemePreview.tsx @@ -0,0 +1,145 @@ +import { css, cx } from '@emotion/css'; + +import { GrafanaTheme2, ThemeContext } from '@grafana/data'; +import { Box, Divider, Icon, Stack, useStyles2 } from '@grafana/ui'; + +import { Trans } from '../../internationalization'; +import { Branding } from '../Branding/Branding'; + +interface ThemePreviewProps { + theme: GrafanaTheme2; +} + +export function ThemePreview({ theme }: ThemePreviewProps) { + return ( + + + + ); +} + +function ThemePreviewWithContext() { + const styles = useStyles2(getStyles); + + return ( + + + + + +
+ Home + + Dashboards +
+
+ +
+ + + + + +
+
+ Panel +
+ +
+ Form label +
+
+ + +
+
+
+ +
+ + + + ); +} + +const getStyles = (theme: GrafanaTheme2) => { + return { + breadcrumbs: css({ + alignItems: 'center', + color: theme.colors.text.primary, + display: 'flex', + fontSize: Math.round(theme.typography.fontSize / 3), + gap: theme.spacing(0.25), + lineHeight: Math.round(theme.typography.body.lineHeight / 3), + paddingLeft: theme.spacing(0.5), + }), + breadcrumbSeparator: css({ + height: theme.spacing(0.75), + width: theme.spacing(0.75), + }), + img: css({ + height: theme.spacing(1), + width: theme.spacing(1), + }), + panel: css({ + background: theme.components.panel.background, + border: `1px solid ${theme.components.panel.borderColor}`, + borderRadius: theme.shape.radius.default, + display: 'flex', + flexDirection: 'column', + flexGrow: 1, + }), + panelHeader: css({ + alignItems: 'center', + color: theme.colors.text.primary, + display: 'flex', + fontSize: Math.round(theme.typography.fontSize / 3), + height: theme.spacing(2), + lineHeight: Math.round(theme.typography.body.lineHeight / 3), + padding: theme.spacing(0.5), + }), + formLabel: css({ + color: theme.colors.text.primary, + fontSize: Math.round(theme.typography.fontSize / 3), + lineHeight: Math.round(theme.typography.body.lineHeight / 3), + }), + formInput: css({ + background: theme.components.input.background, + border: `1px solid ${theme.colors.border.medium}`, + borderRadius: theme.shape.radius.default, + height: theme.spacing(1), + width: theme.spacing(6), + }), + action: css({ + borderRadius: theme.shape.radius.default, + height: theme.spacing(1), + width: theme.spacing(2.5), + }), + actionSecondary: css({ + background: theme.colors.secondary.main, + }), + actionDanger: css({ + background: theme.colors.error.main, + }), + actionPrimary: css({ + background: theme.colors.primary.main, + }), + }; +}; diff --git a/public/locales/en-US/grafana.json b/public/locales/en-US/grafana.json index 6e545aedd6b..a96d829d80d 100644 --- a/public/locales/en-US/grafana.json +++ b/public/locales/en-US/grafana.json @@ -3655,6 +3655,16 @@ "title": "You haven't created any teams yet" } }, + "theme-preview": { + "breadcrumbs": { + "dashboards": "Dashboards", + "home": "Home" + }, + "panel": { + "form-label": "Form label", + "title": "Panel" + } + }, "time-picker": { "absolute": { "recent-title": "Recently used absolute ranges", diff --git a/public/locales/pseudo-LOCALE/grafana.json b/public/locales/pseudo-LOCALE/grafana.json index e8fb5da2873..27833122c61 100644 --- a/public/locales/pseudo-LOCALE/grafana.json +++ b/public/locales/pseudo-LOCALE/grafana.json @@ -3655,6 +3655,16 @@ "title": "Ÿőū ĥävęʼn'ŧ čřęäŧęđ äʼny ŧęämş yęŧ" } }, + "theme-preview": { + "breadcrumbs": { + "dashboards": "Đäşĥþőäřđş", + "home": "Ħőmę" + }, + "panel": { + "form-label": "Főřm ľäþęľ", + "title": "Päʼnęľ" + } + }, "time-picker": { "absolute": { "recent-title": "Ŗęčęʼnŧľy ūşęđ äþşőľūŧę řäʼnģęş",