@vtj/materials 0.15.1 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (83) hide show
  1. package/dist/assets/antdv/index.umd.js +2 -2
  2. package/dist/assets/charts/index.umd.js +2 -2
  3. package/dist/assets/element/index.umd.js +4 -4
  4. package/dist/assets/icons/index.umd.js +2 -2
  5. package/dist/assets/ui/index.umd.js +3 -3
  6. package/dist/assets/uni-h5/index.umd.js +2 -2
  7. package/dist/assets/uni-ui/index.umd.js +2 -2
  8. package/dist/assets/vant/index.umd.js +2 -2
  9. package/dist/deps/@vtj/charts/index.umd.js +2 -2
  10. package/dist/deps/@vtj/icons/index.umd.js +2 -2
  11. package/dist/deps/@vtj/ui/index.umd.js +2 -2
  12. package/dist/deps/@vtj/utils/index.umd.js +3 -3
  13. package/dist/deps/element-plus/index.css +1 -1
  14. package/dist/deps/element-plus/index.full.min.js +44 -32
  15. package/dist/deps/element-plus/zh-cn.js +1 -1
  16. package/package.json +6 -6
  17. package/src/element/affix.ts +3 -0
  18. package/src/element/alert.ts +10 -9
  19. package/src/element/avatar.ts +8 -3
  20. package/src/element/backtop.ts +4 -0
  21. package/src/element/badge.ts +6 -7
  22. package/src/element/breadcrumb.ts +6 -2
  23. package/src/element/button.ts +16 -4
  24. package/src/element/calendar.ts +14 -0
  25. package/src/element/card.ts +15 -0
  26. package/src/element/carousel.ts +15 -0
  27. package/src/element/cascader.ts +2 -8
  28. package/src/element/checkbox.ts +3 -14
  29. package/src/element/collapse.ts +18 -1
  30. package/src/element/colorPicker.ts +15 -7
  31. package/src/element/configProvider.ts +49 -6
  32. package/src/element/container.ts +4 -0
  33. package/src/element/datePicker.ts +38 -6
  34. package/src/element/dateTime.ts +93 -15
  35. package/src/element/descriptions.ts +18 -6
  36. package/src/element/dialog.ts +51 -4
  37. package/src/element/divider.ts +4 -1
  38. package/src/element/drawer.ts +61 -5
  39. package/src/element/dropdown.ts +60 -6
  40. package/src/element/empty.ts +3 -0
  41. package/src/element/form.ts +21 -8
  42. package/src/element/image.ts +26 -2
  43. package/src/element/input.ts +54 -5
  44. package/src/element/inputNumber.ts +41 -8
  45. package/src/element/inputTag.ts +47 -4
  46. package/src/element/layout.ts +9 -0
  47. package/src/element/link.ts +6 -1
  48. package/src/element/mention.ts +11 -0
  49. package/src/element/menu.ts +42 -1
  50. package/src/element/pageHeader.ts +3 -0
  51. package/src/element/pagination.ts +26 -8
  52. package/src/element/popconfirm.ts +14 -0
  53. package/src/element/popover.ts +44 -8
  54. package/src/element/progress.ts +11 -0
  55. package/src/element/radio.ts +28 -20
  56. package/src/element/rate.ts +17 -6
  57. package/src/element/result.ts +3 -0
  58. package/src/element/scrollbar.ts +28 -2
  59. package/src/element/segmented.ts +12 -4
  60. package/src/element/select.ts +70 -11
  61. package/src/element/selectV2.ts +48 -13
  62. package/src/element/skeleton.ts +6 -0
  63. package/src/element/slider.ts +14 -5
  64. package/src/element/space.ts +2 -2
  65. package/src/element/steps.ts +11 -0
  66. package/src/element/switch.ts +26 -10
  67. package/src/element/table.ts +87 -10
  68. package/src/element/tabs.ts +23 -0
  69. package/src/element/tag.ts +13 -18
  70. package/src/element/text.ts +3 -15
  71. package/src/element/timePicker.ts +63 -7
  72. package/src/element/timeSelect.ts +32 -11
  73. package/src/element/timeline.ts +26 -6
  74. package/src/element/tooltip.ts +50 -9
  75. package/src/element/tour.ts +5 -0
  76. package/src/element/transfer.ts +12 -0
  77. package/src/element/tree.ts +17 -0
  78. package/src/element/treeSelect.ts +77 -16
  79. package/src/element/treeV2.ts +34 -3
  80. package/src/element/upload.ts +31 -1
  81. package/src/element/virtualizedTable.ts +45 -3
  82. package/src/shared/props.ts +12 -0
  83. package/src/version.ts +2 -2
@@ -1,4 +1,5 @@
1
1
  import type { MaterialDescription } from '@vtj/core';
2
+ import { effect, size } from '../shared';
2
3
  const SelectV2: MaterialDescription = {
3
4
  name: 'ElSelectV2',
4
5
  label: '虚拟列表选择器',
@@ -9,6 +10,7 @@ const SelectV2: MaterialDescription = {
9
10
  props: [
10
11
  {
11
12
  name: 'modelValue',
13
+ title: '选中项绑定值',
12
14
  defaultValue: '',
13
15
  setters: ['InputSetter', 'NumberSetter', 'BooleanSetter', 'JSONSetter']
14
16
  },
@@ -21,32 +23,31 @@ const SelectV2: MaterialDescription = {
21
23
  {
22
24
  name: 'props',
23
25
  label: 'props',
24
- title: '配置选项,具体看下表',
26
+ title: '配置选项',
25
27
  setters: 'ObjectSetter'
26
28
  },
27
29
  {
28
30
  name: 'multiple',
31
+ title: '是否多选',
29
32
  defaultValue: false,
30
33
  setters: 'BooleanSetter'
31
34
  },
32
35
  {
33
36
  name: 'disabled',
37
+ title: '是否禁用',
34
38
  defaultValue: false,
35
39
  setters: 'BooleanSetter'
36
40
  },
37
41
  {
38
42
  name: 'valueKey',
43
+ title: '作为 value 唯一标识的键名,绑定值为对象类型时必填',
39
44
  defaultValue: 'value',
40
45
  setters: 'InputSetter'
41
46
  },
42
- {
43
- name: 'size',
44
- defaultValue: '',
45
- options: ['', 'large', 'default', 'small'],
46
- setters: 'SelectSetter'
47
- },
47
+ size('size'),
48
48
  {
49
49
  name: 'clearable',
50
+ title: '是否可以清空选项',
50
51
  defaultValue: false,
51
52
  setters: 'BooleanSetter'
52
53
  },
@@ -59,6 +60,7 @@ const SelectV2: MaterialDescription = {
59
60
  },
60
61
  {
61
62
  name: 'collapseTags',
63
+ title: '多选时是否将选中值按文字的形式展示',
62
64
  defaultValue: false,
63
65
  setters: 'BooleanSetter'
64
66
  },
@@ -70,40 +72,46 @@ const SelectV2: MaterialDescription = {
70
72
  defaultValue: 0
71
73
  },
72
74
  {
73
- name: 'name',
75
+ name: 'id',
76
+ title: '原生 input 的 id',
74
77
  defaultValue: '',
75
78
  setters: 'InputSetter'
76
79
  },
77
80
  {
78
- name: 'effect',
79
- defaultValue: 'light',
80
- options: ['dark', 'light'],
81
- setters: ['SelectSetter', 'StringSetter']
81
+ name: 'name',
82
+ title: '选择器的原生name属性',
83
+ defaultValue: '',
84
+ setters: 'InputSetter'
82
85
  },
86
+ effect('effect'),
83
87
  {
84
88
  name: 'autocomplete',
89
+ title: '自动完成选择输入',
85
90
  defaultValue: 'off',
86
91
  setters: 'InputSetter'
87
92
  },
88
93
  {
89
94
  name: 'placeholder',
95
+ title: '占位文字',
90
96
  defaultValue: 'Please select',
91
97
  setters: 'InputSetter'
92
98
  },
93
99
  {
94
100
  name: 'filterable',
101
+ title: 'Select 组件是否可筛选',
95
102
  defaultValue: false,
96
103
  setters: 'BooleanSetter'
97
104
  },
98
105
  {
99
106
  name: 'allowCreate',
107
+ title: '是否允许创建新条目, 当使用该属性时,filterable必须设置为true',
100
108
  defaultValue: false,
101
109
  setters: 'BooleanSetter'
102
110
  },
103
111
  {
104
112
  name: 'filterMethod',
105
113
  label: 'filterMethod',
106
- title: '自定义筛选方法',
114
+ title: '自定义筛选方法的第一个参数是当前输入的值。 当filterable设置为 true 时才会生效',
107
115
  setters: 'FunctionSetter'
108
116
  },
109
117
  {
@@ -148,6 +156,11 @@ const SelectV2: MaterialDescription = {
148
156
  setters: 'StringSetter',
149
157
  defaultValue: ''
150
158
  },
159
+ {
160
+ name: 'popperStyle',
161
+ title: 'Select 下拉菜单和标签提示的自定义样式',
162
+ setters: ['StringSetter', 'ObjectSetter'],
163
+ },
151
164
  {
152
165
  name: 'teleported',
153
166
  label: 'teleported',
@@ -162,6 +175,7 @@ const SelectV2: MaterialDescription = {
162
175
  },
163
176
  {
164
177
  name: 'persistent',
178
+ title: '当下拉选择器未被激活并且persistent设置为false,选择器会被删除',
165
179
  defaultValue: true,
166
180
  setters: 'BooleanSetter'
167
181
  },
@@ -173,16 +187,24 @@ const SelectV2: MaterialDescription = {
173
187
  },
174
188
  {
175
189
  name: 'automaticDropdown',
190
+ title: '对于不可搜索的 Select,是否在输入框获得焦点后自动弹出选项菜单',
176
191
  defaultValue: false,
177
192
  setters: 'BooleanSetter'
178
193
  },
179
194
  {
180
195
  name: 'fitInputWidth',
196
+ title: '无论下拉框的宽度是否与输入框相同,如果值为number,则宽度是固定的',
181
197
  defaultValue: true,
182
198
  setters: ['BooleanSetter', 'NumberSetter']
183
199
  },
200
+ {
201
+ name: 'suffixIcon',
202
+ title: '自定义后缀图标组件',
203
+ setters: 'StringSetter'
204
+ },
184
205
  {
185
206
  name: 'height',
207
+ title: '下拉菜单的高度',
186
208
  defaultValue: 274,
187
209
  setters: 'NumberSetter'
188
210
  },
@@ -195,21 +217,31 @@ const SelectV2: MaterialDescription = {
195
217
  },
196
218
  {
197
219
  name: 'scrollbarAlwaysOn',
220
+ title: '是否总是展示滚动条',
198
221
  defaultValue: false,
199
222
  setters: 'BooleanSetter'
200
223
  },
201
224
  {
202
225
  name: 'remote',
226
+ title: '是否从服务器获取数据',
203
227
  defaultValue: false,
204
228
  setters: 'BooleanSetter'
205
229
  },
230
+ {
231
+ name: 'debounce',
232
+ title: '远程搜索时的防抖延迟(以毫秒为单位)',
233
+ defaultValue: 300,
234
+ setters: 'NumberSetter'
235
+ },
206
236
  {
207
237
  name: 'remoteMethod',
238
+ title: '当输入值发生变化时触发的函数。 它的参数就是当前的输入值。 当filterable设置为 true 时才会生效',
208
239
  defaultValue: '',
209
240
  setters: 'FunctionSetter'
210
241
  },
211
242
  {
212
243
  name: 'validateEvent',
244
+ title: '是否触发表单验证',
213
245
  defaultValue: true,
214
246
  setters: 'BooleanSetter'
215
247
  },
@@ -248,16 +280,19 @@ const SelectV2: MaterialDescription = {
248
280
  },
249
281
  {
250
282
  name: 'fallbackPlacements',
283
+ title: 'dropdown 可用的 positions',
251
284
  setters: 'ArraySetter',
252
285
  defaultValue: ['bottom-start', 'top-start', 'right', 'left']
253
286
  },
254
287
  {
255
288
  name: 'collapseTagsTooltip',
289
+ title: '当鼠标悬停于折叠标签的文本时,是否显示所有选中的标签。 要使用此功能,collapse-tags的值必须为true',
256
290
  setters: 'BooleanSetter',
257
291
  defaultValue: false
258
292
  },
259
293
  {
260
294
  name: 'maxCollapseTags',
295
+ title: '需要显示的 Tag 的最大数量。 只有当 collapse-tags 设置为 true 时才会生效',
261
296
  setters: 'NumberSetter',
262
297
  defaultValue: 1
263
298
  },
@@ -9,26 +9,31 @@ const Skeleton: MaterialDescription = {
9
9
  props: [
10
10
  {
11
11
  name: 'animated',
12
+ title: '是否使用动画',
12
13
  defaultValue: false,
13
14
  setters: 'BooleanSetter'
14
15
  },
15
16
  {
16
17
  name: 'count',
18
+ title: '渲染多少个 template, 建议使用尽可能小的数字',
17
19
  defaultValue: 1,
18
20
  setters: 'NumberSetter'
19
21
  },
20
22
  {
21
23
  name: 'loading',
24
+ title: '是否显示加载结束后的 DOM 结构',
22
25
  defaultValue: false,
23
26
  setters: 'BooleanSetter'
24
27
  },
25
28
  {
26
29
  name: 'rows',
30
+ title: '骨架屏段落数量',
27
31
  defaultValue: 3,
28
32
  setters: 'NumberSetter'
29
33
  },
30
34
  {
31
35
  name: 'throttle',
36
+ title: '渲染延迟(以毫秒为单位) 数字代表延迟显示, 也可以设置为延迟隐藏, 例如 { leading: 500, trailing: 500 } 当需要控制初始加载值时,您可以设置 { initVal: true }',
32
37
  defaultValue: 0,
33
38
  setters: ['NumberSetter', 'ObjectSetter']
34
39
  }
@@ -55,6 +60,7 @@ const SkeletonItem: MaterialDescription = {
55
60
  props: [
56
61
  {
57
62
  name: 'variant',
63
+ title: '当前渲染 skeleton 类型',
58
64
  setters: 'SelectSetter',
59
65
  options: [
60
66
  'p',
@@ -1,4 +1,5 @@
1
1
  import type { MaterialDescription } from '@vtj/core';
2
+ import { size } from '../shared';
2
3
  const Slider: MaterialDescription = {
3
4
  name: 'ElSlider',
4
5
  label: '滑块',
@@ -52,11 +53,8 @@ const Slider: MaterialDescription = {
52
53
  setters: 'BooleanSetter'
53
54
  },
54
55
  {
55
- name: 'size',
56
- defaultValue: 'default',
56
+ ...size('size'),
57
57
  title: 'slider 包装器的大小,垂直模式下该属性不可用',
58
- options: ['large', 'default', 'small'],
59
- setters: 'SelectSetter'
60
58
  },
61
59
  {
62
60
  name: 'inputSize',
@@ -168,7 +166,18 @@ const Slider: MaterialDescription = {
168
166
  title: '输入时是否触发表单的校验',
169
167
  defaultValue: true,
170
168
  setters: 'BooleanSetter'
171
- }
169
+ },
170
+ {
171
+ name: 'persistent',
172
+ title: '当 slider 的 tooltip 处于非活动状态且 persistent 为 false 时,tooltip 将被销毁。 当 show-tooltip 为 false 时,persistent 将始终为 false',
173
+ defaultValue: true,
174
+ setters: 'BooleanSetter'
175
+ },
176
+ {
177
+ name: 'label',
178
+ title: '原生 aria-label属性',
179
+ setters: 'StringSetter'
180
+ },
172
181
  ],
173
182
  events: ['change', 'input', 'update:modelValue']
174
183
  };
@@ -1,4 +1,5 @@
1
1
  import type { MaterialDescription } from '@vtj/core';
2
+ import { size } from '../shared';
2
3
  const Space: MaterialDescription = {
3
4
  name: 'ElSpace',
4
5
  label: '间距',
@@ -64,11 +65,10 @@ const Space: MaterialDescription = {
64
65
  setters: ['StringSetter', 'NumberSetter']
65
66
  },
66
67
  {
67
- name: 'size',
68
+ ...size('size'),
68
69
  title: '间隔大小',
69
70
  defaultValue: 'small',
70
71
  setters: ['SelectSetter', 'NumberSetter', 'ArraySetter'],
71
- options: ['large', 'default', 'small']
72
72
  },
73
73
  {
74
74
  name: 'wrap',
@@ -10,39 +10,46 @@ const Steps: MaterialDescription[] = [
10
10
  props: [
11
11
  {
12
12
  name: 'space',
13
+ title: '每个 step 的间距,不填写将自适应间距。 支持百分比;',
13
14
  defaultValue: '',
14
15
  setters: ['InputSetter', 'NumberSetter']
15
16
  },
16
17
  {
17
18
  name: 'direction',
19
+ title: '显示方向',
18
20
  defaultValue: 'horizontal',
19
21
  setters: 'SelectSetter',
20
22
  options: ['vertical', 'horizontal']
21
23
  },
22
24
  {
23
25
  name: 'active',
26
+ title: '设置当前激活步骤',
24
27
  defaultValue: 0,
25
28
  setters: 'NumberSetter'
26
29
  },
27
30
  {
28
31
  name: 'processStatus',
32
+ title: '设置当前步骤的状态',
29
33
  defaultValue: 'process',
30
34
  setters: 'SelectSetter',
31
35
  options: ['wait', 'process', 'finish', 'error', 'success']
32
36
  },
33
37
  {
34
38
  name: 'finishStatus',
39
+ title: '设置结束步骤的状态',
35
40
  defaultValue: 'finish',
36
41
  setters: 'SelectSetter',
37
42
  options: ['wait', 'process', 'finish', 'error', 'success']
38
43
  },
39
44
  {
40
45
  name: 'alignCenter',
46
+ title: '进行居中对齐',
41
47
  defaultValue: false,
42
48
  setters: 'BooleanSetter'
43
49
  },
44
50
  {
45
51
  name: 'simple',
52
+ title: '是否应用简洁风格',
46
53
  defaultValue: false,
47
54
  setters: 'BooleanSetter'
48
55
  }
@@ -85,21 +92,25 @@ const Steps: MaterialDescription[] = [
85
92
  props: [
86
93
  {
87
94
  name: 'title',
95
+ title: '标题',
88
96
  defaultValue: '',
89
97
  setters: 'InputSetter'
90
98
  },
91
99
  {
92
100
  name: 'description',
101
+ title: '描述文案',
93
102
  defaultValue: '',
94
103
  setters: 'InputSetter'
95
104
  },
96
105
  {
97
106
  name: 'icon',
107
+ title: 'Step 组件的自定义图标',
98
108
  defaultValue: '',
99
109
  setters: ['InputSetter']
100
110
  },
101
111
  {
102
112
  name: 'status',
113
+ title: '设置当前步骤的状态, 不设置则根据 steps 确定状态',
103
114
  defaultValue: '',
104
115
  setters: 'SelectSetter',
105
116
  options: ['wait', 'process', 'finish', 'error', 'success']
@@ -1,4 +1,5 @@
1
1
  import type { MaterialDescription } from '@vtj/core';
2
+ import { size } from '../shared';
2
3
  const Switch: MaterialDescription = {
3
4
  name: 'ElSwitch',
4
5
  label: '开关',
@@ -9,115 +10,130 @@ const Switch: MaterialDescription = {
9
10
  props: [
10
11
  {
11
12
  name: 'modelValue',
13
+ title: '绑定值',
12
14
  defaultValue: false,
13
15
  setters: ['BooleanSetter', 'NumberSetter', 'InputSetter']
14
16
  },
15
17
  {
16
18
  name: 'disabled',
19
+ title: '是否禁用',
17
20
  defaultValue: false,
18
21
  setters: 'BooleanSetter'
19
22
  },
20
23
  {
21
24
  name: 'loading',
25
+ title: '是否显示加载中',
22
26
  defaultValue: false,
23
27
  setters: 'BooleanSetter'
24
28
  },
25
- {
26
- name: 'size',
27
- defaultValue: 'default',
28
- options: ['large', 'default', 'small'],
29
- setters: 'SelectSetter'
30
- },
29
+ size('size'),
31
30
  {
32
31
  name: 'width',
32
+ title: 'switch 的宽度',
33
33
  defaultValue: '',
34
34
  setters: ['InputSetter', 'NumberSetter']
35
35
  },
36
36
  {
37
37
  name: 'inlinePrompt',
38
+ title: '无论图标或文本是否显示在点内,只会呈现文本的第一个字符',
38
39
  defaultValue: false,
39
40
  setters: 'BooleanSetter'
40
41
  },
41
42
  {
42
43
  name: 'activeIcon',
44
+ title: 'switch 状态为 on 时所显示图标,设置此项会忽略 active-text',
43
45
  defaultValue: '',
44
46
  setters: 'InputSetter'
45
47
  },
46
48
  {
47
49
  name: 'inactiveIcon',
50
+ title: 'switch 状态为 off 时所显示图标,设置此项会忽略 inactive-text',
48
51
  defaultValue: '',
49
52
  setters: 'InputSetter'
50
53
  },
51
54
  {
52
55
  name: 'activeActionIcon',
56
+ title: 'on状态下显示的图标',
53
57
  defaultValue: '',
54
58
  setters: 'InputSetter'
55
59
  },
56
60
  {
57
61
  name: 'inactiveActionIcon',
62
+ title: 'off状态下显示的图标',
58
63
  defaultValue: '',
59
64
  setters: 'InputSetter'
60
65
  },
61
66
  {
62
67
  name: 'activeText',
68
+ title: 'switch 打开时的文字描述',
63
69
  defaultValue: '',
64
70
  setters: 'InputSetter'
65
71
  },
66
72
  {
67
73
  name: 'inactiveText',
74
+ title: 'switch 的状态为 off 时的文字描述',
68
75
  defaultValue: '',
69
76
  setters: 'InputSetter'
70
77
  },
71
78
  {
72
79
  name: 'activeValue',
80
+ title: 'switch 状态为 on 时的值',
73
81
  defaultValue: true,
74
82
  setters: ['BooleanSetter', 'InputSetter', 'NumberSetter']
75
83
  },
76
84
  {
77
85
  name: 'inactiveValue',
86
+ title: 'switch的状态为 off 时的值',
78
87
  defaultValue: false,
79
88
  setters: ['BooleanSetter', 'InputSetter', 'NumberSetter']
80
89
  },
81
90
  {
82
91
  name: 'name',
92
+ title: 'switch 对应的 name 属性',
83
93
  defaultValue: '',
84
94
  setters: 'InputSetter'
85
95
  },
86
96
  {
87
97
  name: 'validateEvent',
98
+ title: '是否触发表单验证',
88
99
  defaultValue: true,
89
100
  setters: 'BooleanSetter'
90
101
  },
91
102
  {
92
103
  name: 'beforeChange',
104
+ title: 'switch 状态改变前的钩子, 返回 false 或者返回 Promise 且被 reject 则停止切换',
93
105
  setters: ['BooleanSetter', 'FunctionSetter']
94
106
  },
95
- { name: 'id', defaultValue: '', setters: 'StringSetter' },
107
+ { name: 'id', title: 'input 的 id', defaultValue: '', setters: 'StringSetter' },
96
108
  {
97
109
  name: 'tabindex',
110
+ title: 'input 的 tabindex',
98
111
  defaultValue: '',
99
112
  setters: ['StringSetter', 'NumberSetter']
100
113
  },
101
- { name: 'ariaLabel', defaultValue: '', setters: 'StringSetter' },
114
+ { name: 'ariaLabel', title: '等价于原生 input aria-label 属性', defaultValue: '', setters: 'StringSetter' },
102
115
  {
103
116
  name: 'activeColor',
117
+ title: '当在 on 状态时的背景颜色',
104
118
  defaultValue: '',
105
119
  setters: 'ColorSetter'
106
120
  },
107
121
  {
108
122
  name: 'inactiveColor',
123
+ title: 'off 状态时的背景颜色',
109
124
  defaultValue: '',
110
125
  setters: 'ColorSetter'
111
126
  },
112
127
  {
113
128
  name: 'borderColor',
129
+ title: '开关的边框颜色 ',
114
130
  defaultValue: '',
115
131
  setters: 'ColorSetter'
116
132
  },
117
- { name: 'label', defaultValue: '', setters: 'StringSetter' }
133
+ { name: 'label', title: '等价于原生 input aria-label 属性', defaultValue: '', setters: 'StringSetter' }
118
134
  ],
119
135
  events: ['change', 'update:modelValue'],
120
- slots: ['active-action', 'inactive-action']
136
+ slots: ['active-action', 'inactive-action', 'active', 'inactive'],
121
137
  };
122
138
 
123
139
  export default Switch;