@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
|
@@ -11,33 +11,33 @@
|
|
|
11
11
|
--gap-24: var(--gap-xl);
|
|
12
12
|
} :root {
|
|
13
13
|
--select-options-list-empty-placeholder-color: var(--color-light-text-secondary);
|
|
14
|
-
} .
|
|
14
|
+
} .select__optionsList_qcd3h {
|
|
15
15
|
width: 100%;
|
|
16
16
|
outline: none;
|
|
17
17
|
box-sizing: border-box;
|
|
18
18
|
position: relative;
|
|
19
|
-
} .
|
|
19
|
+
} .select__optionsListHeader_qcd3h {
|
|
20
20
|
box-sizing: border-box;
|
|
21
21
|
border-bottom: 1px solid transparent;
|
|
22
22
|
transition: border-color 0.2s ease;
|
|
23
|
-
} .
|
|
23
|
+
} .select__optionsListHeader_qcd3h.select__headerHighlighted_qcd3h {
|
|
24
24
|
border-bottom-color: var(--color-light-neutral-300);
|
|
25
|
-
} .
|
|
25
|
+
} .select__optionsListFooter_qcd3h {
|
|
26
26
|
position: sticky;
|
|
27
27
|
bottom: var(--gap-0);
|
|
28
28
|
box-sizing: border-box;
|
|
29
29
|
border-top: 1px solid transparent;
|
|
30
30
|
transition: border-color 0.2s ease;
|
|
31
|
-
} .
|
|
31
|
+
} .select__optionsListFooter_qcd3h.select__withBorder_qcd3h {
|
|
32
32
|
border-top-color: var(--color-light-neutral-300);
|
|
33
|
-
} .
|
|
33
|
+
} .select__scrollable_qcd3h {
|
|
34
34
|
overflow: auto;
|
|
35
35
|
width: 100%;
|
|
36
|
-
} .
|
|
36
|
+
} .select__mask_qcd3h {
|
|
37
37
|
min-width: 4000px;
|
|
38
|
-
} .
|
|
38
|
+
} .select__emptyPlaceholder_qcd3h {
|
|
39
39
|
padding: var(--gap-16) var(--gap-12);
|
|
40
40
|
color: var(--select-options-list-empty-placeholder-color);
|
|
41
|
-
} .select__size-
|
|
41
|
+
} .select__size-72_qcd3h .select__emptyPlaceholder_qcd3h {
|
|
42
42
|
padding: var(--gap-24) var(--gap-16);
|
|
43
43
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require('./index.css');
|
|
4
4
|
|
|
5
|
-
var styles = {"optionsList":"
|
|
5
|
+
var styles = {"optionsList":"select__optionsList_qcd3h","optionsListHeader":"select__optionsListHeader_qcd3h","headerHighlighted":"select__headerHighlighted_qcd3h","optionsListFooter":"select__optionsListFooter_qcd3h","withBorder":"select__withBorder_qcd3h","scrollable":"select__scrollable_qcd3h","mask":"select__mask_qcd3h","emptyPlaceholder":"select__emptyPlaceholder_qcd3h","size-72":"select__size-72_qcd3h"};
|
|
6
6
|
|
|
7
7
|
module.exports = styles;
|
|
8
8
|
//# sourceMappingURL=index.module.css.js.map
|
|
@@ -6,6 +6,8 @@ var tslib = require('tslib');
|
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var cn = require('classnames');
|
|
8
8
|
var coreComponentsInput = require('@alfalab/core-components-input');
|
|
9
|
+
var desktop = require('@alfalab/core-components-input/desktop');
|
|
10
|
+
var mobile = require('@alfalab/core-components-input/mobile');
|
|
9
11
|
var MagnifierMIcon = require('@alfalab/icons-glyph/MagnifierMIcon');
|
|
10
12
|
var index_module = require('./index.module.css.js');
|
|
11
13
|
|
|
@@ -14,9 +16,21 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
|
|
|
14
16
|
var React__default = /*#__PURE__*/_interopDefaultCompat(React);
|
|
15
17
|
var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
|
|
16
18
|
|
|
19
|
+
var getComponent = function (client) {
|
|
20
|
+
switch (client) {
|
|
21
|
+
case 'desktop':
|
|
22
|
+
return desktop.InputDesktop;
|
|
23
|
+
case 'mobile':
|
|
24
|
+
return mobile.InputMobile;
|
|
25
|
+
default:
|
|
26
|
+
return coreComponentsInput.Input;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
17
29
|
var Search = React.forwardRef(function (_a, ref) {
|
|
18
30
|
var _b = _a.clear, clear = _b === void 0 ? true : _b, _c = _a.placeholder, placeholder = _c === void 0 ? 'Поиск' : _c, className = _a.className, _d = _a.leftAddons, leftAddons = _d === void 0 ? React__default.default.createElement(MagnifierMIcon.MagnifierMIcon, { color: '#86868A' }) : _d, restProps = tslib.__rest(_a, ["clear", "placeholder", "className", "leftAddons"]);
|
|
19
|
-
|
|
31
|
+
var client = restProps.client;
|
|
32
|
+
var Component = getComponent(client);
|
|
33
|
+
return (React__default.default.createElement(Component, tslib.__assign({ ref: ref, className: cn__default.default(index_module.component, className), placeholder: placeholder, leftAddons: leftAddons, clear: clear }, restProps)));
|
|
20
34
|
});
|
|
21
35
|
|
|
22
36
|
exports.Search = Search;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sources":["../../src/components/search/Component.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport cn from 'classnames';\n\nimport { Input } from '@alfalab/core-components-input';\nimport { MagnifierMIcon } from '@alfalab/icons-glyph/MagnifierMIcon';\n\nimport { type SearchProps } from '../../typings';\n\nimport styles from './index.module.css';\n\nexport const Search = forwardRef<HTMLInputElement, SearchProps>(\n (\n {\n clear = true,\n placeholder = 'Поиск',\n className,\n leftAddons = <MagnifierMIcon color='#86868A' />,\n ...restProps\n },\n ref,\n ) => (\n <
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../src/components/search/Component.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport cn from 'classnames';\n\nimport { Input } from '@alfalab/core-components-input';\nimport { InputDesktop } from '@alfalab/core-components-input/desktop';\nimport { InputMobile } from '@alfalab/core-components-input/mobile';\nimport { MagnifierMIcon } from '@alfalab/icons-glyph/MagnifierMIcon';\n\nimport { type SearchProps } from '../../typings';\n\nimport styles from './index.module.css';\n\nconst getComponent = (client: SearchProps['client']) => {\n switch (client) {\n case 'desktop':\n return InputDesktop;\n case 'mobile':\n return InputMobile;\n default:\n return Input;\n }\n};\n\nexport const Search = forwardRef<HTMLInputElement, SearchProps>(\n (\n {\n clear = true,\n placeholder = 'Поиск',\n className,\n leftAddons = <MagnifierMIcon color='#86868A' />,\n ...restProps\n },\n ref,\n ) => {\n const { client } = restProps;\n\n const Component = getComponent(client);\n\n return (\n <Component\n ref={ref}\n className={cn(styles.component, className)}\n placeholder={placeholder}\n leftAddons={leftAddons}\n clear={clear}\n {...restProps}\n />\n );\n },\n);\n"],"names":["InputDesktop","InputMobile","Input","forwardRef","React","MagnifierMIcon","__rest","__assign","cn","styles"],"mappings":";;;;;;;;;;;;;;;;;;AAYA,IAAM,YAAY,GAAG,UAAC,MAA6B,EAAA;AAC/C,IAAA,QAAQ,MAAM;AACV,QAAA,KAAK,SAAS;AACV,YAAA,OAAOA,oBAAY;AACvB,QAAA,KAAK,QAAQ;AACT,YAAA,OAAOC,kBAAW;AACtB,QAAA;AACI,YAAA,OAAOC,yBAAK;AACnB;AACL,CAAC;IAEY,MAAM,GAAGC,gBAAU,CAC5B,UACI,EAMC,EACD,GAAG,EAAA;AANC,IAAA,IAAA,EAAY,GAAA,EAAA,CAAA,KAAA,EAAZ,KAAK,GAAA,EAAA,KAAA,MAAA,GAAG,IAAI,GAAA,EAAA,EACZ,EAAqB,GAAA,EAAA,CAAA,WAAA,EAArB,WAAW,GAAA,EAAA,KAAA,MAAA,GAAG,OAAO,GAAA,EAAA,EACrB,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,EAAA,GAAA,EAAA,CAAA,UAA+C,EAA/C,UAAU,GAAG,EAAA,KAAA,MAAA,GAAAC,sBAAA,CAAA,aAAA,CAACC,6BAAc,EAAC,EAAA,KAAK,EAAC,SAAS,GAAG,GAAA,EAAA,EAC5C,SAAS,GAAAC,YAAA,CAAA,EAAA,EALhB,mDAMC,CADe;AAIR,IAAA,IAAA,MAAM,GAAK,SAAS,CAAA,MAAd;AAEd,IAAA,IAAM,SAAS,GAAG,YAAY,CAAC,MAAM,CAAC;AAEtC,IAAA,QACIF,sBAAA,CAAA,aAAA,CAAC,SAAS,EAAAG,cAAA,CAAA,EACN,GAAG,EAAE,GAAG,EACR,SAAS,EAAEC,mBAAE,CAACC,YAAM,CAAC,SAAS,EAAE,SAAS,CAAC,EAC1C,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,KAAK,EAAA,EACR,SAAS,CAAA,CACf;AAEV,CAAC;;;;"}
|
|
@@ -1,3 +1,36 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { type
|
|
3
|
-
export declare const VirtualOptionsList: React.ForwardRefExoticComponent<
|
|
2
|
+
import { type GroupShape, type OptionShape } from '../../typings';
|
|
3
|
+
export declare const VirtualOptionsList: React.ForwardRefExoticComponent<Pick<import("../../typings").SelectProps, "client"> & {
|
|
4
|
+
className?: string | undefined;
|
|
5
|
+
optionGroupClassName?: string | undefined;
|
|
6
|
+
scrollbarClassName?: string | undefined;
|
|
7
|
+
footerClassName?: string | undefined;
|
|
8
|
+
size?: "s" | "m" | "l" | "xl" | 40 | 48 | 56 | 64 | 72 | undefined;
|
|
9
|
+
Option: React.ComponentType<import("../../typings").OptionProps>;
|
|
10
|
+
getOptionProps: (option: OptionShape, index: number) => import("../../typings").OptionProps;
|
|
11
|
+
groupOptionProps?: import("../../typings").AnyObject | undefined;
|
|
12
|
+
selectedItems?: OptionShape[] | undefined;
|
|
13
|
+
setSelectedItems: (selected: OptionShape[]) => void;
|
|
14
|
+
toggleMenu: () => void;
|
|
15
|
+
header?: React.ReactNode;
|
|
16
|
+
footer?: React.ReactNode;
|
|
17
|
+
options?: (OptionShape | GroupShape)[] | undefined;
|
|
18
|
+
flatOptions?: OptionShape[] | undefined;
|
|
19
|
+
highlightedIndex?: number | undefined;
|
|
20
|
+
open?: boolean | undefined;
|
|
21
|
+
Optgroup?: React.ComponentType<import("../../typings").OptgroupProps> | undefined;
|
|
22
|
+
emptyPlaceholder?: React.ReactNode;
|
|
23
|
+
visibleOptions?: number | undefined;
|
|
24
|
+
onScroll?: ((event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void) | undefined;
|
|
25
|
+
dataTestId?: string | undefined;
|
|
26
|
+
inputProps?: import("@alfalab/core-components-input").InputProps | undefined;
|
|
27
|
+
showFooter?: boolean | undefined;
|
|
28
|
+
nativeScrollbar?: boolean | undefined;
|
|
29
|
+
optionsListWidth?: "field" | "content" | undefined;
|
|
30
|
+
onApply?: (() => void) | undefined;
|
|
31
|
+
onClear?: (() => void) | undefined;
|
|
32
|
+
setHighlightedIndex?: ((index: number) => void) | undefined;
|
|
33
|
+
search?: string | undefined;
|
|
34
|
+
multiple?: boolean | undefined;
|
|
35
|
+
limitDynamicOptionGroupSize?: boolean | undefined;
|
|
36
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
@@ -7,10 +7,9 @@ var React = require('react');
|
|
|
7
7
|
var mergeRefs = require('react-merge-refs');
|
|
8
8
|
var reactVirtual = require('react-virtual');
|
|
9
9
|
var cn = require('classnames');
|
|
10
|
-
var coreComponentsMq = require('@alfalab/core-components-mq');
|
|
11
10
|
var coreComponentsScrollbar = require('@alfalab/core-components-scrollbar');
|
|
12
|
-
var coreComponentsShared = require('@alfalab/core-components-shared');
|
|
13
11
|
var consts = require('../../consts.js');
|
|
12
|
+
var useNativeScrollbar = require('../../hooks/use-native-scrollbar.js');
|
|
14
13
|
var utils = require('../../utils.js');
|
|
15
14
|
var Component = require('../optgroup/Component.js');
|
|
16
15
|
var index_module = require('./index.module.css.js');
|
|
@@ -23,23 +22,21 @@ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
|
|
|
23
22
|
|
|
24
23
|
var VirtualOptionsList = React.forwardRef(function (_a, ref) {
|
|
25
24
|
var _b;
|
|
26
|
-
var _c = _a.size, size = _c === void 0 ? 48 : _c, _d = _a.flatOptions, flatOptions = _d === void 0 ? [] : _d, _e = _a.highlightedIndex, highlightedIndex = _e === void 0 ? -1 : _e, optionGroupClassName = _a.optionGroupClassName, className = _a.className, getOptionProps = _a.getOptionProps, _f = _a.groupOptionProps, groupOptionProps = _f === void 0 ? {} : _f, Option = _a.Option, open = _a.open, _g = _a.options, options = _g === void 0 ? [] : _g, _h = _a.Optgroup, Optgroup = _h === void 0 ? Component.Optgroup : _h, dataTestId = _a.dataTestId, emptyPlaceholder = _a.emptyPlaceholder, _j = _a.visibleOptions, visibleOptions = _j === void 0 ? consts.DEFAULT_VISIBLE_OPTIONS : _j, header = _a.header, footer = _a.footer, _k = _a.showFooter, showFooter = _k === void 0 ? true : _k, optionsListWidth = _a.optionsListWidth, onScroll = _a.onScroll, nativeScrollbarProp = _a.nativeScrollbar, setHighlightedIndex = _a.setHighlightedIndex, selectedItems = _a.selectedItems, setSelectedItems = _a.setSelectedItems, search = _a.search, multiple = _a.multiple, scrollbarClassName = _a.scrollbarClassName;
|
|
25
|
+
var _c = _a.size, size = _c === void 0 ? 48 : _c, _d = _a.flatOptions, flatOptions = _d === void 0 ? [] : _d, _e = _a.highlightedIndex, highlightedIndex = _e === void 0 ? -1 : _e, optionGroupClassName = _a.optionGroupClassName, className = _a.className, getOptionProps = _a.getOptionProps, _f = _a.groupOptionProps, groupOptionProps = _f === void 0 ? {} : _f, Option = _a.Option, open = _a.open, _g = _a.options, options = _g === void 0 ? [] : _g, _h = _a.Optgroup, Optgroup = _h === void 0 ? Component.Optgroup : _h, dataTestId = _a.dataTestId, emptyPlaceholder = _a.emptyPlaceholder, _j = _a.visibleOptions, visibleOptions = _j === void 0 ? consts.DEFAULT_VISIBLE_OPTIONS : _j, header = _a.header, footer = _a.footer, _k = _a.showFooter, showFooter = _k === void 0 ? true : _k, optionsListWidth = _a.optionsListWidth, onScroll = _a.onScroll, nativeScrollbarProp = _a.nativeScrollbar, setHighlightedIndex = _a.setHighlightedIndex, selectedItems = _a.selectedItems, setSelectedItems = _a.setSelectedItems, search = _a.search, multiple = _a.multiple, scrollbarClassName = _a.scrollbarClassName, client = _a.client;
|
|
27
26
|
var listRef = React.useRef(null);
|
|
28
27
|
var parentRef = React.useRef(null);
|
|
29
28
|
var scrollbarRef = React.useRef(null);
|
|
30
29
|
var _l = React.useState(''), visibleOptionsInvalidateKey = _l[0], setVisibleOptionsInvalidateKey = _l[1];
|
|
31
30
|
var prevHighlightedIndex = utils.usePrevious(highlightedIndex) || -1;
|
|
32
|
-
var query = '(max-width: 1023px)';
|
|
33
|
-
var nativeScrollbar = coreComponentsMq.useMatchMedia(query, function () {
|
|
34
|
-
return coreComponentsShared.isClient() ? window.matchMedia(query).matches : true;
|
|
35
|
-
})[0];
|
|
36
31
|
var rowVirtualizer = reactVirtual.useVirtual({
|
|
37
32
|
size: flatOptions.length,
|
|
38
33
|
parentRef: (ref || parentRef),
|
|
39
34
|
overscan: 15,
|
|
40
35
|
});
|
|
41
|
-
|
|
42
|
-
|
|
36
|
+
var nativeScrollbar = useNativeScrollbar.useNativeScrollbar({
|
|
37
|
+
nativeScrollbar: nativeScrollbarProp,
|
|
38
|
+
client: client,
|
|
39
|
+
});
|
|
43
40
|
// Сколл к выбранному пункту при открытии меню
|
|
44
41
|
React.useEffect(function () {
|
|
45
42
|
if (open) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sources":["../../src/components/virtual-options-list/Component.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useMemo, useRef, useState } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { useVirtual } from 'react-virtual';\nimport cn from 'classnames';\n\nimport { useMatchMedia } from '@alfalab/core-components-mq';\nimport { Scrollbar } from '@alfalab/core-components-scrollbar';\nimport { isClient } from '@alfalab/core-components-shared';\n\nimport { DEFAULT_VISIBLE_OPTIONS, SIZE_TO_CLASSNAME_MAP } from '../../consts';\nimport { type GroupShape, type OptionShape, type OptionsListProps } from '../../typings';\nimport { isGroup, lastIndexOf, usePrevious, useVirtualVisibleOptions } from '../../utils';\nimport { Optgroup as DefaultOptgroup } from '../optgroup';\n\nimport styles from './index.module.css';\n\nexport const VirtualOptionsList = forwardRef<HTMLDivElement, OptionsListProps>(\n (\n {\n size = 48,\n flatOptions = [],\n highlightedIndex = -1,\n optionGroupClassName,\n className,\n getOptionProps,\n groupOptionProps = {},\n Option,\n open,\n options = [],\n Optgroup = DefaultOptgroup,\n dataTestId,\n emptyPlaceholder,\n visibleOptions = DEFAULT_VISIBLE_OPTIONS,\n header,\n footer,\n showFooter = true,\n optionsListWidth,\n onScroll,\n nativeScrollbar: nativeScrollbarProp,\n setHighlightedIndex,\n selectedItems,\n setSelectedItems,\n search,\n multiple,\n scrollbarClassName,\n },\n ref,\n ) => {\n const listRef = useRef<HTMLDivElement>(null);\n const parentRef = useRef<HTMLDivElement>(null);\n const scrollbarRef = useRef<HTMLDivElement>(null);\n const [visibleOptionsInvalidateKey, setVisibleOptionsInvalidateKey] = useState('');\n const prevHighlightedIndex = usePrevious(highlightedIndex) || -1;\n\n const query = '(max-width: 1023px)';\n let [nativeScrollbar] = useMatchMedia(query, () =>\n isClient() ? window.matchMedia(query).matches : true,\n );\n\n const rowVirtualizer = useVirtual({\n size: flatOptions.length,\n parentRef: (ref || parentRef) as React.RefObject<HTMLDivElement>,\n overscan: 15,\n });\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n nativeScrollbar = Boolean(nativeScrollbarProp ?? nativeScrollbar);\n\n // Сколл к выбранному пункту при открытии меню\n useEffect(() => {\n if (open) {\n rowVirtualizer.scrollToIndex(highlightedIndex, { align: 'end' });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n // Скролл к пункту, которого нет на экране\n useEffect(() => {\n if (highlightedIndex === -1) return;\n\n if (!rowVirtualizer.virtualItems.some((option) => option.index === highlightedIndex)) {\n rowVirtualizer.scrollToIndex(highlightedIndex, { align: 'end' });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [highlightedIndex]);\n\n // Циклическая навигация\n useEffect(() => {\n const notDisabled = (option: OptionShape) => !option.disabled;\n const firstNonDisabled = flatOptions.findIndex(notDisabled);\n const lastNonDisabled = lastIndexOf(flatOptions, notDisabled);\n\n if (\n prevHighlightedIndex <= firstNonDisabled &&\n highlightedIndex === flatOptions.length - 1\n ) {\n rowVirtualizer.scrollToIndex(lastNonDisabled);\n }\n\n if (prevHighlightedIndex >= lastNonDisabled && highlightedIndex === 0) {\n rowVirtualizer.scrollToIndex(0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [prevHighlightedIndex, highlightedIndex]);\n\n useEffect(() => {\n setVisibleOptionsInvalidateKey(\n /**\n * react-virtual может несколько раз отрендерить список с одним элементом,\n * поэтому нужно еще раз пересчитать высоту, когда список ВИДИМЫХ пунктов будет отрендерен полностью\n * Также, высоту нужно пересчитывать при изменении пунктов меню\n */\n rowVirtualizer.virtualItems\n .slice(0, Math.min(rowVirtualizer.virtualItems.length, visibleOptions + 1))\n .map((item) => flatOptions[item.index].key)\n .join('_'),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rowVirtualizer.virtualItems.length, flatOptions]);\n\n useVirtualVisibleOptions({\n visibleOptions,\n invalidate: visibleOptionsInvalidateKey,\n listRef,\n styleTargetRef: nativeScrollbar ? parentRef : scrollbarRef,\n open,\n });\n\n // Т.к. рендерится плоский список, необходимо знать индекс, когда начинается новая группа\n const groupStartIndexes = useMemo(() => {\n let currentIndex = 0;\n\n return options.reduce((acc: { [key: number]: number }, option, index) => {\n if (isGroup(option)) {\n acc[currentIndex] = index;\n currentIndex += option.options.length;\n } else {\n currentIndex += 1;\n }\n\n return acc;\n }, {});\n }, [options]);\n\n const renderList = () =>\n rowVirtualizer.virtualItems.map((virtualRow) => {\n const option = flatOptions[virtualRow.index];\n const renderGroup = () => {\n const group = options[groupStartIndexes[virtualRow.index]] as GroupShape;\n\n if (!group) return null;\n\n const groupSelectedItems = selectedItems?.filter(({ key: selectedItemKey }) =>\n group.options.some((opt) => opt.key === selectedItemKey),\n );\n const handleSelectedItems = (items: OptionShape[]) => {\n setSelectedItems(\n (\n selectedItems?.filter(\n ({ key: selectedItemKey }) =>\n !group.options.some((opt) => opt.key === selectedItemKey),\n ) ?? []\n ).concat(items),\n );\n };\n\n return (\n <Optgroup\n label={group.label}\n size={size}\n className={optionGroupClassName}\n options={group.options}\n selectedItems={groupSelectedItems}\n setSelectedItems={handleSelectedItems}\n search={search}\n multiple={multiple}\n {...groupOptionProps}\n />\n );\n };\n\n return (\n <div\n key={virtualRow.index}\n ref={virtualRow.measureRef}\n className={cn(styles.virtualRow, {\n [styles.highlighted]: highlightedIndex === virtualRow.index,\n })}\n style={{\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {renderGroup()}\n {!isGroup(option) && (\n <Option {...getOptionProps(option, virtualRow.index)} />\n )}\n </div>\n );\n });\n\n const contentNodeProps = {\n className: styles.inner,\n style: { height: `${rowVirtualizer.totalSize}px` },\n ref: listRef,\n };\n\n const renderWithCustomScrollbar = () => (\n <Scrollbar\n className={cn(styles.scrollable, scrollbarClassName)}\n ref={scrollbarRef}\n horizontalAutoStretch={optionsListWidth === 'content'}\n scrollableNodeProps={{ onScroll, ref: parentRef }}\n contentNodeProps={contentNodeProps}\n >\n {renderList()}\n </Scrollbar>\n );\n\n const renderWithNativeScrollbar = () => {\n if (visibleOptions) {\n return (\n <div\n className={cn(styles.scrollable, scrollbarClassName)}\n ref={mergeRefs([parentRef, ref])}\n onScroll={onScroll}\n >\n <div {...contentNodeProps}>{renderList()}</div>\n </div>\n );\n }\n\n return <div {...contentNodeProps}>{renderList()}</div>;\n };\n\n const resetHighlightedIndex = () => setHighlightedIndex?.(-1);\n\n if (options.length === 0 && !emptyPlaceholder) {\n return null;\n }\n\n return (\n <div\n className={cn(\n styles.virtualOptionsList,\n styles[SIZE_TO_CLASSNAME_MAP[size]],\n className,\n )}\n data-test-id={dataTestId}\n >\n {header && (\n <div\n className={styles.virtualOptionsListHeader}\n onMouseEnter={resetHighlightedIndex}\n >\n {header}\n </div>\n )}\n\n {nativeScrollbar ? renderWithNativeScrollbar() : renderWithCustomScrollbar()}\n\n {emptyPlaceholder && options.length === 0 && (\n <div className={styles.emptyPlaceholder}>{emptyPlaceholder}</div>\n )}\n\n {showFooter && footer && (\n <div\n onMouseEnter={resetHighlightedIndex}\n className={cn(styles.virtualOptionsListFooter, {\n [styles.withBorder]:\n visibleOptions && flatOptions.length > visibleOptions,\n })}\n >\n {footer}\n </div>\n )}\n </div>\n );\n },\n);\n"],"names":["forwardRef","DefaultOptgroup","DEFAULT_VISIBLE_OPTIONS","useRef","useState","usePrevious","useMatchMedia","isClient","useVirtual","useEffect","lastIndexOf","useVirtualVisibleOptions","useMemo","isGroup","React","cn","styles","__assign","Scrollbar","mergeRefs","SIZE_TO_CLASSNAME_MAP"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../../src/components/virtual-options-list/Component.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useMemo, useRef, useState } from 'react';\nimport mergeRefs from 'react-merge-refs';\nimport { useVirtual } from 'react-virtual';\nimport cn from 'classnames';\n\nimport { Scrollbar } from '@alfalab/core-components-scrollbar';\n\nimport { DEFAULT_VISIBLE_OPTIONS, SIZE_TO_CLASSNAME_MAP } from '../../consts';\nimport { useNativeScrollbar } from '../../hooks/use-native-scrollbar';\nimport { type GroupShape, type OptionShape, type OptionsListProps } from '../../typings';\nimport { isGroup, lastIndexOf, usePrevious, useVirtualVisibleOptions } from '../../utils';\nimport { Optgroup as DefaultOptgroup } from '../optgroup';\n\nimport styles from './index.module.css';\n\nexport const VirtualOptionsList = forwardRef<HTMLDivElement, OptionsListProps>(\n (\n {\n size = 48,\n flatOptions = [],\n highlightedIndex = -1,\n optionGroupClassName,\n className,\n getOptionProps,\n groupOptionProps = {},\n Option,\n open,\n options = [],\n Optgroup = DefaultOptgroup,\n dataTestId,\n emptyPlaceholder,\n visibleOptions = DEFAULT_VISIBLE_OPTIONS,\n header,\n footer,\n showFooter = true,\n optionsListWidth,\n onScroll,\n nativeScrollbar: nativeScrollbarProp,\n setHighlightedIndex,\n selectedItems,\n setSelectedItems,\n search,\n multiple,\n scrollbarClassName,\n client,\n },\n ref,\n ) => {\n const listRef = useRef<HTMLDivElement>(null);\n const parentRef = useRef<HTMLDivElement>(null);\n const scrollbarRef = useRef<HTMLDivElement>(null);\n const [visibleOptionsInvalidateKey, setVisibleOptionsInvalidateKey] = useState('');\n const prevHighlightedIndex = usePrevious(highlightedIndex) || -1;\n\n const rowVirtualizer = useVirtual({\n size: flatOptions.length,\n parentRef: (ref || parentRef) as React.RefObject<HTMLDivElement>,\n overscan: 15,\n });\n\n const nativeScrollbar = useNativeScrollbar({\n nativeScrollbar: nativeScrollbarProp,\n client,\n });\n\n // Сколл к выбранному пункту при открытии меню\n useEffect(() => {\n if (open) {\n rowVirtualizer.scrollToIndex(highlightedIndex, { align: 'end' });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [open]);\n\n // Скролл к пункту, которого нет на экране\n useEffect(() => {\n if (highlightedIndex === -1) return;\n\n if (!rowVirtualizer.virtualItems.some((option) => option.index === highlightedIndex)) {\n rowVirtualizer.scrollToIndex(highlightedIndex, { align: 'end' });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [highlightedIndex]);\n\n // Циклическая навигация\n useEffect(() => {\n const notDisabled = (option: OptionShape) => !option.disabled;\n const firstNonDisabled = flatOptions.findIndex(notDisabled);\n const lastNonDisabled = lastIndexOf(flatOptions, notDisabled);\n\n if (\n prevHighlightedIndex <= firstNonDisabled &&\n highlightedIndex === flatOptions.length - 1\n ) {\n rowVirtualizer.scrollToIndex(lastNonDisabled);\n }\n\n if (prevHighlightedIndex >= lastNonDisabled && highlightedIndex === 0) {\n rowVirtualizer.scrollToIndex(0);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [prevHighlightedIndex, highlightedIndex]);\n\n useEffect(() => {\n setVisibleOptionsInvalidateKey(\n /**\n * react-virtual может несколько раз отрендерить список с одним элементом,\n * поэтому нужно еще раз пересчитать высоту, когда список ВИДИМЫХ пунктов будет отрендерен полностью\n * Также, высоту нужно пересчитывать при изменении пунктов меню\n */\n rowVirtualizer.virtualItems\n .slice(0, Math.min(rowVirtualizer.virtualItems.length, visibleOptions + 1))\n .map((item) => flatOptions[item.index].key)\n .join('_'),\n );\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [rowVirtualizer.virtualItems.length, flatOptions]);\n\n useVirtualVisibleOptions({\n visibleOptions,\n invalidate: visibleOptionsInvalidateKey,\n listRef,\n styleTargetRef: nativeScrollbar ? parentRef : scrollbarRef,\n open,\n });\n\n // Т.к. рендерится плоский список, необходимо знать индекс, когда начинается новая группа\n const groupStartIndexes = useMemo(() => {\n let currentIndex = 0;\n\n return options.reduce((acc: { [key: number]: number }, option, index) => {\n if (isGroup(option)) {\n acc[currentIndex] = index;\n currentIndex += option.options.length;\n } else {\n currentIndex += 1;\n }\n\n return acc;\n }, {});\n }, [options]);\n\n const renderList = () =>\n rowVirtualizer.virtualItems.map((virtualRow) => {\n const option = flatOptions[virtualRow.index];\n const renderGroup = () => {\n const group = options[groupStartIndexes[virtualRow.index]] as GroupShape;\n\n if (!group) return null;\n\n const groupSelectedItems = selectedItems?.filter(({ key: selectedItemKey }) =>\n group.options.some((opt) => opt.key === selectedItemKey),\n );\n const handleSelectedItems = (items: OptionShape[]) => {\n setSelectedItems(\n (\n selectedItems?.filter(\n ({ key: selectedItemKey }) =>\n !group.options.some((opt) => opt.key === selectedItemKey),\n ) ?? []\n ).concat(items),\n );\n };\n\n return (\n <Optgroup\n label={group.label}\n size={size}\n className={optionGroupClassName}\n options={group.options}\n selectedItems={groupSelectedItems}\n setSelectedItems={handleSelectedItems}\n search={search}\n multiple={multiple}\n {...groupOptionProps}\n />\n );\n };\n\n return (\n <div\n key={virtualRow.index}\n ref={virtualRow.measureRef}\n className={cn(styles.virtualRow, {\n [styles.highlighted]: highlightedIndex === virtualRow.index,\n })}\n style={{\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {renderGroup()}\n {!isGroup(option) && (\n <Option {...getOptionProps(option, virtualRow.index)} />\n )}\n </div>\n );\n });\n\n const contentNodeProps = {\n className: styles.inner,\n style: { height: `${rowVirtualizer.totalSize}px` },\n ref: listRef,\n };\n\n const renderWithCustomScrollbar = () => (\n <Scrollbar\n className={cn(styles.scrollable, scrollbarClassName)}\n ref={scrollbarRef}\n horizontalAutoStretch={optionsListWidth === 'content'}\n scrollableNodeProps={{ onScroll, ref: parentRef }}\n contentNodeProps={contentNodeProps}\n >\n {renderList()}\n </Scrollbar>\n );\n\n const renderWithNativeScrollbar = () => {\n if (visibleOptions) {\n return (\n <div\n className={cn(styles.scrollable, scrollbarClassName)}\n ref={mergeRefs([parentRef, ref])}\n onScroll={onScroll}\n >\n <div {...contentNodeProps}>{renderList()}</div>\n </div>\n );\n }\n\n return <div {...contentNodeProps}>{renderList()}</div>;\n };\n\n const resetHighlightedIndex = () => setHighlightedIndex?.(-1);\n\n if (options.length === 0 && !emptyPlaceholder) {\n return null;\n }\n\n return (\n <div\n className={cn(\n styles.virtualOptionsList,\n styles[SIZE_TO_CLASSNAME_MAP[size]],\n className,\n )}\n data-test-id={dataTestId}\n >\n {header && (\n <div\n className={styles.virtualOptionsListHeader}\n onMouseEnter={resetHighlightedIndex}\n >\n {header}\n </div>\n )}\n\n {nativeScrollbar ? renderWithNativeScrollbar() : renderWithCustomScrollbar()}\n\n {emptyPlaceholder && options.length === 0 && (\n <div className={styles.emptyPlaceholder}>{emptyPlaceholder}</div>\n )}\n\n {showFooter && footer && (\n <div\n onMouseEnter={resetHighlightedIndex}\n className={cn(styles.virtualOptionsListFooter, {\n [styles.withBorder]:\n visibleOptions && flatOptions.length > visibleOptions,\n })}\n >\n {footer}\n </div>\n )}\n </div>\n );\n },\n);\n"],"names":["forwardRef","DefaultOptgroup","DEFAULT_VISIBLE_OPTIONS","useRef","useState","usePrevious","useVirtual","useNativeScrollbar","useEffect","lastIndexOf","useVirtualVisibleOptions","useMemo","isGroup","React","cn","styles","__assign","Scrollbar","mergeRefs","SIZE_TO_CLASSNAME_MAP"],"mappings":"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"}
|
|
@@ -17,35 +17,35 @@
|
|
|
17
17
|
|
|
18
18
|
--select-option-left-padding: var(--gap-12);
|
|
19
19
|
--select-option-right-padding: var(--gap-12);
|
|
20
|
-
} .
|
|
20
|
+
} .select__virtualOptionsList_2n0ux {
|
|
21
21
|
width: 100%;
|
|
22
22
|
outline: none;
|
|
23
23
|
box-sizing: border-box;
|
|
24
24
|
position: sticky;
|
|
25
25
|
justify-content: space-between;
|
|
26
|
-
} .
|
|
26
|
+
} .select__virtualOptionsListHeader_2n0ux {
|
|
27
27
|
box-sizing: border-box;
|
|
28
28
|
border-bottom: 1px solid var(--color-light-neutral-300);
|
|
29
|
-
} .
|
|
29
|
+
} .select__virtualOptionsListFooter_2n0ux {
|
|
30
30
|
position: sticky;
|
|
31
31
|
bottom: var(--gap-0);
|
|
32
32
|
box-sizing: border-box;
|
|
33
33
|
border-top: 1px solid transparent;
|
|
34
|
-
} .
|
|
34
|
+
} .select__virtualOptionsListFooter_2n0ux.select__withBorder_2n0ux {
|
|
35
35
|
border-top: 1px solid var(--color-light-neutral-300);
|
|
36
|
-
} .
|
|
36
|
+
} .select__scrollable_2n0ux {
|
|
37
37
|
position: relative;
|
|
38
38
|
overflow: auto;
|
|
39
39
|
width: 100%;
|
|
40
|
-
} .
|
|
40
|
+
} .select__inner_2n0ux {
|
|
41
41
|
position: relative;
|
|
42
42
|
width: 100%;
|
|
43
|
-
} .
|
|
43
|
+
} .select__virtualRow_2n0ux {
|
|
44
44
|
position: absolute;
|
|
45
45
|
top: var(--gap-0);
|
|
46
46
|
left: var(--gap-0);
|
|
47
47
|
width: 100%;
|
|
48
|
-
} .
|
|
48
|
+
} .select__virtualRow_2n0ux:before {
|
|
49
49
|
content: '';
|
|
50
50
|
position: absolute;
|
|
51
51
|
z-index: 1;
|
|
@@ -55,15 +55,15 @@
|
|
|
55
55
|
height: 1px;
|
|
56
56
|
background: var(--select-option-divider-background);
|
|
57
57
|
display: var(--select-option-divider-display);
|
|
58
|
-
} .
|
|
58
|
+
} .select__virtualRow_2n0ux:first-child:before {
|
|
59
59
|
display: none;
|
|
60
|
-
} .
|
|
61
|
-
.
|
|
60
|
+
} .select__highlighted_2n0ux:before,
|
|
61
|
+
.select__highlighted_2n0ux + .select__virtualRow_2n0ux:before {
|
|
62
62
|
display: none;
|
|
63
|
-
} .
|
|
63
|
+
} .select__emptyPlaceholder_2n0ux {
|
|
64
64
|
padding: var(--gap-16) var(--gap-12);
|
|
65
65
|
color: var(--select-options-list-empty-placeholder-color);
|
|
66
66
|
flex: 1;
|
|
67
|
-
} .select__size-
|
|
67
|
+
} .select__size-72_2n0ux .select__emptyPlaceholder_2n0ux {
|
|
68
68
|
padding: var(--gap-24) var(--gap-16);
|
|
69
69
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
require('./index.css');
|
|
4
4
|
|
|
5
|
-
var styles = {"virtualOptionsList":"
|
|
5
|
+
var styles = {"virtualOptionsList":"select__virtualOptionsList_2n0ux","virtualOptionsListHeader":"select__virtualOptionsListHeader_2n0ux","virtualOptionsListFooter":"select__virtualOptionsListFooter_2n0ux","withBorder":"select__withBorder_2n0ux","scrollable":"select__scrollable_2n0ux","inner":"select__inner_2n0ux","virtualRow":"select__virtualRow_2n0ux","highlighted":"select__highlighted_2n0ux","emptyPlaceholder":"select__emptyPlaceholder_2n0ux","size-72":"select__size-72_2n0ux"};
|
|
6
6
|
|
|
7
7
|
module.exports = styles;
|
|
8
8
|
//# sourceMappingURL=index.module.css.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
export declare const BaseSelect: React.ForwardRefExoticComponent<import("../../typings").BaseSelectProps & import("../../typings").AdditionalMobileProps & import("../../typings").BottomSheetSelectMobileProps & import("../../typings").ModalSelectMobileProps & {
|
|
3
3
|
isBottomSheet?: boolean | undefined;
|
|
4
|
-
view: "
|
|
4
|
+
view: "desktop" | "mobile";
|
|
5
5
|
Popover?: React.ForwardRefExoticComponent<import("@alfalab/core-components-popover").PopoverProps & React.RefAttributes<HTMLDivElement>> | undefined;
|
|
6
6
|
BottomSheet?: React.ForwardRefExoticComponent<import("@alfalab/core-components-bottom-sheet").BottomSheetProps & React.RefAttributes<HTMLDivElement>> | undefined;
|
|
7
7
|
ModalMobile?: (React.ForwardRefExoticComponent<import("@alfalab/core-components-modal/typings").ModalMobileProps & React.RefAttributes<HTMLDivElement>> & {
|
|
@@ -375,7 +375,7 @@ function (props, ref) {
|
|
|
375
375
|
return (React__default.default.createElement(Search, tslib.__assign({}, searchProps === null || searchProps === void 0 ? void 0 : searchProps.componentProps, { onBlur: handleBlur, value: search, onChange: handleChange, dataTestId: cssm.getDataTestId(dataTestId, 'search'), onClear: handleClear, className: cn__default.default((_b = searchProps === null || searchProps === void 0 ? void 0 : searchProps.componentProps) === null || _b === void 0 ? void 0 : _b.className, (_a = {},
|
|
376
376
|
_a[styles__default.default.search] = view === 'desktop',
|
|
377
377
|
_a[mobileStyles__default.default.search] = view === 'mobile',
|
|
378
|
-
_a), size && styles__default.default[consts.SIZE_TO_CLASSNAME_MAP[size]]), ref: mergeRefs__default.default([searchRef, ((_c = searchProps === null || searchProps === void 0 ? void 0 : searchProps.componentProps) === null || _c === void 0 ? void 0 : _c.ref) || null]) })));
|
|
378
|
+
_a), size && styles__default.default[consts.SIZE_TO_CLASSNAME_MAP[size]]), ref: mergeRefs__default.default([searchRef, ((_c = searchProps === null || searchProps === void 0 ? void 0 : searchProps.componentProps) === null || _c === void 0 ? void 0 : _c.ref) || null]), client: view })));
|
|
379
379
|
};
|
|
380
380
|
var _12 = optionsListProps, header = _12.header, emptyPlaceholder = _12.emptyPlaceholder;
|
|
381
381
|
var renderOptionsListHeader = function () {
|
|
@@ -403,7 +403,7 @@ function (props, ref) {
|
|
|
403
403
|
return (React__default.default.createElement("div", tslib.__assign({}, menuProps, { ref: view === 'desktop' ? menuRef : undefined, className: cn__default.default(optionsListClassName, view === 'mobile' && mobileStyles__default.default.optionsListWrapper, view === 'desktop' && styles__default.default.optionsListWrapper) }),
|
|
404
404
|
React__default.default.createElement(OptionsList, tslib.__assign({}, listProps, { ref: view === 'desktop' ? listProps.ref : scrollableContainerRef, setHighlightedIndex: view === 'desktop' ? setHighlightedIndex : undefined, className: cn__default.default((_a = {}, _a[mobileStyles__default.default.optionsList] = view === 'mobile', _a), listProps.className), scrollbarClassName: cn__default.default((_b = {}, _b[mobileStyles__default.default.scrollbar] = view === 'mobile', _b), listProps.scrollbarClassName), optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: filteredOptions, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, groupOptionProps: groupOptionProps, getOptionProps: getOptionProps, visibleOptions: view === 'desktop' ? visibleOptions : 0, dataTestId: cssm.getDataTestId(dataTestId, 'options-list'), header: renderOptionsListHeader(), optionGroupClassName: cn__default.default(optionGroupClassName, (_c = {},
|
|
405
405
|
_c[mobileStyles__default.default.optionGroup] = view === 'mobile',
|
|
406
|
-
_c)), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll, search: search, multiple: multiple, limitDynamicOptionGroupSize: limitDynamicOptionGroupSize })),
|
|
406
|
+
_c)), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll, search: search, multiple: multiple, limitDynamicOptionGroupSize: limitDynamicOptionGroupSize, client: view })),
|
|
407
407
|
view === 'desktop' && React__default.default.createElement("div", { className: styles__default.default.optionsListBorder })));
|
|
408
408
|
};
|
|
409
409
|
var renderInPopover = function () {
|