@@ -4,19 +4,33 @@ import styled from 'styled-components';
4
4
5
5
import { shadow } from '../common' ;
6
6
7
+ const positioningStyles = {
8
+ top : `top: -4px;
9
+ left: 50%;
10
+ transform: translate(-50%, -100%);` ,
11
+ bottom : `bottom: -4px;
12
+ left: 50%;
13
+ transform: translate(-50%, 100%);` ,
14
+ left : `left: -4px;
15
+ top: 50%;
16
+ transform: translate(-100%, -50%);` ,
17
+ right : `right: -4px;
18
+ top: 50%;
19
+ transform: translate(100%, -50%);`
20
+ } ;
21
+
7
22
const Tip = styled . span `
8
23
position: absolute;
9
- bottom: -4px;
10
- left: 50%;
24
+
11
25
z-index: 1;
12
- transform: translate(-50%, 100%);
13
26
display: ${ props => ( props . show ? 'block' : 'none' ) } ;
14
27
padding: 4px;
15
28
border: 2px solid ${ ( { theme } ) => theme . borderDarkest } ;
16
29
background: ${ ( { theme } ) => theme . tooltip } ;
17
30
box-shadow: ${ shadow } ;
18
31
text-align: center;
19
32
font-size: 1rem;
33
+ ${ props => positioningStyles [ props . position ] }
20
34
` ;
21
35
22
36
const Wrapper = styled . div `
@@ -152,7 +166,8 @@ Tooltip.defaultProps = {
152
166
onMouseEnter : undefined ,
153
167
onMouseLeave : undefined ,
154
168
onOpen : undefined ,
155
- style : { }
169
+ style : { } ,
170
+ position : 'top'
156
171
} ;
157
172
158
173
Tooltip . propTypes = {
@@ -169,7 +184,8 @@ Tooltip.propTypes = {
169
184
onMouseLeave : propTypes . func ,
170
185
onOpen : propTypes . func ,
171
186
style : propTypes . shape ( { } ) ,
172
- text : propTypes . string . isRequired
187
+ text : propTypes . string . isRequired ,
188
+ position : propTypes . oneOf ( [ 'top' , 'bottom' , 'left' , 'right' ] )
173
189
} ;
174
190
175
191
export default Tooltip ;
0 commit comments