diff --git a/components/index.js b/components/index.js index eb40554f5..1d7a69880 100644 --- a/components/index.js +++ b/components/index.js @@ -17,3 +17,5 @@ export { default as Pagination } from './pagination' export { default as Row } from './grid/Row' export { default as Col } from './grid/Col' + +export { default as Tag } from './tag' diff --git a/components/style.js b/components/style.js index 12fa2a160..bd87c8bbc 100644 --- a/components/style.js +++ b/components/style.js @@ -3,3 +3,4 @@ import './icon/style' import './radio/style' import './checkbox/style' import './grid/style' +import './tag/style' diff --git a/components/tag/CheckableTag.vue b/components/tag/CheckableTag.vue new file mode 100644 index 000000000..f3963a815 --- /dev/null +++ b/components/tag/CheckableTag.vue @@ -0,0 +1,38 @@ + + diff --git a/components/tag/Tag.vue b/components/tag/Tag.vue new file mode 100644 index 000000000..7d339a7ce --- /dev/null +++ b/components/tag/Tag.vue @@ -0,0 +1,77 @@ + + diff --git a/components/tag/demo/basic.vue b/components/tag/demo/basic.vue new file mode 100644 index 000000000..dd4d12e00 --- /dev/null +++ b/components/tag/demo/basic.vue @@ -0,0 +1,25 @@ + + diff --git a/components/tag/demo/checkable.vue b/components/tag/demo/checkable.vue new file mode 100644 index 000000000..c37e55486 --- /dev/null +++ b/components/tag/demo/checkable.vue @@ -0,0 +1,28 @@ + + diff --git a/components/tag/demo/colorful.vue b/components/tag/demo/colorful.vue new file mode 100644 index 000000000..5ed5cde25 --- /dev/null +++ b/components/tag/demo/colorful.vue @@ -0,0 +1,29 @@ + + diff --git a/components/tag/demo/control.vue b/components/tag/demo/control.vue new file mode 100644 index 000000000..db9be2e58 --- /dev/null +++ b/components/tag/demo/control.vue @@ -0,0 +1,75 @@ + + diff --git a/components/tag/demo/hot-tags.vue b/components/tag/demo/hot-tags.vue new file mode 100644 index 000000000..7546913df --- /dev/null +++ b/components/tag/demo/hot-tags.vue @@ -0,0 +1,42 @@ + + diff --git a/components/tag/demo/index.vue b/components/tag/demo/index.vue new file mode 100644 index 000000000..9a8ae3518 --- /dev/null +++ b/components/tag/demo/index.vue @@ -0,0 +1,30 @@ + + diff --git a/components/tag/index.js b/components/tag/index.js new file mode 100644 index 000000000..98791e3b9 --- /dev/null +++ b/components/tag/index.js @@ -0,0 +1,6 @@ +import Tag from './Tag.vue' +import CheckableTag from './CheckableTag.vue' + +Tag.CheckableTag = CheckableTag +export default Tag + diff --git a/components/tag/style/index.js b/components/tag/style/index.js new file mode 100644 index 000000000..cf31ed80f --- /dev/null +++ b/components/tag/style/index.js @@ -0,0 +1,2 @@ +import '../../style/index.less' +import './index.less' diff --git a/components/tag/style/index.less b/components/tag/style/index.less new file mode 100644 index 000000000..dea1715cd --- /dev/null +++ b/components/tag/style/index.less @@ -0,0 +1,122 @@ +@import "../../style/themes/default"; +@import "../../style/mixins/index"; + +@tag-prefix-cls: ~"@{ant-prefix}-tag"; + +.@{tag-prefix-cls} { + display: inline-block; + line-height: 20px; + height: 22px; + padding: 0 8px; + border-radius: @border-radius-base; + border: @border-width-base @border-style-base @border-color-split; + background: @tag-default-bg; + font-size: @tag-font-size; + transition: all 0.3s @ease-out; + opacity: 1; + margin-right: 8px; + cursor: pointer; + white-space: nowrap; + + &:hover { + opacity: 0.85; + } + + &, + a, + a:hover { + color: @tag-default-color; + } + + &-text { + a:first-child:last-child { + display: inline-block; + margin: 0 -8px; + padding: 0 8px; + } + } + + .@{iconfont-css-prefix}-cross { + .iconfont-size-under-12px(10px); + cursor: pointer; + font-weight: bold; + margin-left: 3px; + transition: all 0.3s @ease-out; + opacity: 0.66; + + &:hover { + opacity: 1; + } + } + + &-has-color { + border-color: transparent; + &, + a, + a:hover, + .@{iconfont-css-prefix}-cross, + .@{iconfont-css-prefix}-cross:hover { + color: #fff; + } + } + + &-checkable { + background-color: transparent; + border-color: transparent; + &:not(&-checked):hover { + color: @primary-color; + } + &:active, + &-checked { + color: #fff; + } + &-checked { + background-color: @primary-6; + } + &:active { + background-color: @primary-7; + } + } + + &-close { + width: 0 !important; + padding: 0; + margin: 0; + } + + &-zoom-enter, + &-zoom-enter-active { + animation: antFadeIn 0.2s @ease-in-out-circ; + animation-fill-mode: both; + } + + &-zoom-leave-active { + animation: antZoomOut 0.3s @ease-in-out-circ; + animation-fill-mode: both; + width: 0 !important; + padding: 0; + margin: 0; + } + + @colors: pink, red, orange, yellow, cyan, green, blue, purple; + + // mixin to iterate over colors and create CSS class for each one + .make-color-classes(@i: length(@colors)) when (@i > 0) { + .make-color-classes(@i - 1); + @color: extract(@colors, @i); + @lightColor: "@{color}-2"; + @darkColor: "@{color}-6"; + &-@{color} { + color: @@darkColor; + background: @@lightColor; + border-color: @@lightColor; + } + &-@{color}-inverse { + background: @@darkColor; + border-color: @@darkColor; + color: #fff; + } + } + + .make-color-classes(); +}