123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- import {HTMLAttributes} from 'react';
- import styled from '@emotion/styled';
- import {AnimationControls, motion} from 'framer-motion';
- import testableTransition from 'sentry/utils/testableTransition';
- type Props = {
- animateVariant: AnimationControls;
- } & HTMLAttributes<HTMLDivElement>;
- const PageCorners = ({animateVariant, ...rest}: Props) => (
- <Container {...rest}>
- <TopRight
- key="tr"
- width="874"
- height="203"
- viewBox="0 0 874 203"
- fill="none"
- xmlns="http://www.w3.org/2000/svg"
- animate={animateVariant}
- >
- <path
- d="M36.5 0H874v203l-288.7-10-7-114-180.2-4.8-3.6-35.2-351.1 2.5L36.5 0z"
- fill="currentColor"
- />
- <path
- d="M535.5 111.5v-22l31.8 1 .7 21.5-32.5-.5zM4 43.5L0 21.6 28.5 18l4.2 24.7-28.7.8z"
- fill="currentColor"
- />
- </TopRight>
- <BottomLeft
- key="bl"
- width="494"
- height="141"
- viewBox="0 0 494 141"
- fill="none"
- xmlns="http://www.w3.org/2000/svg"
- animate={animateVariant}
- >
- <path d="M494 141H-1V7l140-7v19h33l5 82 308 4 9 36z" fill="currentColor" />
- <path d="M219 88h-30l-1-19 31 3v16z" fill="currentColor" />
- </BottomLeft>
- <TopLeft
- key="tl"
- width="414"
- height="118"
- fill="none"
- xmlns="http://www.w3.org/2000/svg"
- animate={animateVariant}
- >
- <path
- fillRule="evenodd"
- clipRule="evenodd"
- d="M414 0H0v102h144l5-69 257-3 8-30zM0 112v-10h117v16L0 112z"
- fill="currentColor"
- />
- <path d="M184 44h-25l-1 16 26-2V44z" fill="currentColor" />
- </TopLeft>
- <BottomRight
- key="br"
- width="650"
- height="151"
- fill="none"
- xmlns="http://www.w3.org/2000/svg"
- animate={animateVariant}
- >
- <path
- fillRule="evenodd"
- clipRule="evenodd"
- d="M27 151h623V0L435 7l-5 85-134 4-3 26-261-2-5 31z"
- fill="currentColor"
- />
- <path d="M398 68v16h24l1-16h-25zM3 119l-3 16 21 3 3-19H3z" fill="currentColor" />
- </BottomRight>
- </Container>
- );
- export default PageCorners;
- const transition = testableTransition({
- type: 'spring',
- duration: 0.8,
- });
- const TopLeft = styled(motion.svg)`
- position: absolute;
- top: 0;
- left: 0;
- `;
- TopLeft.defaultProps = {
- initial: {x: '-40px', opacity: 0, originX: 0, originY: 0, scale: 'var(--corner-scale)'},
- variants: {
- none: {x: '-40px', opacity: 0},
- 'top-right': {x: '-40px', opacity: 0},
- 'top-left': {x: 0, opacity: 1},
- },
- transition,
- };
- const TopRight = styled(motion.svg)`
- position: absolute;
- top: 0;
- right: 0;
- `;
- TopRight.defaultProps = {
- initial: {
- x: '40px',
- opacity: 0,
- originX: '100%',
- originY: 0,
- scale: 'var(--corner-scale)',
- },
- variants: {
- none: {x: '40px', opacity: 0},
- 'top-left': {x: '40px', opacity: 0},
- 'top-right': {x: 0, opacity: 1},
- },
- transition,
- };
- const BottomLeft = styled(motion.svg)`
- position: absolute;
- bottom: 0;
- left: 0;
- `;
- BottomLeft.defaultProps = {
- initial: {
- x: '-40px',
- opacity: 0,
- originX: 0,
- originY: '100%',
- scale: 'var(--corner-scale)',
- },
- variants: {
- none: {x: '-40px', opacity: 0},
- 'top-left': {x: '-40px', opacity: 0},
- 'top-right': {x: 0, opacity: 1},
- },
- transition,
- };
- const BottomRight = styled(motion.svg)`
- position: absolute;
- bottom: 0;
- right: 0;
- `;
- BottomRight.defaultProps = {
- initial: {
- x: '40px',
- opacity: 0,
- originX: '100%',
- originY: '100%',
- scale: 'var(--corner-scale)',
- },
- variants: {
- none: {x: '40px', opacity: 0},
- 'top-right': {x: '40px', opacity: 0},
- 'top-left': {x: 0, opacity: 1},
- },
- transition,
- };
- const Container = styled('div')`
- pointer-events: none;
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- color: ${p => p.theme.purple200};
- opacity: 0.4;
- `;
|