v-uni-app-ui 1.0.4 → 1.0.6

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 (89) hide show
  1. package/README.md +62 -82
  2. package/dist/v-uni-app-ui.css +1 -0
  3. package/dist/v-uni-app-ui.es.js +6569 -0
  4. package/dist/v-uni-app-ui.umd.js +7 -0
  5. package/package.json +17 -5
  6. package/components/config/css/basic.scss +0 -19
  7. package/components/config/interface/basic-type.js +0 -16
  8. package/components/config/interface/components-interface.ts +0 -0
  9. package/components/config/interface/monitor/components/input-monitor.js +0 -0
  10. package/components/config/interface/monitor/property-monitor.ts +0 -136
  11. package/components/config/interface/props/basic-props.ts +0 -88
  12. package/components/config/interface/props/components/button-props.ts +0 -85
  13. package/components/config/interface/props/components/input-props.ts +0 -69
  14. package/components/config/interface/props/props-tools.ts +0 -64
  15. package/components/config/style/basic.js +0 -346
  16. package/components/config/style/component-registry.js +0 -142
  17. package/components/config/style/components/button-style.js +0 -160
  18. package/components/config/style/components/input-style.js +0 -98
  19. package/components/config/style/components-style.js +0 -622
  20. package/components/config/style/property-mapper.js +0 -377
  21. package/components/config/style/pseudo-processor.js +0 -213
  22. package/components/config.js +0 -123
  23. package/components/icon/iconfont.css +0 -87
  24. package/components/icon/iconfont.js +0 -1
  25. package/components/icon/iconfont.json +0 -135
  26. package/components/icon/iconfont.ttf +0 -0
  27. package/components/icon/iconfont.woff +0 -0
  28. package/components/icon/iconfont.woff2 +0 -0
  29. package/components/layout/v-card/v-card.vue +0 -108
  30. package/components/layout/v-grid/v-grid.vue +0 -162
  31. package/components/layout/v-icon-grid/v-icon-grid.vue +0 -195
  32. package/components/layout/v-infinite-scroll/v-infinite-scroll.vue +0 -172
  33. package/components/layout/v-list/v-list.vue +0 -43
  34. package/components/layout/v-row/v-row.vue +0 -142
  35. package/components/layout/v-waterfall/v-waterfall.vue +0 -79
  36. package/components/model/compound/v-checkbox-group/v-checkbox-group.vue +0 -96
  37. package/components/model/compound/v-console/v-console.js +0 -20
  38. package/components/model/compound/v-console/v-console.vue +0 -299
  39. package/components/model/compound/v-date-time/v-date-time.vue +0 -261
  40. package/components/model/compound/v-dialog/v-dialog.vue +0 -178
  41. package/components/model/compound/v-drum-select-picker/v-drum-select-picker.vue +0 -83
  42. package/components/model/compound/v-form/v-form.vue +0 -226
  43. package/components/model/compound/v-form-item/v-form-item.vue +0 -255
  44. package/components/model/compound/v-image/v-image.vue +0 -357
  45. package/components/model/compound/v-input-desensitize/v-input-desensitize.vue +0 -101
  46. package/components/model/compound/v-page/v-page.vue +0 -11
  47. package/components/model/compound/v-pages/v-pages.vue +0 -141
  48. package/components/model/compound/v-picker-list/v-picker-list.vue +0 -109
  49. package/components/model/compound/v-popup/v-popup.vue +0 -151
  50. package/components/model/compound/v-radio-group/v-radio-group.vue +0 -86
  51. package/components/model/compound/v-select-picker/v-select-picker.vue +0 -202
  52. package/components/model/compound/v-series-picker-list/v-series-picker-list.vue +0 -221
  53. package/components/model/compound/v-series-select-picker/v-series-select-picker.vue +0 -203
  54. package/components/model/compound/v-switch/v-switch.vue +0 -136
  55. package/components/model/compound/v-tabs-page/v-tabs-page.vue +0 -138
  56. package/components/model/native/v-badge/v-badge.vue +0 -143
  57. package/components/model/native/v-button/v-button.vue +0 -81
  58. package/components/model/native/v-carousel/v-carousel.vue +0 -138
  59. package/components/model/native/v-checkbox/v-checkbox.vue +0 -215
  60. package/components/model/native/v-collapse/v-collapse.vue +0 -190
  61. package/components/model/native/v-header-navigation-bar/v-header-navigation-bar.vue +0 -92
  62. package/components/model/native/v-input/v-input.vue +0 -163
  63. package/components/model/native/v-input-code/v-input-code.vue +0 -146
  64. package/components/model/native/v-loading/v-loading.vue +0 -206
  65. package/components/model/native/v-menu/v-menu.vue +0 -222
  66. package/components/model/native/v-menu-slide/v-menu-slide.vue +0 -364
  67. package/components/model/native/v-min-loading/v-min-loading.vue +0 -80
  68. package/components/model/native/v-null/v-null.vue +0 -97
  69. package/components/model/native/v-overlay/v-overlay.vue +0 -96
  70. package/components/model/native/v-pull-up-refresh/v-pull-up-refresh.vue +0 -157
  71. package/components/model/native/v-radio/v-radio.vue +0 -138
  72. package/components/model/native/v-scroll-list/v-scroll-list.vue +0 -169
  73. package/components/model/native/v-steps/v-steps.vue +0 -253
  74. package/components/model/native/v-table/v-table.vue +0 -203
  75. package/components/model/native/v-tabs/v-tabs.vue +0 -235
  76. package/components/model/native/v-tag/v-tag.vue +0 -206
  77. package/components/model/native/v-text/v-text.vue +0 -187
  78. package/components/model/native/v-textarea/v-textarea.vue +0 -178
  79. package/components/model/native/v-title/v-title.vue +0 -91
  80. package/components/model/native/v-toast/info.png +0 -0
  81. package/components/model/native/v-toast/success.png +0 -0
  82. package/components/model/native/v-toast/v-toast.vue +0 -198
  83. package/components/model/native/v-toast/warn.png +0 -0
  84. package/components/model/native/v-upload-file-button/v-upload-file-button.vue +0 -296
  85. package/components/model/native/v-video/v-video.vue +0 -175
  86. package/components/model/native/v-window/v-window.vue +0 -158
  87. package/components/utils/event-modifiers.ts +0 -139
  88. package/components/utils/validator.ts +0 -451
  89. package/index.js +0 -372
@@ -1,88 +0,0 @@
1
- // 简化 BasicPropsDefinition 类型
2
- type VuePropDefinition = {
3
- type: any;
4
- default?: any;
5
- required?: boolean;
6
- validator?: (value: any) => boolean;
7
- };
8
-
9
- /**
10
- * 通用组件基础 props 定义
11
- * 所有组件都会自动继承这些 props
12
- */
13
- export const BasicProps = {
14
- id: {
15
- type: String,
16
- default: ''
17
- },
18
- className: {
19
- type: String,
20
- default: ''
21
- },
22
- boxStyle: {
23
- type: Object,
24
- default: () => ({})
25
- },
26
- style: {
27
- type: Object,
28
- default: () => ({})
29
- },
30
- accessibility:{
31
- type:Object,
32
- default:()=>({})
33
- }
34
- } as const;
35
-
36
- // 获取基础属性的键名类型
37
- type BasicPropsKeys = keyof typeof BasicProps;
38
-
39
- /**
40
- * 创建扩展基础 props 的验证器
41
- */
42
- export function extendWithBasicProps<T extends Record<string, VuePropDefinition>>(
43
- componentProps: T,
44
- options: {
45
- exclude?: BasicPropsKeys[];
46
- override?: Partial<Record<BasicPropsKeys, any>>;
47
- } = {}
48
- ): Record<string, VuePropDefinition> {
49
- const { exclude = [], override = {} } = options;
50
- const mergedProps: Record<string, VuePropDefinition> = {};
51
-
52
- // 添加基础 props
53
- Object.entries(BasicProps).forEach(([key, value]) => {
54
- if (!exclude.includes(key as BasicPropsKeys)) {
55
- const propKey = key as BasicPropsKeys;
56
- if (override[propKey] !== undefined) {
57
- // 修复:正确处理覆盖值
58
- mergedProps[key] = {
59
- ...value,
60
- default: typeof override[propKey] === 'object' && override[propKey] !== null && 'default' in override[propKey] ? override[propKey].default : override[propKey]
61
- };
62
- } else {
63
- mergedProps[key] = value;
64
- }
65
- }
66
- });
67
-
68
- // 添加组件特定 props
69
- Object.entries(componentProps).forEach(([key, value]) => {
70
- mergedProps[key] = value;
71
- });
72
-
73
- return mergedProps;
74
- }
75
-
76
- /**
77
- * 从 props 配置中提取类型
78
- */
79
- export type ExtractPropTypes<T> = {
80
- [K in keyof T]: T[K] extends { type: any } ? (T[K] extends { default?: infer D } ? (D extends () => infer R ? R : D) : any) : any;
81
- };
82
-
83
- /**
84
- * 创建 Vue 兼容的 props 定义
85
- */
86
- export function createVueProps<T extends Record<string, VuePropDefinition>>(props: T): T {
87
- return props;
88
- }
@@ -1,85 +0,0 @@
1
- import type { PropType } from 'vue';
2
- import { extendWithBasicProps, ExtractPropTypes } from '@/components/config/interface/props/basic-props';
3
- import { BasicType, ButtonShape, BasicSize } from '@/components/config/interface/basic-type.js';
4
- import { Validators } from '@/components/utils/validator';
5
- import { PropTools } from '@/components/config/interface/props/props-tools';
6
- /**
7
- * 按钮组件 props 定义
8
- */
9
- const buttonProps = extendWithBasicProps(
10
- {
11
- //使用PropTools简写
12
- shape: PropTools.enum<ButtonShape>(['default', 'none', 'circle'], 'default', 'buttonShape'),
13
- type: {
14
- type: String as PropType<BasicType>,
15
- default: 'default',
16
- validator: Validators.enum(['default', 'success', 'warning', 'info', 'delete'], 'buttonType')
17
- },
18
- size: PropTools.enum<BasicSize>(['small', 'medium', 'large'], 'medium', 'buttonSize'),
19
- disabled: PropTools.boolean(false),
20
- loading: PropTools.boolean(false),
21
- plain: PropTools.boolean(false),
22
- text: PropTools.boolean(false),
23
- stabilizationTime: {
24
- type: Number,
25
- default: 0,
26
- validator: Validators.numberRange(0, 1_000_000, 'Stabilization time must be between 0 and 1,000,000 ms.')
27
- },
28
- debounceTime: {
29
- type: Number,
30
- default: 0,
31
- validator: Validators.numberRange(0, 1_000_000, 'The anti-shake waiting time must be between 0 and 1,000,000 milliseconds.')
32
- },
33
- intervalUpdateTime: {
34
- type: Number,
35
- default: 1000,
36
- validator: Validators.numberRange(100, 100_000, 'Interval must be between 100 and 100,000 ms.')
37
- },
38
- degressionTime: {
39
- type: Number,
40
- default: 1000,
41
- validator: Validators.numberRange(100, 10_000, 'Degression time must be between 100 and 10,000 ms.')
42
- },
43
- resetOnClick: PropTools.boolean(false),
44
- hoverStartTime: {
45
- type: Number,
46
- default: 20,
47
- validator: Validators.numberRange(10, 10_000, 'hover start time must be between 10 and 10,000 ms.')
48
- },
49
- hoverStayTime: {
50
- type: Number,
51
- default: 70,
52
- validator: Validators.numberRange(10, 10_000, 'hover stay time must be between 10 and 10,000 ms.')
53
- },
54
- //组合校验
55
- // customProp: {
56
- // type: String,
57
- // default: '',
58
- // validator: Validators.combine(
59
- // Validators.required('This field is required.'),
60
- // Validators.length(3, 20, 'Length must be 3-20 characters.'),
61
- // Validators.pattern(/^[a-zA-Z0-9_]+$/, 'Only letters, numbers and underscore are allowed.')
62
- // )
63
- // }
64
- },
65
- {
66
- override: {
67
- id: {
68
- default: 'VButton'
69
- },
70
- className: {
71
- default: 'v-button'
72
- },
73
- boxStyle: {
74
- default: {
75
- width: 'auto',
76
- height: '50rpx',
77
- padding: '14rpx 2rpx'
78
- }
79
- },
80
- accessibility: {}
81
- }
82
- }
83
- );
84
- export default buttonProps;
85
- export type ButtonProps = ExtractPropTypes<typeof buttonProps>;
@@ -1,69 +0,0 @@
1
- import { extendWithBasicProps, ExtractPropTypes } from '@/components/config/interface/props/basic-props';
2
- import { InputType, BasicSize, BasicHorizontallyPosition } from '@/components/config/interface/basic-type.js';
3
- import { Validators } from '@/components/utils/validator';
4
- import { PropTools } from '@/components/config/interface/props/props-tools';
5
-
6
- /**
7
- * 文本框组件 props 定义
8
- */
9
- const inputProps = extendWithBasicProps(
10
- {
11
- value: PropTools.string(),
12
- size: PropTools.enum<BasicSize>(['small', 'medium', 'large'], 'medium', 'inputSize'),
13
- placeholder: PropTools.array(),
14
- placeholderTimeNumber: {
15
- type: Number,
16
- default: 0,
17
- validator: Validators.numberRange(0, 1_000_000, 'The prompt switching time must be between 0 and 1,000,000 milliseconds.')
18
- },
19
- maxlength: {
20
- type: Number,
21
- default: -1,
22
- validator: Validators.numberRange(-1, 1_0000_0000, 'The prompt switching time must be between 0 and 1,000,000 milliseconds.')
23
- },
24
- disabled: PropTools.boolean(false),
25
- type: PropTools.enum<InputType>(
26
- ['text', 'id', 'safe-password', 'password', 'number', 'digit', 'numeric', 'decimal', 'email', 'phone', 'url', 'textarea', 'name', 'search', 'none'],
27
- 'text',
28
- 'inputType'
29
- ),
30
- isWordCounter: PropTools.boolean(false),
31
- textPosition: PropTools.enum<BasicHorizontallyPosition>(['left', 'right', 'center'], 'left', 'inputTextPosition'),
32
- autoFocus: PropTools.boolean(false),
33
- validators: PropTools.string(),
34
- placeholderStyle: PropTools.object(),
35
- cursor: PropTools.number(),
36
- selectionStart: {
37
- type: Number,
38
- default: -1,
39
- validator: Validators.numberRange(-1, 10_000, 'selection start must be between -1 and 10,000 milliseconds.')
40
- },
41
- selectionEnd: {
42
- type: Number,
43
- default: -1,
44
- validator: Validators.numberRange(-1, 10_000, 'selection end must be between -1 and 10,000 milliseconds.')
45
- },
46
- isIcon: PropTools.boolean(false),
47
- hiddenSymbols: PropTools.string('·'),
48
- randomNumber: PropTools.boolean(false),
49
- cursorColor: PropTools.string(),
50
- focus: PropTools.boolean(false),
51
- autoBlur: PropTools.boolean(false),
52
- cursorSpacing:PropTools.number(0),
53
- },
54
- {
55
- override: {
56
- id: {
57
- default: 'VInput'
58
- },
59
- className: {
60
- default: 'v-input'
61
- },
62
- boxStyle: {
63
- default: {}
64
- }
65
- }
66
- }
67
- );
68
- export default inputProps;
69
- export type inputProps = ExtractPropTypes<typeof inputProps>;
@@ -1,64 +0,0 @@
1
- import { Validators } from '@/components/utils/validator.ts';
2
-
3
- // 简化类型定义
4
- type SimplePropDefinition = {
5
- type: any;
6
- default?: any;
7
- required?: boolean;
8
- validator?: (value: any) => boolean;
9
- };
10
-
11
- // 简化的属性创建函数
12
- export function createProp<T>(type: any, defaultValue?: T, validator?: (value: any) => boolean): SimplePropDefinition {
13
- const prop: SimplePropDefinition = { type };
14
-
15
- if (defaultValue !== undefined) {
16
- prop.default = defaultValue;
17
- }
18
-
19
- if (validator) {
20
- prop.validator = validator;
21
- }
22
-
23
- return prop;
24
- }
25
-
26
- // 快捷方法
27
- export const PropTools = {
28
- // 基础类型
29
- string: (defaultValue: string = '', validator?: (value: string) => boolean) => createProp(String, defaultValue, validator),
30
-
31
- number: (defaultValue: number = 0, validator?: (value: number) => boolean) => createProp(Number, defaultValue, validator),
32
-
33
- boolean: (defaultValue: boolean = false) => createProp(Boolean, defaultValue),
34
-
35
- array: <T>(defaultValue: T[] = []) => createProp(Array, () => defaultValue),
36
-
37
- object: <T extends Record<string, any>>(defaultValue: T = {} as T) => createProp(Object, () => defaultValue),
38
-
39
- function: <T extends Function>(defaultValue?: T) => createProp(Function, defaultValue),
40
-
41
- // 枚举类型
42
- enum: <T extends string>(allowedValues: readonly T[], defaultValue: T, displayName?: string) =>
43
- createProp(String, defaultValue, Validators.enum(allowedValues, `${displayName || '属性'}必须是以下值之一: ${allowedValues.join(', ')}`)),
44
-
45
- // 任意类型
46
- any: (defaultValue: any = null) => createProp(null, defaultValue),
47
-
48
- // 常用属性
49
- id: () => createProp(String, ''),
50
- className: () => createProp(String, ''),
51
- style: () => createProp(Object, () => ({})),
52
-
53
- // 带验证的属性
54
- stringLength: (defaultValue: string = '', min?: number, max?: number) => createProp(String, defaultValue, Validators.length(min, max)),
55
-
56
- numberRange: (defaultValue: number, min: number, max: number) => createProp(Number, defaultValue, Validators.numberRange(min, max)),
57
-
58
- // 格式验证
59
- email: (defaultValue: string = '') => createProp(String, defaultValue, Validators.email()),
60
-
61
- phoneNumber: (defaultValue: string = '') => createProp(String, defaultValue, Validators.phoneNumber()),
62
-
63
- url: (defaultValue: string = '') => createProp(String, defaultValue, Validators.url())
64
- };
@@ -1,346 +0,0 @@
1
- export const styleConfig = {
2
- // 基础样式配置
3
- basic: {
4
- // 背景颜色 - 按功能分类
5
- backgroundColor: {
6
- // 状态类背景色
7
- default: '#307fff',
8
- delete: '#ff5e5e',
9
- success: '#31d283',
10
- info: '#888888',
11
- warning: '#fba000',
12
- reversal: '#ffffff',
13
- disabled: '#f5f5f5',
14
-
15
- // 布局背景色
16
- page: '#f8f8f8', // 页面背景
17
- card: '#ffffff', // 卡片背景
18
- section: '#fafafa', // 区域背景
19
- mask: 'rgba(0, 0, 0, 0.5)', // 遮罩层背景
20
-
21
- // 交互状态背景色
22
- hover: '#f0f7ff', // 悬停背景
23
- active: '#e6f0ff', // 激活背景
24
- selected: '#307fff', // 选中背景
25
- focus: 'rgba(48, 127, 255, 0.1)' // 聚焦背景
26
- },
27
-
28
- // 字体颜色 - 按语义分类
29
- fontColor: {
30
- // 状态类文字色
31
- default: '#307fff',
32
- delete: '#ff5e5e',
33
- success: '#31d283',
34
- info: '#888888',
35
- warning: '#fba000',
36
- reversal: '#ffffff',
37
- disabled: '#cccccc',
38
-
39
- // 层级文字色
40
- primary: '#222222', // 主要文字
41
- secondary: '#666666', // 次要文字
42
- tertiary: '#969696', // 辅助文字
43
- placeholder: '#cccccc', // 占位文字
44
- description: '#888888', // 描述文字
45
-
46
- // 特殊文字色
47
- link: '#307fff', // 链接文字
48
- error: '#ff5e5e', // 错误文字
49
- warningText: '#fba000', // 警告文字
50
- successText: '#31d283' // 成功文字
51
- },
52
-
53
- // 字体大小
54
- fontSize: {
55
- // 标题类
56
- extraLargeTitle: '48rpx',
57
- largeTitle: '42.5rpx',
58
- mediumTitle: '34.5rpx',
59
- smallTitle: '31.5rpx',
60
- extraSmallTitle: '28rpx',
61
-
62
- // 正文类
63
- extraLargeText: '32rpx',
64
- largeText: '29.5rpx',
65
- mediumText: '25.5rpx',
66
- smallText: '22.5rpx',
67
- extraSmallText: '20rpx',
68
-
69
- // 特殊类
70
- message: '20.5rpx',
71
- hint: '18.5rpx',
72
- caption: '16rpx',
73
- footnote: '14rpx'
74
- },
75
-
76
- // 字体其他属性
77
- fontOther: {
78
- fontFamily: "'Noto Sans CJK', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif",
79
- fontWeight: {
80
- thin: 100,
81
- light: 300,
82
- regular: 400,
83
- medium: 500,
84
- bold: 700,
85
- black: 900
86
- },
87
- lineHeight: {
88
- tight: 1.2,
89
- normal: 1.5,
90
- relaxed: 1.75,
91
- loose: 2
92
- }
93
- },
94
-
95
- // 文字间距
96
- letterSpacing: {
97
- tight: '-0.5rpx',
98
- normal: '0rpx',
99
- wide: '0.5rpx',
100
- extraWide: '1rpx'
101
- },
102
-
103
- // 边框设置
104
- border: {
105
- // 边框颜色
106
- color: {
107
- default: '#307fff',
108
- delete: '#ff5e5e',
109
- success: '#31d283',
110
- info: '#888888',
111
- warning: '#fba000',
112
- divider: '#e0e0e0', // 分割线
113
- light: '#f0f0f0', // 浅色边框
114
- dark: '#d9d9d9', // 深色边框
115
- primary: '#d0d0d0' // 主要边框颜色
116
- },
117
-
118
- // 边框宽度
119
- width: {
120
- primary: '1rpx', //主要宽度
121
- secondary: '2rpx', //次要宽度
122
- medium: '3rpx', //中等
123
- thick: '7.5rpx' //粗
124
- },
125
-
126
- // 边框样式
127
- style: {
128
- solid: 'solid',
129
- dashed: 'dashed',
130
- dotted: 'dotted'
131
- }
132
- },
133
-
134
- // 圆角设置
135
- borderRadius: {
136
- default: '8rpx',
137
- none: '0',
138
- extraSmall: '4rpx',
139
- small: '8rpx',
140
- medium: '12rpx',
141
- large: '16rpx',
142
- extraLarge: '24rpx',
143
- full: '9999rpx',
144
- circle: '35rpx'
145
- },
146
-
147
- // 透明度
148
- opacity: {
149
- // 交互状态
150
- hover: 0.9,
151
- active: 0.8,
152
- click: 0.8,
153
- disabled: 0.6,
154
-
155
- // 视觉层次
156
- subtle: 0.3,
157
- medium: 0.5,
158
- strong: 0.7,
159
-
160
- // 组件
161
- toast: 0.95,
162
- mask: 0.4,
163
- border: 0.3,
164
- overlay: 0.2
165
- },
166
-
167
- // 间距系统
168
- spacing: {
169
- // 基础间距
170
- extraSmall: '4rpx',
171
- small: '8rpx',
172
- medium: '12rpx',
173
- large: '16rpx',
174
- extraLarge: '24rpx',
175
- extraExtraLarge: '32rpx',
176
- superLarge: '48rpx',
177
-
178
- // 布局间距
179
- pagePadding: '32rpx',
180
- cardPadding: '24rpx',
181
- sectionPadding: '16rpx',
182
- itemSpacing: '12rpx'
183
- },
184
-
185
- // 阴影系统
186
- shadow: {
187
- // 层级阴影
188
- none: 'none',
189
- small: '0 2rpx 8rpx rgba(0, 0, 0, 0.1)',
190
- medium: '0 4rpx 12rpx rgba(0, 0, 0, 0.15)',
191
- large: '0 8rpx 24rpx rgba(0, 0, 0, 0.2)',
192
- extraLarge: '0 12rpx 48rpx rgba(0, 0, 0, 0.25)',
193
-
194
- // 特殊阴影
195
- focus: '0 0 0 3rpx rgba(48, 127, 255, 0.2)',
196
- inset: 'inset 0 2rpx 4rpx rgba(0, 0, 0, 0.1)',
197
-
198
- // 颜色阴影
199
- default: '0 4rpx 12rpx rgba(48, 127, 255, 0.3)',
200
- success: '0 4rpx 12rpx rgba(49, 210, 131, 0.3)',
201
- warning: '0 4rpx 12rpx rgba(251, 160, 0, 0.3)',
202
- info: '0 4rpx 12rpx rgba(0, 0, 0, 0.3)',
203
- delete: '0 4rpx 12rpx rgba(255, 94, 94, 0.3)'
204
- },
205
-
206
- // 动画时长
207
- animation: {
208
- duration: {
209
- instant: '100ms',
210
- fast: '200ms',
211
- normal: '300ms',
212
- slow: '500ms',
213
- verySlow: '800ms'
214
- },
215
- easing: {
216
- linear: 'linear',
217
- easeInOut: 'ease-in-out',
218
- easeOut: 'ease-out',
219
- easeIn: 'ease-in',
220
- easeOutCubic: 'cubic-bezier(0.33, 1, 0.68, 1)',
221
- easeInOutCubic: 'cubic-bezier(0.65, 0, 0.35, 1)',
222
- easeOutBack: 'cubic-bezier(0.34, 1.56, 0.64, 1)',
223
- easeInOutBack: 'cubic-bezier(0.68, -0.6, 0.32, 1.6)'
224
- },
225
- transition: {
226
- default: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)'
227
- },
228
- },
229
-
230
- // z-index层级
231
- zIndex: {
232
- base: 0,
233
- content: 10,
234
- overlay: 100,
235
- modal: 1000,
236
- toast: 1100,
237
- tooltip: 1200,
238
- dropdown: 1300,
239
- notification: 1400
240
- }
241
- },
242
-
243
- // 暗黑模式配置
244
- darkMode: {
245
- backgroundColor: {
246
- default: '#307fff',
247
- delete: '#ff5e5e',
248
- success: '#31d283',
249
- info: '#888888',
250
- warning: '#fba000',
251
- reversal: '#1a1a1a',
252
- disabled: '#2a2a2a',
253
- page: '#121212',
254
- card: '#1e1e1e',
255
- section: '#2a2a2a',
256
- mask: 'rgba(0, 0, 0, 0.7)',
257
- hover: 'rgba(48, 127, 255, 0.2)',
258
- active: 'rgba(48, 127, 255, 0.3)',
259
- selected: '#307fff',
260
- focus: 'rgba(48, 127, 255, 0.1)'
261
- },
262
- fontColor: {
263
- default: '#307fff',
264
- delete: '#ff5e5e',
265
- success: '#31d283',
266
- info: '#888888',
267
- warning: '#fba000',
268
- reversal: '#ffffff',
269
- disabled: '#555555',
270
- primary: '#ffffff',
271
- secondary: '#cccccc',
272
- tertiary: '#999999',
273
- placeholder: '#666666',
274
- description: '#888888',
275
- link: '#307fff',
276
- error: '#ff5e5e',
277
- warningText: '#fba000',
278
- successText: '#31d283'
279
- },
280
- border: {
281
- color: {
282
- default: '#307fff',
283
- delete: '#ff5e5e',
284
- success: '#31d283',
285
- info: '#888888',
286
- warning: '#fba000',
287
- divider: '#333333',
288
- light: '#2a2a2a',
289
- dark: '#444444'
290
- }
291
- }
292
- },
293
-
294
- // 响应式断点(基于rpx)
295
- breakpoints: {
296
- mobile: '768rpx',
297
- tablet: '1024rpx',
298
- desktop: '1280rpx',
299
- wide: '1440rpx'
300
- },
301
-
302
- // 组件特定配置
303
- components: {
304
- VButton: {
305
- height: {
306
- small: '50rpx',
307
- medium: '60rpx',
308
- large: '70rpx'
309
- },
310
- padding: {
311
- small: '14rpx 10rpx',
312
- medium: '15rpx 15rpx',
313
- large: '20rpx 20rpx'
314
- },
315
- plain: {
316
- backgroundColor: 'transparent',
317
- borderWidth: '1rpx'
318
- },
319
- text: {
320
- backgroundColor: 'transparent',
321
- borderWidth: '0'
322
- },
323
- shape: {
324
- default: {
325
- width: "1rpx",
326
- style: 'solid'
327
- },
328
- none: {
329
- width: "1rpx",
330
- style: 'solid'
331
- },
332
- circle: {
333
- width: "1rpx",
334
- style: 'solid'
335
- }
336
- }
337
- },
338
- VInput: {
339
- height: {
340
- small: '50rpx',
341
- medium: '60rpx',
342
- large: '70rpx'
343
- },
344
- }
345
- }
346
- };