未验证 提交 f5746bad 编写于 作者: X xiaoyatong 提交者: GitHub

feat: popover 增加交互样式,提取元素变量 (#681)

上级 dccf6b26
...@@ -227,6 +227,16 @@ The component provides the following CSS variables, which can be used to customi ...@@ -227,6 +227,16 @@ The component provides the following CSS variables, which can be used to customi
| Name | Default Value | | Name | Default Value |
| --- | --- | | --- | --- |
| --nutui-popover-border-radius`v1.4.8` | ` 8px`|
| --nutui-popover-font-size`v1.4.8` | ` $font-size-1` |
| --nutui-popover-menu-item-height`v1.4.8` | ` 30px` |
| --nutui-popover-menu-item-name-margin`v1.4.8` | ` 0px 10px` |
| --nutui-popover-menu-item-hover-background-color`v1.4.8` | ` $primary-color`|
| --nutui-popover-menu-item-hover-text-color`v1.4.8` | ` $primary-text-color`|
| --nutui-popover-menu-item-border-width`v1.4.8` | ` 80%`|
| --nutui-popover-menu-item-border-height`v1.4.8` | ` 1px`|
| --nutui-popover-menu-item-border-left`v1.4.8` | ` 10%`|
| --nutui-popover-menu-item-border-bottom`v1.4.8` | ` 2%`|
| --nutui-popover-white-background-color | ` rgba(255, 255, 255, 1)` | | --nutui-popover-white-background-color | ` rgba(255, 255, 255, 1)` |
| --nutui-popover-dark-background-color | ` rgba(75, 76, 77, 1)` | | --nutui-popover-dark-background-color | ` rgba(75, 76, 77, 1)` |
| --nutui-popover-border-bottom-color | ` rgba(229, 229, 229, 1)` | | --nutui-popover-border-bottom-color | ` rgba(229, 229, 229, 1)` |
......
...@@ -257,6 +257,16 @@ List 属性是一个由对象构成的数组,数组中的每个对象配置一 ...@@ -257,6 +257,16 @@ List 属性是一个由对象构成的数组,数组中的每个对象配置一
| 名称 | 默认值 | | 名称 | 默认值 |
| --- | --- | | --- | --- |
| --nutui-popover-border-radius`v1.4.8` | ` 8px`|
| --nutui-popover-font-size`v1.4.8` | ` $font-size-1` |
| --nutui-popover-menu-item-height`v1.4.8` | ` 30px` |
| --nutui-popover-menu-item-name-margin`v1.4.8` | ` 0px 10px` |
| --nutui-popover-menu-item-hover-background-color`v1.4.8` | ` $primary-color`|
| --nutui-popover-menu-item-hover-text-color`v1.4.8` | ` $primary-text-color`|
| --nutui-popover-menu-item-border-width`v1.4.8` | ` 80%`|
| --nutui-popover-menu-item-border-height`v1.4.8` | ` 1px`|
| --nutui-popover-menu-item-border-left`v1.4.8` | ` 10%`|
| --nutui-popover-menu-item-border-bottom`v1.4.8` | ` 2%`|
| --nutui-popover-white-background-color | ` rgba(255, 255, 255, 1)` | | --nutui-popover-white-background-color | ` rgba(255, 255, 255, 1)` |
| --nutui-popover-dark-background-color | ` rgba(75, 76, 77, 1)` | | --nutui-popover-dark-background-color | ` rgba(75, 76, 77, 1)` |
| --nutui-popover-border-bottom-color | ` rgba(229, 229, 229, 1)` | | --nutui-popover-border-bottom-color | ` rgba(229, 229, 229, 1)` |
......
...@@ -256,6 +256,16 @@ List 属性是一个由对象构成的数组,数组中的每个对象配置一 ...@@ -256,6 +256,16 @@ List 属性是一个由对象构成的数组,数组中的每个对象配置一
| 名称 | 默认值 | | 名称 | 默认值 |
| --- | --- | | --- | --- |
| --nutui-popover-border-radius`v1.4.8` | ` 8px`|
| --nutui-popover-font-size`v1.4.8` | ` $font-size-1` |
| --nutui-popover-menu-item-height`v1.4.8` | ` 30px` |
| --nutui-popover-menu-item-name-margin`v1.4.8` | ` 0px 10px` |
| --nutui-popover-menu-item-hover-background-color`v1.4.8` | ` $primary-color`|
| --nutui-popover-menu-item-hover-text-color`v1.4.8` | ` $primary-text-color`|
| --nutui-popover-menu-item-border-width`v1.4.8` | ` 80%`|
| --nutui-popover-menu-item-border-height`v1.4.8` | ` 1px`|
| --nutui-popover-menu-item-border-left`v1.4.8` | ` 10%`|
| --nutui-popover-menu-item-border-bottom`v1.4.8` | ` 2%`|
| --nutui-popover-white-background-color | ` rgba(255, 255, 255, 1)` | | --nutui-popover-white-background-color | ` rgba(255, 255, 255, 1)` |
| --nutui-popover-dark-background-color | ` rgba(75, 76, 77, 1)` | | --nutui-popover-dark-background-color | ` rgba(75, 76, 77, 1)` |
| --nutui-popover-border-bottom-color | ` rgba(229, 229, 229, 1)` | | --nutui-popover-border-bottom-color | ` rgba(229, 229, 229, 1)` |
......
...@@ -257,6 +257,16 @@ List 屬性是一個由對象構成的數組,數組中的每個對象配置一 ...@@ -257,6 +257,16 @@ List 屬性是一個由對象構成的數組,數組中的每個對象配置一
| 名稱 | 默認值 | | 名稱 | 默認值 |
| --- | --- | | --- | --- |
| --nutui-popover-border-radius`v1.4.8` | ` 8px`|
| --nutui-popover-font-size`v1.4.8` | ` $font-size-1` |
| --nutui-popover-menu-item-height`v1.4.8` | ` 30px` |
| --nutui-popover-menu-item-name-margin`v1.4.8` | ` 0px 10px` |
| --nutui-popover-menu-item-hover-background-color`v1.4.8` | ` $primary-color`|
| --nutui-popover-menu-item-hover-text-color`v1.4.8` | ` $primary-text-color`|
| --nutui-popover-menu-item-border-width`v1.4.8` | ` 80%`|
| --nutui-popover-menu-item-border-height`v1.4.8` | ` 1px`|
| --nutui-popover-menu-item-border-left`v1.4.8` | ` 10%`|
| --nutui-popover-menu-item-border-bottom`v1.4.8` | ` 2%`|
| --nutui-popover-white-background-color | ` rgba(255, 255, 255, 1)` | | --nutui-popover-white-background-color | ` rgba(255, 255, 255, 1)` |
| --nutui-popover-dark-background-color | ` rgba(75, 76, 77, 1)` | | --nutui-popover-dark-background-color | ` rgba(75, 76, 77, 1)` |
| --nutui-popover-border-bottom-color | ` rgba(229, 229, 229, 1)` | | --nutui-popover-border-bottom-color | ` rgba(229, 229, 229, 1)` |
......
...@@ -20,18 +20,79 @@ ...@@ -20,18 +20,79 @@
.popover-arrow { .popover-arrow {
position: absolute; position: absolute;
z-index: -1;
width: 0; width: 0;
height: 0; height: 0;
border: 8px solid transparent; border: 8px solid transparent;
} }
// top .popover-content {
z-index: 12;
background: $popover-white-background-color;
border-radius: $popover-border-radius;
opacity: 1;
font-size: $popover-font-size;
font-weight: normal;
color: $popover-primary-text-color;
position: absolute;
box-shadow: 0 2px 12px #3232331f;
opacity: 0;
transition: opacity 0.1s;
&.popover-content-show {
opacity: 1;
}
.popover-menu-item {
position: relative;
padding: 0 8px;
display: flex;
align-items: center;
height: $popover-menu-item-height;
.popover-menu-item-name {
margin: $popover-menu-item-name-margin;
width: 100%;
}
&:first-child {
border-radius: $popover-border-radius $popover-border-radius 0 0;
}
&:last-child {
border-bottom: none;
border-radius: 0 0 $popover-border-radius $popover-border-radius;
&::after {
height: 0;
}
}
&:hover {
cursor: pointer;
color: $popover-menu-item-hover-text-color;
background-color: $popover-menu-item-hover-background-color;
}
&::after {
position: absolute;
left: $popover-menu-item-border-left;
bottom: $popover-menu-item-border-bottom;
content: ' ';
display: inline-block;
width: $popover-menu-item-border-width;
height: $popover-menu-item-border-height;
background-color: $popover-border-bottom-color;
}
}
}
// top
.popover-arrow-top { .popover-arrow-top {
bottom: 0; bottom: 0;
border-top-color: $popover-white-background-color; border-top-color: $popover-white-background-color;
border-bottom-width: 0; border-bottom-width: 0;
margin-bottom: -8px; margin-bottom: -7px;
} }
.popover-content--top { .popover-content--top {
...@@ -109,7 +170,7 @@ ...@@ -109,7 +170,7 @@
top: 0px; top: 0px;
border-bottom-color: $popover-white-background-color; border-bottom-color: $popover-white-background-color;
border-top-width: 0; border-top-width: 0;
margin-top: -8px; margin-top: -7px;
} }
.popover-arrow--bottom { .popover-arrow--bottom {
...@@ -173,51 +234,15 @@ ...@@ -173,51 +234,15 @@
transform: translateY(0%); transform: translateY(0%);
} }
.popover-content { .popover-menu-item.disabled {
z-index: 12;
background: $popover-white-background-color;
border-radius: 5px;
opacity: 1;
font-size: 14px;
font-family: PingFangSC;
font-weight: normal;
color: $popover-primary-text-color;
position: absolute;
box-shadow: 0 2px 12px #3232331f;
opacity: 0;
transition: opacity 0.1s;
&.popover-content-show {
opacity: 1;
}
.popover-menu-item {
display: flex;
align-items: center;
padding-bottom: 8px;
margin: 8px;
border-bottom: 1px solid $popover-border-bottom-color;
&:first-child {
margin-top: 15px;
}
&:last-child {
margin-bottom: 2px;
border-bottom: none;
}
.popover-menu-item-name {
margin-right: 12px;
margin-left: 8px;
width: 100%;
}
}
}
.disabled {
color: $popover-disable-color; color: $popover-disable-color;
cursor: not-allowed; cursor: not-allowed;
&:hover {
cursor: not-allowed;
color: $popover-disable-color;
background-color: $popover-white-background-color;
}
} }
} }
......
...@@ -5,6 +5,7 @@ import React, { ...@@ -5,6 +5,7 @@ import React, {
useRef, useRef,
useState, useState,
} from 'react' } from 'react'
import { ITouchEvent } from '@tarojs/components'
import Trigger from './Trigger' import Trigger from './Trigger'
import Icon from '@/packages/icon/index.taro' import Icon from '@/packages/icon/index.taro'
import Overlay from '@/packages/overlay/index.taro' import Overlay from '@/packages/overlay/index.taro'
...@@ -12,8 +13,6 @@ import { getRectByTaro } from '../../utils/useClientRect' ...@@ -12,8 +13,6 @@ import { getRectByTaro } from '../../utils/useClientRect'
import { BasicComponent, ComponentDefaults } from '@/utils/typings' import { BasicComponent, ComponentDefaults } from '@/utils/typings'
import { ITouchEvent } from '@tarojs/components'
export type PopoverTheme = 'light' | 'dark' export type PopoverTheme = 'light' | 'dark'
export type PopoverLocation = export type PopoverLocation =
...@@ -164,31 +163,37 @@ export const Popover: FunctionComponent< ...@@ -164,31 +163,37 @@ export const Popover: FunctionComponent<
<div className={`${popoverContent}`} style={getStyle()}> <div className={`${popoverContent}`} style={getStyle()}>
<div className={`${popoverArrow}`} /> <div className={`${popoverArrow}`} />
{Array.isArray(children) ? children[1] : ''} {Array.isArray(children) ? children[1] : ''}
{list.map((item: List, i: number) => {
return ( <div>
<div {' '}
key={item.name} {list.map((item: List, i: number) => {
className={`popover-menu-item ${ return (
item.disabled ? 'disabled' : '' <div
}`} key={item.name}
onClick={() => { className={`popover-menu-item ${
handleChoose(item, i) item.disabled ? 'disabled' : ''
}} }`}
> onClick={() => {
{item.icon ? ( handleChoose(item, i)
<Icon }}
classPrefix={iconClassPrefix} >
fontClassName={iconFontClassName} {item.icon ? (
className="popover-menu-item-img" <Icon
name={item.icon} classPrefix={iconClassPrefix}
/> fontClassName={iconFontClassName}
) : ( className="popover-menu-item-img"
'' name={item.icon}
)} />
<div className="popover-menu-item-name">{item.name}</div> ) : (
</div> ''
) )}
})} <div className="popover-menu-item-name">
{item.name}
</div>
</div>
)
})}
</div>
</div> </div>
) : null} ) : null}
</div> </div>
......
...@@ -161,31 +161,35 @@ export const Popover: FunctionComponent< ...@@ -161,31 +161,35 @@ export const Popover: FunctionComponent<
<div className={`${popoverContent}`} style={getStyle()}> <div className={`${popoverContent}`} style={getStyle()}>
<div className={`${popoverArrow}`} /> <div className={`${popoverArrow}`} />
{Array.isArray(children) ? children[1] : ''} {Array.isArray(children) ? children[1] : ''}
{list.map((item: List, i: number) => { <div>
return ( {list.map((item: List, i: number) => {
<div return (
key={item.name} <div
className={`popover-menu-item ${ key={item.name}
item.disabled ? 'disabled' : '' className={`popover-menu-item ${
}`} item.disabled ? 'disabled' : ''
onClick={() => { }`}
handleChoose(item, i) onClick={() => {
}} handleChoose(item, i)
> }}
{item.icon ? ( >
<Icon {item.icon ? (
classPrefix={iconClassPrefix} <Icon
fontClassName={iconFontClassName} classPrefix={iconClassPrefix}
className="popover-menu-item-img" fontClassName={iconFontClassName}
name={item.icon} className="popover-menu-item-img"
/> name={item.icon}
) : ( />
'' ) : (
)} ''
<div className="popover-menu-item-name">{item.name}</div> )}
</div> <div className="popover-menu-item-name">
) {item.name}
})} </div>
</div>
)
})}
</div>
</div> </div>
) : null} ) : null}
</div> </div>
......
...@@ -1329,6 +1329,37 @@ $badge-dot-border-radius: var(--nutui-badge-dot-border-radius, 7px) !default; ...@@ -1329,6 +1329,37 @@ $badge-dot-border-radius: var(--nutui-badge-dot-border-radius, 7px) !default;
$badge-dot-padding: var(--nutui-badge-dot-padding, 0px) !default; $badge-dot-padding: var(--nutui-badge-dot-padding, 0px) !default;
//popover(✅) //popover(✅)
$popover-border-radius: var(--nutui-popover-border-radius, 8px) !default;
$popover-font-size: var(--nutui-popover-font-size, $font-size-1) !default;
$popover-menu-item-height: var(--nutui-popover-menu-item-height, 30px) !default;
$popover-menu-item-name-margin: var(
--nutui-popover-menu-item-name-margin,
0px 10px
) !default;
$popover-menu-item-hover-background-color: var(
--nutui-popover-menu-item-hover-background-color,
$primary-color
) !default;
$popover-menu-item-hover-text-color: var(
--nutui-popover-menu-item-hover-text-color,
$primary-text-color
) !default;
$popover-menu-item-border-width: var(
--nutui-popover-menu-item-border-width,
80%
) !default;
$popover-menu-item-border-height: var(
--nutui-popover-menu-item-border-height,
1px
) !default;
$popover-menu-item-border-left: var(
--nutui-popover-menu-item-border-left,
10%
) !default;
$popover-menu-item-border-bottom: var(
--nutui-popover-menu-item-border-bottom,
2%
) !default;
$popover-white-background-color: var( $popover-white-background-color: var(
--nutui-popover-white-background-color, --nutui-popover-white-background-color,
rgba(255, 255, 255, 1) rgba(255, 255, 255, 1)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册