vdesign-ui 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (195) hide show
  1. package/dist/components/actionbar/index.js +8 -0
  2. package/dist/components/actionbar/index.vue +39 -0
  3. package/dist/components/actionbar/style.less +44 -0
  4. package/dist/components/actionbar-cell/index.js +7 -0
  5. package/dist/components/actionbar-cell/index.vue +38 -0
  6. package/dist/components/actions/index.js +7 -0
  7. package/dist/components/actions/index.vue +76 -0
  8. package/dist/components/actions/style.less +109 -0
  9. package/dist/components/actions-cell/index.js +7 -0
  10. package/dist/components/actions-cell/index.vue +94 -0
  11. package/dist/components/actions-cell/style.less +39 -0
  12. package/dist/components/activityviews/index.js +8 -0
  13. package/dist/components/activityviews/index.vue +192 -0
  14. package/dist/components/activityviews/style.less +152 -0
  15. package/dist/components/badge/index.js +8 -0
  16. package/dist/components/badge/index.vue +49 -0
  17. package/dist/components/badge/style.less +54 -0
  18. package/dist/components/button/index.js +8 -0
  19. package/dist/components/button/index.vue +93 -0
  20. package/dist/components/button/style.less +558 -0
  21. package/dist/components/calendar/end.png +0 -0
  22. package/dist/components/calendar/index-element.vue +84 -0
  23. package/dist/components/calendar/index.js +8 -0
  24. package/dist/components/calendar/index.vue +52 -0
  25. package/dist/components/calendar/start.png +0 -0
  26. package/dist/components/calendar/style.less +138 -0
  27. package/dist/components/checkbox/index.js +8 -0
  28. package/dist/components/checkbox/index.vue +161 -0
  29. package/dist/components/checkbox/style.less +289 -0
  30. package/dist/components/checkbox-group/index.js +7 -0
  31. package/dist/components/checkbox-group/index.vue +69 -0
  32. package/dist/components/common/state/index.vue +33 -0
  33. package/dist/components/common/state/style.less +48 -0
  34. package/dist/components/data-list/index.js +10 -0
  35. package/dist/components/data-list/index.vue +19 -0
  36. package/dist/components/data-list/style.less +623 -0
  37. package/dist/components/datetime-picker/index.js +8 -0
  38. package/dist/components/datetime-picker/index.vue +37 -0
  39. package/dist/components/datetime-picker/style.less +24 -0
  40. package/dist/components/dialog/index.js +8 -0
  41. package/dist/components/dialog/index.vue +164 -0
  42. package/dist/components/dialog/overlay-manager.js +18 -0
  43. package/dist/components/dialog/style.less +139 -0
  44. package/dist/components/divider/index.js +8 -0
  45. package/dist/components/divider/index.vue +54 -0
  46. package/dist/components/divider/style.less +92 -0
  47. package/dist/components/dropdown/index.js +8 -0
  48. package/dist/components/dropdown/index.vue +218 -0
  49. package/dist/components/dropdown/style.less +432 -0
  50. package/dist/components/empty/404-dark.png +0 -0
  51. package/dist/components/empty/404.png +0 -0
  52. package/dist/components/empty/index.js +8 -0
  53. package/dist/components/empty/index.vue +138 -0
  54. package/dist/components/empty/network-dark.png +0 -0
  55. package/dist/components/empty/network.png +0 -0
  56. package/dist/components/empty/nocoupons-dark.png +0 -0
  57. package/dist/components/empty/nocoupons.png +0 -0
  58. package/dist/components/empty/nodata-dark.png +0 -0
  59. package/dist/components/empty/nodata.png +0 -0
  60. package/dist/components/empty/nomargin-dark.png +0 -0
  61. package/dist/components/empty/nomargin.png +0 -0
  62. package/dist/components/empty/nonotice-dark.png +0 -0
  63. package/dist/components/empty/nonotice.png +0 -0
  64. package/dist/components/empty/noocomments-dark.png +0 -0
  65. package/dist/components/empty/noocomments.png +0 -0
  66. package/dist/components/empty/noorders-dark.png +0 -0
  67. package/dist/components/empty/noorders.png +0 -0
  68. package/dist/components/empty/noposition-dark.png +0 -0
  69. package/dist/components/empty/noposition.png +0 -0
  70. package/dist/components/empty/nosearch-dark.png +0 -0
  71. package/dist/components/empty/nosearch.png +0 -0
  72. package/dist/components/empty/style.less +61 -0
  73. package/dist/components/footer/index.js +7 -0
  74. package/dist/components/footer/index.vue +33 -0
  75. package/dist/components/footer/style.less +21 -0
  76. package/dist/components/footnav/index.js +7 -0
  77. package/dist/components/footnav/index.vue +93 -0
  78. package/dist/components/footnav/style.less +23 -0
  79. package/dist/components/footnav-item/index.js +7 -0
  80. package/dist/components/footnav-item/index.vue +50 -0
  81. package/dist/components/footnav-item/style.less +39 -0
  82. package/dist/components/form/index.js +7 -0
  83. package/dist/components/form/index.vue +12 -0
  84. package/dist/components/headnav/index.js +7 -0
  85. package/dist/components/headnav/index.vue +185 -0
  86. package/dist/components/headnav/style.less +232 -0
  87. package/dist/components/icon/font/iconfont.css +163 -0
  88. package/dist/components/icon/font/iconfont.js +6 -0
  89. package/dist/components/icon/index.js +9 -0
  90. package/dist/components/icon/index.vue +96 -0
  91. package/dist/components/icon/style.less +44 -0
  92. package/dist/components/input/calcTextareaHeight.js +162 -0
  93. package/dist/components/input/index.js +8 -0
  94. package/dist/components/input/index.vue +345 -0
  95. package/dist/components/input/style.less +471 -0
  96. package/dist/components/list/index.js +8 -0
  97. package/dist/components/list/index.vue +152 -0
  98. package/dist/components/list/style.less +213 -0
  99. package/dist/components/loading/index.js +7 -0
  100. package/dist/components/loading/index.vue +68 -0
  101. package/dist/components/loading/style.less +54 -0
  102. package/dist/components/mixins/clickoutside.js +81 -0
  103. package/dist/components/mixins/dom.js +41 -0
  104. package/dist/components/mixins/languageMixin.js +41 -0
  105. package/dist/components/mixins/outlineConfigPlugin.js +45 -0
  106. package/dist/components/mixins/router-link.js +23 -0
  107. package/dist/components/mixins/themeMixin.js +43 -0
  108. package/dist/components/noticebar/index.js +8 -0
  109. package/dist/components/noticebar/index.vue +258 -0
  110. package/dist/components/noticebar/style.less +328 -0
  111. package/dist/components/overlay/index.js +8 -0
  112. package/dist/components/overlay/index.vue +184 -0
  113. package/dist/components/overlay/style.less +23 -0
  114. package/dist/components/pagebreak/index.js +7 -0
  115. package/dist/components/pagebreak/index.vue +67 -0
  116. package/dist/components/pagebreak/style.less +42 -0
  117. package/dist/components/password/index.js +8 -0
  118. package/dist/components/password/index.vue +60 -0
  119. package/dist/components/popover/index.js +8 -0
  120. package/dist/components/popover/index.vue +100 -0
  121. package/dist/components/popover/style.less +346 -0
  122. package/dist/components/popover/vue-popover.vue +314 -0
  123. package/dist/components/popup/index.js +7 -0
  124. package/dist/components/popup/index.vue +243 -0
  125. package/dist/components/radio/index.js +8 -0
  126. package/dist/components/radio/index.vue +184 -0
  127. package/dist/components/radio/style.less +294 -0
  128. package/dist/components/radio-group/index.js +6 -0
  129. package/dist/components/radio-group/index.vue +58 -0
  130. package/dist/components/result/completed-dark.png +0 -0
  131. package/dist/components/result/completed.png +0 -0
  132. package/dist/components/result/error-dark.png +0 -0
  133. package/dist/components/result/error.png +0 -0
  134. package/dist/components/result/index.js +8 -0
  135. package/dist/components/result/index.vue +73 -0
  136. package/dist/components/result/style.less +44 -0
  137. package/dist/components/result/wait-dark.png +0 -0
  138. package/dist/components/result/wait.png +0 -0
  139. package/dist/components/search/index.js +8 -0
  140. package/dist/components/search/index.vue +66 -0
  141. package/dist/components/selector/index.js +8 -0
  142. package/dist/components/selector/index.vue +161 -0
  143. package/dist/components/selector/style.less +484 -0
  144. package/dist/components/skeleton/index.js +7 -0
  145. package/dist/components/skeleton/index.vue +206 -0
  146. package/dist/components/skeleton/style.less +197 -0
  147. package/dist/components/slider/draggable.js +49 -0
  148. package/dist/components/slider/index.js +7 -0
  149. package/dist/components/slider/index.vue +167 -0
  150. package/dist/components/slider/style.less +100 -0
  151. package/dist/components/slider/utils.js +60 -0
  152. package/dist/components/step/index.js +7 -0
  153. package/dist/components/step/index.vue +48 -0
  154. package/dist/components/step/style.less +58 -0
  155. package/dist/components/step-item/index.js +7 -0
  156. package/dist/components/step-item/index.vue +126 -0
  157. package/dist/components/step-item/style.less +362 -0
  158. package/dist/components/stepper/index.js +8 -0
  159. package/dist/components/stepper/index.vue +146 -0
  160. package/dist/components/style/index.vue +42 -0
  161. package/dist/components/switch/index.js +8 -0
  162. package/dist/components/switch/index.vue +72 -0
  163. package/dist/components/switch/style.less +56 -0
  164. package/dist/components/tab/index.js +7 -0
  165. package/dist/components/tab/index.vue +53 -0
  166. package/dist/components/tabs/index.js +8 -0
  167. package/dist/components/tabs/index.vue +172 -0
  168. package/dist/components/tabs/style.less +377 -0
  169. package/dist/components/tag/index.js +7 -0
  170. package/dist/components/tag/index.vue +64 -0
  171. package/dist/components/tag/style.less +211 -0
  172. package/dist/components/title/index.js +8 -0
  173. package/dist/components/title/index.vue +99 -0
  174. package/dist/components/title/style.less +188 -0
  175. package/dist/components/toast/index.js +83 -0
  176. package/dist/components/toast/index.vue +49 -0
  177. package/dist/components/toast/style.less +55 -0
  178. package/dist/components/transition/index.js +8 -0
  179. package/dist/components/transition/index.vue +13 -0
  180. package/dist/components/transition/style.less +208 -0
  181. package/dist/components/upload/index.js +7 -0
  182. package/dist/components/upload/index.vue +106 -0
  183. package/dist/components/upload/style.less +147 -0
  184. package/dist/components/utils/assist.js +34 -0
  185. package/dist/components/utils/env.js +2 -0
  186. package/dist/demo.html +10 -0
  187. package/dist/locale/ar.js +98 -0
  188. package/dist/locale/en.js +98 -0
  189. package/dist/locale/zh.js +98 -0
  190. package/dist/token.css +2990 -0
  191. package/dist/vdesign-ui.common.js +27076 -0
  192. package/dist/vdesign-ui.css +1 -0
  193. package/dist/vdesign-ui.umd.js +27086 -0
  194. package/dist/vdesign-ui.umd.min.js +32 -0
  195. package/package.json +1 -1
@@ -0,0 +1,53 @@
1
+ <template>
2
+ <div :class="tabClasses">
3
+ <slot />
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ export default {
9
+ name: 'vd-tab',
10
+ props: {
11
+ name: [String, Number],
12
+ title: {
13
+ type: String,
14
+ required: true,
15
+ },
16
+ arrow: {
17
+ type: Boolean,
18
+ default: false,
19
+ },
20
+ },
21
+ data() {
22
+ return {
23
+ };
24
+ },
25
+ watch: {
26
+
27
+ },
28
+ computed: {
29
+ isActive() {
30
+ return this.computedName === this.$parent.currentValue;
31
+ },
32
+ tabClasses() {
33
+ return {
34
+ 'vd-tab': true,
35
+ 'vd-tab-active': this.isActive,
36
+ };
37
+ },
38
+ computedName() {
39
+ return this.name != null
40
+ ? this.name
41
+ : this.$parent.tabs.indexOf(this);
42
+ },
43
+ },
44
+ created() {
45
+ this.$parent.registerTab(this);
46
+ },
47
+ beforeDestroy() {
48
+ this.$parent.unregisterTab(this);
49
+ },
50
+ };
51
+ </script>
52
+
53
+ <style lang="less"></style>
@@ -0,0 +1,8 @@
1
+ import Tabs from './index.vue';
2
+ import './style.less';
3
+
4
+ Tabs.install = function (Vue) {
5
+ Vue.component(Tabs.name, Tabs);
6
+ };
7
+
8
+ export default Tabs;
@@ -0,0 +1,172 @@
1
+ <template>
2
+ <div class="vd-tabs">
3
+ <div class="vd-tabs__wrap" :class="menuClasses" ref="tabsWrap">
4
+ <div :class="[barType,scrollspy]" ref="tabsContainer">
5
+ <div v-for="(item, index) in navList" :key="index" :class="[tabClasses(item), lineClasses]" @click="handleChange(index)">
6
+ <span class="vd-tabs-text-cell" :class="ellipsisClasses">
7
+ {{ item.title }}
8
+ <vd-icon class="vd-tabs-arrow" v-if="item.arrow" name="icon_btn_moredown"></vd-icon>
9
+ </span>
10
+ </div>
11
+ </div>
12
+ <div class="vd-tabs-menu--right" v-if="menu">
13
+ <vd-icon :name="menuIconComputed" class="vd-tabs-menu-btn" @click="emitMenuClick"></vd-icon>
14
+ </div>
15
+ </div>
16
+ <div class="vd-tabs__content">
17
+ <slot />
18
+ </div>
19
+ </div>
20
+ </template>
21
+
22
+ <script>
23
+ import VdIcon from "../icon";
24
+ const prefixCls = "vd-tabs";
25
+ export default {
26
+ name: "vd-tabs",
27
+ components: {
28
+ VdIcon,
29
+ },
30
+ props: {
31
+ value: [String, Number],
32
+ tabsType: {
33
+ type: String,
34
+ default: "primary",
35
+ },
36
+ // 将 menu 作为一个字段,同时控制显示和图标名称
37
+ menu: {
38
+ type: [Boolean, String],
39
+ default: false,
40
+ },
41
+ ellipsis: {
42
+ type: Boolean,
43
+ default: true,
44
+ },
45
+ actBorder: Boolean,
46
+ backgroundColor: Boolean,
47
+ divider: Boolean,
48
+ },
49
+ data() {
50
+ return {
51
+ currentValue: this.value, // 当前选中的标签名
52
+ navList: [], // 标签导航列表
53
+ tabs: [], // 已注册的标签
54
+ };
55
+ },
56
+ watch: {
57
+ // 监听 value 变化,更新 currentValue
58
+ value(val) {
59
+ this.currentValue = val;
60
+ },
61
+ },
62
+ computed: {
63
+ // 计算菜单按钮的图标,根据 menu 属性的类型决定图标
64
+ menuIconComputed() {
65
+ if (typeof this.menu === 'string') {
66
+ return this.menu;
67
+ } else {
68
+ return 'icon_tab_morelist'; // 默认的菜单图标名称
69
+ }
70
+ },
71
+ // 计算滚动监视的类名
72
+ scrollspy() {
73
+ return `${prefixCls}--complete`
74
+ },
75
+ // 计算标签文字是否需要省略号的类名
76
+ ellipsisClasses() {
77
+ return {
78
+ [`${prefixCls}-text--ellipsis`]: this.ellipsis,
79
+ };
80
+ },
81
+ // 计算标签包裹器的类名,根据 menu、backgroundColor 和 divider 属性来确定
82
+ menuClasses() {
83
+ return {
84
+ [`${prefixCls}-menu`]: this.menu,
85
+ [`${prefixCls}__wrap--bg`]: this.backgroundColor,
86
+ "vd-hairline--bottom": this.divider,
87
+ };
88
+ },
89
+ // 计算标签下方线条的类名
90
+ lineClasses() {
91
+ return {
92
+ [`${prefixCls}__line`]: !this.actBorder,
93
+ };
94
+ },
95
+ // 根据 tabsType 属性计算标签类型的类名
96
+ barType() {
97
+ return {
98
+ [`${prefixCls}-${this.tabsType}-bar`]: this.tabsType,
99
+ };
100
+ },
101
+ },
102
+ methods: {
103
+ // 当菜单按钮被点击时触发事件
104
+ emitMenuClick() {
105
+ this.$emit('menu-click');
106
+ },
107
+ // 计算每个标签项的类名
108
+ tabClasses(item) {
109
+ return {
110
+ [`${prefixCls}-${this.tabsType}`]: true,
111
+ [`${prefixCls}-${this.tabsType}-active`]: item.name === this.currentValue,
112
+ };
113
+ },
114
+ // 注册新的标签到 tabs 数组中
115
+ registerTab(tab) {
116
+ if (!this.tabs.includes(tab)) {
117
+ this.tabs.push(tab);
118
+ this.updateNav();
119
+ }
120
+ },
121
+ // 从 tabs 数组中注销一个标签
122
+ unregisterTab(tab) {
123
+ const index = this.tabs.indexOf(tab);
124
+ if (index !== -1) {
125
+ this.tabs.splice(index, 1);
126
+ this.updateNav();
127
+ }
128
+ },
129
+ // 根据已注册的标签更新导航列表
130
+ updateNav() {
131
+ this.navList = this.tabs.map((tab, index) => ({
132
+ title: tab.title,
133
+ name: tab.name != null ? tab.name : index,
134
+ arrow: tab.arrow,
135
+ }));
136
+ // 如果当前没有选中的标签且导航列表不为空,则将第一个标签设为当前值
137
+ if (!this.currentValue && this.navList.length) {
138
+ this.currentValue = this.navList[0].name;
139
+ }
140
+ },
141
+ handleChange(index) {
142
+ const nav = this.navList[index];
143
+ const name = nav.name;
144
+ if (this.currentValue !== name) {
145
+ this.currentValue = name;
146
+ this.$emit("input", name); // 触发 input 事件,更新父组件中的 v-model 绑定值
147
+ this.$emit("change", { index, title: nav.title, name }); // 触发 change 事件,传递标签的详细信息
148
+ this.adjustTabPosition(index); // 调整选中标签的位置
149
+ }
150
+ this.$emit("click", { index, title: nav.title, name }); // 触发 click 事件,传递标签的详细信息
151
+ },
152
+ adjustTabPosition(index) {
153
+ const container = this.$refs.tabsContainer;
154
+ const selectedTab = container.children[index];
155
+ if (selectedTab) {
156
+ const containerWidth = container.offsetWidth;
157
+ const tabWidth = selectedTab.offsetWidth;
158
+ const tabOffsetLeft = selectedTab.offsetLeft;
159
+ const scrollLeft = tabOffsetLeft - (containerWidth - tabWidth) / 2;
160
+ container.scrollTo({ left: scrollLeft, behavior: "smooth" });
161
+ }
162
+ },
163
+ },
164
+ mounted() {
165
+ // 组件挂载后更新导航列表
166
+ // this.updateNav();
167
+ },
168
+ };
169
+ </script>
170
+ <style lang="less">
171
+ @import "./style.less";
172
+ </style>
@@ -0,0 +1,377 @@
1
+ @tabs-prefix-cls: vd-tabs;
2
+
3
+ .@{tabs-prefix-cls} {
4
+
5
+ &__wrap {
6
+ position: relative;
7
+ width: 100%;
8
+ }
9
+
10
+ &-primary {
11
+ position: relative;
12
+ display: inline-block;
13
+ cursor: pointer;
14
+ padding-inline-start: var(--spacing-tab-primary-padding_left);
15
+ padding-inline-end: var(--spacing-tab-primary-padding_right);
16
+ color: var(--color-tab-primary-text-default);
17
+ font-size: var(--en-single-f-d-r-fontSize);
18
+ font-weight: var(--en-single-f-d-r-fontWeight);
19
+
20
+ &-bar {
21
+ position: relative;
22
+ white-space: nowrap;
23
+ padding-inline-start: var(--spacing-tab-primary-margin_left);
24
+ height: var(--height-super-large);
25
+ line-height: var(--height-super-large);
26
+ }
27
+
28
+ &-active {
29
+ color: var(--color-tab-primary-text-active);
30
+ font-size: var(--en-single-f-e-s-fontSize);
31
+ font-weight: var(--en-single-f-e-s-fontWeight);
32
+
33
+ &::before {
34
+ content: "";
35
+ bottom: 11px;
36
+ height: var(--height-tab-primary-bar);
37
+ width: var(--width-tab-primary-bar);
38
+ display: block;
39
+ position: absolute;
40
+ background-color: var(--color-tab-primary-bar-active);
41
+ left: 50%;
42
+ transform: translateX(-50%);
43
+ border-radius: var(--radius-tab-primary_bar);
44
+ }
45
+ }
46
+ }
47
+
48
+ &-card {
49
+ min-width: 1%;
50
+ flex: 1;
51
+ display: flex;
52
+ justify-content: center;
53
+ align-items: center;
54
+ position: relative;
55
+ cursor: pointer;
56
+ text-align: center;
57
+ color: var(--color-tab-primary-text-default);
58
+ font-size: var(--en-single-f-d-r-fontSize);
59
+ font-weight: var(--en-single-f-d-r-fontWeight);
60
+
61
+ &-bar {
62
+ position: relative;
63
+ display: flex;
64
+ padding-inline-start: 20px;
65
+ padding-inline-end: 20px;
66
+ height: var(--height-super-large);
67
+ line-height: var(--height-super-large);
68
+ }
69
+
70
+ &-active {
71
+ color: var(--color-tab-primary-text-active);
72
+ font-size: var(--en-single-f-e-s-fontSize);
73
+ font-weight: var(--en-single-f-e-s-fontWeight);
74
+
75
+ &::before {
76
+ content: "";
77
+ bottom: 11px;
78
+ height: var(--height-tab-primary-bar);
79
+ width: var(--width-tab-primary-bar);
80
+ display: block;
81
+ position: absolute;
82
+ background-color: var(--color-tab-primary-bar-active);
83
+ left: 50%;
84
+ transform: translateX(-50%);
85
+ border-radius: 1px;
86
+ }
87
+ }
88
+ }
89
+
90
+ &-secondary {
91
+ position: relative;
92
+ display: inline-block;
93
+ cursor: pointer;
94
+ margin-inline-start: var(--spacing-tab-secondary-padding_left);
95
+ margin-inline-end: var(--spacing-tab-secondary-padding_right);
96
+ color: var(--color-tab-primary-text-default);
97
+ font-size: var(--en-single-f-c-r-fontSize);
98
+ font-weight: var(--en-single-f-c-r-fontWeigh);
99
+
100
+ &-bar {
101
+ display: flex;
102
+ align-items: center;
103
+ position: relative;
104
+ padding-inline-start: var(--spacing-tab-secondary-margin_left);
105
+ height: var(--height-tab-secondary);
106
+ line-height: var(--height-tab-secondary);
107
+ }
108
+
109
+ &-active {
110
+ color: var(--color-tab-primary-text-active);
111
+ font-size: var(--en-single-f-c-s-fontSize);
112
+ font-weight: var(--en-single-f-c-s-fontWeight);
113
+
114
+ &::before {
115
+ content: "";
116
+ bottom: 0;
117
+ height: var(--height-tab-secondary-bar);
118
+ display: block;
119
+ position: absolute;
120
+ background-color: var(--color-tab-secondary-bar-active);
121
+ left: 0;
122
+ right: 0;
123
+ width: 100%;
124
+ border-radius: var(--radius-tab-secondary-bar_top) var(--radius-tab-secondary-bar_top) var(--radius-tab-secondary-bar_bottom) var(--radius-tab-secondary-bar_bottom);
125
+ }
126
+ }
127
+ }
128
+
129
+ &-capsule {
130
+ position: relative;
131
+ display: inline-block;
132
+ cursor: pointer;
133
+ vertical-align: middle;
134
+ height: var(--height-tab-capsule_btn);
135
+ line-height: var(--height-tab-capsule_btn);
136
+ padding-inline-start: var(--spacing-tab-capsule_btn-padding_left);
137
+ padding-inline-end: var(--spacing-tab-capsule_btn-padding_right);
138
+ margin-inline-start: var(--spacing-tab-capsule_btn-margin_right);
139
+ margin-inline-end: var(--spacing-tab-capsule_btn-margin_right);
140
+ background-color: var(--color-tab-capsule_btn-bg-default);
141
+ color: var(--color-tab-capsule-text-default);
142
+ font-size: var(--en-single-f-c-r-fontSize);
143
+ font-weight: var(--en-single-f-c-r-fontWeight);
144
+ border-radius: var(--radius-tab-capsule_button);
145
+
146
+ &-bar {
147
+ position: relative;
148
+ white-space: nowrap;
149
+ align-items: center;
150
+ padding-inline-start: var(--spacing-tab-capsule-margin_left);
151
+ height: var(--height-tab-capsule);
152
+ line-height: var(--height-tab-capsule);
153
+ }
154
+
155
+ &-active {
156
+ color: var(--color-tab-capsule-text-active);
157
+ font-size: var(--en-single-f-c-s-fontSize);
158
+ font-weight: var(--en-single-f-c-s-fontWeight);
159
+ background-color: var(--color-tab-capsule_btn-bg-active);
160
+
161
+ .@{tabs-prefix-cls}-arrow {
162
+ color: var(--color-tab-filter_down-active);
163
+ transform: rotate(180deg);
164
+ }
165
+ }
166
+ }
167
+
168
+
169
+ &-selector-l {
170
+ flex: 1;
171
+ position: relative;
172
+ display: inline-block;
173
+ text-align: center;
174
+ cursor: pointer;
175
+ height: var(--height-tab-selector_l_btn);
176
+ line-height: var(--height-tab-selector_l_btn);
177
+ color: var(--color-tab-selector-text-default);
178
+ font-size: var(--en-single-f-c-r-fontSize);
179
+ font-weight: var(--en-single-f-c-r-fontWeight);
180
+
181
+ &-bar {
182
+ position: relative;
183
+ display: flex;
184
+ background-color: var(--color-tab-selector-bg-default);
185
+ border-radius: var(--radius-tab-selector_card);
186
+ padding-inline-start: var(--spacing-tab-selector-margin_left);
187
+ padding-inline-end: var(--spacing-tab-selector-margin_right);
188
+ padding-block-start: var(--spacing-tab-selector-margin_top);
189
+ padding-block-end: var(--spacing-tab-selector-margin_bottom);
190
+ }
191
+
192
+ &-active {
193
+ color: var(--color-tab-selector-text-active);
194
+ font-size: var(--en-single-f-c-s-fontSize);
195
+ font-weight: var(--en-single-f-c-s-fontWeight);
196
+ background-color: var(--color-tab-selector-bg-active);
197
+ box-shadow: var(--shadow-s1);
198
+ border-radius: var(--radius-tab-selector_card);
199
+ }
200
+ }
201
+
202
+ &-selector-m {
203
+ flex: 1;
204
+ position: relative;
205
+ display: inline-block;
206
+ text-align: center;
207
+ cursor: pointer;
208
+ height: var(--height-tab-selector_m_btn);
209
+ line-height: var(--height-tab-selector_m_btn);
210
+ color: var(--color-tab-selector-text-default);
211
+ font-size: var(--en-single-f-b-r-fontSize);
212
+ font-weight: var(--en-single-f-b-r-fontWeight);
213
+
214
+ &-bar {
215
+ position: relative;
216
+ display: flex;
217
+ background-color: var(--color-tab-selector-bg-default);
218
+ border-radius: var(--radius-tab-selector_card);
219
+ padding-inline-start: var(--spacing-tab-selector-margin_left);
220
+ padding-inline-end: var(--spacing-tab-selector-margin_right);
221
+ padding-block-start: var(--spacing-tab-selector-margin_top);
222
+ padding-block-end: var(--spacing-tab-selector-margin_bottom);
223
+ }
224
+
225
+ &-active {
226
+ color: var(--color-tab-selector-text-active);
227
+ font-size: var(--en-single-f-b-s-fontSize);
228
+ font-weight: var(--en-single-f-b-s-fontWeight);
229
+ background-color: var(--color-tab-selector-bg-active);
230
+ box-shadow: var(--shadow-s1);
231
+ border-radius: var(--radius-tab-selector_card);
232
+ }
233
+ }
234
+
235
+
236
+ &-filter {
237
+ flex: 1;
238
+ position: relative;
239
+ cursor: pointer;
240
+ text-align: center;
241
+ color: var(--color-tab-filter-text-default);
242
+ font-size: var(--en-single-f-c-r-fontSize);
243
+ font-weight: var(--en-single-f-c-r-fontWeight);
244
+
245
+ &-bar {
246
+ position: relative;
247
+ display: flex;
248
+ height: var(--height-tab-filter);
249
+ line-height: var(--height-tab-filter);
250
+ padding-inline-start: var(--spacing-tab-filter-margin_y);
251
+ padding-inline-end: var(--spacing-tab-filter-margin_y);
252
+ }
253
+
254
+ &-active {
255
+ color: var(--color-tab-filter-text-active);
256
+ font-size: var(--en-single-f-c-s-fontSize);
257
+ font-weight: var(--en-single-f-c-s-fontWeight);
258
+
259
+ .@{tabs-prefix-cls}-arrow {
260
+ color: var(--color-tab-filter_down);
261
+ transform: rotate(180deg);
262
+ }
263
+ }
264
+ }
265
+
266
+ &-click-filter {
267
+ flex: 1;
268
+ position: relative;
269
+ cursor: pointer;
270
+ text-align: center;
271
+ color: var(--color-tab-double_click_filter-text-default);
272
+ font-size: var(--en-single-f-c-r-fontSize);
273
+ font-weight: var(--en-single-f-c-r-fontWeight);
274
+
275
+ &-bar {
276
+ position: relative;
277
+ display: flex;
278
+ height: var(--height-tab-filter);
279
+ line-height: var(--height-tab-filter);
280
+ }
281
+
282
+ &-active {
283
+ color: var(--color-tab-double_click_filter-text-active);
284
+ font-size: var(--en-single-f-c-s-fontSize);
285
+ font-weight: var(--en-single-f-c-s-fontWeight);
286
+ }
287
+ }
288
+
289
+
290
+ &-menu-btn {
291
+ cursor: pointer;
292
+ font-size: var(--icon-large)!important;
293
+ }
294
+
295
+ &-text-cell {
296
+ display: flex;
297
+ align-items: center;
298
+ justify-content: center;
299
+ }
300
+
301
+ &-arrow {
302
+ display: inline-block;
303
+ vertical-align: -1px;
304
+ font-size: var(--icon-small) !important;
305
+ color: var(--color-tab-filter_down);
306
+ }
307
+
308
+ &__line {
309
+ &::before {
310
+ display: none;
311
+ }
312
+ }
313
+
314
+ &-menu {
315
+ display: flex;
316
+ justify-content: space-between;
317
+ align-items: center;
318
+
319
+
320
+ &--right {
321
+ position: relative;
322
+ display: flex;
323
+ height: var(--icon-large);
324
+ padding-inline-end: var(--spacing-tab-primary_icon-margin_right);
325
+ color: var(--text-color-h1);
326
+
327
+ &::before {
328
+ content: '';
329
+ position: absolute;
330
+ margin-inline-start: -16px;
331
+ width: 16px;
332
+ height: 100%;
333
+ background-image: linear-gradient(to left, var(--bg-color-1) 0%, rgba(255, 255, 255, 0) 100%);
334
+ }
335
+
336
+
337
+ }
338
+
339
+ }
340
+
341
+
342
+ &__wrap--bg {
343
+ background-color: transparent;
344
+ }
345
+
346
+ &--complete {
347
+ overflow-x: auto;
348
+ overflow-y: hidden;
349
+ -webkit-overflow-scrolling: touch;
350
+ padding-inline-end: var(--spacing-tab-primary_icon-margin_right);
351
+
352
+ &::-webkit-scrollbar {
353
+ display: none;
354
+ }
355
+ }
356
+
357
+ &-text--ellipsis {
358
+ display: -webkit-box;
359
+ overflow: hidden;
360
+ -webkit-line-clamp: 1;
361
+ -webkit-box-orient: vertical;
362
+ }
363
+ }
364
+
365
+ [lang='ar'] .vd-tabs-menu--right::before {
366
+ transform: scaleX(-1);
367
+ }
368
+
369
+
370
+ .vd-tab {
371
+ width: 100%;
372
+ display: none;
373
+ }
374
+
375
+ .vd-tab-active {
376
+ display: block;
377
+ }
@@ -0,0 +1,7 @@
1
+ import Tag from './index.vue';
2
+ import './style.less';
3
+ Tag.install = function(Vue) {
4
+ Vue.component(Tag.name, Tag)
5
+ }
6
+
7
+ export default Tag;
@@ -0,0 +1,64 @@
1
+ <template>
2
+ <div class="vd-tag" :class="classes" @click="handleClick">
3
+ <slot>{{ text }}</slot>
4
+ </div>
5
+ </template>
6
+
7
+ <script>
8
+ const prefixCls = 'vd-tag'
9
+ export default {
10
+ name: 'vd-tag',
11
+ props: {
12
+ text: String,
13
+ type: {
14
+ type: String,
15
+ // white、dark、blue、cyan、green、olive、yellow、orange、red、pink、purple
16
+ default: '',
17
+ validator(value) {
18
+ return [
19
+ 'white', 'dark', 'blue', 'cyan', 'green',
20
+ 'olive', 'yellow', 'orange', 'red', 'pink', 'purple',
21
+ ].includes(value);
22
+ },
23
+ },
24
+ size: {
25
+ type: String,
26
+ required: true,
27
+ validator(value) {
28
+ return ['s', 'l'].includes(value);
29
+ },
30
+ },
31
+ borders: {
32
+ type: Boolean,
33
+ },
34
+ plain: {
35
+ type: Boolean,
36
+ }
37
+
38
+ },
39
+ computed: {
40
+ classes() {
41
+ const classes = {
42
+ [`${prefixCls}--${this.size}`]: this.size,
43
+ [`${prefixCls}--${this.type}`]: this.type,
44
+ [`${prefixCls}--${this.type}__border`]: this.borders,
45
+ [`${prefixCls}--plain`]: this.plain
46
+ };
47
+ if (this.borders) {
48
+ classes['vd-hairline--surround'] = true;
49
+ }
50
+ return classes
51
+
52
+ },
53
+ },
54
+ methods: {
55
+ handleClick(event) {
56
+ this.$emit('click', event);
57
+ },
58
+ },
59
+ }
60
+ </script>
61
+
62
+ <style lang="less">
63
+ @import './style.less';
64
+ </style>