@alfalab/core-components-select 17.3.5 → 17.4.1

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 (141) hide show
  1. package/components/arrow/Component.js +1 -1
  2. package/components/arrow/index.css +3 -3
  3. package/components/base-checkmark/Component.js +1 -1
  4. package/components/base-checkmark/index.css +4 -4
  5. package/components/base-option/Component.js +1 -1
  6. package/components/base-option/index.css +14 -14
  7. package/components/base-select/Component.js +4 -4
  8. package/components/base-select/index.css +11 -11
  9. package/components/base-select/mobile.css +12 -12
  10. package/components/checkmark/Component.js +1 -1
  11. package/components/checkmark/index.css +11 -11
  12. package/components/checkmark-mobile/Component.js +1 -1
  13. package/components/checkmark-mobile/index.css +6 -6
  14. package/components/field/Component.js +1 -1
  15. package/components/field/index.css +12 -12
  16. package/components/footer/Component.js +1 -1
  17. package/components/footer/index.css +5 -5
  18. package/components/optgroup/Component.js +1 -1
  19. package/components/optgroup/index.css +6 -6
  20. package/components/option/Component.js +1 -1
  21. package/components/option/index.css +20 -20
  22. package/components/options-list/Component.js +23 -9
  23. package/components/options-list/index.css +16 -12
  24. package/components/search/Component.js +1 -1
  25. package/components/search/index.css +2 -2
  26. package/components/virtual-options-list/Component.js +1 -1
  27. package/components/virtual-options-list/index.css +15 -15
  28. package/cssm/components/base-option/index.module.css +1 -1
  29. package/cssm/components/base-select/Component.js +2 -2
  30. package/cssm/components/checkmark/index.module.css +1 -1
  31. package/cssm/components/option/index.module.css +1 -1
  32. package/cssm/components/options-list/Component.js +22 -8
  33. package/cssm/components/options-list/index.module.css +8 -4
  34. package/cssm/typings.d.ts +5 -1
  35. package/esm/components/arrow/Component.js +1 -1
  36. package/esm/components/arrow/index.css +3 -3
  37. package/esm/components/base-checkmark/Component.js +1 -1
  38. package/esm/components/base-checkmark/index.css +4 -4
  39. package/esm/components/base-option/Component.js +1 -1
  40. package/esm/components/base-option/index.css +14 -14
  41. package/esm/components/base-select/Component.js +4 -4
  42. package/esm/components/base-select/index.css +11 -11
  43. package/esm/components/base-select/mobile.css +12 -12
  44. package/esm/components/checkmark/Component.js +1 -1
  45. package/esm/components/checkmark/index.css +11 -11
  46. package/esm/components/checkmark-mobile/Component.js +1 -1
  47. package/esm/components/checkmark-mobile/index.css +6 -6
  48. package/esm/components/field/Component.js +1 -1
  49. package/esm/components/field/index.css +12 -12
  50. package/esm/components/footer/Component.js +1 -1
  51. package/esm/components/footer/index.css +5 -5
  52. package/esm/components/optgroup/Component.js +1 -1
  53. package/esm/components/optgroup/index.css +6 -6
  54. package/esm/components/option/Component.js +1 -1
  55. package/esm/components/option/index.css +20 -20
  56. package/esm/components/options-list/Component.js +24 -10
  57. package/esm/components/options-list/index.css +16 -12
  58. package/esm/components/search/Component.js +1 -1
  59. package/esm/components/search/index.css +2 -2
  60. package/esm/components/virtual-options-list/Component.js +1 -1
  61. package/esm/components/virtual-options-list/index.css +15 -15
  62. package/esm/mobile/Component.mobile.js +1 -1
  63. package/esm/presets/index.js +1 -1
  64. package/esm/presets/useSelectWithApply/hook.js +1 -1
  65. package/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  66. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  67. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  68. package/esm/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  69. package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  70. package/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  71. package/esm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  72. package/esm/presets/useSelectWithLoading/hook.js +1 -1
  73. package/esm/presets/useSelectWithLoading/index.css +2 -2
  74. package/esm/shared/index.js +1 -1
  75. package/esm/typings.d.ts +5 -1
  76. package/mobile/Component.mobile.js +1 -1
  77. package/modern/components/arrow/Component.js +1 -1
  78. package/modern/components/arrow/index.css +3 -3
  79. package/modern/components/base-checkmark/Component.js +1 -1
  80. package/modern/components/base-checkmark/index.css +4 -4
  81. package/modern/components/base-option/Component.js +1 -1
  82. package/modern/components/base-option/index.css +14 -14
  83. package/modern/components/base-select/Component.js +4 -4
  84. package/modern/components/base-select/index.css +11 -11
  85. package/modern/components/base-select/mobile.css +12 -12
  86. package/modern/components/checkmark/Component.js +1 -1
  87. package/modern/components/checkmark/index.css +11 -11
  88. package/modern/components/checkmark-mobile/Component.js +1 -1
  89. package/modern/components/checkmark-mobile/index.css +6 -6
  90. package/modern/components/field/Component.js +1 -1
  91. package/modern/components/field/index.css +12 -12
  92. package/modern/components/footer/Component.js +1 -1
  93. package/modern/components/footer/index.css +5 -5
  94. package/modern/components/optgroup/Component.js +1 -1
  95. package/modern/components/optgroup/index.css +6 -6
  96. package/modern/components/option/Component.js +1 -1
  97. package/modern/components/option/index.css +20 -20
  98. package/modern/components/options-list/Component.js +20 -6
  99. package/modern/components/options-list/index.css +16 -12
  100. package/modern/components/search/Component.js +1 -1
  101. package/modern/components/search/index.css +2 -2
  102. package/modern/components/virtual-options-list/Component.js +1 -1
  103. package/modern/components/virtual-options-list/index.css +15 -15
  104. package/modern/mobile/Component.mobile.js +1 -1
  105. package/modern/presets/index.js +1 -1
  106. package/modern/presets/useSelectWithApply/hook.js +1 -1
  107. package/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  108. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  109. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  110. package/modern/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  111. package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  112. package/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  113. package/modern/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  114. package/modern/presets/useSelectWithLoading/hook.js +1 -1
  115. package/modern/presets/useSelectWithLoading/index.css +2 -2
  116. package/modern/shared/index.js +1 -1
  117. package/modern/typings.d.ts +5 -1
  118. package/package.json +5 -5
  119. package/presets/index.js +1 -1
  120. package/presets/useSelectWithApply/hook.js +1 -1
  121. package/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  122. package/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  123. package/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  124. package/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  125. package/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  126. package/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  127. package/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  128. package/presets/useSelectWithLoading/hook.js +1 -1
  129. package/presets/useSelectWithLoading/index.css +2 -2
  130. package/shared/index.js +1 -1
  131. package/src/components/base-select/Component.tsx +2 -0
  132. package/src/components/options-list/Component.tsx +30 -5
  133. package/src/components/options-list/index.module.css +8 -2
  134. package/src/typings.ts +16 -1
  135. package/typings.d.ts +5 -1
  136. /package/esm/{hook-087f84d1.d.ts → hook-dd86695a.d.ts} +0 -0
  137. /package/esm/{hook-087f84d1.js → hook-dd86695a.js} +0 -0
  138. /package/{hook-213f2662.d.ts → hook-ddf6a468.d.ts} +0 -0
  139. /package/{hook-213f2662.js → hook-ddf6a468.js} +0 -0
  140. /package/modern/{hook-eeb8a533.d.ts → hook-ccdc50fc.d.ts} +0 -0
  141. /package/modern/{hook-eeb8a533.js → hook-ccdc50fc.js} +0 -0
@@ -1,4 +1,4 @@
1
- /* hash: 1w96i */
1
+ /* hash: xjttz */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-neutral-300: #e7e8eb;
@@ -29,28 +29,32 @@
29
29
  /* checkmark */
30
30
 
31
31
  /* optgroup */
32
- } .select__optionsList_1y5bv {
32
+ } .select__optionsList_1odff {
33
33
  width: 100%;
34
34
  outline: none;
35
35
  box-sizing: border-box;
36
36
  position: relative;
37
- } .select__optionsListHeader_1y5bv {
37
+ } .select__optionsListHeader_1odff {
38
38
  box-sizing: border-box;
39
- border-bottom: 1px solid var(--color-light-neutral-300);
40
- } .select__optionsListFooter_1y5bv {
39
+ border-bottom: 1px solid transparent;
40
+ transition: border-color 0.2s ease
41
+ } .select__optionsListHeader_1odff.select__headerHighlighted_1odff {
42
+ border-bottom-color: var(--color-light-neutral-300);
43
+ } .select__optionsListFooter_1odff {
41
44
  position: sticky;
42
45
  bottom: 0;
43
46
  box-sizing: border-box;
44
- border-top: 1px solid transparent
45
- } .select__optionsListFooter_1y5bv.select__withBorder_1y5bv {
46
- border-top: 1px solid var(--color-light-neutral-300);
47
- } .select__scrollable_1y5bv {
47
+ border-top: 1px solid transparent;
48
+ transition: border-color 0.2s ease
49
+ } .select__optionsListFooter_1odff.select__withBorder_1odff {
50
+ border-top-color: var(--color-light-neutral-300);
51
+ } .select__scrollable_1odff {
48
52
  overflow: auto;
49
53
  width: 100%;
50
- } .select__emptyPlaceholder_1y5bv {
54
+ } .select__emptyPlaceholder_1odff {
51
55
  padding: var(--gap-m) var(--gap-s);
52
56
  color: var(--select-options-list-empty-placeholder-color);
53
- } .select__size-64_1y5bv .select__emptyPlaceholder_1y5bv,
54
- .select__size-72_1y5bv .select__emptyPlaceholder_1y5bv {
57
+ } .select__size-64_1odff .select__emptyPlaceholder_1odff,
58
+ .select__size-72_1odff .select__emptyPlaceholder_1odff {
55
59
  padding: var(--gap-xl) var(--gap-m);
56
60
  }
@@ -3,7 +3,7 @@ import cn from 'classnames';
3
3
  import { Input } from '@alfalab/core-components-input/modern';
4
4
  import { MagnifierMIcon } from '@alfalab/icons-glyph/MagnifierMIcon';
5
5
 
6
- const styles = {"component":"select__component_d1dz5"};
6
+ const styles = {"component":"select__component_17bsx"};
7
7
  require('./index.css')
8
8
 
9
9
  const Search = forwardRef(({ clear = true, placeholder = 'Поиск', className, leftAddons = React.createElement(MagnifierMIcon, { color: '#86868A' }), ...restProps }, ref) => (React.createElement(Input, { ref: ref, className: cn(styles.component, className), placeholder: placeholder, leftAddons: leftAddons, clear: clear, ...restProps })));
@@ -1,4 +1,4 @@
1
- /* hash: 1g5rv */
1
+ /* hash: 1k0kl */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
4
4
  } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -23,6 +23,6 @@
23
23
  /* checkmark */
24
24
 
25
25
  /* optgroup */
26
- } .select__component_d1dz5.select__component_d1dz5 {
26
+ } .select__component_17bsx.select__component_17bsx {
27
27
  width: auto;
28
28
  }
@@ -9,7 +9,7 @@ import { SIZE_TO_CLASSNAME_MAP, DEFAULT_VISIBLE_OPTIONS } from '../../consts.js'
9
9
  import { usePrevious, lastIndexOf, useVisibleOptions, isGroup } from '../../utils.js';
10
10
  import { Optgroup } from '../optgroup/Component.js';
11
11
 
12
- const styles = {"virtualOptionsList":"select__virtualOptionsList_1tlek","virtualOptionsListHeader":"select__virtualOptionsListHeader_1tlek","virtualOptionsListFooter":"select__virtualOptionsListFooter_1tlek","withBorder":"select__withBorder_1tlek","scrollable":"select__scrollable_1tlek","inner":"select__inner_1tlek","virtualRow":"select__virtualRow_1tlek","highlighted":"select__highlighted_1tlek","emptyPlaceholder":"select__emptyPlaceholder_1tlek","size-64":"select__size-64_1tlek","size-72":"select__size-72_1tlek"};
12
+ const styles = {"virtualOptionsList":"select__virtualOptionsList_oupgh","virtualOptionsListHeader":"select__virtualOptionsListHeader_oupgh","virtualOptionsListFooter":"select__virtualOptionsListFooter_oupgh","withBorder":"select__withBorder_oupgh","scrollable":"select__scrollable_oupgh","inner":"select__inner_oupgh","virtualRow":"select__virtualRow_oupgh","highlighted":"select__highlighted_oupgh","emptyPlaceholder":"select__emptyPlaceholder_oupgh","size-64":"select__size-64_oupgh","size-72":"select__size-72_oupgh"};
13
13
  require('./index.css')
14
14
 
15
15
  const VirtualOptionsList = forwardRef(({ size = 48, flatOptions = [], highlightedIndex = -1, optionGroupClassName, className, getOptionProps, Option, open, options = [], Optgroup: Optgroup$1 = Optgroup, dataTestId, emptyPlaceholder, visibleOptions = DEFAULT_VISIBLE_OPTIONS, header, footer, showFooter = true, optionsListWidth, onScroll, nativeScrollbar: nativeScrollbarProp, setHighlightedIndex, }, ref) => {
@@ -1,4 +1,4 @@
1
- /* hash: 1tbrb */
1
+ /* hash: 1tud2 */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-border-primary: #d5d6dc;
@@ -35,34 +35,34 @@
35
35
  /* checkmark */
36
36
 
37
37
  /* optgroup */
38
- } .select__virtualOptionsList_1tlek {
38
+ } .select__virtualOptionsList_oupgh {
39
39
  width: 100%;
40
40
  outline: none;
41
41
  box-sizing: border-box;
42
42
  position: sticky;
43
- } .select__virtualOptionsListHeader_1tlek {
43
+ } .select__virtualOptionsListHeader_oupgh {
44
44
  box-sizing: border-box;
45
45
  border-bottom: 1px solid var(--color-light-neutral-300);
46
- } .select__virtualOptionsListFooter_1tlek {
46
+ } .select__virtualOptionsListFooter_oupgh {
47
47
  position: sticky;
48
48
  bottom: 0;
49
49
  box-sizing: border-box;
50
50
  border-top: 1px solid transparent
51
- } .select__virtualOptionsListFooter_1tlek.select__withBorder_1tlek {
51
+ } .select__virtualOptionsListFooter_oupgh.select__withBorder_oupgh {
52
52
  border-top: 1px solid var(--color-light-neutral-300);
53
- } .select__scrollable_1tlek {
53
+ } .select__scrollable_oupgh {
54
54
  position: relative;
55
55
  overflow: auto;
56
56
  width: 100%;
57
- } .select__inner_1tlek {
57
+ } .select__inner_oupgh {
58
58
  position: relative;
59
59
  width: 100%;
60
- } .select__virtualRow_1tlek {
60
+ } .select__virtualRow_oupgh {
61
61
  position: absolute;
62
62
  top: 0;
63
63
  left: 0;
64
64
  width: 100%
65
- } .select__virtualRow_1tlek:before {
65
+ } .select__virtualRow_oupgh:before {
66
66
  content: '';
67
67
  position: absolute;
68
68
  z-index: 1;
@@ -72,15 +72,15 @@
72
72
  height: 1px;
73
73
  background: var(--select-option-divider-background);
74
74
  display: var(--select-option-divider-display);
75
- } .select__virtualRow_1tlek:first-child:before {
75
+ } .select__virtualRow_oupgh:first-child:before {
76
76
  display: none;
77
- } .select__highlighted_1tlek:before,
78
- .select__highlighted_1tlek + .select__virtualRow_1tlek:before {
77
+ } .select__highlighted_oupgh:before,
78
+ .select__highlighted_oupgh + .select__virtualRow_oupgh:before {
79
79
  display: none;
80
- } .select__emptyPlaceholder_1tlek {
80
+ } .select__emptyPlaceholder_oupgh {
81
81
  padding: var(--gap-m) var(--gap-s);
82
82
  color: var(--select-options-list-empty-placeholder-color);
83
- } .select__size-64_1tlek .select__emptyPlaceholder_1tlek,
84
- .select__size-72_1tlek .select__emptyPlaceholder_1tlek {
83
+ } .select__size-64_oupgh .select__emptyPlaceholder_oupgh,
84
+ .select__size-72_oupgh .select__emptyPlaceholder_oupgh {
85
85
  padding: var(--gap-xl) var(--gap-m);
86
86
  }
@@ -11,7 +11,7 @@ import { Option } from '../components/option/Component.js';
11
11
  import { OptionsList } from '../components/options-list/Component.js';
12
12
  import { Search } from '../components/search/Component.js';
13
13
  import { VirtualOptionsList } from '../components/virtual-options-list/Component.js';
14
- import { u as useSelectWithApply } from '../hook-eeb8a533.js';
14
+ import { u as useSelectWithApply } from '../hook-ccdc50fc.js';
15
15
  import { Header } from '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
16
16
 
17
17
  const VIRTUAL_OPTIONS_LIST_THRESHOLD = 30;
@@ -1,3 +1,3 @@
1
1
  export { useSelectWithLoading } from './useSelectWithLoading/hook.js';
2
2
  export { useLazyLoading } from './useLazyLoading/hook.js';
3
- export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-eeb8a533.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-ccdc50fc.js';
@@ -1,3 +1,3 @@
1
1
  import 'react';
2
2
  import '../../utils.js';
3
- export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-eeb8a533.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-ccdc50fc.js';
@@ -1,6 +1,6 @@
1
1
  import 'react';
2
2
  import '../../../components/options-list/Component.js';
3
3
  import '../../../consts.js';
4
- export { O as OptionsListWithApply } from '../../../hook-eeb8a533.js';
4
+ export { O as OptionsListWithApply } from '../../../hook-ccdc50fc.js';
5
5
  import './footer/Component.js';
6
6
  import './header/Component.js';
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { ButtonDesktop } from '@alfalab/core-components-button/modern/desktop';
3
3
  import { getDataTestId } from '@alfalab/core-components-shared/modern';
4
4
 
5
- const styles = {"footer":"select__footer_np0gi"};
5
+ const styles = {"footer":"select__footer_1hzfe"};
6
6
  require('./index.css')
7
7
 
8
8
  const Footer = ({ handleApply, handleClear, showClear, selectedDraft = [], dataTestId, }) => (React.createElement("div", {
@@ -1,4 +1,4 @@
1
- /* hash: nfd7n */
1
+ /* hash: nxyz7 */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-bg-primary: #fff; /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -17,10 +17,10 @@
17
17
  --gap-s: 12px;
18
18
  } :root {
19
19
  } :root {
20
- } .select__footer_np0gi {
20
+ } .select__footer_1hzfe {
21
21
  background-color: var(--color-light-bg-primary);
22
22
  padding: var(--gap-s);
23
23
  outline: none
24
- } .select__footer_np0gi > * + * {
24
+ } .select__footer_1hzfe > * + * {
25
25
  margin-left: var(--gap-xs);
26
26
  }
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import cn from 'classnames';
3
3
  import { Checkbox } from '@alfalab/core-components-checkbox/modern';
4
4
 
5
- const styles = {"desktop":"select__desktop_1cwxh","mobile":"select__mobile_1cwxh"};
5
+ const styles = {"desktop":"select__desktop_imijo","mobile":"select__mobile_imijo"};
6
6
  require('./index.css')
7
7
 
8
8
  const Header = ({ onChange, checked, indeterminate, mobile }) => (React.createElement("div", { className: cn({ [styles.desktop]: !mobile, [styles.mobile]: mobile }) },
@@ -1,4 +1,4 @@
1
- /* hash: 1dt21 */
1
+ /* hash: rgubq */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
4
4
  } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -16,8 +16,8 @@
16
16
  --gap-s: 12px;
17
17
  } :root {
18
18
  } :root {
19
- } .select__desktop_1cwxh {
19
+ } .select__desktop_imijo {
20
20
  padding: var(--gap-s);
21
- } .select__mobile_1cwxh {
21
+ } .select__mobile_imijo {
22
22
  padding: var(--gap-s) var(--gap-xs);
23
23
  }
@@ -1 +1 @@
1
- export * from "../../../hook-eeb8a533";
1
+ export * from "../../../hook-ccdc50fc";
@@ -1 +1 @@
1
- export { O as OptionsListWithApply } from '../../../hook-eeb8a533.js';
1
+ export { O as OptionsListWithApply } from '../../../hook-ccdc50fc.js';
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { Skeleton } from '@alfalab/core-components-skeleton/modern';
3
3
  import { Option } from '../../components/option/Component.js';
4
4
 
5
- const styles = {"skeleton":"select__skeleton_mk1pz"};
5
+ const styles = {"skeleton":"select__skeleton_aegh9"};
6
6
  require('./index.css')
7
7
 
8
8
  function useSelectWithLoading({ loading = false, visibleOptions = 6, Option: Option$1 = Option, }) {
@@ -1,5 +1,5 @@
1
- /* hash: 1yxai */
2
- .select__skeleton_mk1pz {
1
+ /* hash: 1hg75 */
2
+ .select__skeleton_aegh9 {
3
3
  position: absolute;
4
4
  top: 50%;
5
5
  transform: translateY(-50%);
@@ -1,6 +1,6 @@
1
1
  export { useSelectWithLoading } from '../presets/useSelectWithLoading/hook.js';
2
2
  export { useLazyLoading } from '../presets/useLazyLoading/hook.js';
3
- export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-eeb8a533.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-ccdc50fc.js';
4
4
  export { defaultAccessor, defaultFilterFn, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions } from '../utils.js';
5
5
  export { Option } from '../components/option/Component.js';
6
6
  export { BaseOption } from '../components/base-option/Component.js';
@@ -76,7 +76,7 @@ type BaseSelectProps = {
76
76
  /**
77
77
  * Дополнительный класс для поповера
78
78
  */
79
- popperClassName?: string;
79
+ popperClassName?: PopoverProps['className'];
80
80
  /**
81
81
  * Список вариантов выбора
82
82
  */
@@ -273,6 +273,10 @@ type BaseSelectProps = {
273
273
  * Показывать OptionsList, если он пустой
274
274
  */
275
275
  showEmptyOptionsList?: boolean;
276
+ /**
277
+ * Дополнительные пропсы для Popover
278
+ */
279
+ popoverProps?: Omit<PopoverProps, 'update' | 'zIndex' | 'position' | 'className' | 'open' | 'anchorElement' | 'preventFlip' | 'dataTestId'>;
276
280
  };
277
281
  type FieldProps = {
278
282
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-select",
3
- "version": "17.3.5",
3
+ "version": "17.4.1",
4
4
  "description": "Select component",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -17,12 +17,12 @@
17
17
  "dependencies": {
18
18
  "@alfalab/core-components-badge": "^5.5.1",
19
19
  "@alfalab/core-components-base-modal": "^5.7.2",
20
- "@alfalab/core-components-bottom-sheet": "^6.14.3",
21
- "@alfalab/core-components-button": "^11.4.0",
20
+ "@alfalab/core-components-bottom-sheet": "^6.14.5",
21
+ "@alfalab/core-components-button": "^11.4.2",
22
22
  "@alfalab/core-components-checkbox": "^4.3.0",
23
23
  "@alfalab/core-components-form-control": "^12.2.1",
24
- "@alfalab/core-components-input": "^14.3.2",
25
- "@alfalab/core-components-modal": "^9.2.1",
24
+ "@alfalab/core-components-input": "^14.4.0",
25
+ "@alfalab/core-components-modal": "^9.2.3",
26
26
  "@alfalab/core-components-mq": "^4.2.0",
27
27
  "@alfalab/core-components-popover": "^6.2.1",
28
28
  "@alfalab/core-components-scrollbar": "^3.0.0",
package/presets/index.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var presets_useSelectWithLoading_hook = require('./useSelectWithLoading/hook.js');
6
6
  var presets_useLazyLoading_hook = require('./useLazyLoading/hook.js');
7
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-213f2662.js');
7
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-ddf6a468.js');
8
8
 
9
9
 
10
10
 
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  require('tslib');
6
6
  require('react');
7
7
  require('../../utils.js');
8
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../hook-213f2662.js');
8
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../hook-ddf6a468.js');
9
9
 
10
10
 
11
11
 
@@ -6,7 +6,7 @@ require('tslib');
6
6
  require('react');
7
7
  require('../../../components/options-list/Component.js');
8
8
  require('../../../consts.js');
9
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-213f2662.js');
9
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-ddf6a468.js');
10
10
  require('./footer/Component.js');
11
11
  require('./header/Component.js');
12
12
 
@@ -10,7 +10,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
10
10
 
11
11
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
12
12
 
13
- var styles = {"footer":"select__footer_np0gi"};
13
+ var styles = {"footer":"select__footer_1hzfe"};
14
14
  require('./index.css')
15
15
 
16
16
  var Footer = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: nfd7n */
1
+ /* hash: nxyz7 */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-bg-primary: #fff; /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -17,10 +17,10 @@
17
17
  --gap-s: 12px;
18
18
  } :root {
19
19
  } :root {
20
- } .select__footer_np0gi {
20
+ } .select__footer_1hzfe {
21
21
  background-color: var(--color-light-bg-primary);
22
22
  padding: var(--gap-s);
23
23
  outline: none
24
- } .select__footer_np0gi > * + * {
24
+ } .select__footer_1hzfe > * + * {
25
25
  margin-left: var(--gap-xs);
26
26
  }
@@ -11,7 +11,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
11
11
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
12
12
  var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
13
13
 
14
- var styles = {"desktop":"select__desktop_1cwxh","mobile":"select__mobile_1cwxh"};
14
+ var styles = {"desktop":"select__desktop_imijo","mobile":"select__mobile_imijo"};
15
15
  require('./index.css')
16
16
 
17
17
  var Header = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: 1dt21 */
1
+ /* hash: rgubq */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
4
4
  } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -16,8 +16,8 @@
16
16
  --gap-s: 12px;
17
17
  } :root {
18
18
  } :root {
19
- } .select__desktop_1cwxh {
19
+ } .select__desktop_imijo {
20
20
  padding: var(--gap-s);
21
- } .select__mobile_1cwxh {
21
+ } .select__mobile_imijo {
22
22
  padding: var(--gap-s) var(--gap-xs);
23
23
  }
@@ -1 +1 @@
1
- export * from "../../../hook-213f2662";
1
+ export * from "../../../hook-ddf6a468";
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-213f2662.js');
5
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-ddf6a468.js');
6
6
 
7
7
 
8
8
 
@@ -11,7 +11,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
11
11
 
12
12
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
13
13
 
14
- var styles = {"skeleton":"select__skeleton_mk1pz"};
14
+ var styles = {"skeleton":"select__skeleton_aegh9"};
15
15
  require('./index.css')
16
16
 
17
17
  function useSelectWithLoading(_a) {
@@ -1,5 +1,5 @@
1
- /* hash: 1yxai */
2
- .select__skeleton_mk1pz {
1
+ /* hash: 1hg75 */
2
+ .select__skeleton_aegh9 {
3
3
  position: absolute;
4
4
  top: 50%;
5
5
  transform: translateY(-50%);
package/shared/index.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var presets_useSelectWithLoading_hook = require('../presets/useSelectWithLoading/hook.js');
6
6
  var presets_useLazyLoading_hook = require('../presets/useLazyLoading/hook.js');
7
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-213f2662.js');
7
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-ddf6a468.js');
8
8
  var utils = require('../utils.js');
9
9
  var components_option_Component = require('../components/option/Component.js');
10
10
  var components_baseOption_Component = require('../components/base-option/Component.js');
@@ -135,6 +135,7 @@ export const BaseSelect = forwardRef(
135
135
  footer,
136
136
  swipeable,
137
137
  modalProps,
138
+ popoverProps,
138
139
  modalFooterProps,
139
140
  modalHeaderProps,
140
141
  bottomSheetProps,
@@ -642,6 +643,7 @@ export const BaseSelect = forwardRef(
642
643
  if (!nativeSelect && Popover) {
643
644
  return (
644
645
  <Popover
646
+ {...popoverProps}
645
647
  open={open}
646
648
  withTransition={false}
647
649
  anchorElement={fieldRef.current as HTMLElement}
@@ -1,4 +1,4 @@
1
- import React, { forwardRef, useRef } from 'react';
1
+ import React, { forwardRef, useCallback, useRef, useState } from 'react';
2
2
  import mergeRefs from 'react-merge-refs';
3
3
  import cn from 'classnames';
4
4
 
@@ -46,6 +46,9 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
46
46
  },
47
47
  ref,
48
48
  ) => {
49
+ const [scrollTop, setScrollTop] = useState(true);
50
+ const [scrollBottom, setScrollBottom] = useState(false);
51
+
49
52
  const query = '(max-width: 1023px)';
50
53
  let [nativeScrollbar] = useMatchMedia(query, () =>
51
54
  isClient() ? window.matchMedia(query).matches : true,
@@ -53,6 +56,21 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
53
56
 
54
57
  nativeScrollbar = Boolean(nativeScrollbarProp ?? nativeScrollbar);
55
58
 
59
+ const handleScroll = useCallback(
60
+ (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
61
+ const scrolledToHeader = event.currentTarget.scrollTop <= 0;
62
+ const scrolledToFooter =
63
+ event.currentTarget.scrollHeight - event.currentTarget.offsetHeight <=
64
+ event.currentTarget.scrollTop;
65
+
66
+ setScrollTop(scrolledToHeader);
67
+ setScrollBottom(scrolledToFooter);
68
+
69
+ onScroll?.(event);
70
+ },
71
+ [onScroll],
72
+ );
73
+
56
74
  const renderOption = (option: OptionShape, index: number) => (
57
75
  <Option key={option.key} {...getOptionProps(option, index)} />
58
76
  );
@@ -97,7 +115,7 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
97
115
 
98
116
  const renderWithCustomScrollbar = () => {
99
117
  const scrollableNodeProps = {
100
- onScroll,
118
+ onScroll: handleScroll,
101
119
  'data-test-id': dataTestId,
102
120
  ref: ref as React.RefObject<HTMLDivElement>,
103
121
  };
@@ -119,7 +137,7 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
119
137
  <div
120
138
  className={cn(styles.scrollable, scrollbarClassName)}
121
139
  ref={mergeRefs([listRef, ref])}
122
- onScroll={onScroll}
140
+ onScroll={handleScroll}
123
141
  >
124
142
  {renderListItems()}
125
143
  </div>
@@ -133,7 +151,12 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
133
151
  className={cn(styles.optionsList, styles[SIZE_TO_CLASSNAME_MAP[size]], className)}
134
152
  >
135
153
  {header && (
136
- <div className={styles.optionsListHeader} onMouseEnter={resetHighlightedIndex}>
154
+ <div
155
+ className={cn(styles.optionsListHeader, {
156
+ [styles.headerHighlighted]: !scrollTop,
157
+ })}
158
+ onMouseEnter={resetHighlightedIndex}
159
+ >
137
160
  {header}
138
161
  </div>
139
162
  )}
@@ -145,7 +168,9 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
145
168
  onMouseEnter={resetHighlightedIndex}
146
169
  className={cn(styles.optionsListFooter, {
147
170
  [styles.withBorder]:
148
- visibleOptions && flatOptions.length > visibleOptions,
171
+ visibleOptions &&
172
+ flatOptions.length > visibleOptions &&
173
+ !scrollBottom,
149
174
  })}
150
175
  >
151
176
  {footer}
@@ -10,7 +10,12 @@
10
10
 
11
11
  .optionsListHeader {
12
12
  box-sizing: border-box;
13
- border-bottom: 1px solid var(--color-light-neutral-300);
13
+ border-bottom: 1px solid transparent;
14
+ transition: border-color 0.2s ease;
15
+
16
+ &.headerHighlighted {
17
+ border-bottom-color: var(--color-light-neutral-300);
18
+ }
14
19
  }
15
20
 
16
21
  .optionsListFooter {
@@ -18,9 +23,10 @@
18
23
  bottom: 0;
19
24
  box-sizing: border-box;
20
25
  border-top: 1px solid transparent;
26
+ transition: border-color 0.2s ease;
21
27
 
22
28
  &.withBorder {
23
- border-top: 1px solid var(--color-light-neutral-300);
29
+ border-top-color: var(--color-light-neutral-300);
24
30
  }
25
31
  }
26
32