-
-
Notifications
You must be signed in to change notification settings - Fork 39
/
polygon.tsx
56 lines (52 loc) · 1.2 KB
/
polygon.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import React, { useEffect, useState } from 'react';
import styled from '@emotion/styled';
import { BaseShape } from './base';
import { clipPathMap } from './data/polygonClipPath';
import { PolygonProps } from './shapes.interface';
export const Polygon = ({
width,
height,
color,
top = ``,
position = `absolute`,
left = ``,
right = ``,
bottom = ``,
className = `anim-shape-hexagon`,
zIndex = `-1`,
breakpoints = [600, 900, 1200],
sides = 6
}: PolygonProps) => {
const [clipPath, setClipPath] = useState('');
useEffect(() => {
setClipPath(clipPathMap[sides as keyof typeof clipPathMap]);
}, [sides]);
const StyledPolygon = styled('div')`
position: inherit;
height: inherit;
width: inherit;
background: ${color};
top: inherit;
clip-path: ${clipPath};
right: inherit;
left: inherit;
bottom: inherit;
z-index: inherit;
`;
return (
<BaseShape
bottom={bottom}
breakpoints={breakpoints}
className={className}
height={height}
left={left}
position={position}
right={right}
top={top}
width={width}
zIndex={zIndex}
>
<StyledPolygon className={className} />
</BaseShape>
);
};