onboarding.tsx 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import styled from '@emotion/styled';
  2. import emptyStateImg from 'sentry-images/spot/performance-empty-state.svg';
  3. import {LinkButton} from 'sentry/components/button';
  4. import ButtonBar from 'sentry/components/buttonBar';
  5. import OnboardingPanel from 'sentry/components/onboardingPanel';
  6. import {t} from 'sentry/locale';
  7. const docsSetupURL = 'https://docs.sentry.io/product/ai-monitoring/getting-started/';
  8. export function AIMonitoringOnboarding() {
  9. return (
  10. <OnboardingPanel image={<PerfImage src={emptyStateImg} />}>
  11. <h3>{t('Understand your AI pipelines')}</h3>
  12. <p>
  13. {t(
  14. `Trying to productionize AI? Sentry's AI monitoring features help you understand the price, performance, and quality of your AI pipelines.`
  15. )}
  16. </p>
  17. <ButtonList gap={1}>
  18. <LinkButton priority="primary" href={docsSetupURL} external>
  19. {t('Start Setup')}
  20. </LinkButton>
  21. </ButtonList>
  22. </OnboardingPanel>
  23. );
  24. }
  25. const PerfImage = styled('img')`
  26. @media (min-width: ${p => p.theme.breakpoints.small}) {
  27. max-width: unset;
  28. user-select: none;
  29. position: absolute;
  30. top: 75px;
  31. bottom: 0;
  32. width: 450px;
  33. margin-top: auto;
  34. margin-bottom: auto;
  35. }
  36. @media (min-width: ${p => p.theme.breakpoints.medium}) {
  37. width: 480px;
  38. }
  39. @media (min-width: ${p => p.theme.breakpoints.large}) {
  40. width: 600px;
  41. }
  42. `;
  43. const ButtonList = styled(ButtonBar)`
  44. grid-template-columns: repeat(auto-fit, minmax(130px, max-content));
  45. margin-bottom: 16px;
  46. `;