@alfalab/core-components-select 13.2.20 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Component-3885b0d7.d.ts +1 -1
- package/Component-f1a1856f.d.ts +61 -0
- package/Component-f1a1856f.js +158 -0
- package/Component.js +4 -3
- package/Component.responsive.js +14 -13
- package/components/arrow/Component.js +1 -1
- package/components/arrow/index.css +3 -3
- package/components/base-checkmark/Component.js +1 -1
- package/components/base-checkmark/index.css +4 -4
- package/components/base-option/Component.js +1 -1
- package/components/base-option/index.css +13 -13
- package/components/base-select/Component.d.ts +5 -0
- package/components/base-select/Component.js +242 -12
- package/components/base-select/index.css +8 -8
- package/components/base-select/index.d.ts +1 -1
- package/components/base-select/index.js +2 -1
- package/components/base-select-mobile/Component.d.ts +46 -0
- package/components/base-select-mobile/Component.js +209 -33
- package/components/base-select-mobile/footer/Component.d.ts +8 -0
- package/components/base-select-mobile/footer/Component.js +34 -0
- package/components/base-select-mobile/footer/index.css +42 -0
- package/components/base-select-mobile/footer/index.js +13 -0
- package/components/base-select-mobile/index.css +10 -19
- package/components/base-select-mobile/index.d.ts +1 -1
- package/components/base-select-mobile/index.js +9 -22
- package/components/checkmark/Component.js +1 -1
- package/components/checkmark/index.css +10 -10
- package/{cssm/components/base-select-mobile/checkmark → components/checkmark-mobile}/Component.d.ts +1 -1
- package/components/{base-select-mobile/checkmark → checkmark-mobile}/Component.js +1 -1
- package/components/{base-select-mobile/checkmark → checkmark-mobile}/index.css +6 -6
- package/components/{base-select-mobile/checkmark → checkmark-mobile}/index.js +2 -2
- package/components/field/Component.js +1 -1
- package/components/field/index.css +9 -9
- package/components/index.js +15 -13
- package/components/optgroup/Component.js +1 -1
- package/components/optgroup/index.css +6 -6
- package/components/option/Component.js +4 -4
- package/components/option/index.css +20 -20
- package/components/option/index.js +2 -2
- package/components/options-list/Component.d.ts +1 -1
- package/components/options-list/Component.js +1 -1
- package/components/options-list/index.css +12 -10
- package/components/select-mobile/Component.js +19 -18
- package/components/select-mobile/index.d.ts +1 -1
- package/components/select-mobile/index.js +16 -15
- package/components/select-modal-mobile/Component.js +19 -18
- package/components/select-modal-mobile/index.d.ts +1 -1
- package/components/select-modal-mobile/index.js +16 -15
- package/components/virtual-options-list/Component.d.ts +2 -7
- package/components/virtual-options-list/Component.js +31 -19
- package/components/virtual-options-list/index.css +19 -16
- package/components/virtual-options-list/index.js +1 -0
- package/cssm/Component-3885b0d7.d.ts +1 -1
- package/cssm/Component-610b3743.d.ts +61 -0
- package/cssm/Component-610b3743.js +168 -0
- package/cssm/Component.js +5 -4
- package/cssm/Component.responsive.js +18 -18
- package/cssm/components/base-select/Component.d.ts +5 -0
- package/cssm/components/base-select/Component.js +241 -13
- package/cssm/components/base-select/index.d.ts +1 -1
- package/cssm/components/base-select/index.js +2 -1
- package/cssm/components/base-select-mobile/Component.d.ts +46 -0
- package/cssm/components/base-select-mobile/Component.js +209 -44
- package/cssm/components/base-select-mobile/footer/Component.d.ts +8 -0
- package/cssm/components/base-select-mobile/footer/Component.js +33 -0
- package/cssm/components/base-select-mobile/footer/index.js +14 -0
- package/cssm/components/base-select-mobile/footer/index.module.css +41 -0
- package/cssm/components/base-select-mobile/index.d.ts +1 -1
- package/cssm/components/base-select-mobile/index.js +11 -33
- package/cssm/components/base-select-mobile/index.module.css +0 -9
- package/{components/base-select-mobile/checkmark → cssm/components/checkmark-mobile}/Component.d.ts +1 -1
- package/cssm/components/{base-select-mobile/checkmark → checkmark-mobile}/index.js +2 -2
- package/cssm/components/index.js +22 -21
- package/cssm/components/option/Component.js +4 -4
- package/cssm/components/option/index.js +3 -3
- package/cssm/components/options-list/Component.d.ts +1 -1
- package/cssm/components/options-list/index.module.css +3 -1
- package/cssm/components/select-mobile/Component.js +26 -26
- package/cssm/components/select-mobile/index.d.ts +1 -1
- package/cssm/components/select-mobile/index.js +19 -19
- package/cssm/components/select-modal-mobile/Component.js +26 -26
- package/cssm/components/select-modal-mobile/index.d.ts +1 -1
- package/cssm/components/select-modal-mobile/index.js +19 -19
- package/cssm/components/virtual-options-list/Component.d.ts +2 -7
- package/cssm/components/virtual-options-list/Component.js +30 -18
- package/cssm/components/virtual-options-list/index.js +1 -0
- package/cssm/components/virtual-options-list/index.module.css +4 -1
- package/cssm/getDataTestId-5c876d98.d.ts +2 -0
- package/cssm/getDataTestId-5c876d98.js +8 -0
- package/{esm/hook-edac5428.d.ts → cssm/hook-4b555174.d.ts} +11 -6
- package/cssm/index-3885b0d7.d.ts +1 -1
- package/cssm/index.js +21 -20
- package/cssm/presets/index.d.ts +1 -1
- package/cssm/presets/index.js +19 -19
- package/cssm/presets/useLazyLoading/hook.js +3 -3
- package/cssm/presets/useSelectWithApply/hook.js +17 -17
- package/cssm/presets/useSelectWithApply/options-list-with-apply/Component.js +35 -35
- package/cssm/presets/useSelectWithApply/options-list-with-apply/footer/Component.d.ts +10 -0
- package/cssm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +23 -0
- package/cssm/presets/useSelectWithApply/options-list-with-apply/{index.module.css → footer/index.module.css} +1 -1
- package/cssm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/cssm/presets/useSelectWithApply/options-list-with-apply/index.js +19 -19
- package/cssm/presets/useSelectWithLoading/hook.js +3 -3
- package/cssm/responsive.js +15 -15
- package/cssm/types-ebda875c.d.ts +1 -1
- package/cssm/typings.d.ts +1 -1
- package/esm/Component-3885b0d7.d.ts +1 -1
- package/esm/Component-b5248298.d.ts +61 -0
- package/esm/Component-b5248298.js +148 -0
- package/esm/Component.js +4 -3
- package/esm/Component.responsive.js +14 -13
- package/esm/components/arrow/Component.js +1 -1
- package/esm/components/arrow/index.css +3 -3
- package/esm/components/base-checkmark/Component.js +1 -1
- package/esm/components/base-checkmark/index.css +4 -4
- package/esm/components/base-option/Component.js +1 -1
- package/esm/components/base-option/index.css +13 -13
- package/esm/components/base-select/Component.d.ts +5 -0
- package/esm/components/base-select/Component.js +239 -11
- package/esm/components/base-select/index.css +8 -8
- package/esm/components/base-select/index.d.ts +1 -1
- package/esm/components/base-select/index.js +2 -1
- package/esm/components/base-select-mobile/Component.d.ts +46 -0
- package/esm/components/base-select-mobile/Component.js +206 -32
- package/esm/components/base-select-mobile/footer/Component.d.ts +8 -0
- package/esm/components/base-select-mobile/footer/Component.js +25 -0
- package/esm/components/base-select-mobile/footer/index.css +42 -0
- package/esm/components/base-select-mobile/{options-list → footer}/index.js +1 -4
- package/esm/components/base-select-mobile/index.css +10 -19
- package/esm/components/base-select-mobile/index.d.ts +1 -1
- package/esm/components/base-select-mobile/index.js +8 -21
- package/esm/components/checkmark/Component.js +1 -1
- package/esm/components/checkmark/index.css +10 -10
- package/esm/components/{base-select-mobile/checkmark → checkmark-mobile}/Component.d.ts +1 -1
- package/esm/components/{base-select-mobile/checkmark → checkmark-mobile}/Component.js +1 -1
- package/esm/components/{base-select-mobile/checkmark → checkmark-mobile}/index.css +6 -6
- package/esm/components/field/Component.js +1 -1
- package/esm/components/field/index.css +9 -9
- package/esm/components/index.js +15 -13
- package/esm/components/optgroup/Component.js +1 -1
- package/esm/components/optgroup/index.css +6 -6
- package/esm/components/option/Component.js +3 -3
- package/esm/components/option/index.css +20 -20
- package/esm/components/option/index.js +2 -2
- package/esm/components/options-list/Component.d.ts +1 -1
- package/esm/components/options-list/Component.js +1 -1
- package/esm/components/options-list/index.css +12 -10
- package/esm/components/select-mobile/Component.js +19 -18
- package/esm/components/select-mobile/index.d.ts +1 -1
- package/esm/components/select-mobile/index.js +16 -15
- package/esm/components/select-modal-mobile/Component.js +19 -18
- package/esm/components/select-modal-mobile/index.d.ts +1 -1
- package/esm/components/select-modal-mobile/index.js +16 -15
- package/esm/components/virtual-options-list/Component.d.ts +2 -7
- package/esm/components/virtual-options-list/Component.js +31 -20
- package/esm/components/virtual-options-list/index.css +19 -16
- package/esm/components/virtual-options-list/index.js +1 -0
- package/esm/getDataTestId-015e89f1.d.ts +2 -0
- package/esm/getDataTestId-015e89f1.js +6 -0
- package/{hook-edac5428.d.ts → esm/hook-4b555174.d.ts} +11 -6
- package/esm/index-3885b0d7.d.ts +1 -1
- package/esm/index.js +14 -12
- package/esm/presets/index.d.ts +1 -1
- package/esm/presets/index.js +16 -15
- package/esm/presets/useLazyLoading/hook.js +4 -4
- package/esm/presets/useLazyLoading/index.css +2 -2
- package/esm/presets/useSelectWithApply/hook.js +13 -12
- package/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +27 -26
- package/esm/presets/useSelectWithApply/options-list-with-apply/footer/Component.d.ts +10 -0
- package/esm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +16 -0
- package/esm/presets/useSelectWithApply/options-list-with-apply/{index.css → footer/index.css} +4 -4
- package/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/esm/presets/useSelectWithApply/options-list-with-apply/index.js +16 -15
- package/esm/presets/useSelectWithLoading/hook.js +3 -3
- package/esm/presets/useSelectWithLoading/index.css +2 -2
- package/esm/responsive.js +12 -11
- package/esm/types-ebda875c.d.ts +1 -1
- package/esm/typings.d.ts +1 -1
- package/getDataTestId-3deaae20.d.ts +2 -0
- package/getDataTestId-3deaae20.js +8 -0
- package/{cssm/hook-edac5428.d.ts → hook-4b555174.d.ts} +11 -6
- package/index-3885b0d7.d.ts +1 -1
- package/index.js +14 -12
- package/modern/Component-29d24a9b.d.ts +61 -0
- package/modern/Component-29d24a9b.js +162 -0
- package/modern/Component-3885b0d7.d.ts +1 -1
- package/modern/Component.js +4 -3
- package/modern/Component.responsive.js +14 -13
- package/modern/components/arrow/Component.js +1 -1
- package/modern/components/arrow/index.css +3 -3
- package/modern/components/base-checkmark/Component.js +1 -1
- package/modern/components/base-checkmark/index.css +4 -4
- package/modern/components/base-option/Component.js +1 -1
- package/modern/components/base-option/index.css +13 -13
- package/modern/components/base-select/Component.d.ts +5 -0
- package/modern/components/base-select/Component.js +251 -10
- package/modern/components/base-select/index.css +8 -8
- package/modern/components/base-select/index.d.ts +1 -1
- package/modern/components/base-select/index.js +2 -1
- package/modern/components/base-select-mobile/Component.d.ts +46 -0
- package/modern/components/base-select-mobile/Component.js +220 -31
- package/modern/components/base-select-mobile/footer/Component.d.ts +8 -0
- package/modern/components/base-select-mobile/footer/Component.js +23 -0
- package/modern/components/base-select-mobile/footer/index.css +42 -0
- package/modern/components/base-select-mobile/{options-list → footer}/index.js +1 -3
- package/modern/components/base-select-mobile/index.css +10 -19
- package/modern/components/base-select-mobile/index.d.ts +1 -1
- package/modern/components/base-select-mobile/index.js +8 -21
- package/modern/components/checkmark/Component.js +1 -1
- package/modern/components/checkmark/index.css +10 -10
- package/modern/components/{base-select-mobile/checkmark → checkmark-mobile}/Component.d.ts +1 -1
- package/modern/components/{base-select-mobile/checkmark → checkmark-mobile}/Component.js +1 -1
- package/modern/components/{base-select-mobile/checkmark → checkmark-mobile}/index.css +6 -6
- package/modern/components/field/Component.js +1 -1
- package/modern/components/field/index.css +9 -9
- package/modern/components/index.js +15 -13
- package/modern/components/optgroup/Component.js +1 -1
- package/modern/components/optgroup/index.css +6 -6
- package/modern/components/option/Component.js +3 -3
- package/modern/components/option/index.css +20 -20
- package/modern/components/option/index.js +2 -2
- package/modern/components/options-list/Component.d.ts +1 -1
- package/modern/components/options-list/Component.js +1 -1
- package/modern/components/options-list/index.css +12 -10
- package/modern/components/select-mobile/Component.js +19 -18
- package/modern/components/select-mobile/index.d.ts +1 -1
- package/modern/components/select-mobile/index.js +16 -15
- package/modern/components/select-modal-mobile/Component.js +19 -18
- package/modern/components/select-modal-mobile/index.d.ts +1 -1
- package/modern/components/select-modal-mobile/index.js +16 -15
- package/modern/components/virtual-options-list/Component.d.ts +2 -7
- package/modern/components/virtual-options-list/Component.js +29 -18
- package/modern/components/virtual-options-list/index.css +19 -16
- package/modern/components/virtual-options-list/index.js +1 -0
- package/modern/getDataTestId-b257b571.d.ts +2 -0
- package/modern/getDataTestId-b257b571.js +6 -0
- package/modern/{hook-edac5428.d.ts → hook-4b555174.d.ts} +11 -6
- package/modern/index-3885b0d7.d.ts +1 -1
- package/modern/index.js +14 -12
- package/modern/presets/index.d.ts +1 -1
- package/modern/presets/index.js +16 -15
- package/modern/presets/useLazyLoading/hook.js +4 -4
- package/modern/presets/useLazyLoading/index.css +2 -2
- package/modern/presets/useSelectWithApply/hook.js +13 -12
- package/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +27 -26
- package/modern/presets/useSelectWithApply/options-list-with-apply/footer/Component.d.ts +10 -0
- package/modern/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +13 -0
- package/modern/presets/useSelectWithApply/options-list-with-apply/{index.css → footer/index.css} +4 -4
- package/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/modern/presets/useSelectWithApply/options-list-with-apply/index.js +16 -15
- package/modern/presets/useSelectWithLoading/hook.js +3 -3
- package/modern/presets/useSelectWithLoading/index.css +2 -2
- package/modern/responsive.js +12 -11
- package/modern/types-ebda875c.d.ts +1 -1
- package/modern/typings.d.ts +1 -1
- package/package.json +4 -4
- package/presets/index.d.ts +1 -1
- package/presets/index.js +16 -15
- package/presets/useLazyLoading/hook.js +4 -4
- package/presets/useLazyLoading/index.css +2 -2
- package/presets/useSelectWithApply/hook.js +13 -12
- package/presets/useSelectWithApply/options-list-with-apply/Component.js +27 -26
- package/presets/useSelectWithApply/options-list-with-apply/footer/Component.d.ts +10 -0
- package/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +24 -0
- package/presets/useSelectWithApply/options-list-with-apply/{index.css → footer/index.css} +4 -4
- package/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
- package/presets/useSelectWithApply/options-list-with-apply/index.js +16 -15
- package/presets/useSelectWithLoading/hook.js +3 -3
- package/presets/useSelectWithLoading/index.css +2 -2
- package/responsive.js +12 -11
- package/types-ebda875c.d.ts +1 -1
- package/typings.d.ts +1 -1
- package/Component-44ef3579.d.ts +0 -6
- package/Component-44ef3579.js +0 -252
- package/Component-ab39b2d3.d.ts +0 -142
- package/Component-ab39b2d3.js +0 -373
- package/components/base-select-mobile/options-list/Component.d.ts +0 -4
- package/components/base-select-mobile/options-list/Component.js +0 -51
- package/components/base-select-mobile/options-list/index.css +0 -60
- package/components/base-select-mobile/options-list/index.js +0 -16
- package/components/base-select-mobile/virtual-options-list/Component.d.ts +0 -5
- package/components/base-select-mobile/virtual-options-list/Component.js +0 -114
- package/components/base-select-mobile/virtual-options-list/index.css +0 -89
- package/components/base-select-mobile/virtual-options-list/index.js +0 -18
- package/cssm/Component-e0df017c.d.ts +0 -6
- package/cssm/Component-e0df017c.js +0 -251
- package/cssm/Component-e4ef870b.d.ts +0 -142
- package/cssm/Component-e4ef870b.js +0 -382
- package/cssm/components/base-select-mobile/options-list/Component.d.ts +0 -4
- package/cssm/components/base-select-mobile/options-list/Component.js +0 -51
- package/cssm/components/base-select-mobile/options-list/index.js +0 -18
- package/cssm/components/base-select-mobile/options-list/index.module.css +0 -59
- package/cssm/components/base-select-mobile/virtual-options-list/Component.d.ts +0 -5
- package/cssm/components/base-select-mobile/virtual-options-list/Component.js +0 -114
- package/cssm/components/base-select-mobile/virtual-options-list/index.js +0 -20
- package/cssm/components/base-select-mobile/virtual-options-list/index.module.css +0 -88
- package/esm/Component-1830cf5e.d.ts +0 -142
- package/esm/Component-1830cf5e.js +0 -360
- package/esm/Component-578c3e05.d.ts +0 -6
- package/esm/Component-578c3e05.js +0 -243
- package/esm/components/base-select-mobile/options-list/Component.d.ts +0 -4
- package/esm/components/base-select-mobile/options-list/Component.js +0 -42
- package/esm/components/base-select-mobile/options-list/index.css +0 -60
- package/esm/components/base-select-mobile/virtual-options-list/Component.d.ts +0 -5
- package/esm/components/base-select-mobile/virtual-options-list/Component.js +0 -105
- package/esm/components/base-select-mobile/virtual-options-list/index.css +0 -89
- package/esm/components/base-select-mobile/virtual-options-list/index.d.ts +0 -1
- package/esm/components/base-select-mobile/virtual-options-list/index.js +0 -10
- package/modern/Component-a4a8e905.d.ts +0 -6
- package/modern/Component-a4a8e905.js +0 -255
- package/modern/Component-ae787d42.d.ts +0 -142
- package/modern/Component-ae787d42.js +0 -370
- package/modern/components/base-select-mobile/checkmark/index.d.ts +0 -1
- package/modern/components/base-select-mobile/options-list/Component.d.ts +0 -4
- package/modern/components/base-select-mobile/options-list/Component.js +0 -37
- package/modern/components/base-select-mobile/options-list/index.css +0 -60
- package/modern/components/base-select-mobile/options-list/index.d.ts +0 -1
- package/modern/components/base-select-mobile/virtual-options-list/Component.d.ts +0 -5
- package/modern/components/base-select-mobile/virtual-options-list/Component.js +0 -99
- package/modern/components/base-select-mobile/virtual-options-list/index.css +0 -89
- package/modern/components/base-select-mobile/virtual-options-list/index.d.ts +0 -1
- package/modern/components/base-select-mobile/virtual-options-list/index.js +0 -9
- /package/components/base-select-mobile/{checkmark → footer}/index.d.ts +0 -0
- /package/components/{base-select-mobile/options-list → checkmark-mobile}/index.d.ts +0 -0
- /package/{components/base-select-mobile/virtual-options-list → cssm/components/base-select-mobile/footer}/index.d.ts +0 -0
- /package/cssm/components/{base-select-mobile/checkmark → checkmark-mobile}/Component.js +0 -0
- /package/cssm/components/{base-select-mobile/checkmark → checkmark-mobile}/index.d.ts +0 -0
- /package/cssm/components/{base-select-mobile/checkmark → checkmark-mobile}/index.module.css +0 -0
- /package/{cssm/components/base-select-mobile/options-list → esm/components/base-select-mobile/footer}/index.d.ts +0 -0
- /package/{cssm/components/base-select-mobile/virtual-options-list → esm/components/checkmark-mobile}/index.d.ts +0 -0
- /package/esm/components/{base-select-mobile/checkmark → checkmark-mobile}/index.js +0 -0
- /package/esm/{intersection-observer-55833352.d.ts → intersection-observer-961b54c8.d.ts} +0 -0
- /package/esm/{intersection-observer-55833352.js → intersection-observer-961b54c8.js} +0 -0
- /package/{intersection-observer-959eb559.d.ts → intersection-observer-d5f3e178.d.ts} +0 -0
- /package/{intersection-observer-959eb559.js → intersection-observer-d5f3e178.js} +0 -0
- /package/{esm/components/base-select-mobile/checkmark → modern/components/base-select-mobile/footer}/index.d.ts +0 -0
- /package/{esm/components/base-select-mobile/options-list → modern/components/checkmark-mobile}/index.d.ts +0 -0
- /package/modern/components/{base-select-mobile/checkmark → checkmark-mobile}/index.js +0 -0
- /package/modern/{intersection-observer-55833352.d.ts → intersection-observer-961b54c8.d.ts} +0 -0
- /package/modern/{intersection-observer-55833352.js → intersection-observer-961b54c8.js} +0 -0
|
@@ -1,255 +0,0 @@
|
|
|
1
|
-
import React, { forwardRef, useRef, useMemo, useCallback, useEffect } from 'react';
|
|
2
|
-
import mergeRefs from 'react-merge-refs';
|
|
3
|
-
import { ResizeObserver } from '@juggle/resize-observer';
|
|
4
|
-
import cn from 'classnames';
|
|
5
|
-
import { useMultipleSelection, useCombobox } from 'downshift';
|
|
6
|
-
import { Popover } from '@alfalab/core-components-popover/modern';
|
|
7
|
-
import { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';
|
|
8
|
-
import { processOptions } from './utils.js';
|
|
9
|
-
import { NativeSelect } from './components/native-select/Component.js';
|
|
10
|
-
|
|
11
|
-
const getDataTestId = (dataTestId, element) => {
|
|
12
|
-
const elementPart = element ? `-${element.toLowerCase()}` : '';
|
|
13
|
-
return dataTestId ? `${dataTestId}${elementPart}` : undefined;
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
const styles = {"component":"select__component_18s2n","popoverInner":"select__popoverInner_18s2n","optionsList":"select__optionsList_18s2n","optionsListBorder":"select__optionsListBorder_18s2n","nativeSelect":"select__nativeSelect_18s2n","block":"select__block_18s2n"};
|
|
17
|
-
require('./components/base-select/index.css')
|
|
18
|
-
|
|
19
|
-
/* eslint-disable no-nested-ternary */
|
|
20
|
-
const BaseSelect = forwardRef(({ dataTestId, className, fieldClassName, optionsListClassName, optionClassName, popperClassName, options, autocomplete = false, multiple = false, allowUnselect = false, disabled = false, closeOnSelect = !multiple, circularNavigation = false, nativeSelect = false, defaultOpen = false, open: openProp, popoverPosition = 'bottom-start', preventFlip = true, optionsListWidth = 'content', name, id, selected, size = 's', optionsSize = size, error, hint, block, label, labelView, placeholder, fieldProps = {}, optionsListProps = {}, optionProps = {}, valueRenderer, onChange, onOpen, onFocus, onBlur, onScroll, Arrow, Field = () => null, OptionsList = () => null, Optgroup = () => null, Option = () => null, updatePopover, zIndexPopover, showEmptyOptionsList = false, visibleOptions, }, ref) => {
|
|
21
|
-
const rootRef = useRef(null);
|
|
22
|
-
const fieldRef = useRef(null);
|
|
23
|
-
const listRef = useRef(null);
|
|
24
|
-
const initiatorRef = useRef(null);
|
|
25
|
-
const itemToString = (option) => (option ? option.key : '');
|
|
26
|
-
const { flatOptions, selectedOptions } = useMemo(() => processOptions(options, selected), [options, selected]);
|
|
27
|
-
const useMultipleSelectionProps = {
|
|
28
|
-
itemToString,
|
|
29
|
-
onSelectedItemsChange: (changes) => {
|
|
30
|
-
if (onChange) {
|
|
31
|
-
const { selectedItems = [] } = changes;
|
|
32
|
-
onChange({
|
|
33
|
-
selectedMultiple: selectedItems,
|
|
34
|
-
selected: selectedItems.length ? selectedItems[0] : null,
|
|
35
|
-
initiator: initiatorRef.current,
|
|
36
|
-
name,
|
|
37
|
-
});
|
|
38
|
-
initiatorRef.current = null;
|
|
39
|
-
}
|
|
40
|
-
},
|
|
41
|
-
stateReducer: (state, actionAndChanges) => {
|
|
42
|
-
const { type, changes } = actionAndChanges;
|
|
43
|
-
if (!allowUnselect &&
|
|
44
|
-
type === useMultipleSelection.stateChangeTypes.DropdownKeyDownBackspace) {
|
|
45
|
-
return state;
|
|
46
|
-
}
|
|
47
|
-
return changes;
|
|
48
|
-
},
|
|
49
|
-
};
|
|
50
|
-
if (selected !== undefined) {
|
|
51
|
-
useMultipleSelectionProps.selectedItems = selectedOptions;
|
|
52
|
-
}
|
|
53
|
-
const { selectedItems, addSelectedItem, setSelectedItems, removeSelectedItem, getDropdownProps, } = useMultipleSelection(useMultipleSelectionProps);
|
|
54
|
-
const { isOpen: open, getMenuProps, getInputProps, getItemProps, getComboboxProps, getLabelProps, highlightedIndex, toggleMenu, openMenu, } = useCombobox({
|
|
55
|
-
id,
|
|
56
|
-
isOpen: openProp,
|
|
57
|
-
circularNavigation,
|
|
58
|
-
items: flatOptions,
|
|
59
|
-
itemToString,
|
|
60
|
-
defaultHighlightedIndex: selectedItems.length === 0 ? -1 : undefined,
|
|
61
|
-
onIsOpenChange: (changes) => {
|
|
62
|
-
if (onOpen) {
|
|
63
|
-
/**
|
|
64
|
-
* Вызываем обработчик асинхронно.
|
|
65
|
-
*
|
|
66
|
-
* Иначе при клике вне открытого селекта сначала сработает onOpen, который закроет селект,
|
|
67
|
-
* А затем сработает onClick кнопки открытия\закрытия с open=false и в итоге селект откроется снова.
|
|
68
|
-
*/
|
|
69
|
-
setTimeout(() => {
|
|
70
|
-
onOpen({
|
|
71
|
-
open: changes.isOpen,
|
|
72
|
-
name,
|
|
73
|
-
});
|
|
74
|
-
}, 0);
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
stateReducer: (state, actionAndChanges) => {
|
|
78
|
-
const { type, changes } = actionAndChanges;
|
|
79
|
-
const { selectedItem } = changes;
|
|
80
|
-
switch (type) {
|
|
81
|
-
case useCombobox.stateChangeTypes.InputKeyDownEnter:
|
|
82
|
-
case useCombobox.stateChangeTypes.ItemClick:
|
|
83
|
-
initiatorRef.current = selectedItem;
|
|
84
|
-
if (selectedItem && !selectedItem.disabled) {
|
|
85
|
-
const alreadySelected = selectedItems.includes(selectedItem);
|
|
86
|
-
const allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
|
|
87
|
-
if (alreadySelected && allowRemove) {
|
|
88
|
-
removeSelectedItem(selectedItem);
|
|
89
|
-
}
|
|
90
|
-
if (!alreadySelected) {
|
|
91
|
-
if (multiple) {
|
|
92
|
-
addSelectedItem(selectedItem);
|
|
93
|
-
}
|
|
94
|
-
else {
|
|
95
|
-
setSelectedItems([selectedItem]);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return {
|
|
100
|
-
...changes,
|
|
101
|
-
isOpen: !closeOnSelect,
|
|
102
|
-
// при closeOnSelect === false - сохраняем подсвеченный индекс
|
|
103
|
-
highlightedIndex: state.isOpen && !closeOnSelect
|
|
104
|
-
? state.highlightedIndex
|
|
105
|
-
: changes.highlightedIndex,
|
|
106
|
-
};
|
|
107
|
-
default:
|
|
108
|
-
return changes;
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
});
|
|
112
|
-
const menuProps = getMenuProps({ ref: listRef }, { suppressRefError: true });
|
|
113
|
-
const inputProps = getInputProps(getDropdownProps({ ref: mergeRefs([ref, fieldRef]) }));
|
|
114
|
-
const handleFieldFocus = (event) => {
|
|
115
|
-
if (onFocus)
|
|
116
|
-
onFocus(event);
|
|
117
|
-
if (autocomplete && !open) {
|
|
118
|
-
openMenu();
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
const handleFieldBlur = (event) => {
|
|
122
|
-
const isNextFocusInsideList = listRef.current?.contains((event.relatedTarget || document.activeElement));
|
|
123
|
-
if (!isNextFocusInsideList) {
|
|
124
|
-
if (onBlur)
|
|
125
|
-
onBlur(event);
|
|
126
|
-
inputProps.onBlur(event);
|
|
127
|
-
}
|
|
128
|
-
};
|
|
129
|
-
const handleFieldKeyDown = (event) => {
|
|
130
|
-
inputProps.onKeyDown(event);
|
|
131
|
-
if (autocomplete && !open && (event.key.length === 1 || event.key === 'Backspace')) {
|
|
132
|
-
// Для автокомплита - открываем меню при начале ввода
|
|
133
|
-
openMenu();
|
|
134
|
-
}
|
|
135
|
-
if ([' ', 'Enter'].includes(event.key) &&
|
|
136
|
-
!autocomplete &&
|
|
137
|
-
!nativeSelect &&
|
|
138
|
-
event.target.tagName !== 'INPUT' &&
|
|
139
|
-
event.target.tagName !== 'BUTTON') {
|
|
140
|
-
// Открываем\закрываем меню по нажатию enter или пробела
|
|
141
|
-
event.preventDefault();
|
|
142
|
-
if (!open || highlightedIndex === -1)
|
|
143
|
-
toggleMenu();
|
|
144
|
-
}
|
|
145
|
-
};
|
|
146
|
-
const handleFieldClick = (event) => {
|
|
147
|
-
if (!autocomplete || event.target.tagName !== 'INPUT') {
|
|
148
|
-
toggleMenu();
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
openMenu();
|
|
152
|
-
}
|
|
153
|
-
};
|
|
154
|
-
const handleNativeSelectChange = useCallback((event) => {
|
|
155
|
-
setSelectedItems(
|
|
156
|
-
// eslint-disable-next-line
|
|
157
|
-
[...event.target.options].reduce((acc, option, index) => option.selected ? acc.concat(flatOptions[index]) : acc, []));
|
|
158
|
-
}, [flatOptions, setSelectedItems]);
|
|
159
|
-
const getOptionProps = useCallback((option, index) => ({
|
|
160
|
-
...optionProps,
|
|
161
|
-
className: optionClassName,
|
|
162
|
-
innerProps: getItemProps({
|
|
163
|
-
index,
|
|
164
|
-
item: option,
|
|
165
|
-
disabled: option.disabled,
|
|
166
|
-
onMouseDown: (event) => event.preventDefault(),
|
|
167
|
-
}),
|
|
168
|
-
multiple,
|
|
169
|
-
index,
|
|
170
|
-
option,
|
|
171
|
-
size: optionsSize,
|
|
172
|
-
disabled: option.disabled,
|
|
173
|
-
highlighted: index === highlightedIndex,
|
|
174
|
-
selected: selectedItems.includes(option),
|
|
175
|
-
dataTestId: getDataTestId(dataTestId, 'option'),
|
|
176
|
-
}), [
|
|
177
|
-
dataTestId,
|
|
178
|
-
getItemProps,
|
|
179
|
-
highlightedIndex,
|
|
180
|
-
multiple,
|
|
181
|
-
optionClassName,
|
|
182
|
-
optionProps,
|
|
183
|
-
optionsSize,
|
|
184
|
-
selectedItems,
|
|
185
|
-
]);
|
|
186
|
-
useEffect(() => {
|
|
187
|
-
if (defaultOpen)
|
|
188
|
-
openMenu();
|
|
189
|
-
}, [defaultOpen, openMenu]);
|
|
190
|
-
useEffect(() => {
|
|
191
|
-
if (openProp) {
|
|
192
|
-
openMenu();
|
|
193
|
-
}
|
|
194
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
195
|
-
}, []);
|
|
196
|
-
const calcOptionsListWidth = useCallback(() => {
|
|
197
|
-
if (listRef.current) {
|
|
198
|
-
const widthAttr = optionsListWidth === 'field' ? 'width' : 'minWidth';
|
|
199
|
-
const optionsListMinWidth = rootRef.current
|
|
200
|
-
? rootRef.current.getBoundingClientRect().width
|
|
201
|
-
: 0;
|
|
202
|
-
listRef.current.setAttribute('style', '');
|
|
203
|
-
listRef.current.style[widthAttr] = `${optionsListMinWidth}px`;
|
|
204
|
-
}
|
|
205
|
-
}, [optionsListWidth]);
|
|
206
|
-
useEffect(() => {
|
|
207
|
-
const ResizeObserver$1 = window.ResizeObserver || ResizeObserver;
|
|
208
|
-
const observer = new ResizeObserver$1(calcOptionsListWidth);
|
|
209
|
-
if (rootRef.current) {
|
|
210
|
-
observer.observe(rootRef.current);
|
|
211
|
-
}
|
|
212
|
-
return () => {
|
|
213
|
-
observer.disconnect();
|
|
214
|
-
};
|
|
215
|
-
}, [calcOptionsListWidth, open, optionsListWidth]);
|
|
216
|
-
useLayoutEffect_SAFE_FOR_SSR(calcOptionsListWidth, [
|
|
217
|
-
open,
|
|
218
|
-
optionsListWidth,
|
|
219
|
-
options,
|
|
220
|
-
selectedItems,
|
|
221
|
-
]);
|
|
222
|
-
const renderValue = useCallback(() => selectedItems.map((option) => (React.createElement("input", { type: 'hidden', name: name, value: option.key, key: option.key }))), [selectedItems, name]);
|
|
223
|
-
const renderNativeSelect = useCallback(() => {
|
|
224
|
-
const value = multiple
|
|
225
|
-
? selectedItems.map((option) => option.key)
|
|
226
|
-
: (selectedItems[0] || {}).key;
|
|
227
|
-
return (React.createElement(NativeSelect, { ...menuProps, className: styles.nativeSelect, disabled: disabled, multiple: multiple, name: name, value: value, onChange: handleNativeSelectChange, options: options }));
|
|
228
|
-
}, [multiple, selectedItems, disabled, name, handleNativeSelectChange, options, menuProps]);
|
|
229
|
-
const needRenderOptionsList = flatOptions.length > 0 || showEmptyOptionsList;
|
|
230
|
-
return (React.createElement("div", { ...getComboboxProps({
|
|
231
|
-
ref: rootRef,
|
|
232
|
-
...(disabled && { 'aria-disabled': true }),
|
|
233
|
-
className: cn(styles.component, { [styles.block]: block }, className),
|
|
234
|
-
}), onKeyDown: disabled ? undefined : handleFieldKeyDown, tabIndex: -1, "data-test-id": getDataTestId(dataTestId) },
|
|
235
|
-
nativeSelect && renderNativeSelect(),
|
|
236
|
-
React.createElement(Field, { selectedMultiple: selectedItems, selected: selectedItems[0], setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, multiple: multiple, open: open, disabled: disabled, size: size, placeholder: placeholder, label: label && React.createElement("span", { ...getLabelProps() }, label), labelView: labelView, Arrow: Arrow && React.createElement(Arrow, { open: open }), error: error, hint: hint, valueRenderer: valueRenderer, className: fieldClassName, innerProps: {
|
|
237
|
-
onBlur: handleFieldBlur,
|
|
238
|
-
onFocus: disabled ? undefined : handleFieldFocus,
|
|
239
|
-
onClick: disabled ? undefined : handleFieldClick,
|
|
240
|
-
tabIndex: disabled ? undefined : nativeSelect ? -1 : 0,
|
|
241
|
-
ref: mergeRefs([inputProps.ref]),
|
|
242
|
-
id: inputProps.id,
|
|
243
|
-
'aria-labelledby': inputProps['aria-labelledby'],
|
|
244
|
-
'aria-controls': inputProps['aria-controls'],
|
|
245
|
-
'aria-autocomplete': autocomplete
|
|
246
|
-
? inputProps['aria-autocomplete']
|
|
247
|
-
: undefined,
|
|
248
|
-
}, dataTestId: getDataTestId(dataTestId, 'field'), ...fieldProps }),
|
|
249
|
-
name && !nativeSelect && renderValue(),
|
|
250
|
-
!nativeSelect && (React.createElement(Popover, { open: open, withTransition: false, anchorElement: fieldRef.current, position: popoverPosition, preventFlip: preventFlip, popperClassName: cn(styles.popoverInner, popperClassName), update: updatePopover, zIndex: zIndexPopover }, needRenderOptionsList && (React.createElement("div", { ...menuProps, className: cn(optionsListClassName, styles.optionsList) },
|
|
251
|
-
React.createElement(OptionsList, { ...optionsListProps, optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: options, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: visibleOptions, onScroll: onScroll, dataTestId: getDataTestId(dataTestId, 'options-list') }),
|
|
252
|
-
React.createElement("div", { className: styles.optionsListBorder })))))));
|
|
253
|
-
});
|
|
254
|
-
|
|
255
|
-
export { BaseSelect as B, getDataTestId as g };
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
/// <reference types="react" />
|
|
2
|
-
import React from "react";
|
|
3
|
-
import { ReactNode, FC } from "react";
|
|
4
|
-
import { BottomSheetProps } from "@alfalab/core-components-bottom-sheet";
|
|
5
|
-
import { BaseSelectProps, OptionShape, OptionsListProps } from "./typings";
|
|
6
|
-
import { BaseModalProps, BaseModalContext } from "@alfalab/core-components-base-modal";
|
|
7
|
-
import { NavigationBarProps } from "./types-ebda875c";
|
|
8
|
-
type AdditionalMobileProps = {
|
|
9
|
-
/**
|
|
10
|
-
* Футер
|
|
11
|
-
* @deprecated Используйте bottomSheetProps.actionButton
|
|
12
|
-
*/
|
|
13
|
-
footer?: ReactNode;
|
|
14
|
-
/**
|
|
15
|
-
* Будет ли свайпаться шторка
|
|
16
|
-
* @deprecated Используйте bottomSheetProps.swipeable
|
|
17
|
-
*/
|
|
18
|
-
swipeable?: boolean;
|
|
19
|
-
/**
|
|
20
|
-
* Дополнительные пропсы шторки
|
|
21
|
-
*/
|
|
22
|
-
bottomSheetProps?: Partial<BottomSheetProps>;
|
|
23
|
-
};
|
|
24
|
-
type SelectMobileProps = Omit<BaseSelectProps, "Checkmark" | "onScroll"> & AdditionalMobileProps;
|
|
25
|
-
declare const SelectMobile: React.ForwardRefExoticComponent<Omit<BaseSelectProps, "onScroll" | "Checkmark"> & AdditionalMobileProps & React.RefAttributes<unknown>>;
|
|
26
|
-
type SelectMobileProps$0 = Omit<BaseSelectProps, "Checkmark" | "onScroll"> & {
|
|
27
|
-
/**
|
|
28
|
-
* Футер
|
|
29
|
-
* @deprecated Используйте bottomSheetProps.actionButton
|
|
30
|
-
*/
|
|
31
|
-
footer?: ReactNode;
|
|
32
|
-
/**
|
|
33
|
-
* Будет ли свайпаться шторка
|
|
34
|
-
* @deprecated Используйте bottomSheetProps.swipeable
|
|
35
|
-
*/
|
|
36
|
-
swipeable?: boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Отображать в BottomSheet
|
|
39
|
-
*/
|
|
40
|
-
isBottomSheet?: boolean;
|
|
41
|
-
/**
|
|
42
|
-
* Дополнительные пропсы шторки
|
|
43
|
-
*/
|
|
44
|
-
bottomSheetProps?: Partial<BottomSheetProps>;
|
|
45
|
-
};
|
|
46
|
-
declare const BaseSelectMobile: React.ForwardRefExoticComponent<Omit<BaseSelectProps, "onScroll" | "Checkmark"> & {
|
|
47
|
-
footer?: ReactNode;
|
|
48
|
-
swipeable?: boolean | undefined;
|
|
49
|
-
isBottomSheet?: boolean | undefined;
|
|
50
|
-
bottomSheetProps?: Partial<BottomSheetProps> | undefined;
|
|
51
|
-
} & React.RefAttributes<unknown>>;
|
|
52
|
-
declare const OptionsListWithApply: React.ForwardRefExoticComponent<OptionsListProps & {
|
|
53
|
-
showClear?: boolean | undefined;
|
|
54
|
-
onClose?: (() => void) | undefined;
|
|
55
|
-
selectedDraft?: OptionShape[] | undefined;
|
|
56
|
-
OptionsList?: React.FC<OptionsListProps & React.RefAttributes<unknown>> | undefined;
|
|
57
|
-
} & React.RefAttributes<unknown>>;
|
|
58
|
-
type ModalDesktopProps = BaseModalProps & {
|
|
59
|
-
/**
|
|
60
|
-
* Ширина модального окна
|
|
61
|
-
* @default "m"
|
|
62
|
-
*/
|
|
63
|
-
size?: "s" | "m" | "l" | "xl" | "fullscreen";
|
|
64
|
-
/**
|
|
65
|
-
* Растягивает модальное окно на весь экран
|
|
66
|
-
* @deprecated Используйте размер fullscreen
|
|
67
|
-
*/
|
|
68
|
-
fullscreen?: boolean;
|
|
69
|
-
/**
|
|
70
|
-
* Фиксирует позицию модального окна после открытия,
|
|
71
|
-
* предотвращая скачки, если контент внутри будет меняться
|
|
72
|
-
*/
|
|
73
|
-
fixedPosition?: boolean;
|
|
74
|
-
/**
|
|
75
|
-
* Управление наличием закрывающего крестика
|
|
76
|
-
* @default false
|
|
77
|
-
*/
|
|
78
|
-
hasCloser?: boolean;
|
|
79
|
-
};
|
|
80
|
-
type ModalMobileProps = Omit<ModalDesktopProps, "size" | "fixedPosition" | "fullscreen">;
|
|
81
|
-
type View = "desktop" | "mobile";
|
|
82
|
-
type TResponsiveModalContext = {
|
|
83
|
-
view: View;
|
|
84
|
-
size: NonNullable<ModalDesktopProps["size"]>;
|
|
85
|
-
};
|
|
86
|
-
type ContentProps = {
|
|
87
|
-
/**
|
|
88
|
-
* Контент
|
|
89
|
-
*/
|
|
90
|
-
children?: ReactNode;
|
|
91
|
-
/**
|
|
92
|
-
* Дополнительный класс
|
|
93
|
-
*/
|
|
94
|
-
className?: string;
|
|
95
|
-
/**
|
|
96
|
-
* Растягивает контент на всю высоту
|
|
97
|
-
*/
|
|
98
|
-
flex?: boolean;
|
|
99
|
-
};
|
|
100
|
-
type HeaderProps = Omit<NavigationBarProps, "size" | "view" | "parentRef">;
|
|
101
|
-
type FooterProps = {
|
|
102
|
-
/**
|
|
103
|
-
* Контент футера
|
|
104
|
-
*/
|
|
105
|
-
children?: ReactNode;
|
|
106
|
-
/**
|
|
107
|
-
* Дополнительный класс
|
|
108
|
-
*/
|
|
109
|
-
className?: string;
|
|
110
|
-
/**
|
|
111
|
-
* Фиксирует футер
|
|
112
|
-
*/
|
|
113
|
-
sticky?: boolean;
|
|
114
|
-
/**
|
|
115
|
-
* Выравнивание элементов футера
|
|
116
|
-
*/
|
|
117
|
-
layout?: "start" | "center" | "space-between" | "column";
|
|
118
|
-
/**
|
|
119
|
-
* Отступы между элементами футера
|
|
120
|
-
*/
|
|
121
|
-
gap?: 16 | 24 | 32;
|
|
122
|
-
};
|
|
123
|
-
declare const ModalMobile: React.ForwardRefExoticComponent<ModalMobileProps & React.RefAttributes<HTMLDivElement>> & {
|
|
124
|
-
Content: React.FC<ContentProps>;
|
|
125
|
-
Header: React.FC<HeaderProps>;
|
|
126
|
-
Footer: React.FC<FooterProps>;
|
|
127
|
-
Closer: React.FC<CloserProps>;
|
|
128
|
-
};
|
|
129
|
-
declare const Content: FC<ContentProps>;
|
|
130
|
-
declare const Modal: React.ForwardRefExoticComponent<import("@alfalab/core-components-base-modal").BaseModalProps & {
|
|
131
|
-
size?: "s" | "m" | "l" | "xl" | "fullscreen" | undefined;
|
|
132
|
-
fullscreen?: boolean | undefined;
|
|
133
|
-
fixedPosition?: boolean | undefined;
|
|
134
|
-
hasCloser?: boolean | undefined;
|
|
135
|
-
} & {
|
|
136
|
-
view: View;
|
|
137
|
-
} & React.RefAttributes<HTMLDivElement>>;
|
|
138
|
-
declare const ResponsiveContext: React.Context<TResponsiveModalContext>;
|
|
139
|
-
declare const ModalContext: import("react").Context<BaseModalContext>;
|
|
140
|
-
type SelectModalMobileProps = Omit<BaseSelectProps, 'Checkmark' | 'onScroll'>;
|
|
141
|
-
declare const SelectModalMobile: React.ForwardRefExoticComponent<SelectModalMobileProps & React.RefAttributes<unknown>>;
|
|
142
|
-
export { AdditionalMobileProps, SelectMobileProps, SelectMobile, BaseSelectMobile, OptionsListWithApply, ModalMobile, Content, Modal, ResponsiveContext, ModalContext, SelectModalMobileProps, SelectModalMobile };
|