@alfalab/core-components-select 17.5.1 → 17.6.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.
Files changed (166) hide show
  1. package/components/arrow/Component.js +1 -1
  2. package/components/arrow/index.css +3 -3
  3. package/components/base-checkmark/Component.js +1 -1
  4. package/components/base-checkmark/index.css +4 -4
  5. package/components/base-option/Component.js +1 -1
  6. package/components/base-option/index.css +15 -15
  7. package/components/base-select/Component.js +24 -12
  8. package/components/base-select/index.css +11 -11
  9. package/components/base-select/mobile.css +12 -12
  10. package/components/checkmark/Component.js +1 -1
  11. package/components/checkmark/index.css +10 -10
  12. package/components/checkmark-mobile/Component.js +1 -1
  13. package/components/checkmark-mobile/index.css +6 -6
  14. package/components/field/Component.js +1 -1
  15. package/components/field/index.css +12 -12
  16. package/components/footer/Component.js +1 -1
  17. package/components/footer/index.css +5 -5
  18. package/components/optgroup/Component.js +1 -1
  19. package/components/optgroup/index.css +6 -6
  20. package/components/option/Component.js +1 -1
  21. package/components/option/index.css +19 -19
  22. package/components/options-list/Component.js +1 -1
  23. package/components/options-list/index.css +10 -10
  24. package/components/search/Component.js +1 -1
  25. package/components/search/index.css +2 -2
  26. package/components/virtual-options-list/Component.js +1 -1
  27. package/components/virtual-options-list/index.css +15 -15
  28. package/cssm/components/base-select/Component.js +22 -10
  29. package/cssm/{hook-546b2479.js → hook-052c1a2e.js} +20 -8
  30. package/{hook-64a8061f.d.ts → cssm/hook-2f4e96b2.d.ts} +9 -7
  31. package/cssm/mobile/Component.mobile.js +7 -9
  32. package/cssm/presets/index.d.ts +1 -1
  33. package/cssm/presets/index.js +1 -1
  34. package/cssm/presets/useSelectWithApply/hook.js +1 -1
  35. package/cssm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  36. package/cssm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +2 -2
  37. package/cssm/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css +1 -1
  38. package/cssm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  39. package/cssm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  40. package/cssm/shared/index.js +2 -1
  41. package/cssm/typings.d.ts +3 -1
  42. package/cssm/utils.d.ts +3 -2
  43. package/cssm/utils.js +24 -9
  44. package/esm/components/arrow/Component.js +1 -1
  45. package/esm/components/arrow/index.css +3 -3
  46. package/esm/components/base-checkmark/Component.js +1 -1
  47. package/esm/components/base-checkmark/index.css +4 -4
  48. package/esm/components/base-option/Component.js +1 -1
  49. package/esm/components/base-option/index.css +15 -15
  50. package/esm/components/base-select/Component.js +25 -13
  51. package/esm/components/base-select/index.css +11 -11
  52. package/esm/components/base-select/mobile.css +12 -12
  53. package/esm/components/checkmark/Component.js +1 -1
  54. package/esm/components/checkmark/index.css +10 -10
  55. package/esm/components/checkmark-mobile/Component.js +1 -1
  56. package/esm/components/checkmark-mobile/index.css +6 -6
  57. package/esm/components/field/Component.js +1 -1
  58. package/esm/components/field/index.css +12 -12
  59. package/esm/components/footer/Component.js +1 -1
  60. package/esm/components/footer/index.css +5 -5
  61. package/esm/components/optgroup/Component.js +1 -1
  62. package/esm/components/optgroup/index.css +6 -6
  63. package/esm/components/option/Component.js +1 -1
  64. package/esm/components/option/index.css +19 -19
  65. package/esm/components/options-list/Component.js +1 -1
  66. package/esm/components/options-list/index.css +10 -10
  67. package/esm/components/search/Component.js +1 -1
  68. package/esm/components/search/index.css +2 -2
  69. package/esm/components/virtual-options-list/Component.js +1 -1
  70. package/esm/components/virtual-options-list/index.css +15 -15
  71. package/{modern/hook-64a8061f.d.ts → esm/hook-2f4e96b2.d.ts} +9 -7
  72. package/esm/{hook-699ea205.js → hook-8bbe812b.js} +21 -9
  73. package/esm/mobile/Component.mobile.js +7 -9
  74. package/esm/presets/index.d.ts +1 -1
  75. package/esm/presets/index.js +1 -1
  76. package/esm/presets/useSelectWithApply/hook.js +1 -1
  77. package/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  78. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +3 -3
  79. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  80. package/esm/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  81. package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  82. package/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  83. package/esm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  84. package/esm/presets/useSelectWithLoading/hook.js +1 -1
  85. package/esm/presets/useSelectWithLoading/index.css +2 -2
  86. package/esm/shared/index.js +2 -2
  87. package/esm/typings.d.ts +3 -1
  88. package/esm/utils.d.ts +3 -2
  89. package/esm/utils.js +24 -10
  90. package/{cssm/hook-64a8061f.d.ts → hook-2f4e96b2.d.ts} +9 -7
  91. package/{hook-23a1acb8.js → hook-4d5fa450.js} +20 -8
  92. package/mobile/Component.mobile.js +7 -9
  93. package/modern/components/arrow/Component.js +1 -1
  94. package/modern/components/arrow/index.css +3 -3
  95. package/modern/components/base-checkmark/Component.js +1 -1
  96. package/modern/components/base-checkmark/index.css +4 -4
  97. package/modern/components/base-option/Component.js +1 -1
  98. package/modern/components/base-option/index.css +15 -15
  99. package/modern/components/base-select/Component.js +13 -4
  100. package/modern/components/base-select/index.css +11 -11
  101. package/modern/components/base-select/mobile.css +12 -12
  102. package/modern/components/checkmark/Component.js +1 -1
  103. package/modern/components/checkmark/index.css +10 -10
  104. package/modern/components/checkmark-mobile/Component.js +1 -1
  105. package/modern/components/checkmark-mobile/index.css +6 -6
  106. package/modern/components/field/Component.js +1 -1
  107. package/modern/components/field/index.css +12 -12
  108. package/modern/components/footer/Component.js +1 -1
  109. package/modern/components/footer/index.css +5 -5
  110. package/modern/components/optgroup/Component.js +1 -1
  111. package/modern/components/optgroup/index.css +6 -6
  112. package/modern/components/option/Component.js +1 -1
  113. package/modern/components/option/index.css +19 -19
  114. package/modern/components/options-list/Component.js +1 -1
  115. package/modern/components/options-list/index.css +10 -10
  116. package/modern/components/search/Component.js +1 -1
  117. package/modern/components/search/index.css +2 -2
  118. package/modern/components/virtual-options-list/Component.js +1 -1
  119. package/modern/components/virtual-options-list/index.css +15 -15
  120. package/{esm/hook-64a8061f.d.ts → modern/hook-2f4e96b2.d.ts} +9 -7
  121. package/modern/{hook-b0f48fdd.js → hook-6a076c91.js} +14 -3
  122. package/modern/mobile/Component.mobile.js +8 -10
  123. package/modern/presets/index.d.ts +1 -1
  124. package/modern/presets/index.js +1 -1
  125. package/modern/presets/useSelectWithApply/hook.js +1 -1
  126. package/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  127. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +3 -3
  128. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  129. package/modern/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  130. package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  131. package/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  132. package/modern/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  133. package/modern/presets/useSelectWithLoading/hook.js +1 -1
  134. package/modern/presets/useSelectWithLoading/index.css +2 -2
  135. package/modern/shared/index.js +2 -2
  136. package/modern/typings.d.ts +3 -1
  137. package/modern/utils.d.ts +3 -2
  138. package/modern/utils.js +23 -10
  139. package/package.json +1 -1
  140. package/presets/index.d.ts +1 -1
  141. package/presets/index.js +1 -1
  142. package/presets/useSelectWithApply/hook.js +1 -1
  143. package/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  144. package/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +3 -3
  145. package/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  146. package/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  147. package/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  148. package/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  149. package/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  150. package/presets/useSelectWithLoading/hook.js +1 -1
  151. package/presets/useSelectWithLoading/index.css +2 -2
  152. package/shared/index.js +2 -1
  153. package/src/components/base-select/Component.tsx +28 -3
  154. package/src/mobile/Component.mobile.tsx +8 -18
  155. package/src/presets/useSelectWithApply/hook.tsx +26 -4
  156. package/src/presets/useSelectWithApply/options-list-with-apply/footer/Component.tsx +2 -0
  157. package/src/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css +1 -1
  158. package/src/typings.ts +2 -0
  159. package/src/utils.ts +26 -8
  160. package/typings.d.ts +3 -1
  161. package/utils.d.ts +3 -2
  162. package/utils.js +24 -9
  163. /package/cssm/{hook-546b2479.d.ts → hook-052c1a2e.d.ts} +0 -0
  164. /package/esm/{hook-699ea205.d.ts → hook-8bbe812b.d.ts} +0 -0
  165. /package/{hook-23a1acb8.d.ts → hook-4d5fa450.d.ts} +0 -0
  166. /package/modern/{hook-b0f48fdd.d.ts → hook-6a076c91.d.ts} +0 -0
@@ -1,4 +1,4 @@
1
- /* hash: 1voyl */
1
+ /* hash: 1wp5b */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-neutral-300: #e7e8eb;
@@ -29,32 +29,32 @@
29
29
  /* checkmark */
30
30
 
31
31
  /* optgroup */
32
- } .select__optionsList_r1501 {
32
+ } .select__optionsList_14c2k {
33
33
  width: 100%;
34
34
  outline: none;
35
35
  box-sizing: border-box;
36
36
  position: relative;
37
- } .select__optionsListHeader_r1501 {
37
+ } .select__optionsListHeader_14c2k {
38
38
  box-sizing: border-box;
39
39
  border-bottom: 1px solid transparent;
40
40
  transition: border-color 0.2s ease
41
- } .select__optionsListHeader_r1501.select__headerHighlighted_r1501 {
41
+ } .select__optionsListHeader_14c2k.select__headerHighlighted_14c2k {
42
42
  border-bottom-color: var(--color-light-neutral-300);
43
- } .select__optionsListFooter_r1501 {
43
+ } .select__optionsListFooter_14c2k {
44
44
  position: sticky;
45
45
  bottom: 0;
46
46
  box-sizing: border-box;
47
47
  border-top: 1px solid transparent;
48
48
  transition: border-color 0.2s ease
49
- } .select__optionsListFooter_r1501.select__withBorder_r1501 {
49
+ } .select__optionsListFooter_14c2k.select__withBorder_14c2k {
50
50
  border-top-color: var(--color-light-neutral-300);
51
- } .select__scrollable_r1501 {
51
+ } .select__scrollable_14c2k {
52
52
  overflow: auto;
53
53
  width: 100%;
54
- } .select__emptyPlaceholder_r1501 {
54
+ } .select__emptyPlaceholder_14c2k {
55
55
  padding: var(--gap-m) var(--gap-s);
56
56
  color: var(--select-options-list-empty-placeholder-color);
57
- } .select__size-64_r1501 .select__emptyPlaceholder_r1501,
58
- .select__size-72_r1501 .select__emptyPlaceholder_r1501 {
57
+ } .select__size-64_14c2k .select__emptyPlaceholder_14c2k,
58
+ .select__size-72_14c2k .select__emptyPlaceholder_14c2k {
59
59
  padding: var(--gap-xl) var(--gap-m);
60
60
  }
@@ -3,7 +3,7 @@ import cn from 'classnames';
3
3
  import { Input } from '@alfalab/core-components-input/modern';
4
4
  import { MagnifierMIcon } from '@alfalab/icons-glyph/MagnifierMIcon';
5
5
 
6
- const styles = {"component":"select__component_cq2to"};
6
+ const styles = {"component":"select__component_14dac"};
7
7
  require('./index.css')
8
8
 
9
9
  const Search = forwardRef(({ clear = true, placeholder = 'Поиск', className, leftAddons = React.createElement(MagnifierMIcon, { color: '#86868A' }), ...restProps }, ref) => (React.createElement(Input, { ref: ref, className: cn(styles.component, className), placeholder: placeholder, leftAddons: leftAddons, clear: clear, ...restProps })));
@@ -1,4 +1,4 @@
1
- /* hash: kmrba */
1
+ /* hash: 4r7qu */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
4
4
  } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -23,6 +23,6 @@
23
23
  /* checkmark */
24
24
 
25
25
  /* optgroup */
26
- } .select__component_cq2to.select__component_cq2to {
26
+ } .select__component_14dac.select__component_14dac {
27
27
  width: auto;
28
28
  }
@@ -9,7 +9,7 @@ import { SIZE_TO_CLASSNAME_MAP, DEFAULT_VISIBLE_OPTIONS } from '../../consts.js'
9
9
  import { usePrevious, lastIndexOf, useVisibleOptions, isGroup } from '../../utils.js';
10
10
  import { Optgroup } from '../optgroup/Component.js';
11
11
 
12
- const styles = {"virtualOptionsList":"select__virtualOptionsList_1sq6j","virtualOptionsListHeader":"select__virtualOptionsListHeader_1sq6j","virtualOptionsListFooter":"select__virtualOptionsListFooter_1sq6j","withBorder":"select__withBorder_1sq6j","scrollable":"select__scrollable_1sq6j","inner":"select__inner_1sq6j","virtualRow":"select__virtualRow_1sq6j","highlighted":"select__highlighted_1sq6j","emptyPlaceholder":"select__emptyPlaceholder_1sq6j","size-64":"select__size-64_1sq6j","size-72":"select__size-72_1sq6j"};
12
+ const styles = {"virtualOptionsList":"select__virtualOptionsList_p181u","virtualOptionsListHeader":"select__virtualOptionsListHeader_p181u","virtualOptionsListFooter":"select__virtualOptionsListFooter_p181u","withBorder":"select__withBorder_p181u","scrollable":"select__scrollable_p181u","inner":"select__inner_p181u","virtualRow":"select__virtualRow_p181u","highlighted":"select__highlighted_p181u","emptyPlaceholder":"select__emptyPlaceholder_p181u","size-64":"select__size-64_p181u","size-72":"select__size-72_p181u"};
13
13
  require('./index.css')
14
14
 
15
15
  const VirtualOptionsList = forwardRef(({ size = 48, flatOptions = [], highlightedIndex = -1, optionGroupClassName, className, getOptionProps, Option, open, options = [], Optgroup: Optgroup$1 = Optgroup, dataTestId, emptyPlaceholder, visibleOptions = DEFAULT_VISIBLE_OPTIONS, header, footer, showFooter = true, optionsListWidth, onScroll, nativeScrollbar: nativeScrollbarProp, setHighlightedIndex, selectedItems, setSelectedItems, search, multiple, }, ref) => {
@@ -1,4 +1,4 @@
1
- /* hash: hox9a */
1
+ /* hash: 1a2lv */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-border-primary: #d5d6dc;
@@ -35,35 +35,35 @@
35
35
  /* checkmark */
36
36
 
37
37
  /* optgroup */
38
- } .select__virtualOptionsList_1sq6j {
38
+ } .select__virtualOptionsList_p181u {
39
39
  width: 100%;
40
40
  outline: none;
41
41
  box-sizing: border-box;
42
42
  position: sticky;
43
43
  justify-content: space-between;
44
- } .select__virtualOptionsListHeader_1sq6j {
44
+ } .select__virtualOptionsListHeader_p181u {
45
45
  box-sizing: border-box;
46
46
  border-bottom: 1px solid var(--color-light-neutral-300);
47
- } .select__virtualOptionsListFooter_1sq6j {
47
+ } .select__virtualOptionsListFooter_p181u {
48
48
  position: sticky;
49
49
  bottom: 0;
50
50
  box-sizing: border-box;
51
51
  border-top: 1px solid transparent
52
- } .select__virtualOptionsListFooter_1sq6j.select__withBorder_1sq6j {
52
+ } .select__virtualOptionsListFooter_p181u.select__withBorder_p181u {
53
53
  border-top: 1px solid var(--color-light-neutral-300);
54
- } .select__scrollable_1sq6j {
54
+ } .select__scrollable_p181u {
55
55
  position: relative;
56
56
  overflow: auto;
57
57
  width: 100%;
58
- } .select__inner_1sq6j {
58
+ } .select__inner_p181u {
59
59
  position: relative;
60
60
  width: 100%;
61
- } .select__virtualRow_1sq6j {
61
+ } .select__virtualRow_p181u {
62
62
  position: absolute;
63
63
  top: 0;
64
64
  left: 0;
65
65
  width: 100%
66
- } .select__virtualRow_1sq6j:before {
66
+ } .select__virtualRow_p181u:before {
67
67
  content: '';
68
68
  position: absolute;
69
69
  z-index: 1;
@@ -73,16 +73,16 @@
73
73
  height: 1px;
74
74
  background: var(--select-option-divider-background);
75
75
  display: var(--select-option-divider-display);
76
- } .select__virtualRow_1sq6j:first-child:before {
76
+ } .select__virtualRow_p181u:first-child:before {
77
77
  display: none;
78
- } .select__highlighted_1sq6j:before,
79
- .select__highlighted_1sq6j + .select__virtualRow_1sq6j:before {
78
+ } .select__highlighted_p181u:before,
79
+ .select__highlighted_p181u + .select__virtualRow_p181u:before {
80
80
  display: none;
81
- } .select__emptyPlaceholder_1sq6j {
81
+ } .select__emptyPlaceholder_p181u {
82
82
  padding: var(--gap-m) var(--gap-s);
83
83
  color: var(--select-options-list-empty-placeholder-color);
84
84
  flex: 1;
85
- } .select__size-64_1sq6j .select__emptyPlaceholder_1sq6j,
86
- .select__size-72_1sq6j .select__emptyPlaceholder_1sq6j {
85
+ } .select__size-64_p181u .select__emptyPlaceholder_p181u,
86
+ .select__size-72_p181u .select__emptyPlaceholder_p181u {
87
87
  padding: var(--gap-xl) var(--gap-m);
88
88
  }
@@ -45,14 +45,12 @@ type UseSelectWithApplyProps = {
45
45
  declare const SELECT_ALL_KEY = "select_all";
46
46
  declare function useSelectWithApply({ options, selected, onChange, OptionsList, optionsListProps, showClear, showSelectAll, showHeaderWithSelectAll, showSearch, searchProps, }: UseSelectWithApplyProps): {
47
47
  OptionsList: import("react").ForwardRefExoticComponent<import("./typings").OptionsListProps & {
48
- /**
49
- * Обработчик выбора
50
- */
51
48
  showClear?: boolean | undefined;
52
49
  onClose?: (() => void) | undefined;
53
- selectedDraft?: OptionShape[] | undefined; /**
54
- * Компонент выпадающего меню
50
+ /**
51
+ * Обработчик выбора
55
52
  */
53
+ selectedDraft?: OptionShape[] | undefined;
56
54
  OptionsList?: import("react").FC<import("./typings").OptionsListProps & import("react").RefAttributes<HTMLDivElement>> | undefined;
57
55
  Footer?: import("react").FC<import("./presets/useSelectWithApply/options-list-with-apply/footer/Component").FooterProps> | undefined;
58
56
  Header?: import("react").FC<import("./presets/useSelectWithApply/options-list-with-apply/header/Component").HeaderProps> | undefined;
@@ -83,13 +81,15 @@ declare function useSelectWithApply({ options, selected, onChange, OptionsList,
83
81
  })[];
84
82
  onChange: (payload: import("./typings").BaseSelectChangePayload) => void;
85
83
  selected: string | OptionShape | (string | OptionShape)[] | null | undefined;
86
- showSearch: boolean | undefined;
84
+ showSearch: boolean;
87
85
  searchProps: {
88
86
  value: string;
89
87
  onChange: ((value: string) => void) | undefined;
90
88
  componentProps?: import("./typings").SearchProps | undefined;
91
89
  accessor?: ((option: OptionShape) => string) | undefined;
92
90
  filterFn?: ((optionText: string, search: string) => boolean) | undefined;
91
+ filterGroup?: boolean | undefined;
92
+ groupAccessor?: ((group: import("./typings").GroupShape) => string | undefined) | undefined;
93
93
  } | undefined;
94
94
  originalProps: {
95
95
  options: (OptionShape | import("./typings").GroupShape)[];
@@ -100,13 +100,15 @@ declare function useSelectWithApply({ options, selected, onChange, OptionsList,
100
100
  showClear: boolean;
101
101
  showSelectAll: boolean;
102
102
  showHeaderWithSelectAll: boolean;
103
- showSearch: boolean | undefined;
103
+ showSearch: boolean;
104
104
  searchProps: {
105
105
  componentProps?: import("./typings").SearchProps | undefined;
106
106
  accessor?: ((option: OptionShape) => string) | undefined;
107
107
  filterFn?: ((optionText: string, search: string) => boolean) | undefined;
108
108
  value?: string | undefined;
109
109
  onChange?: ((value: string) => void) | undefined;
110
+ filterGroup?: boolean | undefined;
111
+ groupAccessor?: ((group: import("./typings").GroupShape) => string | undefined) | undefined;
110
112
  };
111
113
  };
112
114
  };
@@ -1,6 +1,6 @@
1
1
  import React, { forwardRef, useCallback, useEffect, useState, useMemo, useRef } from 'react';
2
2
  import deepEqual from 'deep-equal';
3
- import { defaultAccessor, defaultFilterFn, processOptions } from './utils.js';
3
+ import { defaultAccessor, defaultFilterFn, defaultGroupAccessor, processOptions, isGroup } from './utils.js';
4
4
  import { OptionsList } from './components/options-list/Component.js';
5
5
  import { DEFAULT_VISIBLE_OPTIONS } from './consts.js';
6
6
  import { Footer } from './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
@@ -50,14 +50,25 @@ const OptionsListWithApply = forwardRef(({ toggleMenu, getOptionProps: defaultGe
50
50
 
51
51
  const SELECT_ALL_KEY = 'select_all';
52
52
  const selectAllOption = { key: SELECT_ALL_KEY, content: 'Выбрать все' };
53
- function useSelectWithApply({ options, selected, onChange = () => null, OptionsList, optionsListProps = {}, showClear = true, showSelectAll = false, showHeaderWithSelectAll = false, showSearch, searchProps = {}, }) {
53
+ function useSelectWithApply({ options, selected, onChange = () => null, OptionsList, optionsListProps = {}, showClear = true, showSelectAll = false, showHeaderWithSelectAll = false, showSearch = false, searchProps = {}, }) {
54
54
  const [searchState, setSearchState] = useState('');
55
55
  const [search, setSearch] = typeof searchProps?.value === 'string'
56
56
  ? [searchProps.value, searchProps.onChange]
57
57
  : [searchState, setSearchState];
58
58
  const accessor = searchProps.accessor || defaultAccessor;
59
59
  const filterFn = searchProps.filterFn || defaultFilterFn;
60
- const { flatOptions, selectedOptions } = useMemo(() => processOptions(options, selected, showSearch ? (option) => filterFn(accessor(option), search) : undefined), [filterFn, accessor, options, search, selected, showSearch]);
60
+ const groupAccessor = searchProps.groupAccessor ?? defaultGroupAccessor;
61
+ const filterGroup = searchProps.filterGroup ?? false;
62
+ const { flatOptions, selectedOptions } = useMemo(() => processOptions(options, selected, showSearch
63
+ ? (option) => {
64
+ if (isGroup(option)) {
65
+ const groupAccessorValue = groupAccessor(option);
66
+ return (typeof groupAccessorValue === 'string' &&
67
+ filterFn(groupAccessorValue, search));
68
+ }
69
+ return filterFn(accessor(option), search);
70
+ }
71
+ : undefined, filterGroup), [options, selected, showSearch, filterGroup, filterFn, accessor, search, groupAccessor]);
61
72
  const [selectedDraft, setSelectedDraft] = useState(selectedOptions);
62
73
  const selectedOptionsRef = useRef(selectedOptions);
63
74
  const handleApply = () => {
@@ -11,15 +11,13 @@ import { Option } from '../components/option/Component.js';
11
11
  import { OptionsList } from '../components/options-list/Component.js';
12
12
  import { Search } from '../components/search/Component.js';
13
13
  import { VirtualOptionsList } from '../components/virtual-options-list/Component.js';
14
- import { u as useSelectWithApply } from '../hook-b0f48fdd.js';
14
+ import { u as useSelectWithApply } from '../hook-6a076c91.js';
15
15
  import { Header } from '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
16
16
 
17
17
  const VIRTUAL_OPTIONS_LIST_THRESHOLD = 30;
18
- const SelectMobile = forwardRef(({ autocomplete = false, multiple = false, allowUnselect = false, disabled = false, closeOnSelect = !multiple, circularNavigation = false, defaultOpen = false, open: openProp, size = 56, optionsSize = 56, fieldProps = {}, optionProps = {}, optionsListProps = {}, Arrow: Arrow$1 = Arrow, Field: Field$1 = Field, Optgroup: Optgroup$1 = Optgroup, Option: Option$1 = Option, Search: Search$1 = Search, selected, isBottomSheet = true, options, OptionsList: OptionsList$1 = options.length > VIRTUAL_OPTIONS_LIST_THRESHOLD
18
+ const SelectMobile = forwardRef(({ autocomplete = false, multiple = false, allowUnselect = false, disabled = false, closeOnSelect = !multiple, circularNavigation = false, defaultOpen = false, open: openProp, size = 56, optionsSize = 56, fieldProps = {}, optionProps = {}, optionsListProps = {}, Arrow: Arrow$1 = Arrow, Field: Field$1 = Field, Optgroup: Optgroup$1 = Optgroup, Option: Option$1 = Option, Search: Search$1 = Search, selected, options, OptionsList: OptionsList$1 = options.length > VIRTUAL_OPTIONS_LIST_THRESHOLD
19
19
  ? VirtualOptionsList
20
20
  : OptionsList, onChange, showClear = true, showSelectAll, showHeaderWithSelectAll, useWithApplyHook = multiple, showSearch, searchProps, ...restProps }, ref) => {
21
- const typedRestBottomSheetProps = restProps;
22
- const typedRestModalProps = restProps;
23
21
  const applyProps = useSelectWithApply({
24
22
  optionsListProps: {
25
23
  ...optionsListProps,
@@ -38,19 +36,19 @@ const SelectMobile = forwardRef(({ autocomplete = false, multiple = false, allow
38
36
  return (React.createElement(BaseSelect, { ref: ref, view: 'mobile', autocomplete: autocomplete, multiple: multiple, allowUnselect: allowUnselect, disabled: disabled, closeOnSelect: closeOnSelect, circularNavigation: circularNavigation, defaultOpen: defaultOpen, open: openProp, size: size, optionsSize: optionsSize, fieldProps: {
39
37
  FormControlComponent: FormControlMobile,
40
38
  ...fieldProps,
41
- }, optionProps: optionProps, Arrow: Arrow$1, Field: Field$1, Optgroup: Optgroup$1, Option: Option$1, Search: Search$1, isBottomSheet: isBottomSheet, options: options, selected: selected, onChange: onChange, OptionsList: OptionsList$1, showSearch: showSearch, searchProps: searchProps, BottomSheet: BottomSheet, ModalMobile: ModalMobile, ...(isBottomSheet
39
+ }, optionProps: optionProps, Arrow: Arrow$1, Field: Field$1, Optgroup: Optgroup$1, Option: Option$1, Search: Search$1, options: options, selected: selected, onChange: onChange, OptionsList: OptionsList$1, showSearch: showSearch, searchProps: searchProps, BottomSheet: BottomSheet, ModalMobile: ModalMobile, optionsListProps: optionsListProps, ...restProps, ...(restProps.isBottomSheet === false
42
40
  ? {
43
- bottomSheetProps: {
41
+ modalHeaderProps: {
44
42
  bottomAddons,
45
- ...typedRestBottomSheetProps.bottomSheetProps,
43
+ ...restProps.modalHeaderProps,
46
44
  },
47
45
  }
48
46
  : {
49
- modalHeaderProps: {
47
+ bottomSheetProps: {
50
48
  bottomAddons,
51
- ...typedRestModalProps.modalHeaderProps,
49
+ ...restProps.bottomSheetProps,
52
50
  },
53
- }), optionsListProps: optionsListProps, ...restProps, ...(useWithApplyHook && applyProps) }));
51
+ }), ...(useWithApplyHook && applyProps) }));
54
52
  });
55
53
 
56
54
  export { SelectMobile };
@@ -1,3 +1,3 @@
1
1
  export * from "./useSelectWithLoading/hook";
2
2
  export * from "./useLazyLoading/hook";
3
- export * from "../hook-64a8061f";
3
+ export * from "../hook-2f4e96b2";
@@ -1,3 +1,3 @@
1
1
  export { useSelectWithLoading } from './useSelectWithLoading/hook.js';
2
2
  export { useLazyLoading } from './useLazyLoading/hook.js';
3
- export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-b0f48fdd.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-6a076c91.js';
@@ -1,4 +1,4 @@
1
1
  import 'react';
2
2
  import 'deep-equal';
3
3
  import '../../utils.js';
4
- export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-b0f48fdd.js';
4
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-6a076c91.js';
@@ -1,6 +1,6 @@
1
1
  import 'react';
2
2
  import '../../../components/options-list/Component.js';
3
3
  import '../../../consts.js';
4
- export { O as OptionsListWithApply } from '../../../hook-b0f48fdd.js';
4
+ export { O as OptionsListWithApply } from '../../../hook-6a076c91.js';
5
5
  import './footer/Component.js';
6
6
  import './header/Component.js';
@@ -2,13 +2,13 @@ import React from 'react';
2
2
  import { ButtonDesktop } from '@alfalab/core-components-button/modern/desktop';
3
3
  import { getDataTestId } from '@alfalab/core-components-shared/modern';
4
4
 
5
- const styles = {"footer":"select__footer_mtsft"};
5
+ const styles = {"footer":"select__footer_1i5y0","button":"select__button_1i5y0"};
6
6
  require('./index.css')
7
7
 
8
8
  const Footer = ({ handleApply, handleClear, showClear, selectedDraft = [], dataTestId, }) => (React.createElement("div", {
9
9
  // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
10
10
  tabIndex: 0, className: styles.footer },
11
- React.createElement(ButtonDesktop, { size: 32, view: 'primary', onClick: handleApply, dataTestId: getDataTestId(dataTestId, 'apply') }, "\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C"),
12
- showClear && selectedDraft.length > 0 && (React.createElement(ButtonDesktop, { size: 32, view: 'secondary', onClick: handleClear, dataTestId: getDataTestId(dataTestId, 'clear') }, "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C"))));
11
+ React.createElement(ButtonDesktop, { size: 32, view: 'primary', onClick: handleApply, dataTestId: getDataTestId(dataTestId, 'apply'), className: styles.button }, "\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C"),
12
+ showClear && selectedDraft.length > 0 && (React.createElement(ButtonDesktop, { size: 32, view: 'secondary', onClick: handleClear, dataTestId: getDataTestId(dataTestId, 'clear'), className: styles.button }, "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C"))));
13
13
 
14
14
  export { Footer };
@@ -1,4 +1,4 @@
1
- /* hash: 1atn7 */
1
+ /* hash: 467s1 */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root {
4
4
  --color-light-bg-primary: #fff; /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -17,10 +17,10 @@
17
17
  --gap-s: 12px;
18
18
  } :root {
19
19
  } :root {
20
- } .select__footer_mtsft {
20
+ } .select__footer_1i5y0 {
21
21
  background-color: var(--color-light-bg-primary);
22
22
  padding: var(--gap-s);
23
23
  outline: none
24
- } .select__footer_mtsft > * + * {
24
+ } .select__footer_1i5y0 > .select__button_1i5y0 + .select__button_1i5y0 {
25
25
  margin-left: var(--gap-xs);
26
26
  }
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import cn from 'classnames';
3
3
  import { Checkbox } from '@alfalab/core-components-checkbox/modern';
4
4
 
5
- const styles = {"desktop":"select__desktop_1d88n","mobile":"select__mobile_1d88n"};
5
+ const styles = {"desktop":"select__desktop_14hbg","mobile":"select__mobile_14hbg"};
6
6
  require('./index.css')
7
7
 
8
8
  const Header = ({ onChange, checked, indeterminate, mobile }) => (React.createElement("div", { className: cn({ [styles.desktop]: !mobile, [styles.mobile]: mobile }) },
@@ -1,4 +1,4 @@
1
- /* hash: aayk5 */
1
+ /* hash: 7p34l */
2
2
  :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
3
3
  } /* deprecated */ :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
4
4
  } :root { /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */ /* deprecated */
@@ -16,8 +16,8 @@
16
16
  --gap-s: 12px;
17
17
  } :root {
18
18
  } :root {
19
- } .select__desktop_1d88n {
19
+ } .select__desktop_14hbg {
20
20
  padding: var(--gap-s);
21
- } .select__mobile_1d88n {
21
+ } .select__mobile_14hbg {
22
22
  padding: var(--gap-s) var(--gap-xs);
23
23
  }
@@ -1 +1 @@
1
- export * from "../../../hook-b0f48fdd";
1
+ export * from "../../../hook-6a076c91";
@@ -1 +1 @@
1
- export { O as OptionsListWithApply } from '../../../hook-b0f48fdd.js';
1
+ export { O as OptionsListWithApply } from '../../../hook-6a076c91.js';
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { Skeleton } from '@alfalab/core-components-skeleton/modern';
3
3
  import { Option } from '../../components/option/Component.js';
4
4
 
5
- const styles = {"skeleton":"select__skeleton_tq0ek"};
5
+ const styles = {"skeleton":"select__skeleton_170xy"};
6
6
  require('./index.css')
7
7
 
8
8
  function useSelectWithLoading({ loading = false, visibleOptions = 6, Option: Option$1 = Option, }) {
@@ -1,5 +1,5 @@
1
- /* hash: gk7un */
2
- .select__skeleton_tq0ek {
1
+ /* hash: hkekb */
2
+ .select__skeleton_170xy {
3
3
  position: absolute;
4
4
  top: 50%;
5
5
  transform: translateY(-50%);
@@ -1,7 +1,7 @@
1
1
  export { useSelectWithLoading } from '../presets/useSelectWithLoading/hook.js';
2
2
  export { useLazyLoading } from '../presets/useLazyLoading/hook.js';
3
- export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-b0f48fdd.js';
4
- export { defaultAccessor, defaultFilterFn, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions } from '../utils.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-6a076c91.js';
4
+ export { defaultAccessor, defaultFilterFn, defaultGroupAccessor, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions } from '../utils.js';
5
5
  export { Option } from '../components/option/Component.js';
6
6
  export { BaseOption } from '../components/base-option/Component.js';
7
7
  export { OptionsList } from '../components/options-list/Component.js';
@@ -5,7 +5,7 @@ import { InputProps } from "@alfalab/core-components-input";
5
5
  import { ModalProps } from "@alfalab/core-components-modal";
6
6
  import { ModalFooterProps, ModalHeaderProps } from "@alfalab/core-components-modal/shared";
7
7
  import { PopoverProps } from "@alfalab/core-components-popover";
8
- import { UseSelectWithApplyProps } from "./hook-64a8061f";
8
+ import { UseSelectWithApplyProps } from "./hook-2f4e96b2";
9
9
  type AnyObject = Record<string, any>;
10
10
  type OptionShape = {
11
11
  /**
@@ -237,6 +237,8 @@ type BaseSelectProps = {
237
237
  filterFn?: (optionText: string, search: string) => boolean;
238
238
  value?: string;
239
239
  onChange?: (value: string) => void;
240
+ filterGroup?: boolean;
241
+ groupAccessor?: (group: GroupShape) => string | undefined;
240
242
  };
241
243
  /**
242
244
  * Обработчик выбора
package/modern/utils.d.ts CHANGED
@@ -6,7 +6,7 @@ declare const joinOptions: ({ selected, selectedMultiple, }: {
6
6
  selected?: OptionShape | undefined;
7
7
  selectedMultiple?: OptionShape[] | undefined;
8
8
  }) => ReactNode[] | null;
9
- declare function processOptions(options: BaseSelectProps['options'], selected?: BaseSelectProps['selected'], filterFn?: (option: OptionShape) => boolean): {
9
+ declare function processOptions(options: BaseSelectProps['options'], selected?: BaseSelectProps['selected'], filterFn?: (option: OptionShape | GroupShape) => boolean, filterGroup?: boolean): {
10
10
  filteredOptions: (OptionShape | GroupShape)[];
11
11
  flatOptions: OptionShape[];
12
12
  selectedOptions: OptionShape[];
@@ -35,6 +35,7 @@ type useVisibleOptionsArgs = {
35
35
  };
36
36
  declare function useVisibleOptions({ visibleOptions, listRef, styleTargetRef, open, invalidate, }: useVisibleOptionsArgs): void;
37
37
  declare function defaultFilterFn(optionText: string, search: string): boolean;
38
+ declare function defaultGroupAccessor(option: GroupShape): string | undefined;
38
39
  declare function defaultAccessor(option: OptionShape): string;
39
40
  declare function usePrevious<T>(value: T): T | undefined;
40
41
  declare const lastIndexOf: <T>(array: T[], predicate: (item: T) => boolean) => number;
@@ -64,4 +65,4 @@ declare function getSelectTestIds(dataTestId: string): {
64
65
  modalHeader: string;
65
66
  modalContent: string;
66
67
  };
67
- export { isGroup, isOptionShape, joinOptions, processOptions, useVisibleOptions, defaultFilterFn, defaultAccessor, usePrevious, lastIndexOf, getSelectTestIds };
68
+ export { isGroup, isOptionShape, joinOptions, processOptions, useVisibleOptions, defaultFilterFn, defaultGroupAccessor, defaultAccessor, usePrevious, lastIndexOf, getSelectTestIds };
package/modern/utils.js CHANGED
@@ -20,7 +20,7 @@ const joinOptions = ({ selected, selectedMultiple, }) => {
20
20
  }, []);
21
21
  };
22
22
  // За один проход делает список пунктов меню плоским и находит выбранные пункты по ключу
23
- function processOptions(options, selected = [], filterFn = () => true) {
23
+ function processOptions(options, selected = [], filterFn = () => true, filterGroup = false) {
24
24
  const flatOptions = [];
25
25
  const filteredOptions = [];
26
26
  const selectedArray = Array.isArray(selected) ? selected : [selected];
@@ -28,12 +28,20 @@ function processOptions(options, selected = [], filterFn = () => true) {
28
28
  const selectedKeys = selectedArray.filter((option) => typeof option === 'string');
29
29
  const isSelected = (option) => selectedKeys.includes(option.key);
30
30
  const process = (option) => {
31
- if (isSelected(option)) {
31
+ const isGroupOption = isGroup(option);
32
+ if (!isGroupOption && isSelected(option)) {
32
33
  selectedOptions.push(option);
33
34
  }
34
35
  if (!filterFn(option))
35
36
  return false;
36
- flatOptions.push(option);
37
+ if (isGroupOption) {
38
+ if (filterGroup) {
39
+ Array.prototype.push.apply(flatOptions, option.options);
40
+ }
41
+ }
42
+ else {
43
+ flatOptions.push(option);
44
+ }
37
45
  return true;
38
46
  };
39
47
  options.forEach((option) => {
@@ -47,14 +55,16 @@ function processOptions(options, selected = [], filterFn = () => true) {
47
55
  if (matched)
48
56
  group.options.push(groupOption);
49
57
  });
50
- if (group.options.length)
58
+ if (group.options.length) {
51
59
  filteredOptions.push(group);
60
+ return;
61
+ }
62
+ if (!filterGroup)
63
+ return;
52
64
  }
53
- else {
54
- const matched = process(option);
55
- if (matched)
56
- filteredOptions.push(option);
57
- }
65
+ const matched = process(option);
66
+ if (matched)
67
+ filteredOptions.push(option);
58
68
  });
59
69
  return { filteredOptions, flatOptions, selectedOptions };
60
70
  }
@@ -84,6 +94,9 @@ function defaultFilterFn(optionText, search) {
84
94
  return true;
85
95
  return optionText.toLowerCase().includes(search.toLowerCase());
86
96
  }
97
+ function defaultGroupAccessor(option) {
98
+ return option.label;
99
+ }
87
100
  function defaultAccessor(option) {
88
101
  if (typeof option.content === 'string')
89
102
  return option.content;
@@ -136,4 +149,4 @@ function getSelectTestIds(dataTestId) {
136
149
  };
137
150
  }
138
151
 
139
- export { defaultAccessor, defaultFilterFn, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions };
152
+ export { defaultAccessor, defaultFilterFn, defaultGroupAccessor, getSelectTestIds, isGroup, isOptionShape, joinOptions, lastIndexOf, processOptions, usePrevious, useVisibleOptions };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-select",
3
- "version": "17.5.1",
3
+ "version": "17.6.0",
4
4
  "description": "Select component",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -1,3 +1,3 @@
1
1
  export * from "./useSelectWithLoading/hook";
2
2
  export * from "./useLazyLoading/hook";
3
- export * from "../hook-64a8061f";
3
+ export * from "../hook-2f4e96b2";
package/presets/index.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var presets_useSelectWithLoading_hook = require('./useSelectWithLoading/hook.js');
6
6
  var presets_useLazyLoading_hook = require('./useLazyLoading/hook.js');
7
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-23a1acb8.js');
7
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-4d5fa450.js');
8
8
 
9
9
 
10
10
 
@@ -6,7 +6,7 @@ require('tslib');
6
6
  require('react');
7
7
  require('deep-equal');
8
8
  require('../../utils.js');
9
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../hook-23a1acb8.js');
9
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../hook-4d5fa450.js');
10
10
 
11
11
 
12
12
 
@@ -6,7 +6,7 @@ require('tslib');
6
6
  require('react');
7
7
  require('../../../components/options-list/Component.js');
8
8
  require('../../../consts.js');
9
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-23a1acb8.js');
9
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-4d5fa450.js');
10
10
  require('./footer/Component.js');
11
11
  require('./header/Component.js');
12
12