@skbkontur/react-ui 4.2.1 → 4.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/cjs/components/Autocomplete/Autocomplete.d.ts +9 -17
  3. package/cjs/components/Autocomplete/Autocomplete.js +10 -6
  4. package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
  5. package/cjs/components/Button/Button.d.ts +4 -5
  6. package/cjs/components/Button/Button.js +8 -3
  7. package/cjs/components/Button/Button.js.map +1 -1
  8. package/cjs/components/Button/Button.mixins.js +1 -1
  9. package/cjs/components/Button/Button.mixins.js.map +1 -1
  10. package/cjs/components/Button/Button.styles.js +18 -18
  11. package/cjs/components/Button/Button.styles.js.map +1 -1
  12. package/cjs/components/Center/Center.d.ts +4 -3
  13. package/cjs/components/Center/Center.js +9 -3
  14. package/cjs/components/Center/Center.js.map +1 -1
  15. package/cjs/components/Checkbox/Checkbox.md +48 -0
  16. package/cjs/components/ComboBox/ComboBox.d.ts +8 -13
  17. package/cjs/components/ComboBox/ComboBox.js +12 -2
  18. package/cjs/components/ComboBox/ComboBox.js.map +1 -1
  19. package/cjs/components/CurrencyInput/CurrencyInput.d.ts +6 -9
  20. package/cjs/components/CurrencyInput/CurrencyInput.js +19 -6
  21. package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
  22. package/cjs/components/CurrencyInput/CurrencyInputKeyboardActions.d.ts +2 -0
  23. package/cjs/components/CurrencyInput/CurrencyInputKeyboardActions.js +14 -2
  24. package/cjs/components/CurrencyInput/CurrencyInputKeyboardActions.js.map +1 -1
  25. package/cjs/components/CurrencyLabel/CurrencyLabel.d.ts +3 -9
  26. package/cjs/components/CurrencyLabel/CurrencyLabel.js +15 -15
  27. package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
  28. package/cjs/components/DateInput/DateFragmentsView.js +1 -1
  29. package/cjs/components/DateInput/DateFragmentsView.js.map +1 -1
  30. package/cjs/components/DateInput/DateInput.d.ts +8 -11
  31. package/cjs/components/DateInput/DateInput.js +11 -3
  32. package/cjs/components/DateInput/DateInput.js.map +1 -1
  33. package/cjs/components/DatePicker/DatePicker.d.ts +7 -9
  34. package/cjs/components/DatePicker/DatePicker.js +12 -6
  35. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  36. package/cjs/components/DropdownMenu/DropdownMenu.d.ts +5 -5
  37. package/cjs/components/DropdownMenu/DropdownMenu.js +9 -3
  38. package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
  39. package/cjs/components/FileUploader/FileUploader.md +8 -1
  40. package/cjs/components/FxInput/FxInput.d.ts +6 -6
  41. package/cjs/components/FxInput/FxInput.js +13 -10
  42. package/cjs/components/FxInput/FxInput.js.map +1 -1
  43. package/cjs/components/Gapped/Gapped.d.ts +7 -8
  44. package/cjs/components/Gapped/Gapped.js +12 -6
  45. package/cjs/components/Gapped/Gapped.js.map +1 -1
  46. package/cjs/components/GlobalLoader/GlobalLoader.d.ts +7 -14
  47. package/cjs/components/GlobalLoader/GlobalLoader.js +13 -9
  48. package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
  49. package/cjs/components/Hint/Hint.d.ts +8 -12
  50. package/cjs/components/Hint/Hint.js +15 -5
  51. package/cjs/components/Hint/Hint.js.map +1 -1
  52. package/cjs/components/Hint/Hint.md +14 -0
  53. package/cjs/components/Input/Input.d.ts +4 -3
  54. package/cjs/components/Input/Input.js +7 -4
  55. package/cjs/components/Input/Input.js.map +1 -1
  56. package/cjs/components/Kebab/Kebab.d.ts +7 -11
  57. package/cjs/components/Kebab/Kebab.js +14 -5
  58. package/cjs/components/Kebab/Kebab.js.map +1 -1
  59. package/cjs/components/Link/Link.d.ts +4 -4
  60. package/cjs/components/Link/Link.js +11 -4
  61. package/cjs/components/Link/Link.js.map +1 -1
  62. package/cjs/components/Loader/Loader.d.ts +7 -4
  63. package/cjs/components/Loader/Loader.js +14 -4
  64. package/cjs/components/Loader/Loader.js.map +1 -1
  65. package/cjs/components/Modal/Modal.d.ts +4 -3
  66. package/cjs/components/Modal/Modal.js +8 -3
  67. package/cjs/components/Modal/Modal.js.map +1 -1
  68. package/cjs/components/Modal/ModalFooter.js +1 -1
  69. package/cjs/components/Modal/ModalFooter.js.map +1 -1
  70. package/cjs/components/Modal/ModalHeader.js +1 -1
  71. package/cjs/components/Modal/ModalHeader.js.map +1 -1
  72. package/cjs/components/Paging/Paging.d.ts +6 -9
  73. package/cjs/components/Paging/Paging.js +15 -5
  74. package/cjs/components/Paging/Paging.js.map +1 -1
  75. package/cjs/components/Paging/PagingDefaultComponent.d.ts +1 -1
  76. package/cjs/components/Paging/PagingDefaultComponent.js.map +1 -1
  77. package/cjs/components/PasswordInput/PasswordInput.d.ts +4 -3
  78. package/cjs/components/PasswordInput/PasswordInput.js +8 -3
  79. package/cjs/components/PasswordInput/PasswordInput.js.map +1 -1
  80. package/cjs/components/Radio/Radio.d.ts +4 -3
  81. package/cjs/components/Radio/Radio.js +8 -3
  82. package/cjs/components/Radio/Radio.js.map +1 -1
  83. package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -4
  84. package/cjs/components/RadioGroup/RadioGroup.js +4 -2
  85. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  86. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +7 -8
  87. package/cjs/components/ScrollContainer/ScrollContainer.helpers.js +4 -4
  88. package/cjs/components/ScrollContainer/ScrollContainer.helpers.js.map +1 -1
  89. package/cjs/components/ScrollContainer/ScrollContainer.js +12 -6
  90. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  91. package/cjs/components/Select/Select.d.ts +3 -12
  92. package/cjs/components/Select/Select.js +6 -1
  93. package/cjs/components/Select/Select.js.map +1 -1
  94. package/cjs/components/Select/Select.styles.js +4 -4
  95. package/cjs/components/Select/Select.styles.js.map +1 -1
  96. package/cjs/components/SidePage/SidePage.d.ts +5 -6
  97. package/cjs/components/SidePage/SidePage.js +8 -1
  98. package/cjs/components/SidePage/SidePage.js.map +1 -1
  99. package/cjs/components/Spinner/Spinner.d.ts +4 -2
  100. package/cjs/components/Spinner/Spinner.js +9 -3
  101. package/cjs/components/Spinner/Spinner.js.map +1 -1
  102. package/cjs/components/Sticky/Sticky.d.ts +5 -4
  103. package/cjs/components/Sticky/Sticky.js +9 -2
  104. package/cjs/components/Sticky/Sticky.js.map +1 -1
  105. package/cjs/components/Tabs/Tab.d.ts +4 -4
  106. package/cjs/components/Tabs/Tab.js +11 -13
  107. package/cjs/components/Tabs/Tab.js.map +1 -1
  108. package/cjs/components/Tabs/Tabs.d.ts +4 -4
  109. package/cjs/components/Tabs/Tabs.js +12 -3
  110. package/cjs/components/Tabs/Tabs.js.map +1 -1
  111. package/cjs/components/Textarea/Textarea.d.ts +8 -10
  112. package/cjs/components/Textarea/Textarea.js +10 -6
  113. package/cjs/components/Textarea/Textarea.js.map +1 -1
  114. package/cjs/components/Toast/Toast.js.map +1 -1
  115. package/cjs/components/Toggle/Toggle.d.ts +5 -6
  116. package/cjs/components/Toggle/Toggle.js +10 -4
  117. package/cjs/components/Toggle/Toggle.js.map +1 -1
  118. package/cjs/components/TokenInput/TokenInput.d.ts +19 -16
  119. package/cjs/components/TokenInput/TokenInput.js +75 -57
  120. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  121. package/cjs/components/Tooltip/Tooltip.d.ts +13 -19
  122. package/cjs/components/Tooltip/Tooltip.js +27 -24
  123. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  124. package/cjs/components/TooltipMenu/TooltipMenu.d.ts +5 -4
  125. package/cjs/components/TooltipMenu/TooltipMenu.js +11 -5
  126. package/cjs/components/TooltipMenu/TooltipMenu.js.map +1 -1
  127. package/cjs/internal/BGRuler.d.ts +13 -15
  128. package/cjs/internal/BGRuler.js +16 -8
  129. package/cjs/internal/BGRuler.js.map +1 -1
  130. package/cjs/internal/Calendar/Calendar.d.ts +4 -13
  131. package/cjs/internal/Calendar/Calendar.js +10 -5
  132. package/cjs/internal/Calendar/Calendar.js.map +1 -1
  133. package/cjs/internal/Calendar/DayCellView.styles.js +1 -1
  134. package/cjs/internal/Calendar/DayCellView.styles.js.map +1 -1
  135. package/cjs/internal/Calendar/Month.js +16 -11
  136. package/cjs/internal/Calendar/Month.js.map +1 -1
  137. package/cjs/internal/CommonWrapper/CommonWrapper.d.ts +1 -1
  138. package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
  139. package/cjs/internal/ComponentCombinator.d.ts +6 -8
  140. package/cjs/internal/ComponentCombinator.js +6 -2
  141. package/cjs/internal/ComponentCombinator.js.map +1 -1
  142. package/cjs/internal/ComponentTable.d.ts +5 -6
  143. package/cjs/internal/ComponentTable.js +11 -2
  144. package/cjs/internal/ComponentTable.js.map +1 -1
  145. package/cjs/internal/CustomComboBox/ComboBoxMenu.d.ts +4 -4
  146. package/cjs/internal/CustomComboBox/ComboBoxMenu.js +7 -1
  147. package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
  148. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +4 -12
  149. package/cjs/internal/CustomComboBox/ComboBoxView.js +18 -10
  150. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  151. package/cjs/internal/DateSelect/DateSelect.d.ts +4 -6
  152. package/cjs/internal/DateSelect/DateSelect.js +15 -9
  153. package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
  154. package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +4 -7
  155. package/cjs/internal/DropdownContainer/DropdownContainer.js +8 -5
  156. package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
  157. package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.js +2 -1
  158. package/cjs/internal/HideBodyVerticalScroll/HideBodyVerticalScroll.js.map +1 -1
  159. package/cjs/internal/InputLikeText/InputLikeText.d.ts +4 -3
  160. package/cjs/internal/InputLikeText/InputLikeText.js +7 -2
  161. package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
  162. package/cjs/internal/InternalMenu/InternalMenu.d.ts +3 -9
  163. package/cjs/internal/InternalMenu/InternalMenu.js +36 -14
  164. package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
  165. package/cjs/internal/InternalMenu/InternalMenu.styles.js +2 -1
  166. package/cjs/internal/InternalMenu/InternalMenu.styles.js.map +1 -1
  167. package/cjs/internal/MaskedInput/MaskedInput.d.ts +5 -2
  168. package/cjs/internal/MaskedInput/MaskedInput.js +17 -6
  169. package/cjs/internal/MaskedInput/MaskedInput.js.map +1 -1
  170. package/cjs/internal/Menu/Menu.d.ts +4 -7
  171. package/cjs/internal/Menu/Menu.js +14 -4
  172. package/cjs/internal/Menu/Menu.js.map +1 -1
  173. package/cjs/internal/Popup/Popup.d.ts +11 -17
  174. package/cjs/internal/Popup/Popup.js +38 -19
  175. package/cjs/internal/Popup/Popup.js.map +1 -1
  176. package/cjs/internal/Popup/PopupHelper.d.ts +1 -1
  177. package/cjs/internal/Popup/PopupHelper.js.map +1 -1
  178. package/cjs/internal/Popup/PopupPin.d.ts +1 -1
  179. package/cjs/internal/Popup/PopupPin.js.map +1 -1
  180. package/cjs/internal/PopupMenu/PopupMenu.d.ts +8 -11
  181. package/cjs/internal/PopupMenu/PopupMenu.js +8 -1
  182. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  183. package/cjs/internal/RenderLayer/RenderLayer.d.ts +6 -4
  184. package/cjs/internal/RenderLayer/RenderLayer.js +15 -4
  185. package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
  186. package/cjs/internal/ThemePlayground/VariableValue.d.ts +5 -4
  187. package/cjs/internal/ThemePlayground/VariableValue.js +6 -1
  188. package/cjs/internal/ThemePlayground/VariableValue.js.map +1 -1
  189. package/cjs/internal/ZIndex/ZIndex.d.ts +7 -11
  190. package/cjs/internal/ZIndex/ZIndex.js +10 -3
  191. package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
  192. package/cjs/internal/themes/DefaultTheme.js +1 -1
  193. package/cjs/internal/themes/DefaultTheme.js.map +1 -1
  194. package/cjs/lib/InstanceWithAnchorElement.d.ts +1 -1
  195. package/cjs/lib/InstanceWithAnchorElement.js.map +1 -1
  196. package/cjs/lib/SSRSafe.d.ts +2 -1
  197. package/cjs/lib/SSRSafe.js +9 -1
  198. package/cjs/lib/SSRSafe.js.map +1 -1
  199. package/cjs/lib/createPropsGetter.d.ts +2 -1
  200. package/cjs/lib/createPropsGetter.js +2 -0
  201. package/cjs/lib/createPropsGetter.js.map +1 -1
  202. package/cjs/lib/listenFocusOutside.d.ts +1 -1
  203. package/cjs/lib/listenFocusOutside.js.map +1 -1
  204. package/cjs/lib/rootNode/getRootNode.d.ts +3 -3
  205. package/cjs/lib/rootNode/getRootNode.js +7 -7
  206. package/cjs/lib/rootNode/getRootNode.js.map +1 -1
  207. package/cjs/lib/rootNode/rootNodeDecorator.d.ts +7 -7
  208. package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -1
  209. package/cjs/typings/event-types.d.ts +2 -2
  210. package/components/Autocomplete/Autocomplete/Autocomplete.js +22 -12
  211. package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
  212. package/components/Autocomplete/Autocomplete.d.ts +9 -17
  213. package/components/Button/Button/Button.js +11 -5
  214. package/components/Button/Button/Button.js.map +1 -1
  215. package/components/Button/Button.d.ts +4 -5
  216. package/components/Button/Button.mixins/Button.mixins.js +1 -1
  217. package/components/Button/Button.mixins/Button.mixins.js.map +1 -1
  218. package/components/Button/Button.styles/Button.styles.js +18 -18
  219. package/components/Button/Button.styles/Button.styles.js.map +1 -1
  220. package/components/Center/Center/Center.js +7 -5
  221. package/components/Center/Center/Center.js.map +1 -1
  222. package/components/Center/Center.d.ts +4 -3
  223. package/components/Checkbox/Checkbox.md +48 -0
  224. package/components/ComboBox/ComboBox/ComboBox.js +3 -1
  225. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  226. package/components/ComboBox/ComboBox.d.ts +8 -13
  227. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +28 -18
  228. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
  229. package/components/CurrencyInput/CurrencyInput.d.ts +6 -9
  230. package/components/CurrencyInput/CurrencyInputKeyboardActions/CurrencyInputKeyboardActions.js +4 -2
  231. package/components/CurrencyInput/CurrencyInputKeyboardActions/CurrencyInputKeyboardActions.js.map +1 -1
  232. package/components/CurrencyInput/CurrencyInputKeyboardActions.d.ts +2 -0
  233. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +21 -15
  234. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
  235. package/components/CurrencyLabel/CurrencyLabel.d.ts +3 -9
  236. package/components/DateInput/DateFragmentsView/DateFragmentsView.js +1 -0
  237. package/components/DateInput/DateFragmentsView/DateFragmentsView.js.map +1 -1
  238. package/components/DateInput/DateInput/DateInput.js +17 -4
  239. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  240. package/components/DateInput/DateInput.d.ts +8 -11
  241. package/components/DatePicker/DatePicker/DatePicker.js +12 -9
  242. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  243. package/components/DatePicker/DatePicker.d.ts +7 -9
  244. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +8 -2
  245. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
  246. package/components/DropdownMenu/DropdownMenu.d.ts +5 -5
  247. package/components/FileUploader/FileUploader.md +8 -1
  248. package/components/FxInput/FxInput/FxInput.js +11 -9
  249. package/components/FxInput/FxInput/FxInput.js.map +1 -1
  250. package/components/FxInput/FxInput.d.ts +6 -6
  251. package/components/Gapped/Gapped/Gapped.js +17 -8
  252. package/components/Gapped/Gapped/Gapped.js.map +1 -1
  253. package/components/Gapped/Gapped.d.ts +7 -8
  254. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +35 -16
  255. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
  256. package/components/GlobalLoader/GlobalLoader.d.ts +7 -14
  257. package/components/Hint/Hint/Hint.js +30 -18
  258. package/components/Hint/Hint/Hint.js.map +1 -1
  259. package/components/Hint/Hint.d.ts +8 -12
  260. package/components/Hint/Hint.md +14 -0
  261. package/components/Input/Input/Input.js +9 -7
  262. package/components/Input/Input/Input.js.map +1 -1
  263. package/components/Input/Input.d.ts +4 -3
  264. package/components/Kebab/Kebab/Kebab.js +19 -8
  265. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  266. package/components/Kebab/Kebab.d.ts +7 -11
  267. package/components/Link/Link/Link.js +9 -6
  268. package/components/Link/Link/Link.js.map +1 -1
  269. package/components/Link/Link.d.ts +4 -4
  270. package/components/Loader/Loader/Loader.js +22 -17
  271. package/components/Loader/Loader/Loader.js.map +1 -1
  272. package/components/Loader/Loader.d.ts +7 -4
  273. package/components/Modal/Modal/Modal.js +3 -1
  274. package/components/Modal/Modal/Modal.js.map +1 -1
  275. package/components/Modal/Modal.d.ts +4 -3
  276. package/components/Modal/ModalFooter/ModalFooter.js +2 -2
  277. package/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
  278. package/components/Modal/ModalHeader/ModalHeader.js +2 -2
  279. package/components/Modal/ModalHeader/ModalHeader.js.map +1 -1
  280. package/components/Paging/Paging/Paging.js +24 -14
  281. package/components/Paging/Paging/Paging.js.map +1 -1
  282. package/components/Paging/Paging.d.ts +6 -9
  283. package/components/Paging/PagingDefaultComponent/PagingDefaultComponent.js.map +1 -1
  284. package/components/Paging/PagingDefaultComponent.d.ts +1 -1
  285. package/components/PasswordInput/PasswordInput/PasswordInput.js +7 -5
  286. package/components/PasswordInput/PasswordInput/PasswordInput.js.map +1 -1
  287. package/components/PasswordInput/PasswordInput.d.ts +4 -3
  288. package/components/Radio/Radio/Radio.js +7 -5
  289. package/components/Radio/Radio/Radio.js.map +1 -1
  290. package/components/Radio/Radio.d.ts +4 -3
  291. package/components/RadioGroup/RadioGroup/RadioGroup.js +10 -10
  292. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  293. package/components/RadioGroup/RadioGroup.d.ts +2 -4
  294. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +11 -7
  295. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  296. package/components/ScrollContainer/ScrollContainer.d.ts +7 -8
  297. package/components/ScrollContainer/ScrollContainer.helpers/ScrollContainer.helpers.js +4 -4
  298. package/components/ScrollContainer/ScrollContainer.helpers/ScrollContainer.helpers.js.map +1 -1
  299. package/components/Select/Select/Select.js +4 -3
  300. package/components/Select/Select/Select.js.map +1 -1
  301. package/components/Select/Select.d.ts +3 -12
  302. package/components/Select/Select.styles/Select.styles.js +4 -4
  303. package/components/Select/Select.styles/Select.styles.js.map +1 -1
  304. package/components/SidePage/SidePage/SidePage.js +14 -9
  305. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  306. package/components/SidePage/SidePage.d.ts +5 -6
  307. package/components/Spinner/Spinner/Spinner.js +7 -5
  308. package/components/Spinner/Spinner/Spinner.js.map +1 -1
  309. package/components/Spinner/Spinner.d.ts +4 -2
  310. package/components/Sticky/Sticky/Sticky.js +7 -4
  311. package/components/Sticky/Sticky/Sticky.js.map +1 -1
  312. package/components/Sticky/Sticky.d.ts +5 -4
  313. package/components/Tabs/Tab/Tab.js +15 -7
  314. package/components/Tabs/Tab/Tab.js.map +1 -1
  315. package/components/Tabs/Tab.d.ts +4 -4
  316. package/components/Tabs/Tabs/Tabs.js +10 -8
  317. package/components/Tabs/Tabs/Tabs.js.map +1 -1
  318. package/components/Tabs/Tabs.d.ts +4 -4
  319. package/components/Textarea/Textarea/Textarea.js +19 -14
  320. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  321. package/components/Textarea/Textarea.d.ts +8 -10
  322. package/components/Toast/Toast/Toast.js.map +1 -1
  323. package/components/Toggle/Toggle/Toggle.js +12 -7
  324. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  325. package/components/Toggle/Toggle.d.ts +5 -6
  326. package/components/TokenInput/TokenInput/TokenInput.js +107 -77
  327. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  328. package/components/TokenInput/TokenInput.d.ts +19 -16
  329. package/components/Tooltip/Tooltip/Tooltip.js +60 -47
  330. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  331. package/components/Tooltip/Tooltip.d.ts +13 -19
  332. package/components/TooltipMenu/TooltipMenu/TooltipMenu.js +15 -13
  333. package/components/TooltipMenu/TooltipMenu/TooltipMenu.js.map +1 -1
  334. package/components/TooltipMenu/TooltipMenu.d.ts +5 -4
  335. package/internal/BGRuler/BGRuler.js +11 -6
  336. package/internal/BGRuler/BGRuler.js.map +1 -1
  337. package/internal/BGRuler.d.ts +13 -15
  338. package/internal/Calendar/Calendar/Calendar.js +11 -5
  339. package/internal/Calendar/Calendar/Calendar.js.map +1 -1
  340. package/internal/Calendar/Calendar.d.ts +4 -13
  341. package/internal/Calendar/DayCellView.styles/DayCellView.styles.js +1 -1
  342. package/internal/Calendar/DayCellView.styles/DayCellView.styles.js.map +1 -1
  343. package/internal/Calendar/Month/Month.js +20 -11
  344. package/internal/Calendar/Month/Month.js.map +1 -1
  345. package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
  346. package/internal/CommonWrapper/CommonWrapper.d.ts +1 -1
  347. package/internal/ComponentCombinator/ComponentCombinator.js +8 -5
  348. package/internal/ComponentCombinator/ComponentCombinator.js.map +1 -1
  349. package/internal/ComponentCombinator.d.ts +6 -8
  350. package/internal/ComponentTable/ComponentTable.js +16 -4
  351. package/internal/ComponentTable/ComponentTable.js.map +1 -1
  352. package/internal/ComponentTable.d.ts +5 -6
  353. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +4 -2
  354. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
  355. package/internal/CustomComboBox/ComboBoxMenu.d.ts +4 -4
  356. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +21 -10
  357. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  358. package/internal/CustomComboBox/ComboBoxView.d.ts +4 -12
  359. package/internal/DateSelect/DateSelect/DateSelect.js +14 -11
  360. package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
  361. package/internal/DateSelect/DateSelect.d.ts +4 -6
  362. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +6 -10
  363. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
  364. package/internal/DropdownContainer/DropdownContainer.d.ts +4 -7
  365. package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll/HideBodyVerticalScroll.js +2 -1
  366. package/internal/HideBodyVerticalScroll/HideBodyVerticalScroll/HideBodyVerticalScroll.js.map +1 -1
  367. package/internal/InputLikeText/InputLikeText/InputLikeText.js +4 -2
  368. package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
  369. package/internal/InputLikeText/InputLikeText.d.ts +4 -3
  370. package/internal/InternalMenu/InternalMenu/InternalMenu.js +37 -16
  371. package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
  372. package/internal/InternalMenu/InternalMenu.d.ts +3 -9
  373. package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js +1 -1
  374. package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js.map +1 -1
  375. package/internal/MaskedInput/MaskedInput/MaskedInput.js +12 -6
  376. package/internal/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
  377. package/internal/MaskedInput/MaskedInput.d.ts +5 -2
  378. package/internal/Menu/Menu/Menu.js +16 -4
  379. package/internal/Menu/Menu/Menu.js.map +1 -1
  380. package/internal/Menu/Menu.d.ts +4 -7
  381. package/internal/Popup/Popup/Popup.js +52 -35
  382. package/internal/Popup/Popup/Popup.js.map +1 -1
  383. package/internal/Popup/Popup.d.ts +11 -17
  384. package/internal/Popup/PopupHelper/PopupHelper.js.map +1 -1
  385. package/internal/Popup/PopupHelper.d.ts +1 -1
  386. package/internal/Popup/PopupPin/PopupPin.js.map +1 -1
  387. package/internal/Popup/PopupPin.d.ts +1 -1
  388. package/internal/PopupMenu/PopupMenu/PopupMenu.js +12 -4
  389. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  390. package/internal/PopupMenu/PopupMenu.d.ts +8 -11
  391. package/internal/RenderLayer/RenderLayer/RenderLayer.js +18 -11
  392. package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
  393. package/internal/RenderLayer/RenderLayer.d.ts +6 -4
  394. package/internal/ThemePlayground/VariableValue/VariableValue.js +4 -2
  395. package/internal/ThemePlayground/VariableValue/VariableValue.js.map +1 -1
  396. package/internal/ThemePlayground/VariableValue.d.ts +5 -4
  397. package/internal/ZIndex/ZIndex/ZIndex.js +15 -13
  398. package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
  399. package/internal/ZIndex/ZIndex.d.ts +7 -11
  400. package/internal/themes/DefaultTheme/DefaultTheme.js +6 -6
  401. package/internal/themes/DefaultTheme/DefaultTheme.js.map +1 -1
  402. package/lib/InstanceWithAnchorElement/InstanceWithAnchorElement.js.map +1 -1
  403. package/lib/InstanceWithAnchorElement.d.ts +1 -1
  404. package/lib/SSRSafe/SSRSafe.js +7 -0
  405. package/lib/SSRSafe/SSRSafe.js.map +1 -1
  406. package/lib/SSRSafe.d.ts +2 -1
  407. package/lib/createPropsGetter/createPropsGetter.js.map +1 -1
  408. package/lib/createPropsGetter.d.ts +2 -1
  409. package/lib/listenFocusOutside/listenFocusOutside.js.map +1 -1
  410. package/lib/listenFocusOutside.d.ts +1 -1
  411. package/lib/rootNode/getRootNode/getRootNode.js +8 -8
  412. package/lib/rootNode/getRootNode/getRootNode.js.map +1 -1
  413. package/lib/rootNode/getRootNode.d.ts +3 -3
  414. package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -1
  415. package/lib/rootNode/rootNodeDecorator.d.ts +7 -7
  416. package/package.json +2 -2
  417. package/typings/event-types.d.ts +2 -2
@@ -4,6 +4,7 @@ import _inheritsLoose from "@babel/runtime/helpers/esm/inheritsLoose";
4
4
  var _class, _class2, _temp;
5
5
 
6
6
  import React from 'react';
7
+ import { isHTMLElement } from "../../../lib/SSRSafe";
7
8
  import { isNonNullable, isNullable } from "../../../lib/utils";
8
9
  import { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from "../../../lib/events/keyboard/identifiers";
9
10
  import { ScrollContainer } from "../../../components/ScrollContainer";
@@ -30,12 +31,12 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
30
31
  }
31
32
 
32
33
  _this = _React$PureComponent.call.apply(_React$PureComponent, [this].concat(args)) || this;
34
+ _this.getProps = createPropsGetter(InternalMenu.defaultProps);
33
35
  _this.state = {
34
36
  highlightedIndex: -1,
35
- maxHeight: _this.props.maxHeight || 'none',
37
+ maxHeight: _this.getProps().maxHeight || 'none',
36
38
  scrollState: 'top'
37
39
  };
38
- _this.getProps = createPropsGetter(InternalMenu.defaultProps);
39
40
 
40
41
  _this.renderHeader = function () {
41
42
  var _cx;
@@ -60,17 +61,21 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
60
61
  };
61
62
 
62
63
  _this.focusOnRootElement = function () {
63
- var _getRootNode;
64
+ var rootNode = getRootNode(_assertThisInitialized(_this));
64
65
 
65
- (_getRootNode = getRootNode(_assertThisInitialized(_this))) == null ? void 0 : _getRootNode.focus();
66
+ if (isHTMLElement(rootNode)) {
67
+ rootNode == null ? void 0 : rootNode.focus();
68
+ }
66
69
  };
67
70
 
68
71
  _this.shouldRecalculateMaxHeight = function (prevProps) {
69
72
  var _this$props = _this.props,
70
- maxHeight = _this$props.maxHeight,
71
73
  header = _this$props.header,
72
74
  footer = _this$props.footer,
73
75
  children = _this$props.children;
76
+
77
+ var maxHeight = _this.getProps().maxHeight;
78
+
74
79
  var prevMaxHeight = prevProps.maxHeight;
75
80
  var prevHeader = prevProps.header;
76
81
  var prevFooter = prevProps.footer;
@@ -79,7 +84,8 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
79
84
  };
80
85
 
81
86
  _this.calculateMaxHeight = function () {
82
- var maxHeight = _this.props.maxHeight;
87
+ var maxHeight = _this.getProps().maxHeight;
88
+
83
89
  var parsedMaxHeight = maxHeight;
84
90
  var rootNode = getRootNode(_assertThisInitialized(_this));
85
91
 
@@ -110,18 +116,25 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
110
116
 
111
117
  _this.scrollToSelected = function () {
112
118
  if (_this.scrollContainer && _this.highlighted) {
113
- _this.scrollContainer.scrollTo(getRootNode(_this.highlighted));
119
+ var _rootNode = getRootNode(_this.highlighted); // TODO: Remove this check once IF-647 is resolved
120
+
121
+
122
+ if (_rootNode instanceof HTMLElement) {
123
+ _this.scrollContainer.scrollTo(_rootNode);
124
+ }
114
125
  }
115
126
  };
116
127
 
117
128
  _this.highlightItem = function (index) {
118
- var _getRootNode2;
119
-
120
129
  _this.setState({
121
130
  highlightedIndex: index
122
131
  });
123
132
 
124
- (_getRootNode2 = getRootNode(_assertThisInitialized(_this))) == null ? void 0 : _getRootNode2.focus();
133
+ var rootNode = getRootNode(_assertThisInitialized(_this));
134
+
135
+ if (isHTMLElement(rootNode)) {
136
+ rootNode == null ? void 0 : rootNode.focus();
137
+ }
125
138
  };
126
139
 
127
140
  _this.unhighlight = function () {
@@ -185,7 +198,7 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
185
198
  this.calculateMaxHeight();
186
199
  }
187
200
 
188
- if (prevProps.maxHeight !== this.props.maxHeight) {
201
+ if (prevProps.maxHeight !== this.getProps().maxHeight) {
189
202
  this.setState({
190
203
  maxHeight: this.props.maxHeight || 'none'
191
204
  });
@@ -217,11 +230,17 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
217
230
  return null;
218
231
  }
219
232
 
233
+ var _this$getProps = this.getProps(),
234
+ hasShadow = _this$getProps.hasShadow,
235
+ width = _this$getProps.width,
236
+ maxHeight = _this$getProps.maxHeight,
237
+ preventWindowScroll = _this$getProps.preventWindowScroll;
238
+
220
239
  return /*#__PURE__*/React.createElement("div", {
221
240
  "data-tid": InternalMenuDataTids.root,
222
- className: cx((_cx3 = {}, _cx3[styles.root(this.theme)] = true, _cx3[styles.shadow(this.theme)] = this.props.hasShadow, _cx3)),
241
+ className: cx((_cx3 = {}, _cx3[styles.root(this.theme)] = true, _cx3[styles.shadow(this.theme)] = hasShadow, _cx3)),
223
242
  style: {
224
- width: this.props.width,
243
+ width: width,
225
244
  maxHeight: this.state.maxHeight
226
245
  },
227
246
  onKeyDown: this.handleKeyDown,
@@ -229,8 +248,8 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
229
248
  tabIndex: 0
230
249
  }, this.props.header ? this.renderHeader() : null, /*#__PURE__*/React.createElement(ScrollContainer, {
231
250
  ref: this.refScrollContainer,
232
- maxHeight: this.props.maxHeight,
233
- preventWindowScroll: this.props.preventWindowScroll,
251
+ maxHeight: maxHeight,
252
+ preventWindowScroll: preventWindowScroll,
234
253
  onScrollStateChange: this.handleScrollStateChange
235
254
  }, React.Children.map(this.props.children, function (child, index) {
236
255
  if (typeof child === 'string' || typeof child === 'number' || isNullable(child)) {
@@ -321,6 +340,8 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
321
340
  };
322
341
 
323
342
  _proto.move = function move(step) {
343
+ var _this4 = this;
344
+
324
345
  this.setState(function (state, props) {
325
346
  var children = childrenToArray(props.children);
326
347
 
@@ -333,7 +354,7 @@ export var InternalMenu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/func
333
354
  do {
334
355
  index += step;
335
356
 
336
- if (!props.cyclicSelection && (index < 0 || index > children.length)) {
357
+ if (!_this4.getProps().cyclicSelection && (index < 0 || index > children.length)) {
337
358
  return null;
338
359
  }
339
360
 
@@ -1 +1 @@
1
- {"version":3,"sources":["InternalMenu.tsx"],"names":["React","isNonNullable","isNullable","isKeyArrowDown","isKeyArrowUp","isKeyEnter","ScrollContainer","isMenuItem","createPropsGetter","ThemeContext","cx","getRootNode","rootNode","getDOMRect","styles","isActiveElement","addIconPaddingIfPartOfMenu","InternalMenuDataTids","root","InternalMenu","state","highlightedIndex","maxHeight","props","scrollState","getProps","defaultProps","renderHeader","el","header","fixedHeader","renderFooter","footer","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","Children","count","calculateMaxHeight","parsedMaxHeight","window","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","height","setState","setInitialSelection","i","initialSelectedItemIndex","moveDown","refScrollContainer","scrollContainer","scrollToSelected","highlighted","scrollTo","highlightItem","index","unhighlight","moveUp","move","handleKeyDown","e","onKeyDown","defaultPrevented","preventDefault","onClick","handleScrollStateChange","componentDidMount","componentDidUpdate","render","theme","renderMain","enableIconPadding","toArray","some","x","isValidElement","icon","isEmpty","shadow","hasShadow","width","setRootNode","preventWindowScroll","map","child","type","modifiedChild","highlight","ref","originalRef","menuItem","refHighlighted","cloneElement","select","bind","onMouseEnter","event","onMouseLeave","current","shouldHandleHref","item","childrenToArray","href","target","open","location","onItemClick","step","cyclicSelection","length","filter","PureComponent","__KONTUR_REACT_UI__","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isNonNullable, isNullable } from '../../lib/utils';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './InternalMenu.styles';\nimport { isActiveElement } from './isActiveElement';\nimport { addIconPaddingIfPartOfMenu } from './addIconPaddingIfPartOfMenu';\n\ninterface MenuProps {\n children?: React.ReactNode;\n hasShadow?: boolean;\n /**\n * Максимальная высота применяется только для скролл контейнера\n *\n * Высота `header` и `footer` в нее не включены\n */\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Циклический перебор айтемов меню (по-дефолтну включен)\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\ninterface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n}\n\nexport const InternalMenuDataTids = {\n root: 'InternalMenu__root',\n} as const;\n\n@rootNode\nexport class InternalMenu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'InternalMenu';\n\n public static defaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.props.maxHeight || 'none',\n scrollState: 'top',\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n private getProps = createPropsGetter(InternalMenu.defaultProps);\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.props.maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n\n return (\n <div\n data-tid={InternalMenuDataTids.root}\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: this.props.hasShadow,\n })}\n style={{\n width: this.props.width,\n maxHeight: this.state.maxHeight,\n }}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header ? this.renderHeader() : null}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={this.props.maxHeight}\n preventWindowScroll={this.props.preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n >\n {React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || isNullable(child)) {\n return child;\n }\n if (React.isValidElement(child) && typeof child.type === 'string') {\n return child;\n }\n\n const modifiedChild = addIconPaddingIfPartOfMenu(child, enableIconPadding);\n\n if (isActiveElement(modifiedChild)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = modifiedChild.ref;\n const originalRef = ref;\n if (highlight) {\n ref = (menuItem) => this.refHighlighted(originalRef, menuItem);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(modifiedChild, {\n ref,\n state: highlight ? 'hover' : modifiedChild.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: (event) => {\n this.highlightItem(index);\n if (isMenuItem(modifiedChild) && modifiedChild.props.onMouseEnter) {\n modifiedChild.props.onMouseEnter(event);\n }\n },\n onMouseLeave: (event) => {\n this.unhighlight();\n if (isMenuItem(modifiedChild) && modifiedChild.props.onMouseLeave) {\n modifiedChild.props.onMouseLeave(event);\n }\n },\n });\n }\n\n return modifiedChild;\n })}\n </ScrollContainer>\n {this.props.footer ? this.renderFooter() : null}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n ref={(el) => (this.header = el)}\n className={cx({\n [styles.header()]: true,\n [styles.fixedHeader()]: this.state.scrollState !== 'top',\n })}\n >\n {this.props.header}\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n ref={(el) => (this.footer = el)}\n className={cx({\n [styles.footer()]: true,\n [styles.fixedFooter()]: this.state.scrollState !== 'bottom',\n })}\n >\n {this.props.footer}\n </div>\n );\n };\n\n private focusOnRootElement = (): void => {\n getRootNode(this)?.focus();\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { maxHeight, header, footer, children } = this.props;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const { maxHeight } = this.props;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && typeof window !== 'undefined' && rootNode) {\n const rootElementMaxHeight = window.getComputedStyle(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && getDOMRect(this.header).height) || 0) +\n ((this.footer && getDOMRect(this.footer).height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.moveDown();\n }\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: string | ((instance: MenuItem | null) => void) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (!originalRef || typeof originalRef === 'string') {\n return;\n }\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n } else if (typeof originalRef === 'object') {\n // @ts-ignore see issue https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n originalRef.current = menuItem;\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n this.scrollContainer.scrollTo(getRootNode(this.highlighted));\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event as React.MouseEvent<HTMLElement>);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlightItem = (index: number): void => {\n this.setState({ highlightedIndex: index });\n getRootNode(this)?.focus();\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n this.setState((state, props) => {\n const children = childrenToArray(props.children);\n if (!children.some(isActiveElement)) {\n return null;\n }\n let index = state.highlightedIndex;\n do {\n index += step;\n if (!props.cyclicSelection && (index < 0 || index > children.length)) {\n return null;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n return { highlightedIndex: index };\n }\n } while (index !== state.highlightedIndex);\n return null;\n }, this.scrollToSelected);\n }\n\n private moveUp = () => {\n this.move(-1);\n };\n\n private moveDown = () => {\n this.move(1);\n };\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isNonNullable).length;\n }\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(e);\n }\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(e)) {\n e.preventDefault();\n this.moveUp();\n } else if (isKeyArrowDown(e)) {\n e.preventDefault();\n this.moveDown();\n } else if (isKeyEnter(e)) {\n if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(e);\n }\n }\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
1
+ {"version":3,"sources":["InternalMenu.tsx"],"names":["React","isHTMLElement","isNonNullable","isNullable","isKeyArrowDown","isKeyArrowUp","isKeyEnter","ScrollContainer","isMenuItem","createPropsGetter","ThemeContext","cx","getRootNode","rootNode","getDOMRect","styles","isActiveElement","addIconPaddingIfPartOfMenu","InternalMenuDataTids","root","InternalMenu","getProps","defaultProps","state","highlightedIndex","maxHeight","scrollState","renderHeader","el","header","fixedHeader","props","renderFooter","footer","fixedFooter","focusOnRootElement","focus","shouldRecalculateMaxHeight","prevProps","children","prevMaxHeight","prevHeader","prevFooter","prevChildrenCount","Children","count","calculateMaxHeight","parsedMaxHeight","window","rootElementMaxHeight","getComputedStyle","parseFloat","calculatedMaxHeight","height","setState","setInitialSelection","i","initialSelectedItemIndex","moveDown","refScrollContainer","scrollContainer","scrollToSelected","highlighted","HTMLElement","scrollTo","highlightItem","index","unhighlight","moveUp","move","handleKeyDown","e","onKeyDown","defaultPrevented","preventDefault","onClick","handleScrollStateChange","componentDidMount","componentDidUpdate","render","theme","renderMain","enableIconPadding","toArray","some","x","isValidElement","icon","isEmpty","hasShadow","width","preventWindowScroll","shadow","setRootNode","map","child","type","modifiedChild","highlight","ref","originalRef","menuItem","refHighlighted","cloneElement","select","bind","onMouseEnter","event","onMouseLeave","current","shouldHandleHref","item","childrenToArray","href","target","open","location","onItemClick","step","cyclicSelection","length","filter","PureComponent","__KONTUR_REACT_UI__","ret","forEach","push"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport { isHTMLElement } from '../../lib/SSRSafe';\nimport { isNonNullable, isNullable } from '../../lib/utils';\nimport { isKeyArrowDown, isKeyArrowUp, isKeyEnter } from '../../lib/events/keyboard/identifiers';\nimport { ScrollContainer, ScrollContainerScrollState } from '../../components/ScrollContainer';\nimport { isMenuItem, MenuItem, MenuItemProps } from '../../components/MenuItem';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\nimport { Nullable } from '../../typings/utility-types';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { getDOMRect } from '../../lib/dom/getDOMRect';\n\nimport { styles } from './InternalMenu.styles';\nimport { isActiveElement } from './isActiveElement';\nimport { addIconPaddingIfPartOfMenu } from './addIconPaddingIfPartOfMenu';\n\ninterface MenuProps {\n children?: React.ReactNode;\n hasShadow?: boolean;\n /**\n * Максимальная высота применяется только для скролл контейнера\n *\n * Высота `header` и `footer` в нее не включены\n */\n maxHeight?: number | string;\n onItemClick?: (event: React.SyntheticEvent<HTMLElement>) => void;\n width?: number | string;\n preventWindowScroll?: boolean;\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void;\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n // Циклический перебор айтемов меню (по-дефолтну включен)\n cyclicSelection?: boolean;\n initialSelectedItemIndex?: number;\n}\n\ninterface MenuState {\n highlightedIndex: number;\n maxHeight: number | string;\n scrollState: ScrollContainerScrollState;\n}\n\nexport const InternalMenuDataTids = {\n root: 'InternalMenu__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n MenuProps,\n 'width' | 'maxHeight' | 'hasShadow' | 'preventWindowScroll' | 'cyclicSelection' | 'initialSelectedItemIndex'\n >\n>;\n\n@rootNode\nexport class InternalMenu extends React.PureComponent<MenuProps, MenuState> {\n public static __KONTUR_REACT_UI__ = 'InternalMenu';\n\n public static defaultProps: DefaultProps = {\n width: 'auto',\n maxHeight: 300,\n hasShadow: true,\n preventWindowScroll: true,\n cyclicSelection: true,\n initialSelectedItemIndex: -1,\n };\n\n private getProps = createPropsGetter(InternalMenu.defaultProps);\n\n public state: MenuState = {\n highlightedIndex: -1,\n maxHeight: this.getProps().maxHeight || 'none',\n scrollState: 'top',\n };\n\n private theme!: Theme;\n private scrollContainer: Nullable<ScrollContainer>;\n private highlighted: Nullable<MenuItem>;\n private setRootNode!: TSetRootNode;\n private header: Nullable<HTMLDivElement>;\n private footer: Nullable<HTMLDivElement>;\n\n public componentDidMount() {\n this.setInitialSelection();\n this.calculateMaxHeight();\n }\n\n public componentDidUpdate(prevProps: MenuProps) {\n if (this.shouldRecalculateMaxHeight(prevProps)) {\n this.calculateMaxHeight();\n }\n\n if (prevProps.maxHeight !== this.getProps().maxHeight) {\n this.setState({\n maxHeight: this.props.maxHeight || 'none',\n });\n }\n }\n\n public focus() {\n this.focusOnRootElement();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const enableIconPadding = React.Children.toArray(this.props.children).some(\n (x) => React.isValidElement(x) && x.props.icon,\n );\n\n if (this.isEmpty()) {\n return null;\n }\n const { hasShadow, width, maxHeight, preventWindowScroll } = this.getProps();\n\n return (\n <div\n data-tid={InternalMenuDataTids.root}\n className={cx({\n [styles.root(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow,\n })}\n style={{\n width,\n maxHeight: this.state.maxHeight,\n }}\n onKeyDown={this.handleKeyDown}\n ref={this.setRootNode}\n tabIndex={0}\n >\n {this.props.header ? this.renderHeader() : null}\n <ScrollContainer\n ref={this.refScrollContainer}\n maxHeight={maxHeight}\n preventWindowScroll={preventWindowScroll}\n onScrollStateChange={this.handleScrollStateChange}\n >\n {React.Children.map(this.props.children, (child, index) => {\n if (typeof child === 'string' || typeof child === 'number' || isNullable(child)) {\n return child;\n }\n if (React.isValidElement(child) && typeof child.type === 'string') {\n return child;\n }\n\n const modifiedChild = addIconPaddingIfPartOfMenu(child, enableIconPadding);\n\n if (isActiveElement(modifiedChild)) {\n const highlight = this.state.highlightedIndex === index;\n\n let ref = modifiedChild.ref;\n const originalRef = ref;\n if (highlight) {\n ref = (menuItem) => this.refHighlighted(originalRef, menuItem);\n }\n\n return React.cloneElement<MenuItemProps, MenuItem>(modifiedChild, {\n ref,\n state: highlight ? 'hover' : modifiedChild.props.state,\n onClick: this.select.bind(this, index, false),\n onMouseEnter: (event) => {\n this.highlightItem(index);\n if (isMenuItem(modifiedChild) && modifiedChild.props.onMouseEnter) {\n modifiedChild.props.onMouseEnter(event);\n }\n },\n onMouseLeave: (event) => {\n this.unhighlight();\n if (isMenuItem(modifiedChild) && modifiedChild.props.onMouseLeave) {\n modifiedChild.props.onMouseLeave(event);\n }\n },\n });\n }\n\n return modifiedChild;\n })}\n </ScrollContainer>\n {this.props.footer ? this.renderFooter() : null}\n </div>\n );\n }\n\n private renderHeader = () => {\n return (\n <div\n ref={(el) => (this.header = el)}\n className={cx({\n [styles.header()]: true,\n [styles.fixedHeader()]: this.state.scrollState !== 'top',\n })}\n >\n {this.props.header}\n </div>\n );\n };\n\n private renderFooter = () => {\n return (\n <div\n ref={(el) => (this.footer = el)}\n className={cx({\n [styles.footer()]: true,\n [styles.fixedFooter()]: this.state.scrollState !== 'bottom',\n })}\n >\n {this.props.footer}\n </div>\n );\n };\n\n private focusOnRootElement = (): void => {\n const rootNode = getRootNode(this);\n if (isHTMLElement(rootNode)) {\n rootNode?.focus();\n }\n };\n\n private shouldRecalculateMaxHeight = (prevProps: MenuProps): boolean => {\n const { header, footer, children } = this.props;\n const maxHeight = this.getProps().maxHeight;\n const prevMaxHeight = prevProps.maxHeight;\n const prevHeader = prevProps.header;\n const prevFooter = prevProps.footer;\n const prevChildrenCount = React.Children.count(prevProps.children);\n\n return (\n maxHeight !== prevMaxHeight ||\n footer !== prevFooter ||\n header !== prevHeader ||\n React.Children.count(children) !== prevChildrenCount\n );\n };\n\n private calculateMaxHeight = () => {\n const maxHeight = this.getProps().maxHeight;\n let parsedMaxHeight = maxHeight;\n const rootNode = getRootNode(this);\n\n if (typeof maxHeight === 'string' && typeof window !== 'undefined' && rootNode) {\n const rootElementMaxHeight = window.getComputedStyle(rootNode).maxHeight;\n\n if (rootElementMaxHeight) {\n parsedMaxHeight = parseFloat(rootElementMaxHeight);\n }\n }\n\n const calculatedMaxHeight =\n typeof parsedMaxHeight === 'number'\n ? parsedMaxHeight +\n ((this.header && getDOMRect(this.header).height) || 0) +\n ((this.footer && getDOMRect(this.footer).height) || 0)\n : maxHeight;\n\n this.setState({\n maxHeight: calculatedMaxHeight || 'none',\n });\n };\n\n private setInitialSelection = () => {\n for (let i = this.getProps().initialSelectedItemIndex; i > -1; i--) {\n this.moveDown();\n }\n };\n\n private refScrollContainer = (scrollContainer: Nullable<ScrollContainer>) => {\n this.scrollContainer = scrollContainer;\n };\n\n private refHighlighted(\n originalRef: string | ((instance: MenuItem | null) => void) | React.RefObject<MenuItem> | null | undefined,\n menuItem: MenuItem | null,\n ) {\n this.highlighted = menuItem;\n\n if (!originalRef || typeof originalRef === 'string') {\n return;\n }\n\n if (typeof originalRef === 'function') {\n originalRef(menuItem);\n } else if (typeof originalRef === 'object') {\n // @ts-ignore see issue https://github.com/DefinitelyTyped/DefinitelyTyped/issues/31065\n originalRef.current = menuItem;\n }\n }\n\n private scrollToSelected = () => {\n if (this.scrollContainer && this.highlighted) {\n const rootNode = getRootNode(this.highlighted);\n // TODO: Remove this check once IF-647 is resolved\n if (rootNode instanceof HTMLElement) {\n this.scrollContainer.scrollTo(rootNode);\n }\n }\n };\n\n private select(index: number, shouldHandleHref: boolean, event: React.SyntheticEvent<HTMLElement>): boolean {\n const item = childrenToArray(this.props.children)[index];\n\n if (isActiveElement(item)) {\n if (shouldHandleHref && item.props.href) {\n if (item.props.target) {\n window.open(item.props.href, item.props.target);\n } else {\n location.href = item.props.href;\n }\n }\n if (item.props.onClick) {\n item.props.onClick(event as React.MouseEvent<HTMLElement>);\n }\n if (this.props.onItemClick) {\n this.props.onItemClick(event);\n }\n return true;\n }\n return false;\n }\n\n private highlightItem = (index: number): void => {\n this.setState({ highlightedIndex: index });\n\n const rootNode = getRootNode(this);\n if (isHTMLElement(rootNode)) {\n rootNode?.focus();\n }\n };\n\n private unhighlight = () => {\n this.setState({ highlightedIndex: -1 });\n };\n\n private move(step: number) {\n this.setState((state, props) => {\n const children = childrenToArray(props.children);\n if (!children.some(isActiveElement)) {\n return null;\n }\n let index = state.highlightedIndex;\n do {\n index += step;\n if (!this.getProps().cyclicSelection && (index < 0 || index > children.length)) {\n return null;\n }\n\n if (index < 0) {\n index = children.length - 1;\n } else if (index > children.length) {\n index = 0;\n }\n\n const child = children[index];\n if (isActiveElement(child)) {\n return { highlightedIndex: index };\n }\n } while (index !== state.highlightedIndex);\n return null;\n }, this.scrollToSelected);\n }\n\n private moveUp = () => {\n this.move(-1);\n };\n\n private moveDown = () => {\n this.move(1);\n };\n\n private isEmpty() {\n const { children } = this.props;\n return !children || !childrenToArray(children).filter(isNonNullable).length;\n }\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>): void => {\n if (typeof this.props.onKeyDown === 'function') {\n this.props.onKeyDown(e);\n }\n\n if (e.defaultPrevented) {\n return;\n }\n\n if (isKeyArrowUp(e)) {\n e.preventDefault();\n this.moveUp();\n } else if (isKeyArrowDown(e)) {\n e.preventDefault();\n this.moveDown();\n } else if (isKeyEnter(e)) {\n if (this.highlighted && this.highlighted.props.onClick) {\n this.highlighted.props.onClick(e);\n }\n }\n };\n\n private handleScrollStateChange = (scrollState: ScrollContainerScrollState) => {\n if (this.state.scrollState !== scrollState) {\n this.setState({ scrollState });\n }\n };\n}\n\nfunction childrenToArray(children: React.ReactNode): React.ReactNode[] {\n const ret: React.ReactNode[] = [];\n // Use forEach instead of map to avoid cloning for key unifying.\n React.Children.forEach(children, (child) => {\n ret.push(child);\n });\n return ret;\n}\n"]}
@@ -26,16 +26,11 @@ interface MenuState {
26
26
  export declare const InternalMenuDataTids: {
27
27
  readonly root: "InternalMenu__root";
28
28
  };
29
+ declare type DefaultProps = Required<Pick<MenuProps, 'width' | 'maxHeight' | 'hasShadow' | 'preventWindowScroll' | 'cyclicSelection' | 'initialSelectedItemIndex'>>;
29
30
  export declare class InternalMenu extends React.PureComponent<MenuProps, MenuState> {
30
31
  static __KONTUR_REACT_UI__: string;
31
- static defaultProps: {
32
- width: string;
33
- maxHeight: number;
34
- hasShadow: boolean;
35
- preventWindowScroll: boolean;
36
- cyclicSelection: boolean;
37
- initialSelectedItemIndex: number;
38
- };
32
+ static defaultProps: DefaultProps;
33
+ private getProps;
39
34
  state: MenuState;
40
35
  private theme;
41
36
  private scrollContainer;
@@ -43,7 +38,6 @@ export declare class InternalMenu extends React.PureComponent<MenuProps, MenuSta
43
38
  private setRootNode;
44
39
  private header;
45
40
  private footer;
46
- private getProps;
47
41
  componentDidMount(): void;
48
42
  componentDidUpdate(prevProps: MenuProps): void;
49
43
  focus(): void;
@@ -5,7 +5,7 @@ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _temp
5
5
  import { css, memoizeStyle } from "../../../lib/theming/Emotion";
6
6
  export var styles = memoizeStyle({
7
7
  root: function root(t) {
8
- return css(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n overflow: auto;\n padding: 5px ", ";\n outline: none;\n background: ", ";\n "])), t.menuPaddingX, t.bgSecondary);
8
+ return css(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n overflow: auto;\n padding: 5px ", ";\n outline: none;\n box-sizing: content-box;\n background: ", ";\n "])), t.menuPaddingX, t.bgSecondary);
9
9
  },
10
10
  shadow: function shadow(t) {
11
11
  return css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n border: ", ";\n box-shadow: ", ";\n "])), t.menuBorder, t.menuShadow);
@@ -1 +1 @@
1
- {"version":3,"sources":["InternalMenu.styles.ts"],"names":["css","memoizeStyle","styles","root","t","menuPaddingX","bgSecondary","shadow","menuBorder","menuShadow","header","footer","fixedHeader","fixedFooter"],"mappings":"8MAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,2BAAlC;;;AAGA,OAAO,IAAMC,MAAM,GAAGD,YAAY,CAAC;AACjCE,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,WAAOJ,GAAP;;AAEiBI,IAAAA,CAAC,CAACC,YAFnB;;AAIgBD,IAAAA,CAAC,CAACE,WAJlB;;AAMD,GARgC;;AAUjCC,EAAAA,MAViC,kBAU1BH,CAV0B,EAUhB;AACf,WAAOJ,GAAP;AACYI,IAAAA,CAAC,CAACI,UADd;AAEgBJ,IAAAA,CAAC,CAACK,UAFlB;;AAID,GAfgC;;AAiBjCC,EAAAA,MAjBiC,oBAiBxB;AACP,WAAOV,GAAP;;;;;;;;;;AAUD,GA5BgC;;AA8BjCW,EAAAA,MA9BiC,oBA8BxB;AACP,WAAOX,GAAP;;;;;;;;;;AAUD,GAzCgC;;AA2CjCY,EAAAA,WA3CiC,yBA2CnB;AACZ,WAAOZ,GAAP;;;AAGD,GA/CgC;;AAiDjCa,EAAAA,WAjDiC,yBAiDnB;AACZ,WAAOb,GAAP;;;AAGD,GArDgC,EAAD,CAA3B","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n overflow: auto;\n padding: 5px ${t.menuPaddingX};\n outline: none;\n background: ${t.bgSecondary};\n `;\n },\n\n shadow(t: Theme) {\n return css`\n border: ${t.menuBorder};\n box-shadow: ${t.menuShadow};\n `;\n },\n\n header() {\n return css`\n top: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n footer() {\n return css`\n bottom: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n fixedHeader() {\n return css`\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n\n fixedFooter() {\n return css`\n box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n});\n"]}
1
+ {"version":3,"sources":["InternalMenu.styles.ts"],"names":["css","memoizeStyle","styles","root","t","menuPaddingX","bgSecondary","shadow","menuBorder","menuShadow","header","footer","fixedHeader","fixedFooter"],"mappings":"8MAAA,SAASA,GAAT,EAAcC,YAAd,QAAkC,2BAAlC;;;AAGA,OAAO,IAAMC,MAAM,GAAGD,YAAY,CAAC;AACjCE,EAAAA,IADiC,gBAC5BC,CAD4B,EAClB;AACb,WAAOJ,GAAP;;AAEiBI,IAAAA,CAAC,CAACC,YAFnB;;;AAKgBD,IAAAA,CAAC,CAACE,WALlB;;AAOD,GATgC;;AAWjCC,EAAAA,MAXiC,kBAW1BH,CAX0B,EAWhB;AACf,WAAOJ,GAAP;AACYI,IAAAA,CAAC,CAACI,UADd;AAEgBJ,IAAAA,CAAC,CAACK,UAFlB;;AAID,GAhBgC;;AAkBjCC,EAAAA,MAlBiC,oBAkBxB;AACP,WAAOV,GAAP;;;;;;;;;;AAUD,GA7BgC;;AA+BjCW,EAAAA,MA/BiC,oBA+BxB;AACP,WAAOX,GAAP;;;;;;;;;;AAUD,GA1CgC;;AA4CjCY,EAAAA,WA5CiC,yBA4CnB;AACZ,WAAOZ,GAAP;;;AAGD,GAhDgC;;AAkDjCa,EAAAA,WAlDiC,yBAkDnB;AACZ,WAAOb,GAAP;;;AAGD,GAtDgC,EAAD,CAA3B","sourcesContent":["import { css, memoizeStyle } from '../../lib/theming/Emotion';\nimport { Theme } from '../../lib/theming/Theme';\n\nexport const styles = memoizeStyle({\n root(t: Theme) {\n return css`\n overflow: auto;\n padding: 5px ${t.menuPaddingX};\n outline: none;\n box-sizing: content-box;\n background: ${t.bgSecondary};\n `;\n },\n\n shadow(t: Theme) {\n return css`\n border: ${t.menuBorder};\n box-shadow: ${t.menuShadow};\n `;\n },\n\n header() {\n return css`\n top: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n footer() {\n return css`\n bottom: -5px;\n position: relative;\n z-index: 1;\n width: 100%;\n overflow: hidden;\n line-height: 18px;\n box-sizing: border-box;\n padding: 6px 18px 7px 8px;\n `;\n },\n\n fixedHeader() {\n return css`\n box-shadow: 0 1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n\n fixedFooter() {\n return css`\n box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1);\n `;\n },\n});\n"]}
@@ -8,6 +8,7 @@ import { isNonNullable } from "../../../lib/utils";
8
8
  import { ThemeContext } from "../../../lib/theming/ThemeContext";
9
9
  import { MaskCharLowLine } from "../../MaskCharLowLine";
10
10
  import { cx } from "../../../lib/theming/Emotion";
11
+ import { createPropsGetter } from "../../../lib/createPropsGetter";
11
12
  import { styles } from "../MaskedInput.styles";
12
13
  export var MaskedInputDataTids = {
13
14
  root: 'MaskedInput__root'
@@ -19,6 +20,7 @@ export var MaskedInput = /*#__PURE__*/function (_React$PureComponent) {
19
20
  var _this;
20
21
 
21
22
  _this = _React$PureComponent.call(this, _props) || this;
23
+ _this.getProps = createPropsGetter(MaskedInput.defaultProps);
22
24
  _this.input = null;
23
25
  _this.reactInputMask = null;
24
26
 
@@ -47,7 +49,8 @@ export var MaskedInput = /*#__PURE__*/function (_React$PureComponent) {
47
49
  _this.handleUnexpectedInput();
48
50
  } else {
49
51
  _this.setState({
50
- value: event.target.value
52
+ value: event.target.value,
53
+ originValue: event.target.value
51
54
  });
52
55
 
53
56
  if (_this.props.onValueChange) {
@@ -81,11 +84,12 @@ export var MaskedInput = /*#__PURE__*/function (_React$PureComponent) {
81
84
  };
82
85
 
83
86
  _this.preprocess = function (newState, oldState, userInput, options) {
84
- var visibleMaskChars = new Array(options.mask.length).fill(_this.props.maskChar);
87
+ var visibleMaskChars = new Array(options.mask.length).fill(_this.getProps().maskChar);
85
88
 
86
89
  if (newState.value !== oldState.value && userInput === null) {
87
90
  _this.setState({
88
- value: newState.value
91
+ value: newState.value,
92
+ originValue: newState.value
89
93
  });
90
94
  }
91
95
 
@@ -121,6 +125,7 @@ export var MaskedInput = /*#__PURE__*/function (_React$PureComponent) {
121
125
 
122
126
  _this.state = {
123
127
  value: _this.getValue(_props),
128
+ originValue: _this.getValue(_props),
124
129
  emptyValue: '',
125
130
  focused: false
126
131
  };
@@ -168,14 +173,15 @@ export var MaskedInput = /*#__PURE__*/function (_React$PureComponent) {
168
173
 
169
174
  var _this$state = this.state,
170
175
  emptyValue = _this$state.emptyValue,
171
- value = _this$state.value;
176
+ value = _this$state.value,
177
+ originValue = _this$state.originValue;
172
178
  var leftHelper = (style == null ? void 0 : style.textAlign) !== 'right' && /*#__PURE__*/React.createElement("span", {
173
179
  style: {
174
180
  color: 'transparent'
175
181
  }
176
- }, emptyValue.slice(0, value.length));
182
+ }, emptyValue.slice(0, originValue.length));
177
183
  var leftClass = (style == null ? void 0 : style.textAlign) !== 'right' && styles.inputMaskLeft();
178
- var rightHelper = emptyValue.slice(value.length).split('').map(function (_char, i) {
184
+ var rightHelper = emptyValue.slice(originValue.length).split('').map(function (_char, i) {
179
185
  return _char === '_' ? /*#__PURE__*/React.createElement(MaskCharLowLine, {
180
186
  key: i
181
187
  }) : _char;
@@ -1 +1 @@
1
- {"version":3,"sources":["MaskedInput.tsx"],"names":["React","ReactInputMask","isNonNullable","ThemeContext","MaskCharLowLine","cx","styles","MaskedInputDataTids","root","MaskedInput","props","input","reactInputMask","getValue","value","toString","defaultValue","refInput","refMaskedInput","handleChange","event","target","state","handleUnexpectedInput","setState","onValueChange","onChange","handleFocus","focused","onFocus","handleBlur","onBlur","preprocess","newState","oldState","userInput","options","visibleMaskChars","Array","mask","length","fill","maskChar","split","forEach","char","index","permanents","includes","emptyValue","join","isMaskVisible","alwaysShowMask","onUnexpectedInput","componentDidMount","forceUpdate","componentDidUpdate","prevProps","render","theme","renderMain","hasLeftIcon","hasRightIcon","maxLength","style","inputProps","leftHelper","textAlign","color","slice","leftClass","inputMaskLeft","rightHelper","map","_char","i","container","inputMask","PureComponent","__KONTUR_REACT_UI__","defaultProps"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactInputMask, { InputState, MaskOptions } from 'react-input-mask';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MaskCharLowLine } from '../MaskCharLowLine';\nimport { cx } from '../../lib/theming/Emotion';\n\nimport { styles } from './MaskedInput.styles';\n\nexport interface MaskedInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n mask: string;\n maskChar: string | null;\n formatChars?: { [key: string]: string };\n alwaysShowMask?: boolean;\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n onUnexpectedInput?: (value: string) => void;\n onValueChange?: (value: string) => void;\n}\n\ninterface MaskedInputState {\n value: string;\n emptyValue: string;\n focused: boolean;\n}\n\nexport const MaskedInputDataTids = {\n root: 'MaskedInput__root',\n} as const;\n\nexport class MaskedInput extends React.PureComponent<MaskedInputProps, MaskedInputState> {\n public static __KONTUR_REACT_UI__ = 'MaskedInput';\n\n public static defaultProps: Partial<MaskedInputProps> = {\n maskChar: '_',\n };\n\n public input: HTMLInputElement | null = null;\n private theme!: Theme;\n private reactInputMask: ReactInputMask | null = null;\n\n public constructor(props: MaskedInputProps) {\n super(props);\n\n this.state = {\n value: this.getValue(props),\n emptyValue: '',\n focused: false,\n };\n }\n\n public componentDidMount() {\n if (this.reactInputMask) {\n // FIXME: принудительно вызываем beforeMaskedValueChange, чтобы получить emptyValue\n this.reactInputMask.forceUpdate();\n }\n }\n\n public componentDidUpdate(prevProps: MaskedInputProps) {\n if (this.props.value !== prevProps.value) {\n this.setState({\n value: this.props.value ? this.props.value.toString() : '',\n });\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n maskChar,\n alwaysShowMask,\n hasLeftIcon,\n hasRightIcon,\n maxLength,\n onValueChange,\n onUnexpectedInput,\n defaultValue,\n style,\n ...inputProps\n } = this.props;\n const { emptyValue, value } = this.state;\n\n const leftHelper = style?.textAlign !== 'right' && (\n <span style={{ color: 'transparent' }}>{emptyValue.slice(0, value.length)}</span>\n );\n const leftClass = style?.textAlign !== 'right' && styles.inputMaskLeft();\n\n const rightHelper = emptyValue\n .slice(value.length)\n .split('')\n .map((_char, i) => (_char === '_' ? <MaskCharLowLine key={i} /> : _char));\n\n return (\n <span data-tid={MaskedInputDataTids.root} className={styles.container()} x-ms-format-detection=\"none\">\n <ReactInputMask\n {...inputProps}\n maskChar={null}\n beforeMaskedValueChange={this.preprocess}\n alwaysShowMask={false}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n value={value}\n inputRef={this.refInput}\n ref={this.refMaskedInput}\n style={{ ...style }}\n />\n {this.isMaskVisible() && (\n <span className={cx(styles.inputMask(this.theme), leftClass)}>\n {leftHelper}\n {rightHelper}\n </span>\n )}\n </span>\n );\n }\n\n private getValue = (props: MaskedInputProps): string => {\n if (isNonNullable(props.value)) {\n return props.value.toString();\n }\n\n if (isNonNullable(props.defaultValue)) {\n return props.defaultValue.toString();\n }\n\n return '';\n };\n\n private refInput = (input: HTMLInputElement | null) => {\n this.input = input;\n };\n\n private refMaskedInput = (reactInputMask: ReactInputMask) => {\n this.reactInputMask = reactInputMask;\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === this.state.value) {\n this.handleUnexpectedInput();\n } else {\n this.setState({ value: event.target.value });\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private preprocess = (\n newState: InputState,\n oldState: InputState,\n userInput: string,\n options: MaskOptions & Pick<MaskedInputProps, 'mask'>,\n ) => {\n const visibleMaskChars = new Array(options.mask.length).fill(this.props.maskChar);\n\n if (newState.value !== oldState.value && userInput === null) {\n this.setState({\n value: newState.value,\n });\n }\n\n options.mask.split('').forEach((char: string, index: number) => {\n if (options.permanents.includes(index)) {\n visibleMaskChars[index] = char;\n }\n\n if (newState.value[index]) {\n visibleMaskChars[index] = newState.value[index];\n }\n });\n\n const emptyValue = visibleMaskChars.join('');\n\n if (this.state.emptyValue !== emptyValue) {\n this.setState({\n emptyValue,\n });\n }\n\n return newState;\n };\n\n private isMaskVisible = () => this.props.alwaysShowMask || this.state.focused;\n\n private handleUnexpectedInput = () => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(this.state.value);\n }\n };\n}\n"]}
1
+ {"version":3,"sources":["MaskedInput.tsx"],"names":["React","ReactInputMask","isNonNullable","ThemeContext","MaskCharLowLine","cx","createPropsGetter","styles","MaskedInputDataTids","root","MaskedInput","props","getProps","defaultProps","input","reactInputMask","getValue","value","toString","defaultValue","refInput","refMaskedInput","handleChange","event","target","state","handleUnexpectedInput","setState","originValue","onValueChange","onChange","handleFocus","focused","onFocus","handleBlur","onBlur","preprocess","newState","oldState","userInput","options","visibleMaskChars","Array","mask","length","fill","maskChar","split","forEach","char","index","permanents","includes","emptyValue","join","isMaskVisible","alwaysShowMask","onUnexpectedInput","componentDidMount","forceUpdate","componentDidUpdate","prevProps","render","theme","renderMain","hasLeftIcon","hasRightIcon","maxLength","style","inputProps","leftHelper","textAlign","color","slice","leftClass","inputMaskLeft","rightHelper","map","_char","i","container","inputMask","PureComponent","__KONTUR_REACT_UI__"],"mappings":"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","sourcesContent":["import React from 'react';\nimport ReactInputMask, { InputState, MaskOptions } from 'react-input-mask';\n\nimport { isNonNullable } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { MaskCharLowLine } from '../MaskCharLowLine';\nimport { cx } from '../../lib/theming/Emotion';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { styles } from './MaskedInput.styles';\n\nexport interface MaskedInputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n mask: string;\n maskChar?: string | null;\n formatChars?: { [key: string]: string };\n alwaysShowMask?: boolean;\n hasLeftIcon?: boolean;\n hasRightIcon?: boolean;\n onUnexpectedInput?: (value: string) => void;\n onValueChange?: (value: string) => void;\n}\n\ninterface MaskedInputState {\n value: string;\n\n // Users can unmask value themselves. In these cases we take origin value length\n originValue: string;\n\n emptyValue: string;\n focused: boolean;\n}\n\ntype DefaultProps = Required<Pick<MaskedInputProps, 'maskChar'>>;\n\nexport const MaskedInputDataTids = {\n root: 'MaskedInput__root',\n} as const;\n\nexport class MaskedInput extends React.PureComponent<MaskedInputProps, MaskedInputState> {\n public static __KONTUR_REACT_UI__ = 'MaskedInput';\n\n public static defaultProps: DefaultProps = {\n maskChar: '_',\n };\n\n private getProps = createPropsGetter(MaskedInput.defaultProps);\n\n public input: HTMLInputElement | null = null;\n private theme!: Theme;\n private reactInputMask: ReactInputMask | null = null;\n\n public constructor(props: MaskedInputProps) {\n super(props);\n\n this.state = {\n value: this.getValue(props),\n originValue: this.getValue(props),\n emptyValue: '',\n focused: false,\n };\n }\n\n public componentDidMount() {\n if (this.reactInputMask) {\n // FIXME: принудительно вызываем beforeMaskedValueChange, чтобы получить emptyValue\n this.reactInputMask.forceUpdate();\n }\n }\n\n public componentDidUpdate(prevProps: MaskedInputProps) {\n if (this.props.value !== prevProps.value) {\n this.setState({\n value: this.props.value ? this.props.value.toString() : '',\n });\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n const {\n maskChar,\n alwaysShowMask,\n hasLeftIcon,\n hasRightIcon,\n maxLength,\n onValueChange,\n onUnexpectedInput,\n defaultValue,\n style,\n ...inputProps\n } = this.props;\n const { emptyValue, value, originValue } = this.state;\n\n const leftHelper = style?.textAlign !== 'right' && (\n <span style={{ color: 'transparent' }}>{emptyValue.slice(0, originValue.length)}</span>\n );\n const leftClass = style?.textAlign !== 'right' && styles.inputMaskLeft();\n\n const rightHelper = emptyValue\n .slice(originValue.length)\n .split('')\n .map((_char, i) => (_char === '_' ? <MaskCharLowLine key={i} /> : _char));\n\n return (\n <span data-tid={MaskedInputDataTids.root} className={styles.container()} x-ms-format-detection=\"none\">\n <ReactInputMask\n {...inputProps}\n maskChar={null}\n beforeMaskedValueChange={this.preprocess}\n alwaysShowMask={false}\n onChange={this.handleChange}\n onFocus={this.handleFocus}\n onBlur={this.handleBlur}\n value={value}\n inputRef={this.refInput}\n ref={this.refMaskedInput}\n style={{ ...style }}\n />\n {this.isMaskVisible() && (\n <span className={cx(styles.inputMask(this.theme), leftClass)}>\n {leftHelper}\n {rightHelper}\n </span>\n )}\n </span>\n );\n }\n\n private getValue = (props: MaskedInputProps): string => {\n if (isNonNullable(props.value)) {\n return props.value.toString();\n }\n\n if (isNonNullable(props.defaultValue)) {\n return props.defaultValue.toString();\n }\n\n return '';\n };\n\n private refInput = (input: HTMLInputElement | null) => {\n this.input = input;\n };\n\n private refMaskedInput = (reactInputMask: ReactInputMask) => {\n this.reactInputMask = reactInputMask;\n };\n\n private handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n if (event.target.value === this.state.value) {\n this.handleUnexpectedInput();\n } else {\n this.setState({ value: event.target.value, originValue: event.target.value });\n if (this.props.onValueChange) {\n this.props.onValueChange(event.target.value);\n }\n if (this.props.onChange) {\n this.props.onChange(event);\n }\n }\n };\n\n private handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: true });\n\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n this.setState({ focused: false });\n\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private preprocess = (\n newState: InputState,\n oldState: InputState,\n userInput: string,\n options: MaskOptions & Pick<MaskedInputProps, 'mask'>,\n ) => {\n const visibleMaskChars = new Array(options.mask.length).fill(this.getProps().maskChar);\n\n if (newState.value !== oldState.value && userInput === null) {\n this.setState({\n value: newState.value,\n originValue: newState.value,\n });\n }\n\n options.mask.split('').forEach((char: string, index: number) => {\n if (options.permanents.includes(index)) {\n visibleMaskChars[index] = char;\n }\n\n if (newState.value[index]) {\n visibleMaskChars[index] = newState.value[index];\n }\n });\n\n const emptyValue = visibleMaskChars.join('');\n\n if (this.state.emptyValue !== emptyValue) {\n this.setState({\n emptyValue,\n });\n }\n\n return newState;\n };\n\n private isMaskVisible = () => this.props.alwaysShowMask || this.state.focused;\n\n private handleUnexpectedInput = () => {\n if (this.props.onUnexpectedInput) {\n this.props.onUnexpectedInput(this.state.value);\n }\n };\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  export interface MaskedInputProps extends React.InputHTMLAttributes<HTMLInputElement> {
3
3
  mask: string;
4
- maskChar: string | null;
4
+ maskChar?: string | null;
5
5
  formatChars?: {
6
6
  [key: string]: string;
7
7
  };
@@ -13,15 +13,18 @@ export interface MaskedInputProps extends React.InputHTMLAttributes<HTMLInputEle
13
13
  }
14
14
  interface MaskedInputState {
15
15
  value: string;
16
+ originValue: string;
16
17
  emptyValue: string;
17
18
  focused: boolean;
18
19
  }
20
+ declare type DefaultProps = Required<Pick<MaskedInputProps, 'maskChar'>>;
19
21
  export declare const MaskedInputDataTids: {
20
22
  readonly root: "MaskedInput__root";
21
23
  };
22
24
  export declare class MaskedInput extends React.PureComponent<MaskedInputProps, MaskedInputState> {
23
25
  static __KONTUR_REACT_UI__: string;
24
- static defaultProps: Partial<MaskedInputProps>;
26
+ static defaultProps: DefaultProps;
27
+ private getProps;
25
28
  input: HTMLInputElement | null;
26
29
  private theme;
27
30
  private reactInputMask;
@@ -11,6 +11,7 @@ import { cx } from "../../../lib/theming/Emotion";
11
11
  import { getRootNode, rootNode } from "../../../lib/rootNode";
12
12
  import { addIconPaddingIfPartOfMenu } from "../../InternalMenu/addIconPaddingIfPartOfMenu";
13
13
  import { isIE11 } from "../../../lib/client";
14
+ import { createPropsGetter } from "../../../lib/createPropsGetter";
14
15
  import { styles } from "../Menu.styles";
15
16
  import { isActiveElement } from "../isActiveElement";
16
17
  export var MenuDataTids = {
@@ -27,6 +28,7 @@ export var Menu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_R
27
28
  }
28
29
 
29
30
  _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
31
+ _this.getProps = createPropsGetter(Menu.defaultProps);
30
32
  _this.state = {
31
33
  highlightedIndex: -1
32
34
  };
@@ -74,7 +76,12 @@ export var Menu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_R
74
76
 
75
77
  _this.scrollToSelected = function () {
76
78
  if (_this.scrollContainer && _this.highlighted) {
77
- _this.scrollContainer.scrollTo(getRootNode(_this.highlighted));
79
+ var _rootNode = getRootNode(_this.highlighted); // TODO: Remove this check once IF-647 is resolved
80
+
81
+
82
+ if (_rootNode instanceof HTMLElement) {
83
+ _this.scrollContainer.scrollTo(_rootNode);
84
+ }
78
85
  }
79
86
  };
80
87
 
@@ -173,15 +180,20 @@ export var Menu = rootNode(_class = (_temp = _class2 = /*#__PURE__*/function (_R
173
180
  return null;
174
181
  }
175
182
 
183
+ var _this$getProps = this.getProps(),
184
+ hasShadow = _this$getProps.hasShadow,
185
+ maxHeight = _this$getProps.maxHeight,
186
+ preventWindowScroll = _this$getProps.preventWindowScroll;
187
+
176
188
  return /*#__PURE__*/React.createElement("div", {
177
189
  "data-tid": MenuDataTids.root,
178
- className: cx(getAlignRightClass(this.props), (_cx = {}, _cx[styles.root(this.theme)] = true, _cx[styles.shadow(this.theme)] = this.props.hasShadow, _cx)),
190
+ className: cx(getAlignRightClass(this.props), (_cx = {}, _cx[styles.root(this.theme)] = true, _cx[styles.shadow(this.theme)] = hasShadow, _cx)),
179
191
  style: getStyle(this.props),
180
192
  ref: this.setRootNode
181
193
  }, /*#__PURE__*/React.createElement(ScrollContainer, {
182
194
  ref: this.refScrollContainer,
183
- maxHeight: this.props.maxHeight,
184
- preventWindowScroll: this.props.preventWindowScroll,
195
+ maxHeight: maxHeight,
196
+ preventWindowScroll: preventWindowScroll,
185
197
  disabled: this.props.disableScrollContainer
186
198
  }, /*#__PURE__*/React.createElement("div", {
187
199
  className: styles.scrollContainer(this.theme)