xt-element-ui 1.0.8 → 1.0.9

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 (37) hide show
  1. package/lib/index.common.js +617 -390
  2. package/lib/index.css +1 -1
  3. package/lib/index.umd.js +617 -390
  4. package/lib/index.umd.min.js +1 -1
  5. package/package.json +2 -2
  6. package/src/components/button/index.vue +48 -15
  7. package/src/components/button/style/index.scss +130 -0
  8. package/src/components/card/index.vue +20 -41
  9. package/src/components/card/style/index.scss +49 -0
  10. package/src/components/card-item/index.vue +71 -90
  11. package/src/components/card-item/style/index.scss +72 -0
  12. package/src/components/config-provider/index.js +2 -0
  13. package/src/components/config-provider/index.vue +176 -0
  14. package/src/components/config-provider/style/index.scss +12 -0
  15. package/src/components/flex-box/index.vue +20 -90
  16. package/src/components/flex-box/style/index.scss +91 -0
  17. package/src/components/index.scss +19 -0
  18. package/src/components/input/index.vue +28 -11
  19. package/src/components/input/style/index.scss +27 -0
  20. package/src/index.js +65 -122
  21. package/src/styles/export.scss +1 -1
  22. package/src/styles/theme/bg.scss +6 -0
  23. package/src/styles/theme/border.scss +4 -0
  24. package/src/styles/theme/color.scss +11 -0
  25. package/src/styles/theme/component.scss +70 -0
  26. package/src/styles/theme/dark.scss +29 -0
  27. package/src/styles/theme/font.scss +10 -0
  28. package/src/styles/theme/index.scss +11 -0
  29. package/src/styles/theme/radius.scss +4 -0
  30. package/src/styles/theme/shadow.scss +3 -0
  31. package/src/styles/theme/spacing.scss +5 -0
  32. package/src/styles/theme/text.scss +5 -0
  33. package/src/styles/theme/transition.scss +3 -0
  34. package/src/styles/theme-element.scss +0 -10
  35. package/src/styles/variables.scss +1 -126
  36. package/src/styles/{theme.scss → vars.scss} +72 -31
  37. package/src/utils/index.js +195 -124
package/lib/index.umd.js CHANGED
@@ -96,13 +96,6 @@ return /******/ (function(modules) { // webpackBootstrap
96
96
  /************************************************************************/
97
97
  /******/ ({
98
98
 
99
- /***/ "11a3":
100
- /***/ (function(module, exports, __webpack_require__) {
101
-
102
- // extracted by mini-css-extract-plugin
103
-
104
- /***/ }),
105
-
106
99
  /***/ "27fd":
107
100
  /***/ (function(module, exports, __webpack_require__) {
108
101
 
@@ -111,47 +104,14 @@ module.exports = {"xtColorPrimary":"#409EFF","xtColorSuccess":"#67C23A","xtColor
111
104
 
112
105
  /***/ }),
113
106
 
114
- /***/ "3a26":
107
+ /***/ "7fc4":
115
108
  /***/ (function(module, exports, __webpack_require__) {
116
109
 
117
110
  // extracted by mini-css-extract-plugin
118
111
 
119
112
  /***/ }),
120
113
 
121
- /***/ "43ae":
122
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
123
-
124
- "use strict";
125
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_28fcf19e_prod_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("3a26");
126
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_28fcf19e_prod_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_28fcf19e_prod_scoped_true_lang_scss__WEBPACK_IMPORTED_MODULE_0__);
127
- /* unused harmony reexport * */
128
-
129
-
130
- /***/ }),
131
-
132
- /***/ "7876":
133
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
134
-
135
- "use strict";
136
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1100cec5_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("ec69");
137
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1100cec5_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_1100cec5_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
138
- /* unused harmony reexport * */
139
-
140
-
141
- /***/ }),
142
-
143
- /***/ "d0ed":
144
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
145
-
146
- "use strict";
147
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_444d40a5_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__("11a3");
148
- /* harmony import */ var _node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_444d40a5_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_mini_css_extract_plugin_dist_loader_js_ref_9_oneOf_1_0_node_modules_css_loader_dist_cjs_js_ref_9_oneOf_1_1_node_modules_vue_loader_lib_loaders_stylePostLoader_js_node_modules_postcss_loader_src_index_js_ref_9_oneOf_1_2_node_modules_sass_loader_dist_cjs_js_ref_9_oneOf_1_3_node_modules_vue_cli_service_node_modules_cache_loader_dist_cjs_js_ref_1_0_node_modules_vue_loader_lib_index_js_vue_loader_options_index_vue_vue_type_style_index_0_id_444d40a5_prod_lang_scss_scoped_true__WEBPACK_IMPORTED_MODULE_0__);
149
- /* unused harmony reexport * */
150
-
151
-
152
- /***/ }),
153
-
154
- /***/ "ec69":
114
+ /***/ "d67a":
155
115
  /***/ (function(module, exports, __webpack_require__) {
156
116
 
157
117
  // extracted by mini-css-extract-plugin
@@ -166,18 +126,18 @@ module.exports = {"xtColorPrimary":"#409EFF","xtColorSuccess":"#67C23A","xtColor
166
126
  __webpack_require__.r(__webpack_exports__);
167
127
 
168
128
  // EXPORTS
169
- __webpack_require__.d(__webpack_exports__, "utils", function() { return /* reexport */ utils; });
129
+ __webpack_require__.d(__webpack_exports__, "utils", function() { return /* reexport */ src_utils; });
170
130
  __webpack_require__.d(__webpack_exports__, "variables", function() { return /* reexport */ export_default.a; });
171
131
  __webpack_require__.d(__webpack_exports__, "getConfig", function() { return /* reexport */ src_getConfig; });
172
132
  __webpack_require__.d(__webpack_exports__, "setConfig", function() { return /* reexport */ src_setConfig; });
173
- __webpack_require__.d(__webpack_exports__, "setTheme", function() { return /* reexport */ src_setTheme; });
174
- __webpack_require__.d(__webpack_exports__, "setSize", function() { return /* reexport */ src_setSize; });
175
- __webpack_require__.d(__webpack_exports__, "setPrimaryColor", function() { return /* reexport */ src_setPrimaryColor; });
176
133
  __webpack_require__.d(__webpack_exports__, "getTheme", function() { return /* reexport */ src_getTheme; });
177
134
  __webpack_require__.d(__webpack_exports__, "getSize", function() { return /* reexport */ src_getSize; });
178
135
  __webpack_require__.d(__webpack_exports__, "getPrimaryColor", function() { return /* reexport */ src_getPrimaryColor; });
179
136
  __webpack_require__.d(__webpack_exports__, "resetConfig", function() { return /* reexport */ src_resetConfig; });
180
137
  __webpack_require__.d(__webpack_exports__, "onConfigChange", function() { return /* reexport */ src_onConfigChange; });
138
+ __webpack_require__.d(__webpack_exports__, "setTheme", function() { return /* reexport */ src_setTheme; });
139
+ __webpack_require__.d(__webpack_exports__, "setSize", function() { return /* reexport */ src_setSize; });
140
+ __webpack_require__.d(__webpack_exports__, "setPrimaryColor", function() { return /* reexport */ src_setPrimaryColor; });
181
141
 
182
142
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js
183
143
  // This file is imported into lib/wc client bundles.
@@ -195,154 +155,258 @@ if (typeof window !== 'undefined') {
195
155
  // Indicate to webpack that this file can be concatenated
196
156
  /* harmony default export */ var setPublicPath = (null);
197
157
 
158
+ // EXTERNAL MODULE: ./src/styles/vars.scss
159
+ var vars = __webpack_require__("7fc4");
160
+
161
+ // EXTERNAL MODULE: ./src/components/index.scss
162
+ var components = __webpack_require__("d67a");
163
+
198
164
  // EXTERNAL MODULE: ./src/styles/export.scss
199
165
  var styles_export = __webpack_require__("27fd");
200
166
  var export_default = /*#__PURE__*/__webpack_require__.n(styles_export);
201
167
 
202
168
  // CONCATENATED MODULE: ./src/utils/index.js
203
-
204
- // 默认配置
205
- const defaultConfig = {
206
- theme: 'light',
207
- size: 'medium',
208
- primaryColor: '#1890ff'
209
- }
210
-
211
- // 当前配置
212
- let currentConfig = { ...defaultConfig }
213
-
214
- // 配置变更事件处理
215
- const configChangeListeners = []
216
-
217
- const emitConfigChange = function(key, value) {
218
- configChangeListeners.forEach(listener => {
219
- listener(key, value)
220
- })
221
- }
222
-
223
- // 获取所有配置
224
- const getConfig = function() {
225
- return { ...currentConfig }
226
- }
227
-
228
- // 设置全局配置
229
- const setConfig = function(config) {
230
- if (typeof config !== 'object' || config === null) {
231
- console.warn('[XtElementUI] setConfig 必须传入对象参数')
232
- return
233
- }
234
-
235
- if (config.theme !== undefined) {
236
- setTheme(config.theme)
237
- }
238
- if (config.size !== undefined) {
239
- setSize(config.size)
240
- }
241
- if (config.primaryColor !== undefined) {
242
- setPrimaryColor(config.primaryColor)
243
- }
244
- }
245
-
246
-
247
- // 设置主题
248
- const setTheme = function(theme) {
249
- const validThemes = ['light', 'dark', 'compact']
250
- if (!validThemes.includes(theme)) {
251
- console.warn(`[XtElementUI] 无效的主题值: ${theme},可选值: ${validThemes.join(', ')}`)
252
- return
253
- }
254
-
255
- currentConfig.theme = theme
256
- document.documentElement.setAttribute('data-theme', theme)
257
- emitConfigChange('theme', theme)
258
- }
259
-
260
- // 设置字体大小
261
- const setSize = function(size) {
262
- const validSizes = ['small', 'medium', 'large']
263
- if (!validSizes.includes(size)) {
264
- console.warn(`[XtElementUI] 无效的大小值: ${size},可选值: ${validSizes.join(', ')}`)
265
- return
266
- }
267
-
268
- currentConfig.size = size
269
- document.documentElement.setAttribute('data-size', size)
270
- emitConfigChange('size', size)
271
- }
272
-
273
- // 设置主色调
274
- const setPrimaryColor = function(color) {
275
- // 简单的颜色格式验证
276
- const colorRegex = /^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{3}$/
277
- if (!colorRegex.test(color)) {
278
- console.warn(`[XtElementUI] 无效的颜色值: ${color},请使用十六进制颜色格式,如 #1890ff`)
279
- return
280
- }
281
-
282
- currentConfig.primaryColor = color
283
- document.documentElement.style.setProperty('--xt-color-primary', color)
284
- emitConfigChange('primaryColor', color)
285
- }
286
-
287
- // 获取当前主题
288
- const getTheme = function() {
289
- return currentConfig.theme
290
- }
291
-
292
- // 获取当前字体大小
293
- const getSize = function() {
294
- return currentConfig.size
295
- }
296
-
297
- // 获取当前主色调
298
- const getPrimaryColor = function() {
299
- return currentConfig.primaryColor
300
- }
301
-
302
- // 重置为默认配置
303
- const resetConfig = function() {
304
- setConfig(defaultConfig)
305
- }
306
-
307
- // 监听配置变更
308
- const onConfigChange = function(listener) {
309
- if (typeof listener === 'function') {
310
- configChangeListeners.push(listener)
311
- return function() {
312
- const index = configChangeListeners.indexOf(listener)
313
- if (index > -1) {
314
- configChangeListeners.splice(index, 1)
315
- }
316
- }
317
- } else {
318
- console.warn('[XtElementUI] onConfigChange 必须传入函数')
319
- }
320
- }
321
-
322
- /* harmony default export */ var utils = ({
323
- setTheme,
324
- setSize,
325
- setPrimaryColor
326
- });
327
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"ddfdb4f6-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/button/index.vue?vue&type=template&id=0ad9d4c9
328
- var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-button',{on:{"click":_vm.handleClick}},[_vm._t("default")],2)
169
+ // 默认配置
170
+ const defaultConfig = {
171
+ theme: 'light',
172
+ size: 'medium',
173
+ primaryColor: '#409EFF'
174
+ }
175
+
176
+ // 当前配置
177
+ let currentConfig = { ...defaultConfig }
178
+
179
+ // 调试:输出初始化信息
180
+ console.log('[XtElementUI] utils initialized with currentConfig:', currentConfig)
181
+
182
+ // 配置变更事件处理
183
+ const configChangeListeners = []
184
+
185
+ const emitConfigChange = function(key, value) {
186
+ configChangeListeners.forEach(listener => {
187
+ listener(key, value)
188
+ })
189
+ }
190
+
191
+ // 获取所有配置
192
+ const getConfig = function() {
193
+ return { ...currentConfig }
194
+ }
195
+
196
+ // 设置全局配置
197
+ const setConfig = function(config) {
198
+ if (typeof config !== 'object' || config === null) {
199
+ console.warn('[XtElementUI] setConfig 必须传入对象参数')
200
+ return
201
+ }
202
+
203
+ if (config.theme !== undefined) {
204
+ setTheme(config.theme)
205
+ }
206
+ if (config.size !== undefined) {
207
+ setSize(config.size)
208
+ }
209
+ if (config.primaryColor !== undefined) {
210
+ setPrimaryColor(config.primaryColor)
211
+ }
212
+ }
213
+
214
+
215
+ // 设置主题
216
+ const setTheme = function(theme) {
217
+ const validThemes = ['light', 'dark']
218
+ if (!validThemes.includes(theme)) {
219
+ console.warn(`[XtElementUI] 无效的主题值: ${theme},可选值: ${validThemes.join(', ')}`)
220
+ return
221
+ }
222
+
223
+ currentConfig.theme = theme
224
+ const root = document.documentElement
225
+
226
+ // 使用类名方式切换主题(兼容 Element Plus 风格)
227
+ if (theme === 'dark') {
228
+ root.classList.add('dark')
229
+ root.setAttribute('data-theme', 'dark')
230
+ } else {
231
+ root.classList.remove('dark')
232
+ root.removeAttribute('data-theme')
233
+ }
234
+
235
+ emitConfigChange('theme', theme)
236
+ }
237
+
238
+ // 设置字体大小
239
+ const setSize = function(size) {
240
+ const validSizes = ['small', 'medium', 'large']
241
+ if (!validSizes.includes(size)) {
242
+ console.warn(`[XtElementUI] 无效的大小值: ${size},可选值: ${validSizes.join(', ')}`)
243
+ return
244
+ }
245
+
246
+ currentConfig.size = size
247
+ document.documentElement.setAttribute('data-size', size)
248
+ emitConfigChange('size', size)
249
+ }
250
+
251
+ // 将十六进制颜色转换为 RGB 对象
252
+ function hexToRgb(hex) {
253
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
254
+ return result ? {
255
+ r: parseInt(result[1], 16),
256
+ g: parseInt(result[2], 16),
257
+ b: parseInt(result[3], 16)
258
+ } : null
259
+ }
260
+
261
+ // 将 RGB 对象转换为十六进制颜色
262
+ function rgbToHex(r, g, b) {
263
+ return '#' + [r, g, b].map(x => {
264
+ const hex = x.toString(16)
265
+ return hex.length === 1 ? '0' + hex : hex
266
+ }).join('')
267
+ }
268
+
269
+ // 计算浅色系列(混合白色)
270
+ function lightenColor(hex, percent) {
271
+ const rgb = hexToRgb(hex)
272
+ if (!rgb) return hex
273
+
274
+ const amount = Math.round(2.55 * percent)
275
+ const r = Math.min(255, rgb.r + amount)
276
+ const g = Math.min(255, rgb.g + amount)
277
+ const b = Math.min(255, rgb.b + amount)
278
+
279
+ return rgbToHex(r, g, b)
280
+ }
281
+
282
+ // 设置主色调
283
+ const setPrimaryColor = function(color) {
284
+ // 颜色格式验证(支持 3/6/8 位十六进制)
285
+ const colorRegex = /^#[0-9A-Fa-f]{3}$|^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{8}$/
286
+ if (!colorRegex.test(color)) {
287
+ console.warn(`[XtElementUI] 无效的颜色值: ${color},请使用十六进制颜色格式,如 #1890ff`)
288
+ return
289
+ }
290
+
291
+ // 转换为 6 位十六进制(去掉透明度)
292
+ let validColor = color
293
+ if (color.length === 4) {
294
+ // #RGB 转换为 #RRGGBB
295
+ validColor = '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]
296
+ } else if (color.length === 9) {
297
+ // #RRGGBBAA 转换为 #RRGGBB(去掉 Alpha)
298
+ validColor = color.substring(0, 7)
299
+ }
300
+
301
+ currentConfig.primaryColor = validColor
302
+
303
+ // 设置主色调
304
+ document.documentElement.style.setProperty('--xt-color-primary', validColor)
305
+
306
+ // 动态计算并设置浅色系列
307
+ document.documentElement.style.setProperty('--xt-color-primary-light-3', lightenColor(validColor, 30))
308
+ document.documentElement.style.setProperty('--xt-color-primary-light-5', lightenColor(validColor, 50))
309
+ document.documentElement.style.setProperty('--xt-color-primary-light-7', lightenColor(validColor, 70))
310
+ document.documentElement.style.setProperty('--xt-color-primary-light-8', lightenColor(validColor, 80))
311
+ document.documentElement.style.setProperty('--xt-color-primary-light-9', lightenColor(validColor, 90))
312
+
313
+ emitConfigChange('primaryColor', validColor)
314
+ console.log('[XtElementUI] 主色调已设置为:', validColor)
315
+ }
316
+
317
+ // 获取当前主题
318
+ const getTheme = function() {
319
+ return currentConfig.theme
320
+ }
321
+
322
+ // 获取当前字体大小
323
+ const getSize = function() {
324
+ return currentConfig.size
325
+ }
326
+
327
+ // 获取当前主色调
328
+ const getPrimaryColor = function() {
329
+ return currentConfig.primaryColor
330
+ }
331
+
332
+ // 重置为默认配置
333
+ const resetConfig = function() {
334
+ setConfig(defaultConfig)
335
+ }
336
+
337
+ // 监听配置变更
338
+ const onConfigChange = function(listener) {
339
+ if (typeof listener === 'function') {
340
+ configChangeListeners.push(listener)
341
+ return function() {
342
+ const index = configChangeListeners.indexOf(listener)
343
+ if (index > -1) {
344
+ configChangeListeners.splice(index, 1)
345
+ }
346
+ }
347
+ } else {
348
+ console.warn('[XtElementUI] onConfigChange 必须传入函数')
349
+ }
350
+ }
351
+
352
+ /* harmony default export */ var utils = ({
353
+ setTheme,
354
+ setSize,
355
+ setPrimaryColor,
356
+ getConfig,
357
+ setConfig,
358
+ getTheme,
359
+ getSize,
360
+ getPrimaryColor,
361
+ resetConfig,
362
+ onConfigChange
363
+ });
364
+
365
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"721fc731-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/button/index.vue?vue&type=template&id=0886961b
366
+ var render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-button',{staticClass:"xt-button",class:['xt-button--' + _vm.type],style:(_vm.buttonStyle),attrs:{"type":_vm.type,"plain":_vm.plain},on:{"click":_vm.handleClick}},[_vm._t("default")],2)
329
367
  }
330
368
  var staticRenderFns = []
331
369
 
332
370
 
333
- // CONCATENATED MODULE: ./src/components/button/index.vue?vue&type=template&id=0ad9d4c9
371
+ // CONCATENATED MODULE: ./src/components/button/index.vue?vue&type=template&id=0886961b
334
372
 
335
373
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/button/index.vue?vue&type=script&lang=js
336
-
337
- /* harmony default export */ var buttonvue_type_script_lang_js = ({
338
- name: 'XtButton',
339
- methods:{
340
- handleClick(){
341
- this.$emit('click')
342
- }
343
- }
344
- });
345
-
374
+
375
+ /* harmony default export */ var buttonvue_type_script_lang_js = ({
376
+ name: 'XtButton',
377
+ props: {
378
+ type: {
379
+ type: String,
380
+ default: 'primary'
381
+ },
382
+ plain: {
383
+ type: Boolean,
384
+ default: false
385
+ },
386
+ color: {
387
+ type: String,
388
+ default: ''
389
+ }
390
+ },
391
+ computed: {
392
+ buttonStyle() {
393
+ if (this.color) {
394
+ return {
395
+ '--xt-button-bg-color': this.color,
396
+ '--xt-button-border-color': this.color,
397
+ '--xt-button-text-color': '#fff'
398
+ }
399
+ }
400
+ return {}
401
+ }
402
+ },
403
+ methods: {
404
+ handleClick() {
405
+ this.$emit('click')
406
+ }
407
+ }
408
+ });
409
+
346
410
  // CONCATENATED MODULE: ./src/components/button/index.vue?vue&type=script&lang=js
347
411
  /* harmony default export */ var components_buttonvue_type_script_lang_js = (buttonvue_type_script_lang_js);
348
412
  // CONCATENATED MODULE: ./node_modules/vue-loader/lib/runtime/componentNormalizer.js
@@ -466,27 +530,41 @@ var component = normalizeComponent(
466
530
  // CONCATENATED MODULE: ./src/components/button/index.js
467
531
 
468
532
  /* harmony default export */ var src_components_button = (components_button);
469
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"ddfdb4f6-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/input/index.vue?vue&type=template&id=fe9146e4
470
- var inputvue_type_template_id_fe9146e4_render = function render(){var _vm=this,_c=_vm._self._c;return _c('el-input',{attrs:{"value":_vm.value,"placeholder":_vm.placeholder},on:{"input":function($event){return _vm.$emit('input', $event)}}})
533
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"721fc731-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/input/index.vue?vue&type=template&id=4349f550
534
+ var inputvue_type_template_id_4349f550_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-input"},[_c('el-input',{style:(_vm.inputStyle),attrs:{"value":_vm.value,"placeholder":_vm.placeholder},on:{"input":function($event){return _vm.$emit('input', $event)}}})],1)
471
535
  }
472
- var inputvue_type_template_id_fe9146e4_staticRenderFns = []
536
+ var inputvue_type_template_id_4349f550_staticRenderFns = []
473
537
 
474
538
 
475
- // CONCATENATED MODULE: ./src/components/input/index.vue?vue&type=template&id=fe9146e4
539
+ // CONCATENATED MODULE: ./src/components/input/index.vue?vue&type=template&id=4349f550
476
540
 
477
541
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/input/index.vue?vue&type=script&lang=js
478
542
 
479
- /* harmony default export */ var inputvue_type_script_lang_js = ({
480
- name: 'XtInput',
481
- props: {
482
- value: [String, Number],
483
- placeholder: {
484
- type: String,
485
- default: '请输入内容'
543
+ /* harmony default export */ var inputvue_type_script_lang_js = ({
544
+ name: 'XtInput',
545
+ props: {
546
+ value: [String, Number],
547
+ placeholder: {
548
+ type: String,
549
+ default: '请输入内容'
550
+ },
551
+ color: {
552
+ type: String,
553
+ default: ''
554
+ }
555
+ },
556
+ computed: {
557
+ inputStyle() {
558
+ if (this.color) {
559
+ return {
560
+ '--xt-input-focus-color': this.color
561
+ }
486
562
  }
563
+ return {}
487
564
  }
488
- });
489
-
565
+ }
566
+ });
567
+
490
568
  // CONCATENATED MODULE: ./src/components/input/index.vue?vue&type=script&lang=js
491
569
  /* harmony default export */ var components_inputvue_type_script_lang_js = (inputvue_type_script_lang_js);
492
570
  // CONCATENATED MODULE: ./src/components/input/index.vue
@@ -499,8 +577,8 @@ var inputvue_type_template_id_fe9146e4_staticRenderFns = []
499
577
 
500
578
  var input_component = normalizeComponent(
501
579
  components_inputvue_type_script_lang_js,
502
- inputvue_type_template_id_fe9146e4_render,
503
- inputvue_type_template_id_fe9146e4_staticRenderFns,
580
+ inputvue_type_template_id_4349f550_render,
581
+ inputvue_type_template_id_4349f550_staticRenderFns,
504
582
  false,
505
583
  null,
506
584
  null,
@@ -512,55 +590,60 @@ var input_component = normalizeComponent(
512
590
  // CONCATENATED MODULE: ./src/components/input/index.js
513
591
 
514
592
  /* harmony default export */ var components_input = (input);
515
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"ddfdb4f6-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/flex-box/index.vue?vue&type=template&id=28fcf19e&scoped=true
516
- var flex_boxvue_type_template_id_28fcf19e_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-flex-box",class:_vm.classAttrs,staticStyle:{"gap":"gap"}},[_vm._t("default")],2)
593
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"721fc731-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/flex-box/index.vue?vue&type=template&id=68f07021
594
+ var flex_boxvue_type_template_id_68f07021_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-flex-box",class:_vm.classAttrs,style:(_vm.flexStyle)},[_vm._t("default")],2)
517
595
  }
518
- var flex_boxvue_type_template_id_28fcf19e_scoped_true_staticRenderFns = []
596
+ var flex_boxvue_type_template_id_68f07021_staticRenderFns = []
519
597
 
520
598
 
521
- // CONCATENATED MODULE: ./src/components/flex-box/index.vue?vue&type=template&id=28fcf19e&scoped=true
599
+ // CONCATENATED MODULE: ./src/components/flex-box/index.vue?vue&type=template&id=68f07021
522
600
 
523
601
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/flex-box/index.vue?vue&type=script&lang=js
524
602
 
525
603
  /* harmony default export */ var flex_boxvue_type_script_lang_js = ({
526
- name: "XtFlex",
604
+ name: "XtFlexBox",
527
605
  props: {
528
- type: "flex",
529
- align: "center",
530
- content: "start",
531
- direction: "row",
532
- wrap: "unset",
533
- gap: {}
606
+ type: { type: String, default: "flex" },
607
+ align: { type: String, default: "center" },
608
+ content: { type: String, default: "start" },
609
+ direction: { type: String, default: "row" },
610
+ wrap: { type: String, default: "unset" },
611
+ gap: { type: String, default: "" }
534
612
  },
535
613
  computed: {
536
614
  classAttrs(){
537
- const {inline, align, wrap, direction,content} = this;
538
- return [`${inline?'is-inline':'flex'}`, `align-${align} content-${content} direction-${direction} wrap-${wrap}`]
615
+ const { type, align, wrap, direction, content } = this;
616
+ return [`${type}`, `align-${align}`, `content-${content}`, `direction-${direction}`, `wrap-${wrap}`]
617
+ },
618
+ flexStyle() {
619
+ const result = {}
620
+ if (this.gap) {
621
+ result.gap = this.gap
622
+ } else {
623
+ result.gap = 'var(--xt-flex-box-gap, 8px)'
624
+ }
625
+ return result
539
626
  }
540
627
  }
541
628
  });
542
629
 
543
630
  // CONCATENATED MODULE: ./src/components/flex-box/index.vue?vue&type=script&lang=js
544
631
  /* harmony default export */ var components_flex_boxvue_type_script_lang_js = (flex_boxvue_type_script_lang_js);
545
- // EXTERNAL MODULE: ./src/components/flex-box/index.vue?vue&type=style&index=0&id=28fcf19e&prod&scoped=true&lang=scss
546
- var flex_boxvue_type_style_index_0_id_28fcf19e_prod_scoped_true_lang_scss = __webpack_require__("43ae");
547
-
548
632
  // CONCATENATED MODULE: ./src/components/flex-box/index.vue
549
633
 
550
634
 
551
635
 
552
636
 
553
637
 
554
-
555
638
  /* normalize component */
556
639
 
557
640
  var flex_box_component = normalizeComponent(
558
641
  components_flex_boxvue_type_script_lang_js,
559
- flex_boxvue_type_template_id_28fcf19e_scoped_true_render,
560
- flex_boxvue_type_template_id_28fcf19e_scoped_true_staticRenderFns,
642
+ flex_boxvue_type_template_id_68f07021_render,
643
+ flex_boxvue_type_template_id_68f07021_staticRenderFns,
561
644
  false,
562
645
  null,
563
- "28fcf19e",
646
+ null,
564
647
  null
565
648
 
566
649
  )
@@ -569,50 +652,46 @@ var flex_box_component = normalizeComponent(
569
652
  // CONCATENATED MODULE: ./src/components/flex-box/index.js
570
653
 
571
654
  /* harmony default export */ var components_flex_box = (flex_box);
572
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"ddfdb4f6-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/card/index.vue?vue&type=template&id=444d40a5&scoped=true
573
- var cardvue_type_template_id_444d40a5_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-card",class:{'no-padding': _vm.noPadding }},[(_vm.title)?_c('div',{staticClass:"card_header"},[_vm._t("title",function(){return [_vm._v(_vm._s(_vm.title))]})],2):_vm._e(),_c('div',{staticClass:"card_body"},[_vm._t("default",function(){return [_c('span',{staticClass:"value"},[_vm._t("value",function(){return [_vm._v(_vm._s(_vm.value))]})],2),_c('span',{staticClass:"unit"},[_vm._v(_vm._s(_vm.unit))])]})],2)])
655
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"721fc731-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/card/index.vue?vue&type=template&id=cb20295a
656
+ var cardvue_type_template_id_cb20295a_render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:"xt-card",class:{'no-padding': _vm.noPadding }},[(_vm.title)?_c('div',{staticClass:"card__header"},[_vm._t("title",function(){return [_vm._v(_vm._s(_vm.title))]})],2):_vm._e(),_c('div',{staticClass:"card__body"},[_vm._t("default",function(){return [_c('span',{staticClass:"value"},[_vm._t("value",function(){return [_vm._v(_vm._s(_vm.value))]})],2),_c('span',{staticClass:"unit"},[_vm._v(_vm._s(_vm.unit))])]})],2)])
574
657
  }
575
- var cardvue_type_template_id_444d40a5_scoped_true_staticRenderFns = []
658
+ var cardvue_type_template_id_cb20295a_staticRenderFns = []
576
659
 
577
660
 
578
- // CONCATENATED MODULE: ./src/components/card/index.vue?vue&type=template&id=444d40a5&scoped=true
661
+ // CONCATENATED MODULE: ./src/components/card/index.vue?vue&type=template&id=cb20295a
579
662
 
580
663
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/card/index.vue?vue&type=script&lang=js
581
664
 
582
665
  /* harmony default export */ var cardvue_type_script_lang_js = ({
583
- name:"XtCard",
584
- props:{
585
- type:{},
586
- title:{},
587
- value:{},
588
- unit:{},
589
- icon:{},
590
- iconIn:{default:"right"},
591
- noPadding:{type:Boolean,default:false}
666
+ name: "XtCard",
667
+ props: {
668
+ type: {},
669
+ title: {},
670
+ value: {},
671
+ unit: {},
672
+ icon: {},
673
+ iconIn: { default: "right" },
674
+ noPadding: { type: Boolean, default: false }
592
675
  }
593
676
  });
594
677
 
595
678
  // CONCATENATED MODULE: ./src/components/card/index.vue?vue&type=script&lang=js
596
679
  /* harmony default export */ var components_cardvue_type_script_lang_js = (cardvue_type_script_lang_js);
597
- // EXTERNAL MODULE: ./src/components/card/index.vue?vue&type=style&index=0&id=444d40a5&prod&lang=scss&scoped=true
598
- var cardvue_type_style_index_0_id_444d40a5_prod_lang_scss_scoped_true = __webpack_require__("d0ed");
599
-
600
680
  // CONCATENATED MODULE: ./src/components/card/index.vue
601
681
 
602
682
 
603
683
 
604
684
 
605
685
 
606
-
607
686
  /* normalize component */
608
687
 
609
688
  var card_component = normalizeComponent(
610
689
  components_cardvue_type_script_lang_js,
611
- cardvue_type_template_id_444d40a5_scoped_true_render,
612
- cardvue_type_template_id_444d40a5_scoped_true_staticRenderFns,
690
+ cardvue_type_template_id_cb20295a_render,
691
+ cardvue_type_template_id_cb20295a_staticRenderFns,
613
692
  false,
614
693
  null,
615
- "444d40a5",
694
+ null,
616
695
  null
617
696
 
618
697
  )
@@ -621,74 +700,90 @@ var card_component = normalizeComponent(
621
700
  // CONCATENATED MODULE: ./src/components/card/index.js
622
701
 
623
702
  /* harmony default export */ var components_card = (card);
624
- // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"ddfdb4f6-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/card-item/index.vue?vue&type=template&id=1100cec5&scoped=true
625
- var card_itemvue_type_template_id_1100cec5_scoped_true_render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.iconType=='border')?_c('FlexBox',{staticClass:"xt-card-item is-border",class:[_vm.iconType=='border'?`is-${_vm.type}`:''],attrs:{"content":"between"}},[(_vm.title)?_c('span',{staticClass:"item_label"},[_vm._t("label",function(){return [_vm._v(_vm._s(_vm.label))]})],2):_vm._e(),_c('span',{staticClass:"item-value"},[_vm._t("value",function(){return [_vm._v(_vm._s(_vm.value))]})],2),_c('span',{staticClass:"item_unit"},[_vm._t("unit",function(){return [_vm._v(_vm._s(_vm.unit))]})],2)]):_c('FlexBox',{staticClass:"xt-card-item",attrs:{"direction":_vm.direction,"content":_vm.contentAlign}},[_vm._t("icon",function(){return [_c('el-button',{attrs:{"type":_vm.type,"circle":_vm.circle,"round":_vm.round,"plain":"","icon":_vm.icon}})]}),_c('div',{staticClass:"item-value"},[_c('span',{staticClass:"value"},[_vm._t("value",function(){return [_vm._v(_vm._s(_vm.label))]})],2),_c('div',{staticClass:"unit"},[_vm._v(_vm._s(_vm.value))])])],2)
703
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"721fc731-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/card-item/index.vue?vue&type=template&id=20eea1e3
704
+ var card_itemvue_type_template_id_20eea1e3_render = function render(){var _vm=this,_c=_vm._self._c;return (_vm.iconType=='border')?_c('FlexBox',{staticClass:"xt-card-item is-border",class:[_vm.iconType=='border'?`is-${_vm.type}`:''],style:(_vm.cardItemStyle),attrs:{"content":"between"}},[(_vm.title)?_c('span',{staticClass:"item__label"},[_vm._t("label",function(){return [_vm._v(_vm._s(_vm.label))]})],2):_vm._e(),_c('span',{staticClass:"item__value"},[_vm._t("value",function(){return [_vm._v(_vm._s(_vm.value))]})],2),_c('span',{staticClass:"item__unit"},[_vm._t("unit",function(){return [_vm._v(_vm._s(_vm.unit))]})],2)]):_c('FlexBox',{staticClass:"xt-card-item",attrs:{"direction":_vm.direction,"content":_vm.contentAlign}},[_vm._t("icon",function(){return [_c('el-button',{attrs:{"type":_vm.type,"circle":_vm.circle,"round":_vm.round,"plain":"","icon":_vm.icon}})]}),_c('div',{staticClass:"item__value"},[_c('span',{staticClass:"value",style:(_vm.valueStyle)},[_vm._t("value",function(){return [_vm._v(_vm._s(_vm.label))]})],2),_c('div',{staticClass:"unit"},[_vm._v(_vm._s(_vm.value))])])],2)
626
705
  }
627
- var card_itemvue_type_template_id_1100cec5_scoped_true_staticRenderFns = []
706
+ var card_itemvue_type_template_id_20eea1e3_staticRenderFns = []
628
707
 
629
708
 
630
- // CONCATENATED MODULE: ./src/components/card-item/index.vue?vue&type=template&id=1100cec5&scoped=true
709
+ // CONCATENATED MODULE: ./src/components/card-item/index.vue?vue&type=template&id=20eea1e3
631
710
 
632
711
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/card-item/index.vue?vue&type=script&lang=js
633
712
 
634
713
 
635
714
  /* harmony default export */ var card_itemvue_type_script_lang_js = ({
636
- name:"XtCardItem",
637
- components:{
715
+ name: "XtCardItem",
716
+ components: {
638
717
  FlexBox: flex_box
639
718
  },
640
- props:{
641
- iconType:{default:"border"},
642
- type:{default:"primary"},
643
- label:{},
644
- value:{},
645
- unit:{},
646
- icon:{},
647
- iconAt:{default:"right"}
719
+ props: {
720
+ iconType: { default: "border" },
721
+ type: { default: "primary" },
722
+ label: {},
723
+ value: {},
724
+ unit: {},
725
+ icon: {},
726
+ iconAt: { default: "right" },
727
+ color: {
728
+ type: String,
729
+ default: ''
730
+ }
648
731
  },
649
- data(){
650
- return{
732
+ data() {
733
+ return {
651
734
  circle: false,
652
735
  round: false
653
736
  }
654
737
  },
655
- computed:{
656
- contentAlign(){
657
- return this.iconAt=='center'?'center':'start'
738
+ computed: {
739
+ contentAlign() {
740
+ return this.iconAt == 'center' ? 'center' : 'start'
658
741
  },
659
- direction(){
742
+ direction() {
660
743
  const iconAtMap = {
661
- left:'row',
662
- right:'row-reverse',
663
- top:'column',
664
- bottom:'column-reverse'
744
+ left: 'row',
745
+ right: 'row-reverse',
746
+ top: 'column',
747
+ bottom: 'column-reverse'
665
748
  }
666
749
  return iconAtMap[this.iconAt]
750
+ },
751
+ cardItemStyle() {
752
+ if (this.iconType === 'border' && this.type === 'primary' && this.color) {
753
+ return {
754
+ '--xt-card-item-color': this.color
755
+ }
756
+ }
757
+ return {}
758
+ },
759
+ valueStyle() {
760
+ if (this.iconType !== 'border' && this.type === 'primary' && this.color) {
761
+ return {
762
+ color: this.color
763
+ }
764
+ }
765
+ return {}
667
766
  }
668
767
  }
669
768
  });
670
769
 
671
770
  // CONCATENATED MODULE: ./src/components/card-item/index.vue?vue&type=script&lang=js
672
771
  /* harmony default export */ var components_card_itemvue_type_script_lang_js = (card_itemvue_type_script_lang_js);
673
- // EXTERNAL MODULE: ./src/components/card-item/index.vue?vue&type=style&index=0&id=1100cec5&prod&lang=scss&scoped=true
674
- var card_itemvue_type_style_index_0_id_1100cec5_prod_lang_scss_scoped_true = __webpack_require__("7876");
675
-
676
772
  // CONCATENATED MODULE: ./src/components/card-item/index.vue
677
773
 
678
774
 
679
775
 
680
776
 
681
777
 
682
-
683
778
  /* normalize component */
684
779
 
685
780
  var card_item_component = normalizeComponent(
686
781
  components_card_itemvue_type_script_lang_js,
687
- card_itemvue_type_template_id_1100cec5_scoped_true_render,
688
- card_itemvue_type_template_id_1100cec5_scoped_true_staticRenderFns,
782
+ card_itemvue_type_template_id_20eea1e3_render,
783
+ card_itemvue_type_template_id_20eea1e3_staticRenderFns,
689
784
  false,
690
785
  null,
691
- "1100cec5",
786
+ null,
692
787
  null
693
788
 
694
789
  )
@@ -697,12 +792,223 @@ var card_item_component = normalizeComponent(
697
792
  // CONCATENATED MODULE: ./src/components/card-item/index.js
698
793
 
699
794
  /* harmony default export */ var components_card_item = (card_item);
795
+ // CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"721fc731-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??ref--5!./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/config-provider/index.vue?vue&type=template&id=676593fc
796
+ var config_providervue_type_template_id_676593fc_render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,_vm._b({tag:"component",class:_vm.computedClass,style:(_vm.mergedStyle)},'component',_vm.customAttrs,false),[_vm._t("default")],2)
797
+ }
798
+ var config_providervue_type_template_id_676593fc_staticRenderFns = []
799
+
800
+
801
+ // CONCATENATED MODULE: ./src/components/config-provider/index.vue?vue&type=template&id=676593fc
802
+
803
+ // CONCATENATED MODULE: ./node_modules/@vue/cli-service/node_modules/cache-loader/dist/cjs.js??ref--1-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/config-provider/index.vue?vue&type=script&lang=js
804
+
805
+ /* harmony default export */ var config_providervue_type_script_lang_js = ({
806
+ name: 'XtConfigProvider',
807
+ inheritAttrs: false,
808
+ props: {
809
+ theme: {
810
+ type: String,
811
+ default: 'light'
812
+ },
813
+ size: {
814
+ type: String,
815
+ default: 'medium'
816
+ },
817
+ primaryColor: {
818
+ type: String,
819
+ default: '#409EFF'
820
+ },
821
+ vars: {
822
+ type: Object,
823
+ default: () => ({})
824
+ },
825
+ tag: {
826
+ type: String,
827
+ default: 'div',
828
+ validator: (value) => {
829
+ return ['div', 'span', 'section', 'main', 'template', 'article', 'aside'].includes(value)
830
+ }
831
+ },
832
+ injectBackground: {
833
+ type: Boolean,
834
+ default: false
835
+ },
836
+ injectColor: {
837
+ type: Boolean,
838
+ default: false
839
+ }
840
+ },
841
+ computed: {
842
+ mergedStyle() {
843
+ const result = { ...this.vars }
844
+
845
+ if (this.primaryColor) {
846
+ const color = this.normalizeColor(this.primaryColor)
847
+ result['--xt-color-primary'] = color
848
+ result['--xt-color-primary-light-3'] = this.lightenColor(color, 30)
849
+ result['--xt-color-primary-light-5'] = this.lightenColor(color, 50)
850
+ result['--xt-color-primary-light-7'] = this.lightenColor(color, 70)
851
+ result['--xt-color-primary-light-8'] = this.lightenColor(color, 80)
852
+ result['--xt-color-primary-light-9'] = this.lightenColor(color, 90)
853
+ }
854
+
855
+ const sizeMap = {
856
+ small: '12px',
857
+ medium: '14px',
858
+ large: '16px'
859
+ }
860
+ if (sizeMap[this.size]) {
861
+ result['--xt-font-size-base'] = sizeMap[this.size]
862
+ }
863
+
864
+ if (this.theme === 'dark') {
865
+ result['--xt-color-text-primary'] = 'rgba(255, 255, 255, 0.95)'
866
+ result['--xt-color-text-regular'] = 'rgba(255, 255, 255, 0.8)'
867
+ result['--xt-color-text-secondary'] = 'rgba(255, 255, 255, 0.6)'
868
+ result['--xt-color-bg-primary'] = '#1f1f1f'
869
+ result['--xt-color-bg-secondary'] = '#2d2d2d'
870
+ result['--xt-color-bg-container'] = '#1f1f1f'
871
+ result['--xt-color-border'] = '#434343'
872
+ result['--xt-color-border-light'] = '#3d3d3d'
873
+
874
+ if (this.injectBackground) {
875
+ result.backgroundColor = result['--xt-color-bg-primary']
876
+ }
877
+ if (this.injectColor) {
878
+ result.color = result['--xt-color-text-primary']
879
+ }
880
+ }
881
+
882
+ return result
883
+ },
884
+ computedClass() {
885
+ const classes = []
886
+
887
+ if (this.tag !== 'template') {
888
+ classes.push('xt-config-provider')
889
+
890
+ if (this.theme === 'dark') {
891
+ classes.push('xt-config-provider--dark')
892
+ }
893
+ }
894
+
895
+ return classes
896
+ },
897
+ customAttrs() {
898
+ const props = ['theme', 'size', 'primaryColor', 'vars', 'tag', 'injectBackground', 'injectColor']
899
+ const attrs = {}
900
+
901
+ for (const key in this.$attrs) {
902
+ if (!props.includes(key)) {
903
+ attrs[key] = this.$attrs[key]
904
+ }
905
+ }
906
+
907
+ return attrs
908
+ }
909
+ },
910
+ methods: {
911
+ normalizeColor(color) {
912
+ if (!color) return '#409EFF'
913
+
914
+ if (/^#[0-9A-Fa-f]{6}$/.test(color)) {
915
+ return color
916
+ }
917
+
918
+ if (/^#[0-9A-Fa-f]{3}$/.test(color)) {
919
+ return '#' + color[1] + color[1] + color[2] + color[2] + color[3] + color[3]
920
+ }
921
+
922
+ if (/^#[0-9A-Fa-f]{8}$/.test(color)) {
923
+ return color.substring(0, 7)
924
+ }
925
+
926
+ const rgbaMatch = color.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)/i)
927
+ if (rgbaMatch) {
928
+ const r = parseInt(rgbaMatch[1])
929
+ const g = parseInt(rgbaMatch[2])
930
+ const b = parseInt(rgbaMatch[3])
931
+ return this.rgbToHex(r, g, b)
932
+ }
933
+
934
+ console.warn('[XtConfigProvider] 无法识别的颜色格式:', color)
935
+ return '#409EFF'
936
+ },
937
+
938
+ hexToRgb(hex) {
939
+ const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
940
+ return result ? {
941
+ r: parseInt(result[1], 16),
942
+ g: parseInt(result[2], 16),
943
+ b: parseInt(result[3], 16)
944
+ } : null
945
+ },
946
+
947
+ rgbToHex(r, g, b) {
948
+ return '#' + [r, g, b].map(x => {
949
+ const hex = x.toString(16)
950
+ return hex.length === 1 ? '0' + hex : hex
951
+ }).join('')
952
+ },
953
+
954
+ lightenColor(hex, percent) {
955
+ const rgb = this.hexToRgb(hex)
956
+ if (!rgb) return hex
957
+
958
+ const amount = Math.round(2.55 * percent)
959
+ const r = Math.min(255, rgb.r + amount)
960
+ const g = Math.min(255, rgb.g + amount)
961
+ const b = Math.min(255, rgb.b + amount)
962
+
963
+ return this.rgbToHex(r, g, b)
964
+ }
965
+ }
966
+ });
967
+
968
+ // CONCATENATED MODULE: ./src/components/config-provider/index.vue?vue&type=script&lang=js
969
+ /* harmony default export */ var components_config_providervue_type_script_lang_js = (config_providervue_type_script_lang_js);
970
+ // CONCATENATED MODULE: ./src/components/config-provider/index.vue
971
+
972
+
973
+
974
+
975
+
976
+ /* normalize component */
977
+
978
+ var config_provider_component = normalizeComponent(
979
+ components_config_providervue_type_script_lang_js,
980
+ config_providervue_type_template_id_676593fc_render,
981
+ config_providervue_type_template_id_676593fc_staticRenderFns,
982
+ false,
983
+ null,
984
+ null,
985
+ null
986
+
987
+ )
988
+
989
+ /* harmony default export */ var config_provider = (config_provider_component.exports);
990
+ // CONCATENATED MODULE: ./src/components/config-provider/index.js
991
+
992
+ /* harmony default export */ var components_config_provider = (config_provider);
993
+
700
994
  // CONCATENATED MODULE: ./src/index.js
995
+ // 导入主题样式(定义 CSS 变量)
996
+
997
+
998
+ // 导入组件样式(统一入口)
999
+
1000
+
701
1001
  // 导入 SCSS 变量(通过 CSS Modules :export 导出)
702
1002
 
703
1003
 
704
1004
 
705
1005
 
1006
+ // ES Module 默认导出需要通过 .default 访问
1007
+ const src_utils = utils.default || utils
1008
+
1009
+ // 从 utils 导入配置管理函数(仅用于存储配置)
1010
+ const { getConfig: src_getConfig, setConfig: src_setConfig, getTheme: src_getTheme, getSize: src_getSize, getPrimaryColor: src_getPrimaryColor, resetConfig: src_resetConfig, onConfigChange: src_onConfigChange, setTheme: src_setTheme, setSize: src_setSize, setPrimaryColor: src_setPrimaryColor } = src_utils
1011
+
706
1012
  // 导入组件
707
1013
 
708
1014
 
@@ -710,26 +1016,61 @@ var card_item_component = normalizeComponent(
710
1016
 
711
1017
 
712
1018
 
1019
+
713
1020
  // 存储组件列表
714
- const components = [
1021
+ const src_components = [
715
1022
  src_components_button,
716
1023
  components_input,
717
1024
  components_flex_box,
718
1025
  components_card,
719
- components_card_item
1026
+ components_card_item,
1027
+ components_config_provider
720
1028
  ]
721
1029
 
722
1030
 
723
1031
  // 定义 install 方法,Vue.use() 会自动调用
724
- const install = function (Vue) {
1032
+ const install = function (Vue, options = {}) {
725
1033
  if (install.installed) return
726
1034
  install.installed = true
727
1035
 
728
1036
  // 全局注册所有 xt- 组件
729
- components.forEach(component => {
1037
+ src_components.forEach(component => {
730
1038
  Vue.component(component.name, component)
731
1039
  })
732
- Vue.prototype.$utils = utils
1040
+
1041
+ // 将工具方法挂载到 Vue.prototype
1042
+ Vue.prototype.$xt = {
1043
+ setTheme: src_setTheme,
1044
+ setSize: src_setSize,
1045
+ setPrimaryColor: src_setPrimaryColor,
1046
+ getConfig: src_getConfig,
1047
+ setConfig: src_setConfig,
1048
+ getTheme: src_getTheme,
1049
+ getSize: src_getSize,
1050
+ getPrimaryColor: src_getPrimaryColor,
1051
+ resetConfig: src_resetConfig,
1052
+ onConfigChange: src_onConfigChange
1053
+ }
1054
+
1055
+ // 在安装时直接应用配置选项
1056
+ if (options) {
1057
+ // 处理主题配置
1058
+ if (options.theme !== undefined) {
1059
+ src_setTheme(options.theme)
1060
+ }
1061
+ // 处理字体大小配置
1062
+ if (options.size !== undefined) {
1063
+ src_setSize(options.size)
1064
+ }
1065
+ // 处理主色调配置
1066
+ if (options.primaryColor !== undefined) {
1067
+ src_setPrimaryColor(options.primaryColor)
1068
+ }
1069
+ // 处理完整配置对象
1070
+ if (options.config !== undefined) {
1071
+ src_setConfig(options.config)
1072
+ }
1073
+ }
733
1074
  }
734
1075
 
735
1076
  // 支持全局 script 标签引入
@@ -745,127 +1086,13 @@ if (typeof window !== 'undefined' && window.Vue) {
745
1086
  Input: components_input,
746
1087
  FlexBox: components_flex_box,
747
1088
  Card: components_card,
748
- CardItem: components_card_item
1089
+ CardItem: components_card_item,
1090
+ ConfigProvider: components_config_provider
749
1091
  });
750
1092
 
751
1093
  // 导出工具函数和变量
752
1094
 
753
1095
 
754
- // 默认配置
755
- const src_defaultConfig = {
756
- theme: 'light',
757
- size: 'medium',
758
- primaryColor: '#1890ff'
759
- }
760
-
761
- // 当前配置
762
- let src_currentConfig = { ...src_defaultConfig }
763
-
764
- // 配置变更事件处理
765
- const src_configChangeListeners = []
766
-
767
- const src_emitConfigChange = function(key, value) {
768
- src_configChangeListeners.forEach(listener => {
769
- listener(key, value)
770
- })
771
- }
772
-
773
- // 获取所有配置
774
- const src_getConfig = function() {
775
- return { ...src_currentConfig }
776
- }
777
-
778
- // 设置全局配置
779
- const src_setConfig = function(config) {
780
- if (typeof config !== 'object' || config === null) {
781
- console.warn('[XtElementUI] setConfig 必须传入对象参数')
782
- return
783
- }
784
-
785
- if (config.theme !== undefined) {
786
- src_setTheme(config.theme)
787
- }
788
- if (config.size !== undefined) {
789
- src_setSize(config.size)
790
- }
791
- if (config.primaryColor !== undefined) {
792
- src_setPrimaryColor(config.primaryColor)
793
- }
794
- }
795
-
796
- // 设置主题(只控制颜色)
797
- const src_setTheme = function(theme) {
798
- const validThemes = ['light', 'dark']
799
- if (!validThemes.includes(theme)) {
800
- console.warn(`[XtElementUI] 无效的主题值: ${theme},可选值: ${validThemes.join(', ')}`)
801
- return
802
- }
803
-
804
- src_currentConfig.theme = theme
805
- document.documentElement.setAttribute('data-theme', theme)
806
- src_emitConfigChange('theme', theme)
807
- }
808
-
809
- // 设置字体大小和间距
810
- const src_setSize = function(size) {
811
- const validSizes = ['small', 'medium', 'large']
812
- if (!validSizes.includes(size)) {
813
- console.warn(`[XtElementUI] 无效的大小值: ${size},可选值: ${validSizes.join(', ')}`)
814
- return
815
- }
816
-
817
- src_currentConfig.size = size
818
- document.documentElement.setAttribute('data-size', size)
819
- src_emitConfigChange('size', size)
820
- }
821
-
822
- // 设置主色调
823
- const src_setPrimaryColor = function(color) {
824
- const colorRegex = /^#[0-9A-Fa-f]{6}$|^#[0-9A-Fa-f]{3}$/
825
- if (!colorRegex.test(color)) {
826
- console.warn(`[XtElementUI] 无效的颜色值: ${color},请使用十六进制颜色格式,如 #1890ff`)
827
- return
828
- }
829
-
830
- src_currentConfig.primaryColor = color
831
- document.documentElement.style.setProperty('--xt-color-primary', color)
832
- src_emitConfigChange('primaryColor', color)
833
- }
834
-
835
- // 获取当前主题
836
- const src_getTheme = function() {
837
- return src_currentConfig.theme
838
- }
839
-
840
- // 获取当前字体大小
841
- const src_getSize = function() {
842
- return src_currentConfig.size
843
- }
844
-
845
- // 获取当前主色调
846
- const src_getPrimaryColor = function() {
847
- return src_currentConfig.primaryColor
848
- }
849
-
850
- // 重置为默认配置
851
- const src_resetConfig = function() {
852
- src_setConfig(src_defaultConfig)
853
- }
854
-
855
- // 监听配置变更
856
- const src_onConfigChange = function(listener) {
857
- if (typeof listener === 'function') {
858
- src_configChangeListeners.push(listener)
859
- return function() {
860
- const index = src_configChangeListeners.indexOf(listener)
861
- if (index > -1) {
862
- src_configChangeListeners.splice(index, 1)
863
- }
864
- }
865
- } else {
866
- console.warn('[XtElementUI] onConfigChange 必须传入函数')
867
- }
868
- }
869
1096
  // CONCATENATED MODULE: ./node_modules/@vue/cli-service/lib/commands/build/entry-lib.js
870
1097
 
871
1098