Skip to content

Commit

Permalink
feat: ✨ implement divider
Browse files Browse the repository at this point in the history
  • Loading branch information
huang-xiao-jian committed May 29, 2020
1 parent dc18619 commit d2a75e1
Show file tree
Hide file tree
Showing 5 changed files with 162 additions and 0 deletions.
57 changes: 57 additions & 0 deletions packages/Divider/Divider.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
.van-divider {
display: flex;
align-items: center;
border-style: solid;
border-width: 0;
margin: 16px 0;
margin: var(--divider-margin, 16px 0);
color: #969799;
color: var(--divider-text-color, #969799);
font-size: 14px;
font-size: var(--divider-font-size, 14px);
line-height: 24px;
line-height: var(--divider-line-height, 24px);
border-color: #ebedf0;
border-color: var(--divider-border-color, #ebedf0);
}
.van-divider::before,
.van-divider::after {
display: block;
flex: 1;
box-sizing: border-box;
height: 1px;
border-color: inherit;
border-style: inherit;
border-width: 1px 0 0;
}
.van-divider::before {
content: '';
}
.van-divider--hairline::before,
.van-divider--hairline::after {
transform: scaleY(0.5);
}
.van-divider--dashed {
border-style: dashed;
}
.van-divider--center::before,
.van-divider--left::before,
.van-divider--right::before {
margin-right: 16px;
margin-right: var(--divider-content-padding, 16px);
}
.van-divider--center::after,
.van-divider--left::after,
.van-divider--right::after {
content: '';
margin-left: 16px;
margin-left: var(--divider-content-padding, 16px);
}
.van-divider--left::before {
max-width: 10%;
max-width: var(--divider-content-left-width, 10%);
}
.van-divider--right::after {
max-width: 10%;
max-width: var(--divider-content-right-width, 10%);
}
60 changes: 60 additions & 0 deletions packages/Divider/Divider.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// packages
import React, { FunctionComponent, CSSProperties } from 'react';
import clsx from 'clsx';
import { View } from 'remax/wechat';
// internal
import withDefaultProps from '../tools/with-default-props-advance';
import './Divider.css';

// 默认值填充属性
interface NeutralDividerProps {
dashed: boolean;
hairline: boolean;
}

interface ExogenousDividerProps {
contentPostion?: 'left' | 'center' | 'right';
// 自定义样式
style?: CSSProperties;
// 容器类名,用以覆盖内部
className?: string;
}

type DividerProps = NeutralDividerProps & ExogenousDividerProps;

const DefaultDividerProps: NeutralDividerProps = {
dashed: false,
hairline: false,
};

const Divider: FunctionComponent<DividerProps> = (props) => {
const {
style,
className,
dashed,
hairline,
contentPostion,
children,
} = props;
const classnames = {
container: clsx(
className,
'van-divider',
contentPostion && `van-divider--${contentPostion}`,
{
'van-divider--dashed': dashed,
'van-divider--hairline': hairline,
}
),
};

return (
<View style={style} className={classnames.container}>
{children}
</View>
);
};

export default withDefaultProps<ExogenousDividerProps, NeutralDividerProps>(
DefaultDividerProps
)(Divider);
4 changes: 4 additions & 0 deletions packages/Divider/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/**
* @description - nothing but export component
*/
export { default } from './Divider';
1 change: 1 addition & 0 deletions public/app.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { AppConfig } from 'remax/wechat';

const config: AppConfig = {
pages: [
'pages/divider/index',
'pages/grid/index',
'pages/image/index',
'pages/cell/index',
Expand Down
40 changes: 40 additions & 0 deletions public/pages/divider/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
// packages
import * as React from 'react';
import { View, Text } from 'remax/wechat';

// internal
import Divider from '../../../packages/Divider';

export default () => {
return (
<View className="demo-block">
<Text className="demo-block__title">基础用法</Text>
<View className="demo-block__content">
<Divider />
</View>
<Text className="demo-block__title">使用 hairline</Text>
<View className="demo-block__content">
<Divider hairline />
</View>
<Text className="demo-block__title">虚线</Text>
<View className="demo-block__content">
<Divider dashed />
</View>
<Text className="demo-block__title">文本位置</Text>
<View className="demo-block__content">
<Divider contentPostion="left">(づ ̄3 ̄)</Divider>
<Divider contentPostion="center">(づ ̄3 ̄)</Divider>
<Divider contentPostion="right">(づ ̄3 ̄)</Divider>
</View>
<Text className="demo-block__title">自定义样式</Text>
<View className="demo-block__content">
<Divider
style={{ color: '#1989fa', borderColor: '#1989fa', fontSize: '18px' }}
contentPostion="center"
>
(づ ̄3 ̄)
</Divider>
</View>
</View>
);
};

0 comments on commit d2a75e1

Please sign in to comment.