gi-component 0.0.49 → 0.0.51

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 (267) hide show
  1. package/dist/components/button/index.d.ts +2 -1
  2. package/dist/components/button/index.d.ts.map +1 -0
  3. package/dist/components/button/src/{button.vue.d.ts → button.d.ts} +5 -3
  4. package/dist/components/button/src/button.d.ts.map +1 -0
  5. package/dist/components/button/src/type.d.ts +1 -0
  6. package/dist/components/button/src/type.d.ts.map +1 -0
  7. package/dist/components/card/index.d.ts +2 -1
  8. package/dist/components/card/index.d.ts.map +1 -0
  9. package/dist/components/card/src/card.d.ts +37 -0
  10. package/dist/components/card/src/card.d.ts.map +1 -0
  11. package/dist/components/card/src/type.d.ts +1 -0
  12. package/dist/components/card/src/type.d.ts.map +1 -0
  13. package/dist/components/descriptions/index.d.ts +2 -2
  14. package/dist/components/descriptions/index.d.ts.map +1 -0
  15. package/dist/components/descriptions/src/descriptions.d.ts +25 -0
  16. package/dist/components/descriptions/src/descriptions.d.ts.map +1 -0
  17. package/dist/components/descriptions/src/type.d.ts +25 -11
  18. package/dist/components/descriptions/src/type.d.ts.map +1 -0
  19. package/dist/components/dialog/index.d.ts +3 -2
  20. package/dist/components/dialog/index.d.ts.map +1 -0
  21. package/dist/components/dialog/src/create-dialog.d.ts +27 -0
  22. package/dist/components/dialog/src/create-dialog.d.ts.map +1 -0
  23. package/dist/components/dialog/src/dialog-content.d.ts +11 -0
  24. package/dist/components/dialog/src/dialog-content.d.ts.map +1 -0
  25. package/dist/components/dialog/src/dialog.d.ts +42 -24
  26. package/dist/components/dialog/src/dialog.d.ts.map +1 -0
  27. package/dist/components/dialog/src/type.d.ts +1 -0
  28. package/dist/components/dialog/src/type.d.ts.map +1 -0
  29. package/dist/components/dot/index.d.ts +2 -1
  30. package/dist/components/dot/index.d.ts.map +1 -0
  31. package/dist/components/dot/src/dot.d.ts +9 -0
  32. package/dist/components/dot/src/dot.d.ts.map +1 -0
  33. package/dist/components/dot/src/type.d.ts +1 -0
  34. package/dist/components/dot/src/type.d.ts.map +1 -0
  35. package/dist/components/drawer/index.d.ts +3 -2
  36. package/dist/components/drawer/index.d.ts.map +1 -0
  37. package/dist/components/drawer/src/create-drawer.d.ts +19 -0
  38. package/dist/components/drawer/src/create-drawer.d.ts.map +1 -0
  39. package/dist/components/drawer/src/drawer.d.ts +46 -16
  40. package/dist/components/drawer/src/drawer.d.ts.map +1 -0
  41. package/dist/components/drawer/src/type.d.ts +1 -0
  42. package/dist/components/drawer/src/type.d.ts.map +1 -0
  43. package/dist/components/edit-table/index.d.ts +2 -1
  44. package/dist/components/edit-table/index.d.ts.map +1 -0
  45. package/dist/components/edit-table/src/type.d.ts +1 -0
  46. package/dist/components/edit-table/src/type.d.ts.map +1 -0
  47. package/dist/components/flex/index.d.ts +2 -1
  48. package/dist/components/flex/index.d.ts.map +1 -0
  49. package/dist/components/flex/src/{flex.vue.d.ts → flex.d.ts} +4 -2
  50. package/dist/components/flex/src/flex.d.ts.map +1 -0
  51. package/dist/components/flex/src/type.d.ts +1 -0
  52. package/dist/components/flex/src/type.d.ts.map +1 -0
  53. package/dist/components/form/index.d.ts +2 -1
  54. package/dist/components/form/index.d.ts.map +1 -0
  55. package/dist/components/form/src/type.d.ts +1 -0
  56. package/dist/components/form/src/type.d.ts.map +1 -0
  57. package/dist/components/grid/index.d.ts +3 -2
  58. package/dist/components/grid/index.d.ts.map +1 -0
  59. package/dist/components/grid/src/context.d.ts +1 -0
  60. package/dist/components/grid/src/context.d.ts.map +1 -0
  61. package/dist/components/grid/src/{grid-item.vue.d.ts → grid-item.d.ts} +9 -8
  62. package/dist/components/grid/src/grid-item.d.ts.map +1 -0
  63. package/dist/components/grid/src/{grid.vue.d.ts → grid.d.ts} +7 -6
  64. package/dist/components/grid/src/grid.d.ts.map +1 -0
  65. package/dist/components/grid/src/hook/use-index.d.ts +3 -2
  66. package/dist/components/grid/src/hook/use-index.d.ts.map +1 -0
  67. package/dist/components/grid/src/hook/use-responsive-state.d.ts +3 -2
  68. package/dist/components/grid/src/hook/use-responsive-state.d.ts.map +1 -0
  69. package/dist/components/grid/src/hook/use-responsive-value.d.ts +3 -2
  70. package/dist/components/grid/src/hook/use-responsive-value.d.ts.map +1 -0
  71. package/dist/components/grid/src/interface.d.ts +1 -0
  72. package/dist/components/grid/src/interface.d.ts.map +1 -0
  73. package/dist/components/grid/src/type.d.ts +1 -0
  74. package/dist/components/grid/src/type.d.ts.map +1 -0
  75. package/dist/components/grid/src/utils/global-config.d.ts +1 -0
  76. package/dist/components/grid/src/utils/global-config.d.ts.map +1 -0
  77. package/dist/components/grid/src/utils/index.d.ts +1 -0
  78. package/dist/components/grid/src/utils/index.d.ts.map +1 -0
  79. package/dist/components/grid/src/utils/is.d.ts +1 -0
  80. package/dist/components/grid/src/utils/is.d.ts.map +1 -0
  81. package/dist/components/grid/src/utils/responsive-observe.d.ts +1 -0
  82. package/dist/components/grid/src/utils/responsive-observe.d.ts.map +1 -0
  83. package/dist/components/input-group/index.d.ts +2 -1
  84. package/dist/components/input-group/index.d.ts.map +1 -0
  85. package/dist/components/input-group/src/{input-group.vue.d.ts → input-group.d.ts} +3 -1
  86. package/dist/components/input-group/src/input-group.d.ts.map +1 -0
  87. package/dist/components/input-group/src/type.d.ts +1 -0
  88. package/dist/components/input-group/src/type.d.ts.map +1 -0
  89. package/dist/components/input-search/index.d.ts +2 -1
  90. package/dist/components/input-search/index.d.ts.map +1 -0
  91. package/dist/components/input-search/src/{input-search.vue.d.ts → input-search.d.ts} +6 -4
  92. package/dist/components/input-search/src/input-search.d.ts.map +1 -0
  93. package/dist/components/input-search/src/type.d.ts +1 -0
  94. package/dist/components/input-search/src/type.d.ts.map +1 -0
  95. package/dist/components/nav-tabs/index.d.ts +2 -1
  96. package/dist/components/nav-tabs/index.d.ts.map +1 -0
  97. package/dist/components/nav-tabs/src/{nav-tabs.vue.d.ts → nav-tabs.d.ts} +6 -4
  98. package/dist/components/nav-tabs/src/nav-tabs.d.ts.map +1 -0
  99. package/dist/components/nav-tabs/src/type.d.ts +1 -0
  100. package/dist/components/nav-tabs/src/type.d.ts.map +1 -0
  101. package/dist/components/page-layout/index.d.ts +2 -1
  102. package/dist/components/page-layout/index.d.ts.map +1 -0
  103. package/dist/components/page-layout/src/page-layout.d.ts +219 -0
  104. package/dist/components/page-layout/src/page-layout.d.ts.map +1 -0
  105. package/dist/components/page-layout/src/{split-button.vue.d.ts → split-button.d.ts} +5 -3
  106. package/dist/components/page-layout/src/split-button.d.ts.map +1 -0
  107. package/dist/components/page-layout/src/type.d.ts +8 -0
  108. package/dist/components/page-layout/src/type.d.ts.map +1 -0
  109. package/dist/components/page-layout/src/useAutoCollapse.d.ts +1 -0
  110. package/dist/components/page-layout/src/useAutoCollapse.d.ts.map +1 -0
  111. package/dist/components/table/index.d.ts +22 -3
  112. package/dist/components/table/index.d.ts.map +1 -0
  113. package/dist/components/table/src/table-column.d.ts +21 -0
  114. package/dist/components/table/src/table-column.d.ts.map +1 -0
  115. package/dist/components/table/src/type.d.ts +225 -9
  116. package/dist/components/table/src/type.d.ts.map +1 -0
  117. package/dist/components/tabs/index.d.ts +2 -1
  118. package/dist/components/tabs/index.d.ts.map +1 -0
  119. package/dist/components/tabs/src/{tabs.vue.d.ts → tabs.d.ts} +16 -14
  120. package/dist/components/tabs/src/tabs.d.ts.map +1 -0
  121. package/dist/components/tabs/src/type.d.ts +1 -0
  122. package/dist/components/tabs/src/type.d.ts.map +1 -0
  123. package/dist/components/tag/index.d.ts +2 -1
  124. package/dist/components/tag/index.d.ts.map +1 -0
  125. package/dist/components/tag/src/{tag.vue.d.ts → tag.d.ts} +7 -5
  126. package/dist/components/tag/src/tag.d.ts.map +1 -0
  127. package/dist/components/tag/src/type.d.ts +1 -0
  128. package/dist/components/tag/src/type.d.ts.map +1 -0
  129. package/dist/components/tree-transfer/index.d.ts +2 -1
  130. package/dist/components/tree-transfer/index.d.ts.map +1 -0
  131. package/dist/components/tree-transfer/src/tree-transfer.d.ts +14438 -0
  132. package/dist/components/tree-transfer/src/tree-transfer.d.ts.map +1 -0
  133. package/dist/components/tree-transfer/src/type.d.ts +1 -0
  134. package/dist/components/tree-transfer/src/type.d.ts.map +1 -0
  135. package/dist/components/tree-transfer/src/utils.d.ts +1 -0
  136. package/dist/components/tree-transfer/src/utils.d.ts.map +1 -0
  137. package/dist/gi.css +1 -1
  138. package/dist/global.d.ts +26 -0
  139. package/dist/hooks/index.d.ts +1 -0
  140. package/dist/hooks/index.d.ts.map +1 -0
  141. package/dist/hooks/useBemClass.d.ts +1 -0
  142. package/dist/hooks/useBemClass.d.ts.map +1 -0
  143. package/dist/hooks/useNavTabs.d.ts +1 -0
  144. package/dist/hooks/useNavTabs.d.ts.map +1 -0
  145. package/dist/index.d.ts +3 -2
  146. package/dist/index.d.ts.map +1 -0
  147. package/dist/index.es.js +327 -321
  148. package/dist/index.es.js.map +1 -1
  149. package/dist/index.umd.js +1 -1
  150. package/dist/index.umd.js.map +1 -1
  151. package/dist/types/tool.d.ts +1 -0
  152. package/dist/types/tool.d.ts.map +1 -0
  153. package/dist/utils/createSelectDialog.d.ts +1 -0
  154. package/dist/utils/createSelectDialog.d.ts.map +1 -0
  155. package/dist/utils/index.d.ts +1 -0
  156. package/dist/utils/index.d.ts.map +1 -0
  157. package/package.json +10 -8
  158. package/dist/components/card/src/card.vue.d.ts +0 -35
  159. package/dist/components/descriptions/src/descriptions.vue.d.ts +0 -20
  160. package/dist/components/dialog/src/dialog-content.vue.d.ts +0 -9
  161. package/dist/components/dialog/src/dialog.vue.d.ts +0 -43
  162. package/dist/components/dot/src/dot.vue.d.ts +0 -7
  163. package/dist/components/drawer/src/drawer.vue.d.ts +0 -47
  164. package/dist/components/page-layout/src/page-layout.vue.d.ts +0 -21
  165. package/dist/components/plus-tabs/index.d.ts +0 -8
  166. package/dist/components/plus-tabs/src/context.d.ts +0 -26
  167. package/dist/components/plus-tabs/src/plus-tab-pane.vue.d.ts +0 -39
  168. package/dist/components/plus-tabs/src/plus-tabs.vue.d.ts +0 -78
  169. package/dist/components/plus-tabs/src/type.d.ts +0 -5
  170. package/dist/components/tab/index.d.ts +0 -2
  171. package/dist/components/tab/src/context.d.ts +0 -10
  172. package/dist/components/tab/src/tab-item.vue.d.ts +0 -26
  173. package/dist/components/tab/src/tab.vue.d.ts +0 -44
  174. package/dist/components/tab/src/type.d.ts +0 -21
  175. package/dist/components/tab/src/use-nav-tabs.d.ts +0 -2
  176. package/dist/components/tab/src/use-tabs.d.ts +0 -13
  177. package/dist/components/table/src/TableColumn.vue.d.ts +0 -10
  178. package/dist/components/table/src/table.d.ts +0 -4
  179. package/dist/components/table/src/table.vue.d.ts +0 -4
  180. package/dist/components/table-pro/index.d.ts +0 -4
  181. package/dist/components/table-pro/src/table-pro-column-setting.vue.d.ts +0 -13
  182. package/dist/components/table-pro/src/type.d.ts +0 -5
  183. package/dist/components/tree-transfer/src/tree-transfer.vue.d.ts +0 -14436
  184. package/dist/components.d.ts +0 -27
  185. package/packages/components/button/index.ts +0 -5
  186. package/packages/components/button/src/button.vue +0 -60
  187. package/packages/components/button/src/type.ts +0 -15
  188. package/packages/components/card/index.ts +0 -5
  189. package/packages/components/card/src/card.vue +0 -171
  190. package/packages/components/card/src/type.ts +0 -12
  191. package/packages/components/descriptions/index.ts +0 -5
  192. package/packages/components/descriptions/src/descriptions.vue +0 -72
  193. package/packages/components/descriptions/src/type.ts +0 -44
  194. package/packages/components/dialog/index.ts +0 -6
  195. package/packages/components/dialog/src/dialog-content.vue +0 -40
  196. package/packages/components/dialog/src/dialog.ts +0 -131
  197. package/packages/components/dialog/src/dialog.vue +0 -114
  198. package/packages/components/dialog/src/type.ts +0 -16
  199. package/packages/components/dot/index.ts +0 -5
  200. package/packages/components/dot/src/dot.vue +0 -107
  201. package/packages/components/dot/src/type.ts +0 -6
  202. package/packages/components/drawer/index.ts +0 -6
  203. package/packages/components/drawer/src/drawer.ts +0 -84
  204. package/packages/components/drawer/src/drawer.vue +0 -114
  205. package/packages/components/drawer/src/type.ts +0 -15
  206. package/packages/components/edit-table/index.ts +0 -5
  207. package/packages/components/edit-table/src/edit-table.vue +0 -201
  208. package/packages/components/edit-table/src/type.ts +0 -51
  209. package/packages/components/flex/index.ts +0 -5
  210. package/packages/components/flex/src/flex.vue +0 -95
  211. package/packages/components/flex/src/type.ts +0 -18
  212. package/packages/components/form/index.ts +0 -5
  213. package/packages/components/form/src/form.vue +0 -424
  214. package/packages/components/form/src/type.ts +0 -85
  215. package/packages/components/grid/index.ts +0 -8
  216. package/packages/components/grid/src/context.ts +0 -30
  217. package/packages/components/grid/src/grid-item.vue +0 -143
  218. package/packages/components/grid/src/grid.vue +0 -151
  219. package/packages/components/grid/src/hook/use-index.ts +0 -63
  220. package/packages/components/grid/src/hook/use-responsive-state.ts +0 -66
  221. package/packages/components/grid/src/hook/use-responsive-value.ts +0 -36
  222. package/packages/components/grid/src/interface.ts +0 -74
  223. package/packages/components/grid/src/type.ts +0 -0
  224. package/packages/components/grid/src/utils/global-config.ts +0 -6
  225. package/packages/components/grid/src/utils/index.ts +0 -73
  226. package/packages/components/grid/src/utils/is.ts +0 -9
  227. package/packages/components/grid/src/utils/responsive-observe.ts +0 -135
  228. package/packages/components/input-group/index.ts +0 -5
  229. package/packages/components/input-group/src/input-group.vue +0 -79
  230. package/packages/components/input-group/src/type.ts +0 -1
  231. package/packages/components/input-search/index.ts +0 -5
  232. package/packages/components/input-search/src/input-search.vue +0 -48
  233. package/packages/components/input-search/src/type.ts +0 -6
  234. package/packages/components/nav-tabs/index.ts +0 -8
  235. package/packages/components/nav-tabs/src/nav-tabs.vue +0 -235
  236. package/packages/components/nav-tabs/src/type.ts +0 -24
  237. package/packages/components/page-layout/index.ts +0 -5
  238. package/packages/components/page-layout/src/page-layout.vue +0 -203
  239. package/packages/components/page-layout/src/split-button.vue +0 -107
  240. package/packages/components/page-layout/src/type.ts +0 -16
  241. package/packages/components/page-layout/src/useAutoCollapse.ts +0 -88
  242. package/packages/components/table/index.ts +0 -5
  243. package/packages/components/table/src/TableColumn.vue +0 -43
  244. package/packages/components/table/src/table.vue +0 -89
  245. package/packages/components/table/src/type.ts +0 -24
  246. package/packages/components/tabs/index.ts +0 -5
  247. package/packages/components/tabs/src/tabs.vue +0 -139
  248. package/packages/components/tabs/src/type.ts +0 -15
  249. package/packages/components/tag/index.ts +0 -5
  250. package/packages/components/tag/src/tag.vue +0 -355
  251. package/packages/components/tag/src/type.ts +0 -38
  252. package/packages/components/tree-transfer/index.ts +0 -5
  253. package/packages/components/tree-transfer/src/tree-transfer.vue +0 -225
  254. package/packages/components/tree-transfer/src/type.ts +0 -7
  255. package/packages/components/tree-transfer/src/utils.ts +0 -23
  256. package/packages/components.d.ts +0 -34
  257. package/packages/hooks/index.ts +0 -2
  258. package/packages/hooks/useBemClass.ts +0 -11
  259. package/packages/hooks/useNavTabs.ts +0 -497
  260. package/packages/index.ts +0 -118
  261. package/packages/styles/el.scss +0 -90
  262. package/packages/styles/index.scss +0 -141
  263. package/packages/styles/var.scss +0 -1
  264. package/packages/types/global.d.ts +0 -7
  265. package/packages/types/tool.ts +0 -14
  266. package/packages/utils/createSelectDialog.ts +0 -74
  267. package/packages/utils/index.ts +0 -1
@@ -1,139 +0,0 @@
1
- <template>
2
- <div :class="getClass">
3
- <div :class="b('tabs__default')">
4
- <slot>
5
- <ElTabs :key="props.type" v-model="model" :type="props.type" :stretch="props.stretch"
6
- @tab-click="(p, e) => emits('tab-click', p, e)" @tab-change="emits('tab-change', $event as any)">
7
- <ElTabPane v-for="item in props.options" :key="item.name" :name="item.name" :disabled="item?.disabled">
8
- <template #label>
9
- <slot name="label" :data="item">{{ item.label }}</slot>
10
- </template>
11
- </ElTabPane>
12
- </ElTabs>
13
- </slot>
14
- </div>
15
- <div v-if="slots.extra" :class="b('tabs__extra')">
16
- <slot name="extra"></slot>
17
- </div>
18
- </div>
19
- </template>
20
-
21
- <script setup lang="ts">
22
- import type { TabsProps as ElTabsProps, TabsPaneContext } from 'element-plus'
23
- import type { TabsOptionItem, TabsProps } from './type.ts'
24
- import { ElTabPane, ElTabs } from 'element-plus'
25
- import { computed, useSlots } from 'vue'
26
- import { useBemClass } from '../../../hooks'
27
-
28
- const model = defineModel<ElTabsProps['modelValue']>()
29
-
30
- const props = withDefaults(defineProps<TabsProps>(), {
31
- type: '',
32
- options: () => [],
33
- size: 'medium',
34
- inner: false
35
- })
36
-
37
- const emits = defineEmits<{
38
- (e: 'tab-click', pane: TabsPaneContext, ev: Event): void
39
- (e: 'tab-change', value: string): void
40
- }>()
41
-
42
- defineSlots<{
43
- default: () => void
44
- extra: () => void
45
- label: (e: { data: TabsOptionItem }) => void
46
- }>()
47
-
48
- const slots = useSlots()
49
- const { b } = useBemClass()
50
-
51
- const getClass = computed(() => {
52
- const arr: string[] = [b('tabs')]
53
- arr.push(b(`tabs--${props.size}`))
54
- if (props.inner) {
55
- arr.push(b('tabs--inner'))
56
- }
57
- return arr.join(' ')
58
- })
59
- </script>
60
-
61
- <style lang="scss" scoped>
62
- @use '../../../styles/var.scss' as a;
63
-
64
- :deep(.el-tabs__nav-prev),
65
- :deep(.el-tabs__nav-next) {
66
- height: 100%;
67
- display: flex;
68
- align-items: center;
69
- justify-content: center;
70
- }
71
-
72
- .#{a.$prefix}-tabs {
73
- width: 100%;
74
- padding: 0 var(--padding);
75
- display: flex;
76
- align-items: center;
77
- border-bottom: 1px solid var(--el-border-color);
78
- box-sizing: border-box;
79
- background-color: var(--el-bg-color);
80
-
81
- &__default {
82
- flex: 1;
83
- overflow: hidden;
84
-
85
- :deep(.el-tabs__header) {
86
- margin-bottom: 0;
87
-
88
- .el-tabs__nav-wrap {
89
- &::after {
90
- display: none;
91
- }
92
- }
93
- }
94
-
95
- :deep(.el-tabs__active-bar) {
96
- bottom: 1px;
97
- }
98
- }
99
-
100
- &__extra {
101
- margin-left: 10px;
102
- align-self: flex-start;
103
- }
104
- }
105
-
106
- :deep(.el-tabs--card) {
107
- >.el-tabs__header {
108
- border-bottom: none;
109
- }
110
- }
111
-
112
- :deep(.el-tabs--border-card) {
113
- border-bottom: none;
114
-
115
- >.el-tabs__content {
116
- display: none;
117
- }
118
-
119
- >.el-tabs__header {
120
- border-bottom: none;
121
- }
122
- }
123
-
124
- .#{a.$prefix}-tabs--small {
125
- padding: 0 10px;
126
-
127
- :deep(.el-tabs) {
128
- --el-tabs-header-height: 32px;
129
-
130
- .el-tabs__item {
131
- font-size: 12px;
132
- }
133
- }
134
- }
135
-
136
- .#{a.$prefix}-tabs--inner {
137
- padding: 0;
138
- }
139
- </style>
@@ -1,15 +0,0 @@
1
- import type { TabsProps as ElTabsProps } from 'element-plus'
2
-
3
- export type TabsOptionItem = {
4
- label: string
5
- name: string
6
- disabled?: boolean
7
- }
8
-
9
- export interface TabsProps
10
- extends Partial<Pick<ElTabsProps, 'type' | 'stretch'>> {
11
- type?: ElTabsProps['type']
12
- options?: TabsOptionItem[]
13
- size?: 'small' | 'medium'
14
- inner?: boolean // 内嵌模式
15
- }
@@ -1,5 +0,0 @@
1
- import Tag from './src/tag.vue'
2
-
3
- export type TagInstance = InstanceType<typeof Tag>
4
- export * from './src/type'
5
- export default Tag
@@ -1,355 +0,0 @@
1
- <template>
2
- <span :class="className" :style="tagStyle" @click="handleClick">
3
- <span v-if="hasIcon" :class="b('tag__icon')">
4
- <slot name="icon">
5
- <ElIcon v-if="icon">
6
- <component :is="icon" />
7
- </ElIcon>
8
- </slot>
9
- </span>
10
- <slot />
11
- <span v-if="closable" class="gi-tag-close-btn" @click="handleClose">
12
- <ElIcon class="close-icon">
13
- <Close />
14
- </ElIcon>
15
- </span>
16
- </span>
17
- </template>
18
-
19
- <script setup lang="ts">
20
- import type { CSSProperties } from 'vue'
21
- import type { TagProps, TagThemeColor } from './type'
22
- import { Close } from '@element-plus/icons-vue'
23
- import { ElIcon } from 'element-plus'
24
- import { computed, useSlots } from 'vue'
25
- import { useBemClass } from '../../../hooks'
26
-
27
- const props = withDefaults(defineProps<TagProps>(), {
28
- type: 'light',
29
- color: 'info',
30
- size: 'default',
31
- round: false,
32
- closable: false
33
- })
34
-
35
- const emit = defineEmits<{
36
- click: []
37
- close: []
38
- }>()
39
-
40
- defineSlots<{
41
- default?: () => unknown
42
- icon?: () => unknown
43
- }>()
44
-
45
- const slots = useSlots()
46
- const hasIcon = computed(() => Boolean(slots.icon) || Boolean(props.icon))
47
-
48
- const SEMANTIC_THEME_COLORS: readonly TagThemeColor[] = [
49
- 'primary',
50
- 'success',
51
- 'warning',
52
- 'danger',
53
- 'info'
54
- ]
55
-
56
- function isSemanticThemeColor(value: string): value is TagThemeColor {
57
- return (SEMANTIC_THEME_COLORS as readonly string[]).includes(value)
58
- }
59
-
60
- const { b } = useBemClass()
61
-
62
- const BASE_COLORS = {
63
- red: '#FF0000',
64
- orangered: '#f77234',
65
- orange: '#ff7d00',
66
- gold: '#f7ba1e',
67
- lime: '#9fdb1d',
68
- green: '#00b42a',
69
- cyan: '#14c9c9',
70
- blue: '#3491fa',
71
- purple: '#722ed1',
72
- pink: '#f5319d',
73
- gray: '#86909c'
74
- } as const
75
-
76
- type PresetColorKey = keyof typeof BASE_COLORS
77
-
78
- function resolveColorToken(input: string): string {
79
- return BASE_COLORS[input as PresetColorKey] || input
80
- }
81
-
82
- function hexToRgb(hex: string): { r: number, g: number, b: number } {
83
- const body = hex.startsWith('#') ? hex.slice(1) : hex
84
- const full = body.length === 3
85
- ? body.split('').map((c) => c + c).join('')
86
- : body
87
- return {
88
- r: Number.parseInt(full.slice(0, 2), 16),
89
- g: Number.parseInt(full.slice(2, 4), 16),
90
- b: Number.parseInt(full.slice(4, 6), 16)
91
- }
92
- }
93
-
94
- function stylesForType(
95
- type: NonNullable<TagProps['type']>,
96
- color: string,
97
- rgb: { r: number, g: number, b: number }
98
- ): CSSProperties {
99
- const { r, g, b } = rgb
100
- /** 与主题色标签一致:悬停时白字 + 实心色底 */
101
- const closeHoverVars = {
102
- '--tag-close-hover-color': '#fff',
103
- '--tag-close-hover-bg-color': color
104
- } as CSSProperties
105
-
106
- switch (type) {
107
- case 'dark':
108
- return {
109
- 'color': '#fff',
110
- 'backgroundColor': color,
111
- '--tag-close-hover-color': color,
112
- '--tag-close-hover-bg-color': 'rgba(255, 255, 255, 0.9)'
113
- } as CSSProperties
114
- case 'outline':
115
- return {
116
- color,
117
- backgroundColor: 'transparent',
118
- borderColor: `rgba(${r}, ${g}, ${b}, 0.6)`,
119
- ...closeHoverVars
120
- }
121
- case 'light-outline':
122
- return {
123
- color,
124
- backgroundColor: `rgba(${r}, ${g}, ${b}, 0.1)`,
125
- borderColor: `rgba(${r}, ${g}, ${b}, 0.2)`,
126
- ...closeHoverVars
127
- }
128
- case 'light':
129
- default:
130
- return {
131
- color,
132
- backgroundColor: `rgba(${r}, ${g}, ${b}, 0.1)`,
133
- ...closeHoverVars
134
- }
135
- }
136
- }
137
-
138
- const className = computed(() => {
139
- const c = props.color
140
- return [
141
- b('tag'),
142
- props.type && b(`tag__type--${props.type}`),
143
- props.size && b(`tag__size--${props.size}`),
144
- props.round && b('tag--round'),
145
- c && isSemanticThemeColor(c) && b(`tag__color--${c}`)
146
- ].filter(Boolean).join(' ')
147
- })
148
-
149
- const tagStyle = computed((): CSSProperties => {
150
- const raw = props.color
151
- if (!raw || isSemanticThemeColor(raw))
152
- return {}
153
- const color = resolveColorToken(raw)
154
- return stylesForType(props.type ?? 'light', color, hexToRgb(color))
155
- })
156
-
157
- function handleClick() {
158
- emit('click')
159
- }
160
-
161
- function handleClose(event: MouseEvent) {
162
- event.stopPropagation()
163
- emit('close')
164
- }
165
- </script>
166
-
167
- <style scoped lang="scss">
168
- @use '../../../styles/var.scss' as a;
169
-
170
- $theme-colors: primary, success, warning, danger, info;
171
-
172
- $tag-size-small-height: 20px;
173
- $tag-size-default-height: 24px;
174
- $tag-size-large-height: 26px;
175
-
176
- $tag-size-small-padding: 0 6px;
177
- $tag-size-default-padding: 0 8px;
178
- $tag-size-large-padding: 0 10px;
179
-
180
- .#{a.$prefix}-tag {
181
- box-sizing: border-box;
182
- display: inline-flex;
183
- align-items: center;
184
- justify-content: center;
185
- font-size: 12px;
186
- line-height: 1;
187
- white-space: nowrap;
188
- border-radius: 3px;
189
- }
190
-
191
- .#{a.$prefix}-tag--round {
192
- border-radius: 9999px;
193
- }
194
-
195
- .#{a.$prefix}-tag__icon {
196
- display: inline-flex;
197
- flex-shrink: 0;
198
- align-items: center;
199
- margin-right: 4px;
200
- line-height: 0;
201
- color: inherit;
202
-
203
- :deep(.el-icon),
204
- :deep(svg) {
205
- width: 11px;
206
- height: 11px;
207
- }
208
- }
209
-
210
- .#{a.$prefix}-tag-close-btn {
211
- position: relative;
212
- box-sizing: border-box;
213
- display: flex;
214
- align-items: center;
215
- justify-content: center;
216
- width: 15px;
217
- height: 15px;
218
- margin-left: 4px;
219
- cursor: pointer;
220
- background-color: transparent;
221
- border-radius: 50%;
222
- transition: background-color 0.1s cubic-bezier(0, 0, 1, 1);
223
-
224
- .close-icon {
225
- z-index: 9;
226
- width: 11px;
227
- height: 11px;
228
- color: inherit;
229
- }
230
-
231
- /* 主题色写在 .gi-tag__color--* 上,自定义色写在内联 style;统一用变量驱动悬停 */
232
- &:hover {
233
- color: var(--tag-close-hover-color);
234
- background-color: var(--tag-close-hover-bg-color);
235
- }
236
- }
237
-
238
- .#{a.$prefix}-tag__size--small {
239
- height: $tag-size-small-height;
240
- padding: $tag-size-small-padding;
241
-
242
- .#{a.$prefix}-tag__icon {
243
-
244
- :deep(.el-icon),
245
- :deep(svg) {
246
- width: 10px;
247
- height: 10px;
248
- }
249
- }
250
-
251
- .#{a.$prefix}-tag-close-btn {
252
- width: 14px;
253
- height: 14px;
254
-
255
- .close-icon {
256
- width: 10px;
257
- height: 10px;
258
- }
259
- }
260
- }
261
-
262
- .#{a.$prefix}-tag__size--default {
263
- height: $tag-size-default-height;
264
- padding: $tag-size-default-padding;
265
- }
266
-
267
- .#{a.$prefix}-tag__size--large {
268
- height: $tag-size-large-height;
269
- padding: $tag-size-large-padding;
270
-
271
- .#{a.$prefix}-tag__icon {
272
-
273
- :deep(.el-icon),
274
- :deep(svg) {
275
- width: 12px;
276
- height: 12px;
277
- }
278
- }
279
-
280
- .#{a.$prefix}-tag-close-btn {
281
- width: 16px;
282
- height: 16px;
283
-
284
- .close-icon {
285
- width: 12px;
286
- height: 12px;
287
- }
288
- }
289
- }
290
-
291
- .#{a.$prefix}-tag__type--light {
292
- @each $s in $theme-colors {
293
- &.#{a.$prefix}-tag__color--#{$s} {
294
- color: var(--el-color-#{$s});
295
- background-color: var(--el-color-#{$s}-light-9);
296
-
297
- --tag-close-hover-color: #fff;
298
- --tag-close-hover-bg-color: var(--el-color-#{$s});
299
- }
300
- }
301
- }
302
-
303
- .#{a.$prefix}-tag__type--dark {
304
- color: #fff;
305
-
306
- @each $s in $theme-colors {
307
- &.#{a.$prefix}-tag__color--#{$s} {
308
- background-color: var(--el-color-#{$s});
309
-
310
- --tag-close-hover-color: var(--el-color-#{$s});
311
- --tag-close-hover-bg-color: rgb(255 255 255 / 90%);
312
- }
313
- }
314
- }
315
-
316
- .#{a.$prefix}-tag__type--outline {
317
- background: transparent;
318
- border-style: solid;
319
- border-width: 1px;
320
-
321
- @each $s in $theme-colors {
322
- &.#{a.$prefix}-tag__color--#{$s} {
323
- color: var(--el-color-#{$s});
324
- border-color: var(--el-color-#{$s}-light-5);
325
-
326
- --tag-close-hover-color: #fff;
327
- --tag-close-hover-bg-color: var(--el-color-#{$s});
328
- }
329
- }
330
- }
331
-
332
- .#{a.$prefix}-tag__type--light-outline {
333
- border-style: solid;
334
- border-width: 1px;
335
-
336
- @each $s in $theme-colors {
337
- &.#{a.$prefix}-tag__color--#{$s} {
338
- color: var(--el-color-#{$s});
339
- background-color: var(--el-color-#{$s}-light-9);
340
- border-color: var(--el-color-#{$s}-light-7);
341
-
342
- --tag-close-hover-color: #fff;
343
- --tag-close-hover-bg-color: var(--el-color-#{$s});
344
- }
345
- }
346
- }
347
-
348
- .#{a.$prefix}-tag__type--light,
349
- .#{a.$prefix}-tag__type--outline,
350
- .#{a.$prefix}-tag__type--light-outline {
351
- &.#{a.$prefix}-tag__color--info {
352
- color: var(--el-text-color-primary);
353
- }
354
- }
355
- </style>
@@ -1,38 +0,0 @@
1
- import type { Component } from 'vue'
2
-
3
- /** 与 Element Plus 语义色一致的主题色(走 CSS 变量,非内联色值) */
4
- export type TagThemeColor = 'primary' | 'success' | 'warning' | 'danger' | 'info'
5
-
6
- /** 内置调色板色名(映射为固定十六进制) */
7
- export type TagPaletteColor =
8
- | 'red'
9
- | 'orangered'
10
- | 'orange'
11
- | 'gold'
12
- | 'lime'
13
- | 'green'
14
- | 'cyan'
15
- | 'blue'
16
- | 'purple'
17
- | 'pink'
18
- | 'gray'
19
-
20
- /** 组件属性定义 */
21
- export interface TagProps {
22
- /** 标签类型 */
23
- type?: 'dark' | 'light' | 'outline' | 'light-outline'
24
- /**
25
- * 颜色:主题色名(primary / success 等,使用 Element 色板)、调色板预设名(red / blue 等)或任意 CSS 颜色字符串(如十六进制)
26
- */
27
- color?: TagThemeColor | TagPaletteColor | string
28
- /** 标签尺寸 */
29
- size?: 'small' | 'default' | 'large'
30
- /**
31
- * 左侧图标组件(如 `@element-plus/icons-vue` 图标);与 `#icon` 插槽同时存在时以插槽为准
32
- */
33
- icon?: Component
34
- /** 是否为胶囊圆角(大圆角) */
35
- round?: boolean
36
- /** 是否可关闭 */
37
- closable?: boolean
38
- }
@@ -1,5 +0,0 @@
1
- import TreeTransfer from './src/tree-transfer.vue'
2
-
3
- export type TreeTransferInstance = InstanceType<typeof TreeTransfer>
4
- export * from './src/type'
5
- export default TreeTransfer