@alfalab/core-components-select 13.2.10 → 13.2.12

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 (261) hide show
  1. package/{Component-d45b1eb6.d.ts → Component-4af19284.d.ts} +0 -0
  2. package/{Component-d45b1eb6.js → Component-4af19284.js} +10 -10
  3. package/{Component-4dccfbd0.d.ts → Component-989a84db.d.ts} +0 -0
  4. package/{Component-4dccfbd0.js → Component-989a84db.js} +31 -26
  5. package/Component.js +4 -4
  6. package/Component.responsive.js +7 -6
  7. package/components/arrow/Component.js +1 -1
  8. package/components/arrow/index.css +3 -3
  9. package/components/base-checkmark/Component.js +2 -3
  10. package/components/base-checkmark/index.css +4 -4
  11. package/components/base-option/Component.js +3 -3
  12. package/components/base-option/index.css +13 -13
  13. package/components/base-option/index.js +1 -1
  14. package/components/base-select/Component.js +2 -2
  15. package/components/base-select/index.css +7 -7
  16. package/components/base-select/index.d.ts +1 -1
  17. package/components/base-select/index.js +2 -2
  18. package/components/base-select-mobile/Component.js +5 -4
  19. package/components/base-select-mobile/checkmark/Component.js +1 -1
  20. package/components/base-select-mobile/checkmark/index.css +6 -6
  21. package/components/base-select-mobile/index.css +11 -11
  22. package/components/base-select-mobile/index.d.ts +1 -1
  23. package/components/base-select-mobile/index.js +5 -4
  24. package/components/base-select-mobile/options-list/Component.js +3 -3
  25. package/components/base-select-mobile/options-list/index.css +9 -9
  26. package/components/base-select-mobile/options-list/index.js +1 -1
  27. package/components/base-select-mobile/virtual-options-list/Component.d.ts +5 -0
  28. package/components/base-select-mobile/virtual-options-list/Component.js +112 -0
  29. package/components/base-select-mobile/virtual-options-list/index.css +89 -0
  30. package/components/base-select-mobile/virtual-options-list/index.d.ts +1 -0
  31. package/components/base-select-mobile/virtual-options-list/index.js +16 -0
  32. package/components/checkmark/Component.js +1 -1
  33. package/components/checkmark/index.css +10 -10
  34. package/components/field/Component.js +4 -4
  35. package/components/field/index.css +9 -9
  36. package/components/field/index.js +1 -1
  37. package/components/index.js +5 -4
  38. package/components/native-select/Component.js +4 -4
  39. package/components/native-select/index.js +1 -1
  40. package/components/optgroup/Component.js +1 -1
  41. package/components/optgroup/index.css +6 -6
  42. package/components/option/Component.js +3 -3
  43. package/components/option/index.css +20 -20
  44. package/components/option/index.js +1 -1
  45. package/components/options-list/Component.js +5 -5
  46. package/components/options-list/index.css +6 -6
  47. package/components/options-list/index.js +1 -1
  48. package/components/select-mobile/Component.js +5 -4
  49. package/components/select-mobile/index.d.ts +1 -1
  50. package/components/select-mobile/index.js +5 -4
  51. package/components/select-modal-mobile/Component.js +5 -4
  52. package/components/select-modal-mobile/index.d.ts +1 -1
  53. package/components/select-modal-mobile/index.js +5 -4
  54. package/components/virtual-options-list/Component.js +4 -4
  55. package/components/virtual-options-list/index.css +12 -12
  56. package/components/virtual-options-list/index.js +1 -1
  57. package/cssm/{Component-d0e84442.d.ts → Component-1481ef6b.d.ts} +0 -0
  58. package/cssm/{Component-d0e84442.js → Component-1481ef6b.js} +9 -9
  59. package/cssm/{Component-29488b22.d.ts → Component-8f0723b4.d.ts} +0 -0
  60. package/cssm/{Component-29488b22.js → Component-8f0723b4.js} +28 -23
  61. package/cssm/Component.js +4 -4
  62. package/cssm/Component.responsive.js +7 -5
  63. package/cssm/components/base-checkmark/Component.js +1 -2
  64. package/cssm/components/base-option/Component.js +2 -2
  65. package/cssm/components/base-option/index.js +1 -1
  66. package/cssm/components/base-select/Component.js +2 -2
  67. package/cssm/components/base-select/index.d.ts +1 -1
  68. package/cssm/components/base-select/index.js +2 -2
  69. package/cssm/components/base-select-mobile/Component.js +5 -3
  70. package/cssm/components/base-select-mobile/index.d.ts +1 -1
  71. package/cssm/components/base-select-mobile/index.js +5 -3
  72. package/cssm/components/base-select-mobile/options-list/Component.js +2 -2
  73. package/cssm/components/base-select-mobile/options-list/index.js +1 -1
  74. package/cssm/components/base-select-mobile/virtual-options-list/Component.d.ts +5 -0
  75. package/cssm/components/base-select-mobile/virtual-options-list/Component.js +112 -0
  76. package/cssm/components/base-select-mobile/virtual-options-list/index.d.ts +1 -0
  77. package/cssm/components/base-select-mobile/virtual-options-list/index.js +18 -0
  78. package/cssm/components/base-select-mobile/virtual-options-list/index.module.css +88 -0
  79. package/cssm/components/field/Component.js +3 -3
  80. package/cssm/components/field/index.js +1 -1
  81. package/cssm/components/index.js +5 -3
  82. package/cssm/components/native-select/Component.js +4 -4
  83. package/cssm/components/native-select/index.js +1 -1
  84. package/cssm/components/option/Component.js +2 -2
  85. package/cssm/components/option/index.js +1 -1
  86. package/cssm/components/options-list/Component.js +4 -4
  87. package/cssm/components/options-list/index.js +1 -1
  88. package/cssm/components/select-mobile/Component.js +5 -3
  89. package/cssm/components/select-mobile/index.d.ts +1 -1
  90. package/cssm/components/select-mobile/index.js +5 -3
  91. package/cssm/components/select-modal-mobile/Component.js +5 -3
  92. package/cssm/components/select-modal-mobile/index.d.ts +1 -1
  93. package/cssm/components/select-modal-mobile/index.js +5 -3
  94. package/cssm/components/virtual-options-list/Component.js +3 -3
  95. package/cssm/components/virtual-options-list/index.js +1 -1
  96. package/cssm/index.js +5 -3
  97. package/cssm/presets/index.js +5 -3
  98. package/cssm/presets/useLazyLoading/hook.js +9 -9
  99. package/cssm/presets/useSelectWithApply/hook.js +5 -3
  100. package/cssm/presets/useSelectWithApply/options-list-with-apply/Component.js +5 -3
  101. package/cssm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  102. package/cssm/presets/useSelectWithApply/options-list-with-apply/index.js +5 -3
  103. package/cssm/presets/useSelectWithLoading/hook.js +2 -2
  104. package/cssm/responsive.js +5 -3
  105. package/cssm/utils.js +1 -1
  106. package/esm/{Component-2d2efe5d.d.ts → Component-a733e47f.d.ts} +0 -0
  107. package/esm/{Component-2d2efe5d.js → Component-a733e47f.js} +2 -2
  108. package/esm/{Component-909f3a34.d.ts → Component-b674590a.d.ts} +0 -0
  109. package/esm/{Component-909f3a34.js → Component-b674590a.js} +15 -10
  110. package/esm/Component.js +2 -2
  111. package/esm/Component.responsive.js +5 -4
  112. package/esm/components/arrow/Component.js +1 -1
  113. package/esm/components/arrow/index.css +3 -3
  114. package/esm/components/base-checkmark/Component.js +2 -3
  115. package/esm/components/base-checkmark/index.css +4 -4
  116. package/esm/components/base-option/Component.js +2 -2
  117. package/esm/components/base-option/index.css +13 -13
  118. package/esm/components/base-option/index.js +1 -1
  119. package/esm/components/base-select/Component.js +2 -2
  120. package/esm/components/base-select/index.css +7 -7
  121. package/esm/components/base-select/index.d.ts +1 -1
  122. package/esm/components/base-select/index.js +2 -2
  123. package/esm/components/base-select-mobile/Component.js +5 -4
  124. package/esm/components/base-select-mobile/checkmark/Component.js +1 -1
  125. package/esm/components/base-select-mobile/checkmark/index.css +6 -6
  126. package/esm/components/base-select-mobile/index.css +11 -11
  127. package/esm/components/base-select-mobile/index.d.ts +1 -1
  128. package/esm/components/base-select-mobile/index.js +5 -4
  129. package/esm/components/base-select-mobile/options-list/Component.js +2 -2
  130. package/esm/components/base-select-mobile/options-list/index.css +9 -9
  131. package/esm/components/base-select-mobile/options-list/index.js +1 -1
  132. package/esm/components/base-select-mobile/virtual-options-list/Component.d.ts +5 -0
  133. package/esm/components/base-select-mobile/virtual-options-list/Component.js +105 -0
  134. package/esm/components/base-select-mobile/virtual-options-list/index.css +89 -0
  135. package/esm/components/base-select-mobile/virtual-options-list/index.d.ts +1 -0
  136. package/esm/components/base-select-mobile/virtual-options-list/index.js +10 -0
  137. package/esm/components/checkmark/Component.js +1 -1
  138. package/esm/components/checkmark/index.css +10 -10
  139. package/esm/components/field/Component.js +2 -2
  140. package/esm/components/field/index.css +9 -9
  141. package/esm/components/field/index.js +1 -1
  142. package/esm/components/index.js +5 -4
  143. package/esm/components/native-select/Component.js +1 -1
  144. package/esm/components/native-select/index.js +1 -1
  145. package/esm/components/optgroup/Component.js +1 -1
  146. package/esm/components/optgroup/index.css +6 -6
  147. package/esm/components/option/Component.js +2 -2
  148. package/esm/components/option/index.css +20 -20
  149. package/esm/components/option/index.js +1 -1
  150. package/esm/components/options-list/Component.js +2 -2
  151. package/esm/components/options-list/index.css +6 -6
  152. package/esm/components/options-list/index.js +1 -1
  153. package/esm/components/select-mobile/Component.js +5 -4
  154. package/esm/components/select-mobile/index.d.ts +1 -1
  155. package/esm/components/select-mobile/index.js +5 -4
  156. package/esm/components/select-modal-mobile/Component.js +5 -4
  157. package/esm/components/select-modal-mobile/index.d.ts +1 -1
  158. package/esm/components/select-modal-mobile/index.js +5 -4
  159. package/esm/components/virtual-options-list/Component.js +2 -2
  160. package/esm/components/virtual-options-list/index.css +12 -12
  161. package/esm/components/virtual-options-list/index.js +1 -1
  162. package/esm/index.js +5 -4
  163. package/esm/{intersection-observer-eebe1d7d.d.ts → intersection-observer-de8255b2.d.ts} +0 -0
  164. package/esm/{intersection-observer-eebe1d7d.js → intersection-observer-de8255b2.js} +0 -0
  165. package/esm/presets/index.js +5 -4
  166. package/esm/presets/useLazyLoading/hook.js +3 -3
  167. package/esm/presets/useLazyLoading/index.css +2 -2
  168. package/esm/presets/useSelectWithApply/hook.js +5 -4
  169. package/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +5 -4
  170. package/esm/presets/useSelectWithApply/options-list-with-apply/index.css +4 -4
  171. package/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  172. package/esm/presets/useSelectWithApply/options-list-with-apply/index.js +5 -4
  173. package/esm/presets/useSelectWithLoading/hook.js +2 -2
  174. package/esm/presets/useSelectWithLoading/index.css +2 -2
  175. package/esm/responsive.js +5 -4
  176. package/esm/utils.js +1 -1
  177. package/index.js +5 -4
  178. package/{intersection-observer-0845add3.d.ts → intersection-observer-230e176d.d.ts} +0 -0
  179. package/{intersection-observer-0845add3.js → intersection-observer-230e176d.js} +0 -0
  180. package/modern/{Component-79964ac6.d.ts → Component-01c0d01a.d.ts} +0 -0
  181. package/modern/{Component-79964ac6.js → Component-01c0d01a.js} +14 -9
  182. package/modern/{Component-2a37a356.d.ts → Component-228a3435.d.ts} +0 -0
  183. package/modern/{Component-2a37a356.js → Component-228a3435.js} +1 -1
  184. package/modern/Component.js +1 -1
  185. package/modern/Component.responsive.js +4 -3
  186. package/modern/components/arrow/Component.js +1 -1
  187. package/modern/components/arrow/index.css +3 -3
  188. package/modern/components/base-checkmark/Component.js +2 -3
  189. package/modern/components/base-checkmark/index.css +4 -4
  190. package/modern/components/base-option/Component.js +1 -1
  191. package/modern/components/base-option/index.css +13 -13
  192. package/modern/components/base-select/Component.js +1 -1
  193. package/modern/components/base-select/index.css +7 -7
  194. package/modern/components/base-select/index.d.ts +1 -1
  195. package/modern/components/base-select/index.js +1 -1
  196. package/modern/components/base-select-mobile/Component.js +4 -3
  197. package/modern/components/base-select-mobile/checkmark/Component.js +1 -1
  198. package/modern/components/base-select-mobile/checkmark/index.css +6 -6
  199. package/modern/components/base-select-mobile/index.css +11 -11
  200. package/modern/components/base-select-mobile/index.d.ts +1 -1
  201. package/modern/components/base-select-mobile/index.js +4 -3
  202. package/modern/components/base-select-mobile/options-list/Component.js +1 -1
  203. package/modern/components/base-select-mobile/options-list/index.css +9 -9
  204. package/modern/components/base-select-mobile/virtual-options-list/Component.d.ts +5 -0
  205. package/modern/components/base-select-mobile/virtual-options-list/Component.js +99 -0
  206. package/modern/components/base-select-mobile/virtual-options-list/index.css +89 -0
  207. package/modern/components/base-select-mobile/virtual-options-list/index.d.ts +1 -0
  208. package/modern/components/base-select-mobile/virtual-options-list/index.js +9 -0
  209. package/modern/components/checkmark/Component.js +1 -1
  210. package/modern/components/checkmark/index.css +10 -10
  211. package/modern/components/field/Component.js +1 -1
  212. package/modern/components/field/index.css +9 -9
  213. package/modern/components/index.js +4 -3
  214. package/modern/components/optgroup/Component.js +1 -1
  215. package/modern/components/optgroup/index.css +6 -6
  216. package/modern/components/option/Component.js +1 -1
  217. package/modern/components/option/index.css +20 -20
  218. package/modern/components/options-list/Component.js +1 -1
  219. package/modern/components/options-list/index.css +6 -6
  220. package/modern/components/select-mobile/Component.js +4 -3
  221. package/modern/components/select-mobile/index.d.ts +1 -1
  222. package/modern/components/select-mobile/index.js +4 -3
  223. package/modern/components/select-modal-mobile/Component.js +4 -3
  224. package/modern/components/select-modal-mobile/index.d.ts +1 -1
  225. package/modern/components/select-modal-mobile/index.js +4 -3
  226. package/modern/components/virtual-options-list/Component.js +1 -1
  227. package/modern/components/virtual-options-list/index.css +12 -12
  228. package/modern/index.js +4 -3
  229. package/modern/{intersection-observer-eebe1d7d.d.ts → intersection-observer-de8255b2.d.ts} +0 -0
  230. package/modern/{intersection-observer-eebe1d7d.js → intersection-observer-de8255b2.js} +0 -0
  231. package/modern/presets/index.js +4 -3
  232. package/modern/presets/useLazyLoading/hook.js +2 -2
  233. package/modern/presets/useLazyLoading/index.css +2 -2
  234. package/modern/presets/useSelectWithApply/hook.js +4 -3
  235. package/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +4 -3
  236. package/modern/presets/useSelectWithApply/options-list-with-apply/index.css +4 -4
  237. package/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  238. package/modern/presets/useSelectWithApply/options-list-with-apply/index.js +4 -3
  239. package/modern/presets/useSelectWithLoading/hook.js +1 -1
  240. package/modern/presets/useSelectWithLoading/index.css +2 -2
  241. package/modern/responsive.js +4 -3
  242. package/modern/utils.js +1 -1
  243. package/package.json +14 -13
  244. package/presets/index.js +5 -4
  245. package/presets/useLazyLoading/hook.js +11 -11
  246. package/presets/useLazyLoading/index.css +2 -2
  247. package/presets/useSelectWithApply/hook.js +5 -4
  248. package/presets/useSelectWithApply/options-list-with-apply/Component.js +5 -4
  249. package/presets/useSelectWithApply/options-list-with-apply/index.css +4 -4
  250. package/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  251. package/presets/useSelectWithApply/options-list-with-apply/index.js +5 -4
  252. package/presets/useSelectWithLoading/hook.js +3 -3
  253. package/presets/useSelectWithLoading/index.css +2 -2
  254. package/responsive.js +5 -4
  255. package/utils.js +1 -1
  256. package/cssm/tslib.es6-0e9bf404.d.ts +0 -36
  257. package/cssm/tslib.es6-0e9bf404.js +0 -54
  258. package/esm/tslib.es6-00fefe9b.d.ts +0 -36
  259. package/esm/tslib.es6-00fefe9b.js +0 -51
  260. package/tslib.es6-ade45ad3.d.ts +0 -36
  261. package/tslib.es6-ade45ad3.js +0 -54
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var tslib_es6 = require('./tslib.es6-0e9bf404.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var mergeRefs = require('react-merge-refs');
6
6
  var resizeObserver = require('@juggle/resize-observer');
@@ -105,7 +105,7 @@ var BaseSelect = React.forwardRef(function (_a, ref) {
105
105
  }
106
106
  }
107
107
  }
108
- return tslib_es6.__assign(tslib_es6.__assign({}, changes), { isOpen: !closeOnSelect,
108
+ return tslib.__assign(tslib.__assign({}, changes), { isOpen: !closeOnSelect,
109
109
  // при closeOnSelect === false - сохраняем подсвеченный индекс
110
110
  highlightedIndex: state.isOpen && !closeOnSelect
111
111
  ? state.highlightedIndex
@@ -159,11 +159,11 @@ var BaseSelect = React.forwardRef(function (_a, ref) {
159
159
  }
160
160
  };
161
161
  var handleNativeSelectChange = React.useCallback(function (event) {
162
- setSelectedItems(tslib_es6.__spreadArray([], event.target.options, true).reduce(function (acc, option, index) {
162
+ setSelectedItems(tslib.__spreadArray([], event.target.options, true).reduce(function (acc, option, index) {
163
163
  return option.selected ? acc.concat(flatOptions[index]) : acc;
164
164
  }, []));
165
165
  }, [flatOptions, setSelectedItems]);
166
- var getOptionProps = React.useCallback(function (option, index) { return (tslib_es6.__assign(tslib_es6.__assign({}, optionProps), { className: optionClassName, innerProps: getItemProps({
166
+ var getOptionProps = React.useCallback(function (option, index) { return (tslib.__assign(tslib.__assign({}, optionProps), { className: optionClassName, innerProps: getItemProps({
167
167
  index: index,
168
168
  item: option,
169
169
  disabled: option.disabled,
@@ -221,12 +221,12 @@ var BaseSelect = React.forwardRef(function (_a, ref) {
221
221
  var value = multiple
222
222
  ? selectedItems.map(function (option) { return option.key; })
223
223
  : (selectedItems[0] || {}).key;
224
- return (React__default.default.createElement(components_nativeSelect_Component.NativeSelect, tslib_es6.__assign({}, menuProps, { className: styles__default.default.nativeSelect, disabled: disabled, multiple: multiple, name: name, value: value, onChange: handleNativeSelectChange, options: options })));
224
+ return (React__default.default.createElement(components_nativeSelect_Component.NativeSelect, tslib.__assign({}, menuProps, { className: styles__default.default.nativeSelect, disabled: disabled, multiple: multiple, name: name, value: value, onChange: handleNativeSelectChange, options: options })));
225
225
  }, [multiple, selectedItems, disabled, name, handleNativeSelectChange, options, menuProps]);
226
226
  var needRenderOptionsList = flatOptions.length > 0 || showEmptyOptionsList;
227
- return (React__default.default.createElement("div", tslib_es6.__assign({}, getComboboxProps(tslib_es6.__assign(tslib_es6.__assign({ ref: rootRef }, (disabled && { 'aria-disabled': true })), { className: cn__default.default(styles__default.default.component, (_b = {}, _b[styles__default.default.block] = block, _b), className) })), { onKeyDown: disabled ? undefined : handleFieldKeyDown, tabIndex: -1, "data-test-id": getDataTestId(dataTestId) }),
227
+ return (React__default.default.createElement("div", tslib.__assign({}, getComboboxProps(tslib.__assign(tslib.__assign({ ref: rootRef }, (disabled && { 'aria-disabled': true })), { className: cn__default.default(styles__default.default.component, (_b = {}, _b[styles__default.default.block] = block, _b), className) })), { onKeyDown: disabled ? undefined : handleFieldKeyDown, tabIndex: -1, "data-test-id": getDataTestId(dataTestId) }),
228
228
  nativeSelect && renderNativeSelect(),
229
- React__default.default.createElement(Field, tslib_es6.__assign({ selectedMultiple: selectedItems, selected: selectedItems[0], setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, multiple: multiple, open: open, disabled: disabled, size: size, placeholder: placeholder, label: label && React__default.default.createElement("span", tslib_es6.__assign({}, getLabelProps()), label), labelView: labelView, Arrow: Arrow && React__default.default.createElement(Arrow, { open: open }), error: error, hint: hint, valueRenderer: valueRenderer, className: fieldClassName, innerProps: {
229
+ React__default.default.createElement(Field, tslib.__assign({ selectedMultiple: selectedItems, selected: selectedItems[0], setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, multiple: multiple, open: open, disabled: disabled, size: size, placeholder: placeholder, label: label && React__default.default.createElement("span", tslib.__assign({}, getLabelProps()), label), labelView: labelView, Arrow: Arrow && React__default.default.createElement(Arrow, { open: open }), error: error, hint: hint, valueRenderer: valueRenderer, className: fieldClassName, innerProps: {
230
230
  onBlur: handleFieldBlur,
231
231
  onFocus: disabled ? undefined : handleFieldFocus,
232
232
  onClick: disabled ? undefined : handleFieldClick,
@@ -240,8 +240,8 @@ var BaseSelect = React.forwardRef(function (_a, ref) {
240
240
  : undefined,
241
241
  }, dataTestId: getDataTestId(dataTestId, 'field') }, fieldProps)),
242
242
  name && !nativeSelect && renderValue(),
243
- !nativeSelect && (React__default.default.createElement(coreComponentsPopover.Popover, { open: open, withTransition: false, anchorElement: fieldRef.current, position: popoverPosition, preventFlip: preventFlip, popperClassName: cn__default.default(styles__default.default.popoverInner, popperClassName), update: updatePopover, zIndex: zIndexPopover }, needRenderOptionsList && (React__default.default.createElement("div", tslib_es6.__assign({}, menuProps, { className: cn__default.default(optionsListClassName, styles__default.default.optionsList) }),
244
- React__default.default.createElement(OptionsList, tslib_es6.__assign({}, optionsListProps, { optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: options, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: visibleOptions, onScroll: onScroll, dataTestId: getDataTestId(dataTestId, 'options-list') }))))))));
243
+ !nativeSelect && (React__default.default.createElement(coreComponentsPopover.Popover, { open: open, withTransition: false, anchorElement: fieldRef.current, position: popoverPosition, preventFlip: preventFlip, popperClassName: cn__default.default(styles__default.default.popoverInner, popperClassName), update: updatePopover, zIndex: zIndexPopover }, needRenderOptionsList && (React__default.default.createElement("div", tslib.__assign({}, menuProps, { className: cn__default.default(optionsListClassName, styles__default.default.optionsList) }),
244
+ React__default.default.createElement(OptionsList, tslib.__assign({}, optionsListProps, { optionsListWidth: optionsListWidth, flatOptions: flatOptions, highlightedIndex: highlightedIndex, open: open, size: size, options: options, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, visibleOptions: visibleOptions, onScroll: onScroll, dataTestId: getDataTestId(dataTestId, 'options-list') }))))))));
245
245
  });
246
246
 
247
247
  exports.BaseSelect = BaseSelect;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var tslib_es6 = require('./tslib.es6-0e9bf404.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var components_arrow_Component = require('./components/arrow/Component.js');
6
6
  var mergeRefs = require('react-merge-refs');
@@ -9,7 +9,7 @@ var downshift = require('downshift');
9
9
  var coreComponentsBottomSheet = require('@alfalab/core-components-bottom-sheet/cssm');
10
10
  var mobile = require('@alfalab/core-components-modal/cssm/mobile');
11
11
  require('./Component.js');
12
- var components_baseSelect_Component = require('./Component-d0e84442.js');
12
+ var components_baseSelect_Component = require('./Component-1481ef6b.js');
13
13
  var components_field_Component = require('./components/field/Component.js');
14
14
  var components_optgroup_Component = require('./components/optgroup/Component.js');
15
15
  var components_option_Component = require('./components/option/Component.js');
@@ -43,6 +43,7 @@ var styles = require('./presets/useSelectWithApply/options-list-with-apply/index
43
43
  var components_baseCheckmark_Component = require('./components/base-checkmark/Component.js');
44
44
  var components_baseSelectMobile_checkmark_Component = require('./components/base-select-mobile/checkmark/Component.js');
45
45
  var components_baseSelectMobile_optionsList_Component = require('./components/base-select-mobile/options-list/Component.js');
46
+ var components_baseSelectMobile_virtualOptionsList_Component = require('./components/base-select-mobile/virtual-options-list/Component.js');
46
47
  var styles$1 = require('./components/base-select-mobile/index.module.css');
47
48
 
48
49
  function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
@@ -55,14 +56,14 @@ var styles__default$1 = /*#__PURE__*/_interopDefaultCompat(styles$1);
55
56
 
56
57
  var OptionsListWithApply = React.forwardRef(function (_a, ref) {
57
58
  var _b;
58
- var toggleMenu = _a.toggleMenu, _c = _a.OptionsList, OptionsList = _c === void 0 ? components_optionsList_Component.OptionsList : _c, defaultGetOptionProps = _a.getOptionProps, _d = _a.showClear, showClear = _d === void 0 ? true : _d, _e = _a.selectedDraft, selectedDraft = _e === void 0 ? [] : _e, _f = _a.flatOptions, flatOptions = _f === void 0 ? [] : _f, _g = _a.onApply, onApply = _g === void 0 ? function () { return null; } : _g, _h = _a.onClear, onClear = _h === void 0 ? function () { return null; } : _h, _j = _a.onClose, onClose = _j === void 0 ? function () { return null; } : _j, _k = _a.visibleOptions, visibleOptions = _k === void 0 ? 5 : _k, restProps = tslib_es6.__rest(_a, ["toggleMenu", "OptionsList", "getOptionProps", "showClear", "selectedDraft", "flatOptions", "onApply", "onClear", "onClose", "visibleOptions"]);
59
+ var toggleMenu = _a.toggleMenu, _c = _a.OptionsList, OptionsList = _c === void 0 ? components_optionsList_Component.OptionsList : _c, defaultGetOptionProps = _a.getOptionProps, _d = _a.showClear, showClear = _d === void 0 ? true : _d, _e = _a.selectedDraft, selectedDraft = _e === void 0 ? [] : _e, _f = _a.flatOptions, flatOptions = _f === void 0 ? [] : _f, _g = _a.onApply, onApply = _g === void 0 ? function () { return null; } : _g, _h = _a.onClear, onClear = _h === void 0 ? function () { return null; } : _h, _j = _a.onClose, onClose = _j === void 0 ? function () { return null; } : _j, _k = _a.visibleOptions, visibleOptions = _k === void 0 ? 5 : _k, restProps = tslib.__rest(_a, ["toggleMenu", "OptionsList", "getOptionProps", "showClear", "selectedDraft", "flatOptions", "onApply", "onClear", "onClose", "visibleOptions"]);
59
60
  var footerRef = React.useRef(null);
60
61
  var getOptionProps = React.useCallback(function (option, index) {
61
62
  var optionProps = defaultGetOptionProps(option, index);
62
63
  var selected = option.key === SELECT_ALL_KEY
63
64
  ? selectedDraft.length === flatOptions.length - 1
64
65
  : selectedDraft.includes(option);
65
- return tslib_es6.__assign(tslib_es6.__assign({}, optionProps), { selected: selected });
66
+ return tslib.__assign(tslib.__assign({}, optionProps), { selected: selected });
66
67
  }, [defaultGetOptionProps, flatOptions.length, selectedDraft]);
67
68
  var handleApply = React.useCallback(function () {
68
69
  onApply();
@@ -87,7 +88,7 @@ var OptionsListWithApply = React.forwardRef(function (_a, ref) {
87
88
  };
88
89
  // eslint-disable-next-line react-hooks/exhaustive-deps
89
90
  }, []);
90
- return (React__default.default.createElement(OptionsList, tslib_es6.__assign({}, restProps, { ref: ref, visibleOptions: visibleOptions, toggleMenu: toggleMenu, flatOptions: flatOptions, getOptionProps: getOptionProps, onApply: handleApply, onClear: handleClear, footer: React__default.default.createElement("div", {
91
+ return (React__default.default.createElement(OptionsList, tslib.__assign({}, restProps, { ref: ref, visibleOptions: visibleOptions, toggleMenu: toggleMenu, flatOptions: flatOptions, getOptionProps: getOptionProps, onApply: handleApply, onClear: handleClear, footer: React__default.default.createElement("div", {
91
92
  // eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex
92
93
  tabIndex: 0, className: cn__default.default(styles__default.default.footer, (_b = {},
93
94
  _b[styles__default.default.withBorder] = visibleOptions && flatOptions.length > visibleOptions,
@@ -119,9 +120,9 @@ function useSelectWithApply(_a) {
119
120
  });
120
121
  }, [onChange]);
121
122
  var handleChange = React.useCallback(function (_a) {
122
- var initiator = _a.initiator, restArgs = tslib_es6.__rest(_a, ["initiator"]);
123
+ var initiator = _a.initiator, restArgs = tslib.__rest(_a, ["initiator"]);
123
124
  if (!initiator) {
124
- onChange(tslib_es6.__assign({ initiator: null }, restArgs));
125
+ onChange(tslib.__assign({ initiator: null }, restArgs));
125
126
  return;
126
127
  }
127
128
  var initiatorSelected = selectedDraft.includes(initiator) ||
@@ -142,7 +143,7 @@ function useSelectWithApply(_a) {
142
143
  setSelectedDraft(selectedOptions);
143
144
  selectedOptionsRef.current = selectedOptions;
144
145
  }, [selectedOptions]);
145
- var memoizedOptions = React.useMemo(function () { return (showSelectAll ? tslib_es6.__spreadArray([selectAllOption], options, true) : options); }, [options, showSelectAll]);
146
+ var memoizedOptions = React.useMemo(function () { return (showSelectAll ? tslib.__spreadArray([selectAllOption], options, true) : options); }, [options, showSelectAll]);
146
147
  return {
147
148
  OptionsList: OptionsListWithApply,
148
149
  optionsListProps: {
@@ -161,9 +162,12 @@ function useSelectWithApply(_a) {
161
162
  };
162
163
  }
163
164
 
165
+ var VIRTUAL_OPTIONS_LIST_THRESHOLD = 30;
164
166
  var BaseSelectMobile = React.forwardRef(function (_a, ref) {
165
167
  var _b;
166
- var dataTestId = _a.dataTestId, className = _a.className, fieldClassName = _a.fieldClassName, optionsListClassName = _a.optionsListClassName, optionClassName = _a.optionClassName, optionGroupClassName = _a.optionGroupClassName, optionsListProps = _a.optionsListProps, options = _a.options, _c = _a.autocomplete, autocomplete = _c === void 0 ? false : _c, _d = _a.multiple, multiple = _d === void 0 ? false : _d, _e = _a.allowUnselect, allowUnselect = _e === void 0 ? false : _e, _f = _a.disabled, disabled = _f === void 0 ? false : _f, _g = _a.closeOnSelect, closeOnSelect = _g === void 0 ? !multiple : _g, _h = _a.circularNavigation, circularNavigation = _h === void 0 ? false : _h, _j = _a.defaultOpen, defaultOpen = _j === void 0 ? false : _j, openProp = _a.open, name = _a.name, id = _a.id, selected = _a.selected, _k = _a.size, size = _k === void 0 ? 'm' : _k, _l = _a.optionsSize, optionsSize = _l === void 0 ? 'm' : _l, error = _a.error, hint = _a.hint, block = _a.block, label = _a.label, labelView = _a.labelView, placeholder = _a.placeholder, _m = _a.fieldProps, fieldProps = _m === void 0 ? {} : _m, _o = _a.optionProps, optionProps = _o === void 0 ? {} : _o, valueRenderer = _a.valueRenderer, onChange = _a.onChange, onOpen = _a.onOpen, onFocus = _a.onFocus, _p = _a.Arrow, Arrow = _p === void 0 ? components_arrow_Component.Arrow : _p, _q = _a.Field, Field = _q === void 0 ? components_field_Component.Field : _q, _r = _a.Optgroup, Optgroup = _r === void 0 ? components_optgroup_Component.Optgroup : _r, _s = _a.Option, Option = _s === void 0 ? components_option_Component.Option : _s, _t = _a.OptionsList, OptionsList = _t === void 0 ? components_baseSelectMobile_optionsList_Component.OptionsList : _t, swipeable = _a.swipeable, footer = _a.footer, isBottomSheet = _a.isBottomSheet, bottomSheetProps = _a.bottomSheetProps;
168
+ var dataTestId = _a.dataTestId, className = _a.className, fieldClassName = _a.fieldClassName, optionsListClassName = _a.optionsListClassName, optionClassName = _a.optionClassName, optionGroupClassName = _a.optionGroupClassName, optionsListProps = _a.optionsListProps, options = _a.options, _c = _a.autocomplete, autocomplete = _c === void 0 ? false : _c, _d = _a.multiple, multiple = _d === void 0 ? false : _d, _e = _a.allowUnselect, allowUnselect = _e === void 0 ? false : _e, _f = _a.disabled, disabled = _f === void 0 ? false : _f, _g = _a.closeOnSelect, closeOnSelect = _g === void 0 ? !multiple : _g, _h = _a.circularNavigation, circularNavigation = _h === void 0 ? false : _h, _j = _a.defaultOpen, defaultOpen = _j === void 0 ? false : _j, openProp = _a.open, name = _a.name, id = _a.id, selected = _a.selected, _k = _a.size, size = _k === void 0 ? 'm' : _k, _l = _a.optionsSize, optionsSize = _l === void 0 ? 'm' : _l, error = _a.error, hint = _a.hint, block = _a.block, label = _a.label, labelView = _a.labelView, placeholder = _a.placeholder, _m = _a.fieldProps, fieldProps = _m === void 0 ? {} : _m, _o = _a.optionProps, optionProps = _o === void 0 ? {} : _o, valueRenderer = _a.valueRenderer, onChange = _a.onChange, onOpen = _a.onOpen, onFocus = _a.onFocus, _p = _a.Arrow, Arrow = _p === void 0 ? components_arrow_Component.Arrow : _p, _q = _a.Field, Field = _q === void 0 ? components_field_Component.Field : _q, _r = _a.Optgroup, Optgroup = _r === void 0 ? components_optgroup_Component.Optgroup : _r, _s = _a.Option, Option = _s === void 0 ? components_option_Component.Option : _s, _t = _a.OptionsList, OptionsList = _t === void 0 ? options.length > VIRTUAL_OPTIONS_LIST_THRESHOLD
169
+ ? components_baseSelectMobile_virtualOptionsList_Component.VirtualOptionsList
170
+ : components_baseSelectMobile_optionsList_Component.OptionsList : _t, swipeable = _a.swipeable, footer = _a.footer, isBottomSheet = _a.isBottomSheet, bottomSheetProps = _a.bottomSheetProps;
167
171
  var rootRef = React.useRef(null);
168
172
  var fieldRef = React.useRef(null);
169
173
  var listRef = React.useRef(null);
@@ -171,6 +175,7 @@ var BaseSelectMobile = React.forwardRef(function (_a, ref) {
171
175
  var itemToString = function (option) { return (option ? option.key : ''); };
172
176
  var _u = React.useMemo(function () { return utils.processOptions(options, selected); }, [options, selected]), flatOptions = _u.flatOptions, selectedOptions = _u.selectedOptions;
173
177
  var selectedOptionsRef = React.useRef(selectedOptions);
178
+ var scrollableContainerRef = React.useRef(null);
174
179
  var _v = React.useState(selectedOptions), selectedDraft = _v[0], setSelectedDraft = _v[1];
175
180
  var useMultipleSelectionProps = {
176
181
  itemToString: itemToString,
@@ -253,7 +258,7 @@ var BaseSelectMobile = React.forwardRef(function (_a, ref) {
253
258
  }
254
259
  }
255
260
  }
256
- return tslib_es6.__assign(tslib_es6.__assign({}, changes), { isOpen: !closeOnSelect || multiple,
261
+ return tslib.__assign(tslib.__assign({}, changes), { isOpen: !closeOnSelect || multiple,
257
262
  // при closeOnSelect === false - сохраняем подсвеченный индекс
258
263
  highlightedIndex: state.isOpen && !closeOnSelect
259
264
  ? state.highlightedIndex
@@ -303,7 +308,7 @@ var BaseSelectMobile = React.forwardRef(function (_a, ref) {
303
308
  };
304
309
  var getOptionProps = function (option, index) {
305
310
  var selectedItem = selectedItems.includes(option);
306
- return tslib_es6.__assign(tslib_es6.__assign({}, optionProps), { mobile: true, className: cn__default.default(styles__default$1.default.option, optionClassName), innerProps: getItemProps({
311
+ return tslib.__assign(tslib.__assign({}, optionProps), { mobile: true, className: cn__default.default(styles__default$1.default.option, optionClassName), innerProps: getItemProps({
307
312
  index: index,
308
313
  item: option,
309
314
  disabled: option.disabled,
@@ -340,8 +345,8 @@ var BaseSelectMobile = React.forwardRef(function (_a, ref) {
340
345
  }
341
346
  toggleMenu();
342
347
  };
343
- return (React__default.default.createElement("div", tslib_es6.__assign({}, getComboboxProps(tslib_es6.__assign(tslib_es6.__assign({ ref: rootRef }, (disabled && { 'aria-disabled': true })), { className: cn__default.default(styles__default$1.default.component, (_b = {}, _b[styles__default$1.default.block] = block, _b), className) })), { onKeyDown: disabled ? undefined : handleFieldKeyDown, tabIndex: -1, "data-test-id": components_baseSelect_Component.getDataTestId(dataTestId) }),
344
- React__default.default.createElement(Field, tslib_es6.__assign({ selectedMultiple: selectedDraft, selected: selectedItems[0], setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, multiple: multiple, open: open, disabled: disabled, size: size, placeholder: placeholder, label: label && React__default.default.createElement("span", tslib_es6.__assign({}, getLabelProps()), label), labelView: labelView, Arrow: Arrow && React__default.default.createElement(Arrow, { open: open }), error: error, hint: hint, valueRenderer: valueRenderer, className: fieldClassName, innerProps: {
348
+ return (React__default.default.createElement("div", tslib.__assign({}, getComboboxProps(tslib.__assign(tslib.__assign({ ref: rootRef }, (disabled && { 'aria-disabled': true })), { className: cn__default.default(styles__default$1.default.component, (_b = {}, _b[styles__default$1.default.block] = block, _b), className) })), { onKeyDown: disabled ? undefined : handleFieldKeyDown, tabIndex: -1, "data-test-id": components_baseSelect_Component.getDataTestId(dataTestId) }),
349
+ React__default.default.createElement(Field, tslib.__assign({ selectedMultiple: selectedDraft, selected: selectedItems[0], setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, multiple: multiple, open: open, disabled: disabled, size: size, placeholder: placeholder, label: label && React__default.default.createElement("span", tslib.__assign({}, getLabelProps()), label), labelView: labelView, Arrow: Arrow && React__default.default.createElement(Arrow, { open: open }), error: error, hint: hint, valueRenderer: valueRenderer, className: fieldClassName, innerProps: {
345
350
  onFocus: disabled ? undefined : handleFieldFocus,
346
351
  onClick: disabled ? undefined : handleFieldClick,
347
352
  tabIndex: disabled ? -1 : 0,
@@ -354,22 +359,22 @@ var BaseSelectMobile = React.forwardRef(function (_a, ref) {
354
359
  : undefined,
355
360
  }, dataTestId: components_baseSelect_Component.getDataTestId(dataTestId, 'field') }, fieldProps)),
356
361
  name && renderValue(),
357
- isBottomSheet ? (React__default.default.createElement(coreComponentsBottomSheet.BottomSheet, tslib_es6.__assign({ open: open, onClose: handleClose, className: styles__default$1.default.sheet, contentClassName: styles__default$1.default.sheetContent, containerClassName: styles__default$1.default.sheetContainer, title: placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable }, bottomSheetProps),
358
- React__default.default.createElement("div", tslib_es6.__assign({}, menuProps, { className: optionsListClassName }),
359
- React__default.default.createElement(OptionsListWithApply, tslib_es6.__assign({ showFooter: multiple }, optionsListProps, { flatOptions: flatOptions, highlightedIndex: highlightedIndex, size: size, options: options, OptionsList: OptionsList, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, dataTestId: components_baseSelect_Component.getDataTestId(dataTestId, 'options-list'), optionGroupClassName: cn__default.default(styles__default$1.default.optionGroup, optionGroupClassName), onApply: handleApply, onClear: handleClear }))))) : (React__default.default.createElement(mobile.ModalMobile, { open: open, onClose: handleClose, contentClassName: styles__default$1.default.sheetContent, hasCloser: true },
360
- React__default.default.createElement(mobile.ModalMobile.Header, { hasCloser: true, title: placeholder, sticky: true }),
361
- React__default.default.createElement("div", tslib_es6.__assign({}, menuProps, { className: optionsListClassName }),
362
- React__default.default.createElement(OptionsListWithApply, tslib_es6.__assign({ showFooter: multiple }, optionsListProps, { flatOptions: flatOptions, highlightedIndex: highlightedIndex, size: size, options: options, OptionsList: OptionsList, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, dataTestId: components_baseSelect_Component.getDataTestId(dataTestId, 'options-list'), optionGroupClassName: cn__default.default(styles__default$1.default.optionGroup, optionGroupClassName), onApply: handleApply, onClear: handleClear })))))));
362
+ isBottomSheet ? (React__default.default.createElement(coreComponentsBottomSheet.BottomSheet, tslib.__assign({ open: open, onClose: handleClose, className: styles__default$1.default.sheet, contentClassName: styles__default$1.default.sheetContent, containerClassName: styles__default$1.default.sheetContainer, title: label || placeholder, actionButton: footer, stickyHeader: true, hasCloser: true, swipeable: swipeable, scrollableContainerRef: scrollableContainerRef }, bottomSheetProps),
363
+ React__default.default.createElement("div", tslib.__assign({}, menuProps, { className: optionsListClassName }),
364
+ React__default.default.createElement(OptionsListWithApply, tslib.__assign({ showFooter: multiple }, optionsListProps, { flatOptions: flatOptions, highlightedIndex: highlightedIndex, size: size, options: options, OptionsList: OptionsList, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, dataTestId: components_baseSelect_Component.getDataTestId(dataTestId, 'options-list'), optionGroupClassName: cn__default.default(styles__default$1.default.optionGroup, optionGroupClassName), onApply: handleApply, onClear: handleClear, ref: scrollableContainerRef }))))) : (React__default.default.createElement(mobile.ModalMobile, { open: open, onClose: handleClose, contentClassName: styles__default$1.default.sheetContent, hasCloser: true, ref: scrollableContainerRef },
365
+ React__default.default.createElement(mobile.ModalMobile.Header, { hasCloser: true, sticky: true }, label || placeholder),
366
+ React__default.default.createElement("div", tslib.__assign({}, menuProps, { className: optionsListClassName }),
367
+ React__default.default.createElement(OptionsListWithApply, tslib.__assign({ showFooter: multiple }, optionsListProps, { flatOptions: flatOptions, highlightedIndex: highlightedIndex, size: size, options: options, OptionsList: OptionsList, Optgroup: Optgroup, Option: Option, selectedItems: selectedItems, setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, getOptionProps: getOptionProps, dataTestId: components_baseSelect_Component.getDataTestId(dataTestId, 'options-list'), optionGroupClassName: cn__default.default(styles__default$1.default.optionGroup, optionGroupClassName), onApply: handleApply, onClear: handleClear, ref: scrollableContainerRef })))))));
363
368
  });
364
369
 
365
370
  var SelectMobile = React.forwardRef(function (_a, ref) {
366
- var _b = _a.autocomplete, autocomplete = _b === void 0 ? false : _b, _c = _a.multiple, multiple = _c === void 0 ? false : _c, _d = _a.allowUnselect, allowUnselect = _d === void 0 ? false : _d, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.closeOnSelect, closeOnSelect = _f === void 0 ? !multiple : _f, _g = _a.circularNavigation, circularNavigation = _g === void 0 ? false : _g, _h = _a.defaultOpen, defaultOpen = _h === void 0 ? false : _h, openProp = _a.open, _j = _a.size, size = _j === void 0 ? 'm' : _j, _k = _a.optionsSize, optionsSize = _k === void 0 ? 'm' : _k, _l = _a.fieldProps, fieldProps = _l === void 0 ? {} : _l, _m = _a.optionProps, optionProps = _m === void 0 ? {} : _m, _o = _a.Arrow, Arrow = _o === void 0 ? components_arrow_Component.Arrow : _o, _p = _a.Field, Field = _p === void 0 ? components_field_Component.Field : _p, _q = _a.Optgroup, Optgroup = _q === void 0 ? components_optgroup_Component.Optgroup : _q, _r = _a.Option, Option = _r === void 0 ? components_option_Component.Option : _r, restProps = tslib_es6.__rest(_a, ["autocomplete", "multiple", "allowUnselect", "disabled", "closeOnSelect", "circularNavigation", "defaultOpen", "open", "size", "optionsSize", "fieldProps", "optionProps", "Arrow", "Field", "Optgroup", "Option"]);
367
- return (React__default.default.createElement(BaseSelectMobile, tslib_es6.__assign({ ref: ref, autocomplete: autocomplete, multiple: multiple, allowUnselect: allowUnselect, disabled: disabled, closeOnSelect: closeOnSelect, circularNavigation: circularNavigation, defaultOpen: defaultOpen, open: openProp, size: size, optionsSize: optionsSize, fieldProps: fieldProps, optionProps: optionProps, Arrow: Arrow, Field: Field, Optgroup: Optgroup, Option: Option, isBottomSheet: true }, restProps)));
371
+ var _b = _a.autocomplete, autocomplete = _b === void 0 ? false : _b, _c = _a.multiple, multiple = _c === void 0 ? false : _c, _d = _a.allowUnselect, allowUnselect = _d === void 0 ? false : _d, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.closeOnSelect, closeOnSelect = _f === void 0 ? !multiple : _f, _g = _a.circularNavigation, circularNavigation = _g === void 0 ? false : _g, _h = _a.defaultOpen, defaultOpen = _h === void 0 ? false : _h, openProp = _a.open, _j = _a.size, size = _j === void 0 ? 'm' : _j, _k = _a.optionsSize, optionsSize = _k === void 0 ? 'm' : _k, _l = _a.fieldProps, fieldProps = _l === void 0 ? {} : _l, _m = _a.optionProps, optionProps = _m === void 0 ? {} : _m, _o = _a.Arrow, Arrow = _o === void 0 ? components_arrow_Component.Arrow : _o, _p = _a.Field, Field = _p === void 0 ? components_field_Component.Field : _p, _q = _a.Optgroup, Optgroup = _q === void 0 ? components_optgroup_Component.Optgroup : _q, _r = _a.Option, Option = _r === void 0 ? components_option_Component.Option : _r, restProps = tslib.__rest(_a, ["autocomplete", "multiple", "allowUnselect", "disabled", "closeOnSelect", "circularNavigation", "defaultOpen", "open", "size", "optionsSize", "fieldProps", "optionProps", "Arrow", "Field", "Optgroup", "Option"]);
372
+ return (React__default.default.createElement(BaseSelectMobile, tslib.__assign({ ref: ref, autocomplete: autocomplete, multiple: multiple, allowUnselect: allowUnselect, disabled: disabled, closeOnSelect: closeOnSelect, circularNavigation: circularNavigation, defaultOpen: defaultOpen, open: openProp, size: size, optionsSize: optionsSize, fieldProps: fieldProps, optionProps: optionProps, Arrow: Arrow, Field: Field, Optgroup: Optgroup, Option: Option, isBottomSheet: true }, restProps)));
368
373
  });
369
374
 
370
375
  var SelectModalMobile = React.forwardRef(function (_a, ref) {
371
- var _b = _a.autocomplete, autocomplete = _b === void 0 ? false : _b, _c = _a.multiple, multiple = _c === void 0 ? false : _c, _d = _a.allowUnselect, allowUnselect = _d === void 0 ? false : _d, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.closeOnSelect, closeOnSelect = _f === void 0 ? !multiple : _f, _g = _a.circularNavigation, circularNavigation = _g === void 0 ? false : _g, _h = _a.defaultOpen, defaultOpen = _h === void 0 ? false : _h, openProp = _a.open, _j = _a.size, size = _j === void 0 ? 'm' : _j, _k = _a.optionsSize, optionsSize = _k === void 0 ? 'm' : _k, _l = _a.fieldProps, fieldProps = _l === void 0 ? {} : _l, _m = _a.optionProps, optionProps = _m === void 0 ? {} : _m, _o = _a.Arrow, Arrow = _o === void 0 ? components_arrow_Component.Arrow : _o, _p = _a.Field, Field = _p === void 0 ? components_field_Component.Field : _p, _q = _a.Optgroup, Optgroup = _q === void 0 ? components_optgroup_Component.Optgroup : _q, _r = _a.Option, Option = _r === void 0 ? components_option_Component.Option : _r, restProps = tslib_es6.__rest(_a, ["autocomplete", "multiple", "allowUnselect", "disabled", "closeOnSelect", "circularNavigation", "defaultOpen", "open", "size", "optionsSize", "fieldProps", "optionProps", "Arrow", "Field", "Optgroup", "Option"]);
372
- return (React__default.default.createElement(BaseSelectMobile, tslib_es6.__assign({ ref: ref, autocomplete: autocomplete, multiple: multiple, allowUnselect: allowUnselect, disabled: disabled, closeOnSelect: closeOnSelect, circularNavigation: circularNavigation, defaultOpen: defaultOpen, open: openProp, size: size, optionsSize: optionsSize, fieldProps: fieldProps, optionProps: optionProps, Arrow: Arrow, Field: Field, Optgroup: Optgroup, Option: Option, isBottomSheet: false }, restProps)));
376
+ var _b = _a.autocomplete, autocomplete = _b === void 0 ? false : _b, _c = _a.multiple, multiple = _c === void 0 ? false : _c, _d = _a.allowUnselect, allowUnselect = _d === void 0 ? false : _d, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.closeOnSelect, closeOnSelect = _f === void 0 ? !multiple : _f, _g = _a.circularNavigation, circularNavigation = _g === void 0 ? false : _g, _h = _a.defaultOpen, defaultOpen = _h === void 0 ? false : _h, openProp = _a.open, _j = _a.size, size = _j === void 0 ? 'm' : _j, _k = _a.optionsSize, optionsSize = _k === void 0 ? 'm' : _k, _l = _a.fieldProps, fieldProps = _l === void 0 ? {} : _l, _m = _a.optionProps, optionProps = _m === void 0 ? {} : _m, _o = _a.Arrow, Arrow = _o === void 0 ? components_arrow_Component.Arrow : _o, _p = _a.Field, Field = _p === void 0 ? components_field_Component.Field : _p, _q = _a.Optgroup, Optgroup = _q === void 0 ? components_optgroup_Component.Optgroup : _q, _r = _a.Option, Option = _r === void 0 ? components_option_Component.Option : _r, restProps = tslib.__rest(_a, ["autocomplete", "multiple", "allowUnselect", "disabled", "closeOnSelect", "circularNavigation", "defaultOpen", "open", "size", "optionsSize", "fieldProps", "optionProps", "Arrow", "Field", "Optgroup", "Option"]);
377
+ return (React__default.default.createElement(BaseSelectMobile, tslib.__assign({ ref: ref, autocomplete: autocomplete, multiple: multiple, allowUnselect: allowUnselect, disabled: disabled, closeOnSelect: closeOnSelect, circularNavigation: circularNavigation, defaultOpen: defaultOpen, open: openProp, size: size, optionsSize: optionsSize, fieldProps: fieldProps, optionProps: optionProps, Arrow: Arrow, Field: Field, Optgroup: Optgroup, Option: Option, isBottomSheet: false }, restProps)));
373
378
  });
374
379
 
375
380
  exports.BaseSelectMobile = BaseSelectMobile;
package/cssm/Component.js CHANGED
@@ -1,9 +1,9 @@
1
1
  'use strict';
2
2
 
3
- var tslib_es6 = require('./tslib.es6-0e9bf404.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var components_arrow_Component = require('./components/arrow/Component.js');
6
- var components_baseSelect_Component = require('./Component-d0e84442.js');
6
+ var components_baseSelect_Component = require('./Component-1481ef6b.js');
7
7
  var components_field_Component = require('./components/field/Component.js');
8
8
  var components_optgroup_Component = require('./components/optgroup/Component.js');
9
9
  var components_option_Component = require('./components/option/Component.js');
@@ -39,8 +39,8 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
39
39
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
40
40
 
41
41
  var Select = React.forwardRef(function (_a, ref) {
42
- var _b = _a.Arrow, Arrow = _b === void 0 ? components_arrow_Component.Arrow : _b, _c = _a.Field, Field = _c === void 0 ? components_field_Component.Field : _c, _d = _a.OptionsList, OptionsList = _d === void 0 ? components_optionsList_Component.OptionsList : _d, _e = _a.Optgroup, Optgroup = _e === void 0 ? components_optgroup_Component.Optgroup : _e, _f = _a.Option, Option = _f === void 0 ? components_option_Component.Option : _f, restProps = tslib_es6.__rest(_a, ["Arrow", "Field", "OptionsList", "Optgroup", "Option"]);
43
- return (React__default.default.createElement(components_baseSelect_Component.BaseSelect, tslib_es6.__assign({ ref: ref, Option: Option, Field: Field, Optgroup: Optgroup, OptionsList: OptionsList, Arrow: Arrow }, restProps)));
42
+ var _b = _a.Arrow, Arrow = _b === void 0 ? components_arrow_Component.Arrow : _b, _c = _a.Field, Field = _c === void 0 ? components_field_Component.Field : _c, _d = _a.OptionsList, OptionsList = _d === void 0 ? components_optionsList_Component.OptionsList : _d, _e = _a.Optgroup, Optgroup = _e === void 0 ? components_optgroup_Component.Optgroup : _e, _f = _a.Option, Option = _f === void 0 ? components_option_Component.Option : _f, restProps = tslib.__rest(_a, ["Arrow", "Field", "OptionsList", "Optgroup", "Option"]);
43
+ return (React__default.default.createElement(components_baseSelect_Component.BaseSelect, tslib.__assign({ ref: ref, Option: Option, Field: Field, Optgroup: Optgroup, OptionsList: OptionsList, Arrow: Arrow }, restProps)));
44
44
  });
45
45
 
46
46
  exports.Select = Select;
@@ -1,14 +1,14 @@
1
1
  'use strict';
2
2
 
3
- var tslib_es6 = require('./tslib.es6-0e9bf404.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var hooks = require('@alfalab/hooks');
6
6
  var Component = require('./Component.js');
7
7
  require('classnames');
8
8
  require('@alfalab/icons-glyph/ChevronDownMIcon');
9
9
  require('./components/arrow/index.module.css');
10
- require('./Component-d0e84442.js');
11
- var presets_useSelectWithApply_optionsListWithApply_Component = require('./Component-29488b22.js');
10
+ require('./Component-1481ef6b.js');
11
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('./Component-8f0723b4.js');
12
12
  require('@alfalab/core-components-form-control/cssm');
13
13
  require('./components/field/index.module.css');
14
14
  require('./components/optgroup/index.module.css');
@@ -51,6 +51,8 @@ require('./presets/useSelectWithApply/options-list-with-apply/index.module.css')
51
51
  require('./components/base-select-mobile/options-list/Component.js');
52
52
  require('@alfalab/core-components-base-modal/cssm');
53
53
  require('./components/base-select-mobile/options-list/index.module.css');
54
+ require('./components/base-select-mobile/virtual-options-list/Component.js');
55
+ require('./components/base-select-mobile/virtual-options-list/index.module.css');
54
56
  require('./components/base-select-mobile/index.module.css');
55
57
  require('./components/options-list/index.module.css');
56
58
 
@@ -59,12 +61,12 @@ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'defau
59
61
  var React__default = /*#__PURE__*/_interopDefaultCompat(React);
60
62
 
61
63
  var SelectResponsive = React.forwardRef(function (_a, ref) {
62
- var footer = _a.footer, swipeable = _a.swipeable, bottomSheetProps = _a.bottomSheetProps, OptionsList = _a.OptionsList, onScroll = _a.onScroll, fieldProps = _a.fieldProps, _b = _a.breakpoint, breakpoint = _b === void 0 ? 1024 : _b, restProps = tslib_es6.__rest(_a, ["footer", "swipeable", "bottomSheetProps", "OptionsList", "onScroll", "fieldProps", "breakpoint"]);
64
+ var footer = _a.footer, swipeable = _a.swipeable, bottomSheetProps = _a.bottomSheetProps, OptionsList = _a.OptionsList, onScroll = _a.onScroll, fieldProps = _a.fieldProps, _b = _a.breakpoint, breakpoint = _b === void 0 ? 1024 : _b, restProps = tslib.__rest(_a, ["footer", "swipeable", "bottomSheetProps", "OptionsList", "onScroll", "fieldProps", "breakpoint"]);
63
65
  var view = hooks.useMedia([
64
66
  ['mobile', "(max-width: ".concat(breakpoint - 1, "px)")],
65
67
  ['desktop', "(min-width: ".concat(breakpoint, "px)")],
66
68
  ], 'desktop')[0];
67
- return view === 'desktop' ? (React__default.default.createElement(Component.Select, tslib_es6.__assign({ OptionsList: OptionsList, onScroll: onScroll }, restProps, { ref: ref, fieldProps: fieldProps }))) : (React__default.default.createElement(presets_useSelectWithApply_optionsListWithApply_Component.SelectMobile, tslib_es6.__assign({ footer: footer, swipeable: swipeable, bottomSheetProps: bottomSheetProps, fieldProps: fieldProps }, restProps, { ref: ref })));
69
+ return view === 'desktop' ? (React__default.default.createElement(Component.Select, tslib.__assign({ OptionsList: OptionsList, onScroll: onScroll }, restProps, { ref: ref, fieldProps: fieldProps }))) : (React__default.default.createElement(presets_useSelectWithApply_optionsListWithApply_Component.SelectMobile, tslib.__assign({ footer: footer, swipeable: swipeable, bottomSheetProps: bottomSheetProps, fieldProps: fieldProps }, restProps, { ref: ref })));
68
70
  });
69
71
 
70
72
  exports.SelectResponsive = SelectResponsive;
@@ -16,11 +16,10 @@ var BaseCheckmark = function (_a) {
16
16
  var _b;
17
17
  var selected = _a.selected, _c = _a.disabled, disabled = _c === void 0 ? false : _c, className = _a.className, multiple = _a.multiple;
18
18
  var checkmarkClassNames = cn__default.default(styles__default.default.checkmark, className, (_b = {},
19
- _b[styles__default.default.multiple] = multiple,
20
19
  _b[styles__default.default.single] = !multiple,
21
20
  _b[styles__default.default.selected] = selected,
22
21
  _b));
23
- return multiple ? (React__default.default.createElement(coreComponentsCheckbox.Checkbox, { checked: selected, disabled: disabled, className: checkmarkClassNames, size: 'm', onClick: function (event) { return event.stopPropagation(); } })) : (React__default.default.createElement(CheckmarkMIcon.CheckmarkMIcon, { className: checkmarkClassNames }));
22
+ return multiple ? (React__default.default.createElement(coreComponentsCheckbox.Checkbox, { checked: selected, disabled: disabled, className: checkmarkClassNames, size: 'm', hiddenInput: true })) : (React__default.default.createElement(CheckmarkMIcon.CheckmarkMIcon, { className: checkmarkClassNames }));
24
23
  };
25
24
 
26
25
  exports.BaseCheckmark = BaseCheckmark;
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var tslib_es6 = require('../../tslib.es6-0e9bf404.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var cn = require('classnames');
6
6
  var components_baseCheckmark_Component = require('../base-checkmark/Component.js');
@@ -27,7 +27,7 @@ var BaseOption = function (_a) {
27
27
  }
28
28
  return null;
29
29
  };
30
- return (React__default.default.createElement("div", tslib_es6.__assign({}, innerProps, { className: cn__default.default(styles__default.default.option, className, (_b = {},
30
+ return (React__default.default.createElement("div", tslib.__assign({}, innerProps, { className: cn__default.default(styles__default.default.option, className, (_b = {},
31
31
  _b[styles__default.default.highlighted] = highlighted,
32
32
  _b[styles__default.default.selected] = selected,
33
33
  _b[styles__default.default.disabled] = disabled,
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var components_baseOption_Component = require('./Component.js');
4
- require('../../tslib.es6-0e9bf404.js');
4
+ require('tslib');
5
5
  require('react');
6
6
  require('classnames');
7
7
  require('../base-checkmark/Component.js');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- require('../../tslib.es6-0e9bf404.js');
3
+ require('tslib');
4
4
  require('react');
5
5
  require('react-merge-refs');
6
6
  require('@juggle/resize-observer');
@@ -8,7 +8,7 @@ require('classnames');
8
8
  require('downshift');
9
9
  require('@alfalab/core-components-popover/cssm');
10
10
  require('@alfalab/hooks');
11
- var components_baseSelect_Component = require('../../Component-d0e84442.js');
11
+ var components_baseSelect_Component = require('../../Component-1481ef6b.js');
12
12
  require('../../utils.js');
13
13
  require('../native-select/Component.js');
14
14
  require('./index.module.css');
@@ -1 +1 @@
1
- export * from "../../Component-d0e84442";
1
+ export * from "../../Component-1481ef6b";
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var components_baseSelect_Component = require('../../Component-d0e84442.js');
4
- require('../../tslib.es6-0e9bf404.js');
3
+ var components_baseSelect_Component = require('../../Component-1481ef6b.js');
4
+ require('tslib');
5
5
  require('react');
6
6
  require('react-merge-refs');
7
7
  require('@juggle/resize-observer');
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- require('../../tslib.es6-0e9bf404.js');
3
+ require('tslib');
4
4
  require('react');
5
5
  require('react-merge-refs');
6
6
  require('classnames');
@@ -9,8 +9,8 @@ require('@alfalab/core-components-bottom-sheet/cssm');
9
9
  require('@alfalab/core-components-modal/cssm/mobile');
10
10
  require('../../Component.js');
11
11
  require('../arrow/Component.js');
12
- require('../../Component-d0e84442.js');
13
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../Component-29488b22.js');
12
+ require('../../Component-1481ef6b.js');
13
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../Component-8f0723b4.js');
14
14
  require('../field/Component.js');
15
15
  require('../optgroup/Component.js');
16
16
  require('../option/Component.js');
@@ -28,6 +28,7 @@ require('../../intersection-observer-9ec5cf59.js');
28
28
  require('../base-checkmark/Component.js');
29
29
  require('./checkmark/Component.js');
30
30
  require('./options-list/Component.js');
31
+ require('./virtual-options-list/Component.js');
31
32
  require('./index.module.css');
32
33
  require('@alfalab/icons-glyph/ChevronDownMIcon');
33
34
  require('../arrow/index.module.css');
@@ -53,6 +54,7 @@ require('../base-option/index.module.css');
53
54
  require('../../presets/useSelectWithApply/options-list-with-apply/index.module.css');
54
55
  require('@alfalab/core-components-base-modal/cssm');
55
56
  require('./options-list/index.module.css');
57
+ require('./virtual-options-list/index.module.css');
56
58
 
57
59
 
58
60
 
@@ -1 +1 @@
1
- export * from "../../Component-29488b22";
1
+ export * from "../../Component-8f0723b4";
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
- var presets_useSelectWithApply_optionsListWithApply_Component = require('../../Component-29488b22.js');
4
- require('../../tslib.es6-0e9bf404.js');
3
+ var presets_useSelectWithApply_optionsListWithApply_Component = require('../../Component-8f0723b4.js');
4
+ require('tslib');
5
5
  require('react');
6
6
  require('../arrow/Component.js');
7
7
  require('classnames');
@@ -12,7 +12,7 @@ require('downshift');
12
12
  require('@alfalab/core-components-bottom-sheet/cssm');
13
13
  require('@alfalab/core-components-modal/cssm/mobile');
14
14
  require('../../Component.js');
15
- require('../../Component-d0e84442.js');
15
+ require('../../Component-1481ef6b.js');
16
16
  require('@juggle/resize-observer');
17
17
  require('@alfalab/core-components-popover/cssm');
18
18
  require('@alfalab/hooks');
@@ -52,6 +52,8 @@ require('../../presets/useSelectWithApply/options-list-with-apply/index.module.c
52
52
  require('./options-list/Component.js');
53
53
  require('@alfalab/core-components-base-modal/cssm');
54
54
  require('./options-list/index.module.css');
55
+ require('./virtual-options-list/Component.js');
56
+ require('./virtual-options-list/index.module.css');
55
57
  require('./index.module.css');
56
58
 
57
59
 
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var tslib_es6 = require('../../../tslib.es6-0e9bf404.js');
3
+ var tslib = require('tslib');
4
4
  var React = require('react');
5
5
  var cn = require('classnames');
6
6
  var coreComponentsBaseModal = require('@alfalab/core-components-base-modal/cssm');
@@ -28,7 +28,7 @@ var OptionsList = function (_a) {
28
28
  React.useEffect(function () {
29
29
  setHasFooter(true);
30
30
  }, [setHasFooter]);
31
- var renderOption = function (option, index) { return (React__default.default.createElement(Option, tslib_es6.__assign({ key: option.key }, getOptionProps(option, index)))); };
31
+ var renderOption = function (option, index) { return (React__default.default.createElement(Option, tslib.__assign({ key: option.key }, getOptionProps(option, index)))); };
32
32
  var counter = createCounter();
33
33
  var renderGroup = function (group) { return (React__default.default.createElement(Optgroup, { className: optionGroupClassName, label: group.label, key: group.label, size: size }, group.options.map(function (option) { return renderOption(option, counter()); }))); };
34
34
  if (options.length === 0 && !emptyPlaceholder) {
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var components_baseSelectMobile_optionsList_Component = require('./Component.js');
4
- require('../../../tslib.es6-0e9bf404.js');
4
+ require('tslib');
5
5
  require('react');
6
6
  require('classnames');
7
7
  require('@alfalab/core-components-base-modal/cssm');
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ import { OptionsListProps } from "../../../typings";
4
+ declare const VirtualOptionsList: React.ForwardRefExoticComponent<OptionsListProps & React.RefAttributes<HTMLDivElement>>;
5
+ export { VirtualOptionsList };
@@ -0,0 +1,112 @@
1
+ 'use strict';
2
+
3
+ var tslib = require('tslib');
4
+ var React = require('react');
5
+ var reactVirtual = require('react-virtual');
6
+ var cn = require('classnames');
7
+ var coreComponentsBaseModal = require('@alfalab/core-components-base-modal/cssm');
8
+ var coreComponentsButton = require('@alfalab/core-components-button/cssm');
9
+ var hooks = require('@alfalab/hooks');
10
+ var utils = require('../../../utils.js');
11
+ var components_optgroup_Component = require('../../optgroup/Component.js');
12
+ var styles = require('./index.module.css');
13
+ require('../../optgroup/index.module.css');
14
+
15
+ function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; }
16
+
17
+ var React__default = /*#__PURE__*/_interopDefaultCompat(React);
18
+ var cn__default = /*#__PURE__*/_interopDefaultCompat(cn);
19
+ var styles__default = /*#__PURE__*/_interopDefaultCompat(styles);
20
+
21
+ var VirtualOptionsList = React.forwardRef(function (_a, ref) {
22
+ var _b;
23
+ var _c = _a.flatOptions, flatOptions = _c === void 0 ? [] : _c, _d = _a.highlightedIndex, highlightedIndex = _d === void 0 ? -1 : _d, _e = _a.size, size = _e === void 0 ? 's' : _e, className = _a.className, Option = _a.Option, getOptionProps = _a.getOptionProps, _f = _a.options, options = _f === void 0 ? [] : _f, _g = _a.Optgroup, Optgroup = _g === void 0 ? components_optgroup_Component.Optgroup : _g, dataTestId = _a.dataTestId, emptyPlaceholder = _a.emptyPlaceholder, showFooter = _a.showFooter, open = _a.open, _h = _a.onApply, onApply = _h === void 0 ? function () { return null; } : _h, _j = _a.onClear, onClear = _j === void 0 ? function () { return null; } : _j;
24
+ var _k = React.useContext(coreComponentsBaseModal.BaseModalContext), footerHighlighted = _k.footerHighlighted, setHasFooter = _k.setHasFooter;
25
+ React.useEffect(function () {
26
+ setHasFooter(true);
27
+ }, [setHasFooter]);
28
+ var listRef = React.useRef(null);
29
+ var prevHighlightedIndex = hooks.usePrevious(highlightedIndex) || -1;
30
+ var parentRef = ref && typeof ref === 'object' ? ref : listRef;
31
+ var rowVirtualizer = reactVirtual.useVirtual({
32
+ size: flatOptions.length,
33
+ parentRef: parentRef,
34
+ overscan: 15,
35
+ });
36
+ // Сколл к выбранному пункту при открытии меню
37
+ React.useEffect(function () {
38
+ if (open) {
39
+ rowVirtualizer.scrollToIndex(highlightedIndex, { align: 'end' });
40
+ }
41
+ // eslint-disable-next-line react-hooks/exhaustive-deps
42
+ }, [open]);
43
+ // Скролл к пункту, которого нет на экране
44
+ React.useEffect(function () {
45
+ if (highlightedIndex === -1)
46
+ return;
47
+ if (!rowVirtualizer.virtualItems.some(function (option) { return option.index === highlightedIndex; })) {
48
+ rowVirtualizer.scrollToIndex(highlightedIndex, { align: 'end' });
49
+ }
50
+ // eslint-disable-next-line react-hooks/exhaustive-deps
51
+ }, [highlightedIndex]);
52
+ // Циклическая навигация
53
+ React.useEffect(function () {
54
+ var notDisabled = function (option) { return !option.disabled; };
55
+ var firstNonDisabled = flatOptions.findIndex(notDisabled);
56
+ var lastNonDisabled = utils.lastIndexOf(flatOptions, notDisabled);
57
+ if (prevHighlightedIndex <= firstNonDisabled &&
58
+ highlightedIndex === flatOptions.length - 1) {
59
+ rowVirtualizer.scrollToIndex(lastNonDisabled);
60
+ }
61
+ if (prevHighlightedIndex >= lastNonDisabled && highlightedIndex === 0) {
62
+ rowVirtualizer.scrollToIndex(0);
63
+ }
64
+ // eslint-disable-next-line react-hooks/exhaustive-deps
65
+ }, [prevHighlightedIndex, highlightedIndex]);
66
+ // Т.к. рендерится плоский список, необходимо знать индекс, когда начинается новая группа
67
+ var groupStartIndexes = React.useMemo(function () {
68
+ var currentIndex = 0;
69
+ return options.reduce(function (acc, option, index) {
70
+ if (utils.isGroup(option)) {
71
+ acc[currentIndex] = index;
72
+ currentIndex += option.options.length;
73
+ }
74
+ else {
75
+ currentIndex += 1;
76
+ }
77
+ return acc;
78
+ }, {});
79
+ }, [options]);
80
+ var contentNodeProps = {
81
+ className: styles__default.default.inner,
82
+ style: { height: "".concat(rowVirtualizer.totalSize, "px") },
83
+ ref: listRef,
84
+ };
85
+ var renderList = function () {
86
+ return rowVirtualizer.virtualItems.map(function (virtualRow) {
87
+ var _a;
88
+ var option = flatOptions[virtualRow.index];
89
+ var group = options[groupStartIndexes[virtualRow.index]];
90
+ return (React__default.default.createElement("div", { key: virtualRow.index, ref: virtualRow.measureRef, className: cn__default.default(styles__default.default.virtualRow, (_a = {},
91
+ _a[styles__default.default.highlighted] = highlightedIndex === virtualRow.index,
92
+ _a)), style: {
93
+ transform: "translateY(".concat(virtualRow.start, "px)"),
94
+ } },
95
+ group && React__default.default.createElement(Optgroup, { label: group.label }),
96
+ !utils.isGroup(option) && (React__default.default.createElement(Option, tslib.__assign({}, getOptionProps(option, virtualRow.index))))));
97
+ });
98
+ };
99
+ if (options.length === 0 && !emptyPlaceholder) {
100
+ return null;
101
+ }
102
+ return (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.virtualOptionsList, styles__default.default[size], className), "data-test-id": dataTestId },
103
+ React__default.default.createElement("div", tslib.__assign({}, contentNodeProps), renderList()),
104
+ emptyPlaceholder && options.length === 0 && (React__default.default.createElement("div", { className: styles__default.default.emptyPlaceholder }, emptyPlaceholder)),
105
+ showFooter && (React__default.default.createElement("div", { className: cn__default.default(styles__default.default.footer, className, (_b = {},
106
+ _b[styles__default.default.footerHighlighted] = footerHighlighted,
107
+ _b)) },
108
+ React__default.default.createElement(coreComponentsButton.Button, { size: 's', view: 'primary', onClick: onApply, className: styles__default.default.footerButton }, "\u041F\u0440\u0438\u043C\u0435\u043D\u0438\u0442\u044C"),
109
+ React__default.default.createElement(coreComponentsButton.Button, { size: 's', view: 'secondary', onClick: onClear, className: styles__default.default.footerButton }, "\u0421\u0431\u0440\u043E\u0441\u0438\u0442\u044C")))));
110
+ });
111
+
112
+ exports.VirtualOptionsList = VirtualOptionsList;
@@ -0,0 +1 @@
1
+ export * from "./Component";