xt-element-ui 1.3.3 → 1.4.0

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 (124) hide show
  1. package/CHANGELOG.md +72 -72
  2. package/LICENSE +21 -21
  3. package/README.md +240 -240
  4. package/docs/README.md +100 -100
  5. package/docs/components/base/xt-button.md +114 -114
  6. package/docs/components/base/xt-card-item.md +104 -104
  7. package/docs/components/base/xt-card.md +108 -108
  8. package/docs/components/base/xt-config-provider.md +199 -199
  9. package/docs/components/base/xt-flex-box.md +115 -115
  10. package/docs/components/base/xt-grid-box.md +302 -302
  11. package/docs/components/base/xt-input.md +150 -150
  12. package/docs/components/base/xt-map-provider.md +23 -23
  13. package/docs/components/base/xt-map.md +331 -331
  14. package/docs/components/base/xt-step-price.md +165 -165
  15. package/docs/components/base/xt-text.md +212 -212
  16. package/docs/components/base/xt-time.md +165 -165
  17. package/docs/components/extend/ex-bar.md +67 -67
  18. package/docs/components/extend/ex-button.md +62 -62
  19. package/docs/components/extend/ex-card.md +86 -86
  20. package/docs/components/extend/ex-chart.md +463 -463
  21. package/docs/components/extend/ex-icon.md +189 -189
  22. package/docs/components/extend/ex-line.md +70 -70
  23. package/docs/components/extend/ex-multi.md +155 -155
  24. package/docs/components/extend/ex-pie.md +69 -69
  25. package/docs/components/extend/ex-select-tree.md +210 -210
  26. package/docs/components/extend/ex-table.md +590 -590
  27. package/docs/components/extend/ex-upload.md +134 -134
  28. package/docs/components/utils/size.md +147 -147
  29. package/docs/components/utils/theme.md +182 -182
  30. package/lib/index.common.js +4575 -4186
  31. package/lib/index.css +1 -1
  32. package/lib/index.umd.js +4475 -4085
  33. package/lib/index.umd.min.js +5 -5
  34. package/package.json +80 -81
  35. package/src/components/ex-button/index.js +7 -7
  36. package/src/components/ex-button/index.vue +66 -66
  37. package/src/components/ex-button/style/index.scss +67 -67
  38. package/src/components/ex-card/index.js +7 -7
  39. package/src/components/ex-card/index.vue +68 -68
  40. package/src/components/ex-card/style/index.scss +73 -73
  41. package/src/components/ex-chart/index.js +7 -7
  42. package/src/components/ex-chart/index.vue +136 -136
  43. package/src/components/ex-chart/theme/dark.js +4 -1
  44. package/src/components/ex-date-picker/index.js +7 -7
  45. package/src/components/ex-icon/index.js +7 -7
  46. package/src/components/ex-icon/index.vue +168 -168
  47. package/src/components/ex-icon/style/index.scss +7 -7
  48. package/src/components/ex-page/index.js +7 -7
  49. package/src/components/ex-select-tree/index.js +7 -7
  50. package/src/components/ex-table/ExTableCell.vue +22 -22
  51. package/src/components/ex-table/index.js +7 -7
  52. package/src/components/ex-table/virtualScrollData.js +35 -35
  53. package/src/components/ex-upload/index.js +7 -7
  54. package/src/components/index.scss +49 -40
  55. package/src/components/xt-badge/index.js +7 -0
  56. package/src/components/xt-badge/index.vue +71 -0
  57. package/src/components/xt-badge/style/index.scss +88 -0
  58. package/src/components/xt-button/index.js +7 -7
  59. package/src/components/xt-button/index.vue +97 -97
  60. package/src/components/xt-card/index.js +7 -7
  61. package/src/components/xt-card/style/index.scss +48 -48
  62. package/src/components/xt-card-item/index.js +7 -7
  63. package/src/components/xt-card-item/index.vue +5 -5
  64. package/src/components/xt-card-item/style/index copy.scss +71 -71
  65. package/src/components/xt-card-item/style/index.scss +82 -82
  66. package/src/components/xt-config-provider/index.js +7 -7
  67. package/src/components/xt-config-provider/index.vue +362 -362
  68. package/src/components/xt-config-provider/style/index.scss +11 -11
  69. package/src/components/xt-flex-box/index.js +7 -7
  70. package/src/components/xt-flex-box/style/index.scss +81 -81
  71. package/src/components/xt-grid-box/index.js +7 -7
  72. package/src/components/xt-grid-box/style/index.scss +92 -92
  73. package/src/components/xt-grid-item/index.js +7 -7
  74. package/src/components/xt-grid-item/index.vue +106 -106
  75. package/src/components/xt-input/index.js +7 -7
  76. package/src/components/xt-input/index.vue +66 -66
  77. package/src/components/xt-input/style/index.scss +84 -84
  78. package/src/components/xt-map/adapters/amap.js +235 -235
  79. package/src/components/xt-map/adapters/baidu.js +254 -254
  80. package/src/components/xt-map/adapters/base.js +267 -267
  81. package/src/components/xt-map/adapters/index.js +29 -29
  82. package/src/components/xt-map/adapters/tianditu.js +242 -242
  83. package/src/components/xt-map/config/xt-map-config.js +197 -197
  84. package/src/components/xt-map/index.js +8 -8
  85. package/src/components/xt-map/index.vue +351 -351
  86. package/src/components/xt-map/loaders/script-loader.js +114 -114
  87. package/src/components/xt-map/provider.vue +200 -200
  88. package/src/components/xt-map/style/index.scss +77 -77
  89. package/src/components/xt-map-provider/index.js +8 -8
  90. package/src/components/xt-progress/index.js +7 -0
  91. package/src/components/xt-progress/index.vue +103 -0
  92. package/src/components/xt-progress/style/index.scss +119 -0
  93. package/src/components/xt-step-price/index.js +10 -10
  94. package/src/components/xt-step-price/index.vue +272 -272
  95. package/src/components/xt-step-price/style/index.scss +123 -123
  96. package/src/components/xt-step-price-item/index.js +7 -7
  97. package/src/components/xt-step-price-item/index.vue +187 -187
  98. package/src/components/xt-tabs/TabPane.vue +36 -0
  99. package/src/components/xt-tabs/index.js +10 -0
  100. package/src/components/xt-tabs/index.vue +113 -0
  101. package/src/components/xt-tabs/style/index.scss +197 -0
  102. package/src/components/xt-text/index.js +7 -7
  103. package/src/components/xt-text/index.vue +16 -2
  104. package/src/components/xt-text/style/index.scss +110 -92
  105. package/src/components/xt-time/index.js +7 -7
  106. package/src/components/xt-time/index.vue +313 -313
  107. package/src/components/xt-time/style/index.scss +23 -23
  108. package/src/config/element-registry.js +135 -135
  109. package/src/index.js +169 -178
  110. package/src/styles/css-variables.scss +257 -257
  111. package/src/styles/theme/background.scss +5 -5
  112. package/src/styles/theme/border-radius.scss +3 -3
  113. package/src/styles/theme/borders.scss +3 -3
  114. package/src/styles/theme/colors.scss +101 -101
  115. package/src/styles/theme/component-variables.scss +69 -69
  116. package/src/styles/theme/dark-variables.scss +28 -28
  117. package/src/styles/theme/font.scss +12 -12
  118. package/src/styles/theme/index.scss +11 -11
  119. package/src/styles/theme/shadows.scss +2 -2
  120. package/src/styles/theme/spacing.scss +4 -4
  121. package/src/styles/theme/transitions.scss +2 -2
  122. package/src/styles/theme/typography.scss +4 -4
  123. package/src/styles/variables-export.scss +85 -85
  124. package/src/utils/index.js +191 -202
@@ -1,77 +1,77 @@
1
- .xt-map-wrapper {
2
- position: relative;
3
- width: 100%;
4
- height: 100%;
5
- overflow: hidden;
6
- border-radius: 4px;
7
- }
8
-
9
- .xt-map-container {
10
- width: 100%;
11
- height: 100%;
12
- background-color: var(--xt-map-bg, #f5f5f5);
13
- position: relative;
14
- }
15
-
16
- .xt-map-container[data-theme="dark"] {
17
- background-color: #1a1a1a;
18
- }
19
-
20
- .xt-map-loading {
21
- position: absolute;
22
- top: 50%;
23
- left: 50%;
24
- transform: translate(-50%, -50%);
25
- padding: 12px 20px;
26
- background-color: rgba(255, 255, 255, 0.9);
27
- border-radius: 6px;
28
- color: #606266;
29
- font-size: 14px;
30
- box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
31
- z-index: 10;
32
- }
33
-
34
- .xt-map-container[data-theme="dark"] + .xt-map-loading,
35
- .xt-map-wrapper[data-theme="dark"] .xt-map-loading {
36
- background-color: rgba(30, 30, 30, 0.9);
37
- color: #c0c4cc;
38
- }
39
-
40
- .xt-map-error {
41
- position: absolute;
42
- top: 50%;
43
- left: 50%;
44
- transform: translate(-50%, -50%);
45
- padding: 12px 20px;
46
- background-color: rgba(254, 235, 235, 0.95);
47
- border: 1px solid #fbc4c4;
48
- border-radius: 6px;
49
- color: #f56c6c;
50
- font-size: 14px;
51
- text-align: center;
52
- max-width: 80%;
53
- z-index: 10;
54
- }
55
-
56
- .xt-map-container[data-theme="dark"] + .xt-map-error,
57
- .xt-map-wrapper[data-theme="dark"] .xt-map-error {
58
- background-color: rgba(60, 30, 30, 0.95);
59
- border-color: #7a3a3a;
60
- color: #f56c6c;
61
- }
62
-
63
- /* 暗黑模式下对天地图/百度的瓦片反色滤镜兜底 */
64
- .xt-map-container[data-theme="dark"] img {
65
- /* 各适配器内部会自行处理滤镜,这里仅做最低限度兜底 */
66
- }
67
-
68
- /* 暗黑模式下覆盖层的辅助 CSS 变量 */
69
- .xt-map-container[data-theme="dark"] {
70
- --xt-map-overlay-bg: rgba(30, 30, 30, 0.9);
71
- --xt-map-overlay-color: #c0c4cc;
72
- }
73
-
74
- .xt-map-container[data-theme="light"] {
75
- --xt-map-overlay-bg: rgba(255, 255, 255, 0.95);
76
- --xt-map-overlay-color: #606266;
77
- }
1
+ .xt-map-wrapper {
2
+ position: relative;
3
+ width: 100%;
4
+ height: 100%;
5
+ overflow: hidden;
6
+ border-radius: 4px;
7
+ }
8
+
9
+ .xt-map-container {
10
+ width: 100%;
11
+ height: 100%;
12
+ background-color: var(--xt-map-bg, #f5f5f5);
13
+ position: relative;
14
+ }
15
+
16
+ .xt-map-container[data-theme="dark"] {
17
+ background-color: #1a1a1a;
18
+ }
19
+
20
+ .xt-map-loading {
21
+ position: absolute;
22
+ top: 50%;
23
+ left: 50%;
24
+ transform: translate(-50%, -50%);
25
+ padding: 12px 20px;
26
+ background-color: rgba(255, 255, 255, 0.9);
27
+ border-radius: 6px;
28
+ color: #606266;
29
+ font-size: 14px;
30
+ box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
31
+ z-index: 10;
32
+ }
33
+
34
+ .xt-map-container[data-theme="dark"] + .xt-map-loading,
35
+ .xt-map-wrapper[data-theme="dark"] .xt-map-loading {
36
+ background-color: rgba(30, 30, 30, 0.9);
37
+ color: #c0c4cc;
38
+ }
39
+
40
+ .xt-map-error {
41
+ position: absolute;
42
+ top: 50%;
43
+ left: 50%;
44
+ transform: translate(-50%, -50%);
45
+ padding: 12px 20px;
46
+ background-color: rgba(254, 235, 235, 0.95);
47
+ border: 1px solid #fbc4c4;
48
+ border-radius: 6px;
49
+ color: #f56c6c;
50
+ font-size: 14px;
51
+ text-align: center;
52
+ max-width: 80%;
53
+ z-index: 10;
54
+ }
55
+
56
+ .xt-map-container[data-theme="dark"] + .xt-map-error,
57
+ .xt-map-wrapper[data-theme="dark"] .xt-map-error {
58
+ background-color: rgba(60, 30, 30, 0.95);
59
+ border-color: #7a3a3a;
60
+ color: #f56c6c;
61
+ }
62
+
63
+ /* 暗黑模式下对天地图/百度的瓦片反色滤镜兜底 */
64
+ .xt-map-container[data-theme="dark"] img {
65
+ /* 各适配器内部会自行处理滤镜,这里仅做最低限度兜底 */
66
+ }
67
+
68
+ /* 暗黑模式下覆盖层的辅助 CSS 变量 */
69
+ .xt-map-container[data-theme="dark"] {
70
+ --xt-map-overlay-bg: rgba(30, 30, 30, 0.9);
71
+ --xt-map-overlay-color: #c0c4cc;
72
+ }
73
+
74
+ .xt-map-container[data-theme="light"] {
75
+ --xt-map-overlay-bg: rgba(255, 255, 255, 0.95);
76
+ --xt-map-overlay-color: #606266;
77
+ }
@@ -1,8 +1,8 @@
1
- import XtMapProvider from '../xt-map/provider.vue'
2
-
3
- XtMapProvider.install = function (Vue) {
4
- Vue.component(XtMapProvider.name, XtMapProvider)
5
- }
6
-
7
- export default XtMapProvider
8
- export { XtMapProvider }
1
+ import XtMapProvider from '../xt-map/provider.vue'
2
+
3
+ XtMapProvider.install = function (Vue) {
4
+ Vue.component(XtMapProvider.name, XtMapProvider)
5
+ }
6
+
7
+ export default XtMapProvider
8
+ export { XtMapProvider }
@@ -0,0 +1,7 @@
1
+ import XtProgress from './index.vue'
2
+
3
+ XtProgress.install = function(Vue) {
4
+ Vue.component(XtProgress.name, XtProgress)
5
+ }
6
+
7
+ export default XtProgress
@@ -0,0 +1,103 @@
1
+ <template>
2
+ <div class="xt-progress" :class="[
3
+ `xt-progress--${type}`,
4
+ `xt-progress--${size}`
5
+ ]">
6
+ <div v-if="type === 'line'" class="xt-progress__bar">
7
+ <div
8
+ class="xt-progress__bar-inner"
9
+ :style="{ width: `${percentage}%`, backgroundColor: color }"
10
+ >
11
+ <transition name="xt-progress-fade">
12
+ <div v-if="showText" class="xt-progress__bar-text">{{ percentage }}%</div>
13
+ </transition>
14
+ </div>
15
+ </div>
16
+
17
+ <div v-else-if="type === 'circle'" class="xt-progress__circle">
18
+ <svg :width="circleSize" :height="circleSize" class="xt-progress__circle-svg">
19
+ <circle
20
+ class="xt-progress__circle-bg"
21
+ :cx="circleSize / 2"
22
+ :cy="circleSize / 2"
23
+ :r="circleRadius"
24
+ fill="none"
25
+ :stroke="bgColor"
26
+ :stroke-width="strokeWidth"
27
+ />
28
+ <circle
29
+ class="xt-progress__circle-bar"
30
+ :cx="circleSize / 2"
31
+ :cy="circleSize / 2"
32
+ :r="circleRadius"
33
+ fill="none"
34
+ :stroke="color"
35
+ :stroke-width="strokeWidth"
36
+ :stroke-dasharray="circleLength"
37
+ :stroke-dashoffset="circleOffset"
38
+ stroke-linecap="round"
39
+ transform="rotate(-90 ${circleSize / 2} ${circleSize / 2})"
40
+ />
41
+ </svg>
42
+ <div v-if="showText" class="xt-progress__circle-text">
43
+ <span class="xt-progress__circle-percent">{{ percentage }}%</span>
44
+ </div>
45
+ </div>
46
+
47
+ <div v-if="showText && type === 'line'" class="xt-progress__text">{{ percentage }}%</div>
48
+ </div>
49
+ </template>
50
+
51
+ <script>
52
+ export default {
53
+ name: 'XtProgress',
54
+ props: {
55
+ percentage: {
56
+ type: Number,
57
+ default: 0,
58
+ validator: (val) => val >= 0 && val <= 100
59
+ },
60
+ type: {
61
+ type: String,
62
+ default: 'line',
63
+ validator: (val) => ['line', 'circle'].includes(val)
64
+ },
65
+ size: {
66
+ type: String,
67
+ default: 'medium',
68
+ validator: (val) => ['small', 'medium', 'large'].includes(val)
69
+ },
70
+ color: {
71
+ type: String,
72
+ default: '#1890ff'
73
+ },
74
+ bgColor: {
75
+ type: String,
76
+ default: '#ebeef5'
77
+ },
78
+ showText: {
79
+ type: Boolean,
80
+ default: true
81
+ },
82
+ strokeWidth: {
83
+ type: Number,
84
+ default: 6
85
+ },
86
+ circleSize: {
87
+ type: Number,
88
+ default: 120
89
+ }
90
+ },
91
+ computed: {
92
+ circleRadius() {
93
+ return (this.circleSize - this.strokeWidth) / 2
94
+ },
95
+ circleLength() {
96
+ return 2 * Math.PI * this.circleRadius
97
+ },
98
+ circleOffset() {
99
+ return this.circleLength * (1 - this.percentage / 100)
100
+ }
101
+ }
102
+ }
103
+ </script>
@@ -0,0 +1,119 @@
1
+ @import '../../../styles/variables.scss';
2
+
3
+ .xt-progress {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ }
7
+
8
+ .xt-progress__bar {
9
+ flex: 1;
10
+ height: 6px;
11
+ background: $xt-color-border-light;
12
+ border-radius: 3px;
13
+ overflow: hidden;
14
+ position: relative;
15
+ }
16
+
17
+ .xt-progress--small .xt-progress__bar {
18
+ height: 4px;
19
+ }
20
+
21
+ .xt-progress--large .xt-progress__bar {
22
+ height: 8px;
23
+ }
24
+
25
+ .xt-progress__bar-inner {
26
+ height: 100%;
27
+ border-radius: 3px;
28
+ transition: width 0.3s ease;
29
+ position: relative;
30
+ }
31
+
32
+ .xt-progress__bar-text {
33
+ position: absolute;
34
+ right: -30px;
35
+ top: 50%;
36
+ transform: translateY(-50%);
37
+ font-size: 12px;
38
+ color: $xt-color-text-secondary;
39
+ }
40
+
41
+ .xt-progress__text {
42
+ margin-left: 10px;
43
+ font-size: 14px;
44
+ color: $xt-color-text-secondary;
45
+ }
46
+
47
+ .xt-progress--small .xt-progress__text {
48
+ font-size: 12px;
49
+ }
50
+
51
+ .xt-progress--large .xt-progress__text {
52
+ font-size: 16px;
53
+ }
54
+
55
+ .xt-progress__circle {
56
+ position: relative;
57
+ display: inline-flex;
58
+ align-items: center;
59
+ justify-content: center;
60
+ }
61
+
62
+ .xt-progress__circle-svg {
63
+ transform: rotate(-90deg);
64
+ }
65
+
66
+ .xt-progress__circle-bg {
67
+ transition: stroke 0.3s ease;
68
+ }
69
+
70
+ .xt-progress__circle-bar {
71
+ transition: stroke-dashoffset 0.6s ease;
72
+ }
73
+
74
+ .xt-progress__circle-text {
75
+ position: absolute;
76
+ display: flex;
77
+ flex-direction: column;
78
+ align-items: center;
79
+ justify-content: center;
80
+ }
81
+
82
+ .xt-progress__circle-percent {
83
+ font-size: 16px;
84
+ font-weight: 500;
85
+ color: $xt-color-text-primary;
86
+ }
87
+
88
+ .xt-progress--small .xt-progress__circle-percent {
89
+ font-size: 12px;
90
+ }
91
+
92
+ .xt-progress--large .xt-progress__circle-percent {
93
+ font-size: 20px;
94
+ }
95
+
96
+ .xt-progress-fade-enter-active,
97
+ .xt-progress-fade-leave-active {
98
+ transition: opacity 0.3s ease;
99
+ }
100
+
101
+ .xt-progress-fade-enter,
102
+ .xt-progress-fade-leave-to {
103
+ opacity: 0;
104
+ }
105
+
106
+ [data-theme='dark'], html.dark {
107
+ .xt-progress__bar {
108
+ background: $xt-dark-color-border;
109
+ }
110
+
111
+ .xt-progress__bar-text,
112
+ .xt-progress__text {
113
+ color: $xt-dark-color-text-secondary;
114
+ }
115
+
116
+ .xt-progress__circle-percent {
117
+ color: $xt-dark-color-text-primary;
118
+ }
119
+ }
@@ -1,11 +1,11 @@
1
- import XtStepPrice from './index.vue'
2
- import XtStepPriceItem from '../xt-step-price-item/index.vue'
3
-
4
- XtStepPrice.install = function (Vue) {
5
- Vue.component(XtStepPrice.name, XtStepPrice)
6
- Vue.component(XtStepPriceItem.name, XtStepPriceItem)
7
- }
8
-
9
- // 同时导出组件和 install 方法,支持多种引入方式
10
- export default XtStepPrice
1
+ import XtStepPrice from './index.vue'
2
+ import XtStepPriceItem from '../xt-step-price-item/index.vue'
3
+
4
+ XtStepPrice.install = function (Vue) {
5
+ Vue.component(XtStepPrice.name, XtStepPrice)
6
+ Vue.component(XtStepPriceItem.name, XtStepPriceItem)
7
+ }
8
+
9
+ // 同时导出组件和 install 方法,支持多种引入方式
10
+ export default XtStepPrice
11
11
  export { XtStepPrice, XtStepPriceItem }