@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.
- package/components/arrow/index.css +4 -4
- package/components/arrow/index.module.css.js +1 -1
- package/components/base-checkmark/index.css +5 -5
- package/components/base-checkmark/index.module.css.js +1 -1
- package/components/base-option/index.css +16 -16
- package/components/base-option/index.module.css.js +1 -1
- package/components/base-select/Component.d.ts +1 -1
- package/components/base-select/Component.js +2 -2
- package/components/base-select/Component.js.map +1 -1
- package/components/base-select/index.css +11 -11
- package/components/base-select/index.module.css.js +1 -1
- package/components/base-select/mobile.css +11 -11
- package/components/base-select/mobile.module.css.js +1 -1
- package/components/checkmark/index.css +9 -9
- package/components/checkmark/index.module.css.js +1 -1
- package/components/checkmark-mobile/index.css +5 -5
- package/components/checkmark-mobile/index.module.css.js +1 -1
- package/components/clear-button/index.css +4 -4
- package/components/clear-button/index.module.css.js +1 -1
- package/components/field/index.css +13 -13
- package/components/field/index.module.css.js +1 -1
- package/components/footer/index.css +4 -4
- package/components/footer/index.module.css.js +1 -1
- package/components/optgroup/index.css +4 -4
- package/components/optgroup/index.module.css.js +1 -1
- package/components/option/desktop/index.css +19 -19
- package/components/option/desktop/index.module.css.js +1 -1
- package/components/option/mobile/index.css +16 -16
- package/components/option/mobile/index.module.css.js +1 -1
- package/components/options-list/Component.d.ts +35 -2
- package/components/options-list/Component.js +6 -8
- package/components/options-list/Component.js.map +1 -1
- package/components/options-list/index.css +9 -9
- package/components/options-list/index.module.css.js +1 -1
- package/components/search/Component.js +15 -1
- package/components/search/Component.js.map +1 -1
- package/components/search/index.css +1 -1
- package/components/search/index.module.css.js +1 -1
- package/components/virtual-options-list/Component.d.ts +35 -2
- package/components/virtual-options-list/Component.js +6 -9
- package/components/virtual-options-list/Component.js.map +1 -1
- package/components/virtual-options-list/index.css +13 -13
- package/components/virtual-options-list/index.module.css.js +1 -1
- package/cssm/components/base-select/Component.d.ts +1 -1
- package/cssm/components/base-select/Component.js +2 -2
- package/cssm/components/base-select/Component.js.map +1 -1
- package/cssm/components/options-list/Component.d.ts +35 -2
- package/cssm/components/options-list/Component.js +8 -10
- package/cssm/components/options-list/Component.js.map +1 -1
- package/cssm/components/search/Component.js +15 -1
- package/cssm/components/search/Component.js.map +1 -1
- package/cssm/components/virtual-options-list/Component.d.ts +35 -2
- package/cssm/components/virtual-options-list/Component.js +8 -11
- package/cssm/components/virtual-options-list/Component.js.map +1 -1
- package/cssm/hooks/use-native-scrollbar.d.ts +4 -0
- package/cssm/hooks/use-native-scrollbar.js +33 -0
- package/cssm/hooks/use-native-scrollbar.js.map +1 -0
- package/cssm/presets/useSelectWithApply/hook.d.ts +137 -5
- package/cssm/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
- package/cssm/typings.d.ts +1 -1
- package/esm/components/arrow/index.css +4 -4
- package/esm/components/arrow/index.module.css.js +1 -1
- package/esm/components/base-checkmark/index.css +5 -5
- package/esm/components/base-checkmark/index.module.css.js +1 -1
- package/esm/components/base-option/index.css +16 -16
- package/esm/components/base-option/index.module.css.js +1 -1
- package/esm/components/base-select/Component.d.ts +1 -1
- package/esm/components/base-select/Component.js +2 -2
- package/esm/components/base-select/Component.js.map +1 -1
- package/esm/components/base-select/index.css +11 -11
- package/esm/components/base-select/index.module.css.js +1 -1
- package/esm/components/base-select/mobile.css +11 -11
- package/esm/components/base-select/mobile.module.css.js +1 -1
- package/esm/components/checkmark/index.css +9 -9
- package/esm/components/checkmark/index.module.css.js +1 -1
- package/esm/components/checkmark-mobile/index.css +5 -5
- package/esm/components/checkmark-mobile/index.module.css.js +1 -1
- package/esm/components/clear-button/index.css +4 -4
- package/esm/components/clear-button/index.module.css.js +1 -1
- package/esm/components/field/index.css +13 -13
- package/esm/components/field/index.module.css.js +1 -1
- package/esm/components/footer/index.css +4 -4
- package/esm/components/footer/index.module.css.js +1 -1
- package/esm/components/optgroup/index.css +4 -4
- package/esm/components/optgroup/index.module.css.js +1 -1
- package/esm/components/option/desktop/index.css +19 -19
- package/esm/components/option/desktop/index.module.css.js +1 -1
- package/esm/components/option/mobile/index.css +16 -16
- package/esm/components/option/mobile/index.module.css.js +1 -1
- package/esm/components/options-list/Component.d.ts +35 -2
- package/esm/components/options-list/Component.js +6 -8
- package/esm/components/options-list/Component.js.map +1 -1
- package/esm/components/options-list/index.css +9 -9
- package/esm/components/options-list/index.module.css.js +1 -1
- package/esm/components/search/Component.js +15 -1
- package/esm/components/search/Component.js.map +1 -1
- package/esm/components/search/index.css +1 -1
- package/esm/components/search/index.module.css.js +1 -1
- package/esm/components/virtual-options-list/Component.d.ts +35 -2
- package/esm/components/virtual-options-list/Component.js +6 -9
- package/esm/components/virtual-options-list/Component.js.map +1 -1
- package/esm/components/virtual-options-list/index.css +13 -13
- package/esm/components/virtual-options-list/index.module.css.js +1 -1
- package/esm/hooks/use-native-scrollbar.d.ts +4 -0
- package/esm/hooks/use-native-scrollbar.js +29 -0
- package/esm/hooks/use-native-scrollbar.js.map +1 -0
- package/esm/presets/useSelectWithApply/hook.d.ts +137 -5
- package/esm/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
- package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
- package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css.js +1 -1
- package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
- package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.module.css.js +1 -1
- package/esm/presets/useSelectWithLoading/index.css +1 -1
- package/esm/presets/useSelectWithLoading/index.module.css.js +1 -1
- package/esm/typings.d.ts +1 -1
- package/hooks/use-native-scrollbar.d.ts +4 -0
- package/hooks/use-native-scrollbar.js +33 -0
- package/hooks/use-native-scrollbar.js.map +1 -0
- package/modern/components/arrow/index.css +4 -4
- package/modern/components/arrow/index.module.css.js +1 -1
- package/modern/components/base-checkmark/index.css +5 -5
- package/modern/components/base-checkmark/index.module.css.js +1 -1
- package/modern/components/base-option/index.css +16 -16
- package/modern/components/base-option/index.module.css.js +1 -1
- package/modern/components/base-select/Component.d.ts +1 -1
- package/modern/components/base-select/Component.js +2 -2
- package/modern/components/base-select/Component.js.map +1 -1
- package/modern/components/base-select/index.css +11 -11
- package/modern/components/base-select/index.module.css.js +1 -1
- package/modern/components/base-select/mobile.css +11 -11
- package/modern/components/base-select/mobile.module.css.js +1 -1
- package/modern/components/checkmark/index.css +9 -9
- package/modern/components/checkmark/index.module.css.js +1 -1
- package/modern/components/checkmark-mobile/index.css +5 -5
- package/modern/components/checkmark-mobile/index.module.css.js +1 -1
- package/modern/components/clear-button/index.css +4 -4
- package/modern/components/clear-button/index.module.css.js +1 -1
- package/modern/components/field/index.css +13 -13
- package/modern/components/field/index.module.css.js +1 -1
- package/modern/components/footer/index.css +4 -4
- package/modern/components/footer/index.module.css.js +1 -1
- package/modern/components/optgroup/index.css +4 -4
- package/modern/components/optgroup/index.module.css.js +1 -1
- package/modern/components/option/desktop/index.css +19 -19
- package/modern/components/option/desktop/index.module.css.js +1 -1
- package/modern/components/option/mobile/index.css +16 -16
- package/modern/components/option/mobile/index.module.css.js +1 -1
- package/modern/components/options-list/Component.d.ts +35 -2
- package/modern/components/options-list/Component.js +6 -6
- package/modern/components/options-list/Component.js.map +1 -1
- package/modern/components/options-list/index.css +9 -9
- package/modern/components/options-list/index.module.css.js +1 -1
- package/modern/components/search/Component.js +17 -1
- package/modern/components/search/Component.js.map +1 -1
- package/modern/components/search/index.css +1 -1
- package/modern/components/search/index.module.css.js +1 -1
- package/modern/components/virtual-options-list/Component.d.ts +35 -2
- package/modern/components/virtual-options-list/Component.js +6 -7
- package/modern/components/virtual-options-list/Component.js.map +1 -1
- package/modern/components/virtual-options-list/index.css +13 -13
- package/modern/components/virtual-options-list/index.module.css.js +1 -1
- package/modern/hooks/use-native-scrollbar.d.ts +4 -0
- package/modern/hooks/use-native-scrollbar.js +27 -0
- package/modern/hooks/use-native-scrollbar.js.map +1 -0
- package/modern/presets/useSelectWithApply/hook.d.ts +137 -5
- package/modern/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
- package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
- package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css.js +1 -1
- package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
- package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.module.css.js +1 -1
- package/modern/presets/useSelectWithLoading/index.css +1 -1
- package/modern/presets/useSelectWithLoading/index.module.css.js +1 -1
- package/modern/typings.d.ts +1 -1
- package/moderncssm/components/base-select/Component.d.ts +1 -1
- package/moderncssm/components/base-select/Component.js +2 -2
- package/moderncssm/components/base-select/Component.js.map +1 -1
- package/moderncssm/components/options-list/Component.d.ts +35 -2
- package/moderncssm/components/options-list/Component.js +6 -6
- package/moderncssm/components/options-list/Component.js.map +1 -1
- package/moderncssm/components/search/Component.js +17 -1
- package/moderncssm/components/search/Component.js.map +1 -1
- package/moderncssm/components/virtual-options-list/Component.d.ts +35 -2
- package/moderncssm/components/virtual-options-list/Component.js +6 -7
- package/moderncssm/components/virtual-options-list/Component.js.map +1 -1
- package/moderncssm/hooks/use-native-scrollbar.d.ts +4 -0
- package/moderncssm/hooks/use-native-scrollbar.js +27 -0
- package/moderncssm/hooks/use-native-scrollbar.js.map +1 -0
- package/moderncssm/presets/useSelectWithApply/hook.d.ts +137 -5
- package/moderncssm/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
- package/moderncssm/typings.d.ts +1 -1
- package/package.json +4 -4
- package/presets/useSelectWithApply/hook.d.ts +137 -5
- package/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +69 -3
- package/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
- package/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css.js +1 -1
- package/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
- package/presets/useSelectWithApply/options-list-with-apply/header/index.module.css.js +1 -1
- package/presets/useSelectWithLoading/index.css +1 -1
- package/presets/useSelectWithLoading/index.module.css.js +1 -1
- package/src/components/base-select/Component.tsx +2 -0
- package/src/components/options-list/Component.tsx +6 -8
- package/src/components/search/Component.tsx +29 -10
- package/src/components/virtual-options-list/Component.tsx +6 -9
- package/src/hooks/use-native-scrollbar.ts +36 -0
- package/src/typings.ts +1 -1
- package/typings.d.ts +1 -1
|
@@ -1,12 +1,78 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type OptionShape
|
|
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<
|
|
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<
|
|
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
|
-
} .
|
|
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
|
-
} .
|
|
16
|
+
} .select__footer_1nczv.select__size-72_1nczv {
|
|
17
17
|
padding: var(--gap-12) var(--gap-16);
|
|
18
|
-
} .
|
|
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":"
|
|
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
|
-
} .
|
|
8
|
+
} .select__desktop_1cwzq {
|
|
9
9
|
padding: var(--gap-12);
|
|
10
|
-
} .
|
|
10
|
+
} .select__desktop_1cwzq.select__size-72_1cwzq {
|
|
11
11
|
padding-left: var(--gap-16);
|
|
12
|
-
} .
|
|
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":"
|
|
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
|
|
@@ -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
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
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
|
-
|
|
67
|
-
|
|
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
package/typings.d.ts
CHANGED