增加tag组件
							parent
							
								
									8be5a50115
								
							
						
					
					
						commit
						3780ef9f6b
					
				|  | @ -16,7 +16,7 @@ | ||||||
| 
 | 
 | ||||||
| - @bd/core 针对`web components`的核心封装库, 以数据驱动, 可以更方便的开发 wc 组件 | - @bd/core 针对`web components`的核心封装库, 以数据驱动, 可以更方便的开发 wc 组件 | ||||||
| 
 | 
 | ||||||
| ### 开发进度 && 计划 (39/55) | ### 开发进度 && 计划 (40/55) | ||||||
| 
 | 
 | ||||||
| - [x] `wc-card` 卡片组件 | - [x] `wc-card` 卡片组件 | ||||||
| - [x] `wc-space` 间隔组件 | - [x] `wc-space` 间隔组件 | ||||||
|  | @ -64,7 +64,7 @@ | ||||||
| - [x] `wc-steps` 步骤条组件 | - [x] `wc-steps` 步骤条组件 | ||||||
| - [x] `wc-timeline` 时间线组件 | - [x] `wc-timeline` 时间线组件 | ||||||
| - [ ] `wc-layout` 布局组件 | - [ ] `wc-layout` 布局组件 | ||||||
| - [ ] `wc-tag` 标签组件 | - [x] `wc-tag` 标签组件 | ||||||
| - [ ] `wc-tooltip` 文字提示组件 | - [ ] `wc-tooltip` 文字提示组件 | ||||||
| - [x] `wc-popconfirm` 气泡确认框组件 | - [x] `wc-popconfirm` 气泡确认框组件 | ||||||
| - [ ] `wc-chatbubble` 聊天气泡组件 | - [ ] `wc-chatbubble` 聊天气泡组件 | ||||||
|  |  | ||||||
|  | @ -23,3 +23,4 @@ import './tabs/index.js' | ||||||
| import './timeline/index.js' | import './timeline/index.js' | ||||||
| import './result/index.js' | import './result/index.js' | ||||||
| import './progress/index.js' | import './progress/index.js' | ||||||
|  | import './tag/index.js' | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
|  * @date 2023/04/28 16:14:10 |  * @date 2023/04/28 16:14:10 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| import { css, html, Component, styleMap, svg } from '@bd/core' | import { css, html, Component, styleMap } from '@bd/core' | ||||||
| 
 | 
 | ||||||
| class Progress extends Component { | class Progress extends Component { | ||||||
|   static props = { |   static props = { | ||||||
|  | @ -57,12 +57,6 @@ class Progress extends Component { | ||||||
|       default: false, |       default: false, | ||||||
|       attribute: true |       attribute: true | ||||||
|     }, |     }, | ||||||
| 
 |  | ||||||
|     format: { |  | ||||||
|       type: Function, |  | ||||||
|       default: null, |  | ||||||
|       attribute: false |  | ||||||
|     }, |  | ||||||
|     'back-color': { |     'back-color': { | ||||||
|       type: String, |       type: String, | ||||||
|       default: '#ebeef5', |       default: '#ebeef5', | ||||||
|  | @ -89,13 +83,14 @@ class Progress extends Component { | ||||||
|       :host([type='line']) { |       :host([type='line']) { | ||||||
|         width: 100%; |         width: 100%; | ||||||
|         .progress-text { |         .progress-text { | ||||||
|           width: auto; |           width: 40px; | ||||||
|           margin-left: 5px; |           margin-left: 5px; | ||||||
|           display: inline-block; |           display: inline-block; | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|       .progress-bar { |       .progress-bar { | ||||||
|         display: inline-block; |         display: inline-block; | ||||||
|  |         width: 100%; | ||||||
|         vertical-align: middle; |         vertical-align: middle; | ||||||
|       } |       } | ||||||
|       .bar-outer, |       .bar-outer, | ||||||
|  | @ -271,7 +266,7 @@ class Progress extends Component { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return html` |     return html` | ||||||
|       <div class="progress-bar" style=${`width:${this.width}px`}> |       <div class="progress-bar"> | ||||||
|         <div |         <div | ||||||
|           class="bar-outer" |           class="bar-outer" | ||||||
|           :style=${styleMap({ |           :style=${styleMap({ | ||||||
|  |  | ||||||
|  | @ -4,7 +4,7 @@ | ||||||
|  * @date 2023/04/28 16:14:10 |  * @date 2023/04/28 16:14:10 | ||||||
|  */ |  */ | ||||||
| 
 | 
 | ||||||
| import { css, html, Component, styleMap } from '@bd/core' | import { css, html, Component } from '@bd/core' | ||||||
| import '../icon/index.js' | import '../icon/index.js' | ||||||
| 
 | 
 | ||||||
| class Result extends Component { | class Result extends Component { | ||||||
|  | @ -97,9 +97,6 @@ class Result extends Component { | ||||||
|     } |     } | ||||||
|     return this.type |     return this.type | ||||||
|   } |   } | ||||||
|   mounted() { |  | ||||||
|     console.log(this.subTitle) |  | ||||||
|   } |  | ||||||
| 
 | 
 | ||||||
|   render() { |   render() { | ||||||
|     return html` |     return html` | ||||||
|  |  | ||||||
|  | @ -0,0 +1,216 @@ | ||||||
|  | /** | ||||||
|  |  * {标签} | ||||||
|  |  * @author chensbox<chensbox@foxmail.com> | ||||||
|  |  * @date 2023/04/28 16:14:10 | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | import { css, html, Component, styleMap } from '@bd/core' | ||||||
|  | import '../icon/index.js' | ||||||
|  | 
 | ||||||
|  | const ANIMATION = { | ||||||
|  |   duration: 100, | ||||||
|  |   custom: [{ transform: 'scaleX(0)' }, { transform: 'scaleX(1)' }] | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | class Tag extends Component { | ||||||
|  |   static props = { | ||||||
|  |     type: { | ||||||
|  |       type: String, | ||||||
|  |       default: 'default' | ||||||
|  |     }, | ||||||
|  |     closable: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false | ||||||
|  |     }, | ||||||
|  |     hit: { | ||||||
|  |       type: Boolean, | ||||||
|  |       default: false | ||||||
|  |     }, | ||||||
|  |     color: '', | ||||||
|  |     size: { | ||||||
|  |       type: String, | ||||||
|  |       default: 'xl' | ||||||
|  |     }, | ||||||
|  |     effect: { | ||||||
|  |       type: String, | ||||||
|  |       default: 'light' // dark / light / plain
 | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   static styles = [ | ||||||
|  |     css` | ||||||
|  |       :host { | ||||||
|  |         position: relative; | ||||||
|  |         display: inline-block; | ||||||
|  |         text-align: center; | ||||||
|  |         box-sizing: border-box; | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       .tag { | ||||||
|  |         display: inline-block; | ||||||
|  |         box-sizing: border-box; | ||||||
|  |         width: 100%; | ||||||
|  |         font-size: 12px; | ||||||
|  |         border-radius: 4px; | ||||||
|  |         white-space: nowrap; | ||||||
|  |       } | ||||||
|  |       .close-btn { | ||||||
|  |         padding: 4px; | ||||||
|  |         display: inline-block; | ||||||
|  |         line-height: 0; | ||||||
|  |         border-radius: 50%; | ||||||
|  |         vertical-align: middle; | ||||||
|  |         &:hover { | ||||||
|  |           background: pink; | ||||||
|  |           cursor: pointer; | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     `,
 | ||||||
|  |     //尺寸
 | ||||||
|  |     css` | ||||||
|  |       @use 'sass:map'; | ||||||
|  |       $sizes: ( | ||||||
|  |         s: ( | ||||||
|  |           h: 20px, | ||||||
|  |           p: 0 5px, | ||||||
|  |           s: 0.7 | ||||||
|  |         ), | ||||||
|  |         m: ( | ||||||
|  |           h: 24px, | ||||||
|  |           p: 0 8px, | ||||||
|  |           s: 0.8 | ||||||
|  |         ), | ||||||
|  |         l: ( | ||||||
|  |           h: 28px, | ||||||
|  |           p: 0 10px, | ||||||
|  |           s: 0.8 | ||||||
|  |         ), | ||||||
|  |         xl: ( | ||||||
|  |           h: 32px, | ||||||
|  |           p: 0 10px, | ||||||
|  |           s: 1 | ||||||
|  |         ) | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       @loop $s, $v in $sizes { | ||||||
|  |         :host([size='#{$s}']) { | ||||||
|  |           height: map.get($v, 'h'); | ||||||
|  |           .tag { | ||||||
|  |             padding: map.get($v, 'p'); | ||||||
|  |             line-height: calc(map.get($v, 'h') - 2px); | ||||||
|  |           } | ||||||
|  |           .close-btn { | ||||||
|  |             --size: 10px; | ||||||
|  |             transform: scale(map.get($v, 's')); | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     `,
 | ||||||
|  |     // 配色
 | ||||||
|  |     css` | ||||||
|  |       $colors: ( | ||||||
|  |         default: 'plain', | ||||||
|  |         info: 'grey', | ||||||
|  |         success: 'green', | ||||||
|  |         warning: 'orange', | ||||||
|  |         danger: 'red' | ||||||
|  |       ); | ||||||
|  | 
 | ||||||
|  |       @loop $t, $c in $colors { | ||||||
|  |         :host([type='#{$t}']) { | ||||||
|  |           &:host([effect='light']) { | ||||||
|  |             .tag { | ||||||
|  |               background-color: var(--color-#{$c}-a); | ||||||
|  |               border: 1px solid transparent; | ||||||
|  |               @if $t == 'default' { | ||||||
|  |                 color: var(--color-blue-3); | ||||||
|  |               } @else { | ||||||
|  |                 color: var(--color-#{$c}-3); | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |             .close-btn:hover { | ||||||
|  |               color: #fff; | ||||||
|  |               @if $t == 'default' { | ||||||
|  |                 background-color: var(--color-blue-2); | ||||||
|  |               } @else { | ||||||
|  |                 background-color: var(--color-#{$c}-2); | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           &:host([effect='dark']) { | ||||||
|  |             .tag { | ||||||
|  |               @if $t == 'default' { | ||||||
|  |                 background-color: var(--color-blue-3); | ||||||
|  |                 border: 1px solid var(--color-blue-3); | ||||||
|  |               } @else { | ||||||
|  |                 background-color: var(--color-#{$c}-3); | ||||||
|  |                 border: 1px solid var(--color-#{$c}-3); | ||||||
|  |               } | ||||||
|  |               color: #fff; | ||||||
|  |             } | ||||||
|  |             .close-btn:hover { | ||||||
|  |               @if $t == 'default' { | ||||||
|  |                 background-color: var(--color-blue-1); | ||||||
|  |               } @else { | ||||||
|  |                 background-color: var(--color-#{$c}-1); | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           &:host([effect='plain']) { | ||||||
|  |             .tag { | ||||||
|  |               @if $t == 'default' { | ||||||
|  |                 color: var(--color-blue-3); | ||||||
|  |               } @else { | ||||||
|  |                 color: var(--color-#{$c}-3); | ||||||
|  |               } | ||||||
|  |               background-color: #fff; | ||||||
|  |               border: 1px solid var(--color-#{$c}-a); | ||||||
|  |             } | ||||||
|  |             .close-btn:hover { | ||||||
|  |               color: #fff; | ||||||
|  |               @if $t == 'default' { | ||||||
|  |                 background-color: var(--color-blue-1); | ||||||
|  |               } @else { | ||||||
|  |                 background-color: var(--color-#{$c}-1); | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  | 
 | ||||||
|  |           &:host([hit]) .tag { | ||||||
|  |             @if $t == 'default' { | ||||||
|  |               border: 1px solid var(--color-blue-3); | ||||||
|  |             } @else { | ||||||
|  |               border: 1px solid var(--color-#{$c}-3); | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     ` | ||||||
|  |   ] | ||||||
|  | 
 | ||||||
|  |   handleClose() { | ||||||
|  |     this.$refs.tag.$animate(true).then(() => this.$emit('close')) | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   render() { | ||||||
|  |     return html` | ||||||
|  |       <span | ||||||
|  |         class="tag" | ||||||
|  |         #animation=${ANIMATION} | ||||||
|  |         ref="tag" | ||||||
|  |         style=${styleMap({ 'background-color': this.color })} | ||||||
|  |       > | ||||||
|  |         <slot></slot> | ||||||
|  |         ${this.closable | ||||||
|  |           ? html`<div class="close-btn" @click=${this.handleClose}>
 | ||||||
|  |               <wc-icon name="close"></wc-icon> | ||||||
|  |             </div>` | ||||||
|  |           : ''} | ||||||
|  |       </span> | ||||||
|  |     ` | ||||||
|  |   } | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Tag.reg('tag') | ||||||
		Loading…
	
		Reference in New Issue