123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157 |
- import styled from '@emotion/styled';
- import bannerBackground from 'sentry-images/spot/ai-suggestion-banner-background.svg';
- import bannerSentaur from 'sentry-images/spot/ai-suggestion-banner-sentaur.svg';
- import bannerStars from 'sentry-images/spot/ai-suggestion-banner-stars.svg';
- import {Button} from 'sentry/components/button';
- import ExternalLink from 'sentry/components/links/externalLink';
- import Panel from 'sentry/components/panels/panel';
- import PanelBody from 'sentry/components/panels/panelBody';
- import QuestionTooltip from 'sentry/components/questionTooltip';
- import {t, tct} from 'sentry/locale';
- import {space} from 'sentry/styles/space';
- import TextBlock from 'sentry/views/settings/components/text/textBlock';
- import {ExperimentalFeatureBadge} from './experimentalFeatureBadge';
- type Props = {
- onViewSuggestion: () => void;
- };
- export function Banner({onViewSuggestion}: Props) {
- return (
- <Wrapper>
- <Body withPadding>
- <div>
- <Title>
- {t('AI Solutions')}
- <MoreInfoTooltip
- isHoverable
- size="sm"
- title={tct(
- 'This is an OpenAI generated solution that suggests a fix for this issue. Be aware that this may not be accurate. [learnMore:Learn more]',
- {
- learnMore: (
- <ExternalLink href="https://docs.sentry.io/product/issues/issue-details/ai-suggested-solution/" />
- ),
- }
- )}
- />
- <ExperimentalFeatureBadge />
- </Title>
- <Description>
- {t('You might get lucky, but again, maybe not\u2026')}
- </Description>
- </div>
- <Action>
- <Background src={bannerBackground} />
- <Stars src={bannerStars} />
- <Sentaur src={bannerSentaur} />
- <ViewSuggestionButton size="xs" onClick={onViewSuggestion}>
- {t('View Suggestion')}
- </ViewSuggestionButton>
- </Action>
- </Body>
- </Wrapper>
- );
- }
- const Wrapper = styled(Panel)`
- margin-bottom: 0;
- @media (min-width: ${p => p.theme.breakpoints.xlarge}) {
- height: 80px;
- }
- `;
- const Body = styled(PanelBody)`
- display: flex;
- align-items: center;
- flex-wrap: wrap;
- gap: ${space(1)};
- > *:first-child {
- flex: 1;
- }
- @media (min-width: ${p => p.theme.breakpoints.xlarge}) {
- display: grid;
- grid-template-columns: 42% 1fr;
- }
- `;
- const Title = styled('div')`
- font-size: ${p => p.theme.fontSizeSmall};
- text-transform: uppercase;
- color: ${p => p.theme.gray300};
- display: flex;
- align-items: center;
- /* to be consistent with the feature badge size */
- height: ${space(2)};
- line-height: ${space(2)};
- white-space: nowrap;
- `;
- const Description = styled(TextBlock)`
- margin: ${space(1)} 0 0 0;
- `;
- const Action = styled('div')`
- display: flex;
- justify-content: flex-end;
- align-items: center;
- `;
- const Sentaur = styled('img')`
- display: none;
- @media (min-width: ${p => p.theme.breakpoints.xlarge}) {
- display: block;
- height: 8.563rem;
- position: absolute;
- bottom: 0;
- right: 6.608rem;
- object-fit: cover;
- z-index: 1;
- pointer-events: none;
- }
- `;
- const Background = styled('img')`
- display: none;
- @media (min-width: ${p => p.theme.breakpoints.xlarge}) {
- display: block;
- position: absolute;
- top: 0;
- right: 0;
- object-fit: cover;
- max-width: 100%;
- height: 100%;
- border-radius: ${p => p.theme.panelBorderRadius};
- }
- `;
- const Stars = styled('img')`
- display: none;
- @media (min-width: ${p => p.theme.breakpoints.xlarge}) {
- display: block;
- height: 8.563rem;
- position: absolute;
- right: -1rem;
- bottom: -0.125rem;
- object-fit: cover;
- /* workaround to remove a extra svg on the bottom right */
- border-radius: ${p => p.theme.panelBorderRadius};
- }
- `;
- const ViewSuggestionButton = styled(Button)`
- @media (min-width: ${p => p.theme.breakpoints.xlarge}) {
- position: absolute;
- right: 1rem;
- top: 1.5rem;
- }
- `;
- const MoreInfoTooltip = styled(QuestionTooltip)`
- margin-left: ${space(0.5)};
- `;
|