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