@nutui/nutui-react 3.0.11-patch.0 → 3.0.12

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 (98) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/cjs/packages/configprovider/types.d.ts +1 -1
  3. package/dist/cjs/packages/progress/progress.js +38 -17
  4. package/dist/cjs/packages/progress/style/progress.scss +5 -21
  5. package/dist/cjs/packages/progress/style/style.css +5 -19
  6. package/dist/cjs/packages/progress/style-jmapp/progress.scss +5 -21
  7. package/dist/cjs/packages/progress/style-jmapp/style.css +4 -18
  8. package/dist/cjs/packages/progress/style-jrkf/progress.scss +5 -21
  9. package/dist/cjs/packages/progress/style-jrkf/style.css +4 -18
  10. package/dist/cjs/packages/range/range.js +5 -11
  11. package/dist/cjs/packages/range/style/range.scss +6 -2
  12. package/dist/cjs/packages/range/style/style.css +3 -1
  13. package/dist/cjs/packages/range/style-jmapp/range.scss +6 -2
  14. package/dist/cjs/packages/range/style-jmapp/style.css +3 -1
  15. package/dist/cjs/packages/range/style-jrkf/range.scss +6 -2
  16. package/dist/cjs/packages/range/style-jrkf/style.css +3 -1
  17. package/dist/cjs/packages/range/utils.d.ts +3 -0
  18. package/dist/cjs/packages/range/utils.js +24 -0
  19. package/dist/cjs/packages/searchbar/searchbar.js +162 -87
  20. package/dist/cjs/packages/searchbar/style/searchbar.scss +99 -25
  21. package/dist/cjs/packages/searchbar/style/style.css +102 -38
  22. package/dist/cjs/packages/searchbar/style-jmapp/searchbar.scss +99 -25
  23. package/dist/cjs/packages/searchbar/style-jmapp/style.css +85 -21
  24. package/dist/cjs/packages/searchbar/style-jrkf/searchbar.scss +99 -25
  25. package/dist/cjs/packages/searchbar/style-jrkf/style.css +85 -21
  26. package/dist/cjs/packages/step/step.js +74 -33
  27. package/dist/cjs/packages/step/style/step.scss +104 -195
  28. package/dist/cjs/packages/step/style/style.css +85 -159
  29. package/dist/cjs/packages/step/style-jmapp/step.scss +104 -195
  30. package/dist/cjs/packages/step/style-jmapp/style.css +88 -162
  31. package/dist/cjs/packages/step/style-jrkf/step.scss +104 -195
  32. package/dist/cjs/packages/step/style-jrkf/style.css +88 -162
  33. package/dist/cjs/packages/steps/steps.js +23 -8
  34. package/dist/cjs/packages/steps/style/steps.scss +328 -4
  35. package/dist/cjs/packages/steps/style/style.css +219 -2
  36. package/dist/cjs/packages/steps/style-jmapp/steps.scss +328 -4
  37. package/dist/cjs/packages/steps/style-jmapp/style.css +219 -2
  38. package/dist/cjs/packages/steps/style-jrkf/steps.scss +328 -4
  39. package/dist/cjs/packages/steps/style-jrkf/style.css +219 -2
  40. package/dist/cjs/packages/uploader/uploader.js +20 -9
  41. package/dist/cjs/types/spec/progress/base.d.ts +6 -0
  42. package/dist/cjs/types/spec/progress/taro.d.ts +4 -0
  43. package/dist/cjs/types/spec/searchbar/base.d.ts +3 -0
  44. package/dist/cjs/types/spec/steps/base.d.ts +11 -2
  45. package/dist/es/packages/configprovider/types.d.ts +1 -1
  46. package/dist/es/packages/progress/progress.js +38 -17
  47. package/dist/es/packages/progress/style/progress.scss +5 -21
  48. package/dist/es/packages/progress/style/style.css +5 -19
  49. package/dist/es/packages/progress/style-jmapp/progress.scss +5 -21
  50. package/dist/es/packages/progress/style-jmapp/style.css +4 -18
  51. package/dist/es/packages/progress/style-jrkf/progress.scss +5 -21
  52. package/dist/es/packages/progress/style-jrkf/style.css +4 -18
  53. package/dist/es/packages/range/range.js +5 -11
  54. package/dist/es/packages/range/style/range.scss +6 -2
  55. package/dist/es/packages/range/style/style.css +3 -1
  56. package/dist/es/packages/range/style-jmapp/range.scss +6 -2
  57. package/dist/es/packages/range/style-jmapp/style.css +3 -1
  58. package/dist/es/packages/range/style-jrkf/range.scss +6 -2
  59. package/dist/es/packages/range/style-jrkf/style.css +3 -1
  60. package/dist/es/packages/range/utils.d.ts +3 -0
  61. package/dist/es/packages/range/utils.js +6 -0
  62. package/dist/es/packages/searchbar/searchbar.js +163 -89
  63. package/dist/es/packages/searchbar/style/searchbar.scss +99 -25
  64. package/dist/es/packages/searchbar/style/style.css +102 -38
  65. package/dist/es/packages/searchbar/style-jmapp/searchbar.scss +99 -25
  66. package/dist/es/packages/searchbar/style-jmapp/style.css +85 -21
  67. package/dist/es/packages/searchbar/style-jrkf/searchbar.scss +99 -25
  68. package/dist/es/packages/searchbar/style-jrkf/style.css +85 -21
  69. package/dist/es/packages/step/step.js +75 -34
  70. package/dist/es/packages/step/style/step.scss +104 -195
  71. package/dist/es/packages/step/style/style.css +85 -159
  72. package/dist/es/packages/step/style-jmapp/step.scss +104 -195
  73. package/dist/es/packages/step/style-jmapp/style.css +88 -162
  74. package/dist/es/packages/step/style-jrkf/step.scss +104 -195
  75. package/dist/es/packages/step/style-jrkf/style.css +88 -162
  76. package/dist/es/packages/steps/steps.js +23 -8
  77. package/dist/es/packages/steps/style/steps.scss +328 -4
  78. package/dist/es/packages/steps/style/style.css +219 -2
  79. package/dist/es/packages/steps/style-jmapp/steps.scss +328 -4
  80. package/dist/es/packages/steps/style-jmapp/style.css +219 -2
  81. package/dist/es/packages/steps/style-jrkf/steps.scss +328 -4
  82. package/dist/es/packages/steps/style-jrkf/style.css +219 -2
  83. package/dist/es/packages/uploader/uploader.js +20 -9
  84. package/dist/es/types/spec/progress/base.d.ts +24 -0
  85. package/dist/es/types/spec/progress/taro.d.ts +4 -0
  86. package/dist/es/types/spec/searchbar/base.d.ts +10 -1
  87. package/dist/es/types/spec/steps/base.d.ts +26 -5
  88. package/dist/nutui.react.umd.js +317 -167
  89. package/dist/style-jmapp.css +1 -1
  90. package/dist/style-jmapp.scss +39 -39
  91. package/dist/style-jrkf.css +1 -1
  92. package/dist/style-jrkf.scss +42 -42
  93. package/dist/style.css +1 -1
  94. package/dist/style.scss +41 -41
  95. package/dist/styles/variables-jmapp.scss +133 -79
  96. package/dist/styles/variables-jrkf.scss +134 -80
  97. package/dist/styles/variables.scss +148 -89
  98. package/package.json +1 -1
@@ -5,8 +5,225 @@
5
5
  .nut-steps {
6
6
  display: flex;
7
7
  }
8
-
8
+ .nut-steps-horizontal {
9
+ flex-flow: row;
10
+ }
11
+ .nut-steps-horizontal .nut-step-head {
12
+ background-color: var(--nutui-steps-background-color, #ffffff);
13
+ }
14
+ .nut-steps-horizontal .nut-step-head-icon .nut-icon {
15
+ height: 10px;
16
+ width: 10px;
17
+ }
18
+ .nut-steps-horizontal .nut-step-head-icon .nut-image {
19
+ width: 100%;
20
+ height: 100%;
21
+ background-color: var(--nutui-steps-background-color, #ffffff);
22
+ }
23
+ .nut-steps-horizontal .nut-step-head-icon .nut-image img {
24
+ vertical-align: top;
25
+ }
26
+ .nut-steps-horizontal .nut-step.nut-step-process .nut-step-title {
27
+ color: var(--nutui-steps-process-title-color, var(--nutui-color-primary, #ff6666));
28
+ }
29
+ .nut-steps-horizontal .nut-step.nut-step-process .nut-step-description {
30
+ color: var(--nutui-steps-process-description-color, var(--nutui-color-primary, #ff6666));
31
+ }
32
+ .nut-steps-horizontal .nut-step.nut-step-wait .nut-step-title {
33
+ color: var(--nutui-steps-wait-title-color, var(--nutui-color-title));
34
+ }
35
+ .nut-steps-horizontal .nut-step.nut-step-wait .nut-step-description {
36
+ color: var(--nutui-steps-wait-description-color, var(--nutui-color-text));
37
+ }
38
+ .nut-steps-horizontal-single .nut-step {
39
+ padding-right: var(--nutui-steps-horizontal-item-padding-right, 28px);
40
+ }
41
+ .nut-steps-horizontal-single .nut-step-last {
42
+ padding-right: 0 !important;
43
+ }
44
+ .nut-steps-horizontal-single .nut-step-line {
45
+ top: 0;
46
+ right: 0;
47
+ height: var(--nutui-steps-base-head-height, 14px);
48
+ width: var(--nutui-steps-horizontal-item-padding-right, 28px);
49
+ padding: var(--nutui-steps-horizontal-item-line-padding, 0 8px);
50
+ box-sizing: border-box;
51
+ }
52
+ .nut-steps-horizontal-single .nut-step-title, .nut-steps-horizontal-single .nut-step-description {
53
+ padding-left: 4px;
54
+ }
55
+ .nut-steps-horizontal-single .nut-step-special {
56
+ padding-right: var(--nutui-steps-horizontal-item-special-padding-right, 22px);
57
+ }
58
+ .nut-steps-horizontal-single .nut-step-special .nut-step-line {
59
+ width: 100%;
60
+ }
61
+ .nut-steps-horizontal-single .nut-step-special .nut-step-title {
62
+ padding-right: 8px;
63
+ width: fit-content;
64
+ }
65
+ .nut-steps-horizontal-single.nut-steps-horizontal-count-3 .nut-step-special {
66
+ padding-right: var(--nutui-steps-horizontal-item-special-3-padding-right, 9px);
67
+ }
68
+ .nut-steps-horizontal-double {
69
+ width: 100%;
70
+ justify-content: space-between;
71
+ }
72
+ .nut-steps-horizontal-double .nut-step {
73
+ flex-direction: column;
74
+ align-items: center;
75
+ flex: 1;
76
+ }
77
+ .nut-steps-horizontal-double .nut-step-line {
78
+ top: 0;
79
+ right: -50%;
80
+ height: var(--nutui-steps-base-head-height, 14px);
81
+ width: 100%;
82
+ }
83
+ .nut-steps-horizontal-double .nut-step-line-inner {
84
+ display: inline-flex;
85
+ height: var(--nutui-steps-base-line-height, 1px);
86
+ width: 100%;
87
+ background: var(--nutui-steps-base-line-background, var(--nutui-color-border));
88
+ }
89
+ .nut-steps-horizontal-double .nut-step-head {
90
+ justify-content: center;
91
+ margin-bottom: 6px;
92
+ }
93
+ .nut-steps-horizontal-double .nut-step-head-dot-wrap, .nut-steps-horizontal-double .nut-step-head-icon-wrap, .nut-steps-horizontal-double .nut-step-head-text-wrap {
94
+ background-color: var(--nutui-steps-background-color, #ffffff);
95
+ padding: var(--nutui-steps-horizontal-item-line-padding, 0 8px);
96
+ }
97
+ .nut-steps-horizontal-double .nut-step-head-icon {
98
+ height: var(--nutui-steps-base-head-icon-size-right, 20px);
99
+ width: var(--nutui-steps-base-head-icon-size-right, 20px);
100
+ }
101
+ .nut-steps-horizontal-double .nut-step-head-icon .nut-icon {
102
+ height: 12px;
103
+ width: 12px;
104
+ }
105
+ .nut-steps-horizontal-double .nut-step-main {
106
+ align-items: center;
107
+ margin-left: 0;
108
+ margin-top: 2px;
109
+ }
110
+ .nut-steps-horizontal-double.nut-steps-horizontal-icon .nut-step-head, .nut-steps-horizontal-double.nut-steps-horizontal-icon .nut-step-line {
111
+ height: var(--nutui-steps-base-head-icon-size-right, 20px);
112
+ }
113
+ .nut-steps-horizontal-double.nut-steps-horizontal-dot .nut-step-head, .nut-steps-horizontal-double.nut-steps-horizontal-dot .nut-step-line {
114
+ height: var(--nutui-steps-base-head-dot-size, 6px);
115
+ }
116
+ .nut-steps-horizontal-double.nut-steps-horizontal-text .nut-step-head, .nut-steps-horizontal-double.nut-steps-horizontal-text .nut-step-line {
117
+ height: var(--nutui-steps-base-head-text-size, 12px);
118
+ }
9
119
  .nut-steps-vertical {
120
+ /* #ifdef harmony*/
121
+ flex: 1;
122
+ min-width: 0;
123
+ /* #endif */
124
+ flex-direction: column;
125
+ }
126
+ .nut-steps-vertical .nut-step {
127
+ padding-bottom: var(--nutui-steps-vertical-item-padding-bottom, 13px);
128
+ }
129
+ .nut-steps-vertical .nut-step-last {
130
+ padding-bottom: 0 !important;
131
+ }
132
+ .nut-steps-vertical .nut-step-line {
133
+ height: calc(100% - 4px);
134
+ width: 1px;
135
+ bottom: 0;
136
+ }
137
+ .nut-steps-vertical .nut-step-line-inner {
10
138
  height: 100%;
11
- flex-flow: column;
139
+ }
140
+ .nut-steps-vertical .nut-step-head {
141
+ align-items: center;
142
+ justify-content: center;
143
+ height: 18px;
144
+ }
145
+ .nut-steps-vertical .nut-step-head-icon {
146
+ width: var(--nutui-steps-vertical-item-icon-size, 20px);
147
+ height: var(--nutui-steps-vertical-item-icon-size, 20px);
148
+ }
149
+ .nut-steps-vertical .nut-step-head-icon .nut-icon {
150
+ height: 12px;
151
+ width: 12px;
152
+ }
153
+ .nut-steps-vertical .nut-step-main {
154
+ flex: 1;
155
+ min-width: 0;
156
+ height: auto;
157
+ margin-left: 8px;
158
+ }
159
+ .nut-steps-vertical .nut-step-title {
160
+ display: flex;
161
+ align-items: center;
162
+ height: var(--nutui-steps-vertical-line-height, 18px);
163
+ font-size: var(--nutui-steps-vertical-title-font-size, var(--nutui-font-text-large));
164
+ overflow: auto;
165
+ font-weight: 500;
166
+ margin-bottom: var(--nutui-steps-vertical-title-margin-bottom, 4px);
167
+ }
168
+ .nut-steps-vertical .nut-step-description {
169
+ margin: var(--nutui-steps-vertical-description-margin, 0 0 1px);
170
+ height: auto;
171
+ line-height: var(--nutui-steps-vertical-line-height, 18px);
172
+ color: var(--nutui-color-title);
173
+ font-size: var(--nutui-steps-vertical-description-font-size, var(--nutui-font-text));
174
+ box-sizing: border-box;
175
+ }
176
+ .nut-steps-vertical .nut-step-head-dot-wrap, .nut-steps-vertical .nut-step-head-icon-wrap, .nut-steps-vertical .nut-step-head-text-wrap {
177
+ display: flex;
178
+ align-items: center;
179
+ justify-content: center;
180
+ width: 100%;
181
+ background-color: white;
182
+ position: relative;
183
+ z-index: 1;
184
+ }
185
+ .nut-steps-vertical .nut-step-head-dot-wrap {
186
+ height: calc(var(--nutui-steps-base-head-dot-size, 6px) + 8px);
187
+ }
188
+ .nut-steps-vertical .nut-step-head-icon-wrap {
189
+ height: calc(var(--nutui-steps-vertical-item-icon-size, 20px) + 8px);
190
+ }
191
+ .nut-steps-vertical .nut-step-head-text-wrap {
192
+ height: calc(var(--nutui-steps-base-head-text-size, 12px) + 8px);
193
+ }
194
+ .nut-steps-vertical-icon .nut-step-head {
195
+ width: calc(var(--nutui-steps-vertical-item-icon-size, 20px) + 1px);
196
+ min-width: calc(var(--nutui-steps-vertical-item-icon-size, 20px) + 1px);
197
+ }
198
+ .nut-steps-vertical-icon .nut-step-line {
199
+ left: calc(var(--nutui-steps-vertical-item-icon-size, 20px) / 2);
200
+ }
201
+ .nut-steps-vertical-dot .nut-step-head {
202
+ width: calc(var(--nutui-steps-base-head-dot-size, 6px) + 1px);
203
+ }
204
+ .nut-steps-vertical-dot .nut-step-line {
205
+ left: calc(var(--nutui-steps-base-head-dot-size, 6px) / 2);
206
+ }
207
+ .nut-steps-vertical-text .nut-step-head {
208
+ width: calc(var(--nutui-steps-base-head-text-size, 12px) + 1px);
209
+ min-width: calc(var(--nutui-steps-base-head-text-size, 12px) + 1px);
210
+ }
211
+ .nut-steps-vertical-text .nut-step-line {
212
+ left: calc(var(--nutui-steps-base-head-text-size, 12px) / 2);
213
+ }
214
+ .nut-steps-horizontal-enhanced .nut-step-finish .nut-step-head-icon,
215
+ .nut-steps-horizontal-enhanced .nut-step-finish .nut-step-head-text, .nut-steps-vertical-enhanced .nut-step-finish .nut-step-head-icon,
216
+ .nut-steps-vertical-enhanced .nut-step-finish .nut-step-head-text {
217
+ background-color: var(--nutui-steps-enhanced-finish-head-background-color, var(--nutui-color-primary-light-pressed, #ffcccc));
218
+ }
219
+ .nut-steps-horizontal-enhanced .nut-step-finish .nut-step-head-icon .nut-icon,
220
+ .nut-steps-horizontal-enhanced .nut-step-finish .nut-step-head-text .nut-icon, .nut-steps-vertical-enhanced .nut-step-finish .nut-step-head-icon .nut-icon,
221
+ .nut-steps-vertical-enhanced .nut-step-finish .nut-step-head-text .nut-icon {
222
+ color: var(--nutui-steps-enhanced-finish-head-icon-color, var(--nutui-color-primary-stop-1, #ff9999));
223
+ }
224
+ .nut-steps-horizontal-enhanced .nut-step-finish .nut-step-head-text, .nut-steps-vertical-enhanced .nut-step-finish .nut-step-head-text {
225
+ color: var(--nutui-steps-enhanced-finish-head-text-color, var(--nutui-color-primary-stop-1, #ff9999));
226
+ }
227
+ .nut-steps-horizontal-enhanced .nut-step-finish .nut-step-head-dot, .nut-steps-vertical-enhanced .nut-step-finish .nut-step-head-dot {
228
+ background-color: var(--nutui-steps-enhanced-finish-head-dot-background-color, var(--nutui-color-primary-disabled-special, #ffadbe));
12
229
  }
@@ -194,10 +194,21 @@ var InternalUploader = function(props, ref) {
194
194
  ];
195
195
  case 1:
196
196
  _files = _state.sent();
197
- if (!_files.length) $el.value = '';
198
- _state.label = 2;
197
+ if (!_files.length) {
198
+ $el.value = '';
199
+ return [
200
+ 2
201
+ ];
202
+ }
203
+ return [
204
+ 3,
205
+ 3
206
+ ];
199
207
  case 2:
200
- _files = filterFiles(filesArr);
208
+ _files = filesArr;
209
+ _state.label = 3;
210
+ case 3:
211
+ _files = filterFiles(_files);
201
212
  tasks = _files.map(function(file) {
202
213
  var _file_type;
203
214
  var info = {
@@ -224,22 +235,22 @@ var InternalUploader = function(props, ref) {
224
235
  });
225
236
  if (!!autoUpload) return [
226
237
  3,
227
- 3
238
+ 4
228
239
  ];
229
240
  setUploadQueue(tasks);
230
241
  return [
231
242
  3,
232
- 5
243
+ 6
233
244
  ];
234
- case 3:
245
+ case 4:
235
246
  return [
236
247
  4,
237
248
  uploadAction(tasks)
238
249
  ];
239
- case 4:
240
- _state.sent();
241
- _state.label = 5;
242
250
  case 5:
251
+ _state.sent();
252
+ _state.label = 6;
253
+ case 6:
243
254
  if (clearInput) {
244
255
  $el.value = '';
245
256
  }
@@ -32,4 +32,28 @@ export interface BaseProgress extends BaseProps {
32
32
  * 延迟数据加载时长,单位 ms
33
33
  */
34
34
  delay: number
35
+ /**
36
+ * 进度条圆角大小
37
+ */
38
+ borderRadius: string
39
+ /**
40
+ * 进度文字大小
41
+ */
42
+ fontSize: string
43
+ /**
44
+ * 动画播放方式
45
+ */
46
+ activeMode: string
47
+ /**
48
+ * 动画完成时间(单位:毫秒)
49
+ */
50
+ duration: number
51
+ /**
52
+ * 无障碍标签
53
+ */
54
+ ariaLabel: string
55
+ /**
56
+ * 动画完成后的回调函数
57
+ */
58
+ onActiveEnd: () => void
35
59
  }
@@ -1,3 +1,7 @@
1
1
  import { BaseProgress } from './base';
2
2
  export interface TaroProgressProps extends BaseProgress {
3
+ showInfo: boolean;
4
+ activeColor: string;
5
+ backgroundColor: string;
6
+ active: boolean;
3
7
  }
@@ -3,10 +3,14 @@ import { UIRound } from '../../base/atoms';
3
3
  import { BaseProps } from '../../base/props';
4
4
  export interface BaseSearchBar extends BaseProps {
5
5
  /**
6
- * 当前输入的值
6
+ * 当前输入的值,受控
7
7
  */
8
8
  value: string
9
9
  /**
10
+ * 当前默认值,支持通过','分割成多个
11
+ */
12
+ defaultValue: string
13
+ /**
10
14
  * 输入框默认暗纹
11
15
  */
12
16
  placeholder: string
@@ -54,6 +58,7 @@ export interface BaseSearchBar extends BaseProps {
54
58
  * 输入框内右侧区域
55
59
  */
56
60
  rightIn: ReactNode
61
+ tag: boolean;
57
62
  /**
58
63
  * 确定搜索时触发
59
64
  */
@@ -78,4 +83,8 @@ export interface BaseSearchBar extends BaseProps {
78
83
  * 点击输入区域时触发
79
84
  */
80
85
  onInputClick: (e: any) => void
86
+ /**
87
+ * 点击默认值的x号触发
88
+ */
89
+ onItemClick: (value: string, e: any) => void
81
90
  }
@@ -1,23 +1,44 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { BaseProps } from '../../base/props';
3
+ export type StepStatus = 'wait' | 'process' | 'finish';
4
+ export type StepType = 'text' | 'dot' | 'icon';
5
+ export type StepLayout = 'single' | 'double';
6
+ export type StepDirection = 'horizontal' | 'vertical';
7
+ export type StepsStatus = 'default' | 'business' | 'dynamic' | 'enhanced';
3
8
  export interface BaseStep extends BaseProps {
4
9
  title: ReactNode;
5
10
  description: ReactNode;
6
11
  value: number;
7
12
  icon: ReactNode;
13
+ type: StepType;
8
14
  }
9
15
  export interface BaseSteps extends BaseProps {
16
+ /**
17
+ * 步骤条的展示状态
18
+ */
19
+ status: StepsStatus
20
+ /**
21
+ * 步骤条的显示方向
22
+ */
23
+ direction: StepDirection
10
24
  /**
11
25
  * 当前所在的步骤
12
26
  */
13
27
  value: number
14
28
  /**
15
- * 显示方向
29
+ * 步骤条的类型
30
+ */
31
+ type: StepType
32
+ /**
33
+ * 步骤条的布局方式
34
+ */
35
+ layout: StepLayout
36
+ /**
37
+ * 自定义图标
16
38
  */
17
- direction: string
39
+ icon: ReactNode
18
40
  /**
19
- * 点状步骤条
41
+ * 点击切换步骤条时触发
20
42
  */
21
- dot: boolean
22
- onStepClick: (index: number) => void;
43
+ onStepClick: (index: number) => void
23
44
  }