@true-engineering/true-react-common-ui-kit 3.26.1 → 3.27.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 (680) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +7 -0
  3. package/dist/components/AccountInfo/AccountInfo.d.ts +11 -11
  4. package/dist/components/AccountInfo/AccountInfo.stories.d.ts +6 -6
  5. package/dist/components/AccountInfo/AccountInfo.styles.d.ts +6 -6
  6. package/dist/components/AccountInfo/constants.d.ts +1 -1
  7. package/dist/components/AccountInfo/index.d.ts +2 -2
  8. package/dist/components/AddButton/AddButton.d.ts +14 -14
  9. package/dist/components/AddButton/AddButton.stories.d.ts +6 -6
  10. package/dist/components/AddButton/AddButton.styles.d.ts +3 -3
  11. package/dist/components/AddButton/index.d.ts +2 -2
  12. package/dist/components/Button/Button.d.ts +41 -41
  13. package/dist/components/Button/Button.stories.d.ts +6 -6
  14. package/dist/components/Button/Button.styles.d.ts +8 -8
  15. package/dist/components/Button/constants.d.ts +2 -2
  16. package/dist/components/Button/index.d.ts +3 -3
  17. package/dist/components/Button/types.d.ts +3 -3
  18. package/dist/components/Checkbox/Checkbox.d.ts +24 -24
  19. package/dist/components/Checkbox/Checkbox.stories.d.ts +8 -8
  20. package/dist/components/Checkbox/Checkbox.styles.d.ts +3 -3
  21. package/dist/components/Checkbox/index.d.ts +2 -2
  22. package/dist/components/CloseButton/CloseButton.d.ts +10 -10
  23. package/dist/components/CloseButton/CloseButton.stories.d.ts +5 -5
  24. package/dist/components/CloseButton/CloseButton.styles.d.ts +3 -3
  25. package/dist/components/CloseButton/index.d.ts +2 -2
  26. package/dist/components/Colors/Colors.d.ts +2 -2
  27. package/dist/components/Colors/Colors.stories.d.ts +5 -5
  28. package/dist/components/Colors/Colors.styles.d.ts +1 -1
  29. package/dist/components/Colors/index.d.ts +1 -1
  30. package/dist/components/CssBaseline/CssBaseline.d.ts +5 -5
  31. package/dist/components/CssBaseline/CssBaseline.styles.d.ts +3 -3
  32. package/dist/components/CssBaseline/index.d.ts +2 -2
  33. package/dist/components/DateInput/DateInput.d.ts +17 -17
  34. package/dist/components/DateInput/DateInput.stories.d.ts +7 -7
  35. package/dist/components/DateInput/DateInput.styles.d.ts +6 -6
  36. package/dist/components/DateInput/constants.d.ts +2 -2
  37. package/dist/components/DateInput/index.d.ts +3 -3
  38. package/dist/components/DatePicker/DatePicker.d.ts +26 -26
  39. package/dist/components/DatePicker/DatePicker.stories.d.ts +7 -7
  40. package/dist/components/DatePicker/DatePicker.styles.d.ts +6 -6
  41. package/dist/components/DatePicker/components/DatePickerHeader/DatePickerHeader.d.ts +8 -8
  42. package/dist/components/DatePicker/components/DatePickerHeader/DatePickerHeader.styles.d.ts +7 -7
  43. package/dist/components/DatePicker/components/DatePickerHeader/index.d.ts +2 -2
  44. package/dist/components/DatePicker/components/PopperContainer/PopperContainer.d.ts +4 -4
  45. package/dist/components/DatePicker/components/PopperContainer/index.d.ts +1 -1
  46. package/dist/components/DatePicker/components/index.d.ts +2 -2
  47. package/dist/components/DatePicker/constants.d.ts +3 -3
  48. package/dist/components/DatePicker/helpers.d.ts +3 -3
  49. package/dist/components/DatePicker/index.d.ts +4 -4
  50. package/dist/components/DatePicker/types.d.ts +4 -4
  51. package/dist/components/Description/Description.d.ts +13 -13
  52. package/dist/components/Description/Description.stories.d.ts +16 -16
  53. package/dist/components/Description/Description.styles.d.ts +3 -3
  54. package/dist/components/Description/constants.d.ts +1 -1
  55. package/dist/components/Description/index.d.ts +2 -2
  56. package/dist/components/FileInput/FileInput.d.ts +25 -25
  57. package/dist/components/FileInput/FileInput.stories.d.ts +7 -7
  58. package/dist/components/FileInput/FileInput.styles.d.ts +3 -3
  59. package/dist/components/FileInput/helpers.d.ts +2 -2
  60. package/dist/components/FileInput/index.d.ts +2 -2
  61. package/dist/components/FileItem/FileItem.d.ts +31 -31
  62. package/dist/components/FileItem/FileItem.stories.d.ts +8 -8
  63. package/dist/components/FileItem/FileItem.styles.d.ts +11 -11
  64. package/dist/components/FileItem/constants.d.ts +5 -5
  65. package/dist/components/FileItem/helpers.d.ts +4 -4
  66. package/dist/components/FileItem/index.d.ts +4 -4
  67. package/dist/components/FileItem/types.d.ts +8 -8
  68. package/dist/components/FiltersPane/FiltersPane.d.ts +22 -22
  69. package/dist/components/FiltersPane/FiltersPane.stories.d.ts +31 -31
  70. package/dist/components/FiltersPane/FiltersPane.styles.d.ts +11 -11
  71. package/dist/components/FiltersPane/components/Filter/Filter.d.ts +7 -7
  72. package/dist/components/FiltersPane/components/Filter/index.d.ts +1 -1
  73. package/dist/components/FiltersPane/components/FilterInterval/FilterInterval.d.ts +24 -24
  74. package/dist/components/FiltersPane/components/FilterInterval/FilterInterval.styles.d.ts +15 -15
  75. package/dist/components/FiltersPane/components/FilterInterval/index.d.ts +2 -2
  76. package/dist/components/FiltersPane/components/FilterMultiSelect/FilterMultiSelect.d.ts +5 -5
  77. package/dist/components/FiltersPane/components/FilterMultiSelect/index.d.ts +1 -1
  78. package/dist/components/FiltersPane/components/FilterSelect/FilterSelect.d.ts +30 -30
  79. package/dist/components/FiltersPane/components/FilterSelect/FilterSelect.styles.d.ts +15 -15
  80. package/dist/components/FiltersPane/components/FilterSelect/index.d.ts +2 -2
  81. package/dist/components/FiltersPane/components/FilterValueView/FilterValueView.d.ts +5 -5
  82. package/dist/components/FiltersPane/components/FilterValueView/FilterValueView.styles.d.ts +3 -3
  83. package/dist/components/FiltersPane/components/FilterValueView/index.d.ts +2 -2
  84. package/dist/components/FiltersPane/components/FilterWithDates/FilterWithDates.d.ts +16 -16
  85. package/dist/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.d.ts +26 -26
  86. package/dist/components/FiltersPane/components/FilterWithDates/index.d.ts +2 -2
  87. package/dist/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.d.ts +13 -13
  88. package/dist/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.styles.d.ts +7 -7
  89. package/dist/components/FiltersPane/components/FilterWithPeriod/index.d.ts +2 -2
  90. package/dist/components/FiltersPane/components/FilterWrapper/FilterWrapper.d.ts +13 -13
  91. package/dist/components/FiltersPane/components/FilterWrapper/FilterWrapper.styles.d.ts +8 -8
  92. package/dist/components/FiltersPane/components/FilterWrapper/helpers.d.ts +1 -1
  93. package/dist/components/FiltersPane/components/FilterWrapper/index.d.ts +2 -2
  94. package/dist/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.d.ts +21 -21
  95. package/dist/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.d.ts +10 -10
  96. package/dist/components/FiltersPane/components/FiltersPaneSearch/index.d.ts +2 -2
  97. package/dist/components/FiltersPane/components/index.d.ts +9 -9
  98. package/dist/components/FiltersPane/constants.d.ts +9 -9
  99. package/dist/components/FiltersPane/helpers.d.ts +5 -5
  100. package/dist/components/FiltersPane/index.d.ts +4 -4
  101. package/dist/components/FiltersPane/types.d.ts +107 -107
  102. package/dist/components/Flag/Flag.d.ts +8 -8
  103. package/dist/components/Flag/Flag.stories.d.ts +12 -12
  104. package/dist/components/Flag/Flag.styles.d.ts +3 -3
  105. package/dist/components/Flag/index.d.ts +2 -2
  106. package/dist/components/FlexibleTable/FlexibleTable.d.ts +22 -22
  107. package/dist/components/FlexibleTable/FlexibleTable.stories.d.ts +15 -15
  108. package/dist/components/FlexibleTable/FlexibleTable.styles.d.ts +7 -7
  109. package/dist/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.d.ts +14 -14
  110. package/dist/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.d.ts +3 -3
  111. package/dist/components/FlexibleTable/components/FlexibleTableCell/index.d.ts +2 -2
  112. package/dist/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.d.ts +28 -28
  113. package/dist/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.d.ts +6 -6
  114. package/dist/components/FlexibleTable/components/FlexibleTableRow/index.d.ts +2 -2
  115. package/dist/components/FlexibleTable/components/index.d.ts +2 -2
  116. package/dist/components/FlexibleTable/constants.d.ts +1 -1
  117. package/dist/components/FlexibleTable/helpers.d.ts +3 -3
  118. package/dist/components/FlexibleTable/index.d.ts +4 -4
  119. package/dist/components/FlexibleTable/types.d.ts +45 -45
  120. package/dist/components/Icon/Icon.d.ts +8 -8
  121. package/dist/components/Icon/Icon.stories.d.ts +6 -6
  122. package/dist/components/Icon/Icon.styles.d.ts +3 -3
  123. package/dist/components/Icon/complexIcons/icons.d.ts +10 -10
  124. package/dist/components/Icon/complexIcons/index.d.ts +1 -1
  125. package/dist/components/Icon/components/ComplexIconBoilerplate/ComplexIconBoilerplate.d.ts +6 -6
  126. package/dist/components/Icon/components/ComplexIconBoilerplate/index.d.ts +1 -1
  127. package/dist/components/Icon/components/IconBolerplate/IconBoilerplate.d.ts +6 -6
  128. package/dist/components/Icon/components/IconBolerplate/index.d.ts +1 -1
  129. package/dist/components/Icon/components/index.d.ts +2 -2
  130. package/dist/components/Icon/helpers.d.ts +6 -6
  131. package/dist/components/Icon/icons-list.d.ts +1 -1
  132. package/dist/components/Icon/index.d.ts +5 -5
  133. package/dist/components/Icon/snippet.d.ts +3 -3
  134. package/dist/components/Icon/types.d.ts +13 -13
  135. package/dist/components/IconButton/IconButton.d.ts +19 -19
  136. package/dist/components/IconButton/IconButton.stories.d.ts +6 -6
  137. package/dist/components/IconButton/IconButton.styles.d.ts +3 -3
  138. package/dist/components/IconButton/constants.d.ts +2 -2
  139. package/dist/components/IconButton/index.d.ts +3 -3
  140. package/dist/components/IconButton/types.d.ts +5 -5
  141. package/dist/components/IncrementInput/IncrementInput.d.ts +9 -9
  142. package/dist/components/IncrementInput/IncrementInput.stories.d.ts +6 -6
  143. package/dist/components/IncrementInput/IncrementInput.styles.d.ts +9 -9
  144. package/dist/components/IncrementInput/index.d.ts +2 -2
  145. package/dist/components/Input/Input.d.ts +52 -52
  146. package/dist/components/Input/Input.stories.d.ts +34 -34
  147. package/dist/components/Input/Input.styles.d.ts +7 -7
  148. package/dist/components/Input/constants.d.ts +1 -1
  149. package/dist/components/Input/index.d.ts +3 -3
  150. package/dist/components/Input/types.d.ts +4 -4
  151. package/dist/components/List/List.d.ts +9 -9
  152. package/dist/components/List/List.stories.d.ts +5 -5
  153. package/dist/components/List/List.styles.d.ts +5 -3
  154. package/dist/components/List/components/ListItem/ListItem.d.ts +17 -15
  155. package/dist/components/List/components/ListItem/ListItem.styles.d.ts +3 -3
  156. package/dist/components/List/components/ListItem/index.d.ts +2 -2
  157. package/dist/components/List/components/index.d.ts +1 -1
  158. package/dist/components/List/index.d.ts +3 -3
  159. package/dist/components/Modal/Modal.d.ts +34 -34
  160. package/dist/components/Modal/Modal.stories.d.ts +29 -29
  161. package/dist/components/Modal/Modal.styles.d.ts +7 -7
  162. package/dist/components/Modal/index.d.ts +3 -3
  163. package/dist/components/Modal/types.d.ts +3 -3
  164. package/dist/components/MoreMenu/MoreMenu.d.ts +15 -15
  165. package/dist/components/MoreMenu/MoreMenu.stories.d.ts +6 -6
  166. package/dist/components/MoreMenu/MoreMenu.styles.d.ts +6 -6
  167. package/dist/components/MoreMenu/index.d.ts +2 -2
  168. package/dist/components/MultiSelect/MultiSelect.d.ts +23 -23
  169. package/dist/components/MultiSelect/MultiSelect.stories.d.ts +13 -13
  170. package/dist/components/MultiSelect/MultiSelect.styles.d.ts +7 -7
  171. package/dist/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.d.ts +12 -12
  172. package/dist/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.styles.d.ts +3 -3
  173. package/dist/components/MultiSelect/components/MultiSelectInput/index.d.ts +2 -2
  174. package/dist/components/MultiSelect/components/index.d.ts +1 -1
  175. package/dist/components/MultiSelect/index.d.ts +4 -4
  176. package/dist/components/MultiSelect/types.d.ts +1 -1
  177. package/dist/components/MultiSelectList/MultiSelectList.d.ts +25 -25
  178. package/dist/components/MultiSelectList/MultiSelectList.styles.d.ts +13 -13
  179. package/dist/components/MultiSelectList/constants.d.ts +3 -3
  180. package/dist/components/MultiSelectList/helpers.d.ts +3 -3
  181. package/dist/components/MultiSelectList/index.d.ts +3 -3
  182. package/dist/components/MultiSelectList/types.d.ts +12 -12
  183. package/dist/components/NewMoreMenu/NewMoreMenu.d.ts +13 -13
  184. package/dist/components/NewMoreMenu/NewMoreMenu.stories.d.ts +12 -12
  185. package/dist/components/NewMoreMenu/NewMoreMenu.styles.d.ts +8 -8
  186. package/dist/components/NewMoreMenu/index.d.ts +2 -2
  187. package/dist/components/Notification/Notification.d.ts +15 -15
  188. package/dist/components/Notification/Notification.stories.d.ts +8 -8
  189. package/dist/components/Notification/Notification.styles.d.ts +3 -3
  190. package/dist/components/Notification/index.d.ts +3 -3
  191. package/dist/components/Notification/types.d.ts +1 -1
  192. package/dist/components/NumberInput/NumberInput.d.ts +18 -18
  193. package/dist/components/NumberInput/NumberInput.stories.d.ts +7 -7
  194. package/dist/components/NumberInput/helpers.d.ts +4 -4
  195. package/dist/components/NumberInput/index.d.ts +1 -1
  196. package/dist/components/PhoneInput/PhoneInput.d.ts +17 -17
  197. package/dist/components/PhoneInput/PhoneInput.stories.d.ts +28 -28
  198. package/dist/components/PhoneInput/PhoneInput.styles.d.ts +9 -9
  199. package/dist/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.d.ts +13 -13
  200. package/dist/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.stories.d.ts +5 -5
  201. package/dist/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.styles.d.ts +7 -7
  202. package/dist/components/PhoneInput/components/PhoneInputCountryList/index.d.ts +2 -2
  203. package/dist/components/PhoneInput/components/index.d.ts +1 -1
  204. package/dist/components/PhoneInput/constants.d.ts +2 -2
  205. package/dist/components/PhoneInput/index.d.ts +4 -4
  206. package/dist/components/PhoneInput/types.d.ts +15 -15
  207. package/dist/components/RadioButton/RadioButton.d.ts +15 -15
  208. package/dist/components/RadioButton/RadioButton.stories.d.ts +7 -7
  209. package/dist/components/RadioButton/RadioButton.styles.d.ts +3 -3
  210. package/dist/components/RadioButton/index.d.ts +2 -2
  211. package/dist/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.d.ts +386 -386
  212. package/dist/components/ScrollIntoViewIfNeeded/constants.d.ts +3 -3
  213. package/dist/components/ScrollIntoViewIfNeeded/index.d.ts +1 -1
  214. package/dist/components/SearchInput/SearchInput.d.ts +6 -6
  215. package/dist/components/SearchInput/SearchInput.stories.d.ts +13 -13
  216. package/dist/components/SearchInput/SearchInput.styles.d.ts +7 -7
  217. package/dist/components/SearchInput/index.d.ts +2 -2
  218. package/dist/components/Select/CustomSelect.stories.d.ts +11 -11
  219. package/dist/components/Select/MultiSelect.stories.d.ts +15 -15
  220. package/dist/components/Select/Select.d.ts +52 -52
  221. package/dist/components/Select/Select.stories.d.ts +15 -15
  222. package/dist/components/Select/Select.styles.d.ts +33 -33
  223. package/dist/components/Select/components/SelectList/SelectList.d.ts +23 -23
  224. package/dist/components/Select/components/SelectList/SelectList.styles.d.ts +6 -6
  225. package/dist/components/Select/components/SelectList/index.d.ts +2 -2
  226. package/dist/components/Select/components/SelectListItem/SelectListItem.d.ts +15 -15
  227. package/dist/components/Select/components/SelectListItem/SelectListItem.styles.d.ts +2 -2
  228. package/dist/components/Select/components/SelectListItem/index.d.ts +1 -1
  229. package/dist/components/Select/components/index.d.ts +2 -2
  230. package/dist/components/Select/constants.d.ts +2 -2
  231. package/dist/components/Select/helpers.d.ts +4 -4
  232. package/dist/components/Select/index.d.ts +4 -4
  233. package/dist/components/Select/types.d.ts +1 -1
  234. package/dist/components/Selector/Selector.d.ts +22 -22
  235. package/dist/components/Selector/Selector.stories.d.ts +7 -7
  236. package/dist/components/Selector/Selector.styles.d.ts +9 -9
  237. package/dist/components/Selector/index.d.ts +2 -2
  238. package/dist/components/Selector/types.d.ts +10 -10
  239. package/dist/components/Skeleton/Skeleton.d.ts +7 -7
  240. package/dist/components/Skeleton/Skeleton.stories.d.ts +6 -6
  241. package/dist/components/Skeleton/Skeleton.styles.d.ts +3 -3
  242. package/dist/components/Skeleton/index.d.ts +2 -2
  243. package/dist/components/SmartInput/SmartInput.d.ts +12 -12
  244. package/dist/components/SmartInput/SmartInput.stories.d.ts +18 -18
  245. package/dist/components/SmartInput/constants.d.ts +18 -18
  246. package/dist/components/SmartInput/helpers.d.ts +4 -4
  247. package/dist/components/SmartInput/index.d.ts +2 -2
  248. package/dist/components/SmartInput/types.d.ts +1 -1
  249. package/dist/components/Status/Status.d.ts +16 -16
  250. package/dist/components/Status/Status.stories.d.ts +6 -6
  251. package/dist/components/Status/Status.styles.d.ts +3 -3
  252. package/dist/components/Status/constants.d.ts +2 -2
  253. package/dist/components/Status/index.d.ts +2 -2
  254. package/dist/components/Status/types.d.ts +3 -3
  255. package/dist/components/Switch/Switch.d.ts +20 -20
  256. package/dist/components/Switch/Switch.stories.d.ts +16 -16
  257. package/dist/components/Switch/Switch.styles.d.ts +3 -3
  258. package/dist/components/Switch/index.d.ts +3 -3
  259. package/dist/components/Switch/types.d.ts +4 -4
  260. package/dist/components/TextArea/TextArea.d.ts +38 -38
  261. package/dist/components/TextArea/TextArea.stories.d.ts +17 -17
  262. package/dist/components/TextArea/TextArea.styles.d.ts +3 -3
  263. package/dist/components/TextArea/index.d.ts +3 -3
  264. package/dist/components/TextArea/types.d.ts +2 -2
  265. package/dist/components/TextButton/TextButton.d.ts +31 -31
  266. package/dist/components/TextButton/TextButton.stories.d.ts +6 -6
  267. package/dist/components/TextButton/TextButton.styles.d.ts +7 -7
  268. package/dist/components/TextButton/constants.d.ts +2 -2
  269. package/dist/components/TextButton/index.d.ts +3 -3
  270. package/dist/components/TextButton/types.d.ts +5 -5
  271. package/dist/components/TextWithInfo/TextWithInfo.d.ts +15 -15
  272. package/dist/components/TextWithInfo/TextWithInfo.stories.d.ts +12 -12
  273. package/dist/components/TextWithInfo/TextWithInfo.styles.d.ts +3 -3
  274. package/dist/components/TextWithInfo/index.d.ts +2 -2
  275. package/dist/components/TextWithTooltip/TextWithTooltip.d.ts +26 -26
  276. package/dist/components/TextWithTooltip/TextWithTooltip.stories.d.ts +24 -24
  277. package/dist/components/TextWithTooltip/TextWithTooltip.styles.d.ts +6 -6
  278. package/dist/components/TextWithTooltip/index.d.ts +2 -2
  279. package/dist/components/ThemedPreloader/ThemedPreloader.d.ts +11 -11
  280. package/dist/components/ThemedPreloader/ThemedPreloader.stories.d.ts +17 -17
  281. package/dist/components/ThemedPreloader/ThemedPreloader.styles.d.ts +7 -7
  282. package/dist/components/ThemedPreloader/components/DefaultPreloader/DefaultPreloader.d.ts +2 -2
  283. package/dist/components/ThemedPreloader/components/DefaultPreloader/index.d.ts +1 -1
  284. package/dist/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.d.ts +5 -5
  285. package/dist/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.d.ts +3 -3
  286. package/dist/components/ThemedPreloader/components/DotsPreloader/index.d.ts +2 -2
  287. package/dist/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.d.ts +8 -8
  288. package/dist/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.d.ts +3 -3
  289. package/dist/components/ThemedPreloader/components/SvgPreloader/index.d.ts +2 -2
  290. package/dist/components/ThemedPreloader/components/index.d.ts +3 -3
  291. package/dist/components/ThemedPreloader/constants.d.ts +1 -1
  292. package/dist/components/ThemedPreloader/index.d.ts +4 -4
  293. package/dist/components/ThemedPreloader/types.d.ts +2 -2
  294. package/dist/components/Toaster/Toaster.d.ts +23 -23
  295. package/dist/components/Toaster/Toaster.stories.d.ts +5 -5
  296. package/dist/components/Toaster/Toaster.styles.d.ts +6 -6
  297. package/dist/components/Toaster/constants.d.ts +1 -1
  298. package/dist/components/Toaster/index.d.ts +3 -3
  299. package/dist/components/Toaster/types.d.ts +1 -1
  300. package/dist/components/Tooltip/Tooltip.d.ts +11 -11
  301. package/dist/components/Tooltip/Tooltip.stories.d.ts +5 -5
  302. package/dist/components/Tooltip/Tooltip.styles.d.ts +3 -3
  303. package/dist/components/Tooltip/index.d.ts +3 -3
  304. package/dist/components/Tooltip/types.d.ts +1 -1
  305. package/dist/components/WithPopup/WithPopup.d.ts +31 -31
  306. package/dist/components/WithPopup/WithPopup.stories.d.ts +16 -16
  307. package/dist/components/WithPopup/WithPopup.styles.d.ts +3 -3
  308. package/dist/components/WithPopup/constants.d.ts +2 -2
  309. package/dist/components/WithPopup/index.d.ts +2 -2
  310. package/dist/components/WithPopup/types.d.ts +13 -13
  311. package/dist/components/index.d.ts +45 -45
  312. package/dist/constants/index.d.ts +2 -2
  313. package/dist/constants/mime-types.d.ts +76 -76
  314. package/dist/constants/phone-info.d.ts +2 -2
  315. package/dist/helpers/index.d.ts +3 -3
  316. package/dist/helpers/misc.d.ts +19 -19
  317. package/dist/helpers/phone.d.ts +14 -14
  318. package/dist/helpers/popper-helpers.d.ts +2 -2
  319. package/dist/hooks/index.d.ts +7 -7
  320. package/dist/hooks/use-did-mount-effect.d.ts +2 -2
  321. package/dist/hooks/use-dropdown.d.ts +11 -11
  322. package/dist/hooks/use-is-mounted.d.ts +1 -1
  323. package/dist/hooks/use-merged-refs.d.ts +2 -2
  324. package/dist/hooks/use-mixed-styles.d.ts +1 -1
  325. package/dist/hooks/use-on-click-outside.d.ts +5 -5
  326. package/dist/hooks/use-tweak-styles.d.ts +21 -21
  327. package/dist/index.d.ts +6 -6
  328. package/dist/theme/Provider.d.ts +11 -11
  329. package/dist/theme/common.d.ts +101 -101
  330. package/dist/theme/helpers.d.ts +10 -10
  331. package/dist/theme/index.d.ts +4 -4
  332. package/dist/theme/types.d.ts +82 -82
  333. package/dist/true-react-common-ui-kit.js +952 -949
  334. package/dist/true-react-common-ui-kit.js.map +1 -1
  335. package/dist/true-react-common-ui-kit.umd.cjs +917 -914
  336. package/dist/true-react-common-ui-kit.umd.cjs.map +1 -1
  337. package/dist/types.d.ts +39 -39
  338. package/package.json +98 -98
  339. package/src/components/AccountInfo/AccountInfo.stories.tsx +32 -32
  340. package/src/components/AccountInfo/AccountInfo.styles.ts +52 -52
  341. package/src/components/AccountInfo/AccountInfo.tsx +80 -80
  342. package/src/components/AccountInfo/constants.ts +1 -1
  343. package/src/components/AccountInfo/index.ts +2 -2
  344. package/src/components/AddButton/AddButton.stories.tsx +21 -21
  345. package/src/components/AddButton/AddButton.styles.ts +34 -34
  346. package/src/components/AddButton/AddButton.tsx +52 -52
  347. package/src/components/AddButton/index.ts +2 -2
  348. package/src/components/Button/Button.stories.tsx +54 -54
  349. package/src/components/Button/Button.styles.ts +200 -200
  350. package/src/components/Button/Button.tsx +129 -129
  351. package/src/components/Button/constants.ts +11 -11
  352. package/src/components/Button/index.ts +3 -3
  353. package/src/components/Button/types.ts +5 -5
  354. package/src/components/Checkbox/Checkbox.stories.tsx +54 -54
  355. package/src/components/Checkbox/Checkbox.styles.ts +49 -49
  356. package/src/components/Checkbox/Checkbox.tsx +84 -84
  357. package/src/components/Checkbox/index.ts +2 -2
  358. package/src/components/CloseButton/CloseButton.stories.tsx +11 -11
  359. package/src/components/CloseButton/CloseButton.styles.ts +34 -34
  360. package/src/components/CloseButton/CloseButton.tsx +35 -35
  361. package/src/components/CloseButton/index.ts +2 -2
  362. package/src/components/Colors/Colors.stories.tsx +7 -7
  363. package/src/components/Colors/Colors.styles.ts +36 -36
  364. package/src/components/Colors/Colors.tsx +26 -26
  365. package/src/components/Colors/index.ts +1 -1
  366. package/src/components/CssBaseline/CssBaseline.styles.ts +14 -14
  367. package/src/components/CssBaseline/CssBaseline.tsx +13 -13
  368. package/src/components/CssBaseline/index.ts +2 -2
  369. package/src/components/DateInput/DateInput.stories.tsx +61 -61
  370. package/src/components/DateInput/DateInput.styles.ts +18 -18
  371. package/src/components/DateInput/DateInput.tsx +90 -90
  372. package/src/components/DateInput/constants.ts +2 -2
  373. package/src/components/DateInput/index.ts +3 -3
  374. package/src/components/DatePicker/DatePicker.stories.tsx +88 -88
  375. package/src/components/DatePicker/DatePicker.styles.ts +38 -38
  376. package/src/components/DatePicker/DatePicker.tsx +314 -314
  377. package/src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.styles.ts +88 -88
  378. package/src/components/DatePicker/components/DatePickerHeader/DatePickerHeader.tsx +89 -89
  379. package/src/components/DatePicker/components/DatePickerHeader/index.ts +2 -2
  380. package/src/components/DatePicker/components/PopperContainer/PopperContainer.tsx +6 -6
  381. package/src/components/DatePicker/components/PopperContainer/index.ts +1 -1
  382. package/src/components/DatePicker/components/index.ts +2 -2
  383. package/src/components/DatePicker/constants.ts +6 -6
  384. package/src/components/DatePicker/helpers.ts +23 -23
  385. package/src/components/DatePicker/index.ts +4 -4
  386. package/src/components/DatePicker/types.ts +48 -48
  387. package/src/components/Description/Description.stories.tsx +27 -27
  388. package/src/components/Description/Description.styles.ts +30 -30
  389. package/src/components/Description/Description.tsx +61 -61
  390. package/src/components/Description/constants.ts +1 -1
  391. package/src/components/Description/index.ts +2 -2
  392. package/src/components/FileInput/FileInput.stories.tsx +75 -75
  393. package/src/components/FileInput/FileInput.styles.ts +80 -80
  394. package/src/components/FileInput/FileInput.tsx +147 -147
  395. package/src/components/FileInput/helpers.ts +6 -6
  396. package/src/components/FileInput/index.ts +2 -2
  397. package/src/components/FileItem/FileItem.stories.tsx +63 -63
  398. package/src/components/FileItem/FileItem.styles.ts +122 -122
  399. package/src/components/FileItem/FileItem.tsx +157 -157
  400. package/src/components/FileItem/constants.ts +29 -29
  401. package/src/components/FileItem/helpers.ts +27 -27
  402. package/src/components/FileItem/index.ts +4 -4
  403. package/src/components/FileItem/types.ts +11 -11
  404. package/src/components/FiltersPane/FiltersPane.stories.tsx +287 -287
  405. package/src/components/FiltersPane/FiltersPane.styles.ts +92 -92
  406. package/src/components/FiltersPane/FiltersPane.tsx +162 -162
  407. package/src/components/FiltersPane/components/Filter/Filter.tsx +114 -114
  408. package/src/components/FiltersPane/components/Filter/index.ts +1 -1
  409. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.styles.ts +61 -61
  410. package/src/components/FiltersPane/components/FilterInterval/FilterInterval.tsx +154 -154
  411. package/src/components/FiltersPane/components/FilterInterval/index.ts +2 -2
  412. package/src/components/FiltersPane/components/FilterMultiSelect/FilterMultiSelect.tsx +10 -10
  413. package/src/components/FiltersPane/components/FilterMultiSelect/index.ts +1 -1
  414. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.styles.ts +141 -141
  415. package/src/components/FiltersPane/components/FilterSelect/FilterSelect.tsx +361 -361
  416. package/src/components/FiltersPane/components/FilterSelect/index.ts +2 -2
  417. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.styles.tsx +15 -15
  418. package/src/components/FiltersPane/components/FilterValueView/FilterValueView.tsx +166 -166
  419. package/src/components/FiltersPane/components/FilterValueView/index.tsx +2 -2
  420. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.styles.ts +68 -68
  421. package/src/components/FiltersPane/components/FilterWithDates/FilterWithDates.tsx +210 -210
  422. package/src/components/FiltersPane/components/FilterWithDates/index.ts +2 -2
  423. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.styles.ts +21 -21
  424. package/src/components/FiltersPane/components/FilterWithPeriod/FilterWithPeriod.tsx +177 -177
  425. package/src/components/FiltersPane/components/FilterWithPeriod/index.ts +2 -2
  426. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.styles.ts +95 -95
  427. package/src/components/FiltersPane/components/FilterWrapper/FilterWrapper.tsx +130 -130
  428. package/src/components/FiltersPane/components/FilterWrapper/helpers.ts +14 -14
  429. package/src/components/FiltersPane/components/FilterWrapper/index.ts +2 -2
  430. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.styles.ts +123 -123
  431. package/src/components/FiltersPane/components/FiltersPaneSearch/FiltersPaneSearch.tsx +165 -165
  432. package/src/components/FiltersPane/components/FiltersPaneSearch/index.ts +2 -2
  433. package/src/components/FiltersPane/components/index.ts +9 -9
  434. package/src/components/FiltersPane/constants.ts +137 -137
  435. package/src/components/FiltersPane/helpers.ts +26 -26
  436. package/src/components/FiltersPane/index.ts +5 -5
  437. package/src/components/FiltersPane/types.ts +156 -156
  438. package/src/components/Flag/Flag.stories.tsx +29 -29
  439. package/src/components/Flag/Flag.styles.ts +17 -17
  440. package/src/components/Flag/Flag.tsx +26 -26
  441. package/src/components/Flag/augment.d.ts +1 -1
  442. package/src/components/Flag/index.ts +2 -2
  443. package/src/components/FlexibleTable/FlexibleTable.stories.tsx +268 -268
  444. package/src/components/FlexibleTable/FlexibleTable.styles.ts +111 -111
  445. package/src/components/FlexibleTable/FlexibleTable.tsx +272 -272
  446. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.styles.ts +38 -38
  447. package/src/components/FlexibleTable/components/FlexibleTableCell/FlexibleTableCell.tsx +85 -85
  448. package/src/components/FlexibleTable/components/FlexibleTableCell/index.ts +2 -2
  449. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.styles.ts +25 -25
  450. package/src/components/FlexibleTable/components/FlexibleTableRow/FlexibleTableRow.tsx +179 -179
  451. package/src/components/FlexibleTable/components/FlexibleTableRow/index.ts +2 -2
  452. package/src/components/FlexibleTable/components/index.ts +2 -2
  453. package/src/components/FlexibleTable/constants.ts +1 -1
  454. package/src/components/FlexibleTable/helpers.ts +13 -13
  455. package/src/components/FlexibleTable/index.ts +4 -4
  456. package/src/components/FlexibleTable/types.ts +53 -53
  457. package/src/components/Icon/Icon.stories.tsx +86 -86
  458. package/src/components/Icon/Icon.styles.ts +10 -10
  459. package/src/components/Icon/Icon.tsx +26 -26
  460. package/src/components/Icon/complexIcons/augment.d.ts +1 -1
  461. package/src/components/Icon/complexIcons/avatarGreen.svg +57 -57
  462. package/src/components/Icon/complexIcons/fileExcel.svg +10 -10
  463. package/src/components/Icon/complexIcons/fileImage.svg +12 -12
  464. package/src/components/Icon/complexIcons/fileOther.svg +9 -9
  465. package/src/components/Icon/complexIcons/filePdf.svg +10 -10
  466. package/src/components/Icon/complexIcons/fileWord.svg +10 -10
  467. package/src/components/Icon/complexIcons/fileXml.svg +12 -12
  468. package/src/components/Icon/complexIcons/fileZip.svg +15 -15
  469. package/src/components/Icon/complexIcons/icons.ts +19 -19
  470. package/src/components/Icon/complexIcons/index.ts +1 -1
  471. package/src/components/Icon/components/ComplexIconBoilerplate/ComplexIconBoilerplate.tsx +16 -16
  472. package/src/components/Icon/components/ComplexIconBoilerplate/index.ts +1 -1
  473. package/src/components/Icon/components/IconBolerplate/IconBoilerplate.tsx +43 -43
  474. package/src/components/Icon/components/IconBolerplate/index.ts +1 -1
  475. package/src/components/Icon/components/index.ts +2 -2
  476. package/src/components/Icon/helpers.tsx +9 -9
  477. package/src/components/Icon/icons-list.ts +856 -856
  478. package/src/components/Icon/index.ts +5 -5
  479. package/src/components/Icon/snippet.tsx +6 -6
  480. package/src/components/Icon/types.ts +18 -18
  481. package/src/components/IconButton/IconButton.stories.tsx +32 -32
  482. package/src/components/IconButton/IconButton.styles.ts +84 -84
  483. package/src/components/IconButton/IconButton.tsx +74 -74
  484. package/src/components/IconButton/constants.ts +3 -3
  485. package/src/components/IconButton/index.ts +3 -3
  486. package/src/components/IconButton/types.ts +11 -11
  487. package/src/components/IncrementInput/IncrementInput.stories.tsx +31 -31
  488. package/src/components/IncrementInput/IncrementInput.styles.ts +78 -78
  489. package/src/components/IncrementInput/IncrementInput.tsx +105 -105
  490. package/src/components/IncrementInput/index.ts +2 -2
  491. package/src/components/Input/Input.stories.tsx +91 -91
  492. package/src/components/Input/Input.styles.ts +308 -308
  493. package/src/components/Input/Input.tsx +296 -296
  494. package/src/components/Input/constants.ts +1 -1
  495. package/src/components/Input/index.ts +3 -3
  496. package/src/components/Input/types.ts +32 -32
  497. package/src/components/List/List.stories.tsx +90 -70
  498. package/src/components/List/List.styles.ts +24 -52
  499. package/src/components/List/List.tsx +58 -33
  500. package/src/components/List/components/ListItem/ListItem.styles.ts +52 -48
  501. package/src/components/List/components/ListItem/ListItem.tsx +68 -57
  502. package/src/components/List/components/ListItem/index.ts +2 -2
  503. package/src/components/List/components/index.ts +1 -1
  504. package/src/components/List/index.ts +3 -3
  505. package/src/components/Modal/Modal.stories.tsx +105 -105
  506. package/src/components/Modal/Modal.styles.ts +318 -318
  507. package/src/components/Modal/Modal.tsx +203 -203
  508. package/src/components/Modal/index.ts +3 -3
  509. package/src/components/Modal/types.ts +17 -17
  510. package/src/components/MoreMenu/MoreMenu.stories.tsx +46 -46
  511. package/src/components/MoreMenu/MoreMenu.styles.ts +69 -69
  512. package/src/components/MoreMenu/MoreMenu.tsx +93 -93
  513. package/src/components/MoreMenu/index.ts +2 -2
  514. package/src/components/MultiSelect/MultiSelect.stories.tsx +46 -46
  515. package/src/components/MultiSelect/MultiSelect.styles.ts +59 -59
  516. package/src/components/MultiSelect/MultiSelect.tsx +106 -106
  517. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.styles.ts +73 -73
  518. package/src/components/MultiSelect/components/MultiSelectInput/MultiSelectInput.tsx +53 -53
  519. package/src/components/MultiSelect/components/MultiSelectInput/index.ts +2 -2
  520. package/src/components/MultiSelect/components/index.ts +1 -1
  521. package/src/components/MultiSelect/index.ts +4 -4
  522. package/src/components/MultiSelect/types.ts +1 -1
  523. package/src/components/MultiSelectList/MultiSelectList.styles.ts +136 -136
  524. package/src/components/MultiSelectList/MultiSelectList.tsx +461 -461
  525. package/src/components/MultiSelectList/constants.ts +21 -21
  526. package/src/components/MultiSelectList/helpers.ts +11 -11
  527. package/src/components/MultiSelectList/index.ts +3 -3
  528. package/src/components/MultiSelectList/types.ts +15 -15
  529. package/src/components/NewMoreMenu/NewMoreMenu.stories.tsx +74 -74
  530. package/src/components/NewMoreMenu/NewMoreMenu.styles.ts +39 -39
  531. package/src/components/NewMoreMenu/NewMoreMenu.tsx +79 -79
  532. package/src/components/NewMoreMenu/index.ts +2 -2
  533. package/src/components/Notification/Notification.stories.tsx +46 -46
  534. package/src/components/Notification/Notification.styles.ts +55 -55
  535. package/src/components/Notification/Notification.tsx +69 -69
  536. package/src/components/Notification/index.ts +3 -3
  537. package/src/components/Notification/types.ts +1 -1
  538. package/src/components/NumberInput/NumberInput.stories.tsx +35 -35
  539. package/src/components/NumberInput/NumberInput.tsx +137 -137
  540. package/src/components/NumberInput/helpers.ts +84 -84
  541. package/src/components/NumberInput/index.ts +1 -1
  542. package/src/components/PhoneInput/PhoneInput.stories.tsx +70 -70
  543. package/src/components/PhoneInput/PhoneInput.styles.ts +89 -89
  544. package/src/components/PhoneInput/PhoneInput.tsx +214 -214
  545. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.stories.tsx +21 -21
  546. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.styles.ts +103 -103
  547. package/src/components/PhoneInput/components/PhoneInputCountryList/PhoneInputCountryList.tsx +155 -155
  548. package/src/components/PhoneInput/components/PhoneInputCountryList/index.ts +2 -2
  549. package/src/components/PhoneInput/components/index.ts +1 -1
  550. package/src/components/PhoneInput/constants.ts +3 -3
  551. package/src/components/PhoneInput/index.ts +4 -4
  552. package/src/components/PhoneInput/types.ts +16 -16
  553. package/src/components/RadioButton/RadioButton.stories.tsx +46 -46
  554. package/src/components/RadioButton/RadioButton.styles.ts +37 -37
  555. package/src/components/RadioButton/RadioButton.tsx +57 -57
  556. package/src/components/RadioButton/index.ts +2 -2
  557. package/src/components/ScrollIntoViewIfNeeded/ScrollIntoViewIfNeeded.ts +54 -54
  558. package/src/components/ScrollIntoViewIfNeeded/constants.ts +12 -12
  559. package/src/components/ScrollIntoViewIfNeeded/index.ts +1 -1
  560. package/src/components/SearchInput/SearchInput.stories.tsx +23 -23
  561. package/src/components/SearchInput/SearchInput.styles.ts +50 -50
  562. package/src/components/SearchInput/SearchInput.tsx +56 -56
  563. package/src/components/SearchInput/index.ts +2 -2
  564. package/src/components/Select/CustomSelect.stories.tsx +253 -253
  565. package/src/components/Select/MultiSelect.stories.tsx +240 -240
  566. package/src/components/Select/Select.stories.tsx +235 -235
  567. package/src/components/Select/Select.styles.ts +147 -147
  568. package/src/components/Select/Select.tsx +653 -653
  569. package/src/components/Select/components/SelectList/SelectList.styles.ts +73 -73
  570. package/src/components/Select/components/SelectList/SelectList.tsx +152 -152
  571. package/src/components/Select/components/SelectList/index.ts +2 -2
  572. package/src/components/Select/components/SelectListItem/SelectListItem.styles.ts +14 -14
  573. package/src/components/Select/components/SelectListItem/SelectListItem.tsx +76 -76
  574. package/src/components/Select/components/SelectListItem/index.ts +1 -1
  575. package/src/components/Select/components/index.ts +2 -2
  576. package/src/components/Select/constants.ts +2 -2
  577. package/src/components/Select/helpers.ts +20 -20
  578. package/src/components/Select/index.ts +4 -4
  579. package/src/components/Select/types.ts +1 -1
  580. package/src/components/Selector/Selector.stories.tsx +62 -62
  581. package/src/components/Selector/Selector.styles.ts +165 -165
  582. package/src/components/Selector/Selector.tsx +115 -115
  583. package/src/components/Selector/index.ts +2 -2
  584. package/src/components/Selector/types.ts +12 -12
  585. package/src/components/Skeleton/Skeleton.stories.tsx +19 -19
  586. package/src/components/Skeleton/Skeleton.styles.ts +46 -46
  587. package/src/components/Skeleton/Skeleton.tsx +12 -12
  588. package/src/components/Skeleton/index.ts +2 -2
  589. package/src/components/SmartInput/SmartInput.stories.tsx +51 -51
  590. package/src/components/SmartInput/SmartInput.tsx +134 -134
  591. package/src/components/SmartInput/constants.ts +84 -84
  592. package/src/components/SmartInput/helpers.ts +13 -13
  593. package/src/components/SmartInput/index.ts +2 -2
  594. package/src/components/SmartInput/types.ts +11 -11
  595. package/src/components/Status/Status.stories.tsx +73 -73
  596. package/src/components/Status/Status.styles.ts +143 -143
  597. package/src/components/Status/Status.tsx +49 -49
  598. package/src/components/Status/constants.ts +11 -11
  599. package/src/components/Status/index.ts +3 -3
  600. package/src/components/Status/types.ts +5 -5
  601. package/src/components/Switch/Switch.stories.tsx +40 -40
  602. package/src/components/Switch/Switch.styles.ts +75 -75
  603. package/src/components/Switch/Switch.tsx +75 -75
  604. package/src/components/Switch/index.ts +3 -3
  605. package/src/components/Switch/types.ts +4 -4
  606. package/src/components/TextArea/TextArea.stories.tsx +37 -37
  607. package/src/components/TextArea/TextArea.styles.ts +177 -177
  608. package/src/components/TextArea/TextArea.tsx +183 -183
  609. package/src/components/TextArea/index.ts +3 -3
  610. package/src/components/TextArea/types.ts +6 -6
  611. package/src/components/TextButton/TextButton.stories.tsx +47 -47
  612. package/src/components/TextButton/TextButton.styles.ts +130 -130
  613. package/src/components/TextButton/TextButton.tsx +110 -110
  614. package/src/components/TextButton/constants.ts +3 -3
  615. package/src/components/TextButton/index.ts +3 -3
  616. package/src/components/TextButton/types.ts +11 -11
  617. package/src/components/TextWithInfo/TextWithInfo.stories.tsx +53 -53
  618. package/src/components/TextWithInfo/TextWithInfo.styles.ts +59 -59
  619. package/src/components/TextWithInfo/TextWithInfo.tsx +62 -62
  620. package/src/components/TextWithInfo/index.ts +2 -2
  621. package/src/components/TextWithTooltip/TextWithTooltip.stories.tsx +58 -58
  622. package/src/components/TextWithTooltip/TextWithTooltip.styles.ts +21 -21
  623. package/src/components/TextWithTooltip/TextWithTooltip.tsx +155 -155
  624. package/src/components/TextWithTooltip/index.ts +2 -2
  625. package/src/components/ThemedPreloader/ThemedPreloader.stories.tsx +41 -41
  626. package/src/components/ThemedPreloader/ThemedPreloader.styles.ts +26 -26
  627. package/src/components/ThemedPreloader/ThemedPreloader.tsx +54 -54
  628. package/src/components/ThemedPreloader/components/DefaultPreloader/DefaultPreloader.tsx +29 -29
  629. package/src/components/ThemedPreloader/components/DefaultPreloader/index.ts +1 -1
  630. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.styles.ts +55 -55
  631. package/src/components/ThemedPreloader/components/DotsPreloader/DotsPreloader.tsx +15 -15
  632. package/src/components/ThemedPreloader/components/DotsPreloader/index.ts +2 -2
  633. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.styles.ts +11 -11
  634. package/src/components/ThemedPreloader/components/SvgPreloader/SvgPreloader.tsx +24 -24
  635. package/src/components/ThemedPreloader/components/SvgPreloader/index.ts +2 -2
  636. package/src/components/ThemedPreloader/components/index.ts +3 -3
  637. package/src/components/ThemedPreloader/constants.ts +1 -1
  638. package/src/components/ThemedPreloader/index.ts +4 -4
  639. package/src/components/ThemedPreloader/types.ts +3 -3
  640. package/src/components/Toaster/Toaster.stories.tsx +30 -30
  641. package/src/components/Toaster/Toaster.styles.ts +60 -60
  642. package/src/components/Toaster/Toaster.tsx +109 -109
  643. package/src/components/Toaster/constants.ts +1 -1
  644. package/src/components/Toaster/index.ts +3 -3
  645. package/src/components/Toaster/types.ts +1 -1
  646. package/src/components/Tooltip/Tooltip.stories.tsx +19 -19
  647. package/src/components/Tooltip/Tooltip.styles.ts +49 -49
  648. package/src/components/Tooltip/Tooltip.tsx +35 -35
  649. package/src/components/Tooltip/index.ts +3 -3
  650. package/src/components/Tooltip/types.ts +1 -1
  651. package/src/components/WithPopup/WithPopup.stories.tsx +99 -99
  652. package/src/components/WithPopup/WithPopup.styles.ts +40 -40
  653. package/src/components/WithPopup/WithPopup.tsx +166 -166
  654. package/src/components/WithPopup/constants.ts +3 -3
  655. package/src/components/WithPopup/index.ts +2 -2
  656. package/src/components/WithPopup/types.ts +17 -17
  657. package/src/components/index.ts +45 -45
  658. package/src/constants/index.ts +2 -2
  659. package/src/constants/mime-types.ts +77 -77
  660. package/src/constants/phone-info.ts +2147 -2147
  661. package/src/helpers/index.ts +3 -3
  662. package/src/helpers/misc.ts +158 -158
  663. package/src/helpers/phone.ts +91 -91
  664. package/src/helpers/popper-helpers.ts +17 -17
  665. package/src/hooks/index.ts +7 -7
  666. package/src/hooks/use-did-mount-effect.ts +18 -18
  667. package/src/hooks/use-dropdown.ts +84 -84
  668. package/src/hooks/use-is-mounted.ts +15 -15
  669. package/src/hooks/use-merged-refs.ts +4 -4
  670. package/src/hooks/use-mixed-styles.ts +14 -14
  671. package/src/hooks/use-on-click-outside.ts +77 -77
  672. package/src/hooks/use-tweak-styles.ts +57 -57
  673. package/src/index.ts +6 -6
  674. package/src/theme/Provider.tsx +21 -21
  675. package/src/theme/common.ts +164 -164
  676. package/src/theme/helpers.ts +76 -76
  677. package/src/theme/index.ts +4 -4
  678. package/src/theme/types.ts +157 -157
  679. package/src/types.ts +54 -54
  680. package/src/vite-env.d.ts +1 -1
@@ -1,653 +1,653 @@
1
- import {
2
- useCallback,
3
- useEffect,
4
- useMemo,
5
- useRef,
6
- useState,
7
- type ChangeEvent,
8
- type CSSProperties,
9
- type FocusEvent,
10
- type FormEvent,
11
- type KeyboardEvent,
12
- type MouseEvent,
13
- type ReactNode,
14
- type SyntheticEvent,
15
- } from 'react';
16
- import { Portal } from 'react-overlays';
17
- import clsx from 'clsx';
18
- import { debounce } from 'ts-debounce';
19
- import {
20
- createFilter,
21
- getTestId,
22
- isEmpty,
23
- isNotEmpty,
24
- isReactNodeNotEmpty,
25
- isStringNotEmpty,
26
- } from '@true-engineering/true-react-platform-helpers';
27
- import { hasExactParent } from '../../helpers';
28
- import { useDropdown, useIsMounted, useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';
29
- import { IDropdownWithPopperOptions, type ICommonProps } from '../../types';
30
- import { renderIcon, type IIcon } from '../Icon';
31
- import { Input, type IInputProps } from '../Input';
32
- import { SearchInput, type ISearchInputProps } from '../SearchInput';
33
- import { SelectList } from './components';
34
- import { ALL_OPTION_INDEX, DEFAULT_OPTION_INDEX } from './constants';
35
- import {
36
- defaultCompareFunction,
37
- defaultConvertFunction,
38
- defaultIsOptionDisabled,
39
- getDefaultConvertToIdFunction,
40
- } from './helpers';
41
- import { IMultipleSelectValue } from './types';
42
- import { getInputStyles, searchInputStyles, useStyles, type ISelectStyles } from './Select.styles';
43
-
44
- export interface ISelectProps<Value>
45
- extends Omit<IInputProps, 'value' | 'onChange' | 'onBlur' | 'type' | 'isActive' | 'tweakStyles'>,
46
- ICommonProps<ISelectStyles> {
47
- header?: ReactNode;
48
- footer?: ReactNode;
49
- defaultOptionLabel?: ReactNode;
50
- allOptionsLabel?: string;
51
- noMatchesLabel?: string;
52
- loadingLabel?: ReactNode;
53
- /** @default 'normal' */
54
- optionsMode?: 'search' | 'dynamic' | 'normal';
55
- /** @default 400 */
56
- debounceTime?: number;
57
- /** @default 0 */
58
- minSymbolsCountToOpenList?: number;
59
- dropdownOptions?: IDropdownWithPopperOptions;
60
- /** @default 'chevron-down' */
61
- dropdownIcon?: IIcon;
62
- options: Value[] | Readonly<Value[]>;
63
- value: Value | undefined;
64
- /** @default true */
65
- shouldScrollToList?: boolean;
66
- isMultiSelect?: false;
67
- searchInput?: { shouldRenderInList: true } & Pick<ISearchInputProps, 'placeholder'>;
68
- isOptionDisabled?: (option: Value) => boolean;
69
- onChange: (
70
- value: Value | undefined,
71
- event:
72
- | MouseEvent<HTMLElement>
73
- | KeyboardEvent
74
- | ChangeEvent<HTMLElement>
75
- | FormEvent<HTMLElement>,
76
- ) => void; // подумать как возвращать индекс
77
- onBlur?: (event: Event | SyntheticEvent) => void;
78
- onType?: (value: string) => Promise<void>;
79
- optionsFilter?: (options: Value[], query: string) => Value[];
80
- onOpen?: () => void;
81
- compareValuesOnChange?: (v1?: Value, v2?: Value) => boolean;
82
- /** @description Функция должна быть мемоизирована с целью избежания ререндера */
83
- convertValueToString?: (value: Value) => string | undefined;
84
- /** @description Функция должна быть мемоизирована с целью избежания ререндера */
85
- convertValueToReactNode?: (value: Value, isDisabled: boolean) => ReactNode;
86
- /** @description Функция должна быть мемоизирована с целью избежания ререндера */
87
- convertValueToId?: (value: Value) => string | undefined;
88
- }
89
-
90
- export interface IMultipleSelectProps<Value>
91
- extends Omit<
92
- ISelectProps<Value>,
93
- 'value' | 'onChange' | 'compareValuesOnChange' | 'isMultiSelect'
94
- > {
95
- isMultiSelect: true;
96
- value: IMultipleSelectValue<Value> | undefined;
97
- onChange: (
98
- value: IMultipleSelectValue<Value> | undefined,
99
- event:
100
- | MouseEvent<HTMLElement>
101
- | KeyboardEvent
102
- | ChangeEvent<HTMLElement>
103
- | FormEvent<HTMLElement>,
104
- ) => void;
105
- compareValuesOnChange?: (
106
- v1?: IMultipleSelectValue<Value>,
107
- v2?: IMultipleSelectValue<Value>,
108
- ) => boolean;
109
- }
110
-
111
- export function Select<Value>(
112
- props: ISelectProps<Value> | IMultipleSelectProps<Value>,
113
- ): JSX.Element {
114
- const {
115
- options,
116
- isMultiSelect,
117
- value,
118
- header,
119
- footer,
120
- defaultOptionLabel,
121
- allOptionsLabel,
122
- debounceTime = 400,
123
- optionsMode = 'normal',
124
- noMatchesLabel,
125
- loadingLabel,
126
- tweakStyles,
127
- testId,
128
- isReadonly,
129
- isDisabled,
130
- dropdownOptions,
131
- minSymbolsCountToOpenList = 0,
132
- dropdownIcon = 'chevron-down',
133
- shouldScrollToList = true,
134
- searchInput,
135
- iconType,
136
- onChange,
137
- onFocus,
138
- onBlur,
139
- onType,
140
- onOpen,
141
- isOptionDisabled = defaultIsOptionDisabled,
142
- compareValuesOnChange = defaultCompareFunction,
143
- convertValueToString = defaultConvertFunction,
144
- convertValueToId,
145
- convertValueToReactNode,
146
- optionsFilter,
147
- ...inputProps
148
- } = props;
149
- const classes = useStyles({ theme: tweakStyles });
150
-
151
- const { shouldRenderInList: shouldRenderSearchInputInList = false, ...searchInputProps } =
152
- searchInput ?? {};
153
- const hasSearchInputInList = optionsMode !== 'normal' && shouldRenderSearchInputInList;
154
- const hasReadonlyInput = isReadonly || optionsMode === 'normal' || shouldRenderSearchInputInList;
155
-
156
- const tweakInputStyles = useTweakStyles({
157
- innerStyles: getInputStyles({ hasReadonlyInput, isMultiSelect }),
158
- tweakStyles,
159
- className: 'tweakInput',
160
- currentComponentName: 'Select',
161
- });
162
-
163
- const tweakSearchInputStyles = useTweakStyles({
164
- innerStyles: searchInputStyles,
165
- tweakStyles,
166
- className: 'tweakSearchInput',
167
- currentComponentName: 'Select',
168
- });
169
-
170
- const tweakSelectListStyles = useTweakStyles({
171
- tweakStyles,
172
- className: 'tweakSelectList',
173
- currentComponentName: 'Select',
174
- });
175
-
176
- const isMounted = useIsMounted();
177
- const [isListOpen, setIsListOpen] = useState(false);
178
- const [areOptionsLoading, setAreOptionsLoading] = useState(false);
179
- const hasDefaultOption = isReactNodeNotEmpty(defaultOptionLabel);
180
-
181
- const [focusedListCellIndex, setFocusedListCellIndex] = useState(DEFAULT_OPTION_INDEX);
182
- const [searchValue, setSearchValue] = useState('');
183
- // если мы ввели что то в строку поиска - то этот булеан будет отключаться
184
- // вынесен отдельно, из-за проблем с дебаунсом при динамич. опциях
185
- const [shouldShowDefaultOption, setShouldShowDefaultOption] = useState(true);
186
-
187
- const root = useRef<HTMLDivElement>(null);
188
- const inputWrapper = useRef<HTMLDivElement>(null);
189
- const list = useRef<HTMLDivElement>(null);
190
- const input = useRef<HTMLInputElement>(null); // TODO ref снаружи?
191
-
192
- const strValue = isMultiSelect ? value?.[0] : value;
193
- const shouldShowAllOption =
194
- isMultiSelect && isStringNotEmpty(allOptionsLabel) && searchValue === '';
195
-
196
- const filteredOptions = useMemo(() => {
197
- if (optionsMode !== 'search') {
198
- return options;
199
- }
200
-
201
- const filter =
202
- optionsFilter ?? createFilter<Value>((option) => [convertValueToString(option) ?? '']);
203
-
204
- return filter(options as Value[], searchValue);
205
- }, [optionsFilter, options, convertValueToString, searchValue, optionsMode]);
206
-
207
- const availableOptions = useMemo(
208
- () => options.filter((option) => !isOptionDisabled(option)),
209
- [options, isOptionDisabled],
210
- );
211
-
212
- const areAllOptionsSelected = isMultiSelect && value?.length === availableOptions.length;
213
- const shouldShowMultiSelectCounter =
214
- isMultiSelect && isNotEmpty(value) && value.length > 1 && !areAllOptionsSelected;
215
-
216
- const optionsIndexesForNavigation = useMemo(() => {
217
- const result: number[] = [];
218
- if (shouldShowDefaultOption && hasDefaultOption) {
219
- result.push(DEFAULT_OPTION_INDEX);
220
- }
221
- if (shouldShowAllOption) {
222
- result.push(ALL_OPTION_INDEX);
223
- }
224
- return result.concat(
225
- filteredOptions.reduce((acc, cur, i) => {
226
- if (!isOptionDisabled(cur)) {
227
- acc.push(i);
228
- }
229
- return acc;
230
- }, [] as number[]),
231
- );
232
- }, [
233
- filteredOptions,
234
- hasDefaultOption,
235
- isOptionDisabled,
236
- shouldShowAllOption,
237
- shouldShowDefaultOption,
238
- ]);
239
-
240
- const stringValue = isNotEmpty(strValue) ? convertValueToString(strValue) : undefined;
241
- // Для мультиселекта пытаемся показать "Все опции" если выбраны все опции
242
- const showedStringValue =
243
- areAllOptionsSelected && isNotEmpty(allOptionsLabel) ? allOptionsLabel : stringValue;
244
-
245
- const convertToId = useCallback(
246
- (v: Value) => (convertValueToId ?? getDefaultConvertToIdFunction(convertValueToString))(v),
247
- [convertValueToId, convertValueToString],
248
- );
249
-
250
- const getDropdownOffset = () => {
251
- if (isEmpty(input.current) || inputProps.errorPosition === 'top') {
252
- return 0;
253
- }
254
-
255
- // Высота элемента inputWrapper у компонента Input
256
- return input.current.parentElement?.offsetHeight ?? 0;
257
- };
258
-
259
- const closeList = useCallback(() => {
260
- setIsListOpen(false);
261
- setSearchValue('');
262
- setShouldShowDefaultOption(true);
263
-
264
- if (!dropdownOptions?.shouldUsePopper) {
265
- root.current?.style.removeProperty('--dropdown-offset');
266
- }
267
- }, [dropdownOptions?.shouldUsePopper]);
268
-
269
- const handleListClose = useCallback(
270
- (event: Event | SyntheticEvent) => {
271
- closeList();
272
- onBlur?.(event);
273
- },
274
- [closeList, onBlur],
275
- );
276
-
277
- const handleListOpen = () => {
278
- if (!isListOpen) {
279
- setIsListOpen(true);
280
-
281
- if (!dropdownOptions?.shouldUsePopper) {
282
- root.current?.style.setProperty('--dropdown-offset', `${getDropdownOffset()}px`);
283
- }
284
- }
285
- };
286
-
287
- const handleFocus = (event: FocusEvent<HTMLInputElement>) => {
288
- onFocus?.(event);
289
- handleListOpen();
290
- };
291
-
292
- const handleOnClick = () => {
293
- handleListOpen();
294
- };
295
-
296
- const handleBlur = (event: FocusEvent<HTMLInputElement>) => {
297
- // Когда что-то блокирует открытие листа, но блур все равно должен сработать
298
- // например minSymbolsCount
299
- if (isListOpen && !isOpen) {
300
- handleListClose(event);
301
- return;
302
- }
303
-
304
- if (
305
- !isNotEmpty(event.relatedTarget) ||
306
- !isNotEmpty(list.current) ||
307
- !isNotEmpty(inputWrapper.current)
308
- ) {
309
- return;
310
- }
311
-
312
- const isActionInsideSelect =
313
- hasExactParent(event.relatedTarget, list.current) ||
314
- hasExactParent(event.relatedTarget, inputWrapper.current);
315
-
316
- // Ничего не делаем, если клик был внутри селекта
317
- if (!isActionInsideSelect) {
318
- handleListClose(event);
319
- }
320
- };
321
-
322
- const handleChange = useCallback(
323
- (
324
- newValue: Value | IMultipleSelectValue<Value> | undefined,
325
- event:
326
- | MouseEvent<HTMLElement>
327
- | KeyboardEvent
328
- | ChangeEvent<HTMLElement>
329
- | FormEvent<HTMLElement>,
330
- ) => {
331
- // Тут беда с типами, сорри
332
- if (!compareValuesOnChange(value as never, newValue as never)) {
333
- onChange(newValue as (Value & IMultipleSelectValue<Value>) | undefined, event);
334
- }
335
- },
336
- [value, compareValuesOnChange, onChange],
337
- );
338
-
339
- const handleOptionSelect = useCallback(
340
- (index: number, event: MouseEvent<HTMLElement> | KeyboardEvent) => {
341
- handleChange(index === DEFAULT_OPTION_INDEX ? undefined : filteredOptions[index], event);
342
- handleListClose(event);
343
- input.current?.blur();
344
- },
345
- [handleChange, handleListClose, filteredOptions],
346
- );
347
-
348
- // MultiSelect
349
- const handleToggleOptionCheckbox = useCallback(
350
- (index: number, isSelected: boolean, event: ChangeEvent<HTMLElement> | KeyboardEvent) => {
351
- if (!isMultiSelect) {
352
- return;
353
- }
354
-
355
- // Если выбрана не дефолтная опция, которая сетит андеф
356
- if (index === DEFAULT_OPTION_INDEX || (index === ALL_OPTION_INDEX && !isSelected)) {
357
- handleChange(undefined, event);
358
- return;
359
- }
360
- if (index === ALL_OPTION_INDEX && isSelected) {
361
- handleChange(availableOptions as IMultipleSelectValue<Value>, event);
362
- return;
363
- }
364
- const option = filteredOptions[index];
365
- handleChange(
366
- isSelected
367
- ? // Добавляем
368
- ([...(value ?? []), option] as IMultipleSelectValue<Value>)
369
- : // Убираем
370
- value?.filter((o) => convertToId(o) !== convertToId(option)),
371
- event,
372
- );
373
- },
374
- [isMultiSelect, filteredOptions, handleChange, value, availableOptions, convertToId],
375
- );
376
-
377
- const handleOnType = useCallback(
378
- async (v: string) => {
379
- if (onType === undefined) {
380
- return;
381
- }
382
- if (isMounted()) {
383
- setAreOptionsLoading(true);
384
- }
385
- await onType(v);
386
- if (isMounted()) {
387
- setAreOptionsLoading(false);
388
- }
389
- if (optionsMode === 'dynamic') {
390
- setShouldShowDefaultOption(v === '');
391
- }
392
- },
393
- [isMounted, onType, optionsMode],
394
- );
395
-
396
- const debounceHandleOnType = useMemo(
397
- () => debounce(handleOnType, debounceTime, { isImmediate: debounceTime === 0 }),
398
- [handleOnType, debounceTime],
399
- );
400
-
401
- const handleInputChange = (v: string, event: FormEvent<HTMLElement>) => {
402
- if (onType !== undefined) {
403
- debounceHandleOnType(v);
404
- }
405
-
406
- if (optionsMode !== 'dynamic') {
407
- setShouldShowDefaultOption(v === '');
408
- }
409
-
410
- if (v === '' && !hasSearchInputInList) {
411
- handleChange(undefined, event);
412
- }
413
-
414
- setSearchValue(v);
415
- };
416
-
417
- const handleKeyDown = (event: KeyboardEvent) => {
418
- if (!isListOpen) {
419
- return;
420
- }
421
-
422
- event.stopPropagation();
423
- const curIndexInNavigation = optionsIndexesForNavigation.findIndex(
424
- (index) => index === focusedListCellIndex,
425
- );
426
-
427
- switch (event.code) {
428
- case 'Enter':
429
- case 'NumpadEnter': {
430
- let indexToSelect = focusedListCellIndex;
431
-
432
- // если осталась одна опция в списке,
433
- // то выбираем ее нажатием на enter
434
- if (indexToSelect === DEFAULT_OPTION_INDEX && filteredOptions.length === 1) {
435
- indexToSelect = 0;
436
- }
437
-
438
- if (isMultiSelect) {
439
- let isThisValueAlreadySelected: boolean | undefined;
440
- if (indexToSelect === ALL_OPTION_INDEX) {
441
- isThisValueAlreadySelected = areAllOptionsSelected;
442
- } else {
443
- // подумать над концептом реального фокуса на опциях, а не вот эти вот focusedCell
444
- const option = filteredOptions[indexToSelect];
445
- const valueIdToSelect = convertToId(option);
446
- isThisValueAlreadySelected =
447
- value?.some((opt) => convertToId(opt) === valueIdToSelect) ?? false;
448
- }
449
- handleToggleOptionCheckbox(indexToSelect, !isThisValueAlreadySelected, event);
450
- } else {
451
- handleOptionSelect(indexToSelect, event);
452
- }
453
- break;
454
- }
455
-
456
- case 'ArrowDown': {
457
- // чтобы убрать перемещение курсора в инпуте
458
- event.preventDefault();
459
- const targetIndexInNavigation =
460
- (curIndexInNavigation + 1) % optionsIndexesForNavigation.length;
461
- setFocusedListCellIndex(optionsIndexesForNavigation[targetIndexInNavigation]);
462
- break;
463
- }
464
-
465
- case 'ArrowUp': {
466
- // чтобы убрать перемещение курсора в инпуте
467
- event.preventDefault();
468
- const targetIndexInNavigation =
469
- (curIndexInNavigation - 1 + optionsIndexesForNavigation.length) %
470
- optionsIndexesForNavigation.length;
471
- setFocusedListCellIndex(optionsIndexesForNavigation[targetIndexInNavigation]);
472
- break;
473
- }
474
- }
475
- };
476
-
477
- const onArrowClick = () => {
478
- if (isListOpen) {
479
- input.current?.blur();
480
- closeList();
481
- } else {
482
- input.current?.focus();
483
- }
484
- };
485
-
486
- useOnClickOutsideWithRef(list, handleListClose, inputWrapper);
487
-
488
- const hasEnoughSymbolsToSearch = searchValue.trim().length >= minSymbolsCountToOpenList;
489
-
490
- const isOpen =
491
- // Пользователь пытается открыть лист
492
- isListOpen &&
493
- // Нам есть что показать:
494
- // Есть опции
495
- (filteredOptions.length > 0 ||
496
- // Дефолтная опция
497
- (defaultOptionLabel !== undefined && !hasEnoughSymbolsToSearch) ||
498
- // Текст "Загрузка..."
499
- inputProps.isLoading ||
500
- // Текст "Совпадений не найдено"
501
- noMatchesLabel !== undefined ||
502
- // У нас есть инпут с поиском внутри листа
503
- hasSearchInputInList) &&
504
- // Последняя проверка на случай, если мы че то ищем в опциях
505
- (optionsMode === 'normal' || hasEnoughSymbolsToSearch);
506
-
507
- // Эти значения ставятся в false по дефолту также в useDropdown
508
- const {
509
- shouldUsePopper = false,
510
- shouldRenderInBody = false,
511
- shouldHideOnScroll = false,
512
- } = dropdownOptions ?? {};
513
-
514
- const popperData = useDropdown({
515
- isOpen,
516
- onDropdownClose: handleListClose,
517
- referenceElement: input.current?.parentElement ?? inputWrapper.current,
518
- dropdownElement: list.current,
519
- options: dropdownOptions,
520
- dependenciesForPositionUpdating: [inputProps.isLoading, filteredOptions.length],
521
- });
522
-
523
- useEffect(() => {
524
- const focusedCellIndex = isNotEmpty(strValue)
525
- ? optionsIndexesForNavigation.find((index) => {
526
- const option = filteredOptions[index];
527
- return isNotEmpty(option) && convertToId(option) === convertToId(strValue);
528
- })
529
- : undefined;
530
-
531
- setFocusedListCellIndex(focusedCellIndex ?? optionsIndexesForNavigation[0]);
532
- }, [strValue, filteredOptions, optionsIndexesForNavigation, convertToId]);
533
-
534
- useEffect(() => {
535
- if (isOpen) {
536
- onOpen?.();
537
- }
538
- }, [isOpen]);
539
-
540
- const searchInputEl = hasSearchInputInList && (
541
- <SearchInput
542
- value={searchValue}
543
- onChange={handleInputChange}
544
- tweakStyles={tweakSearchInputStyles}
545
- placeholder="Поиск"
546
- {...searchInputProps}
547
- />
548
- );
549
-
550
- // Т.к. используется для проверки на пустой элемент `isReactNodeNotEmpty` внутри `SelectList`, то
551
- // он пропускает React.Fragment
552
- const customHeader = (isReactNodeNotEmpty(searchInputEl) || isReactNodeNotEmpty(header)) && (
553
- <>
554
- {searchInputEl}
555
- {header}
556
- </>
557
- );
558
-
559
- const listEl = (
560
- <div
561
- className={clsx(classes.listWrapper, {
562
- [classes.withoutPopper]: !shouldUsePopper,
563
- [classes.listWrapperInBody]: shouldRenderInBody,
564
- })}
565
- ref={list}
566
- style={popperData?.styles.popper as CSSProperties}
567
- tabIndex={0}
568
- onBlur={handleBlur} // обработка для Tab из списка
569
- {...popperData?.attributes.popper}
570
- >
571
- {isOpen && (
572
- <SelectList
573
- options={filteredOptions}
574
- defaultOptionLabel={hasDefaultOption && shouldShowDefaultOption && defaultOptionLabel}
575
- allOptionsLabel={shouldShowAllOption && allOptionsLabel}
576
- areAllOptionsSelected={areAllOptionsSelected}
577
- customListHeader={customHeader}
578
- customListFooter={footer}
579
- noMatchesLabel={noMatchesLabel}
580
- focusedIndex={focusedListCellIndex}
581
- activeValue={value}
582
- isLoading={inputProps.isLoading}
583
- loadingLabel={loadingLabel}
584
- tweakStyles={tweakSelectListStyles}
585
- testId={getTestId(testId, 'list')}
586
- isMultiSelect={isMultiSelect}
587
- // скролл не работает с включеным поппером
588
- shouldScrollToList={shouldScrollToList && !shouldUsePopper && !shouldHideOnScroll}
589
- isOptionDisabled={isOptionDisabled}
590
- convertValueToString={convertValueToString}
591
- convertValueToReactNode={convertValueToReactNode}
592
- convertValueToId={convertToId}
593
- onOptionSelect={handleOptionSelect}
594
- onToggleCheckbox={handleToggleOptionCheckbox}
595
- />
596
- )}
597
- </div>
598
- );
599
-
600
- const multiSelectCounterWithIcon =
601
- shouldShowMultiSelectCounter || isNotEmpty(iconType) ? (
602
- <>
603
- {shouldShowMultiSelectCounter && (
604
- <div className={classes.counter}>(+{value.length - 1})</div>
605
- )}
606
- {isNotEmpty(iconType) && <div className={classes.icon}>{renderIcon(iconType)}</div>}
607
- </>
608
- ) : undefined;
609
-
610
- return (
611
- <div className={classes.root} onKeyDown={handleKeyDown} ref={root}>
612
- <div
613
- className={clsx(classes.inputWrapper, isDisabled && classes.disabled)}
614
- onClick={isDisabled ? undefined : handleOnClick}
615
- ref={inputWrapper}
616
- >
617
- <Input
618
- value={
619
- searchValue !== '' && !shouldRenderSearchInputInList ? searchValue : showedStringValue
620
- }
621
- onChange={handleInputChange}
622
- isActive={isListOpen}
623
- isReadonly={hasReadonlyInput}
624
- onFocus={handleFocus}
625
- onBlur={handleBlur}
626
- isDisabled={isDisabled}
627
- ref={input}
628
- isLoading={areOptionsLoading}
629
- tweakStyles={tweakInputStyles}
630
- testId={testId}
631
- iconType={isMultiSelect ? multiSelectCounterWithIcon : iconType}
632
- {...inputProps}
633
- />
634
- <div
635
- onMouseDown={(event: MouseEvent) => {
636
- event.preventDefault();
637
- }}
638
- onClick={onArrowClick}
639
- className={clsx(classes.arrow, isOpen && classes.activeArrow)}
640
- >
641
- {renderIcon(dropdownIcon)}
642
- </div>
643
- </div>
644
- {shouldUsePopper ? (
645
- <Portal container={shouldRenderInBody ? document.body : inputWrapper.current}>
646
- <>{listEl}</>
647
- </Portal>
648
- ) : (
649
- <>{isOpen && listEl}</>
650
- )}
651
- </div>
652
- );
653
- }
1
+ import {
2
+ useCallback,
3
+ useEffect,
4
+ useMemo,
5
+ useRef,
6
+ useState,
7
+ ChangeEvent,
8
+ CSSProperties,
9
+ FocusEvent,
10
+ FormEvent,
11
+ KeyboardEvent,
12
+ MouseEvent,
13
+ ReactNode,
14
+ SyntheticEvent,
15
+ } from 'react';
16
+ import { Portal } from 'react-overlays';
17
+ import clsx from 'clsx';
18
+ import { debounce } from 'ts-debounce';
19
+ import {
20
+ createFilter,
21
+ getTestId,
22
+ isEmpty,
23
+ isNotEmpty,
24
+ isReactNodeNotEmpty,
25
+ isStringNotEmpty,
26
+ } from '@true-engineering/true-react-platform-helpers';
27
+ import { hasExactParent } from '../../helpers';
28
+ import { useDropdown, useIsMounted, useOnClickOutsideWithRef, useTweakStyles } from '../../hooks';
29
+ import { IDropdownWithPopperOptions, ICommonProps } from '../../types';
30
+ import { renderIcon, IIcon } from '../Icon';
31
+ import { Input, IInputProps } from '../Input';
32
+ import { SearchInput, ISearchInputProps } from '../SearchInput';
33
+ import { SelectList } from './components';
34
+ import { ALL_OPTION_INDEX, DEFAULT_OPTION_INDEX } from './constants';
35
+ import {
36
+ defaultCompareFunction,
37
+ defaultConvertFunction,
38
+ defaultIsOptionDisabled,
39
+ getDefaultConvertToIdFunction,
40
+ } from './helpers';
41
+ import { IMultipleSelectValue } from './types';
42
+ import { getInputStyles, searchInputStyles, useStyles, ISelectStyles } from './Select.styles';
43
+
44
+ export interface ISelectProps<Value>
45
+ extends Omit<IInputProps, 'value' | 'onChange' | 'onBlur' | 'type' | 'isActive' | 'tweakStyles'>,
46
+ ICommonProps<ISelectStyles> {
47
+ header?: ReactNode;
48
+ footer?: ReactNode;
49
+ defaultOptionLabel?: ReactNode;
50
+ allOptionsLabel?: string;
51
+ noMatchesLabel?: string;
52
+ loadingLabel?: ReactNode;
53
+ /** @default 'normal' */
54
+ optionsMode?: 'search' | 'dynamic' | 'normal';
55
+ /** @default 400 */
56
+ debounceTime?: number;
57
+ /** @default 0 */
58
+ minSymbolsCountToOpenList?: number;
59
+ dropdownOptions?: IDropdownWithPopperOptions;
60
+ /** @default 'chevron-down' */
61
+ dropdownIcon?: IIcon;
62
+ options: Value[] | Readonly<Value[]>;
63
+ value: Value | undefined;
64
+ /** @default true */
65
+ shouldScrollToList?: boolean;
66
+ isMultiSelect?: false;
67
+ searchInput?: { shouldRenderInList: true } & Pick<ISearchInputProps, 'placeholder'>;
68
+ isOptionDisabled?: (option: Value) => boolean;
69
+ onChange: (
70
+ value: Value | undefined,
71
+ event:
72
+ | MouseEvent<HTMLElement>
73
+ | KeyboardEvent
74
+ | ChangeEvent<HTMLElement>
75
+ | FormEvent<HTMLElement>,
76
+ ) => void; // подумать как возвращать индекс
77
+ onBlur?: (event: Event | SyntheticEvent) => void;
78
+ onType?: (value: string) => Promise<void>;
79
+ optionsFilter?: (options: Value[], query: string) => Value[];
80
+ onOpen?: () => void;
81
+ compareValuesOnChange?: (v1?: Value, v2?: Value) => boolean;
82
+ /** @description Функция должна быть мемоизирована с целью избежания ререндера */
83
+ convertValueToString?: (value: Value) => string | undefined;
84
+ /** @description Функция должна быть мемоизирована с целью избежания ререндера */
85
+ convertValueToReactNode?: (value: Value, isDisabled: boolean) => ReactNode;
86
+ /** @description Функция должна быть мемоизирована с целью избежания ререндера */
87
+ convertValueToId?: (value: Value) => string | undefined;
88
+ }
89
+
90
+ export interface IMultipleSelectProps<Value>
91
+ extends Omit<
92
+ ISelectProps<Value>,
93
+ 'value' | 'onChange' | 'compareValuesOnChange' | 'isMultiSelect'
94
+ > {
95
+ isMultiSelect: true;
96
+ value: IMultipleSelectValue<Value> | undefined;
97
+ onChange: (
98
+ value: IMultipleSelectValue<Value> | undefined,
99
+ event:
100
+ | MouseEvent<HTMLElement>
101
+ | KeyboardEvent
102
+ | ChangeEvent<HTMLElement>
103
+ | FormEvent<HTMLElement>,
104
+ ) => void;
105
+ compareValuesOnChange?: (
106
+ v1?: IMultipleSelectValue<Value>,
107
+ v2?: IMultipleSelectValue<Value>,
108
+ ) => boolean;
109
+ }
110
+
111
+ export function Select<Value>(
112
+ props: ISelectProps<Value> | IMultipleSelectProps<Value>,
113
+ ): JSX.Element {
114
+ const {
115
+ options,
116
+ isMultiSelect,
117
+ value,
118
+ header,
119
+ footer,
120
+ defaultOptionLabel,
121
+ allOptionsLabel,
122
+ debounceTime = 400,
123
+ optionsMode = 'normal',
124
+ noMatchesLabel,
125
+ loadingLabel,
126
+ tweakStyles,
127
+ testId,
128
+ isReadonly,
129
+ isDisabled,
130
+ dropdownOptions,
131
+ minSymbolsCountToOpenList = 0,
132
+ dropdownIcon = 'chevron-down',
133
+ shouldScrollToList = true,
134
+ searchInput,
135
+ iconType,
136
+ onChange,
137
+ onFocus,
138
+ onBlur,
139
+ onType,
140
+ onOpen,
141
+ isOptionDisabled = defaultIsOptionDisabled,
142
+ compareValuesOnChange = defaultCompareFunction,
143
+ convertValueToString = defaultConvertFunction,
144
+ convertValueToId,
145
+ convertValueToReactNode,
146
+ optionsFilter,
147
+ ...inputProps
148
+ } = props;
149
+ const classes = useStyles({ theme: tweakStyles });
150
+
151
+ const { shouldRenderInList: shouldRenderSearchInputInList = false, ...searchInputProps } =
152
+ searchInput ?? {};
153
+ const hasSearchInputInList = optionsMode !== 'normal' && shouldRenderSearchInputInList;
154
+ const hasReadonlyInput = isReadonly || optionsMode === 'normal' || shouldRenderSearchInputInList;
155
+
156
+ const tweakInputStyles = useTweakStyles({
157
+ innerStyles: getInputStyles({ hasReadonlyInput, isMultiSelect }),
158
+ tweakStyles,
159
+ className: 'tweakInput',
160
+ currentComponentName: 'Select',
161
+ });
162
+
163
+ const tweakSearchInputStyles = useTweakStyles({
164
+ innerStyles: searchInputStyles,
165
+ tweakStyles,
166
+ className: 'tweakSearchInput',
167
+ currentComponentName: 'Select',
168
+ });
169
+
170
+ const tweakSelectListStyles = useTweakStyles({
171
+ tweakStyles,
172
+ className: 'tweakSelectList',
173
+ currentComponentName: 'Select',
174
+ });
175
+
176
+ const isMounted = useIsMounted();
177
+ const [isListOpen, setIsListOpen] = useState(false);
178
+ const [areOptionsLoading, setAreOptionsLoading] = useState(false);
179
+ const hasDefaultOption = isReactNodeNotEmpty(defaultOptionLabel);
180
+
181
+ const [focusedListCellIndex, setFocusedListCellIndex] = useState(DEFAULT_OPTION_INDEX);
182
+ const [searchValue, setSearchValue] = useState('');
183
+ // если мы ввели что то в строку поиска - то этот булеан будет отключаться
184
+ // вынесен отдельно, из-за проблем с дебаунсом при динамич. опциях
185
+ const [shouldShowDefaultOption, setShouldShowDefaultOption] = useState(true);
186
+
187
+ const root = useRef<HTMLDivElement>(null);
188
+ const inputWrapper = useRef<HTMLDivElement>(null);
189
+ const list = useRef<HTMLDivElement>(null);
190
+ const input = useRef<HTMLInputElement>(null); // TODO ref снаружи?
191
+
192
+ const strValue = isMultiSelect ? value?.[0] : value;
193
+ const shouldShowAllOption =
194
+ isMultiSelect && isStringNotEmpty(allOptionsLabel) && searchValue === '';
195
+
196
+ const filteredOptions = useMemo(() => {
197
+ if (optionsMode !== 'search') {
198
+ return options;
199
+ }
200
+
201
+ const filter =
202
+ optionsFilter ?? createFilter<Value>((option) => [convertValueToString(option) ?? '']);
203
+
204
+ return filter(options as Value[], searchValue);
205
+ }, [optionsFilter, options, convertValueToString, searchValue, optionsMode]);
206
+
207
+ const availableOptions = useMemo(
208
+ () => options.filter((option) => !isOptionDisabled(option)),
209
+ [options, isOptionDisabled],
210
+ );
211
+
212
+ const areAllOptionsSelected = isMultiSelect && value?.length === availableOptions.length;
213
+ const shouldShowMultiSelectCounter =
214
+ isMultiSelect && isNotEmpty(value) && value.length > 1 && !areAllOptionsSelected;
215
+
216
+ const optionsIndexesForNavigation = useMemo(() => {
217
+ const result: number[] = [];
218
+ if (shouldShowDefaultOption && hasDefaultOption) {
219
+ result.push(DEFAULT_OPTION_INDEX);
220
+ }
221
+ if (shouldShowAllOption) {
222
+ result.push(ALL_OPTION_INDEX);
223
+ }
224
+ return result.concat(
225
+ filteredOptions.reduce((acc, cur, i) => {
226
+ if (!isOptionDisabled(cur)) {
227
+ acc.push(i);
228
+ }
229
+ return acc;
230
+ }, [] as number[]),
231
+ );
232
+ }, [
233
+ filteredOptions,
234
+ hasDefaultOption,
235
+ isOptionDisabled,
236
+ shouldShowAllOption,
237
+ shouldShowDefaultOption,
238
+ ]);
239
+
240
+ const stringValue = isNotEmpty(strValue) ? convertValueToString(strValue) : undefined;
241
+ // Для мультиселекта пытаемся показать "Все опции" если выбраны все опции
242
+ const showedStringValue =
243
+ areAllOptionsSelected && isNotEmpty(allOptionsLabel) ? allOptionsLabel : stringValue;
244
+
245
+ const convertToId = useCallback(
246
+ (v: Value) => (convertValueToId ?? getDefaultConvertToIdFunction(convertValueToString))(v),
247
+ [convertValueToId, convertValueToString],
248
+ );
249
+
250
+ const getDropdownOffset = () => {
251
+ if (isEmpty(input.current) || inputProps.errorPosition === 'top') {
252
+ return 0;
253
+ }
254
+
255
+ // Высота элемента inputWrapper у компонента Input
256
+ return input.current.parentElement?.offsetHeight ?? 0;
257
+ };
258
+
259
+ const closeList = useCallback(() => {
260
+ setIsListOpen(false);
261
+ setSearchValue('');
262
+ setShouldShowDefaultOption(true);
263
+
264
+ if (!dropdownOptions?.shouldUsePopper) {
265
+ root.current?.style.removeProperty('--dropdown-offset');
266
+ }
267
+ }, [dropdownOptions?.shouldUsePopper]);
268
+
269
+ const handleListClose = useCallback(
270
+ (event: Event | SyntheticEvent) => {
271
+ closeList();
272
+ onBlur?.(event);
273
+ },
274
+ [closeList, onBlur],
275
+ );
276
+
277
+ const handleListOpen = () => {
278
+ if (!isListOpen) {
279
+ setIsListOpen(true);
280
+
281
+ if (!dropdownOptions?.shouldUsePopper) {
282
+ root.current?.style.setProperty('--dropdown-offset', `${getDropdownOffset()}px`);
283
+ }
284
+ }
285
+ };
286
+
287
+ const handleFocus = (event: FocusEvent<HTMLInputElement>) => {
288
+ onFocus?.(event);
289
+ handleListOpen();
290
+ };
291
+
292
+ const handleOnClick = () => {
293
+ handleListOpen();
294
+ };
295
+
296
+ const handleBlur = (event: FocusEvent<HTMLInputElement>) => {
297
+ // Когда что-то блокирует открытие листа, но блур все равно должен сработать
298
+ // например minSymbolsCount
299
+ if (isListOpen && !isOpen) {
300
+ handleListClose(event);
301
+ return;
302
+ }
303
+
304
+ if (
305
+ !isNotEmpty(event.relatedTarget) ||
306
+ !isNotEmpty(list.current) ||
307
+ !isNotEmpty(inputWrapper.current)
308
+ ) {
309
+ return;
310
+ }
311
+
312
+ const isActionInsideSelect =
313
+ hasExactParent(event.relatedTarget, list.current) ||
314
+ hasExactParent(event.relatedTarget, inputWrapper.current);
315
+
316
+ // Ничего не делаем, если клик был внутри селекта
317
+ if (!isActionInsideSelect) {
318
+ handleListClose(event);
319
+ }
320
+ };
321
+
322
+ const handleChange = useCallback(
323
+ (
324
+ newValue: Value | IMultipleSelectValue<Value> | undefined,
325
+ event:
326
+ | MouseEvent<HTMLElement>
327
+ | KeyboardEvent
328
+ | ChangeEvent<HTMLElement>
329
+ | FormEvent<HTMLElement>,
330
+ ) => {
331
+ // Тут беда с типами, сорри
332
+ if (!compareValuesOnChange(value as never, newValue as never)) {
333
+ onChange(newValue as (Value & IMultipleSelectValue<Value>) | undefined, event);
334
+ }
335
+ },
336
+ [value, compareValuesOnChange, onChange],
337
+ );
338
+
339
+ const handleOptionSelect = useCallback(
340
+ (index: number, event: MouseEvent<HTMLElement> | KeyboardEvent) => {
341
+ handleChange(index === DEFAULT_OPTION_INDEX ? undefined : filteredOptions[index], event);
342
+ handleListClose(event);
343
+ input.current?.blur();
344
+ },
345
+ [handleChange, handleListClose, filteredOptions],
346
+ );
347
+
348
+ // MultiSelect
349
+ const handleToggleOptionCheckbox = useCallback(
350
+ (index: number, isSelected: boolean, event: ChangeEvent<HTMLElement> | KeyboardEvent) => {
351
+ if (!isMultiSelect) {
352
+ return;
353
+ }
354
+
355
+ // Если выбрана не дефолтная опция, которая сетит андеф
356
+ if (index === DEFAULT_OPTION_INDEX || (index === ALL_OPTION_INDEX && !isSelected)) {
357
+ handleChange(undefined, event);
358
+ return;
359
+ }
360
+ if (index === ALL_OPTION_INDEX && isSelected) {
361
+ handleChange(availableOptions as IMultipleSelectValue<Value>, event);
362
+ return;
363
+ }
364
+ const option = filteredOptions[index];
365
+ handleChange(
366
+ isSelected
367
+ ? // Добавляем
368
+ ([...(value ?? []), option] as IMultipleSelectValue<Value>)
369
+ : // Убираем
370
+ value?.filter((o) => convertToId(o) !== convertToId(option)),
371
+ event,
372
+ );
373
+ },
374
+ [isMultiSelect, filteredOptions, handleChange, value, availableOptions, convertToId],
375
+ );
376
+
377
+ const handleOnType = useCallback(
378
+ async (v: string) => {
379
+ if (onType === undefined) {
380
+ return;
381
+ }
382
+ if (isMounted()) {
383
+ setAreOptionsLoading(true);
384
+ }
385
+ await onType(v);
386
+ if (isMounted()) {
387
+ setAreOptionsLoading(false);
388
+ }
389
+ if (optionsMode === 'dynamic') {
390
+ setShouldShowDefaultOption(v === '');
391
+ }
392
+ },
393
+ [isMounted, onType, optionsMode],
394
+ );
395
+
396
+ const debounceHandleOnType = useMemo(
397
+ () => debounce(handleOnType, debounceTime, { isImmediate: debounceTime === 0 }),
398
+ [handleOnType, debounceTime],
399
+ );
400
+
401
+ const handleInputChange = (v: string, event: FormEvent<HTMLElement>) => {
402
+ if (onType !== undefined) {
403
+ debounceHandleOnType(v);
404
+ }
405
+
406
+ if (optionsMode !== 'dynamic') {
407
+ setShouldShowDefaultOption(v === '');
408
+ }
409
+
410
+ if (v === '' && !hasSearchInputInList) {
411
+ handleChange(undefined, event);
412
+ }
413
+
414
+ setSearchValue(v);
415
+ };
416
+
417
+ const handleKeyDown = (event: KeyboardEvent) => {
418
+ if (!isListOpen) {
419
+ return;
420
+ }
421
+
422
+ event.stopPropagation();
423
+ const curIndexInNavigation = optionsIndexesForNavigation.findIndex(
424
+ (index) => index === focusedListCellIndex,
425
+ );
426
+
427
+ switch (event.code) {
428
+ case 'Enter':
429
+ case 'NumpadEnter': {
430
+ let indexToSelect = focusedListCellIndex;
431
+
432
+ // если осталась одна опция в списке,
433
+ // то выбираем ее нажатием на enter
434
+ if (indexToSelect === DEFAULT_OPTION_INDEX && filteredOptions.length === 1) {
435
+ indexToSelect = 0;
436
+ }
437
+
438
+ if (isMultiSelect) {
439
+ let isThisValueAlreadySelected: boolean | undefined;
440
+ if (indexToSelect === ALL_OPTION_INDEX) {
441
+ isThisValueAlreadySelected = areAllOptionsSelected;
442
+ } else {
443
+ // подумать над концептом реального фокуса на опциях, а не вот эти вот focusedCell
444
+ const option = filteredOptions[indexToSelect];
445
+ const valueIdToSelect = convertToId(option);
446
+ isThisValueAlreadySelected =
447
+ value?.some((opt) => convertToId(opt) === valueIdToSelect) ?? false;
448
+ }
449
+ handleToggleOptionCheckbox(indexToSelect, !isThisValueAlreadySelected, event);
450
+ } else {
451
+ handleOptionSelect(indexToSelect, event);
452
+ }
453
+ break;
454
+ }
455
+
456
+ case 'ArrowDown': {
457
+ // чтобы убрать перемещение курсора в инпуте
458
+ event.preventDefault();
459
+ const targetIndexInNavigation =
460
+ (curIndexInNavigation + 1) % optionsIndexesForNavigation.length;
461
+ setFocusedListCellIndex(optionsIndexesForNavigation[targetIndexInNavigation]);
462
+ break;
463
+ }
464
+
465
+ case 'ArrowUp': {
466
+ // чтобы убрать перемещение курсора в инпуте
467
+ event.preventDefault();
468
+ const targetIndexInNavigation =
469
+ (curIndexInNavigation - 1 + optionsIndexesForNavigation.length) %
470
+ optionsIndexesForNavigation.length;
471
+ setFocusedListCellIndex(optionsIndexesForNavigation[targetIndexInNavigation]);
472
+ break;
473
+ }
474
+ }
475
+ };
476
+
477
+ const onArrowClick = () => {
478
+ if (isListOpen) {
479
+ input.current?.blur();
480
+ closeList();
481
+ } else {
482
+ input.current?.focus();
483
+ }
484
+ };
485
+
486
+ useOnClickOutsideWithRef(list, handleListClose, inputWrapper);
487
+
488
+ const hasEnoughSymbolsToSearch = searchValue.trim().length >= minSymbolsCountToOpenList;
489
+
490
+ const isOpen =
491
+ // Пользователь пытается открыть лист
492
+ isListOpen &&
493
+ // Нам есть что показать:
494
+ // Есть опции
495
+ (filteredOptions.length > 0 ||
496
+ // Дефолтная опция
497
+ (defaultOptionLabel !== undefined && !hasEnoughSymbolsToSearch) ||
498
+ // Текст "Загрузка..."
499
+ inputProps.isLoading ||
500
+ // Текст "Совпадений не найдено"
501
+ noMatchesLabel !== undefined ||
502
+ // У нас есть инпут с поиском внутри листа
503
+ hasSearchInputInList) &&
504
+ // Последняя проверка на случай, если мы че то ищем в опциях
505
+ (optionsMode === 'normal' || hasEnoughSymbolsToSearch);
506
+
507
+ // Эти значения ставятся в false по дефолту также в useDropdown
508
+ const {
509
+ shouldUsePopper = false,
510
+ shouldRenderInBody = false,
511
+ shouldHideOnScroll = false,
512
+ } = dropdownOptions ?? {};
513
+
514
+ const popperData = useDropdown({
515
+ isOpen,
516
+ onDropdownClose: handleListClose,
517
+ referenceElement: input.current?.parentElement ?? inputWrapper.current,
518
+ dropdownElement: list.current,
519
+ options: dropdownOptions,
520
+ dependenciesForPositionUpdating: [inputProps.isLoading, filteredOptions.length],
521
+ });
522
+
523
+ useEffect(() => {
524
+ const focusedCellIndex = isNotEmpty(strValue)
525
+ ? optionsIndexesForNavigation.find((index) => {
526
+ const option = filteredOptions[index];
527
+ return isNotEmpty(option) && convertToId(option) === convertToId(strValue);
528
+ })
529
+ : undefined;
530
+
531
+ setFocusedListCellIndex(focusedCellIndex ?? optionsIndexesForNavigation[0]);
532
+ }, [strValue, filteredOptions, optionsIndexesForNavigation, convertToId]);
533
+
534
+ useEffect(() => {
535
+ if (isOpen) {
536
+ onOpen?.();
537
+ }
538
+ }, [isOpen]);
539
+
540
+ const searchInputEl = hasSearchInputInList && (
541
+ <SearchInput
542
+ value={searchValue}
543
+ onChange={handleInputChange}
544
+ tweakStyles={tweakSearchInputStyles}
545
+ placeholder="Поиск"
546
+ {...searchInputProps}
547
+ />
548
+ );
549
+
550
+ // Т.к. используется для проверки на пустой элемент `isReactNodeNotEmpty` внутри `SelectList`, то
551
+ // он пропускает React.Fragment
552
+ const customHeader = (isReactNodeNotEmpty(searchInputEl) || isReactNodeNotEmpty(header)) && (
553
+ <>
554
+ {searchInputEl}
555
+ {header}
556
+ </>
557
+ );
558
+
559
+ const listEl = (
560
+ <div
561
+ className={clsx(classes.listWrapper, {
562
+ [classes.withoutPopper]: !shouldUsePopper,
563
+ [classes.listWrapperInBody]: shouldRenderInBody,
564
+ })}
565
+ ref={list}
566
+ style={popperData?.styles.popper as CSSProperties}
567
+ tabIndex={0}
568
+ onBlur={handleBlur} // обработка для Tab из списка
569
+ {...popperData?.attributes.popper}
570
+ >
571
+ {isOpen && (
572
+ <SelectList
573
+ options={filteredOptions}
574
+ defaultOptionLabel={hasDefaultOption && shouldShowDefaultOption && defaultOptionLabel}
575
+ allOptionsLabel={shouldShowAllOption && allOptionsLabel}
576
+ areAllOptionsSelected={areAllOptionsSelected}
577
+ customListHeader={customHeader}
578
+ customListFooter={footer}
579
+ noMatchesLabel={noMatchesLabel}
580
+ focusedIndex={focusedListCellIndex}
581
+ activeValue={value}
582
+ isLoading={inputProps.isLoading}
583
+ loadingLabel={loadingLabel}
584
+ tweakStyles={tweakSelectListStyles}
585
+ testId={getTestId(testId, 'list')}
586
+ isMultiSelect={isMultiSelect}
587
+ // скролл не работает с включеным поппером
588
+ shouldScrollToList={shouldScrollToList && !shouldUsePopper && !shouldHideOnScroll}
589
+ isOptionDisabled={isOptionDisabled}
590
+ convertValueToString={convertValueToString}
591
+ convertValueToReactNode={convertValueToReactNode}
592
+ convertValueToId={convertToId}
593
+ onOptionSelect={handleOptionSelect}
594
+ onToggleCheckbox={handleToggleOptionCheckbox}
595
+ />
596
+ )}
597
+ </div>
598
+ );
599
+
600
+ const multiSelectCounterWithIcon =
601
+ shouldShowMultiSelectCounter || isNotEmpty(iconType) ? (
602
+ <>
603
+ {shouldShowMultiSelectCounter && (
604
+ <div className={classes.counter}>(+{value.length - 1})</div>
605
+ )}
606
+ {isNotEmpty(iconType) && <div className={classes.icon}>{renderIcon(iconType)}</div>}
607
+ </>
608
+ ) : undefined;
609
+
610
+ return (
611
+ <div className={classes.root} onKeyDown={handleKeyDown} ref={root}>
612
+ <div
613
+ className={clsx(classes.inputWrapper, isDisabled && classes.disabled)}
614
+ onClick={isDisabled ? undefined : handleOnClick}
615
+ ref={inputWrapper}
616
+ >
617
+ <Input
618
+ value={
619
+ searchValue !== '' && !shouldRenderSearchInputInList ? searchValue : showedStringValue
620
+ }
621
+ onChange={handleInputChange}
622
+ isActive={isListOpen}
623
+ isReadonly={hasReadonlyInput}
624
+ onFocus={handleFocus}
625
+ onBlur={handleBlur}
626
+ isDisabled={isDisabled}
627
+ ref={input}
628
+ isLoading={areOptionsLoading}
629
+ tweakStyles={tweakInputStyles}
630
+ testId={testId}
631
+ iconType={isMultiSelect ? multiSelectCounterWithIcon : iconType}
632
+ {...inputProps}
633
+ />
634
+ <div
635
+ onMouseDown={(event: MouseEvent) => {
636
+ event.preventDefault();
637
+ }}
638
+ onClick={onArrowClick}
639
+ className={clsx(classes.arrow, isOpen && classes.activeArrow)}
640
+ >
641
+ {renderIcon(dropdownIcon)}
642
+ </div>
643
+ </div>
644
+ {shouldUsePopper ? (
645
+ <Portal container={shouldRenderInBody ? document.body : inputWrapper.current}>
646
+ <>{listEl}</>
647
+ </Portal>
648
+ ) : (
649
+ <>{isOpen && listEl}</>
650
+ )}
651
+ </div>
652
+ );
653
+ }