@alfalab/core-components-select 17.4.4 → 17.5.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/Component.responsive.js +1 -0
  2. package/components/arrow/Component.js +1 -1
  3. package/components/arrow/index.css +3 -3
  4. package/components/base-checkmark/Component.js +1 -1
  5. package/components/base-checkmark/index.css +4 -4
  6. package/components/base-option/Component.js +1 -1
  7. package/components/base-option/index.css +15 -15
  8. package/components/base-select/Component.js +3 -3
  9. package/components/base-select/index.css +11 -11
  10. package/components/base-select/mobile.css +12 -12
  11. package/components/checkmark/Component.js +1 -1
  12. package/components/checkmark/index.css +12 -12
  13. package/components/checkmark-mobile/Component.js +1 -1
  14. package/components/checkmark-mobile/index.css +6 -6
  15. package/components/field/Component.js +1 -1
  16. package/components/field/index.css +12 -12
  17. package/components/footer/Component.js +1 -1
  18. package/components/footer/index.css +5 -5
  19. package/components/optgroup/Component.js +1 -1
  20. package/components/optgroup/index.css +6 -6
  21. package/components/option/Component.js +1 -1
  22. package/components/option/index.css +19 -19
  23. package/components/options-list/Component.js +12 -3
  24. package/components/options-list/index.css +10 -10
  25. package/components/search/Component.js +1 -1
  26. package/components/search/index.css +2 -2
  27. package/components/virtual-options-list/Component.js +16 -4
  28. package/components/virtual-options-list/index.css +17 -15
  29. package/cssm/Component.responsive.js +1 -0
  30. package/cssm/components/base-select/Component.js +1 -1
  31. package/cssm/components/checkmark/index.module.css +2 -2
  32. package/cssm/components/options-list/Component.js +11 -2
  33. package/cssm/components/virtual-options-list/Component.js +15 -3
  34. package/cssm/components/virtual-options-list/index.module.css +2 -0
  35. package/cssm/{hook-aae7b381.d.ts → hook-546b2479.d.ts} +1 -0
  36. package/cssm/{hook-aae7b381.js → hook-546b2479.js} +12 -4
  37. package/{hook-d4f77aed.d.ts → cssm/hook-64a8061f.d.ts} +7 -2
  38. package/cssm/mobile/Component.mobile.js +1 -1
  39. package/cssm/presets/index.d.ts +1 -1
  40. package/cssm/presets/index.js +1 -1
  41. package/cssm/presets/useSelectWithApply/hook.js +2 -1
  42. package/cssm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  43. package/cssm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  44. package/cssm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  45. package/cssm/shared/index.js +1 -1
  46. package/cssm/typings.d.ts +29 -1
  47. package/esm/Component.responsive.js +1 -0
  48. package/esm/components/arrow/Component.js +1 -1
  49. package/esm/components/arrow/index.css +3 -3
  50. package/esm/components/base-checkmark/Component.js +1 -1
  51. package/esm/components/base-checkmark/index.css +4 -4
  52. package/esm/components/base-option/Component.js +1 -1
  53. package/esm/components/base-option/index.css +15 -15
  54. package/esm/components/base-select/Component.js +3 -3
  55. package/esm/components/base-select/index.css +11 -11
  56. package/esm/components/base-select/mobile.css +12 -12
  57. package/esm/components/checkmark/Component.js +1 -1
  58. package/esm/components/checkmark/index.css +12 -12
  59. package/esm/components/checkmark-mobile/Component.js +1 -1
  60. package/esm/components/checkmark-mobile/index.css +6 -6
  61. package/esm/components/field/Component.js +1 -1
  62. package/esm/components/field/index.css +12 -12
  63. package/esm/components/footer/Component.js +1 -1
  64. package/esm/components/footer/index.css +5 -5
  65. package/esm/components/optgroup/Component.js +1 -1
  66. package/esm/components/optgroup/index.css +6 -6
  67. package/esm/components/option/Component.js +1 -1
  68. package/esm/components/option/index.css +19 -19
  69. package/esm/components/options-list/Component.js +12 -3
  70. package/esm/components/options-list/index.css +10 -10
  71. package/esm/components/search/Component.js +1 -1
  72. package/esm/components/search/index.css +2 -2
  73. package/esm/components/virtual-options-list/Component.js +16 -4
  74. package/esm/components/virtual-options-list/index.css +17 -15
  75. package/{hook-3bb5c3ed.d.ts → esm/hook-5906d9e6.d.ts} +1 -0
  76. package/esm/{hook-cf6ae3b4.js → hook-5906d9e6.js} +11 -4
  77. package/{modern/hook-d4f77aed.d.ts → esm/hook-64a8061f.d.ts} +7 -2
  78. package/esm/mobile/Component.mobile.js +1 -1
  79. package/esm/presets/index.d.ts +1 -1
  80. package/esm/presets/index.js +1 -1
  81. package/esm/presets/useSelectWithApply/hook.js +2 -1
  82. package/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  83. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  84. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  85. package/esm/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  86. package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  87. package/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  88. package/esm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  89. package/esm/presets/useSelectWithLoading/hook.js +1 -1
  90. package/esm/presets/useSelectWithLoading/index.css +2 -2
  91. package/esm/shared/index.js +1 -1
  92. package/esm/typings.d.ts +29 -1
  93. package/{modern/hook-ea85cac7.d.ts → hook-598322df.d.ts} +1 -0
  94. package/{hook-3bb5c3ed.js → hook-598322df.js} +12 -4
  95. package/{cssm/hook-d4f77aed.d.ts → hook-64a8061f.d.ts} +7 -2
  96. package/mobile/Component.mobile.js +1 -1
  97. package/modern/Component.responsive.js +1 -0
  98. package/modern/components/arrow/Component.js +1 -1
  99. package/modern/components/arrow/index.css +3 -3
  100. package/modern/components/base-checkmark/Component.js +1 -1
  101. package/modern/components/base-checkmark/index.css +4 -4
  102. package/modern/components/base-option/Component.js +1 -1
  103. package/modern/components/base-option/index.css +15 -15
  104. package/modern/components/base-select/Component.js +3 -3
  105. package/modern/components/base-select/index.css +11 -11
  106. package/modern/components/base-select/mobile.css +12 -12
  107. package/modern/components/checkmark/Component.js +1 -1
  108. package/modern/components/checkmark/index.css +12 -12
  109. package/modern/components/checkmark-mobile/Component.js +1 -1
  110. package/modern/components/checkmark-mobile/index.css +6 -6
  111. package/modern/components/field/Component.js +1 -1
  112. package/modern/components/field/index.css +12 -12
  113. package/modern/components/footer/Component.js +1 -1
  114. package/modern/components/footer/index.css +5 -5
  115. package/modern/components/optgroup/Component.js +1 -1
  116. package/modern/components/optgroup/index.css +6 -6
  117. package/modern/components/option/Component.js +1 -1
  118. package/modern/components/option/index.css +19 -19
  119. package/modern/components/options-list/Component.js +9 -3
  120. package/modern/components/options-list/index.css +10 -10
  121. package/modern/components/search/Component.js +1 -1
  122. package/modern/components/search/index.css +2 -2
  123. package/modern/components/virtual-options-list/Component.js +13 -4
  124. package/modern/components/virtual-options-list/index.css +17 -15
  125. package/{esm/hook-cf6ae3b4.d.ts → modern/hook-241d62bb.d.ts} +1 -0
  126. package/modern/{hook-ea85cac7.js → hook-241d62bb.js} +11 -3
  127. package/{esm/hook-d4f77aed.d.ts → modern/hook-64a8061f.d.ts} +7 -2
  128. package/modern/mobile/Component.mobile.js +1 -1
  129. package/modern/presets/index.d.ts +1 -1
  130. package/modern/presets/index.js +1 -1
  131. package/modern/presets/useSelectWithApply/hook.js +2 -1
  132. package/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  133. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  134. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  135. package/modern/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  136. package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  137. package/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  138. package/modern/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  139. package/modern/presets/useSelectWithLoading/hook.js +1 -1
  140. package/modern/presets/useSelectWithLoading/index.css +2 -2
  141. package/modern/shared/index.js +1 -1
  142. package/modern/typings.d.ts +29 -1
  143. package/package.json +11 -11
  144. package/presets/index.d.ts +1 -1
  145. package/presets/index.js +1 -1
  146. package/presets/useSelectWithApply/hook.js +2 -1
  147. package/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  148. package/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  149. package/presets/useSelectWithApply/options-list-with-apply/footer/index.css +3 -3
  150. package/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  151. package/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  152. package/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  153. package/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  154. package/presets/useSelectWithLoading/hook.js +1 -1
  155. package/presets/useSelectWithLoading/index.css +2 -2
  156. package/shared/index.js +1 -1
  157. package/src/Component.responsive.tsx +2 -0
  158. package/src/components/base-select/Component.tsx +2 -0
  159. package/src/components/options-list/Component.tsx +32 -10
  160. package/src/components/virtual-options-list/Component.tsx +34 -8
  161. package/src/components/virtual-options-list/index.module.css +2 -0
  162. package/src/presets/useSelectWithApply/hook.tsx +6 -1
  163. package/src/presets/useSelectWithApply/options-list-with-apply/Component.tsx +11 -0
  164. package/src/typings.ts +36 -0
  165. package/src/vars.css +1 -1
  166. package/typings.d.ts +29 -1
@@ -45,16 +45,20 @@ 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
+ */
48
51
  showClear?: boolean | undefined;
49
- onClose?: (() => void) | undefined; /**
52
+ onClose?: (() => void) | undefined;
53
+ selectedDraft?: OptionShape[] | undefined; /**
50
54
  * Компонент выпадающего меню
51
55
  */
52
- selectedDraft?: OptionShape[] | undefined;
53
56
  OptionsList?: import("react").FC<import("./typings").OptionsListProps & import("react").RefAttributes<HTMLDivElement>> | undefined;
54
57
  Footer?: import("react").FC<import("./presets/useSelectWithApply/options-list-with-apply/footer/Component").FooterProps> | undefined;
55
58
  Header?: import("react").FC<import("./presets/useSelectWithApply/options-list-with-apply/header/Component").HeaderProps> | undefined;
56
59
  headerProps?: import("./presets/useSelectWithApply/options-list-with-apply/header/Component").HeaderProps | undefined;
57
60
  showHeaderWithSelectAll?: boolean | undefined;
61
+ setSelectedDraft?: ((selectedDraft: OptionShape[]) => void) | undefined;
58
62
  } & import("react").RefAttributes<HTMLDivElement>>;
59
63
  optionsListProps: {
60
64
  OptionsList: import("react").ComponentType<import("./typings").OptionsListProps & import("react").RefAttributes<HTMLDivElement>> | undefined;
@@ -63,6 +67,7 @@ declare function useSelectWithApply({ options, selected, onChange, OptionsList,
63
67
  onApply: () => void;
64
68
  onClose: () => void;
65
69
  selectedDraft: OptionShape[];
70
+ setSelectedDraft: import("react").Dispatch<import("react").SetStateAction<OptionShape[]>>;
66
71
  showHeaderWithSelectAll: boolean;
67
72
  headerProps: {
68
73
  indeterminate: boolean;
@@ -11,7 +11,7 @@ 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-ea85cac7.js';
14
+ import { u as useSelectWithApply } from '../hook-241d62bb.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;
@@ -1,3 +1,3 @@
1
1
  export * from "./useSelectWithLoading/hook";
2
2
  export * from "./useLazyLoading/hook";
3
- export * from "../hook-d4f77aed";
3
+ export * from "../hook-64a8061f";
@@ -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-ea85cac7.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-241d62bb.js';
@@ -1,3 +1,4 @@
1
1
  import 'react';
2
+ import 'deep-equal';
2
3
  import '../../utils.js';
3
- export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-ea85cac7.js';
4
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-241d62bb.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-ea85cac7.js';
4
+ export { O as OptionsListWithApply } from '../../../hook-241d62bb.js';
5
5
  import './footer/Component.js';
6
6
  import './header/Component.js';
@@ -2,7 +2,7 @@ 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_1us6u"};
5
+ const styles = {"footer":"select__footer_1tbkk"};
6
6
  require('./index.css')
7
7
 
8
8
  const Footer = ({ handleApply, handleClear, showClear, selectedDraft = [], dataTestId, }) => (React.createElement("div", {
@@ -1,4 +1,4 @@
1
- /* hash: z57o5 */
1
+ /* hash: 8n9oq */
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_1us6u {
20
+ } .select__footer_1tbkk {
21
21
  background-color: var(--color-light-bg-primary);
22
22
  padding: var(--gap-s);
23
23
  outline: none
24
- } .select__footer_1us6u > * + * {
24
+ } .select__footer_1tbkk > * + * {
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_b68mu","mobile":"select__mobile_b68mu"};
5
+ const styles = {"desktop":"select__desktop_1wv7a","mobile":"select__mobile_1wv7a"};
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: 1hgzr */
1
+ /* hash: yr2o7 */
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_b68mu {
19
+ } .select__desktop_1wv7a {
20
20
  padding: var(--gap-s);
21
- } .select__mobile_b68mu {
21
+ } .select__mobile_1wv7a {
22
22
  padding: var(--gap-s) var(--gap-xs);
23
23
  }
@@ -1 +1 @@
1
- export * from "../../../hook-ea85cac7";
1
+ export * from "../../../hook-241d62bb";
@@ -1 +1 @@
1
- export { O as OptionsListWithApply } from '../../../hook-ea85cac7.js';
1
+ export { O as OptionsListWithApply } from '../../../hook-241d62bb.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_wejfl"};
5
+ const styles = {"skeleton":"select__skeleton_ggzqz"};
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: 3jwa7 */
2
- .select__skeleton_wejfl {
1
+ /* hash: 7ho0l */
2
+ .select__skeleton_ggzqz {
3
3
  position: absolute;
4
4
  top: 50%;
5
5
  transform: translateY(-50%);
@@ -1,6 +1,6 @@
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-ea85cac7.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-241d62bb.js';
4
4
  export { defaultAccessor, defaultFilterFn, 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';
@@ -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-d4f77aed";
8
+ import { UseSelectWithApplyProps } from "./hook-64a8061f";
9
9
  type AnyObject = Record<string, any>;
10
10
  type OptionShape = {
11
11
  /**
@@ -479,6 +479,14 @@ type OptionsListProps = {
479
479
  * Указать индекс пункта для hover состояния
480
480
  */
481
481
  setHighlightedIndex?: (index: number) => void;
482
+ /**
483
+ * Значение поиска
484
+ */
485
+ search?: string;
486
+ /**
487
+ * Возможность выбрать несколько значений
488
+ */
489
+ multiple?: boolean;
482
490
  };
483
491
  type OptgroupProps = {
484
492
  /**
@@ -498,6 +506,26 @@ type OptgroupProps = {
498
506
  * Дочерние элементы
499
507
  */
500
508
  children?: ReactNode;
509
+ /**
510
+ * Список вариантов выбора в группе
511
+ */
512
+ options?: OptionShape[];
513
+ /**
514
+ * Список выбранных вариантов в группе
515
+ */
516
+ selectedItems?: OptionShape[];
517
+ /**
518
+ * Обработчик выбранных вариантов
519
+ */
520
+ setSelectedItems?: (items: OptionShape[]) => void;
521
+ /**
522
+ * Значение поиска
523
+ */
524
+ search?: string;
525
+ /**
526
+ * Возможность выбрать несколько значений
527
+ */
528
+ multiple?: boolean;
501
529
  };
502
530
  type OptionProps = {
503
531
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alfalab/core-components-select",
3
- "version": "17.4.4",
3
+ "version": "17.5.0",
4
4
  "description": "Select component",
5
5
  "keywords": [],
6
6
  "license": "MIT",
@@ -15,17 +15,17 @@
15
15
  "react-dom": "^16.9.0 || ^17.0.1 || ^18.0.0"
16
16
  },
17
17
  "dependencies": {
18
- "@alfalab/core-components-badge": "^5.5.1",
19
- "@alfalab/core-components-base-modal": "^5.7.5",
20
- "@alfalab/core-components-bottom-sheet": "^6.15.1",
21
- "@alfalab/core-components-button": "^11.4.3",
22
- "@alfalab/core-components-checkbox": "^4.3.1",
23
- "@alfalab/core-components-form-control": "^12.2.2",
24
- "@alfalab/core-components-input": "^14.4.3",
25
- "@alfalab/core-components-modal": "^9.3.1",
18
+ "@alfalab/core-components-badge": "^5.5.2",
19
+ "@alfalab/core-components-base-modal": "^5.7.6",
20
+ "@alfalab/core-components-bottom-sheet": "^6.15.3",
21
+ "@alfalab/core-components-button": "^11.4.5",
22
+ "@alfalab/core-components-checkbox": "^4.3.3",
23
+ "@alfalab/core-components-form-control": "^12.2.3",
24
+ "@alfalab/core-components-input": "^14.4.5",
25
+ "@alfalab/core-components-modal": "^9.3.3",
26
26
  "@alfalab/core-components-mq": "^4.2.0",
27
- "@alfalab/core-components-popover": "^6.2.1",
28
- "@alfalab/core-components-scrollbar": "^3.0.0",
27
+ "@alfalab/core-components-popover": "^6.2.2",
28
+ "@alfalab/core-components-scrollbar": "^3.0.1",
29
29
  "@alfalab/core-components-skeleton": "^5.0.0",
30
30
  "@alfalab/core-components-shared": "^0.10.0",
31
31
  "@alfalab/hooks": "^1.13.0",
@@ -1,3 +1,3 @@
1
1
  export * from "./useSelectWithLoading/hook";
2
2
  export * from "./useLazyLoading/hook";
3
- export * from "../hook-d4f77aed";
3
+ export * from "../hook-64a8061f";
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-3bb5c3ed.js');
7
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-598322df.js');
8
8
 
9
9
 
10
10
 
@@ -4,8 +4,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  require('tslib');
6
6
  require('react');
7
+ require('deep-equal');
7
8
  require('../../utils.js');
8
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../hook-3bb5c3ed.js');
9
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../hook-598322df.js');
9
10
 
10
11
 
11
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-3bb5c3ed.js');
9
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-598322df.js');
10
10
  require('./footer/Component.js');
11
11
  require('./header/Component.js');
12
12
 
@@ -10,7 +10,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
10
10
 
11
11
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
12
12
 
13
- var styles = {"footer":"select__footer_1us6u"};
13
+ var styles = {"footer":"select__footer_1tbkk"};
14
14
  require('./index.css')
15
15
 
16
16
  var Footer = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: z57o5 */
1
+ /* hash: 8n9oq */
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_1us6u {
20
+ } .select__footer_1tbkk {
21
21
  background-color: var(--color-light-bg-primary);
22
22
  padding: var(--gap-s);
23
23
  outline: none
24
- } .select__footer_1us6u > * + * {
24
+ } .select__footer_1tbkk > * + * {
25
25
  margin-left: var(--gap-xs);
26
26
  }
@@ -11,7 +11,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
11
11
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
12
12
  var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
13
13
 
14
- var styles = {"desktop":"select__desktop_b68mu","mobile":"select__mobile_b68mu"};
14
+ var styles = {"desktop":"select__desktop_1wv7a","mobile":"select__mobile_1wv7a"};
15
15
  require('./index.css')
16
16
 
17
17
  var Header = function (_a) {
@@ -1,4 +1,4 @@
1
- /* hash: 1hgzr */
1
+ /* hash: yr2o7 */
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_b68mu {
19
+ } .select__desktop_1wv7a {
20
20
  padding: var(--gap-s);
21
- } .select__mobile_b68mu {
21
+ } .select__mobile_1wv7a {
22
22
  padding: var(--gap-s) var(--gap-xs);
23
23
  }
@@ -1 +1 @@
1
- export * from "../../../hook-3bb5c3ed";
1
+ export * from "../../../hook-598322df";
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-3bb5c3ed.js');
5
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../../hook-598322df.js');
6
6
 
7
7
 
8
8
 
@@ -11,7 +11,7 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
11
11
 
12
12
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
13
13
 
14
- var styles = {"skeleton":"select__skeleton_wejfl"};
14
+ var styles = {"skeleton":"select__skeleton_ggzqz"};
15
15
  require('./index.css')
16
16
 
17
17
  function useSelectWithLoading(_a) {
@@ -1,5 +1,5 @@
1
- /* hash: 3jwa7 */
2
- .select__skeleton_wejfl {
1
+ /* hash: 7ho0l */
2
+ .select__skeleton_ggzqz {
3
3
  position: absolute;
4
4
  top: 50%;
5
5
  transform: translateY(-50%);
package/shared/index.js CHANGED
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var presets_useSelectWithLoading_hook = require('../presets/useSelectWithLoading/hook.js');
6
6
  var presets_useLazyLoading_hook = require('../presets/useLazyLoading/hook.js');
7
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-3bb5c3ed.js');
7
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-598322df.js');
8
8
  var utils = require('../utils.js');
9
9
  var components_option_Component = require('../components/option/Component.js');
10
10
  var components_baseOption_Component = require('../components/base-option/Component.js');
@@ -31,3 +31,5 @@ export const SelectResponsive = forwardRef<
31
31
 
32
32
  return <SelectMobile fieldProps={fieldProps} {...mobileProps} ref={ref} />;
33
33
  });
34
+
35
+ SelectResponsive.displayName = 'SelectResponsive';
@@ -633,6 +633,8 @@ export const BaseSelect = forwardRef(
633
633
  })}
634
634
  emptyPlaceholder={renderEmptyPlaceholder()}
635
635
  onScroll={onScroll}
636
+ search={search}
637
+ multiple={multiple}
636
638
  />
637
639
  {view === 'desktop' && <div className={styles.optionsListBorder} />}
638
640
  </div>
@@ -43,6 +43,10 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
43
43
  nativeScrollbar: nativeScrollbarProp,
44
44
  flatOptions = [],
45
45
  setHighlightedIndex,
46
+ selectedItems,
47
+ search,
48
+ setSelectedItems,
49
+ multiple,
46
50
  },
47
51
  ref,
48
52
  ) => {
@@ -78,16 +82,34 @@ export const OptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
78
82
  const listRef = useRef<HTMLDivElement>(null);
79
83
  const scrollbarRef = useRef<HTMLDivElement>(null);
80
84
  const counter = createCounter();
81
- const renderGroup = (group: GroupShape) => (
82
- <Optgroup
83
- className={optionGroupClassName}
84
- label={group.label}
85
- key={group.label}
86
- size={size}
87
- >
88
- {group.options.map((option) => renderOption(option, counter()))}
89
- </Optgroup>
90
- );
85
+ const renderGroup = (group: GroupShape) => {
86
+ const groupSelectedItems = selectedItems?.filter((item) =>
87
+ group.options.includes(item),
88
+ );
89
+ const handleSelectedItems = (items: OptionShape[]) => {
90
+ setSelectedItems(
91
+ (selectedItems?.filter((item) => !group.options.includes(item)) ?? []).concat(
92
+ items,
93
+ ),
94
+ );
95
+ };
96
+
97
+ return (
98
+ <Optgroup
99
+ className={optionGroupClassName}
100
+ label={group.label}
101
+ key={group.label}
102
+ size={size}
103
+ options={group.options}
104
+ selectedItems={groupSelectedItems}
105
+ setSelectedItems={handleSelectedItems}
106
+ search={search}
107
+ multiple={multiple}
108
+ >
109
+ {group.options.map((option) => renderOption(option, counter()))}
110
+ </Optgroup>
111
+ );
112
+ };
91
113
 
92
114
  useVisibleOptions({
93
115
  ...(!nativeScrollbar && { styleTargetRef: scrollbarRef }),
@@ -37,6 +37,10 @@ export const VirtualOptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
37
37
  onScroll,
38
38
  nativeScrollbar: nativeScrollbarProp,
39
39
  setHighlightedIndex,
40
+ selectedItems,
41
+ setSelectedItems,
42
+ search,
43
+ multiple,
40
44
  },
41
45
  ref,
42
46
  ) => {
@@ -139,7 +143,35 @@ export const VirtualOptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
139
143
  const renderList = () =>
140
144
  rowVirtualizer.virtualItems.map((virtualRow) => {
141
145
  const option = flatOptions[virtualRow.index];
142
- const group = options[groupStartIndexes[virtualRow.index]] as GroupShape;
146
+ const renderGroup = () => {
147
+ const group = options[groupStartIndexes[virtualRow.index]] as GroupShape;
148
+
149
+ if (!group) return null;
150
+
151
+ const groupSelectedItems = selectedItems?.filter((item) =>
152
+ group.options.includes(item),
153
+ );
154
+ const handleSelectedItems = (items: OptionShape[]) => {
155
+ setSelectedItems(
156
+ (
157
+ selectedItems?.filter((item) => !group.options.includes(item)) ?? []
158
+ ).concat(items),
159
+ );
160
+ };
161
+
162
+ return (
163
+ <Optgroup
164
+ label={group.label}
165
+ size={size}
166
+ className={optionGroupClassName}
167
+ options={group.options}
168
+ selectedItems={groupSelectedItems}
169
+ setSelectedItems={handleSelectedItems}
170
+ search={search}
171
+ multiple={multiple}
172
+ />
173
+ );
174
+ };
143
175
 
144
176
  return (
145
177
  <div
@@ -152,13 +184,7 @@ export const VirtualOptionsList = forwardRef<HTMLDivElement, OptionsListProps>(
152
184
  transform: `translateY(${virtualRow.start}px)`,
153
185
  }}
154
186
  >
155
- {group && (
156
- <Optgroup
157
- label={group.label}
158
- size={size}
159
- className={optionGroupClassName}
160
- />
161
- )}
187
+ {renderGroup()}
162
188
  {!isGroup(option) && (
163
189
  <Option {...getOptionProps(option, virtualRow.index)} />
164
190
  )}
@@ -6,6 +6,7 @@
6
6
  outline: none;
7
7
  box-sizing: border-box;
8
8
  position: sticky;
9
+ justify-content: space-between;
9
10
  }
10
11
 
11
12
  .virtualOptionsListHeader {
@@ -68,6 +69,7 @@
68
69
  .emptyPlaceholder {
69
70
  padding: var(--gap-m) var(--gap-s);
70
71
  color: var(--select-options-list-empty-placeholder-color);
72
+ flex: 1;
71
73
  }
72
74
 
73
75
  .size-64 .emptyPlaceholder,
@@ -1,4 +1,5 @@
1
1
  import { useEffect, useMemo, useRef, useState } from 'react';
2
+ import deepEqual from 'deep-equal';
2
3
 
3
4
  import type { AnyObject, BaseSelectProps, OptionShape } from '../../typings';
4
5
  import { defaultAccessor, defaultFilterFn, processOptions } from '../../utils';
@@ -146,7 +147,10 @@ export function useSelectWithApply({
146
147
  const handleClose = () => setSelectedDraft(selectedOptionsRef.current);
147
148
 
148
149
  useEffect(() => {
149
- setSelectedDraft(selectedOptions);
150
+ // устанавливать selectedDraft если selectedOptions изменились
151
+ if (!deepEqual(selectedOptionsRef.current, selectedOptions)) {
152
+ setSelectedDraft(selectedOptions);
153
+ }
150
154
  selectedOptionsRef.current = selectedOptions;
151
155
  }, [selectedOptions]);
152
156
 
@@ -165,6 +169,7 @@ export function useSelectWithApply({
165
169
  onApply: handleApply,
166
170
  onClose: handleClose,
167
171
  selectedDraft,
172
+ setSelectedDraft,
168
173
  showHeaderWithSelectAll,
169
174
  headerProps: {
170
175
  indeterminate: !!selectedDraft.length && selectedDraft.length < flatOptions.length,