grafana/public/app/features/admin/LicenseChrome.tsx
Josh Hunt 3c6e0e8ef8
Chore: ESlint import order (#44959)
* Add and configure eslint-plugin-import

* Fix the lint:ts npm command

* Autofix + prettier all the files

* Manually fix remaining files

* Move jquery code in jest-setup to external file to safely reorder imports

* Resolve issue caused by circular dependencies within Prometheus

* Update .betterer.results

* Fix missing // @ts-ignore

* ignore iconBundle.ts

* Fix missing // @ts-ignore
2022-04-22 14:33:13 +01:00

97 lines
2.3 KiB
TypeScript

import { css } from '@emotion/css';
import React from 'react';
import { GrafanaTheme } from '@grafana/data';
import { stylesFactory, useTheme } from '@grafana/ui';
const title = { fontWeight: 500, fontSize: '26px', lineHeight: '123%' };
const getStyles = stylesFactory((theme: GrafanaTheme) => {
const backgroundUrl = theme.isDark ? 'public/img/licensing/header_dark.svg' : 'public/img/licensing/header_light.svg';
const footerBg = theme.isDark ? theme.palette.dark9 : theme.palette.gray6;
return {
container: css`
padding: 36px 79px;
background: ${theme.colors.panelBg};
`,
footer: css`
text-align: center;
padding: 16px;
background: ${footerBg};
`,
header: css`
height: 137px;
padding: 40px 0 0 79px;
position: relative;
background: url('${backgroundUrl}') right;
`,
};
});
interface Props {
header: string;
subheader?: string;
editionNotice?: string;
children?: React.ReactNode;
}
export function LicenseChrome({ header, editionNotice, subheader, children }: Props) {
const theme = useTheme();
const styles = getStyles(theme);
return (
<>
<div className={styles.header}>
<h2 style={title}>{header}</h2>
{subheader && <h3>{subheader}</h3>}
<Circle
size="128px"
style={{
boxShadow: '0px 0px 24px rgba(24, 58, 110, 0.45)',
background: '#0A1C36',
position: 'absolute',
top: '19px',
left: '71%',
}}
>
<img
src="public/img/grafana_icon.svg"
alt="Grafana"
width="80px"
style={{ position: 'absolute', left: '23px', top: '20px' }}
/>
</Circle>
</div>
<div className={styles.container}>{children}</div>
{editionNotice && <div className={styles.footer}>{editionNotice}</div>}
</>
);
}
interface CircleProps {
size: string;
style?: React.CSSProperties;
}
export const Circle: React.FC<CircleProps> = ({ size, style, children }) => {
return (
<div
style={{
width: size,
height: size,
position: 'absolute',
bottom: 0,
right: 0,
borderRadius: '50%',
...style,
}}
>
{children}
</div>
);
};