Skip to content

Commit 8d3d323

Browse files
authored
refactor(popover): 重构popover组件样式 #845 (#868)
1 parent f4f1206 commit 8d3d323

File tree

3 files changed

+116
-9
lines changed

3 files changed

+116
-9
lines changed

packages/react-popover/src/index.tsx

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import OverlayTrigger, { OverlayTriggerProps } from '@uiw/react-overlay-trigger';
33
import Confirm from './Confirm';
4-
import './style/index.less';
4+
import { OverlayTriggerPopover, OverlayTriggerPopoverContent, OverlayTriggerPopoverArrow } from './style/index';
55

66
export interface PopoverProps extends OverlayTriggerProps {
77
content?: React.ReactNode;
@@ -20,7 +20,7 @@ export default class Popover extends React.Component<PopoverProps> {
2020
renderArrow = () => {
2121
const { prefixCls } = this.props;
2222
return (
23-
<div className={`${prefixCls}-arrow`}>
23+
<OverlayTriggerPopoverArrow className={`${prefixCls}-arrow`}>
2424
<svg viewBox="0 0 30 30">
2525
<path
2626
fillOpacity="0.2"
@@ -31,19 +31,22 @@ export default class Popover extends React.Component<PopoverProps> {
3131
d="M8.787 7.036c1.22-1.125 2.21-3.376 2.21-5.03V0v30-2.005c0-1.654-.983-3.9-2.21-5.03l-7.183-6.616c-.81-.746-.802-1.96 0-2.7l7.183-6.614z"
3232
/>
3333
</svg>
34-
</div>
34+
</OverlayTriggerPopoverArrow>
3535
);
3636
};
3737
render() {
3838
const { prefixCls, className, content, visibleArrow, ...other } = this.props;
3939
const cls = [prefixCls, className, !visibleArrow ? 'no-arrow' : null].filter(Boolean).join(' ').trim();
4040
return (
41-
<OverlayTrigger
41+
<OverlayTriggerPopover
42+
as={OverlayTrigger}
4243
{...other}
4344
overlay={
4445
<div className={cls}>
4546
{visibleArrow && this.renderArrow()}
46-
<div className={`${prefixCls}-inner`}>{this.props.content}</div>
47+
<OverlayTriggerPopoverContent className={`${prefixCls}-inner`}>
48+
{this.props.content}
49+
</OverlayTriggerPopoverContent>
4750
</div>
4851
}
4952
>
@@ -52,7 +55,7 @@ export default class Popover extends React.Component<PopoverProps> {
5255
) : (
5356
<span style={{ display: 'block', writingMode: 'vertical-rl' }}>{this.props.children}</span>
5457
)}
55-
</OverlayTrigger>
58+
</OverlayTriggerPopover>
5659
);
5760
}
5861
}
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import styled, { css } from 'styled-components';
2+
import { PopoverProps } from '../index';
3+
4+
interface PopoverWarpProps extends PopoverProps {
5+
defaultTheme?: Record<string, string | number>;
6+
}
7+
export const OverlayTriggerPopoverArrow = styled.div<PopoverWarpProps>`
8+
position: absolute;
9+
width: 30px;
10+
height: 30px;
11+
border-color: transparent;
12+
z-index: 21;
13+
`;
14+
15+
export const OverlayTriggerPopover = styled.div<PopoverWarpProps>`
16+
position: relative;
17+
display: inline-block;
18+
outline: 0;
19+
20+
${(props) =>
21+
['right', 'rightTop', 'rightBottom'].includes(props.placement || '') &&
22+
css`
23+
& ${OverlayTriggerPopoverArrow} {
24+
left: 2px;
25+
margin-top: -15px;
26+
top: 50%;
27+
}
28+
`}
29+
30+
${(props) =>
31+
['left', 'leftTop', 'leftBottom'].includes(props.placement || '') &&
32+
css`
33+
& ${OverlayTriggerPopoverArrow} {
34+
transform: rotate(180deg);
35+
margin-top: -15px;
36+
right: 2px;
37+
top: 50%;
38+
}
39+
`}
40+
41+
${(props) =>
42+
['leftTop', 'rightTop'].includes(props.placement || '') &&
43+
css`
44+
& ${OverlayTriggerPopoverArrow} {
45+
top: 15px;
46+
}
47+
`}
48+
49+
${(props) =>
50+
['leftBottom', 'rightBottom'].includes(props.placement || '') &&
51+
css`
52+
& ${OverlayTriggerPopoverArrow} {
53+
bottom: 0;
54+
top: auto;
55+
}
56+
`}
57+
58+
${(props) =>
59+
['top', 'topLeft', 'topRight'].includes(props.placement || '') &&
60+
css`
61+
& ${OverlayTriggerPopoverArrow} {
62+
transform: rotate(-90deg);
63+
bottom: 2px;
64+
left: 50%;
65+
margin-left: -15px;
66+
}
67+
`}
68+
69+
${(props) =>
70+
['bottom', 'bottomLeft', 'bottomRight'].includes(props.placement || '') &&
71+
css`
72+
& ${OverlayTriggerPopoverArrow} {
73+
transform: rotate(90deg);
74+
left: 50%;
75+
margin-left: -15px;
76+
top: 2px;
77+
}
78+
`}
79+
80+
${(props) =>
81+
['bottomLeft', 'topLeft'].includes(props.placement || '') &&
82+
css`
83+
& ${OverlayTriggerPopoverArrow} {
84+
left: 15px;
85+
}
86+
`}
87+
88+
${(props) =>
89+
['bottomRight', 'topRight'].includes(props.placement || '') &&
90+
css`
91+
& ${OverlayTriggerPopoverArrow} {
92+
right: 0;
93+
left: auto;
94+
}
95+
`}
96+
`;
97+
98+
export const OverlayTriggerPopoverContent = styled.div<PopoverWarpProps>`
99+
font-size: 12px;
100+
display: block;
101+
text-align: left;
102+
text-decoration: none;
103+
background-color: #fff;
104+
border-radius: 4px;
105+
min-height: 23px;
106+
box-shadow: 'rgba(16, 22, 26, 0.1) 0px 0px 0px 1px, rgba(16, 22, 26, 0.2) 0px 2px 4px,rgba(16, 22, 26, 0.2) 0px 8px 24px';
107+
`;

packages/react-textarea/src/index.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,6 @@ export interface TextareaProps extends IProps, HTMLTextProps {}
77

88
export default React.forwardRef<HTMLTextAreaElement, TextareaProps>((props, ref) => {
99
const { prefixCls = 'w-textarea', className, ...restProps } = props;
10-
{
11-
console.log('1111', props);
12-
}
1310
return (
1411
<TextareaWarp className={[prefixCls, className].filter(Boolean).join(' ').trim()} {...restProps} ref={ref}>
1512
{props.children}

0 commit comments

Comments
 (0)