@alfalab/core-components 44.7.0-beta.0 → 44.7.0-beta.1

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 (290) hide show
  1. package/confirmation/components/screens/initial/component.js +1 -1
  2. package/confirmation/components/screens/initial/countdown-section.js +1 -1
  3. package/confirmation/esm/component.responsive.js +1 -1
  4. package/confirmation/esm/components/base-confirmation/component.js +1 -1
  5. package/confirmation/esm/components/base-confirmation/index.js +1 -1
  6. package/confirmation/esm/components/index.js +1 -1
  7. package/confirmation/esm/components/screens/index.js +1 -1
  8. package/confirmation/esm/components/screens/initial/component.js +1 -1
  9. package/confirmation/esm/components/screens/initial/countdown-section.js +1 -1
  10. package/confirmation/esm/components/screens/initial/index.js +1 -1
  11. package/confirmation/esm/desktop/component.desktop.js +1 -1
  12. package/confirmation/esm/desktop/index.js +1 -1
  13. package/confirmation/esm/index.js +1 -1
  14. package/confirmation/esm/mobile/component.mobile.js +1 -1
  15. package/confirmation/esm/mobile/index.js +1 -1
  16. package/confirmation/esm/shared/index.js +1 -1
  17. package/confirmation/modern/component.responsive.js +1 -1
  18. package/confirmation/modern/components/base-confirmation/component.js +1 -1
  19. package/confirmation/modern/components/base-confirmation/index.js +1 -1
  20. package/confirmation/modern/components/index.js +1 -1
  21. package/confirmation/modern/components/screens/index.js +1 -1
  22. package/confirmation/modern/components/screens/initial/component.js +1 -1
  23. package/confirmation/modern/components/screens/initial/countdown-section.js +1 -1
  24. package/confirmation/modern/components/screens/initial/index.js +1 -1
  25. package/confirmation/modern/desktop/component.desktop.js +1 -1
  26. package/confirmation/modern/desktop/index.js +1 -1
  27. package/confirmation/modern/index.js +1 -1
  28. package/confirmation/modern/mobile/component.mobile.js +1 -1
  29. package/confirmation/modern/mobile/index.js +1 -1
  30. package/confirmation/modern/shared/index.js +1 -1
  31. package/gallery/components/header/Component.js +1 -1
  32. package/gallery/components/header/buttons.js +1 -1
  33. package/gallery/components/image-viewer/component.js +1 -1
  34. package/gallery/components/image-viewer/slide.js +1 -1
  35. package/gallery/esm/Component.js +2 -2
  36. package/gallery/esm/components/header/Component.js +1 -1
  37. package/gallery/esm/components/header/buttons.js +1 -1
  38. package/gallery/esm/components/header/index.js +1 -1
  39. package/gallery/esm/components/image-preview/Component.js +1 -1
  40. package/gallery/esm/components/image-preview/index.js +1 -1
  41. package/gallery/esm/components/image-viewer/component.js +1 -1
  42. package/gallery/esm/components/image-viewer/index.js +1 -1
  43. package/gallery/esm/components/image-viewer/slide.js +1 -1
  44. package/gallery/esm/components/index.js +2 -2
  45. package/gallery/esm/components/navigation-bar/Component.js +1 -1
  46. package/gallery/esm/components/navigation-bar/index.js +1 -1
  47. package/gallery/esm/index.js +2 -2
  48. package/gallery/modern/Component.js +2 -2
  49. package/gallery/modern/components/header/Component.js +1 -1
  50. package/gallery/modern/components/header/buttons.js +1 -1
  51. package/gallery/modern/components/header/index.js +1 -1
  52. package/gallery/modern/components/image-preview/Component.js +1 -1
  53. package/gallery/modern/components/image-preview/index.js +1 -1
  54. package/gallery/modern/components/image-viewer/component.js +1 -1
  55. package/gallery/modern/components/image-viewer/index.js +1 -1
  56. package/gallery/modern/components/image-viewer/slide.js +1 -1
  57. package/gallery/modern/components/index.js +2 -2
  58. package/gallery/modern/components/navigation-bar/Component.js +1 -1
  59. package/gallery/modern/components/navigation-bar/index.js +1 -1
  60. package/gallery/modern/index.js +2 -2
  61. package/input-autocomplete/autocomplete-field/Component.js +1 -2
  62. package/input-autocomplete/cssm/autocomplete-field/Component.js +1 -2
  63. package/input-autocomplete/cssm/mobile/Component.mobile.js +2 -2
  64. package/input-autocomplete/cssm/types.d.ts +4 -2
  65. package/input-autocomplete/esm/autocomplete-field/Component.js +1 -2
  66. package/input-autocomplete/esm/mobile/Component.mobile.js +2 -2
  67. package/input-autocomplete/esm/types.d.ts +4 -2
  68. package/input-autocomplete/mobile/Component.mobile.js +2 -2
  69. package/input-autocomplete/modern/autocomplete-field/Component.js +1 -2
  70. package/input-autocomplete/modern/mobile/Component.mobile.js +2 -2
  71. package/input-autocomplete/modern/types.d.ts +4 -2
  72. package/input-autocomplete/types.d.ts +4 -2
  73. package/international-phone-input/Component.responsive.d.ts +6 -2
  74. package/international-phone-input/components/base-international-phone-input/Component.d.ts +3 -1
  75. package/international-phone-input/components/base-international-phone-input/Component.js +13 -10
  76. package/international-phone-input/cssm/Component.responsive.d.ts +6 -2
  77. package/international-phone-input/cssm/components/base-international-phone-input/Component.d.ts +3 -1
  78. package/international-phone-input/cssm/components/base-international-phone-input/Component.js +13 -10
  79. package/international-phone-input/cssm/types.d.ts +4 -2
  80. package/international-phone-input/esm/Component.responsive.d.ts +6 -2
  81. package/international-phone-input/esm/components/base-international-phone-input/Component.d.ts +3 -1
  82. package/international-phone-input/esm/components/base-international-phone-input/Component.js +13 -10
  83. package/international-phone-input/esm/types.d.ts +4 -2
  84. package/international-phone-input/modern/Component.responsive.d.ts +6 -2
  85. package/international-phone-input/modern/components/base-international-phone-input/Component.d.ts +3 -1
  86. package/international-phone-input/modern/components/base-international-phone-input/Component.js +10 -10
  87. package/international-phone-input/modern/types.d.ts +4 -2
  88. package/international-phone-input/types.d.ts +4 -2
  89. package/intl-phone-input/component.js +3 -3
  90. package/intl-phone-input/cssm/component.js +3 -3
  91. package/intl-phone-input/esm/component.js +3 -3
  92. package/intl-phone-input/modern/component.js +3 -3
  93. package/package.json +2 -2
  94. package/pure-cell/component.js +1 -1
  95. package/pure-cell/components/addon/component.js +1 -1
  96. package/pure-cell/components/addon/index.d.ts +1 -1
  97. package/pure-cell/components/addon/index.js +1 -1
  98. package/pure-cell/components/amount/component.js +1 -1
  99. package/pure-cell/components/amount/index.d.ts +1 -1
  100. package/pure-cell/components/amount/index.js +1 -1
  101. package/pure-cell/components/amount-title/component.js +1 -1
  102. package/pure-cell/components/amount-title/index.d.ts +1 -1
  103. package/pure-cell/components/amount-title/index.js +1 -1
  104. package/pure-cell/components/category/component.js +1 -1
  105. package/pure-cell/components/category/index.d.ts +1 -1
  106. package/pure-cell/components/category/index.js +1 -1
  107. package/pure-cell/components/content/component.js +1 -1
  108. package/pure-cell/components/content/index.d.ts +1 -1
  109. package/pure-cell/components/content/index.js +1 -1
  110. package/pure-cell/components/footer/component.js +1 -1
  111. package/pure-cell/components/footer/index.d.ts +1 -1
  112. package/pure-cell/components/footer/index.js +1 -1
  113. package/pure-cell/components/footer-button/component.js +1 -1
  114. package/pure-cell/components/footer-button/index.d.ts +1 -1
  115. package/pure-cell/components/footer-button/index.js +1 -1
  116. package/pure-cell/components/footer-text/component.js +1 -1
  117. package/pure-cell/components/footer-text/index.d.ts +1 -1
  118. package/pure-cell/components/footer-text/index.js +1 -1
  119. package/pure-cell/components/graphics/component.js +1 -1
  120. package/pure-cell/components/graphics/index.d.ts +1 -1
  121. package/pure-cell/components/graphics/index.js +1 -1
  122. package/pure-cell/components/main/component.js +1 -1
  123. package/pure-cell/components/main/index.d.ts +1 -1
  124. package/pure-cell/components/main/index.js +1 -1
  125. package/pure-cell/components/text/component.js +1 -1
  126. package/pure-cell/components/text/index.d.ts +1 -1
  127. package/pure-cell/components/text/index.js +1 -1
  128. package/pure-cell/esm/component.js +1 -1
  129. package/pure-cell/esm/components/addon/component.js +1 -1
  130. package/pure-cell/esm/components/addon/index.d.ts +1 -1
  131. package/pure-cell/esm/components/addon/index.js +1 -1
  132. package/pure-cell/esm/components/amount/component.js +1 -1
  133. package/pure-cell/esm/components/amount/index.d.ts +1 -1
  134. package/pure-cell/esm/components/amount/index.js +1 -1
  135. package/pure-cell/esm/components/amount-title/component.js +1 -1
  136. package/pure-cell/esm/components/amount-title/index.d.ts +1 -1
  137. package/pure-cell/esm/components/amount-title/index.js +1 -1
  138. package/pure-cell/esm/components/category/component.js +1 -1
  139. package/pure-cell/esm/components/category/index.d.ts +1 -1
  140. package/pure-cell/esm/components/category/index.js +1 -1
  141. package/pure-cell/esm/components/content/component.js +1 -1
  142. package/pure-cell/esm/components/content/index.d.ts +1 -1
  143. package/pure-cell/esm/components/content/index.js +1 -1
  144. package/pure-cell/esm/components/footer/component.js +1 -1
  145. package/pure-cell/esm/components/footer/index.d.ts +1 -1
  146. package/pure-cell/esm/components/footer/index.js +1 -1
  147. package/pure-cell/esm/components/footer-button/component.js +1 -1
  148. package/pure-cell/esm/components/footer-button/index.d.ts +1 -1
  149. package/pure-cell/esm/components/footer-button/index.js +1 -1
  150. package/pure-cell/esm/components/footer-text/component.js +1 -1
  151. package/pure-cell/esm/components/footer-text/index.d.ts +1 -1
  152. package/pure-cell/esm/components/footer-text/index.js +1 -1
  153. package/pure-cell/esm/components/graphics/component.js +1 -1
  154. package/pure-cell/esm/components/graphics/index.d.ts +1 -1
  155. package/pure-cell/esm/components/graphics/index.js +1 -1
  156. package/pure-cell/esm/components/main/component.js +1 -1
  157. package/pure-cell/esm/components/main/index.d.ts +1 -1
  158. package/pure-cell/esm/components/main/index.js +1 -1
  159. package/pure-cell/esm/components/text/component.js +1 -1
  160. package/pure-cell/esm/components/text/index.d.ts +1 -1
  161. package/pure-cell/esm/components/text/index.js +1 -1
  162. package/pure-cell/esm/index.js +1 -1
  163. package/pure-cell/index.js +1 -1
  164. package/pure-cell/modern/component.js +1 -1
  165. package/pure-cell/modern/components/addon/component.js +1 -1
  166. package/pure-cell/modern/components/addon/index.d.ts +1 -1
  167. package/pure-cell/modern/components/addon/index.js +1 -1
  168. package/pure-cell/modern/components/amount/component.js +1 -1
  169. package/pure-cell/modern/components/amount/index.d.ts +1 -1
  170. package/pure-cell/modern/components/amount/index.js +1 -1
  171. package/pure-cell/modern/components/amount-title/component.js +1 -1
  172. package/pure-cell/modern/components/amount-title/index.d.ts +1 -1
  173. package/pure-cell/modern/components/amount-title/index.js +1 -1
  174. package/pure-cell/modern/components/category/component.js +1 -1
  175. package/pure-cell/modern/components/category/index.d.ts +1 -1
  176. package/pure-cell/modern/components/category/index.js +1 -1
  177. package/pure-cell/modern/components/content/component.js +1 -1
  178. package/pure-cell/modern/components/content/index.d.ts +1 -1
  179. package/pure-cell/modern/components/content/index.js +1 -1
  180. package/pure-cell/modern/components/footer/component.js +1 -1
  181. package/pure-cell/modern/components/footer/index.d.ts +1 -1
  182. package/pure-cell/modern/components/footer/index.js +1 -1
  183. package/pure-cell/modern/components/footer-button/component.js +1 -1
  184. package/pure-cell/modern/components/footer-button/index.d.ts +1 -1
  185. package/pure-cell/modern/components/footer-button/index.js +1 -1
  186. package/pure-cell/modern/components/footer-text/component.js +1 -1
  187. package/pure-cell/modern/components/footer-text/index.d.ts +1 -1
  188. package/pure-cell/modern/components/footer-text/index.js +1 -1
  189. package/pure-cell/modern/components/graphics/component.js +1 -1
  190. package/pure-cell/modern/components/graphics/index.d.ts +1 -1
  191. package/pure-cell/modern/components/graphics/index.js +1 -1
  192. package/pure-cell/modern/components/main/component.js +1 -1
  193. package/pure-cell/modern/components/main/index.d.ts +1 -1
  194. package/pure-cell/modern/components/main/index.js +1 -1
  195. package/pure-cell/modern/components/text/component.js +1 -1
  196. package/pure-cell/modern/components/text/index.d.ts +1 -1
  197. package/pure-cell/modern/components/text/index.js +1 -1
  198. package/pure-cell/modern/index.js +1 -1
  199. package/select/components/base-select/Component.js +41 -37
  200. package/select/cssm/components/base-select/Component.js +41 -37
  201. package/select/esm/Component.responsive.js +1 -1
  202. package/select/esm/components/base-select/Component.js +43 -39
  203. package/select/esm/index.js +1 -1
  204. package/select/esm/mobile/Component.mobile.js +1 -1
  205. package/select/esm/mobile/Component.modal.mobile.js +1 -1
  206. package/select/esm/mobile/index.js +1 -1
  207. package/select/esm/presets/index.js +1 -1
  208. package/select/esm/presets/useSelectWithApply/hook.js +1 -1
  209. package/select/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  210. package/select/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  211. package/select/esm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  212. package/select/esm/shared/index.js +1 -1
  213. package/select/mobile/Component.mobile.js +1 -1
  214. package/select/modern/Component.responsive.js +1 -1
  215. package/select/modern/components/base-select/Component.js +41 -36
  216. package/select/modern/index.js +1 -1
  217. package/select/modern/mobile/Component.mobile.js +1 -1
  218. package/select/modern/mobile/Component.modal.mobile.js +1 -1
  219. package/select/modern/mobile/index.js +1 -1
  220. package/select/modern/presets/index.js +1 -1
  221. package/select/modern/presets/useSelectWithApply/hook.js +1 -1
  222. package/select/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  223. package/select/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  224. package/select/modern/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  225. package/select/modern/shared/index.js +1 -1
  226. package/select/presets/index.js +1 -1
  227. package/select/presets/useSelectWithApply/hook.js +1 -1
  228. package/select/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  229. package/select/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  230. package/select/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  231. package/select/shared/index.js +1 -1
  232. package/side-panel/components/controls/Component.js +1 -1
  233. package/side-panel/components/footer/Component.js +1 -1
  234. package/side-panel/esm/Component.responsive.js +1 -1
  235. package/side-panel/esm/components/controls/Component.js +1 -1
  236. package/side-panel/esm/components/controls/index.js +1 -1
  237. package/side-panel/esm/components/footer/Component.desktop.js +1 -1
  238. package/side-panel/esm/components/footer/Component.js +1 -1
  239. package/side-panel/esm/components/footer/Component.mobile.js +1 -1
  240. package/side-panel/esm/desktop/Component.desktop.js +1 -1
  241. package/side-panel/esm/desktop/index.js +1 -1
  242. package/side-panel/esm/index.js +1 -1
  243. package/side-panel/esm/mobile/Component.mobile.js +1 -1
  244. package/side-panel/esm/mobile/index.js +1 -1
  245. package/side-panel/modern/Component.responsive.js +1 -1
  246. package/side-panel/modern/components/controls/Component.js +1 -1
  247. package/side-panel/modern/components/controls/index.js +1 -1
  248. package/side-panel/modern/components/footer/Component.desktop.js +1 -1
  249. package/side-panel/modern/components/footer/Component.js +1 -1
  250. package/side-panel/modern/components/footer/Component.mobile.js +1 -1
  251. package/side-panel/modern/desktop/Component.desktop.js +1 -1
  252. package/side-panel/modern/desktop/index.js +1 -1
  253. package/side-panel/modern/index.js +1 -1
  254. package/side-panel/modern/mobile/Component.mobile.js +1 -1
  255. package/side-panel/modern/mobile/index.js +1 -1
  256. package/themes/compiled/mobile-dark-bluetint.css +21 -21
  257. package/themes/dist/compiled/mobile-dark-bluetint.css +357 -357
  258. /package/confirmation/{countdown-section-63d239b8.d.ts → countdown-section-16b088be.d.ts} +0 -0
  259. /package/confirmation/{countdown-section-63d239b8.js → countdown-section-16b088be.js} +0 -0
  260. /package/confirmation/esm/{countdown-section-f77f5daf.d.ts → countdown-section-c62fc39d.d.ts} +0 -0
  261. /package/confirmation/esm/{countdown-section-f77f5daf.js → countdown-section-c62fc39d.js} +0 -0
  262. /package/confirmation/modern/{countdown-section-7fbcd274.d.ts → countdown-section-abb09576.d.ts} +0 -0
  263. /package/confirmation/modern/{countdown-section-7fbcd274.js → countdown-section-abb09576.js} +0 -0
  264. /package/gallery/{buttons-708e8bc9.d.ts → buttons-9a016308.d.ts} +0 -0
  265. /package/gallery/{buttons-708e8bc9.js → buttons-9a016308.js} +0 -0
  266. /package/gallery/esm/{buttons-242116ea.d.ts → buttons-b1c05e73.d.ts} +0 -0
  267. /package/gallery/esm/{buttons-242116ea.js → buttons-b1c05e73.js} +0 -0
  268. /package/gallery/esm/{slide-9a45bdb6.d.ts → slide-da5bf337.d.ts} +0 -0
  269. /package/gallery/esm/{slide-9a45bdb6.js → slide-da5bf337.js} +0 -0
  270. /package/gallery/modern/{buttons-030cc857.d.ts → buttons-30fa8a5d.d.ts} +0 -0
  271. /package/gallery/modern/{buttons-030cc857.js → buttons-30fa8a5d.js} +0 -0
  272. /package/gallery/modern/{slide-4029172e.d.ts → slide-438e6913.d.ts} +0 -0
  273. /package/gallery/modern/{slide-4029172e.js → slide-438e6913.js} +0 -0
  274. /package/gallery/{slide-7e1cb2fc.d.ts → slide-456f8387.d.ts} +0 -0
  275. /package/gallery/{slide-7e1cb2fc.js → slide-456f8387.js} +0 -0
  276. /package/pure-cell/{component-8965c1f1.d.ts → component-ba329973.d.ts} +0 -0
  277. /package/pure-cell/{component-8965c1f1.js → component-ba329973.js} +0 -0
  278. /package/pure-cell/esm/{component-991fe90e.d.ts → component-8dcf2e94.d.ts} +0 -0
  279. /package/pure-cell/esm/{component-991fe90e.js → component-8dcf2e94.js} +0 -0
  280. /package/pure-cell/modern/{component-23ae9ab3.d.ts → component-4c3cdd38.d.ts} +0 -0
  281. /package/pure-cell/modern/{component-23ae9ab3.js → component-4c3cdd38.js} +0 -0
  282. /package/select/esm/{hook-65049d00.d.ts → hook-70d4d250.d.ts} +0 -0
  283. /package/select/esm/{hook-65049d00.js → hook-70d4d250.js} +0 -0
  284. /package/select/{hook-2784297a.d.ts → hook-6fc2190d.d.ts} +0 -0
  285. /package/select/{hook-2784297a.js → hook-6fc2190d.js} +0 -0
  286. /package/select/modern/{hook-23f60998.d.ts → hook-7bb88af2.d.ts} +0 -0
  287. /package/select/modern/{hook-23f60998.js → hook-7bb88af2.js} +0 -0
  288. /package/side-panel/esm/{layout.module-e6804822.js → layout.module-0a3a954f.js} +0 -0
  289. /package/side-panel/{layout.module-940702b4.js → layout.module-3700a35d.js} +0 -0
  290. /package/side-panel/modern/{layout.module-e5e92680.js → layout.module-63bb050d.js} +0 -0
@@ -35,7 +35,6 @@ function (_a, ref) {
35
35
  var listRef = React.useRef(null);
36
36
  var initiatorRef = React.useRef(null);
37
37
  var searchRef = React.useRef(null);
38
- var alreadyClickedRef = React.useRef(false);
39
38
  var scrollableContainerRef = React.useRef(null);
40
39
  var onOpenRef = React.useRef(onOpen);
41
40
  var _3 = React__default.default.useState(''), searchState = _3[0], setSearchState = _3[1];
@@ -96,6 +95,24 @@ function (_a, ref) {
96
95
  isItemDisabled: isItemDisabled,
97
96
  defaultHighlightedIndex: selectedItems.length === 0 ? -1 : undefined,
98
97
  scrollIntoView: scrollIntoView,
98
+ onSelectedItemChange: function (changes) {
99
+ var selectedItem = changes.selectedItem || initiatorRef.current;
100
+ if (selectedItem && !selectedItem.disabled) {
101
+ var alreadySelected = selectedItems.includes(selectedItem);
102
+ var allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
103
+ if (alreadySelected && allowRemove) {
104
+ removeSelectedItem(selectedItem);
105
+ }
106
+ if (!alreadySelected) {
107
+ if (multiple) {
108
+ addSelectedItem(selectedItem);
109
+ }
110
+ else {
111
+ setSelectedItems([selectedItem]);
112
+ }
113
+ }
114
+ }
115
+ },
99
116
  onIsOpenChange: function (changes) {
100
117
  if (onOpenRef.current) {
101
118
  /**
@@ -124,16 +141,9 @@ function (_a, ref) {
124
141
  }
125
142
  }
126
143
  },
127
- // eslint-disable-next-line complexity
128
144
  stateReducer: function (state, actionAndChanges) {
129
145
  var type = actionAndChanges.type, changes = actionAndChanges.changes;
130
- var selectedItem = changes.selectedItem;
131
146
  switch (type) {
132
- case downshift.useCombobox.stateChangeTypes.InputBlur:
133
- if (view === 'mobile') {
134
- return state;
135
- }
136
- return changes;
137
147
  case downshift.useCombobox.stateChangeTypes.InputKeyDownArrowDown:
138
148
  if (!circularNavigation && state.highlightedIndex === options.length - 1) {
139
149
  return tslib.__assign(tslib.__assign({}, changes), { highlightedIndex: state.highlightedIndex });
@@ -145,42 +155,36 @@ function (_a, ref) {
145
155
  }
146
156
  return changes;
147
157
  case downshift.useCombobox.stateChangeTypes.InputKeyDownEnter:
148
- case downshift.useCombobox.stateChangeTypes.ItemClick:
158
+ case downshift.useCombobox.stateChangeTypes.ItemClick: {
159
+ var selectedItem = changes.selectedItem;
149
160
  initiatorRef.current = selectedItem || null;
150
- if (selectedItem && !selectedItem.disabled && !alreadyClickedRef.current) {
151
- // TODO!!! Проблема downshift + React 18. ItemClick срабатывает дважды. См https://github.com/downshift-js/downshift/issues/1384
152
- if (view === 'mobile' && React__default.default.version.indexOf('18') === 0) {
153
- alreadyClickedRef.current = true;
154
- setTimeout(function () {
155
- alreadyClickedRef.current = false;
156
- });
157
- }
158
- var alreadySelected = selectedItems.includes(selectedItem);
159
- var allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
160
- if (alreadySelected && allowRemove) {
161
- removeSelectedItem(selectedItem);
162
- }
163
- if (!alreadySelected) {
164
- if (multiple) {
165
- addSelectedItem(selectedItem);
166
- }
167
- else {
168
- setSelectedItems([selectedItem]);
169
- }
170
- }
171
- }
172
- return tslib.__assign(tslib.__assign({}, changes), { isOpen: !closeOnSelect || (view === 'mobile' && multiple),
161
+ return tslib.__assign(tslib.__assign({}, changes), { selectedItem: state.selectedItem === selectedItem ? null : selectedItem, isOpen: !closeOnSelect || (view === 'mobile' && multiple),
173
162
  // при closeOnSelect === false - сохраняем подсвеченный индекс
174
163
  highlightedIndex: state.isOpen && !closeOnSelect
175
164
  ? state.highlightedIndex
176
165
  : changes.highlightedIndex });
166
+ }
177
167
  default:
178
168
  return changes;
179
169
  }
180
170
  },
181
171
  }), open = _7.isOpen, getMenuProps = _7.getMenuProps, getInputProps = _7.getInputProps, getItemProps = _7.getItemProps, getLabelProps = _7.getLabelProps, highlightedIndex = _7.highlightedIndex, toggleMenu = _7.toggleMenu, openMenu = _7.openMenu, closeMenu = _7.closeMenu, setHighlightedIndex = _7.setHighlightedIndex;
182
- var menuProps = getMenuProps({ ref: listRef }, { suppressRefError: true });
172
+ React.useEffect(function () {
173
+ /*
174
+ * При изменении openProp, состояние внутри downshift в useEnhancedReducer не меняется, поэтому меняем его таким способом
175
+ * Скорее всего это исправят в будущих версиях downshift
176
+ */
177
+ if (openProp !== undefined) {
178
+ if (openProp) {
179
+ openMenu();
180
+ }
181
+ else {
182
+ closeMenu();
183
+ }
184
+ }
185
+ }, [openProp, openMenu, closeMenu]);
183
186
  var inputProps = getInputProps(getDropdownProps({ ref: mergeRefs__default.default([ref, fieldRef]) }));
187
+ var _8 = getMenuProps({ ref: listRef }, { suppressRefError: true }), menuRef = _8.ref, menuProps = tslib.__rest(_8, ["ref"]);
184
188
  var handleEntered = function (node, isAppearing) {
185
189
  var _a, _b, _c, _d, _e;
186
190
  if (showSearch)
@@ -331,7 +335,7 @@ function (_a, ref) {
331
335
  _a[mobileStyles__default.default.search] = view === 'mobile',
332
336
  _a)), ref: mergeRefs__default.default([searchRef, ((_c = searchProps === null || searchProps === void 0 ? void 0 : searchProps.componentProps) === null || _c === void 0 ? void 0 : _c.ref) || null]) })));
333
337
  };
334
- var _8 = optionsListProps, header = _8.header, emptyPlaceholder = _8.emptyPlaceholder;
338
+ var _9 = optionsListProps, header = _9.header, emptyPlaceholder = _9.emptyPlaceholder;
335
339
  var renderOptionsListHeader = function () {
336
340
  if (header || (view === 'desktop' && showSearch)) {
337
341
  return (React__default.default.createElement(React__default.default.Fragment, null,
@@ -354,7 +358,7 @@ function (_a, ref) {
354
358
  if (flatOptions.length === 0 && !showEmptyOptionsList && !showSearch)
355
359
  return null;
356
360
  var listProps = optionsListProps;
357
- return (React__default.default.createElement("div", tslib.__assign({}, menuProps, { className: cn__default.default(optionsListClassName, view === 'mobile' && mobileStyles__default.default.optionsListWrapper, view === 'desktop' && styles__default.default.optionsListWrapper) }),
361
+ return (React__default.default.createElement("div", tslib.__assign({}, menuProps, { ref: view === 'desktop' ? menuRef : undefined, className: cn__default.default(optionsListClassName, view === 'mobile' && mobileStyles__default.default.optionsListWrapper, view === 'desktop' && styles__default.default.optionsListWrapper) }),
358
362
  React__default.default.createElement(OptionsList, tslib.__assign({}, listProps, { ref: view === 'desktop' ? listProps.ref : scrollableContainerRef, setHighlightedIndex: view === 'desktop' ? setHighlightedIndex : undefined, className: cn__default.default((_a = {}, _a[mobileStyles__default.default.optionsList] = view === 'mobile', _a)), scrollbarClassName: cn__default.default((_b = {}, _b[mobileStyles__default.default.scrollbar] = view === 'mobile', _b)), optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: filteredOptions, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: view === 'desktop' ? visibleOptions : 0, dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'options-list'), header: renderOptionsListHeader(), optionGroupClassName: cn__default.default(optionGroupClassName, (_c = {},
359
363
  _c[mobileStyles__default.default.optionGroup] = view === 'mobile',
360
364
  _c)), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll })),
@@ -368,7 +372,7 @@ function (_a, ref) {
368
372
  };
369
373
  var renderInBottomSheet = function () {
370
374
  if (!nativeSelect && BottomSheet) {
371
- return (React__default.default.createElement(BottomSheet, tslib.__assign({ dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles__default.default.sheet, contentClassName: mobileStyles__default.default.sheetContent, containerClassName: mobileStyles__default.default.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default' }, bottomSheetProps, { scrollableContainerRef: scrollableContainerRef, onClose: function () {
375
+ return (React__default.default.createElement(BottomSheet, tslib.__assign({ dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles__default.default.sheet, contentClassName: mobileStyles__default.default.sheetContent, containerClassName: mobileStyles__default.default.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default' }, bottomSheetProps, { sheetContainerRef: menuRef, scrollableContainerRef: scrollableContainerRef, onClose: function () {
372
376
  var _a;
373
377
  closeMenu();
374
378
  (_a = bottomSheetProps === null || bottomSheetProps === void 0 ? void 0 : bottomSheetProps.onClose) === null || _a === void 0 ? void 0 : _a.call(bottomSheetProps);
@@ -380,7 +384,7 @@ function (_a, ref) {
380
384
  };
381
385
  var renderInModalMobile = function () {
382
386
  if (!nativeSelect && ModalMobile) {
383
- return (React__default.default.createElement(ModalMobile, tslib.__assign({ dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true }, modalProps, { onClose: function () {
387
+ return (React__default.default.createElement(ModalMobile, tslib.__assign({ dataTestId: coreComponentsShared.getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true }, modalProps, { componentRef: menuRef, onClose: function () {
384
388
  var _a;
385
389
  var args = [];
386
390
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -41,7 +41,7 @@ import '../../base-modal/esm';
41
41
  import '../../button/esm/mobile';
42
42
  import './components/virtual-options-list/Component.js';
43
43
  import 'react-virtual';
44
- import './hook-65049d00.js';
44
+ import './hook-70d4d250.js';
45
45
  import './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
46
46
  import '../../button/esm/desktop';
47
47
  import './presets/useSelectWithApply/options-list-with-apply/header/Component.js';
@@ -1,5 +1,5 @@
1
- import { __assign, __spreadArray } from 'tslib';
2
- import React, { forwardRef, useRef, useMemo, useCallback, useEffect } from 'react';
1
+ import { __assign, __rest, __spreadArray } from 'tslib';
2
+ import React, { forwardRef, useRef, useMemo, useEffect, useCallback } from 'react';
3
3
  import mergeRefs from 'react-merge-refs';
4
4
  import { ResizeObserver } from '@juggle/resize-observer';
5
5
  import cn from 'classnames';
@@ -29,7 +29,6 @@ function (_a, ref) {
29
29
  var listRef = useRef(null);
30
30
  var initiatorRef = useRef(null);
31
31
  var searchRef = useRef(null);
32
- var alreadyClickedRef = useRef(false);
33
32
  var scrollableContainerRef = useRef(null);
34
33
  var onOpenRef = useRef(onOpen);
35
34
  var _3 = React.useState(''), searchState = _3[0], setSearchState = _3[1];
@@ -90,6 +89,24 @@ function (_a, ref) {
90
89
  isItemDisabled: isItemDisabled,
91
90
  defaultHighlightedIndex: selectedItems.length === 0 ? -1 : undefined,
92
91
  scrollIntoView: scrollIntoView,
92
+ onSelectedItemChange: function (changes) {
93
+ var selectedItem = changes.selectedItem || initiatorRef.current;
94
+ if (selectedItem && !selectedItem.disabled) {
95
+ var alreadySelected = selectedItems.includes(selectedItem);
96
+ var allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
97
+ if (alreadySelected && allowRemove) {
98
+ removeSelectedItem(selectedItem);
99
+ }
100
+ if (!alreadySelected) {
101
+ if (multiple) {
102
+ addSelectedItem(selectedItem);
103
+ }
104
+ else {
105
+ setSelectedItems([selectedItem]);
106
+ }
107
+ }
108
+ }
109
+ },
93
110
  onIsOpenChange: function (changes) {
94
111
  if (onOpenRef.current) {
95
112
  /**
@@ -118,16 +135,9 @@ function (_a, ref) {
118
135
  }
119
136
  }
120
137
  },
121
- // eslint-disable-next-line complexity
122
138
  stateReducer: function (state, actionAndChanges) {
123
139
  var type = actionAndChanges.type, changes = actionAndChanges.changes;
124
- var selectedItem = changes.selectedItem;
125
140
  switch (type) {
126
- case useCombobox.stateChangeTypes.InputBlur:
127
- if (view === 'mobile') {
128
- return state;
129
- }
130
- return changes;
131
141
  case useCombobox.stateChangeTypes.InputKeyDownArrowDown:
132
142
  if (!circularNavigation && state.highlightedIndex === options.length - 1) {
133
143
  return __assign(__assign({}, changes), { highlightedIndex: state.highlightedIndex });
@@ -139,42 +149,36 @@ function (_a, ref) {
139
149
  }
140
150
  return changes;
141
151
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
142
- case useCombobox.stateChangeTypes.ItemClick:
152
+ case useCombobox.stateChangeTypes.ItemClick: {
153
+ var selectedItem = changes.selectedItem;
143
154
  initiatorRef.current = selectedItem || null;
144
- if (selectedItem && !selectedItem.disabled && !alreadyClickedRef.current) {
145
- // TODO!!! Проблема downshift + React 18. ItemClick срабатывает дважды. См https://github.com/downshift-js/downshift/issues/1384
146
- if (view === 'mobile' && React.version.indexOf('18') === 0) {
147
- alreadyClickedRef.current = true;
148
- setTimeout(function () {
149
- alreadyClickedRef.current = false;
150
- });
151
- }
152
- var alreadySelected = selectedItems.includes(selectedItem);
153
- var allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
154
- if (alreadySelected && allowRemove) {
155
- removeSelectedItem(selectedItem);
156
- }
157
- if (!alreadySelected) {
158
- if (multiple) {
159
- addSelectedItem(selectedItem);
160
- }
161
- else {
162
- setSelectedItems([selectedItem]);
163
- }
164
- }
165
- }
166
- return __assign(__assign({}, changes), { isOpen: !closeOnSelect || (view === 'mobile' && multiple),
155
+ return __assign(__assign({}, changes), { selectedItem: state.selectedItem === selectedItem ? null : selectedItem, isOpen: !closeOnSelect || (view === 'mobile' && multiple),
167
156
  // при closeOnSelect === false - сохраняем подсвеченный индекс
168
157
  highlightedIndex: state.isOpen && !closeOnSelect
169
158
  ? state.highlightedIndex
170
159
  : changes.highlightedIndex });
160
+ }
171
161
  default:
172
162
  return changes;
173
163
  }
174
164
  },
175
165
  }), open = _7.isOpen, getMenuProps = _7.getMenuProps, getInputProps = _7.getInputProps, getItemProps = _7.getItemProps, getLabelProps = _7.getLabelProps, highlightedIndex = _7.highlightedIndex, toggleMenu = _7.toggleMenu, openMenu = _7.openMenu, closeMenu = _7.closeMenu, setHighlightedIndex = _7.setHighlightedIndex;
176
- var menuProps = getMenuProps({ ref: listRef }, { suppressRefError: true });
166
+ useEffect(function () {
167
+ /*
168
+ * При изменении openProp, состояние внутри downshift в useEnhancedReducer не меняется, поэтому меняем его таким способом
169
+ * Скорее всего это исправят в будущих версиях downshift
170
+ */
171
+ if (openProp !== undefined) {
172
+ if (openProp) {
173
+ openMenu();
174
+ }
175
+ else {
176
+ closeMenu();
177
+ }
178
+ }
179
+ }, [openProp, openMenu, closeMenu]);
177
180
  var inputProps = getInputProps(getDropdownProps({ ref: mergeRefs([ref, fieldRef]) }));
181
+ var _8 = getMenuProps({ ref: listRef }, { suppressRefError: true }), menuRef = _8.ref, menuProps = __rest(_8, ["ref"]);
178
182
  var handleEntered = function (node, isAppearing) {
179
183
  var _a, _b, _c, _d, _e;
180
184
  if (showSearch)
@@ -325,7 +329,7 @@ function (_a, ref) {
325
329
  _a[mobileStyles.search] = view === 'mobile',
326
330
  _a)), ref: mergeRefs([searchRef, ((_c = searchProps === null || searchProps === void 0 ? void 0 : searchProps.componentProps) === null || _c === void 0 ? void 0 : _c.ref) || null]) })));
327
331
  };
328
- var _8 = optionsListProps, header = _8.header, emptyPlaceholder = _8.emptyPlaceholder;
332
+ var _9 = optionsListProps, header = _9.header, emptyPlaceholder = _9.emptyPlaceholder;
329
333
  var renderOptionsListHeader = function () {
330
334
  if (header || (view === 'desktop' && showSearch)) {
331
335
  return (React.createElement(React.Fragment, null,
@@ -348,7 +352,7 @@ function (_a, ref) {
348
352
  if (flatOptions.length === 0 && !showEmptyOptionsList && !showSearch)
349
353
  return null;
350
354
  var listProps = optionsListProps;
351
- return (React.createElement("div", __assign({}, menuProps, { className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) }),
355
+ return (React.createElement("div", __assign({}, menuProps, { ref: view === 'desktop' ? menuRef : undefined, className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) }),
352
356
  React.createElement(OptionsList, __assign({}, listProps, { ref: view === 'desktop' ? listProps.ref : scrollableContainerRef, setHighlightedIndex: view === 'desktop' ? setHighlightedIndex : undefined, className: cn((_a = {}, _a[mobileStyles.optionsList] = view === 'mobile', _a)), scrollbarClassName: cn((_b = {}, _b[mobileStyles.scrollbar] = view === 'mobile', _b)), optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: filteredOptions, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: view === 'desktop' ? visibleOptions : 0, dataTestId: getDataTestId(dataTestId, 'options-list'), header: renderOptionsListHeader(), optionGroupClassName: cn(optionGroupClassName, (_c = {},
353
357
  _c[mobileStyles.optionGroup] = view === 'mobile',
354
358
  _c)), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll })),
@@ -362,7 +366,7 @@ function (_a, ref) {
362
366
  };
363
367
  var renderInBottomSheet = function () {
364
368
  if (!nativeSelect && BottomSheet) {
365
- return (React.createElement(BottomSheet, __assign({ dataTestId: getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles.sheet, contentClassName: mobileStyles.sheetContent, containerClassName: mobileStyles.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default' }, bottomSheetProps, { scrollableContainerRef: scrollableContainerRef, onClose: function () {
369
+ return (React.createElement(BottomSheet, __assign({ dataTestId: getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles.sheet, contentClassName: mobileStyles.sheetContent, containerClassName: mobileStyles.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default' }, bottomSheetProps, { sheetContainerRef: menuRef, scrollableContainerRef: scrollableContainerRef, onClose: function () {
366
370
  var _a;
367
371
  closeMenu();
368
372
  (_a = bottomSheetProps === null || bottomSheetProps === void 0 ? void 0 : bottomSheetProps.onClose) === null || _a === void 0 ? void 0 : _a.call(bottomSheetProps);
@@ -374,7 +378,7 @@ function (_a, ref) {
374
378
  };
375
379
  var renderInModalMobile = function () {
376
380
  if (!nativeSelect && ModalMobile) {
377
- return (React.createElement(ModalMobile, __assign({ dataTestId: getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true }, modalProps, { onClose: function () {
381
+ return (React.createElement(ModalMobile, __assign({ dataTestId: getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true }, modalProps, { componentRef: menuRef, onClose: function () {
378
382
  var _a;
379
383
  var args = [];
380
384
  for (var _i = 0; _i < arguments.length; _i++) {
@@ -41,7 +41,7 @@ import '../../base-modal/esm';
41
41
  import '../../button/esm/mobile';
42
42
  import './components/virtual-options-list/Component.js';
43
43
  import 'react-virtual';
44
- import './hook-65049d00.js';
44
+ import './hook-70d4d250.js';
45
45
  import './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
46
46
  import '../../button/esm/desktop';
47
47
  import './presets/useSelectWithApply/options-list-with-apply/header/Component.js';
@@ -12,7 +12,7 @@ import { Option } from '../components/option/Component.js';
12
12
  import { OptionsList } from '../components/options-list/Component.js';
13
13
  import { Search } from '../components/search/Component.js';
14
14
  import { VirtualOptionsList } from '../components/virtual-options-list/Component.js';
15
- import { u as useSelectWithApply } from '../hook-65049d00.js';
15
+ import { u as useSelectWithApply } from '../hook-70d4d250.js';
16
16
  import { Header } from '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
17
17
  import 'classnames';
18
18
  import '@alfalab/icons-glyph/ChevronDownMIcon';
@@ -37,7 +37,7 @@ import '../../../input/esm';
37
37
  import '@alfalab/icons-glyph/MagnifierMIcon';
38
38
  import '../components/virtual-options-list/Component.js';
39
39
  import 'react-virtual';
40
- import '../hook-65049d00.js';
40
+ import '../hook-70d4d250.js';
41
41
  import '../presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
42
42
  import '../../../button/esm/desktop';
43
43
  import '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
@@ -38,7 +38,7 @@ import '../../../input/esm';
38
38
  import '@alfalab/icons-glyph/MagnifierMIcon';
39
39
  import '../components/virtual-options-list/Component.js';
40
40
  import 'react-virtual';
41
- import '../hook-65049d00.js';
41
+ import '../hook-70d4d250.js';
42
42
  import '../presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
43
43
  import '../../../button/esm/desktop';
44
44
  import '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
@@ -1,6 +1,6 @@
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-65049d00.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-70d4d250.js';
4
4
  import 'tslib';
5
5
  import 'react';
6
6
  import '../../../skeleton/esm';
@@ -1,7 +1,7 @@
1
1
  import 'tslib';
2
2
  import 'react';
3
3
  import '../../../../shared/esm';
4
- export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-65049d00.js';
4
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../../hook-70d4d250.js';
5
5
  import '../../utils.js';
6
6
  import '../../components/options-list/Component.js';
7
7
  import 'react-merge-refs';
@@ -1,7 +1,7 @@
1
1
  import 'tslib';
2
2
  import 'react';
3
3
  import '../../../components/options-list/Component.js';
4
- export { O as OptionsListWithApply } from '../../../hook-65049d00.js';
4
+ export { O as OptionsListWithApply } from '../../../hook-70d4d250.js';
5
5
  import './footer/Component.js';
6
6
  import './header/Component.js';
7
7
  import 'react-merge-refs';
@@ -1 +1 @@
1
- export * from "../../../hook-65049d00";
1
+ export * from "../../../hook-70d4d250";
@@ -1,4 +1,4 @@
1
- export { O as OptionsListWithApply } from '../../../hook-65049d00.js';
1
+ export { O as OptionsListWithApply } from '../../../hook-70d4d250.js';
2
2
  import 'tslib';
3
3
  import 'react';
4
4
  import '../../../utils.js';
@@ -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-65049d00.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-70d4d250.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';
@@ -14,7 +14,7 @@ var components_option_Component = require('../components/option/Component.js');
14
14
  var components_optionsList_Component = require('../components/options-list/Component.js');
15
15
  var components_search_Component = require('../components/search/Component.js');
16
16
  var components_virtualOptionsList_Component = require('../components/virtual-options-list/Component.js');
17
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-2784297a.js');
17
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../hook-6fc2190d.js');
18
18
  var presets_useSelectWithApply_optionsListWithApply_header_Component = require('../presets/useSelectWithApply/options-list-with-apply/header/Component.js');
19
19
 
20
20
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -40,7 +40,7 @@ import '../../base-modal/modern';
40
40
  import '../../button/modern/mobile';
41
41
  import './components/virtual-options-list/Component.js';
42
42
  import 'react-virtual';
43
- import './hook-23f60998.js';
43
+ import './hook-7bb88af2.js';
44
44
  import './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
45
45
  import '../../button/modern/desktop';
46
46
  import './presets/useSelectWithApply/options-list-with-apply/header/Component.js';
@@ -1,4 +1,4 @@
1
- import React, { forwardRef, useRef, useMemo, useCallback, useEffect } from 'react';
1
+ import React, { forwardRef, useRef, useMemo, useEffect, useCallback } from 'react';
2
2
  import mergeRefs from 'react-merge-refs';
3
3
  import { ResizeObserver } from '@juggle/resize-observer';
4
4
  import cn from 'classnames';
@@ -27,7 +27,6 @@ const BaseSelect = forwardRef(
27
27
  const listRef = useRef(null);
28
28
  const initiatorRef = useRef(null);
29
29
  const searchRef = useRef(null);
30
- const alreadyClickedRef = useRef(false);
31
30
  const scrollableContainerRef = useRef(null);
32
31
  const onOpenRef = useRef(onOpen);
33
32
  const [searchState, setSearchState] = React.useState('');
@@ -88,6 +87,24 @@ const BaseSelect = forwardRef(
88
87
  isItemDisabled,
89
88
  defaultHighlightedIndex: selectedItems.length === 0 ? -1 : undefined,
90
89
  scrollIntoView,
90
+ onSelectedItemChange: (changes) => {
91
+ const selectedItem = changes.selectedItem || initiatorRef.current;
92
+ if (selectedItem && !selectedItem.disabled) {
93
+ const alreadySelected = selectedItems.includes(selectedItem);
94
+ const allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
95
+ if (alreadySelected && allowRemove) {
96
+ removeSelectedItem(selectedItem);
97
+ }
98
+ if (!alreadySelected) {
99
+ if (multiple) {
100
+ addSelectedItem(selectedItem);
101
+ }
102
+ else {
103
+ setSelectedItems([selectedItem]);
104
+ }
105
+ }
106
+ }
107
+ },
91
108
  onIsOpenChange: (changes) => {
92
109
  if (onOpenRef.current) {
93
110
  /**
@@ -114,16 +131,9 @@ const BaseSelect = forwardRef(
114
131
  }
115
132
  }
116
133
  },
117
- // eslint-disable-next-line complexity
118
134
  stateReducer: (state, actionAndChanges) => {
119
135
  const { type, changes } = actionAndChanges;
120
- const { selectedItem } = changes;
121
136
  switch (type) {
122
- case useCombobox.stateChangeTypes.InputBlur:
123
- if (view === 'mobile') {
124
- return state;
125
- }
126
- return changes;
127
137
  case useCombobox.stateChangeTypes.InputKeyDownArrowDown:
128
138
  if (!circularNavigation && state.highlightedIndex === options.length - 1) {
129
139
  return { ...changes, highlightedIndex: state.highlightedIndex };
@@ -135,45 +145,40 @@ const BaseSelect = forwardRef(
135
145
  }
136
146
  return changes;
137
147
  case useCombobox.stateChangeTypes.InputKeyDownEnter:
138
- case useCombobox.stateChangeTypes.ItemClick:
148
+ case useCombobox.stateChangeTypes.ItemClick: {
149
+ const { selectedItem } = changes;
139
150
  initiatorRef.current = selectedItem || null;
140
- if (selectedItem && !selectedItem.disabled && !alreadyClickedRef.current) {
141
- // TODO!!! Проблема downshift + React 18. ItemClick срабатывает дважды. См https://github.com/downshift-js/downshift/issues/1384
142
- if (view === 'mobile' && React.version.indexOf('18') === 0) {
143
- alreadyClickedRef.current = true;
144
- setTimeout(() => {
145
- alreadyClickedRef.current = false;
146
- });
147
- }
148
- const alreadySelected = selectedItems.includes(selectedItem);
149
- const allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
150
- if (alreadySelected && allowRemove) {
151
- removeSelectedItem(selectedItem);
152
- }
153
- if (!alreadySelected) {
154
- if (multiple) {
155
- addSelectedItem(selectedItem);
156
- }
157
- else {
158
- setSelectedItems([selectedItem]);
159
- }
160
- }
161
- }
162
151
  return {
163
152
  ...changes,
153
+ selectedItem: state.selectedItem === selectedItem ? null : selectedItem,
164
154
  isOpen: !closeOnSelect || (view === 'mobile' && multiple),
165
155
  // при closeOnSelect === false - сохраняем подсвеченный индекс
166
156
  highlightedIndex: state.isOpen && !closeOnSelect
167
157
  ? state.highlightedIndex
168
158
  : changes.highlightedIndex,
169
159
  };
160
+ }
170
161
  default:
171
162
  return changes;
172
163
  }
173
164
  },
174
165
  });
175
- const menuProps = getMenuProps({ ref: listRef }, { suppressRefError: true });
166
+ useEffect(() => {
167
+ /*
168
+ * При изменении openProp, состояние внутри downshift в useEnhancedReducer не меняется, поэтому меняем его таким способом
169
+ * Скорее всего это исправят в будущих версиях downshift
170
+ */
171
+ if (openProp !== undefined) {
172
+ if (openProp) {
173
+ openMenu();
174
+ }
175
+ else {
176
+ closeMenu();
177
+ }
178
+ }
179
+ }, [openProp, openMenu, closeMenu]);
176
180
  const inputProps = getInputProps(getDropdownProps({ ref: mergeRefs([ref, fieldRef]) }));
181
+ const { ref: menuRef, ...menuProps } = getMenuProps({ ref: listRef }, { suppressRefError: true });
177
182
  const handleEntered = (node, isAppearing) => {
178
183
  if (showSearch)
179
184
  searchRef.current?.focus();
@@ -342,7 +347,7 @@ const BaseSelect = forwardRef(
342
347
  if (flatOptions.length === 0 && !showEmptyOptionsList && !showSearch)
343
348
  return null;
344
349
  const listProps = optionsListProps;
345
- return (React.createElement("div", { ...menuProps, className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) },
350
+ return (React.createElement("div", { ...menuProps, ref: view === 'desktop' ? menuRef : undefined, className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) },
346
351
  React.createElement(OptionsList, { ...listProps, ref: view === 'desktop' ? listProps.ref : scrollableContainerRef, setHighlightedIndex: view === 'desktop' ? setHighlightedIndex : undefined, className: cn({ [mobileStyles.optionsList]: view === 'mobile' }), scrollbarClassName: cn({ [mobileStyles.scrollbar]: view === 'mobile' }), optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: filteredOptions, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: view === 'desktop' ? visibleOptions : 0, dataTestId: getDataTestId(dataTestId, 'options-list'), header: renderOptionsListHeader(), optionGroupClassName: cn(optionGroupClassName, {
347
352
  [mobileStyles.optionGroup]: view === 'mobile',
348
353
  }), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll }),
@@ -356,7 +361,7 @@ const BaseSelect = forwardRef(
356
361
  };
357
362
  const renderInBottomSheet = () => {
358
363
  if (!nativeSelect && BottomSheet) {
359
- return (React.createElement(BottomSheet, { dataTestId: getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles.sheet, contentClassName: mobileStyles.sheetContent, containerClassName: mobileStyles.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default', ...bottomSheetProps, scrollableContainerRef: scrollableContainerRef, onClose: () => {
364
+ return (React.createElement(BottomSheet, { dataTestId: getDataTestId(dataTestId, 'bottom-sheet'), open: open, className: mobileStyles.sheet, contentClassName: mobileStyles.sheetContent, containerClassName: mobileStyles.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, initialHeight: showSearch ? 'full' : 'default', ...bottomSheetProps, sheetContainerRef: menuRef, scrollableContainerRef: scrollableContainerRef, onClose: () => {
360
365
  closeMenu();
361
366
  bottomSheetProps?.onClose?.();
362
367
  }, transitionProps: {
@@ -373,7 +378,7 @@ const BaseSelect = forwardRef(
373
378
  };
374
379
  const renderInModalMobile = () => {
375
380
  if (!nativeSelect && ModalMobile) {
376
- return (React.createElement(ModalMobile, { dataTestId: getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true, ...modalProps, onClose: (...args) => {
381
+ return (React.createElement(ModalMobile, { dataTestId: getDataTestId(dataTestId, 'modal'), open: open, hasCloser: true, ...modalProps, componentRef: menuRef, onClose: (...args) => {
377
382
  closeMenu();
378
383
  modalProps?.onClose?.(...args);
379
384
  }, contentClassName: cn(mobileStyles.sheetContent, modalProps?.contentClassName), ref: mergeRefs([
@@ -40,7 +40,7 @@ import '../../base-modal/modern';
40
40
  import '../../button/modern/mobile';
41
41
  import './components/virtual-options-list/Component.js';
42
42
  import 'react-virtual';
43
- import './hook-23f60998.js';
43
+ import './hook-7bb88af2.js';
44
44
  import './presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
45
45
  import '../../button/modern/desktop';
46
46
  import './presets/useSelectWithApply/options-list-with-apply/header/Component.js';
@@ -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-23f60998.js';
14
+ import { u as useSelectWithApply } from '../hook-7bb88af2.js';
15
15
  import { Header } from '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
16
16
  import 'classnames';
17
17
  import '@alfalab/icons-glyph/ChevronDownMIcon';
@@ -36,7 +36,7 @@ import '../../../input/modern';
36
36
  import '@alfalab/icons-glyph/MagnifierMIcon';
37
37
  import '../components/virtual-options-list/Component.js';
38
38
  import 'react-virtual';
39
- import '../hook-23f60998.js';
39
+ import '../hook-7bb88af2.js';
40
40
  import '../presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
41
41
  import '../../../button/modern/desktop';
42
42
  import '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
@@ -37,7 +37,7 @@ import '../../../input/modern';
37
37
  import '@alfalab/icons-glyph/MagnifierMIcon';
38
38
  import '../components/virtual-options-list/Component.js';
39
39
  import 'react-virtual';
40
- import '../hook-23f60998.js';
40
+ import '../hook-7bb88af2.js';
41
41
  import '../presets/useSelectWithApply/options-list-with-apply/footer/Component.js';
42
42
  import '../../../button/modern/desktop';
43
43
  import '../presets/useSelectWithApply/options-list-with-apply/header/Component.js';
@@ -1,6 +1,6 @@
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-23f60998.js';
3
+ export { S as SELECT_ALL_KEY, u as useSelectWithApply } from '../hook-7bb88af2.js';
4
4
  import 'react';
5
5
  import '../../../skeleton/modern';
6
6
  import '../components/option/Component.js';