@alfalab/core-components-select 18.2.5 → 18.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (206) hide show
  1. package/components/arrow/index.css +4 -4
  2. package/components/arrow/index.module.css.js +1 -1
  3. package/components/base-checkmark/index.css +5 -5
  4. package/components/base-checkmark/index.module.css.js +1 -1
  5. package/components/base-option/index.css +16 -16
  6. package/components/base-option/index.module.css.js +1 -1
  7. package/components/base-select/Component.d.ts +1 -1
  8. package/components/base-select/Component.js +2 -2
  9. package/components/base-select/Component.js.map +1 -1
  10. package/components/base-select/index.css +11 -11
  11. package/components/base-select/index.module.css.js +1 -1
  12. package/components/base-select/mobile.css +11 -11
  13. package/components/base-select/mobile.module.css.js +1 -1
  14. package/components/checkmark/index.css +9 -9
  15. package/components/checkmark/index.module.css.js +1 -1
  16. package/components/checkmark-mobile/index.css +5 -5
  17. package/components/checkmark-mobile/index.module.css.js +1 -1
  18. package/components/clear-button/index.css +4 -4
  19. package/components/clear-button/index.module.css.js +1 -1
  20. package/components/field/index.css +13 -13
  21. package/components/field/index.module.css.js +1 -1
  22. package/components/footer/index.css +4 -4
  23. package/components/footer/index.module.css.js +1 -1
  24. package/components/optgroup/index.css +4 -4
  25. package/components/optgroup/index.module.css.js +1 -1
  26. package/components/option/desktop/index.css +19 -19
  27. package/components/option/desktop/index.module.css.js +1 -1
  28. package/components/option/mobile/index.css +16 -16
  29. package/components/option/mobile/index.module.css.js +1 -1
  30. package/components/options-list/Component.d.ts +35 -2
  31. package/components/options-list/Component.js +6 -8
  32. package/components/options-list/Component.js.map +1 -1
  33. package/components/options-list/index.css +9 -9
  34. package/components/options-list/index.module.css.js +1 -1
  35. package/components/search/Component.js +15 -1
  36. package/components/search/Component.js.map +1 -1
  37. package/components/search/index.css +1 -1
  38. package/components/search/index.module.css.js +1 -1
  39. package/components/virtual-options-list/Component.d.ts +35 -2
  40. package/components/virtual-options-list/Component.js +6 -9
  41. package/components/virtual-options-list/Component.js.map +1 -1
  42. package/components/virtual-options-list/index.css +13 -13
  43. package/components/virtual-options-list/index.module.css.js +1 -1
  44. package/cssm/components/base-select/Component.d.ts +1 -1
  45. package/cssm/components/base-select/Component.js +2 -2
  46. package/cssm/components/base-select/Component.js.map +1 -1
  47. package/cssm/components/options-list/Component.d.ts +35 -2
  48. package/cssm/components/options-list/Component.js +8 -10
  49. package/cssm/components/options-list/Component.js.map +1 -1
  50. package/cssm/components/search/Component.js +15 -1
  51. package/cssm/components/search/Component.js.map +1 -1
  52. package/cssm/components/virtual-options-list/Component.d.ts +35 -2
  53. package/cssm/components/virtual-options-list/Component.js +8 -11
  54. package/cssm/components/virtual-options-list/Component.js.map +1 -1
  55. package/cssm/hooks/use-native-scrollbar.d.ts +4 -0
  56. package/cssm/hooks/use-native-scrollbar.js +33 -0
  57. package/cssm/hooks/use-native-scrollbar.js.map +1 -0
  58. package/cssm/presets/useSelectWithApply/hook.d.ts +137 -5
  59. package/cssm/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
  60. package/cssm/typings.d.ts +1 -1
  61. package/esm/components/arrow/index.css +4 -4
  62. package/esm/components/arrow/index.module.css.js +1 -1
  63. package/esm/components/base-checkmark/index.css +5 -5
  64. package/esm/components/base-checkmark/index.module.css.js +1 -1
  65. package/esm/components/base-option/index.css +16 -16
  66. package/esm/components/base-option/index.module.css.js +1 -1
  67. package/esm/components/base-select/Component.d.ts +1 -1
  68. package/esm/components/base-select/Component.js +2 -2
  69. package/esm/components/base-select/Component.js.map +1 -1
  70. package/esm/components/base-select/index.css +11 -11
  71. package/esm/components/base-select/index.module.css.js +1 -1
  72. package/esm/components/base-select/mobile.css +11 -11
  73. package/esm/components/base-select/mobile.module.css.js +1 -1
  74. package/esm/components/checkmark/index.css +9 -9
  75. package/esm/components/checkmark/index.module.css.js +1 -1
  76. package/esm/components/checkmark-mobile/index.css +5 -5
  77. package/esm/components/checkmark-mobile/index.module.css.js +1 -1
  78. package/esm/components/clear-button/index.css +4 -4
  79. package/esm/components/clear-button/index.module.css.js +1 -1
  80. package/esm/components/field/index.css +13 -13
  81. package/esm/components/field/index.module.css.js +1 -1
  82. package/esm/components/footer/index.css +4 -4
  83. package/esm/components/footer/index.module.css.js +1 -1
  84. package/esm/components/optgroup/index.css +4 -4
  85. package/esm/components/optgroup/index.module.css.js +1 -1
  86. package/esm/components/option/desktop/index.css +19 -19
  87. package/esm/components/option/desktop/index.module.css.js +1 -1
  88. package/esm/components/option/mobile/index.css +16 -16
  89. package/esm/components/option/mobile/index.module.css.js +1 -1
  90. package/esm/components/options-list/Component.d.ts +35 -2
  91. package/esm/components/options-list/Component.js +6 -8
  92. package/esm/components/options-list/Component.js.map +1 -1
  93. package/esm/components/options-list/index.css +9 -9
  94. package/esm/components/options-list/index.module.css.js +1 -1
  95. package/esm/components/search/Component.js +15 -1
  96. package/esm/components/search/Component.js.map +1 -1
  97. package/esm/components/search/index.css +1 -1
  98. package/esm/components/search/index.module.css.js +1 -1
  99. package/esm/components/virtual-options-list/Component.d.ts +35 -2
  100. package/esm/components/virtual-options-list/Component.js +6 -9
  101. package/esm/components/virtual-options-list/Component.js.map +1 -1
  102. package/esm/components/virtual-options-list/index.css +13 -13
  103. package/esm/components/virtual-options-list/index.module.css.js +1 -1
  104. package/esm/hooks/use-native-scrollbar.d.ts +4 -0
  105. package/esm/hooks/use-native-scrollbar.js +29 -0
  106. package/esm/hooks/use-native-scrollbar.js.map +1 -0
  107. package/esm/presets/useSelectWithApply/hook.d.ts +137 -5
  108. package/esm/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
  109. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  110. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css.js +1 -1
  111. package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  112. package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.module.css.js +1 -1
  113. package/esm/presets/useSelectWithLoading/index.css +1 -1
  114. package/esm/presets/useSelectWithLoading/index.module.css.js +1 -1
  115. package/esm/typings.d.ts +1 -1
  116. package/hooks/use-native-scrollbar.d.ts +4 -0
  117. package/hooks/use-native-scrollbar.js +33 -0
  118. package/hooks/use-native-scrollbar.js.map +1 -0
  119. package/modern/components/arrow/index.css +4 -4
  120. package/modern/components/arrow/index.module.css.js +1 -1
  121. package/modern/components/base-checkmark/index.css +5 -5
  122. package/modern/components/base-checkmark/index.module.css.js +1 -1
  123. package/modern/components/base-option/index.css +16 -16
  124. package/modern/components/base-option/index.module.css.js +1 -1
  125. package/modern/components/base-select/Component.d.ts +1 -1
  126. package/modern/components/base-select/Component.js +2 -2
  127. package/modern/components/base-select/Component.js.map +1 -1
  128. package/modern/components/base-select/index.css +11 -11
  129. package/modern/components/base-select/index.module.css.js +1 -1
  130. package/modern/components/base-select/mobile.css +11 -11
  131. package/modern/components/base-select/mobile.module.css.js +1 -1
  132. package/modern/components/checkmark/index.css +9 -9
  133. package/modern/components/checkmark/index.module.css.js +1 -1
  134. package/modern/components/checkmark-mobile/index.css +5 -5
  135. package/modern/components/checkmark-mobile/index.module.css.js +1 -1
  136. package/modern/components/clear-button/index.css +4 -4
  137. package/modern/components/clear-button/index.module.css.js +1 -1
  138. package/modern/components/field/index.css +13 -13
  139. package/modern/components/field/index.module.css.js +1 -1
  140. package/modern/components/footer/index.css +4 -4
  141. package/modern/components/footer/index.module.css.js +1 -1
  142. package/modern/components/optgroup/index.css +4 -4
  143. package/modern/components/optgroup/index.module.css.js +1 -1
  144. package/modern/components/option/desktop/index.css +19 -19
  145. package/modern/components/option/desktop/index.module.css.js +1 -1
  146. package/modern/components/option/mobile/index.css +16 -16
  147. package/modern/components/option/mobile/index.module.css.js +1 -1
  148. package/modern/components/options-list/Component.d.ts +35 -2
  149. package/modern/components/options-list/Component.js +6 -6
  150. package/modern/components/options-list/Component.js.map +1 -1
  151. package/modern/components/options-list/index.css +9 -9
  152. package/modern/components/options-list/index.module.css.js +1 -1
  153. package/modern/components/search/Component.js +17 -1
  154. package/modern/components/search/Component.js.map +1 -1
  155. package/modern/components/search/index.css +1 -1
  156. package/modern/components/search/index.module.css.js +1 -1
  157. package/modern/components/virtual-options-list/Component.d.ts +35 -2
  158. package/modern/components/virtual-options-list/Component.js +6 -7
  159. package/modern/components/virtual-options-list/Component.js.map +1 -1
  160. package/modern/components/virtual-options-list/index.css +13 -13
  161. package/modern/components/virtual-options-list/index.module.css.js +1 -1
  162. package/modern/hooks/use-native-scrollbar.d.ts +4 -0
  163. package/modern/hooks/use-native-scrollbar.js +27 -0
  164. package/modern/hooks/use-native-scrollbar.js.map +1 -0
  165. package/modern/presets/useSelectWithApply/hook.d.ts +137 -5
  166. package/modern/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
  167. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  168. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css.js +1 -1
  169. package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  170. package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.module.css.js +1 -1
  171. package/modern/presets/useSelectWithLoading/index.css +1 -1
  172. package/modern/presets/useSelectWithLoading/index.module.css.js +1 -1
  173. package/modern/typings.d.ts +1 -1
  174. package/moderncssm/components/base-select/Component.d.ts +1 -1
  175. package/moderncssm/components/base-select/Component.js +2 -2
  176. package/moderncssm/components/base-select/Component.js.map +1 -1
  177. package/moderncssm/components/options-list/Component.d.ts +35 -2
  178. package/moderncssm/components/options-list/Component.js +6 -6
  179. package/moderncssm/components/options-list/Component.js.map +1 -1
  180. package/moderncssm/components/search/Component.js +17 -1
  181. package/moderncssm/components/search/Component.js.map +1 -1
  182. package/moderncssm/components/virtual-options-list/Component.d.ts +35 -2
  183. package/moderncssm/components/virtual-options-list/Component.js +6 -7
  184. package/moderncssm/components/virtual-options-list/Component.js.map +1 -1
  185. package/moderncssm/hooks/use-native-scrollbar.d.ts +4 -0
  186. package/moderncssm/hooks/use-native-scrollbar.js +27 -0
  187. package/moderncssm/hooks/use-native-scrollbar.js.map +1 -0
  188. package/moderncssm/presets/useSelectWithApply/hook.d.ts +137 -5
  189. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
  190. package/moderncssm/typings.d.ts +1 -1
  191. package/package.json +4 -4
  192. package/presets/useSelectWithApply/hook.d.ts +137 -5
  193. package/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
  194. package/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  195. package/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css.js +1 -1
  196. package/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  197. package/presets/useSelectWithApply/options-list-with-apply/header/index.module.css.js +1 -1
  198. package/presets/useSelectWithLoading/index.css +1 -1
  199. package/presets/useSelectWithLoading/index.module.css.js +1 -1
  200. package/src/components/base-select/Component.tsx +2 -0
  201. package/src/components/options-list/Component.tsx +6 -8
  202. package/src/components/search/Component.tsx +29 -10
  203. package/src/components/virtual-options-list/Component.tsx +6 -9
  204. package/src/hooks/use-native-scrollbar.ts +36 -0
  205. package/src/typings.ts +1 -1
  206. package/typings.d.ts +1 -1
@@ -1,12 +1,78 @@
1
1
  import React from 'react';
2
- import { type OptionShape, type OptionsListProps } from '../../../typings';
2
+ import { type OptionShape } from '../../../typings';
3
3
  import { type FooterProps } from './footer/Component';
4
4
  import { type HeaderProps } from './header/Component';
5
- export declare const OptionsListWithApply: React.ForwardRefExoticComponent<OptionsListProps & {
5
+ export declare const OptionsListWithApply: React.ForwardRefExoticComponent<Pick<import("../../../typings").SelectProps, "client"> & {
6
+ className?: string | undefined;
7
+ optionGroupClassName?: string | undefined;
8
+ scrollbarClassName?: string | undefined;
9
+ footerClassName?: string | undefined;
10
+ size?: "s" | "m" | "l" | "xl" | 40 | 48 | 56 | 64 | 72 | undefined;
11
+ Option: React.ComponentType<import("../../../typings").OptionProps>;
12
+ getOptionProps: (option: OptionShape, index: number) => import("../../../typings").OptionProps;
13
+ groupOptionProps?: import("../../../typings").AnyObject | undefined;
14
+ selectedItems?: OptionShape[] | undefined;
15
+ setSelectedItems: (selected: OptionShape[]) => void;
16
+ toggleMenu: () => void;
17
+ header?: React.ReactNode;
18
+ footer?: React.ReactNode;
19
+ options?: (OptionShape | import("../../../typings").GroupShape)[] | undefined;
20
+ flatOptions?: OptionShape[] | undefined;
21
+ highlightedIndex?: number | undefined;
22
+ open?: boolean | undefined;
23
+ Optgroup?: React.ComponentType<import("../../../typings").OptgroupProps> | undefined;
24
+ emptyPlaceholder?: React.ReactNode;
25
+ visibleOptions?: number | undefined;
26
+ onScroll?: ((event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void) | undefined;
27
+ dataTestId?: string | undefined;
28
+ inputProps?: import("@alfalab/core-components-input").InputProps | undefined;
29
+ showFooter?: boolean | undefined;
30
+ nativeScrollbar?: boolean | undefined;
31
+ optionsListWidth?: "field" | "content" | undefined;
32
+ onApply?: (() => void) | undefined;
33
+ onClear?: (() => void) | undefined;
34
+ setHighlightedIndex?: ((index: number) => void) | undefined;
35
+ search?: string | undefined;
36
+ multiple?: boolean | undefined;
37
+ limitDynamicOptionGroupSize?: boolean | undefined;
38
+ } & {
6
39
  showClear?: boolean | undefined;
7
40
  onClose?: (() => void) | undefined;
8
41
  selectedDraft?: OptionShape[] | undefined;
9
- OptionsList?: React.FC<OptionsListProps & React.RefAttributes<HTMLDivElement>> | undefined;
42
+ OptionsList?: React.FC<Pick<import("../../../typings").SelectProps, "client"> & {
43
+ className?: string | undefined;
44
+ optionGroupClassName?: string | undefined;
45
+ scrollbarClassName?: string | undefined;
46
+ footerClassName?: string | undefined;
47
+ size?: "s" | "m" | "l" | "xl" | 40 | 48 | 56 | 64 | 72 | undefined;
48
+ Option: React.ComponentType<import("../../../typings").OptionProps>;
49
+ getOptionProps: (option: OptionShape, index: number) => import("../../../typings").OptionProps;
50
+ groupOptionProps?: import("../../../typings").AnyObject | undefined;
51
+ selectedItems?: OptionShape[] | undefined;
52
+ setSelectedItems: (selected: OptionShape[]) => void;
53
+ toggleMenu: () => void;
54
+ header?: React.ReactNode;
55
+ footer?: React.ReactNode;
56
+ options?: (OptionShape | import("../../../typings").GroupShape)[] | undefined;
57
+ flatOptions?: OptionShape[] | undefined;
58
+ highlightedIndex?: number | undefined;
59
+ open?: boolean | undefined;
60
+ Optgroup?: React.ComponentType<import("../../../typings").OptgroupProps> | undefined;
61
+ emptyPlaceholder?: React.ReactNode;
62
+ visibleOptions?: number | undefined;
63
+ onScroll?: ((event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void) | undefined;
64
+ dataTestId?: string | undefined;
65
+ inputProps?: import("@alfalab/core-components-input").InputProps | undefined;
66
+ showFooter?: boolean | undefined;
67
+ nativeScrollbar?: boolean | undefined;
68
+ optionsListWidth?: "field" | "content" | undefined;
69
+ onApply?: (() => void) | undefined;
70
+ onClear?: (() => void) | undefined;
71
+ setHighlightedIndex?: ((index: number) => void) | undefined;
72
+ search?: string | undefined;
73
+ multiple?: boolean | undefined;
74
+ limitDynamicOptionGroupSize?: boolean | undefined;
75
+ } & React.RefAttributes<HTMLDivElement>> | undefined;
10
76
  Footer?: React.FC<FooterProps> | undefined;
11
77
  Header?: React.FC<HeaderProps> | undefined;
12
78
  headerProps?: HeaderProps | undefined;
@@ -9,12 +9,12 @@
9
9
  --gap-16: var(--gap-m);
10
10
  } :root {
11
11
  --select-option-list-footer-button-gap: var(--gap-8);
12
- } .select__footer_16d02 {
12
+ } .select__footer_1nczv {
13
13
  background-color: var(--color-light-base-bg-primary);
14
14
  padding: var(--gap-12);
15
15
  outline: none;
16
- } .select__footer_16d02.select__size-72_16d02 {
16
+ } .select__footer_1nczv.select__size-72_1nczv {
17
17
  padding: var(--gap-12) var(--gap-16);
18
- } .select__footer_16d02 > .select__button_16d02 + .select__button_16d02 {
18
+ } .select__footer_1nczv > .select__button_1nczv + .select__button_1nczv {
19
19
  margin-left: var(--select-option-list-footer-button-gap);
20
20
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"footer":"select__footer_16d02","size-72":"select__size-72_16d02","button":"select__button_16d02"};
5
+ var styles = {"footer":"select__footer_1nczv","size-72":"select__size-72_1nczv","button":"select__button_1nczv"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -5,10 +5,10 @@
5
5
  --gap-8: var(--gap-xs);
6
6
  --gap-12: var(--gap-s);
7
7
  --gap-16: var(--gap-m);
8
- } .select__desktop_jh5ie {
8
+ } .select__desktop_1cwzq {
9
9
  padding: var(--gap-12);
10
- } .select__desktop_jh5ie.select__size-72_jh5ie {
10
+ } .select__desktop_1cwzq.select__size-72_1cwzq {
11
11
  padding-left: var(--gap-16);
12
- } .select__mobile_jh5ie {
12
+ } .select__mobile_1cwzq {
13
13
  padding: var(--gap-12) var(--gap-8);
14
14
  }
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"desktop":"select__desktop_jh5ie","size-72":"select__size-72_jh5ie","mobile":"select__mobile_jh5ie"};
5
+ var styles = {"desktop":"select__desktop_1cwzq","size-72":"select__size-72_1cwzq","mobile":"select__mobile_1cwzq"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -1,4 +1,4 @@
1
- .select__skeleton_m6hzz {
1
+ .select__skeleton_1r7w6 {
2
2
  position: absolute;
3
3
  top: 50%;
4
4
  transform: translateY(-50%);
@@ -2,7 +2,7 @@
2
2
 
3
3
  require('./index.css');
4
4
 
5
- var styles = {"skeleton":"select__skeleton_m6hzz"};
5
+ var styles = {"skeleton":"select__skeleton_1r7w6"};
6
6
 
7
7
  module.exports = styles;
8
8
  //# sourceMappingURL=index.module.css.js.map
@@ -590,6 +590,7 @@ export const BaseSelect = forwardRef<unknown, ComponentProps>(
590
590
  size && styles[SIZE_TO_CLASSNAME_MAP[size]],
591
591
  )}
592
592
  ref={mergeRefs([searchRef, searchProps?.componentProps?.ref || null])}
593
+ client={view}
593
594
  />
594
595
  );
595
596
  };
@@ -672,6 +673,7 @@ export const BaseSelect = forwardRef<unknown, ComponentProps>(
672
673
  search={search}
673
674
  multiple={multiple}
674
675
  limitDynamicOptionGroupSize={limitDynamicOptionGroupSize}
676
+ client={view}
675
677
  />
676
678
  {view === 'desktop' && <div className={styles.optionsListBorder} />}
677
679
  </div>
@@ -2,11 +2,10 @@ import React, { forwardRef, useCallback, useRef, useState } from 'react';
2
2
  import mergeRefs from 'react-merge-refs';
3
3
  import cn from 'classnames';
4
4
 
5
- import { useMatchMedia } from '@alfalab/core-components-mq';
6
5
  import { Scrollbar } from '@alfalab/core-components-scrollbar';
7
- import { isClient } from '@alfalab/core-components-shared';
8
6
 
9
7
  import { DEFAULT_VISIBLE_OPTIONS, SIZE_TO_CLASSNAME_MAP } from '../../consts';
8
+ import { useNativeScrollbar } from '../../hooks/use-native-scrollbar';
10
9
  import { type GroupShape, type OptionShape, type OptionsListProps } from '../../typings';
11
10
  import { isGroup, useVisibleOptions } from '../../utils';
12
11
  import { Optgroup as DefaultOptgroup } from '../optgroup';
@@ -50,18 +49,17 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
50
49
  setSelectedItems,
51
50
  multiple,
52
51
  limitDynamicOptionGroupSize = false,
52
+ client,
53
53
  },
54
54
  ref,
55
55
  ) => {
56
56
  const [scrollTop, setScrollTop] = useState(true);
57
57
  const [scrollBottom, setScrollBottom] = useState(false);
58
58
 
59
- const query = '(max-width: 1023px)';
60
- let [nativeScrollbar] = useMatchMedia(query, () =>
61
- isClient() ? window.matchMedia(query).matches : true,
62
- );
63
-
64
- nativeScrollbar = Boolean(nativeScrollbarProp ?? nativeScrollbar);
59
+ const nativeScrollbar = useNativeScrollbar({
60
+ nativeScrollbar: nativeScrollbarProp,
61
+ client,
62
+ });
65
63
 
66
64
  const handleScroll = useCallback(
67
65
  (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => {
@@ -2,12 +2,25 @@ import React, { forwardRef } from 'react';
2
2
  import cn from 'classnames';
3
3
 
4
4
  import { Input } from '@alfalab/core-components-input';
5
+ import { InputDesktop } from '@alfalab/core-components-input/desktop';
6
+ import { InputMobile } from '@alfalab/core-components-input/mobile';
5
7
  import { MagnifierMIcon } from '@alfalab/icons-glyph/MagnifierMIcon';
6
8
 
7
9
  import { type SearchProps } from '../../typings';
8
10
 
9
11
  import styles from './index.module.css';
10
12
 
13
+ const getComponent = (client: SearchProps['client']) => {
14
+ switch (client) {
15
+ case 'desktop':
16
+ return InputDesktop;
17
+ case 'mobile':
18
+ return InputMobile;
19
+ default:
20
+ return Input;
21
+ }
22
+ };
23
+
11
24
  export const Search = forwardRef<HTMLInputElement, SearchProps>(
12
25
  (
13
26
  {
@@ -18,14 +31,20 @@ export const Search = forwardRef<HTMLInputElement, SearchProps>(
18
31
  ...restProps
19
32
  },
20
33
  ref,
21
- ) => (
22
- <Input
23
- ref={ref}
24
- className={cn(styles.component, className)}
25
- placeholder={placeholder}
26
- leftAddons={leftAddons}
27
- clear={clear}
28
- {...restProps}
29
- />
30
- ),
34
+ ) => {
35
+ const { client } = restProps;
36
+
37
+ const Component = getComponent(client);
38
+
39
+ return (
40
+ <Component
41
+ ref={ref}
42
+ className={cn(styles.component, className)}
43
+ placeholder={placeholder}
44
+ leftAddons={leftAddons}
45
+ clear={clear}
46
+ {...restProps}
47
+ />
48
+ );
49
+ },
31
50
  );
@@ -3,11 +3,10 @@ import mergeRefs from 'react-merge-refs';
3
3
  import { useVirtual } from 'react-virtual';
4
4
  import cn from 'classnames';
5
5
 
6
- import { useMatchMedia } from '@alfalab/core-components-mq';
7
6
  import { Scrollbar } from '@alfalab/core-components-scrollbar';
8
- import { isClient } from '@alfalab/core-components-shared';
9
7
 
10
8
  import { DEFAULT_VISIBLE_OPTIONS, SIZE_TO_CLASSNAME_MAP } from '../../consts';
9
+ import { useNativeScrollbar } from '../../hooks/use-native-scrollbar';
11
10
  import { type GroupShape, type OptionShape, type OptionsListProps } from '../../typings';
12
11
  import { isGroup, lastIndexOf, usePrevious, useVirtualVisibleOptions } from '../../utils';
13
12
  import { Optgroup as DefaultOptgroup } from '../optgroup';
@@ -43,6 +42,7 @@ export const VirtualOptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
43
42
  search,
44
43
  multiple,
45
44
  scrollbarClassName,
45
+ client,
46
46
  },
47
47
  ref,
48
48
  ) => {
@@ -52,19 +52,16 @@ export const VirtualOptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
52
52
  const [visibleOptionsInvalidateKey, setVisibleOptionsInvalidateKey] = useState('');
53
53
  const prevHighlightedIndex = usePrevious(highlightedIndex) || -1;
54
54
 
55
- const query = '(max-width: 1023px)';
56
- let [nativeScrollbar] = useMatchMedia(query, () =>
57
- isClient() ? window.matchMedia(query).matches : true,
58
- );
59
-
60
55
  const rowVirtualizer = useVirtual({
61
56
  size: flatOptions.length,
62
57
  parentRef: (ref || parentRef) as React.RefObject<HTMLDivElement>,
63
58
  overscan: 15,
64
59
  });
65
60
 
66
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
67
- nativeScrollbar = Boolean(nativeScrollbarProp ?? nativeScrollbar);
61
+ const nativeScrollbar = useNativeScrollbar({
62
+ nativeScrollbar: nativeScrollbarProp,
63
+ client,
64
+ });
68
65
 
69
66
  // Сколл к выбранному пункту при открытии меню
70
67
  useEffect(() => {
@@ -0,0 +1,36 @@
1
+ import { useMatchMedia } from '@alfalab/core-components-mq';
2
+ import { isClient } from '@alfalab/core-components-shared';
3
+
4
+ import { type OptionsListProps } from '../typings';
5
+
6
+ type Params = Pick<OptionsListProps, 'nativeScrollbar' | 'client'>;
7
+
8
+ export const useNativeScrollbar = (params: Params) => {
9
+ const { nativeScrollbar: scrollbarByProp, client } = params;
10
+
11
+ const query = '(max-width: 1023px)';
12
+
13
+ const [nativeScrollbar] = useMatchMedia(query, () =>
14
+ isClient() ? window.matchMedia(query).matches : true,
15
+ );
16
+
17
+ /**
18
+ * Условия отображения custom/native scrollbar
19
+ * 1. Принудительное управление через пропс
20
+ * 2. Для desktop/mobile выключаем и включаем соответственно
21
+ * 3. Иначе ориентируемся на медиа-запрос
22
+ */
23
+ if (scrollbarByProp) {
24
+ return scrollbarByProp;
25
+ }
26
+
27
+ if (client === 'desktop') {
28
+ return false;
29
+ }
30
+
31
+ if (client === 'mobile') {
32
+ return true;
33
+ }
34
+
35
+ return nativeScrollbar;
36
+ };
package/src/typings.ts CHANGED
@@ -531,7 +531,7 @@ export type ArrowProps = {
531
531
  size?: BaseSelectProps['size'];
532
532
  };
533
533
 
534
- export type OptionsListProps = {
534
+ export type OptionsListProps = Pick<SelectProps, 'client'> & {
535
535
  /**
536
536
  * Дополнительный класс
537
537
  */
package/typings.d.ts CHANGED
@@ -410,7 +410,7 @@ export declare type ArrowProps = {
410
410
  */
411
411
  size?: BaseSelectProps['size'];
412
412
  };
413
- export declare type OptionsListProps = {
413
+ export declare type OptionsListProps = Pick<SelectProps, 'client'> & {
414
414
  /**
415
415
  * Дополнительный класс
416
416
  */