@alfalab/core-components-select 17.10.1 → 17.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (337) hide show
  1. package/components/arrow/Component.js +1 -1
  2. package/components/arrow/index.css +3 -3
  3. package/components/base-checkmark/Component.js +1 -1
  4. package/components/base-checkmark/index.css +6 -6
  5. package/components/base-option/Component.js +1 -1
  6. package/components/base-option/index.css +18 -17
  7. package/components/base-select/Component.js +2 -2
  8. package/components/base-select/components/list-desktop/list-popover-desktop.js +1 -1
  9. package/components/base-select/components/list-mobile/list-bottom-sheet-mobile.js +1 -1
  10. package/components/base-select/components/list-mobile/list-modal-mobile.js +1 -1
  11. package/components/base-select/index.css +24 -22
  12. package/components/base-select/mobile.css +16 -15
  13. package/components/checkmark/Component.js +1 -1
  14. package/components/checkmark/index.css +12 -11
  15. package/components/checkmark-mobile/Component.js +1 -1
  16. package/components/checkmark-mobile/index.css +6 -6
  17. package/components/clear-button/Component.js +1 -1
  18. package/components/clear-button/index.css +6 -6
  19. package/components/field/Component.js +1 -1
  20. package/components/field/index.css +12 -12
  21. package/components/footer/Component.js +1 -1
  22. package/components/footer/index.css +5 -5
  23. package/components/optgroup/Component.js +1 -1
  24. package/components/optgroup/index.css +6 -6
  25. package/components/option/Component.js +1 -1
  26. package/components/option/index.css +21 -21
  27. package/components/options-list/Component.js +3 -3
  28. package/components/options-list/index.css +14 -11
  29. package/components/search/Component.js +1 -1
  30. package/components/search/index.css +2 -2
  31. package/components/virtual-options-list/Component.js +1 -1
  32. package/components/virtual-options-list/index.css +20 -19
  33. package/cssm/components/base-option/index.module.css +3 -2
  34. package/cssm/components/base-select/index.module.css +13 -11
  35. package/cssm/components/base-select/mobile.module.css +4 -3
  36. package/cssm/components/checkmark/index.module.css +2 -1
  37. package/cssm/components/option/index.module.css +2 -2
  38. package/cssm/components/options-list/Component.js +2 -2
  39. package/cssm/components/options-list/index.module.css +4 -1
  40. package/cssm/components/virtual-options-list/index.module.css +5 -4
  41. package/cssm/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css +3 -1
  42. package/cssm/presets/useSelectWithApply/options-list-with-apply/footer/vars.css +0 -0
  43. package/cssm/utils.d.ts +1 -1
  44. package/cssm/utils.js +11 -0
  45. package/esm/components/arrow/Component.js +1 -1
  46. package/esm/components/arrow/index.css +3 -3
  47. package/esm/components/base-checkmark/Component.js +1 -1
  48. package/esm/components/base-checkmark/index.css +6 -6
  49. package/esm/components/base-option/Component.js +1 -1
  50. package/esm/components/base-option/index.css +18 -17
  51. package/esm/components/base-select/Component.js +2 -2
  52. package/esm/components/base-select/components/list-desktop/list-popover-desktop.js +1 -1
  53. package/esm/components/base-select/components/list-mobile/list-bottom-sheet-mobile.js +1 -1
  54. package/esm/components/base-select/components/list-mobile/list-modal-mobile.js +1 -1
  55. package/esm/components/base-select/index.css +24 -22
  56. package/esm/components/base-select/mobile.css +16 -15
  57. package/esm/components/checkmark/Component.js +1 -1
  58. package/esm/components/checkmark/index.css +12 -11
  59. package/esm/components/checkmark-mobile/Component.js +1 -1
  60. package/esm/components/checkmark-mobile/index.css +6 -6
  61. package/esm/components/clear-button/Component.js +1 -1
  62. package/esm/components/clear-button/index.css +6 -6
  63. package/esm/components/field/Component.js +1 -1
  64. package/esm/components/field/index.css +12 -12
  65. package/esm/components/footer/Component.js +1 -1
  66. package/esm/components/footer/index.css +5 -5
  67. package/esm/components/optgroup/Component.js +1 -1
  68. package/esm/components/optgroup/index.css +6 -6
  69. package/esm/components/option/Component.js +1 -1
  70. package/esm/components/option/index.css +21 -21
  71. package/esm/components/options-list/Component.js +3 -3
  72. package/esm/components/options-list/index.css +14 -11
  73. package/esm/components/search/Component.js +1 -1
  74. package/esm/components/search/index.css +2 -2
  75. package/esm/components/virtual-options-list/Component.js +1 -1
  76. package/esm/components/virtual-options-list/index.css +20 -19
  77. package/esm/{list-popover-desktop-446b6d5f.js → list-popover-desktop-e4b69ce0.js} +1 -1
  78. package/esm/mobile/Component.mobile.js +1 -1
  79. package/esm/mobile.module-a3e68caf.js +4 -0
  80. package/esm/presets/index.js +1 -1
  81. package/esm/presets/useSelectWithApply/hook.js +1 -1
  82. package/esm/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  83. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  84. package/esm/presets/useSelectWithApply/options-list-with-apply/footer/index.css +6 -4
  85. package/esm/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  86. package/esm/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  87. package/esm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  88. package/esm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  89. package/esm/presets/useSelectWithLoading/hook.js +1 -1
  90. package/esm/presets/useSelectWithLoading/index.css +2 -2
  91. package/esm/shared/index.js +1 -1
  92. package/esm/utils.d.ts +1 -1
  93. package/esm/utils.js +13 -2
  94. package/{list-popover-desktop-6bae9b47.js → list-popover-desktop-8ffefe6e.js} +1 -1
  95. package/mobile/Component.mobile.js +1 -1
  96. package/mobile.module-97d68ba9.js +6 -0
  97. package/modern/components/arrow/Component.js +1 -1
  98. package/modern/components/arrow/index.css +3 -3
  99. package/modern/components/base-checkmark/Component.js +1 -1
  100. package/modern/components/base-checkmark/index.css +6 -6
  101. package/modern/components/base-option/Component.js +1 -1
  102. package/modern/components/base-option/index.css +18 -17
  103. package/modern/components/base-select/Component.js +2 -2
  104. package/modern/components/base-select/components/list-desktop/list-popover-desktop.js +1 -1
  105. package/modern/components/base-select/components/list-mobile/list-bottom-sheet-mobile.js +1 -1
  106. package/modern/components/base-select/components/list-mobile/list-modal-mobile.js +1 -1
  107. package/modern/components/base-select/index.css +24 -22
  108. package/modern/components/base-select/mobile.css +16 -15
  109. package/modern/components/checkmark/Component.js +1 -1
  110. package/modern/components/checkmark/index.css +12 -11
  111. package/modern/components/checkmark-mobile/Component.js +1 -1
  112. package/modern/components/checkmark-mobile/index.css +6 -6
  113. package/modern/components/clear-button/Component.js +1 -1
  114. package/modern/components/clear-button/index.css +6 -6
  115. package/modern/components/field/Component.js +1 -1
  116. package/modern/components/field/index.css +12 -12
  117. package/modern/components/footer/Component.js +1 -1
  118. package/modern/components/footer/index.css +5 -5
  119. package/modern/components/optgroup/Component.js +1 -1
  120. package/modern/components/optgroup/index.css +6 -6
  121. package/modern/components/option/Component.js +1 -1
  122. package/modern/components/option/index.css +21 -21
  123. package/modern/components/options-list/Component.js +3 -3
  124. package/modern/components/options-list/index.css +14 -11
  125. package/modern/components/search/Component.js +1 -1
  126. package/modern/components/search/index.css +2 -2
  127. package/modern/components/virtual-options-list/Component.js +1 -1
  128. package/modern/components/virtual-options-list/index.css +20 -19
  129. package/modern/{list-popover-desktop-46e08681.js → list-popover-desktop-85370c2c.js} +1 -1
  130. package/modern/mobile/Component.mobile.js +1 -1
  131. package/modern/mobile.module-eb08a4de.js +4 -0
  132. package/modern/presets/index.js +1 -1
  133. package/modern/presets/useSelectWithApply/hook.js +1 -1
  134. package/modern/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  135. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  136. package/modern/presets/useSelectWithApply/options-list-with-apply/footer/index.css +6 -4
  137. package/modern/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  138. package/modern/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  139. package/modern/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  140. package/modern/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  141. package/modern/presets/useSelectWithLoading/hook.js +1 -1
  142. package/modern/presets/useSelectWithLoading/index.css +2 -2
  143. package/modern/shared/index.js +1 -1
  144. package/modern/utils.d.ts +1 -1
  145. package/modern/utils.js +13 -2
  146. package/moderncssm/Component.responsive.d.ts +7 -0
  147. package/moderncssm/Component.responsive.js +21 -0
  148. package/moderncssm/components/arrow/Component.d.ts +5 -0
  149. package/moderncssm/components/arrow/Component.js +8 -0
  150. package/moderncssm/components/arrow/index.d.ts +1 -0
  151. package/moderncssm/components/arrow/index.js +1 -0
  152. package/moderncssm/components/arrow/index.module.css +23 -0
  153. package/moderncssm/components/base-checkmark/Component.d.ts +5 -0
  154. package/moderncssm/components/base-checkmark/Component.js +15 -0
  155. package/moderncssm/components/base-checkmark/index.d.ts +1 -0
  156. package/moderncssm/components/base-checkmark/index.js +1 -0
  157. package/moderncssm/components/base-checkmark/index.module.css +30 -0
  158. package/moderncssm/components/base-option/Component.d.ts +4 -0
  159. package/moderncssm/components/base-option/Component.js +33 -0
  160. package/moderncssm/components/base-option/index.d.ts +1 -0
  161. package/moderncssm/components/base-option/index.js +1 -0
  162. package/moderncssm/components/base-option/index.module.css +81 -0
  163. package/moderncssm/components/base-select/Component.d.ts +14 -0
  164. package/moderncssm/components/base-select/Component.js +408 -0
  165. package/moderncssm/components/base-select/components/list-desktop/helpers/get-list-popover-desktop-props.d.ts +12 -0
  166. package/moderncssm/components/base-select/components/list-desktop/helpers/get-list-popover-desktop-props.js +15 -0
  167. package/moderncssm/components/base-select/components/list-desktop/list-popover-desktop.d.ts +9 -0
  168. package/moderncssm/components/base-select/components/list-desktop/list-popover-desktop.js +13 -0
  169. package/moderncssm/components/base-select/components/list-desktop/types/types.d.ts +3 -0
  170. package/moderncssm/components/base-select/components/list-desktop/types/types.js +1 -0
  171. package/moderncssm/components/base-select/components/list-mobile/helpers/get-list-bottom-sheet-mobile-props.d.ts +16 -0
  172. package/moderncssm/components/base-select/components/list-mobile/helpers/get-list-bottom-sheet-mobile-props.js +19 -0
  173. package/moderncssm/components/base-select/components/list-mobile/helpers/get-list-modal-mobile-props.d.ts +28 -0
  174. package/moderncssm/components/base-select/components/list-mobile/helpers/get-list-modal-mobile-props.js +18 -0
  175. package/moderncssm/components/base-select/components/list-mobile/helpers/index.d.ts +2 -0
  176. package/moderncssm/components/base-select/components/list-mobile/helpers/index.js +2 -0
  177. package/moderncssm/components/base-select/components/list-mobile/list-bottom-sheet-mobile.d.ts +15 -0
  178. package/moderncssm/components/base-select/components/list-mobile/list-bottom-sheet-mobile.js +24 -0
  179. package/moderncssm/components/base-select/components/list-mobile/list-mobile.d.ts +16 -0
  180. package/moderncssm/components/base-select/components/list-mobile/list-mobile.js +17 -0
  181. package/moderncssm/components/base-select/components/list-mobile/list-modal-mobile.d.ts +15 -0
  182. package/moderncssm/components/base-select/components/list-mobile/list-modal-mobile.js +32 -0
  183. package/moderncssm/components/base-select/components/list-mobile/types/types.d.ts +4 -0
  184. package/moderncssm/components/base-select/components/list-mobile/types/types.js +1 -0
  185. package/moderncssm/components/base-select/index.d.ts +1 -0
  186. package/moderncssm/components/base-select/index.js +1 -0
  187. package/moderncssm/components/base-select/index.module.css +81 -0
  188. package/moderncssm/components/base-select/mobile.module.css +48 -0
  189. package/moderncssm/components/base-select/types/component-types.d.ts +50 -0
  190. package/moderncssm/components/base-select/types/component-types.js +1 -0
  191. package/moderncssm/components/checkmark/Component.d.ts +5 -0
  192. package/moderncssm/components/checkmark/Component.js +20 -0
  193. package/moderncssm/components/checkmark/index.d.ts +1 -0
  194. package/moderncssm/components/checkmark/index.js +1 -0
  195. package/moderncssm/components/checkmark/index.module.css +59 -0
  196. package/moderncssm/components/checkmark-mobile/Component.d.ts +5 -0
  197. package/moderncssm/components/checkmark-mobile/Component.js +11 -0
  198. package/moderncssm/components/checkmark-mobile/index.d.ts +1 -0
  199. package/moderncssm/components/checkmark-mobile/index.js +1 -0
  200. package/moderncssm/components/checkmark-mobile/index.module.css +34 -0
  201. package/moderncssm/components/clear-button/Component.d.ts +5 -0
  202. package/moderncssm/components/clear-button/Component.js +9 -0
  203. package/moderncssm/components/clear-button/index.d.ts +1 -0
  204. package/moderncssm/components/clear-button/index.js +1 -0
  205. package/moderncssm/components/clear-button/index.module.css +47 -0
  206. package/moderncssm/components/field/Component.d.ts +13 -0
  207. package/moderncssm/components/field/Component.js +35 -0
  208. package/moderncssm/components/field/index.d.ts +1 -0
  209. package/moderncssm/components/field/index.js +1 -0
  210. package/moderncssm/components/field/index.module.css +74 -0
  211. package/moderncssm/components/footer/Component.d.ts +12 -0
  212. package/moderncssm/components/footer/Component.js +22 -0
  213. package/moderncssm/components/footer/index.d.ts +1 -0
  214. package/moderncssm/components/footer/index.js +1 -0
  215. package/moderncssm/components/footer/index.module.css +28 -0
  216. package/moderncssm/components/index.d.ts +9 -0
  217. package/moderncssm/components/index.js +9 -0
  218. package/moderncssm/components/native-select/Component.d.ts +25 -0
  219. package/moderncssm/components/native-select/Component.js +13 -0
  220. package/moderncssm/components/native-select/index.d.ts +1 -0
  221. package/moderncssm/components/native-select/index.js +1 -0
  222. package/moderncssm/components/optgroup/Component.d.ts +5 -0
  223. package/moderncssm/components/optgroup/Component.js +11 -0
  224. package/moderncssm/components/optgroup/index.d.ts +1 -0
  225. package/moderncssm/components/optgroup/index.js +1 -0
  226. package/moderncssm/components/optgroup/index.module.css +46 -0
  227. package/moderncssm/components/option/Component.d.ts +4 -0
  228. package/moderncssm/components/option/Component.js +23 -0
  229. package/moderncssm/components/option/index.d.ts +1 -0
  230. package/moderncssm/components/option/index.js +1 -0
  231. package/moderncssm/components/option/index.module.css +110 -0
  232. package/moderncssm/components/options-list/Component.d.ts +5 -0
  233. package/moderncssm/components/options-list/Component.js +88 -0
  234. package/moderncssm/components/options-list/index.d.ts +1 -0
  235. package/moderncssm/components/options-list/index.js +1 -0
  236. package/moderncssm/components/options-list/index.module.css +51 -0
  237. package/moderncssm/components/search/Component.d.ts +5 -0
  238. package/moderncssm/components/search/Component.js +9 -0
  239. package/moderncssm/components/search/index.d.ts +1 -0
  240. package/moderncssm/components/search/index.js +1 -0
  241. package/moderncssm/components/search/index.module.css +14 -0
  242. package/moderncssm/components/virtual-options-list/Component.d.ts +5 -0
  243. package/moderncssm/components/virtual-options-list/Component.js +138 -0
  244. package/moderncssm/components/virtual-options-list/index.d.ts +1 -0
  245. package/moderncssm/components/virtual-options-list/index.js +1 -0
  246. package/moderncssm/components/virtual-options-list/index.module.css +79 -0
  247. package/moderncssm/consts.d.ts +12 -0
  248. package/moderncssm/consts.js +13 -0
  249. package/moderncssm/desktop/Component.desktop.d.ts +6 -0
  250. package/moderncssm/desktop/Component.desktop.js +17 -0
  251. package/moderncssm/desktop/index.d.ts +2 -0
  252. package/moderncssm/desktop/index.js +1 -0
  253. package/moderncssm/hook-8c561f14.d.ts +115 -0
  254. package/moderncssm/hook-a8bc7fe8.d.ts +17 -0
  255. package/moderncssm/hook-a8bc7fe8.js +169 -0
  256. package/moderncssm/index.d.ts +2 -0
  257. package/moderncssm/index.js +1 -0
  258. package/moderncssm/mobile/Component.mobile.d.ts +5 -0
  259. package/moderncssm/mobile/Component.mobile.js +54 -0
  260. package/moderncssm/mobile/Component.modal.mobile.d.ts +4 -0
  261. package/moderncssm/mobile/Component.modal.mobile.js +6 -0
  262. package/moderncssm/mobile/index.d.ts +3 -0
  263. package/moderncssm/mobile/index.js +2 -0
  264. package/moderncssm/presets/index.d.ts +3 -0
  265. package/moderncssm/presets/index.js +3 -0
  266. package/moderncssm/presets/useLazyLoading/hook.d.ts +48 -0
  267. package/moderncssm/presets/useLazyLoading/hook.js +215 -0
  268. package/moderncssm/presets/useSelectWithApply/hook.d.ts +0 -0
  269. package/moderncssm/presets/useSelectWithApply/hook.js +4 -0
  270. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/Component.d.ts +0 -0
  271. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/Component.js +6 -0
  272. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/footer/Component.d.ts +12 -0
  273. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +12 -0
  274. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css +12 -0
  275. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/footer/vars.css +0 -0
  276. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/header/Component.d.ts +11 -0
  277. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/header/Component.js +9 -0
  278. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/header/index.module.css +9 -0
  279. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -0
  280. package/moderncssm/presets/useSelectWithApply/options-list-with-apply/index.js +1 -0
  281. package/moderncssm/presets/useSelectWithLoading/hook.d.ts +13 -0
  282. package/moderncssm/presets/useSelectWithLoading/hook.js +23 -0
  283. package/moderncssm/presets/useSelectWithLoading/index.module.css +7 -0
  284. package/moderncssm/shared/index.d.ts +13 -0
  285. package/moderncssm/shared/index.js +14 -0
  286. package/moderncssm/typings.d.ts +744 -0
  287. package/moderncssm/typings.js +1 -0
  288. package/moderncssm/utils.d.ts +81 -0
  289. package/moderncssm/utils.js +184 -0
  290. package/moderncssm/vars.css +10 -0
  291. package/package.json +15 -15
  292. package/presets/index.js +1 -1
  293. package/presets/useSelectWithApply/hook.js +1 -1
  294. package/presets/useSelectWithApply/options-list-with-apply/Component.js +1 -1
  295. package/presets/useSelectWithApply/options-list-with-apply/footer/Component.js +1 -1
  296. package/presets/useSelectWithApply/options-list-with-apply/footer/index.css +6 -4
  297. package/presets/useSelectWithApply/options-list-with-apply/header/Component.js +1 -1
  298. package/presets/useSelectWithApply/options-list-with-apply/header/index.css +3 -3
  299. package/presets/useSelectWithApply/options-list-with-apply/index.d.ts +1 -1
  300. package/presets/useSelectWithApply/options-list-with-apply/index.js +1 -1
  301. package/presets/useSelectWithLoading/hook.js +1 -1
  302. package/presets/useSelectWithLoading/index.css +2 -2
  303. package/shared/index.js +1 -1
  304. package/src/components/arrow/index.module.css +1 -1
  305. package/src/components/base-checkmark/index.module.css +1 -1
  306. package/src/components/base-option/index.module.css +3 -3
  307. package/src/components/base-select/index.module.css +9 -9
  308. package/src/components/base-select/mobile.module.css +4 -4
  309. package/src/components/checkmark/index.module.css +1 -1
  310. package/src/components/checkmark-mobile/index.module.css +1 -1
  311. package/src/components/field/index.module.css +1 -1
  312. package/src/components/footer/index.module.css +1 -1
  313. package/src/components/optgroup/index.module.css +1 -1
  314. package/src/components/option/index.module.css +2 -3
  315. package/src/components/options-list/Component.tsx +2 -1
  316. package/src/components/options-list/index.module.css +6 -2
  317. package/src/components/search/index.module.css +1 -1
  318. package/src/components/virtual-options-list/index.module.css +5 -5
  319. package/src/presets/useSelectWithApply/options-list-with-apply/footer/index.module.css +3 -2
  320. package/src/presets/useSelectWithApply/options-list-with-apply/footer/vars.css +3 -0
  321. package/src/presets/useSelectWithApply/options-list-with-apply/header/index.module.css +1 -1
  322. package/src/utils.ts +28 -3
  323. package/src/vars.css +4 -4
  324. package/utils.d.ts +1 -1
  325. package/utils.js +11 -0
  326. package/esm/mobile.module-eaf56278.js +0 -4
  327. package/mobile.module-8d14caac.js +0 -6
  328. package/modern/mobile.module-2f7796c1.js +0 -4
  329. /package/esm/{hook-570b8ac7.d.ts → hook-276c96dc.d.ts} +0 -0
  330. /package/esm/{hook-570b8ac7.js → hook-276c96dc.js} +0 -0
  331. /package/esm/{list-popover-desktop-446b6d5f.d.ts → list-popover-desktop-e4b69ce0.d.ts} +0 -0
  332. /package/{hook-a71861cb.d.ts → hook-c8ba558c.d.ts} +0 -0
  333. /package/{hook-a71861cb.js → hook-c8ba558c.js} +0 -0
  334. /package/{list-popover-desktop-6bae9b47.d.ts → list-popover-desktop-8ffefe6e.d.ts} +0 -0
  335. /package/modern/{hook-0b565ee2.d.ts → hook-a054f3bb.d.ts} +0 -0
  336. /package/modern/{hook-0b565ee2.js → hook-a054f3bb.js} +0 -0
  337. /package/modern/{list-popover-desktop-46e08681.d.ts → list-popover-desktop-85370c2c.d.ts} +0 -0
@@ -0,0 +1,81 @@
1
+ /* */
2
+ :root {
3
+
4
+ /* options list */
5
+
6
+ /* option */
7
+ --select-option-background: var(--color-light-modal-bg-primary);
8
+ --select-option-selected-background: var(--color-light-modal-bg-primary);
9
+ --select-option-hover-background: var(--color-light-transparent-default-hover);
10
+ --select-option-active-background: var(--color-light-transparent-default-press);
11
+ --select-option-disabled-background: var(--color-light-modal-bg-primary);
12
+ --select-option-color: var(--color-light-text-primary);
13
+ --select-option-selected-color: var(--color-light-text-primary);
14
+ --select-option-hover-color: var(--color-light-text-primary);
15
+ --select-option-active-color: var(--color-light-text-primary);
16
+ --select-option-disabled-color: var(--color-light-text-secondary);
17
+
18
+ /* checkmark */
19
+
20
+ /* optgroup */
21
+ }
22
+ .option {
23
+ font-size: 16px;
24
+ line-height: 20px;
25
+ font-weight: 400;
26
+
27
+ display: flex;
28
+ align-items: center;
29
+ transition: background-color 0.2s ease;
30
+ background: var(--select-option-background);
31
+ color: var(--select-option-color);
32
+ box-sizing: border-box;
33
+ position: relative;
34
+ cursor: pointer;
35
+ min-height: var(--size-s-height)
36
+ }
37
+ .option:not(.disabled):active {
38
+ background: var(--select-option-active-background);
39
+ color: var(--select-option-active-color);
40
+ }
41
+ .option.checkmarkBefore {
42
+ padding: var(--gap-0) var(--gap-0) var(--gap-0) var(--gap-12)
43
+ }
44
+ .option.checkmarkBefore.mobile {
45
+ padding-left: var(--gap-16);
46
+ }
47
+ .option.checkmarkAfter.checkmarkAfter {
48
+ padding: var(--gap-0) var(--gap-12) var(--gap-0) var(--gap-0)
49
+ }
50
+ .option.checkmarkAfter.checkmarkAfter.mobile {
51
+ padding-right: var(--gap-20);
52
+ }
53
+ .option.textContent {
54
+ padding: var(--gap-12)
55
+ }
56
+ .option.textContent.mobile {
57
+ padding: var(--gap-16) var(--gap-20) var(--gap-16) var(--gap-16);
58
+ }
59
+ .selected {
60
+ background: var(--select-option-selected-background);
61
+ color: var(--select-option-selected-color);
62
+ cursor: default;
63
+ }
64
+ .highlighted {
65
+ background: var(--select-option-hover-background);
66
+ color: var(--select-option-hover-color);
67
+ }
68
+ .disabled {
69
+ cursor: var(--disabled-cursor);
70
+ background: var(--select-option-disabled-background);
71
+ color: var(--select-option-disabled-color);
72
+ }
73
+ .checkmarkBeforeContent {
74
+ margin-right: var(--gap-12);
75
+ }
76
+ .checkmarkAfterContent {
77
+ margin-left: var(--gap-12);
78
+ }
79
+ .content {
80
+ flex: 1;
81
+ }
@@ -0,0 +1,14 @@
1
+ /// <reference types="react" />
2
+ import React from 'react';
3
+ declare const BaseSelect: React.ForwardRefExoticComponent<import("../../typings").BaseSelectProps & import("../../typings").AdditionalMobileProps & import("../../typings").BottomSheetSelectMobileProps & import("../../typings").ModalSelectMobileProps & {
4
+ isBottomSheet?: boolean | undefined;
5
+ view: "mobile" | "desktop";
6
+ Popover?: React.ForwardRefExoticComponent<import("@alfalab/core-components-popover").PopoverProps & React.RefAttributes<HTMLDivElement>> | undefined;
7
+ BottomSheet?: React.ForwardRefExoticComponent<import("@alfalab/core-components-bottom-sheet").BottomSheetProps & React.RefAttributes<HTMLDivElement>> | undefined;
8
+ ModalMobile?: (React.ForwardRefExoticComponent<import("./types/component-types").ModalMobileProps & React.RefAttributes<HTMLDivElement>> & {
9
+ Header: React.FC<import("@alfalab/core-components-modal/shared").ModalHeaderProps>;
10
+ Footer: React.FC<import("@alfalab/core-components-modal/shared").ModalFooterProps>;
11
+ Content: React.FC<import("./types/component-types").ContentProps>;
12
+ }) | undefined;
13
+ } & React.RefAttributes<unknown>>;
14
+ export { BaseSelect };
@@ -0,0 +1,408 @@
1
+ import React, { forwardRef, useRef, useMemo, useEffect, useCallback } from 'react';
2
+ import mergeRefs from 'react-merge-refs';
3
+ import { ResizeObserver } from '@juggle/resize-observer';
4
+ import cn from 'classnames';
5
+ import { compute } from 'compute-scroll-into-view';
6
+ import { useMultipleSelection, useCombobox } from 'downshift';
7
+ import { fnUtils, getDataTestId } from '@alfalab/core-components-shared/moderncssm';
8
+ import { useLayoutEffect_SAFE_FOR_SSR } from '@alfalab/hooks';
9
+ import { defaultAccessor, defaultFilterFn, defaultGroupAccessor, processOptions, isGroup } from '../../utils.js';
10
+ import { NativeSelect } from '../native-select/Component.js';
11
+ import { getListPopoverDesktopProps } from './components/list-desktop/helpers/get-list-popover-desktop-props.js';
12
+ import { ListPopoverDesktop } from './components/list-desktop/list-popover-desktop.js';
13
+ import { getListModalMobileProps } from './components/list-mobile/helpers/get-list-modal-mobile-props.js';
14
+ import { getListBottomSheetMobileProps } from './components/list-mobile/helpers/get-list-bottom-sheet-mobile-props.js';
15
+ import { ListMobile } from './components/list-mobile/list-mobile.js';
16
+ import styles from './index.module.css';
17
+ import mobileStyles from './mobile.module.css';
18
+
19
+ /* eslint-disable no-nested-ternary */
20
+ const itemToString = (option) => (option ? option.key : '');
21
+ const isItemDisabled = (option) => Boolean(option?.disabled);
22
+ const BaseSelect = forwardRef(
23
+ // TODO: 😭
24
+ // eslint-disable-next-line complexity
25
+ (props, ref) => {
26
+ const { dataTestId, className, fieldClassName, optionGroupClassName, optionsListClassName, optionClassName, options, autocomplete = false, multiple = false, allowUnselect = false, disabled = false, closeOnSelect = !multiple, circularNavigation = false, nativeSelect = false, defaultOpen = false, open: openProp, optionsListWidth = 'content', name, id, selected, size = 48, optionsSize = size, error, hint, block, label, labelView, placeholder, fieldProps = {}, optionsListProps = {}, optionProps = {}, groupOptionProps = {}, searchProps = {}, showSearch = false, valueRenderer, onChange, onOpen, onFocus, onBlur, onScroll, onClear, clear, Arrow, Field = () => null, OptionsList = () => null, Optgroup = () => null, Option = () => null, Search = () => null, showEmptyOptionsList = false, visibleOptions, view, isBottomSheet = true, modalProps, bottomSheetProps, limitDynamicOptionGroupSize, } = props;
27
+ const shouldSearchBlurRef = useRef(true);
28
+ const rootRef = useRef(null);
29
+ const fieldRef = useRef(null);
30
+ const listRef = useRef(null);
31
+ const initiatorRef = useRef(null);
32
+ const searchRef = useRef(null);
33
+ const scrollableContainerRef = useRef(null);
34
+ const onOpenRef = useRef(onOpen);
35
+ const [searchState, setSearchState] = React.useState('');
36
+ const [search, setSearch] = typeof searchProps?.value === 'string'
37
+ ? [searchProps.value, searchProps.onChange]
38
+ : [searchState, setSearchState];
39
+ const accessor = searchProps.accessor || defaultAccessor;
40
+ const filterFn = searchProps.filterFn || defaultFilterFn;
41
+ const filterGroup = searchProps.filterGroup ?? false;
42
+ const groupAccessor = searchProps.groupAccessor ?? defaultGroupAccessor;
43
+ const { filteredOptions, flatOptions, selectedOptions } = useMemo(() => processOptions(options, selected, (option) => {
44
+ if (isGroup(option)) {
45
+ const groupAccessorValue = groupAccessor(option);
46
+ return (typeof groupAccessorValue === 'string' &&
47
+ filterFn(groupAccessorValue, search));
48
+ }
49
+ return filterFn(accessor(option), search);
50
+ }, filterGroup), [options, selected, filterFn, accessor, search, filterGroup, groupAccessor]);
51
+ const scrollIntoView = (node) => {
52
+ if (!node || view === 'mobile')
53
+ return;
54
+ requestAnimationFrame(() => {
55
+ const actions = compute(node, {
56
+ boundary: listRef.current,
57
+ block: 'nearest',
58
+ scrollMode: 'if-needed',
59
+ });
60
+ actions.forEach((action) => {
61
+ const { el, top } = action;
62
+ el.scrollTop = top;
63
+ });
64
+ });
65
+ };
66
+ const useMultipleSelectionProps = {
67
+ itemToString,
68
+ onSelectedItemsChange: (changes) => {
69
+ if (onChange) {
70
+ const { selectedItems = [] } = changes;
71
+ onChange({
72
+ selectedMultiple: selectedItems,
73
+ selected: selectedItems.length ? selectedItems[0] : null,
74
+ initiator: initiatorRef.current,
75
+ name,
76
+ });
77
+ initiatorRef.current = null;
78
+ }
79
+ },
80
+ stateReducer: (state, actionAndChanges) => {
81
+ const { type, changes } = actionAndChanges;
82
+ if (!allowUnselect &&
83
+ type === useMultipleSelection.stateChangeTypes.DropdownKeyDownBackspace) {
84
+ return state;
85
+ }
86
+ return changes;
87
+ },
88
+ };
89
+ if (selected !== undefined) {
90
+ useMultipleSelectionProps.selectedItems = selectedOptions;
91
+ }
92
+ onOpenRef.current = onOpen;
93
+ const { selectedItems, addSelectedItem, setSelectedItems, removeSelectedItem, getDropdownProps, } = useMultipleSelection(useMultipleSelectionProps);
94
+ const { isOpen: open, getMenuProps, getInputProps, getItemProps, getLabelProps, highlightedIndex, toggleMenu, openMenu, closeMenu, setHighlightedIndex, } = useCombobox({
95
+ id,
96
+ isOpen: openProp,
97
+ items: flatOptions,
98
+ itemToString,
99
+ isItemDisabled,
100
+ defaultHighlightedIndex: selectedItems.length === 0 ? -1 : undefined,
101
+ scrollIntoView,
102
+ onSelectedItemChange: (changes) => {
103
+ const selectedItem = changes.selectedItem || initiatorRef.current;
104
+ if (selectedItem && !selectedItem.disabled) {
105
+ const alreadySelected = selectedItems.includes(selectedItem);
106
+ const allowRemove = allowUnselect || (multiple && selectedItems.length > 1);
107
+ if (alreadySelected && allowRemove) {
108
+ removeSelectedItem(selectedItem);
109
+ }
110
+ if (!alreadySelected) {
111
+ if (multiple) {
112
+ addSelectedItem(selectedItem);
113
+ }
114
+ else {
115
+ setSelectedItems([selectedItem]);
116
+ }
117
+ }
118
+ }
119
+ },
120
+ onIsOpenChange: (changes) => {
121
+ if (onOpenRef.current) {
122
+ /**
123
+ * Вызываем обработчик асинхронно.
124
+ *
125
+ * Иначе при клике вне открытого селекта сначала сработает onOpen, который закроет селект,
126
+ * А затем сработает onClick кнопки открытия\закрытия с open=false и в итоге селект откроется снова.
127
+ */
128
+ setTimeout(() => {
129
+ onOpenRef.current?.({
130
+ open: changes.isOpen,
131
+ name,
132
+ });
133
+ }, 0);
134
+ }
135
+ if (showSearch) {
136
+ if (changes.isOpen && view === 'desktop') {
137
+ setTimeout(() => {
138
+ searchRef.current?.focus();
139
+ }, 0);
140
+ }
141
+ else {
142
+ setSearch?.('');
143
+ }
144
+ }
145
+ },
146
+ stateReducer: (state, actionAndChanges) => {
147
+ const { type, changes } = actionAndChanges;
148
+ switch (type) {
149
+ case useCombobox.stateChangeTypes.InputKeyDownArrowDown:
150
+ if (!circularNavigation && state.highlightedIndex === options.length - 1) {
151
+ return { ...changes, highlightedIndex: state.highlightedIndex };
152
+ }
153
+ return changes;
154
+ case useCombobox.stateChangeTypes.InputKeyDownArrowUp:
155
+ if (!circularNavigation && state.highlightedIndex === 0) {
156
+ return { ...changes, highlightedIndex: state.highlightedIndex };
157
+ }
158
+ return changes;
159
+ case useCombobox.stateChangeTypes.InputKeyDownEnter:
160
+ case useCombobox.stateChangeTypes.ItemClick: {
161
+ const { selectedItem } = changes;
162
+ initiatorRef.current = selectedItem || null;
163
+ return {
164
+ ...changes,
165
+ selectedItem: state.selectedItem === selectedItem ? null : selectedItem,
166
+ isOpen: !closeOnSelect || (view === 'mobile' && multiple),
167
+ // при closeOnSelect === false - сохраняем подсвеченный индекс
168
+ highlightedIndex: state.isOpen && !closeOnSelect
169
+ ? state.highlightedIndex
170
+ : changes.highlightedIndex,
171
+ };
172
+ }
173
+ default:
174
+ return changes;
175
+ }
176
+ },
177
+ });
178
+ useEffect(() => {
179
+ /*
180
+ * При изменении openProp, состояние внутри downshift в useEnhancedReducer не меняется, поэтому меняем его таким способом
181
+ * Скорее всего это исправят в будущих версиях downshift
182
+ */
183
+ if (openProp !== undefined) {
184
+ if (openProp) {
185
+ openMenu();
186
+ }
187
+ else {
188
+ closeMenu();
189
+ }
190
+ }
191
+ }, [openProp, openMenu, closeMenu]);
192
+ const inputProps = getInputProps(getDropdownProps({ ref: mergeRefs([ref, fieldRef]) }));
193
+ const { ref: menuRef, ...menuProps } = getMenuProps({ ref: listRef }, { suppressRefError: true });
194
+ const handleEntered = (node, isAppearing) => {
195
+ if (showSearch)
196
+ searchRef.current?.focus();
197
+ if (isBottomSheet) {
198
+ bottomSheetProps?.transitionProps?.onEntered?.(node, isAppearing);
199
+ }
200
+ else {
201
+ modalProps?.transitionProps?.onEntered?.(node, isAppearing);
202
+ }
203
+ };
204
+ const handleFieldFocus = (event) => {
205
+ if (onFocus)
206
+ onFocus(event);
207
+ if (autocomplete && !open) {
208
+ openMenu();
209
+ }
210
+ };
211
+ const handleFieldBlur = (event) => {
212
+ if (view === 'desktop') {
213
+ const isNextFocusInsideField = fieldRef.current?.contains((event.relatedTarget || document.activeElement));
214
+ const isNextFocusInsideList = listRef.current?.contains((event.relatedTarget || document.activeElement));
215
+ if (!isNextFocusInsideField && !isNextFocusInsideList) {
216
+ if (onBlur)
217
+ onBlur(event);
218
+ inputProps.onBlur?.(event);
219
+ }
220
+ }
221
+ if (view === 'mobile' && !open && onBlur)
222
+ onBlur(event);
223
+ };
224
+ const handleFieldKeyDown = (event) => {
225
+ inputProps.onKeyDown?.(event);
226
+ // https://caniuse.com/?search=KeyboardEvent.key
227
+ const isKeyUnsupported = event.key === 'Unidentified';
228
+ if (autocomplete &&
229
+ !open &&
230
+ (isKeyUnsupported || event.key.length === 1 || event.key === 'Backspace')) {
231
+ // Для автокомплита - открываем меню при начале ввода
232
+ openMenu();
233
+ }
234
+ if ([' ', 'Enter'].includes(event.key) &&
235
+ !autocomplete &&
236
+ !nativeSelect &&
237
+ event.target.tagName !== 'INPUT' &&
238
+ event.target.tagName !== 'BUTTON') {
239
+ // Открываем\закрываем меню по нажатию enter или пробела
240
+ event.preventDefault();
241
+ if (!open || highlightedIndex === -1)
242
+ toggleMenu();
243
+ }
244
+ };
245
+ const handleFieldClick = (event) => {
246
+ if (!autocomplete || event.target.tagName !== 'INPUT') {
247
+ toggleMenu();
248
+ }
249
+ else {
250
+ openMenu();
251
+ }
252
+ };
253
+ const handleNativeSelectChange = useCallback((event) => {
254
+ setSelectedItems(
255
+ // eslint-disable-next-line
256
+ [...event.target.options].reduce((acc, option, index) => option.selected ? acc.concat(flatOptions[index]) : acc, []));
257
+ }, [flatOptions, setSelectedItems]);
258
+ const getOptionProps = (option, index) => ({
259
+ ...optionProps,
260
+ mobile: view === 'mobile',
261
+ className: cn(optionClassName, {
262
+ [mobileStyles.option]: view === 'mobile',
263
+ }),
264
+ innerProps: getItemProps({
265
+ index,
266
+ item: option,
267
+ onMouseDown: (event) => event.preventDefault(),
268
+ onClick: () => {
269
+ if (view === 'mobile' || !showSearch || multiple)
270
+ return;
271
+ shouldSearchBlurRef.current = false;
272
+ searchRef.current?.blur();
273
+ shouldSearchBlurRef.current = true;
274
+ fieldRef.current?.focus();
275
+ },
276
+ }),
277
+ multiple,
278
+ index,
279
+ option,
280
+ size: optionsSize,
281
+ disabled: option.disabled,
282
+ highlighted: index === highlightedIndex,
283
+ selected: selectedItems.some(({ key }) => key === option.key),
284
+ dataTestId: getDataTestId(dataTestId, 'option'),
285
+ });
286
+ useEffect(() => {
287
+ if (defaultOpen)
288
+ openMenu();
289
+ }, [defaultOpen, openMenu]);
290
+ useEffect(() => {
291
+ if (openProp) {
292
+ openMenu();
293
+ }
294
+ // eslint-disable-next-line react-hooks/exhaustive-deps
295
+ }, []);
296
+ const calcOptionsListWidth = useCallback(() => {
297
+ if (view === 'desktop' && listRef.current) {
298
+ const widthAttr = optionsListWidth === 'field' ? 'width' : 'minWidth';
299
+ const optionsListMinWidth = rootRef.current
300
+ ? rootRef.current.getBoundingClientRect().width
301
+ : 0;
302
+ listRef.current.setAttribute('style', '');
303
+ listRef.current.style[widthAttr] = `${optionsListMinWidth}px`;
304
+ }
305
+ }, [view, optionsListWidth]);
306
+ useEffect(() => {
307
+ if (view === 'desktop') {
308
+ const ResizeObserver$1 = window.ResizeObserver || ResizeObserver;
309
+ const observer = new ResizeObserver$1(calcOptionsListWidth);
310
+ if (rootRef.current) {
311
+ observer.observe(rootRef.current);
312
+ }
313
+ return () => {
314
+ observer.disconnect();
315
+ };
316
+ }
317
+ return fnUtils.noop;
318
+ }, [view, calcOptionsListWidth, open, optionsListWidth]);
319
+ useLayoutEffect_SAFE_FOR_SSR(calcOptionsListWidth, [
320
+ open,
321
+ optionsListWidth,
322
+ filteredOptions,
323
+ selectedItems,
324
+ ]);
325
+ const renderValue = () => selectedItems.map((option) => (React.createElement("input", { type: 'hidden', name: name, value: option.key, key: option.key })));
326
+ const renderNativeSelect = () => {
327
+ const value = multiple
328
+ ? selectedItems.map((option) => option.key)
329
+ : (selectedItems[0] || {}).key;
330
+ return (React.createElement(NativeSelect, { ...menuProps, className: styles.nativeSelect, disabled: disabled, multiple: multiple, name: name, value: value, onChange: handleNativeSelectChange, options: filteredOptions }));
331
+ };
332
+ const handleFieldClear = (event) => {
333
+ setSelectedItems([]);
334
+ onClear?.(event);
335
+ };
336
+ const renderSearch = () => {
337
+ if (!showSearch)
338
+ return null;
339
+ const handleClear = (event) => {
340
+ setSearch?.('');
341
+ searchProps?.componentProps?.onClear?.(event);
342
+ };
343
+ const handleChange = (event, payload) => {
344
+ setSearch?.(payload.value);
345
+ searchProps?.componentProps?.onChange?.(event, payload);
346
+ };
347
+ const handleBlur = (event) => {
348
+ if (!shouldSearchBlurRef.current)
349
+ return;
350
+ searchProps.componentProps?.onBlur?.(event);
351
+ handleFieldBlur(event);
352
+ };
353
+ return (React.createElement(Search, { ...searchProps?.componentProps, onBlur: handleBlur, value: search, onChange: handleChange, dataTestId: getDataTestId(dataTestId, 'search'), onClear: handleClear, className: cn(searchProps?.componentProps?.className, {
354
+ [styles.search]: view === 'desktop',
355
+ [mobileStyles.search]: view === 'mobile',
356
+ }), ref: mergeRefs([searchRef, searchProps?.componentProps?.ref || null]) }));
357
+ };
358
+ const { header, emptyPlaceholder } = optionsListProps;
359
+ const renderOptionsListHeader = () => {
360
+ if (header || (view === 'desktop' && showSearch)) {
361
+ return (React.createElement(React.Fragment, null,
362
+ header,
363
+ view === 'desktop' && renderSearch()));
364
+ }
365
+ return null;
366
+ };
367
+ const renderEmptyPlaceholder = () => {
368
+ if (emptyPlaceholder) {
369
+ return emptyPlaceholder;
370
+ }
371
+ if (showSearch) {
372
+ return React.createElement("div", { className: styles.emptySearchPlaceholder }, "\u041D\u0438\u0447\u0435\u0433\u043E \u043D\u0435 \u043D\u0430\u0448\u043B\u043E\u0441\u044C");
373
+ }
374
+ return undefined;
375
+ };
376
+ const renderOptionsList = () => {
377
+ if (flatOptions.length === 0 && !showEmptyOptionsList && !showSearch)
378
+ return null;
379
+ const listProps = optionsListProps;
380
+ return (React.createElement("div", { ...menuProps, ref: view === 'desktop' ? menuRef : undefined, className: cn(optionsListClassName, view === 'mobile' && mobileStyles.optionsListWrapper, view === 'desktop' && styles.optionsListWrapper) },
381
+ 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, groupOptionProps: groupOptionProps, getOptionProps: getOptionProps, visibleOptions: view === 'desktop' ? visibleOptions : 0, dataTestId: getDataTestId(dataTestId, 'options-list'), header: renderOptionsListHeader(), optionGroupClassName: cn(optionGroupClassName, {
382
+ [mobileStyles.optionGroup]: view === 'mobile',
383
+ }), emptyPlaceholder: renderEmptyPlaceholder(), onScroll: onScroll, search: search, multiple: multiple, limitDynamicOptionGroupSize: limitDynamicOptionGroupSize }),
384
+ view === 'desktop' && React.createElement("div", { className: styles.optionsListBorder })));
385
+ };
386
+ return (React.createElement("div", { ...(disabled && { 'aria-disabled': true }), "aria-expanded": inputProps['aria-expanded'], "aria-haspopup": 'listbox', role: inputProps.role, className: cn(styles.component, { [styles.block]: block }, className), ref: rootRef, onKeyDown: disabled ? undefined : handleFieldKeyDown, tabIndex: -1, "data-test-id": getDataTestId(dataTestId) },
387
+ nativeSelect && renderNativeSelect(),
388
+ React.createElement(Field, { selectedMultiple: selectedItems, selected: selectedItems[0], setSelectedItems: setSelectedItems, toggleMenu: toggleMenu, multiple: multiple, open: open, disabled: disabled, size: size, placeholder: placeholder, label: label && React.createElement("span", { ...getLabelProps() }, label), labelView: labelView, Arrow: Arrow && React.createElement(Arrow, { open: open }), error: error, hint: hint, valueRenderer: valueRenderer, className: fieldClassName, clear: clear, onClear: handleFieldClear, innerProps: {
389
+ onBlur: handleFieldBlur,
390
+ onFocus: disabled ? undefined : handleFieldFocus,
391
+ onClick: disabled ? undefined : handleFieldClick,
392
+ tabIndex: disabled ? undefined : nativeSelect ? -1 : 0,
393
+ ref: inputProps.ref,
394
+ id: inputProps.id,
395
+ 'aria-labelledby': inputProps['aria-labelledby'],
396
+ 'aria-controls': inputProps['aria-controls'],
397
+ 'aria-autocomplete': autocomplete
398
+ ? inputProps['aria-autocomplete']
399
+ : undefined,
400
+ }, dataTestId: getDataTestId(dataTestId, 'field'), ...fieldProps }),
401
+ name && !nativeSelect && renderValue(),
402
+ view === 'desktop' && !nativeSelect && (React.createElement(ListPopoverDesktop, { ...getListPopoverDesktopProps(props), open: open, fieldRef: fieldRef, renderOptionsList: renderOptionsList })),
403
+ view === 'mobile' && (React.createElement(ListMobile, { baseProps: isBottomSheet
404
+ ? getListBottomSheetMobileProps(props)
405
+ : getListModalMobileProps(props), open: open, menuRef: menuRef, scrollableContainerRef: scrollableContainerRef, flatOptions: flatOptions, renderOptionsList: renderOptionsList, renderSearch: renderSearch, closeMenu: closeMenu, handleEntered: handleEntered }))));
406
+ });
407
+
408
+ export { BaseSelect };
@@ -0,0 +1,12 @@
1
+ /// <reference types="react" />
2
+ import { ComponentProps } from "../../../types/component-types";
3
+ declare const getListPopoverDesktopProps: (props: ComponentProps) => {
4
+ Popover: import("react").ForwardRefExoticComponent<import("@alfalab/core-components-popover").PopoverProps & import("react").RefAttributes<HTMLDivElement>> | undefined;
5
+ popoverProps: Omit<import("@alfalab/core-components-popover").PopoverProps, "className" | "dataTestId" | "anchorElement" | "position" | "preventFlip" | "open" | "update" | "zIndex"> | undefined;
6
+ popoverPosition: import("@alfalab/core-components-popover").Position;
7
+ preventFlip: boolean;
8
+ popperClassName: string | undefined;
9
+ updatePopover: import("react").MutableRefObject<(() => void) | undefined> | undefined;
10
+ zIndexPopover: number | undefined;
11
+ };
12
+ export { getListPopoverDesktopProps };
@@ -0,0 +1,15 @@
1
+ // отделяем необходимые пропсы для передачи в компонент
2
+ const getListPopoverDesktopProps = (props) => {
3
+ const { Popover, popoverProps, popoverPosition = 'bottom-start', preventFlip = true, popperClassName, updatePopover, zIndexPopover, } = props;
4
+ return {
5
+ Popover,
6
+ popoverProps,
7
+ popoverPosition,
8
+ preventFlip,
9
+ popperClassName,
10
+ updatePopover,
11
+ zIndexPopover,
12
+ };
13
+ };
14
+
15
+ export { getListPopoverDesktopProps };
@@ -0,0 +1,9 @@
1
+ import { FC, ReactNode, RefObject } from 'react';
2
+ import { ListPopoverDesktopRestProps } from "./types/types";
3
+ type ListPopoverDesktopProps = {
4
+ open: boolean;
5
+ fieldRef: RefObject<HTMLInputElement>;
6
+ renderOptionsList: () => ReactNode;
7
+ } & ListPopoverDesktopRestProps;
8
+ declare const ListPopoverDesktop: FC<ListPopoverDesktopProps>;
9
+ export { ListPopoverDesktop };
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ import cn from 'classnames';
3
+ import styles from '../../index.module.css';
4
+
5
+ const ListPopoverDesktop = (props) => {
6
+ const { Popover, open, popoverProps, fieldRef, popoverPosition = 'bottom-start', preventFlip = true, popperClassName, updatePopover, zIndexPopover, renderOptionsList, } = props;
7
+ if (Popover) {
8
+ return (React.createElement(Popover, { ...popoverProps, open: open, withTransition: false, anchorElement: fieldRef.current, position: popoverPosition, preventFlip: preventFlip, popperClassName: cn(styles.popoverInner, popperClassName), update: updatePopover, zIndex: zIndexPopover }, renderOptionsList()));
9
+ }
10
+ return null;
11
+ };
12
+
13
+ export { ListPopoverDesktop };
@@ -0,0 +1,3 @@
1
+ import { getListPopoverDesktopProps } from "../helpers/get-list-popover-desktop-props";
2
+ type ListPopoverDesktopRestProps = ReturnType<typeof getListPopoverDesktopProps>;
3
+ export { ListPopoverDesktopRestProps };
@@ -0,0 +1,16 @@
1
+ /// <reference types="react" />
2
+ import { ComponentProps } from "../../../types/component-types";
3
+ declare const getListBottomSheetMobileProps: (props: ComponentProps) => {
4
+ BottomSheet: import("react").ForwardRefExoticComponent<import("@alfalab/core-components-bottom-sheet").BottomSheetProps & import("react").RefAttributes<HTMLDivElement>> | undefined;
5
+ dataTestId: string | undefined;
6
+ label: import("react").ReactNode;
7
+ placeholder: string | undefined;
8
+ footer: import("react").ReactNode;
9
+ swipeable: boolean | undefined;
10
+ showSearch: boolean | undefined;
11
+ bottomSheetProps: Partial<import("@alfalab/core-components-bottom-sheet").BottomSheetProps> | undefined;
12
+ isBottomSheet: boolean;
13
+ nativeSelect: boolean;
14
+ onScroll: ((event: import("react").MouseEvent<HTMLDivElement, MouseEvent>) => void) | undefined;
15
+ };
16
+ export { getListBottomSheetMobileProps };
@@ -0,0 +1,19 @@
1
+ // отделяем необходимые пропсы для передачи в компонент
2
+ const getListBottomSheetMobileProps = (props) => {
3
+ const { BottomSheet, dataTestId, label, placeholder, footer, swipeable, showSearch, bottomSheetProps, isBottomSheet = true, nativeSelect = false, onScroll, } = props;
4
+ return {
5
+ BottomSheet,
6
+ dataTestId,
7
+ label,
8
+ placeholder,
9
+ footer,
10
+ swipeable,
11
+ showSearch,
12
+ bottomSheetProps,
13
+ isBottomSheet,
14
+ nativeSelect,
15
+ onScroll,
16
+ };
17
+ };
18
+
19
+ export { getListBottomSheetMobileProps };
@@ -0,0 +1,28 @@
1
+ /// <reference types="react" />
2
+ import { ComponentProps } from "../../../types/component-types";
3
+ declare const getListModalMobileProps: (props: ComponentProps) => {
4
+ ModalMobile: (import("react").ForwardRefExoticComponent<import("../../../types/component-types").ModalMobileProps & import("react").RefAttributes<HTMLDivElement>> & {
5
+ Header: import("react").FC<import("@alfalab/core-components-modal/shared").ModalHeaderProps>;
6
+ Footer: import("react").FC<import("@alfalab/core-components-modal/shared").ModalFooterProps>;
7
+ Content: import("react").FC<import("../../../types/component-types").ContentProps>;
8
+ }) | undefined;
9
+ dataTestId: string | undefined;
10
+ modalProps: Partial<import("@alfalab/core-components-base-modal").BaseModalProps & {
11
+ size?: "s" | "m" | "l" | "xl" | 500 | "fullscreen" | 600 | 800 | 1140 | undefined;
12
+ fullscreen?: boolean | undefined;
13
+ fixedPosition?: boolean | undefined;
14
+ hasCloser?: boolean | undefined;
15
+ iOSLock?: boolean | undefined;
16
+ } & {
17
+ breakpoint?: number | undefined;
18
+ defaultMatchMediaValue?: boolean | (() => boolean) | undefined;
19
+ } & import("react").RefAttributes<HTMLDivElement>> | undefined;
20
+ modalHeaderProps: Partial<import("@alfalab/core-components-modal/shared").ModalHeaderProps> | undefined;
21
+ modalFooterProps: Partial<import("@alfalab/core-components-modal/shared").ModalFooterProps> | undefined;
22
+ label: import("react").ReactNode;
23
+ placeholder: string | undefined;
24
+ isBottomSheet: boolean;
25
+ nativeSelect: boolean;
26
+ onScroll: ((event: import("react").MouseEvent<HTMLDivElement, MouseEvent>) => void) | undefined;
27
+ };
28
+ export { getListModalMobileProps };
@@ -0,0 +1,18 @@
1
+ // отделяем необходимые пропсы для передачи в компонент
2
+ const getListModalMobileProps = (props) => {
3
+ const { ModalMobile, dataTestId, modalProps, modalHeaderProps, modalFooterProps, label, placeholder, isBottomSheet = true, nativeSelect = false, onScroll, } = props;
4
+ return {
5
+ ModalMobile,
6
+ dataTestId,
7
+ modalProps,
8
+ modalHeaderProps,
9
+ modalFooterProps,
10
+ label,
11
+ placeholder,
12
+ isBottomSheet,
13
+ nativeSelect,
14
+ onScroll,
15
+ };
16
+ };
17
+
18
+ export { getListModalMobileProps };
@@ -0,0 +1,2 @@
1
+ export { getListModalMobileProps } from "./get-list-modal-mobile-props";
2
+ export { getListBottomSheetMobileProps } from "./get-list-bottom-sheet-mobile-props";