@douyinfe/semi-foundation 2.15.1 → 2.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 (38) hide show
  1. package/input/input.scss +39 -9
  2. package/input/textarea.scss +2 -2
  3. package/lib/cjs/input/input.css +29 -1
  4. package/lib/cjs/input/input.scss +39 -9
  5. package/lib/cjs/input/textarea.css +2 -2
  6. package/lib/cjs/input/textarea.scss +2 -2
  7. package/lib/cjs/select/select.css +2 -2
  8. package/lib/cjs/select/variables.scss +4 -4
  9. package/lib/cjs/slider/foundation.d.ts +9 -2
  10. package/lib/cjs/slider/foundation.js +195 -5
  11. package/lib/cjs/slider/slider.css +3 -0
  12. package/lib/cjs/slider/slider.scss +7 -5
  13. package/lib/cjs/slider/variables.scss +4 -4
  14. package/lib/cjs/tooltip/variables.scss +1 -1
  15. package/lib/cjs/treeSelect/treeSelect.css +2 -0
  16. package/lib/cjs/treeSelect/treeSelect.scss +2 -0
  17. package/lib/es/input/input.css +29 -1
  18. package/lib/es/input/input.scss +39 -9
  19. package/lib/es/input/textarea.css +2 -2
  20. package/lib/es/input/textarea.scss +2 -2
  21. package/lib/es/select/select.css +2 -2
  22. package/lib/es/select/variables.scss +4 -4
  23. package/lib/es/slider/foundation.d.ts +9 -2
  24. package/lib/es/slider/foundation.js +192 -5
  25. package/lib/es/slider/slider.css +3 -0
  26. package/lib/es/slider/slider.scss +7 -5
  27. package/lib/es/slider/variables.scss +4 -4
  28. package/lib/es/tooltip/variables.scss +1 -1
  29. package/lib/es/treeSelect/treeSelect.css +2 -0
  30. package/lib/es/treeSelect/treeSelect.scss +2 -0
  31. package/package.json +2 -2
  32. package/select/variables.scss +4 -4
  33. package/slider/foundation.ts +141 -9
  34. package/slider/slider.scss +7 -5
  35. package/slider/variables.scss +4 -4
  36. package/tooltip/variables.scss +1 -1
  37. package/treeSelect/treeSelect.scss +2 -0
  38. package/utils/a11y.ts +2 -2
package/input/input.scss CHANGED
@@ -77,7 +77,7 @@ $module: #{$prefix}-input;
77
77
  }
78
78
 
79
79
  &:active {
80
- background-color: $color-input_default-bg-focus;
80
+ background-color: $color-input_default-bg-active;
81
81
  border-color: $color-input_default-border-focus;
82
82
  }
83
83
  }
@@ -100,10 +100,10 @@ $module: #{$prefix}-input;
100
100
  border-color: $color-input_danger-border-focus;
101
101
  }
102
102
 
103
- // &:active {
104
- // background-color: $color-input_danger-bg-active;
105
- // border-color: $color-input_danger-border-active;
106
- // }
103
+ &:active {
104
+ background-color: $color-input_danger-bg-active;
105
+ border-color: $color-input_danger-border-focus;
106
+ }
107
107
  }
108
108
 
109
109
  &-warning {
@@ -120,10 +120,10 @@ $module: #{$prefix}-input;
120
120
  border-color: $color-input_warning-border-focus;
121
121
  }
122
122
 
123
- // &:active {
124
- // background-color: $color-input_warning-bg-active;
125
- // border-color: $color-input_warning-border-active;
126
- // }
123
+ &:active {
124
+ background-color: $color-input_warning-bg-active;
125
+ border-color: $color-input_warning-border-focus;
126
+ }
127
127
  }
128
128
 
129
129
  &__with-prefix {
@@ -288,6 +288,16 @@ $module: #{$prefix}-input;
288
288
  }
289
289
  }
290
290
 
291
+ // when have prepend and append, only make the input have active bg color
292
+ &:active {
293
+ background-color: $color-input_default-bg-active;
294
+
295
+ & + .#{$module}-clearbtn,
296
+ & ~ .#{$module}-modebtn {
297
+ background-color: $color-input_default-bg-active;
298
+ }
299
+ }
300
+
291
301
  &-clearbtn,
292
302
  &-modebtn,
293
303
  &-clearbtn:hover,
@@ -328,6 +338,16 @@ $module: #{$prefix}-input;
328
338
  }
329
339
  }
330
340
 
341
+ &:active {
342
+ background-color: $color-input_danger-bg-active;
343
+
344
+ & + .#{$module}-clearbtn,
345
+ & + .#{$module}-modebtn {
346
+ background-color: $color-input_danger-bg-active;
347
+ border-color: $color-input_danger-border-focus;
348
+ }
349
+ }
350
+
331
351
  &-clearbtn,
332
352
  &-modebtn,
333
353
  &-clearbtn:hover,
@@ -369,6 +389,16 @@ $module: #{$prefix}-input;
369
389
  }
370
390
  }
371
391
 
392
+ &:active {
393
+ background-color: $color-input_warning-bg-active;
394
+
395
+ & + .#{$module}-clearbtn,
396
+ & + .#{$module}-modebtn {
397
+ background-color: $color-input_warning-bg-active;
398
+ border-color: $color-input_warning-border-focus;
399
+ }
400
+ }
401
+
372
402
  &-clearbtn,
373
403
  &-modebtn,
374
404
  &-clearbtn:hover,
@@ -90,7 +90,7 @@ $module: #{$prefix}-input;
90
90
 
91
91
  &:active {
92
92
  background-color: $color-input_danger-bg-active;
93
- border-color: $color-input_danger-border-active;
93
+ border-color: $color-input_danger-border-focus;
94
94
  }
95
95
  }
96
96
 
@@ -110,7 +110,7 @@ $module: #{$prefix}-input;
110
110
 
111
111
  &:active {
112
112
  background-color: $color-input_warning-bg-active;
113
- border-color: $color-input_warning-border-active;
113
+ border-color: $color-input_warning-border-focus;
114
114
  }
115
115
  }
116
116
 
@@ -68,7 +68,7 @@
68
68
  border-color: var(--semi-color-focus-border);
69
69
  }
70
70
  .semi-input-wrapper-focus:active {
71
- background-color: var(--semi-color-fill-0);
71
+ background-color: var(--semi-color-fill-2);
72
72
  border-color: var(--semi-color-focus-border);
73
73
  }
74
74
  .semi-input-wrapper.semi-input-readonly {
@@ -86,6 +86,10 @@
86
86
  background-color: var(--semi-color-danger-light-default);
87
87
  border-color: var(--semi-color-danger);
88
88
  }
89
+ .semi-input-wrapper-error:active {
90
+ background-color: var(--semi-color-danger-light-active);
91
+ border-color: var(--semi-color-danger);
92
+ }
89
93
  .semi-input-wrapper-warning {
90
94
  background-color: var(--semi-color-warning-light-default);
91
95
  border-color: var(--semi-color-warning-light-default);
@@ -98,6 +102,10 @@
98
102
  background-color: var(--semi-color-warning-light-default);
99
103
  border-color: var(--semi-color-warning);
100
104
  }
105
+ .semi-input-wrapper-warning:active {
106
+ background-color: var(--semi-color-warning-light-active);
107
+ border-color: var(--semi-color-warning);
108
+ }
101
109
  .semi-input-wrapper__with-prefix {
102
110
  display: inline-flex;
103
111
  align-items: center;
@@ -218,6 +226,12 @@
218
226
  .semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:focus ~ .semi-input-modebtn:not(:last-child), .semi-input-wrapper.semi-input-wrapper__with-append .semi-input:focus ~ .semi-input-modebtn:not(:last-child) {
219
227
  border-radius: 0;
220
228
  }
229
+ .semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active, .semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active {
230
+ background-color: var(--semi-color-fill-2);
231
+ }
232
+ .semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active + .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input:active ~ .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active + .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-append .semi-input:active ~ .semi-input-modebtn {
233
+ background-color: var(--semi-color-fill-2);
234
+ }
221
235
  .semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-clearbtn:hover, .semi-input-wrapper.semi-input-wrapper__with-prepend .semi-input-modebtn:hover, .semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-append .semi-input-clearbtn:hover, .semi-input-wrapper.semi-input-wrapper__with-append .semi-input-modebtn:hover {
222
236
  background-color: var(--semi-color-fill-0);
223
237
  }
@@ -246,6 +260,13 @@
246
260
  background-color: var(--semi-color-danger-light-default);
247
261
  border-color: var(--semi-color-danger);
248
262
  }
263
+ .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active {
264
+ background-color: var(--semi-color-danger-light-active);
265
+ }
266
+ .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active + .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input:active + .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active + .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input:active + .semi-input-modebtn {
267
+ background-color: var(--semi-color-danger-light-active);
268
+ border-color: var(--semi-color-danger);
269
+ }
249
270
  .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-clearbtn:hover, .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-error .semi-input-modebtn:hover, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-clearbtn:hover, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-error .semi-input-modebtn:hover {
250
271
  background-color: var(--semi-color-danger-light-default);
251
272
  }
@@ -274,6 +295,13 @@
274
295
  background-color: var(--semi-color-warning-light-default);
275
296
  border-color: var(--semi-color-warning);
276
297
  }
298
+ .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active {
299
+ background-color: var(--semi-color-warning-light-active);
300
+ }
301
+ .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active + .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input:active + .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active + .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input:active + .semi-input-modebtn {
302
+ background-color: var(--semi-color-warning-light-active);
303
+ border-color: var(--semi-color-warning);
304
+ }
277
305
  .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-clearbtn:hover, .semi-input-wrapper.semi-input-wrapper__with-prepend.semi-input-wrapper-warning .semi-input-modebtn:hover, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-clearbtn:hover, .semi-input-wrapper.semi-input-wrapper__with-append.semi-input-wrapper-warning .semi-input-modebtn:hover {
278
306
  background-color: var(--semi-color-warning-light-default);
279
307
  }
@@ -77,7 +77,7 @@ $module: #{$prefix}-input;
77
77
  }
78
78
 
79
79
  &:active {
80
- background-color: $color-input_default-bg-focus;
80
+ background-color: $color-input_default-bg-active;
81
81
  border-color: $color-input_default-border-focus;
82
82
  }
83
83
  }
@@ -100,10 +100,10 @@ $module: #{$prefix}-input;
100
100
  border-color: $color-input_danger-border-focus;
101
101
  }
102
102
 
103
- // &:active {
104
- // background-color: $color-input_danger-bg-active;
105
- // border-color: $color-input_danger-border-active;
106
- // }
103
+ &:active {
104
+ background-color: $color-input_danger-bg-active;
105
+ border-color: $color-input_danger-border-focus;
106
+ }
107
107
  }
108
108
 
109
109
  &-warning {
@@ -120,10 +120,10 @@ $module: #{$prefix}-input;
120
120
  border-color: $color-input_warning-border-focus;
121
121
  }
122
122
 
123
- // &:active {
124
- // background-color: $color-input_warning-bg-active;
125
- // border-color: $color-input_warning-border-active;
126
- // }
123
+ &:active {
124
+ background-color: $color-input_warning-bg-active;
125
+ border-color: $color-input_warning-border-focus;
126
+ }
127
127
  }
128
128
 
129
129
  &__with-prefix {
@@ -288,6 +288,16 @@ $module: #{$prefix}-input;
288
288
  }
289
289
  }
290
290
 
291
+ // when have prepend and append, only make the input have active bg color
292
+ &:active {
293
+ background-color: $color-input_default-bg-active;
294
+
295
+ & + .#{$module}-clearbtn,
296
+ & ~ .#{$module}-modebtn {
297
+ background-color: $color-input_default-bg-active;
298
+ }
299
+ }
300
+
291
301
  &-clearbtn,
292
302
  &-modebtn,
293
303
  &-clearbtn:hover,
@@ -328,6 +338,16 @@ $module: #{$prefix}-input;
328
338
  }
329
339
  }
330
340
 
341
+ &:active {
342
+ background-color: $color-input_danger-bg-active;
343
+
344
+ & + .#{$module}-clearbtn,
345
+ & + .#{$module}-modebtn {
346
+ background-color: $color-input_danger-bg-active;
347
+ border-color: $color-input_danger-border-focus;
348
+ }
349
+ }
350
+
331
351
  &-clearbtn,
332
352
  &-modebtn,
333
353
  &-clearbtn:hover,
@@ -369,6 +389,16 @@ $module: #{$prefix}-input;
369
389
  }
370
390
  }
371
391
 
392
+ &:active {
393
+ background-color: $color-input_warning-bg-active;
394
+
395
+ & + .#{$module}-clearbtn,
396
+ & + .#{$module}-modebtn {
397
+ background-color: $color-input_warning-bg-active;
398
+ border-color: $color-input_warning-border-focus;
399
+ }
400
+ }
401
+
372
402
  &-clearbtn,
373
403
  &-modebtn,
374
404
  &-clearbtn:hover,
@@ -72,7 +72,7 @@
72
72
  }
73
73
  .semi-input-textarea-wrapper-error:active {
74
74
  background-color: var(--semi-color-danger-light-active);
75
- border-color: var(--semi-color-danger-light-active);
75
+ border-color: var(--semi-color-danger);
76
76
  }
77
77
  .semi-input-textarea-wrapper-warning {
78
78
  background-color: var(--semi-color-warning-light-default);
@@ -88,7 +88,7 @@
88
88
  }
89
89
  .semi-input-textarea-wrapper-warning:active {
90
90
  background-color: var(--semi-color-warning-light-active);
91
- border-color: var(--semi-color-warning-light-active);
91
+ border-color: var(--semi-color-warning);
92
92
  }
93
93
 
94
94
  .semi-input-textarea {
@@ -90,7 +90,7 @@ $module: #{$prefix}-input;
90
90
 
91
91
  &:active {
92
92
  background-color: $color-input_danger-bg-active;
93
- border-color: $color-input_danger-border-active;
93
+ border-color: $color-input_danger-border-focus;
94
94
  }
95
95
  }
96
96
 
@@ -110,7 +110,7 @@ $module: #{$prefix}-input;
110
110
 
111
111
  &:active {
112
112
  background-color: $color-input_warning-bg-active;
113
- border-color: $color-input_warning-border-active;
113
+ border-color: $color-input_warning-border-focus;
114
114
  }
115
115
  }
116
116
 
@@ -283,11 +283,11 @@
283
283
  align-items: center;
284
284
  }
285
285
  .semi-select-prefix-text, .semi-select-suffix-text {
286
- margin: 0 12px;
286
+ margin: 0px 12px;
287
287
  }
288
288
  .semi-select-prefix-icon, .semi-select-suffix-icon {
289
289
  color: var(--semi-color-text-2);
290
- margin: 0 8px;
290
+ margin: 0px 8px;
291
291
  }
292
292
  .semi-select-suffix {
293
293
  display: flex;
@@ -58,16 +58,16 @@ $width-select_arrow: 32px; // 选择器输入框下拉箭头宽度
58
58
  $width-select_arrow_empty: 12px; // 选择器输入框下拉箭头为空时(有suffix icon)宽度
59
59
  $width-select_clear-icon: 32px; // 选择器输入框清空按钮宽度
60
60
  $width-select_group_top-border: $border-thickness-control; // 选择器菜单分组标题描边宽度
61
- $height-select_multiple_content_wrapper-minHeight: $height-select_default - 2; // 多项选择器标签组最小宽度
61
+ $height-select_multiple_content_wrapper-minHeight: $height-select_default - 2px; // 多项选择器标签组最小宽度
62
62
  $width-select-border-hover: $width-select-border; // 选择器输入框描边宽度 - 悬浮
63
63
  $width-select-border-focus: $width-select-border-hover; // 选择器输入框描边宽度 - 按下
64
64
  $width-select-border-active: $width-select-border-focus; // 选择器输入框描边宽度 - 选中
65
65
  // Spacing
66
66
  $spacing-select_option_tick-marginRight: $spacing-tight; // 选择器菜单选中对勾右侧外边距
67
67
  $spacing-select_prefix_suffix_text-marginX: $spacing-base-tight; // 选择器输入框前后缀文本水平内边距
68
- $spacing-select_prefix_suffix_text-marginY: 0; // 选择器输入框前后缀文本垂直内边距
68
+ $spacing-select_prefix_suffix_text-marginY: 0px; // 选择器输入框前后缀文本垂直内边距
69
69
  $spacing-select_prefix_suffix_icon-marginX: $spacing-tight; // 选择器输入框前后缀图标水平内边距
70
- $spacing-select_prefix_suffix_icon-marginY: 0; // 选择器输入框前后缀图标垂直内边距
70
+ $spacing-select_prefix_suffix_icon-marginY: 0px; // 选择器输入框前后缀图标垂直内边距
71
71
  $spacing-select_create_tips-marginRight: $spacing-extra-tight; // 创建新选项右侧外边距
72
72
  $spacing-select_group-marginTop: $spacing-extra-tight; // 选择器菜单分组标题顶部外边距
73
73
  $spacing-select_group-paddingTop: $spacing-base-tight; // 选择器菜单分组标题顶部内边距
@@ -106,5 +106,5 @@ $font-select_inset_label-fontWeight: 600; // 选择器内嵌标签文本字重
106
106
  $font-select_keyword-fontWeight: 600; // 选择器搜索结果命关键词中文本字重
107
107
 
108
108
  // Other
109
- $opacity-select_selection_text_inactive: .4;
109
+ $opacity-select_selection_text_inactive: 0.4;
110
110
 
@@ -26,7 +26,7 @@ export interface SliderProps {
26
26
  'aria-label'?: string;
27
27
  'aria-labelledby'?: string;
28
28
  'aria-valuetext'?: string;
29
- getAriaValueText?: (value: number) => string;
29
+ getAriaValueText?: (value: number, index?: number) => string;
30
30
  }
31
31
  export interface SliderState {
32
32
  currentValue: number | number[];
@@ -40,6 +40,8 @@ export interface SliderState {
40
40
  clickValue: 0;
41
41
  showBoundary: boolean;
42
42
  isInRenderTree: boolean;
43
+ firstDotFocusVisible: boolean;
44
+ secondDotFocusVisible: boolean;
43
45
  }
44
46
  export interface SliderLengths {
45
47
  sliderX: number;
@@ -53,7 +55,6 @@ export interface ScrollParentVal {
53
55
  }
54
56
  export interface OverallVars {
55
57
  dragging: boolean[];
56
- chooseMovePos: 'min' | 'max';
57
58
  }
58
59
  export interface SliderAdapter extends DefaultAdapter<SliderProps, SliderState> {
59
60
  getSliderLengths: () => SliderLengths;
@@ -189,7 +190,13 @@ export default class SliderFoundation extends BaseFoundation<SliderAdapter> {
189
190
  onHandleEnter: (pos: SliderState['focusPos']) => void;
190
191
  onHandleLeave: () => void;
191
192
  onHandleUp: (e: any) => boolean;
193
+ _handleValueDecreaseWithKeyBoard: (step: number, handler: 'min' | 'max') => number | any[];
194
+ _handleValueIncreaseWithKeyBoard: (step: number, handler: 'min' | 'max') => any;
195
+ _handleHomeKey: (handler: 'min' | 'max') => any;
196
+ _handleEndKey: (handler: 'min' | 'max') => any;
197
+ handleKeyDown: (event: any, handler: 'min' | 'max') => void;
192
198
  onFocus: (e: any, handler: 'min' | 'max') => void;
199
+ onBlur: (e: any, handler: 'min' | 'max') => void;
193
200
  handleWrapClick: (e: any) => void;
194
201
  /**
195
202
  * Move the slider to the current click position
@@ -14,10 +14,16 @@ var _assign = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-sta
14
14
 
15
15
  var _isArray = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/array/is-array"));
16
16
 
17
+ var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
18
+
17
19
  var _foundation = _interopRequireDefault(require("../base/foundation"));
18
20
 
19
21
  var _touchPolyfill = _interopRequireDefault(require("../utils/touchPolyfill"));
20
22
 
23
+ var _warning = _interopRequireDefault(require("../utils/warning"));
24
+
25
+ var _a11y = require("../utils/a11y");
26
+
21
27
  /* eslint-disable no-param-reassign */
22
28
 
23
29
  /* eslint-disable max-len */
@@ -547,8 +553,7 @@ class SliderFoundation extends _foundation.default {
547
553
  const handleMaxDom = this._adapter.getMaxHandleEl().current;
548
554
 
549
555
  if (e.target === handleMinDom || e.target === handleMaxDom) {
550
- e.preventDefault();
551
- e.stopPropagation();
556
+ (0, _a11y.handlePrevent)(e);
552
557
  const touch = (0, _touchPolyfill.default)(e.touches[0], e);
553
558
  this.onHandleDown(touch, handler);
554
559
  }
@@ -612,18 +617,203 @@ class SliderFoundation extends _foundation.default {
612
617
  this._adapter.setDragging([dragging[0], false]);
613
618
  }
614
619
 
615
- this._adapter.setStateVal('isDrag', false); // this._adapter.setStateVal('chooseMovePos', '');
616
-
620
+ this._adapter.setStateVal('isDrag', false);
617
621
 
618
622
  this._adapter.onHandleLeave();
619
623
 
620
624
  this._adapter.onHandleUpAfter();
621
625
 
622
626
  return true;
627
+ };
628
+
629
+ this._handleValueDecreaseWithKeyBoard = (step, handler) => {
630
+ const {
631
+ min,
632
+ currentValue
633
+ } = this.getStates();
634
+ const {
635
+ range
636
+ } = this.getProps();
637
+
638
+ if (handler === 'min') {
639
+ if (range) {
640
+ let newMinValue = currentValue[0] - step;
641
+ newMinValue = newMinValue < min ? min : newMinValue;
642
+ return [newMinValue, currentValue[1]];
643
+ } else {
644
+ let newMinValue = currentValue - step;
645
+ newMinValue = newMinValue < min ? min : newMinValue;
646
+ return newMinValue;
647
+ }
648
+ } else {
649
+ let newMaxValue = currentValue[1] - step;
650
+ newMaxValue = newMaxValue < currentValue[0] ? currentValue[0] : newMaxValue;
651
+ return [currentValue[0], newMaxValue];
652
+ }
653
+ };
654
+
655
+ this._handleValueIncreaseWithKeyBoard = (step, handler) => {
656
+ const {
657
+ max,
658
+ currentValue
659
+ } = this.getStates();
660
+ const {
661
+ range
662
+ } = this.getProps();
663
+
664
+ if (handler === 'min') {
665
+ if (range) {
666
+ let newMinValue = currentValue[0] + step;
667
+ newMinValue = newMinValue > currentValue[1] ? currentValue[1] : newMinValue;
668
+ return [newMinValue, currentValue[1]];
669
+ } else {
670
+ let newMinValue = currentValue + step;
671
+ newMinValue = newMinValue > max ? max : newMinValue;
672
+ return newMinValue;
673
+ }
674
+ } else {
675
+ let newMaxValue = currentValue[1] + step;
676
+ newMaxValue = newMaxValue > max ? max : newMaxValue;
677
+ return [currentValue[0], newMaxValue];
678
+ }
679
+ };
680
+
681
+ this._handleHomeKey = handler => {
682
+ const {
683
+ min,
684
+ currentValue
685
+ } = this.getStates();
686
+ const {
687
+ range
688
+ } = this.getProps();
689
+
690
+ if (handler === 'min') {
691
+ if (range) {
692
+ return [min, currentValue[1]];
693
+ } else {
694
+ return min;
695
+ }
696
+ } else {
697
+ return [currentValue[0], currentValue[0]];
698
+ }
699
+ };
700
+
701
+ this._handleEndKey = handler => {
702
+ const {
703
+ max,
704
+ currentValue
705
+ } = this.getStates();
706
+ const {
707
+ range
708
+ } = this.getProps();
709
+
710
+ if (handler === 'min') {
711
+ if (range) {
712
+ return [currentValue[1], currentValue[1]];
713
+ } else {
714
+ return max;
715
+ }
716
+ } else {
717
+ return [currentValue[0], max];
718
+ }
719
+ };
720
+
721
+ this.handleKeyDown = (event, handler) => {
722
+ var _context;
723
+
724
+ const {
725
+ min,
726
+ max,
727
+ currentValue
728
+ } = this.getStates();
729
+ const {
730
+ step,
731
+ range
732
+ } = this.getProps();
733
+ let outputValue;
734
+
735
+ switch (event.key) {
736
+ case "ArrowLeft":
737
+ case "ArrowDown":
738
+ outputValue = this._handleValueDecreaseWithKeyBoard(step, handler);
739
+ break;
740
+
741
+ case "ArrowRight":
742
+ case "ArrowUp":
743
+ outputValue = this._handleValueIncreaseWithKeyBoard(step, handler);
744
+ break;
745
+
746
+ case "PageUp":
747
+ outputValue = this._handleValueIncreaseWithKeyBoard(10 * step, handler);
748
+ break;
749
+
750
+ case "PageDown":
751
+ outputValue = this._handleValueDecreaseWithKeyBoard(10 * step, handler);
752
+ break;
753
+
754
+ case "Home":
755
+ outputValue = this._handleHomeKey(handler);
756
+ break;
757
+
758
+ case "End":
759
+ outputValue = this._handleEndKey(handler);
760
+ break;
761
+
762
+ case 'default':
763
+ break;
764
+ }
765
+
766
+ if ((0, _includes.default)(_context = ["ArrowLeft", "ArrowDown", "ArrowRight", "ArrowUp", "PageUp", "PageDown", "Home", "End"]).call(_context, event.key)) {
767
+ let update = true;
768
+
769
+ if ((0, _isArray.default)(currentValue)) {
770
+ update = !(currentValue[0] === outputValue[0] && currentValue[1] === outputValue[1]);
771
+ } else {
772
+ update = currentValue !== outputValue;
773
+ }
774
+
775
+ if (update) {
776
+ this._adapter.updateCurrentValue(outputValue);
777
+
778
+ this._adapter.notifyChange(outputValue);
779
+ }
780
+
781
+ (0, _a11y.handlePrevent)(event);
782
+ }
623
783
  }; // eslint-disable-next-line @typescript-eslint/no-empty-function
624
784
 
625
785
 
626
- this.onFocus = (e, handler) => {};
786
+ this.onFocus = (e, handler) => {
787
+ (0, _a11y.handlePrevent)(e);
788
+ const {
789
+ target
790
+ } = e;
791
+
792
+ try {
793
+ if (target.matches(':focus-visible')) {
794
+ if (handler === 'min') {
795
+ this._adapter.setStateVal('firstDotFocusVisible', true);
796
+ } else {
797
+ this._adapter.setStateVal('secondDotFocusVisible', true);
798
+ }
799
+ }
800
+ } catch (error) {
801
+ (0, _warning.default)(true, 'Warning: [Semi Slider] The current browser does not support the focus-visible');
802
+ }
803
+ };
804
+
805
+ this.onBlur = (e, handler) => {
806
+ const {
807
+ firstDotFocusVisible,
808
+ secondDotFocusVisible
809
+ } = this.getStates();
810
+
811
+ if (handler === 'min') {
812
+ firstDotFocusVisible && this._adapter.setStateVal('firstDotFocusVisible', false);
813
+ } else {
814
+ secondDotFocusVisible && this._adapter.setStateVal('secondDotFocusVisible', false);
815
+ }
816
+ };
627
817
 
628
818
  this.handleWrapClick = e => {
629
819
  const {
@@ -46,6 +46,9 @@
46
46
  cursor: pointer;
47
47
  transition: #fff 0.3s;
48
48
  }
49
+ .semi-slider-handle:focus-visible {
50
+ outline: 2px solid var(--semi-color-primary-light-active);
51
+ }
49
52
  .semi-slider-handle:hover {
50
53
  background-color: var(--semi-color-white);
51
54
  }
@@ -1,5 +1,5 @@
1
1
  //@import '../theme/variables.scss';
2
- @import "./variables.scss";
2
+ @import './variables.scss';
3
3
 
4
4
  $module: #{$prefix}-slider;
5
5
 
@@ -29,7 +29,7 @@ $module: #{$prefix}-slider;
29
29
  font-variant: tabular-nums;
30
30
  line-height: $font-slider_rail-lineHeight;
31
31
  list-style: none;
32
- font-feature-settings: "tnum";
32
+ font-feature-settings: 'tnum';
33
33
  position: absolute;
34
34
  height: $height-slider_rail;
35
35
  cursor: pointer;
@@ -54,7 +54,11 @@ $module: #{$prefix}-slider;
54
54
  border: none;
55
55
  border-radius: 50%;
56
56
  cursor: pointer;
57
- transition: #fff .3s;
57
+ transition: #fff 0.3s;
58
+
59
+ &:focus-visible {
60
+ outline: $width-slider_handle-focus solid $color-slider_handle-focus;
61
+ }
58
62
  }
59
63
 
60
64
  &-handle:hover {
@@ -133,10 +137,8 @@ $module: #{$prefix}-slider;
133
137
  text-align: center;
134
138
  cursor: pointer;
135
139
  transform: translate(-50%, 0) rotate(-180deg);
136
-
137
140
  }
138
141
 
139
-
140
142
  &-boundary {
141
143
  position: relative;
142
144
  font-size: $font-size-small;