@skbkontur/react-ui 4.2.0 → 4.3.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 (355) hide show
  1. package/CHANGELOG.md +42 -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 +15 -6
  21. package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
  22. package/cjs/components/CurrencyLabel/CurrencyLabel.d.ts +3 -9
  23. package/cjs/components/CurrencyLabel/CurrencyLabel.js +15 -15
  24. package/cjs/components/CurrencyLabel/CurrencyLabel.js.map +1 -1
  25. package/cjs/components/DateInput/DateInput.d.ts +8 -11
  26. package/cjs/components/DateInput/DateInput.js +11 -3
  27. package/cjs/components/DateInput/DateInput.js.map +1 -1
  28. package/cjs/components/DatePicker/DatePicker.d.ts +6 -8
  29. package/cjs/components/DatePicker/DatePicker.js +12 -6
  30. package/cjs/components/DatePicker/DatePicker.js.map +1 -1
  31. package/cjs/components/DropdownMenu/DropdownMenu.d.ts +5 -5
  32. package/cjs/components/DropdownMenu/DropdownMenu.js +9 -3
  33. package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
  34. package/cjs/components/FxInput/FxInput.d.ts +6 -6
  35. package/cjs/components/FxInput/FxInput.js +13 -10
  36. package/cjs/components/FxInput/FxInput.js.map +1 -1
  37. package/cjs/components/Gapped/Gapped.d.ts +7 -8
  38. package/cjs/components/Gapped/Gapped.js +12 -6
  39. package/cjs/components/Gapped/Gapped.js.map +1 -1
  40. package/cjs/components/GlobalLoader/GlobalLoader.d.ts +7 -14
  41. package/cjs/components/GlobalLoader/GlobalLoader.js +13 -9
  42. package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
  43. package/cjs/components/Hint/Hint.d.ts +7 -11
  44. package/cjs/components/Hint/Hint.js +15 -5
  45. package/cjs/components/Hint/Hint.js.map +1 -1
  46. package/cjs/components/Input/Input.d.ts +4 -3
  47. package/cjs/components/Input/Input.js +7 -4
  48. package/cjs/components/Input/Input.js.map +1 -1
  49. package/cjs/components/Kebab/Kebab.d.ts +7 -11
  50. package/cjs/components/Kebab/Kebab.js +14 -5
  51. package/cjs/components/Kebab/Kebab.js.map +1 -1
  52. package/cjs/components/Link/Link.d.ts +4 -4
  53. package/cjs/components/Link/Link.js +11 -4
  54. package/cjs/components/Link/Link.js.map +1 -1
  55. package/cjs/components/Loader/Loader.d.ts +7 -4
  56. package/cjs/components/Loader/Loader.js +14 -4
  57. package/cjs/components/Loader/Loader.js.map +1 -1
  58. package/cjs/components/Modal/Modal.d.ts +4 -3
  59. package/cjs/components/Modal/Modal.js +8 -3
  60. package/cjs/components/Modal/Modal.js.map +1 -1
  61. package/cjs/components/Modal/ModalFooter.js +1 -1
  62. package/cjs/components/Modal/ModalFooter.js.map +1 -1
  63. package/cjs/components/Modal/ModalHeader.js +1 -1
  64. package/cjs/components/Modal/ModalHeader.js.map +1 -1
  65. package/cjs/components/Paging/Paging.d.ts +6 -9
  66. package/cjs/components/Paging/Paging.js +15 -5
  67. package/cjs/components/Paging/Paging.js.map +1 -1
  68. package/cjs/components/Paging/PagingDefaultComponent.d.ts +1 -1
  69. package/cjs/components/Paging/PagingDefaultComponent.js.map +1 -1
  70. package/cjs/components/PasswordInput/PasswordInput.d.ts +4 -3
  71. package/cjs/components/PasswordInput/PasswordInput.js +8 -3
  72. package/cjs/components/PasswordInput/PasswordInput.js.map +1 -1
  73. package/cjs/components/Radio/Radio.d.ts +4 -3
  74. package/cjs/components/Radio/Radio.js +8 -3
  75. package/cjs/components/Radio/Radio.js.map +1 -1
  76. package/cjs/components/RadioGroup/RadioGroup.d.ts +2 -4
  77. package/cjs/components/RadioGroup/RadioGroup.js +4 -2
  78. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  79. package/cjs/components/ResponsiveLayout/useResponsiveLayout.js +1 -1
  80. package/cjs/components/ResponsiveLayout/useResponsiveLayout.js.map +1 -1
  81. package/cjs/components/ScrollContainer/ScrollContainer.d.ts +6 -7
  82. package/cjs/components/ScrollContainer/ScrollContainer.js +11 -5
  83. package/cjs/components/ScrollContainer/ScrollContainer.js.map +1 -1
  84. package/cjs/components/Select/Select.d.ts +3 -12
  85. package/cjs/components/Select/Select.js +6 -1
  86. package/cjs/components/Select/Select.js.map +1 -1
  87. package/cjs/components/Select/Select.styles.js +4 -4
  88. package/cjs/components/Select/Select.styles.js.map +1 -1
  89. package/cjs/components/SidePage/SidePage.d.ts +5 -6
  90. package/cjs/components/SidePage/SidePage.js +8 -1
  91. package/cjs/components/SidePage/SidePage.js.map +1 -1
  92. package/cjs/components/Spinner/Spinner.d.ts +4 -2
  93. package/cjs/components/Spinner/Spinner.js +9 -3
  94. package/cjs/components/Spinner/Spinner.js.map +1 -1
  95. package/cjs/components/Sticky/Sticky.d.ts +5 -4
  96. package/cjs/components/Sticky/Sticky.js +9 -2
  97. package/cjs/components/Sticky/Sticky.js.map +1 -1
  98. package/cjs/components/Tabs/Tab.d.ts +4 -4
  99. package/cjs/components/Tabs/Tab.js +11 -13
  100. package/cjs/components/Tabs/Tab.js.map +1 -1
  101. package/cjs/components/Tabs/Tabs.d.ts +4 -4
  102. package/cjs/components/Tabs/Tabs.js +12 -3
  103. package/cjs/components/Tabs/Tabs.js.map +1 -1
  104. package/cjs/components/Textarea/Textarea.d.ts +8 -10
  105. package/cjs/components/Textarea/Textarea.js +10 -6
  106. package/cjs/components/Textarea/Textarea.js.map +1 -1
  107. package/cjs/components/Toggle/Toggle.d.ts +5 -6
  108. package/cjs/components/Toggle/Toggle.js +10 -4
  109. package/cjs/components/Toggle/Toggle.js.map +1 -1
  110. package/cjs/components/TokenInput/TokenInput.d.ts +19 -16
  111. package/cjs/components/TokenInput/TokenInput.js +75 -57
  112. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  113. package/cjs/components/Tooltip/Tooltip.d.ts +11 -14
  114. package/cjs/components/Tooltip/Tooltip.js +26 -14
  115. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  116. package/cjs/components/TooltipMenu/TooltipMenu.d.ts +5 -4
  117. package/cjs/components/TooltipMenu/TooltipMenu.js +11 -5
  118. package/cjs/components/TooltipMenu/TooltipMenu.js.map +1 -1
  119. package/cjs/internal/BGRuler.d.ts +13 -15
  120. package/cjs/internal/BGRuler.js +16 -8
  121. package/cjs/internal/BGRuler.js.map +1 -1
  122. package/cjs/internal/Calendar/Calendar.d.ts +4 -13
  123. package/cjs/internal/Calendar/Calendar.js +10 -5
  124. package/cjs/internal/Calendar/Calendar.js.map +1 -1
  125. package/cjs/internal/Calendar/DayCellView.styles.js +1 -1
  126. package/cjs/internal/Calendar/DayCellView.styles.js.map +1 -1
  127. package/cjs/internal/Calendar/Month.js +16 -11
  128. package/cjs/internal/Calendar/Month.js.map +1 -1
  129. package/cjs/internal/ComponentCombinator.d.ts +6 -8
  130. package/cjs/internal/ComponentCombinator.js +6 -2
  131. package/cjs/internal/ComponentCombinator.js.map +1 -1
  132. package/cjs/internal/ComponentTable.d.ts +5 -6
  133. package/cjs/internal/ComponentTable.js +11 -2
  134. package/cjs/internal/ComponentTable.js.map +1 -1
  135. package/cjs/internal/CustomComboBox/ComboBoxMenu.d.ts +4 -4
  136. package/cjs/internal/CustomComboBox/ComboBoxMenu.js +7 -1
  137. package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
  138. package/cjs/internal/CustomComboBox/ComboBoxView.d.ts +4 -12
  139. package/cjs/internal/CustomComboBox/ComboBoxView.js +18 -10
  140. package/cjs/internal/CustomComboBox/ComboBoxView.js.map +1 -1
  141. package/cjs/internal/DateSelect/DateSelect.d.ts +4 -6
  142. package/cjs/internal/DateSelect/DateSelect.js +15 -9
  143. package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
  144. package/cjs/internal/DropdownContainer/DropdownContainer.d.ts +3 -6
  145. package/cjs/internal/DropdownContainer/DropdownContainer.js +8 -5
  146. package/cjs/internal/DropdownContainer/DropdownContainer.js.map +1 -1
  147. package/cjs/internal/InputLikeText/InputLikeText.d.ts +4 -3
  148. package/cjs/internal/InputLikeText/InputLikeText.js +7 -2
  149. package/cjs/internal/InputLikeText/InputLikeText.js.map +1 -1
  150. package/cjs/internal/InternalMenu/InternalMenu.d.ts +3 -9
  151. package/cjs/internal/InternalMenu/InternalMenu.js +16 -6
  152. package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
  153. package/cjs/internal/InternalMenu/InternalMenu.styles.js +2 -1
  154. package/cjs/internal/InternalMenu/InternalMenu.styles.js.map +1 -1
  155. package/cjs/internal/MaskedInput/MaskedInput.d.ts +4 -2
  156. package/cjs/internal/MaskedInput/MaskedInput.js +7 -2
  157. package/cjs/internal/MaskedInput/MaskedInput.js.map +1 -1
  158. package/cjs/internal/Menu/Menu.d.ts +4 -7
  159. package/cjs/internal/Menu/Menu.js +7 -1
  160. package/cjs/internal/Menu/Menu.js.map +1 -1
  161. package/cjs/internal/Popup/Popup.d.ts +10 -16
  162. package/cjs/internal/Popup/Popup.js +21 -7
  163. package/cjs/internal/Popup/Popup.js.map +1 -1
  164. package/cjs/internal/PopupMenu/PopupMenu.d.ts +8 -11
  165. package/cjs/internal/PopupMenu/PopupMenu.js +8 -1
  166. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  167. package/cjs/internal/RenderLayer/RenderLayer.d.ts +5 -3
  168. package/cjs/internal/RenderLayer/RenderLayer.js +15 -4
  169. package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
  170. package/cjs/internal/ThemePlayground/VariableValue.d.ts +5 -4
  171. package/cjs/internal/ThemePlayground/VariableValue.js +6 -1
  172. package/cjs/internal/ThemePlayground/VariableValue.js.map +1 -1
  173. package/cjs/internal/ZIndex/ZIndex.d.ts +7 -11
  174. package/cjs/internal/ZIndex/ZIndex.js +10 -3
  175. package/cjs/internal/ZIndex/ZIndex.js.map +1 -1
  176. package/cjs/lib/createPropsGetter.d.ts +2 -1
  177. package/cjs/lib/createPropsGetter.js +2 -0
  178. package/cjs/lib/createPropsGetter.js.map +1 -1
  179. package/components/Autocomplete/Autocomplete/Autocomplete.js +22 -12
  180. package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
  181. package/components/Autocomplete/Autocomplete.d.ts +9 -17
  182. package/components/Button/Button/Button.js +11 -5
  183. package/components/Button/Button/Button.js.map +1 -1
  184. package/components/Button/Button.d.ts +4 -5
  185. package/components/Button/Button.mixins/Button.mixins.js +1 -1
  186. package/components/Button/Button.mixins/Button.mixins.js.map +1 -1
  187. package/components/Button/Button.styles/Button.styles.js +18 -18
  188. package/components/Button/Button.styles/Button.styles.js.map +1 -1
  189. package/components/Center/Center/Center.js +7 -5
  190. package/components/Center/Center/Center.js.map +1 -1
  191. package/components/Center/Center.d.ts +4 -3
  192. package/components/Checkbox/Checkbox.md +48 -0
  193. package/components/ComboBox/ComboBox/ComboBox.js +3 -1
  194. package/components/ComboBox/ComboBox/ComboBox.js.map +1 -1
  195. package/components/ComboBox/ComboBox.d.ts +8 -13
  196. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +21 -18
  197. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
  198. package/components/CurrencyInput/CurrencyInput.d.ts +6 -9
  199. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js +21 -15
  200. package/components/CurrencyLabel/CurrencyLabel/CurrencyLabel.js.map +1 -1
  201. package/components/CurrencyLabel/CurrencyLabel.d.ts +3 -9
  202. package/components/DateInput/DateInput/DateInput.js +17 -4
  203. package/components/DateInput/DateInput/DateInput.js.map +1 -1
  204. package/components/DateInput/DateInput.d.ts +8 -11
  205. package/components/DatePicker/DatePicker/DatePicker.js +12 -9
  206. package/components/DatePicker/DatePicker/DatePicker.js.map +1 -1
  207. package/components/DatePicker/DatePicker.d.ts +6 -8
  208. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +8 -2
  209. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
  210. package/components/DropdownMenu/DropdownMenu.d.ts +5 -5
  211. package/components/FxInput/FxInput/FxInput.js +11 -9
  212. package/components/FxInput/FxInput/FxInput.js.map +1 -1
  213. package/components/FxInput/FxInput.d.ts +6 -6
  214. package/components/Gapped/Gapped/Gapped.js +17 -8
  215. package/components/Gapped/Gapped/Gapped.js.map +1 -1
  216. package/components/Gapped/Gapped.d.ts +7 -8
  217. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +35 -16
  218. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
  219. package/components/GlobalLoader/GlobalLoader.d.ts +7 -14
  220. package/components/Hint/Hint/Hint.js +30 -18
  221. package/components/Hint/Hint/Hint.js.map +1 -1
  222. package/components/Hint/Hint.d.ts +7 -11
  223. package/components/Input/Input/Input.js +9 -7
  224. package/components/Input/Input/Input.js.map +1 -1
  225. package/components/Input/Input.d.ts +4 -3
  226. package/components/Kebab/Kebab/Kebab.js +19 -8
  227. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  228. package/components/Kebab/Kebab.d.ts +7 -11
  229. package/components/Link/Link/Link.js +9 -6
  230. package/components/Link/Link/Link.js.map +1 -1
  231. package/components/Link/Link.d.ts +4 -4
  232. package/components/Loader/Loader/Loader.js +22 -17
  233. package/components/Loader/Loader/Loader.js.map +1 -1
  234. package/components/Loader/Loader.d.ts +7 -4
  235. package/components/Modal/Modal/Modal.js +3 -1
  236. package/components/Modal/Modal/Modal.js.map +1 -1
  237. package/components/Modal/Modal.d.ts +4 -3
  238. package/components/Modal/ModalFooter/ModalFooter.js +2 -2
  239. package/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
  240. package/components/Modal/ModalHeader/ModalHeader.js +2 -2
  241. package/components/Modal/ModalHeader/ModalHeader.js.map +1 -1
  242. package/components/Paging/Paging/Paging.js +24 -14
  243. package/components/Paging/Paging/Paging.js.map +1 -1
  244. package/components/Paging/Paging.d.ts +6 -9
  245. package/components/Paging/PagingDefaultComponent/PagingDefaultComponent.js.map +1 -1
  246. package/components/Paging/PagingDefaultComponent.d.ts +1 -1
  247. package/components/PasswordInput/PasswordInput/PasswordInput.js +7 -5
  248. package/components/PasswordInput/PasswordInput/PasswordInput.js.map +1 -1
  249. package/components/PasswordInput/PasswordInput.d.ts +4 -3
  250. package/components/Radio/Radio/Radio.js +7 -5
  251. package/components/Radio/Radio/Radio.js.map +1 -1
  252. package/components/Radio/Radio.d.ts +4 -3
  253. package/components/RadioGroup/RadioGroup/RadioGroup.js +10 -10
  254. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  255. package/components/RadioGroup/RadioGroup.d.ts +2 -4
  256. package/components/ResponsiveLayout/useResponsiveLayout/useResponsiveLayout.js +1 -1
  257. package/components/ResponsiveLayout/useResponsiveLayout/useResponsiveLayout.js.map +1 -1
  258. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js +10 -6
  259. package/components/ScrollContainer/ScrollContainer/ScrollContainer.js.map +1 -1
  260. package/components/ScrollContainer/ScrollContainer.d.ts +6 -7
  261. package/components/Select/Select/Select.js +4 -3
  262. package/components/Select/Select/Select.js.map +1 -1
  263. package/components/Select/Select.d.ts +3 -12
  264. package/components/Select/Select.styles/Select.styles.js +4 -4
  265. package/components/Select/Select.styles/Select.styles.js.map +1 -1
  266. package/components/SidePage/SidePage/SidePage.js +14 -9
  267. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  268. package/components/SidePage/SidePage.d.ts +5 -6
  269. package/components/Spinner/Spinner/Spinner.js +7 -5
  270. package/components/Spinner/Spinner/Spinner.js.map +1 -1
  271. package/components/Spinner/Spinner.d.ts +4 -2
  272. package/components/Sticky/Sticky/Sticky.js +7 -4
  273. package/components/Sticky/Sticky/Sticky.js.map +1 -1
  274. package/components/Sticky/Sticky.d.ts +5 -4
  275. package/components/Tabs/Tab/Tab.js +15 -7
  276. package/components/Tabs/Tab/Tab.js.map +1 -1
  277. package/components/Tabs/Tab.d.ts +4 -4
  278. package/components/Tabs/Tabs/Tabs.js +10 -8
  279. package/components/Tabs/Tabs/Tabs.js.map +1 -1
  280. package/components/Tabs/Tabs.d.ts +4 -4
  281. package/components/Textarea/Textarea/Textarea.js +19 -14
  282. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  283. package/components/Textarea/Textarea.d.ts +8 -10
  284. package/components/Toggle/Toggle/Toggle.js +12 -7
  285. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  286. package/components/Toggle/Toggle.d.ts +5 -6
  287. package/components/TokenInput/TokenInput/TokenInput.js +107 -77
  288. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  289. package/components/TokenInput/TokenInput.d.ts +19 -16
  290. package/components/Tooltip/Tooltip/Tooltip.js +55 -32
  291. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  292. package/components/Tooltip/Tooltip.d.ts +11 -14
  293. package/components/TooltipMenu/TooltipMenu/TooltipMenu.js +15 -13
  294. package/components/TooltipMenu/TooltipMenu/TooltipMenu.js.map +1 -1
  295. package/components/TooltipMenu/TooltipMenu.d.ts +5 -4
  296. package/internal/BGRuler/BGRuler.js +11 -6
  297. package/internal/BGRuler/BGRuler.js.map +1 -1
  298. package/internal/BGRuler.d.ts +13 -15
  299. package/internal/Calendar/Calendar/Calendar.js +11 -5
  300. package/internal/Calendar/Calendar/Calendar.js.map +1 -1
  301. package/internal/Calendar/Calendar.d.ts +4 -13
  302. package/internal/Calendar/DayCellView.styles/DayCellView.styles.js +1 -1
  303. package/internal/Calendar/DayCellView.styles/DayCellView.styles.js.map +1 -1
  304. package/internal/Calendar/Month/Month.js +20 -11
  305. package/internal/Calendar/Month/Month.js.map +1 -1
  306. package/internal/ComponentCombinator/ComponentCombinator.js +8 -5
  307. package/internal/ComponentCombinator/ComponentCombinator.js.map +1 -1
  308. package/internal/ComponentCombinator.d.ts +6 -8
  309. package/internal/ComponentTable/ComponentTable.js +16 -4
  310. package/internal/ComponentTable/ComponentTable.js.map +1 -1
  311. package/internal/ComponentTable.d.ts +5 -6
  312. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +4 -2
  313. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
  314. package/internal/CustomComboBox/ComboBoxMenu.d.ts +4 -4
  315. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js +21 -10
  316. package/internal/CustomComboBox/ComboBoxView/ComboBoxView.js.map +1 -1
  317. package/internal/CustomComboBox/ComboBoxView.d.ts +4 -12
  318. package/internal/DateSelect/DateSelect/DateSelect.js +14 -11
  319. package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
  320. package/internal/DateSelect/DateSelect.d.ts +4 -6
  321. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js +6 -10
  322. package/internal/DropdownContainer/DropdownContainer/DropdownContainer.js.map +1 -1
  323. package/internal/DropdownContainer/DropdownContainer.d.ts +3 -6
  324. package/internal/InputLikeText/InputLikeText/InputLikeText.js +4 -2
  325. package/internal/InputLikeText/InputLikeText/InputLikeText.js.map +1 -1
  326. package/internal/InputLikeText/InputLikeText.d.ts +4 -3
  327. package/internal/InternalMenu/InternalMenu/InternalMenu.js +21 -10
  328. package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
  329. package/internal/InternalMenu/InternalMenu.d.ts +3 -9
  330. package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js +1 -1
  331. package/internal/InternalMenu/InternalMenu.styles/InternalMenu.styles.js.map +1 -1
  332. package/internal/MaskedInput/MaskedInput/MaskedInput.js +3 -1
  333. package/internal/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
  334. package/internal/MaskedInput/MaskedInput.d.ts +4 -2
  335. package/internal/Menu/Menu/Menu.js +10 -3
  336. package/internal/Menu/Menu/Menu.js.map +1 -1
  337. package/internal/Menu/Menu.d.ts +4 -7
  338. package/internal/Popup/Popup/Popup.js +32 -23
  339. package/internal/Popup/Popup/Popup.js.map +1 -1
  340. package/internal/Popup/Popup.d.ts +10 -16
  341. package/internal/PopupMenu/PopupMenu/PopupMenu.js +12 -4
  342. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  343. package/internal/PopupMenu/PopupMenu.d.ts +8 -11
  344. package/internal/RenderLayer/RenderLayer/RenderLayer.js +18 -11
  345. package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
  346. package/internal/RenderLayer/RenderLayer.d.ts +5 -3
  347. package/internal/ThemePlayground/VariableValue/VariableValue.js +4 -2
  348. package/internal/ThemePlayground/VariableValue/VariableValue.js.map +1 -1
  349. package/internal/ThemePlayground/VariableValue.d.ts +5 -4
  350. package/internal/ZIndex/ZIndex/ZIndex.js +15 -13
  351. package/internal/ZIndex/ZIndex/ZIndex.js.map +1 -1
  352. package/internal/ZIndex/ZIndex.d.ts +7 -11
  353. package/lib/createPropsGetter/createPropsGetter.js.map +1 -1
  354. package/lib/createPropsGetter.d.ts +2 -1
  355. package/package.json +2 -2
@@ -63,6 +63,7 @@ import { MobilePopup } from "../../MobilePopup";
63
63
  import { getRootNode, rootNode } from "../../../lib/rootNode";
64
64
  import { callChildRef } from "../../../lib/callChildRef/callChildRef";
65
65
  import { isInstanceWithAnchorElement } from "../../../lib/InstanceWithAnchorElement";
66
+ import { createPropsGetter } from "../../../lib/createPropsGetter";
66
67
  import { PopupPin } from "../PopupPin";
67
68
  import { PopupHelper } from "../PopupHelper";
68
69
  import { styles } from "../Popup.styles";
@@ -96,6 +97,7 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
96
97
  }
97
98
 
98
99
  _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
100
+ _this.getProps = createPropsGetter(Popup.defaultProps);
99
101
  _this.state = {
100
102
  location: _this.props.opened ? DUMMY_LOCATION : null
101
103
  };
@@ -155,9 +157,10 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
155
157
  };
156
158
 
157
159
  _this.content = function (children) {
158
- var _this$props = _this.props,
159
- backgroundColor = _this$props.backgroundColor,
160
- width = _this$props.width;
160
+ var backgroundColor = _this.props.backgroundColor;
161
+
162
+ var width = _this.getProps().width;
163
+
161
164
  return /*#__PURE__*/React.createElement("div", {
162
165
  className: styles.content(_this.theme),
163
166
  "data-tid": PopupDataTids.content,
@@ -298,9 +301,8 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
298
301
  var _this3 = this;
299
302
 
300
303
  var location = this.state.location;
301
- var _this$props2 = this.props,
302
- anchorElement = _this$props2.anchorElement,
303
- useWrapper = _this$props2.useWrapper;
304
+ var anchorElement = this.props.anchorElement;
305
+ var useWrapper = this.getProps().useWrapper;
304
306
  var anchor = null;
305
307
 
306
308
  if (isHTMLElement(anchorElement)) {
@@ -356,12 +358,15 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
356
358
  _proto.renderContent = function renderContent(location) {
357
359
  var _this4 = this;
358
360
 
359
- var _this$props3 = this.props,
360
- disableAnimations = _this$props3.disableAnimations,
361
- maxWidth = _this$props3.maxWidth,
362
- hasShadow = _this$props3.hasShadow,
363
- ignoreHover = _this$props3.ignoreHover,
364
- opened = _this$props3.opened;
361
+ var _this$props = this.props,
362
+ maxWidth = _this$props.maxWidth,
363
+ opened = _this$props.opened;
364
+
365
+ var _this$getProps = this.getProps(),
366
+ hasShadow = _this$getProps.hasShadow,
367
+ disableAnimations = _this$getProps.disableAnimations,
368
+ ignoreHover = _this$getProps.ignoreHover;
369
+
365
370
  var children = this.renderChildren();
366
371
 
367
372
  var _PopupHelper$getPosit = PopupHelper.getPositionObject(location.position),
@@ -411,13 +416,17 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
411
416
  */
412
417
  var isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;
413
418
  var pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;
414
- var _this$props4 = this.props,
415
- pinSize = _this$props4.pinSize,
416
- hasShadow = _this$props4.hasShadow,
417
- backgroundColor = _this$props4.backgroundColor,
418
- borderColor = _this$props4.borderColor;
419
+ var _this$props2 = this.props,
420
+ pinSize = _this$props2.pinSize,
421
+ backgroundColor = _this$props2.backgroundColor,
422
+ borderColor = _this$props2.borderColor;
423
+
424
+ var _this$getProps2 = this.getProps(),
425
+ hasShadow = _this$getProps2.hasShadow,
426
+ hasPin = _this$getProps2.hasPin;
427
+
419
428
  var position = PopupHelper.getPositionObject(positionName);
420
- return this.props.hasPin && /*#__PURE__*/React.createElement(PopupPin, {
429
+ return hasPin && /*#__PURE__*/React.createElement(PopupPin, {
421
430
  popupElement: this.lastPopupElement,
422
431
  popupPosition: positionName,
423
432
  size: pinSize || parseInt(this.theme.popupPinSize),
@@ -459,9 +468,9 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
459
468
  };
460
469
 
461
470
  _proto.getLocation = function getLocation(popupElement, location) {
462
- var _this$props5 = this.props,
463
- positions = _this$props5.positions,
464
- tryPreserveFirstRenderedPosition = _this$props5.tryPreserveFirstRenderedPosition;
471
+ var _this$props3 = this.props,
472
+ positions = _this$props3.positions,
473
+ tryPreserveFirstRenderedPosition = _this$props3.tryPreserveFirstRenderedPosition;
465
474
  var anchorElement = this.anchorElement;
466
475
  warning(anchorElement && isHTMLElement(anchorElement), 'Anchor element is not defined or not instance of HTMLElement');
467
476
 
@@ -514,7 +523,7 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
514
523
  };
515
524
 
516
525
  _proto.getPinnedPopupOffset = function getPinnedPopupOffset(anchorRect, position) {
517
- if (!this.props.hasPin || /center|middle/.test(position.align)) {
526
+ if (!this.getProps().hasPin || /center|middle/.test(position.align)) {
518
527
  return 0;
519
528
  }
520
529
 
@@ -527,7 +536,7 @@ export var Popup = responsiveLayout(_class = rootNode(_class = (_temp = _class2
527
536
  var marginFromProps = this.props.margin;
528
537
  var margin = isNonNullable(marginFromProps) && !isNaN(marginFromProps) ? marginFromProps : parseInt(this.theme.popupMargin) || 0;
529
538
  var position = PopupHelper.getPositionObject(positionName);
530
- var popupOffset = this.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);
539
+ var popupOffset = this.getProps().popupOffset + this.getPinnedPopupOffset(anchorRect, position);
531
540
 
532
541
  switch (position.direction) {
533
542
  case 'top':
@@ -1 +1 @@
1
- {"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","raf","warning","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isHTMLElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","content","contentInner","popupPin","Popup","state","location","props","opened","locationUpdateId","refForTransition","createRef","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","children","backgroundColor","theme","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","lastPopupElement","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","layoutEventsToken","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","renderMain","renderMobile","renderChildren","mobileOnCloseRequest","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","disableAnimations","maxWidth","hasShadow","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","setRootNode","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","x","y","Math","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultProps","defaultRootNode"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable, isNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin: boolean;\n hasShadow: boolean;\n disableAnimations: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n ignoreHover: boolean;\n width: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport const PopupDataTids = {\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private isMobileLayout!: boolean;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n\n public anchorElement: Nullable<HTMLElement> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\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 renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n ) : null;\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement, useWrapper } = this.props;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isHTMLElement(anchorElement);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor, width } = this.props;\n\n return (\n <div className={styles.content(this.theme)} data-tid={PopupDataTids.content} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { disableAnimations, maxWidth, hasShadow, ignoreHover, opened } = this.props;\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode}>\n <ZIndex\n data-tid={'Popup__root'}\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n {this.content(children)}\n {!this.isMobileLayout && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (element: Nullable<HTMLElement>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, hasShadow, backgroundColor, borderColor } = this.props;\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n this.props.hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.props.hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.props.popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["Popup.tsx"],"names":["React","PropTypes","Transition","raf","warning","LayoutEvents","ZIndex","RenderContainer","isFunction","isNonNullable","isNullable","isRefableElement","isIE11","isEdge","isSafari","ThemeContext","isHTMLElement","safePropTypesInstanceOf","isTestEnv","CommonWrapper","cx","responsiveLayout","MobilePopup","getRootNode","rootNode","callChildRef","isInstanceWithAnchorElement","createPropsGetter","PopupPin","PopupHelper","styles","POPUP_BORDER_DEFAULT_COLOR","TRANSITION_TIMEOUT","enter","exit","PopupPositions","DefaultPosition","DUMMY_LOCATION","position","coordinates","top","left","PopupDataTids","content","contentInner","popupPin","Popup","getProps","defaultProps","state","location","props","opened","locationUpdateId","refForTransition","createRef","anchorElement","updateAnchorElement","instance","childDomNode","getAnchorElement","removeEventListeners","addEventListeners","handleMouseEnter","event","onMouseEnter","handleMouseLeave","onMouseLeave","handleClick","onClick","handleFocus","onFocus","handleBlur","onBlur","calculateWidth","width","includes","offsetWidth","parseFloat","children","backgroundColor","theme","resetLocation","cancelDelayedUpdateLocation","setState","refPopupElement","element","lastPopupElement","handleLayoutEvent","updateLocation","popupElement","getLocation","locationEquals","componentDidMount","layoutEventsToken","addListener","getDerivedStateFromProps","componentDidUpdate","prevProps","prevState","hadNoLocation","hasLocation","wasClosed","isMobileLayout","onOpen","onClose","delayUpdateLocation","componentWillUnmount","remove","render","renderMain","renderMobile","renderChildren","mobileOnCloseRequest","useWrapper","anchor","isValidElement","anchorWithRef","cloneElement","ref","originalRef","canGetAnchorNode","withoutMobile","renderContent","addEventListener","removeEventListener","maxWidth","hasShadow","disableAnimations","ignoreHover","getPositionObject","direction","rootStyle","shouldFallbackShadow","Boolean","setRootNode","popup","shadow","shadowFallback","popupIgnoreHover","transitionEnter","transitionEnterActive","transitionExit","renderPin","positionName","isDefaultBorderColor","popupBorderColor","pinBorder","pinSize","borderColor","hasPin","parseInt","popupPinSize","getPinOffset","align","popupBackground","cancel","x","y","Math","abs","positions","tryPreserveFirstRenderedPosition","anchorRect","getElementAbsoluteRect","popupRect","getCoordinates","isFullyVisible","canBecomeVisible","canBecomeFullyVisible","getPinnedPopupOffset","test","anchorSize","height","max","marginFromProps","margin","isNaN","popupMargin","popupOffset","getHorizontalPosition","getVerticalPosition","Error","pinOffset","popupPinOffset","popupPinOffsetY","popupPinOffsetX","Component","__KONTUR_REACT_UI__","propTypes","oneOfType","HTMLElement","node","isRequired","string","func","bool","number","array","defaultRootNode"],"mappings":"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","sourcesContent":["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { Transition } from 'react-transition-group';\nimport raf from 'raf';\nimport warning from 'warning';\n\nimport { Nullable } from '../../typings/utility-types';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { ZIndex } from '../ZIndex';\nimport { RenderContainer } from '../RenderContainer';\nimport { FocusEventType, MouseEventType } from '../../typings/event-types';\nimport { isFunction, isNonNullable, isNullable, isRefableElement } from '../../lib/utils';\nimport { isIE11, isEdge, isSafari } from '../../lib/client';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isHTMLElement, safePropTypesInstanceOf } from '../../lib/SSRSafe';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { MobilePopup } from '../MobilePopup';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { callChildRef } from '../../lib/callChildRef/callChildRef';\nimport { isInstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { PopupPin } from './PopupPin';\nimport { Offset, PopupHelper, PositionObject, Rect } from './PopupHelper';\nimport { styles } from './Popup.styles';\n\nconst POPUP_BORDER_DEFAULT_COLOR = 'transparent';\nconst TRANSITION_TIMEOUT = { enter: 0, exit: 200 };\n\nexport const PopupPositions = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom right',\n 'bottom center',\n 'bottom left',\n 'left bottom',\n 'left middle',\n 'left top',\n] as const;\nexport const DefaultPosition = PopupPositions[0];\n\nexport type PopupPositionsType = typeof PopupPositions[number];\n\nconst DUMMY_LOCATION: PopupLocation = {\n position: DefaultPosition,\n coordinates: {\n top: -9999,\n left: -9999,\n },\n};\n\nexport interface PopupHandlerProps {\n onMouseEnter?: (event: MouseEventType) => void;\n onMouseLeave?: (event: MouseEventType) => void;\n onClick?: (event: MouseEventType) => void;\n onFocus?: (event: FocusEventType) => void;\n onBlur?: (event: FocusEventType) => void;\n onOpen?: () => void;\n onClose?: () => void;\n}\n\nexport interface PopupProps extends CommonProps, PopupHandlerProps {\n anchorElement: React.ReactNode | HTMLElement;\n backgroundColor?: React.CSSProperties['backgroundColor'];\n borderColor?: React.CSSProperties['borderColor'];\n children: React.ReactNode | (() => React.ReactNode);\n hasPin?: boolean;\n hasShadow?: boolean;\n disableAnimations?: boolean;\n margin?: number;\n maxWidth?: number | string;\n opened: boolean;\n pinOffset?: number;\n pinSize?: number;\n popupOffset?: number;\n positions: Readonly<PopupPositionsType[]>;\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper?: boolean;\n ignoreHover?: boolean;\n width?: React.CSSProperties['width'];\n /**\n * При очередном рендере пытаться сохранить первоначальную позицию попапа\n * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).\n *\n * Нужен только для Tooltip. В остальных случаях позиция перестраивается автоматически.\n * @see https://github.com/skbkontur/retail-ui/pull/1195\n */\n tryPreserveFirstRenderedPosition?: boolean;\n withoutMobile?: boolean;\n mobileOnCloseRequest?: () => void;\n}\n\ninterface PopupLocation {\n coordinates: {\n left: number;\n top: number;\n };\n position: PopupPositionsType;\n}\n\nexport interface PopupState {\n location: Nullable<PopupLocation>;\n}\n\nexport const PopupDataTids = {\n content: 'PopupContent',\n contentInner: 'PopupContentInner',\n popupPin: 'PopupPin__root',\n} as const;\n\ntype DefaultProps = Required<\n Pick<\n PopupProps,\n 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'\n >\n>;\n\n@responsiveLayout\n@rootNode\nexport class Popup extends React.Component<PopupProps, PopupState> {\n public static __KONTUR_REACT_UI__ = 'Popup';\n\n public static propTypes = {\n /**\n * Ссылка (ref) на элемент или React компонент, для которого рисуется попап\n */\n anchorElement: PropTypes.oneOfType([safePropTypesInstanceOf(() => HTMLElement), PropTypes.node]).isRequired,\n\n /**\n * Фон попапа и пина\n */\n backgroundColor: PropTypes.string,\n\n children: PropTypes.oneOfType([PropTypes.node, PropTypes.func]),\n\n /**\n * Показывать ли пин\n */\n hasPin: PropTypes.bool,\n\n /**\n * Применять ли box-shadow на попапе. При false отключает границу на пине\n */\n hasShadow: PropTypes.bool,\n\n /**\n * Отступ попапа от элемента\n */\n margin: PropTypes.number,\n\n /**\n * Показан или скрыт попап\n */\n opened: PropTypes.bool,\n\n /**\n * Смещение пина от края попапа. Край задаётся в пропе position вторым словом\n */\n pinOffset: PropTypes.number,\n\n /**\n * Сторона пина без учёта границы.\n * Пин представляет собой равносторонний треугольник, высота от попапа\n * до \"носика\" пина будет соответствовать формуле (size* √3)/2\n */\n pinSize: PropTypes.number,\n\n /**\n * смещение попапа относительно родительского элемента\n */\n popupOffset: PropTypes.number,\n\n /**\n * С какой стороны показывать попап и край попапа,\n * на котором будет отображаться пин\n */\n positions: PropTypes.array,\n\n /**\n * Игнорировать ли события hover/click\n */\n ignoreHover: PropTypes.bool,\n };\n\n public static defaultProps: DefaultProps = {\n popupOffset: 0,\n hasPin: false,\n hasShadow: false,\n disableAnimations: isTestEnv,\n useWrapper: false,\n ignoreHover: false,\n width: 'auto',\n };\n\n private getProps = createPropsGetter(Popup.defaultProps);\n\n // see #2873 and #2895\n public static readonly defaultRootNode = null;\n\n public state: PopupState = { location: this.props.opened ? DUMMY_LOCATION : null };\n private theme!: Theme;\n private layoutEventsToken: Nullable<ReturnType<typeof LayoutEvents.addListener>>;\n private locationUpdateId: Nullable<number> = null;\n private lastPopupElement: Nullable<HTMLElement>;\n private isMobileLayout!: boolean;\n private setRootNode!: TSetRootNode;\n private refForTransition = React.createRef<HTMLDivElement>();\n\n public anchorElement: Nullable<HTMLElement> = null;\n\n public componentDidMount() {\n this.updateLocation();\n this.layoutEventsToken = LayoutEvents.addListener(this.handleLayoutEvent);\n }\n\n public static getDerivedStateFromProps(props: Readonly<PopupProps>, state: PopupState) {\n /**\n * Delaying updateLocation to ensure it happens after props update\n */\n if (props.opened) {\n if (!state.location) {\n return { location: DUMMY_LOCATION };\n }\n } else if (state.location) {\n return { location: DUMMY_LOCATION };\n }\n return state;\n }\n\n public componentDidUpdate(prevProps: PopupProps, prevState: PopupState) {\n const hadNoLocation = prevState.location === DUMMY_LOCATION;\n const hasLocation = this.state.location !== DUMMY_LOCATION;\n const wasClosed = prevProps.opened && !this.props.opened;\n\n if (this.isMobileLayout && prevState.location === null && this.state.location === null) {\n this.setState({ location: DUMMY_LOCATION });\n }\n\n if (this.props.opened && hadNoLocation && hasLocation && this.props.onOpen) {\n this.props.onOpen();\n }\n if (wasClosed && !hasLocation && this.props.onClose) {\n this.props.onClose();\n }\n if (this.props.opened) {\n this.delayUpdateLocation();\n }\n }\n\n public componentWillUnmount() {\n this.cancelDelayedUpdateLocation();\n this.removeEventListeners(this.anchorElement);\n if (this.layoutEventsToken) {\n this.layoutEventsToken.remove();\n this.layoutEventsToken = null;\n }\n if (this.state.location && this.props.onClose) {\n this.props.onClose();\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 renderMobile() {\n const { opened } = this.props;\n const children = this.renderChildren();\n\n return children ? (\n <MobilePopup opened={opened} withoutRenderContainer onCloseRequest={this.props.mobileOnCloseRequest}>\n {this.content(children)}\n </MobilePopup>\n ) : null;\n }\n\n private renderMain() {\n const { location } = this.state;\n const { anchorElement } = this.props;\n const useWrapper = this.getProps().useWrapper;\n\n let anchor: Nullable<React.ReactNode> = null;\n if (isHTMLElement(anchorElement)) {\n this.updateAnchorElement(anchorElement);\n } else if (React.isValidElement(anchorElement)) {\n anchor = useWrapper ? <span>{anchorElement}</span> : anchorElement;\n } else {\n anchor = <span>{anchorElement}</span>;\n }\n\n const anchorWithRef =\n anchor && React.isValidElement(anchor) && isRefableElement(anchor)\n ? React.cloneElement(anchor, {\n ref: (instance: Nullable<React.ReactInstance>) => {\n this.updateAnchorElement(instance);\n const originalRef = (anchor as React.RefAttributes<any>)?.ref;\n originalRef && callChildRef(originalRef, instance);\n },\n })\n : null;\n\n // we need to get anchor's DOM node\n // so we either set our own ref on it via cloning\n // or relay on findDOMNode (inside getRootNode)\n // which should be called within updateAnchorElement\n // in the case when the anchor is not refable\n\n const canGetAnchorNode = !!anchorWithRef || isHTMLElement(anchorElement);\n\n return (\n <RenderContainer anchor={anchorWithRef || anchor} ref={canGetAnchorNode ? null : this.updateAnchorElement}>\n {this.isMobileLayout && !this.props.withoutMobile\n ? this.renderMobile()\n : location && this.renderContent(location)}\n </RenderContainer>\n );\n }\n\n private updateAnchorElement = (instance: Nullable<React.ReactInstance>) => {\n const childDomNode = isInstanceWithAnchorElement(instance) ? instance.getAnchorElement() : getRootNode(instance);\n const anchorElement = this.anchorElement;\n\n if (childDomNode !== anchorElement) {\n this.removeEventListeners(anchorElement);\n this.anchorElement = childDomNode;\n this.addEventListeners(childDomNode);\n }\n };\n\n private addEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.addEventListener('mouseenter', this.handleMouseEnter);\n element.addEventListener('mouseleave', this.handleMouseLeave);\n element.addEventListener('click', this.handleClick);\n element.addEventListener('focusin', this.handleFocus as EventListener);\n element.addEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private removeEventListeners(element: Nullable<HTMLElement>) {\n if (element && isHTMLElement(element)) {\n element.removeEventListener('mouseenter', this.handleMouseEnter);\n element.removeEventListener('mouseleave', this.handleMouseLeave);\n element.removeEventListener('click', this.handleClick);\n element.removeEventListener('focusin', this.handleFocus as EventListener);\n element.removeEventListener('focusout', this.handleBlur as EventListener);\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n if (this.props.onMouseEnter) {\n this.props.onMouseEnter(event);\n }\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.props.onMouseLeave) {\n this.props.onMouseLeave(event);\n }\n };\n\n private handleClick = (event: MouseEventType) => {\n if (this.props.onClick) {\n this.props.onClick(event);\n }\n };\n\n private handleFocus = (event: FocusEventType) => {\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleBlur = (event: FocusEventType) => {\n if (this.props.onBlur) {\n this.props.onBlur(event);\n }\n };\n\n private calculateWidth = (width: PopupProps['width']) => {\n if (typeof width === 'string' && width.includes('%')) {\n return this.anchorElement ? (this.anchorElement.offsetWidth * parseFloat(width)) / 100 : 0;\n }\n return width;\n };\n\n private content = (children: React.ReactNode) => {\n const { backgroundColor } = this.props;\n const width = this.getProps().width;\n\n return (\n <div className={styles.content(this.theme)} data-tid={PopupDataTids.content} ref={this.refForTransition}>\n <div\n className={styles.contentInner(this.theme)}\n style={{ backgroundColor, width: this.calculateWidth(width) }}\n data-tid={PopupDataTids.contentInner}\n >\n {children}\n </div>\n </div>\n );\n };\n\n private renderContent(location: PopupLocation) {\n const { maxWidth, opened } = this.props;\n const { hasShadow, disableAnimations, ignoreHover } = this.getProps();\n const children = this.renderChildren();\n\n const { direction } = PopupHelper.getPositionObject(location.position);\n const rootStyle: React.CSSProperties = { ...location.coordinates, maxWidth };\n\n const shouldFallbackShadow = isIE11 || isEdge || isSafari;\n\n return (\n <Transition\n timeout={TRANSITION_TIMEOUT}\n appear={!disableAnimations}\n in={Boolean(opened && children)}\n mountOnEnter\n unmountOnExit\n enter={!disableAnimations}\n exit={!disableAnimations}\n onExited={this.resetLocation}\n nodeRef={this.refForTransition}\n >\n {(state: string) => (\n <CommonWrapper {...this.props} rootNodeRef={this.setRootNode}>\n <ZIndex\n data-tid={'Popup__root'}\n wrapperRef={this.refPopupElement}\n priority={'Popup'}\n className={cx({\n [styles.popup(this.theme)]: true,\n [styles.shadow(this.theme)]: hasShadow && !shouldFallbackShadow,\n [styles.shadowFallback(this.theme)]: hasShadow && shouldFallbackShadow,\n [styles.popupIgnoreHover()]: ignoreHover,\n ...(disableAnimations\n ? {}\n : {\n [styles[`transition-enter-${direction}` as keyof typeof styles](this.theme)]: true,\n [styles.transitionEnter()]: state === 'entering',\n [styles.transitionEnterActive()]: state === 'entered',\n [styles.transitionExit()]: state === 'exiting',\n }),\n })}\n style={rootStyle}\n onMouseEnter={this.handleMouseEnter}\n onMouseLeave={this.handleMouseLeave}\n >\n {this.content(children)}\n {!this.isMobileLayout && this.renderPin(location.position)}\n </ZIndex>\n </CommonWrapper>\n )}\n </Transition>\n );\n }\n\n private resetLocation = () => {\n this.cancelDelayedUpdateLocation();\n this.state.location !== null && this.setState({ location: null });\n };\n\n private renderChildren() {\n return isFunction(this.props.children) ? this.props.children() : this.props.children;\n }\n\n private refPopupElement = (element: Nullable<HTMLElement>) => {\n this.lastPopupElement = element;\n };\n\n private renderPin(positionName: string): React.ReactNode {\n /**\n * Box-shadow does not appear under the pin. Borders are used instead.\n * In non-ie browsers drop-shadow filter is used. It is applying\n * shadow to the pin too.\n */\n const isDefaultBorderColor = this.theme.popupBorderColor === POPUP_BORDER_DEFAULT_COLOR;\n const pinBorder = isIE11 && isDefaultBorderColor ? 'rgba(0, 0, 0, 0.09)' : this.theme.popupBorderColor;\n\n const { pinSize, backgroundColor, borderColor } = this.props;\n const { hasShadow, hasPin } = this.getProps();\n const position = PopupHelper.getPositionObject(positionName);\n\n return (\n hasPin && (\n <PopupPin\n popupElement={this.lastPopupElement}\n popupPosition={positionName}\n size={pinSize || parseInt(this.theme.popupPinSize)}\n offset={this.getPinOffset(position.align)}\n borderWidth={hasShadow ? 1 : 0}\n backgroundColor={backgroundColor || this.theme.popupBackground}\n borderColor={borderColor || pinBorder}\n />\n )\n );\n }\n\n private handleLayoutEvent = () => {\n if (!this.state.location) {\n return;\n }\n this.updateLocation();\n };\n\n private delayUpdateLocation() {\n this.cancelDelayedUpdateLocation();\n this.locationUpdateId = raf(this.updateLocation);\n }\n\n private cancelDelayedUpdateLocation() {\n if (this.locationUpdateId) {\n raf.cancel(this.locationUpdateId);\n this.locationUpdateId = null;\n }\n }\n\n private updateLocation = () => {\n const popupElement = this.lastPopupElement;\n\n if (!popupElement) {\n return;\n }\n\n const location = this.getLocation(popupElement, this.state.location);\n if (!this.locationEquals(this.state.location, location)) {\n this.setState({ location });\n }\n };\n\n private locationEquals(x: Nullable<PopupLocation>, y: Nullable<PopupLocation>) {\n if (x === y) {\n return true;\n }\n\n if (isNullable(x) || isNullable(y)) {\n return false;\n }\n\n if (!isIE11 && !isEdge) {\n return (\n x.coordinates.left === y.coordinates.left &&\n x.coordinates.top === y.coordinates.top &&\n x.position === y.position\n );\n }\n\n // Для ie/edge обновляем позицию только при разнице минимум в 1. Иначе есть вероятность\n // уйти в бесконечный ререндер\n\n return (\n x.position === y.position &&\n Math.abs(x.coordinates.top - y.coordinates.top) <= 1 &&\n Math.abs(x.coordinates.left - y.coordinates.left) <= 1\n );\n }\n\n private getLocation(popupElement: HTMLElement, location?: Nullable<PopupLocation>) {\n const { positions, tryPreserveFirstRenderedPosition } = this.props;\n const anchorElement = this.anchorElement;\n\n warning(\n anchorElement && isHTMLElement(anchorElement),\n 'Anchor element is not defined or not instance of HTMLElement',\n );\n\n if (!(anchorElement && isHTMLElement(anchorElement))) {\n return location;\n }\n\n const anchorRect = PopupHelper.getElementAbsoluteRect(anchorElement);\n const popupRect = PopupHelper.getElementAbsoluteRect(popupElement);\n\n let position: PopupPositionsType;\n let coordinates: Offset;\n\n if (location && location !== DUMMY_LOCATION && location.position) {\n position = location.position;\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n\n const isFullyVisible = PopupHelper.isFullyVisible(coordinates, popupRect);\n const canBecomeVisible = !isFullyVisible && PopupHelper.canBecomeFullyVisible(position, coordinates);\n\n if (\n // если нужно сохранить первоначальную позицию и Попап целиком\n // находится в пределах вьюпорта (или может быть проскроллен в него)\n (tryPreserveFirstRenderedPosition && (isFullyVisible || canBecomeVisible)) ||\n // если Попап целиком во вьюпорте и в самой приоритетной позиции\n // (иначе нужно попытаться позицию сменить)\n (isFullyVisible && position === positions[0])\n ) {\n // сохраняем текущую позицию\n return { coordinates, position };\n }\n }\n\n for (position of positions) {\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n if (PopupHelper.isFullyVisible(coordinates, popupRect)) {\n return { coordinates, position };\n }\n }\n\n position = positions[0];\n coordinates = this.getCoordinates(anchorRect, popupRect, position);\n return { coordinates, position };\n }\n\n private getPinnedPopupOffset(anchorRect: Rect, position: PositionObject) {\n if (!this.getProps().hasPin || /center|middle/.test(position.align)) {\n return 0;\n }\n\n const anchorSize = /top|bottom/.test(position.direction) ? anchorRect.width : anchorRect.height;\n\n const { pinSize } = this.props;\n\n return Math.max(\n 0,\n this.getPinOffset(position.align) + (pinSize || parseInt(this.theme.popupPinSize)) - anchorSize / 2,\n );\n }\n\n private getCoordinates(anchorRect: Rect, popupRect: Rect, positionName: string) {\n const { margin: marginFromProps } = this.props;\n const margin =\n isNonNullable(marginFromProps) && !isNaN(marginFromProps)\n ? marginFromProps\n : parseInt(this.theme.popupMargin) || 0;\n const position = PopupHelper.getPositionObject(positionName);\n const popupOffset = this.getProps().popupOffset + this.getPinnedPopupOffset(anchorRect, position);\n\n switch (position.direction) {\n case 'top':\n return {\n top: anchorRect.top - popupRect.height - margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'bottom':\n return {\n top: anchorRect.top + anchorRect.height + margin,\n left: this.getHorizontalPosition(anchorRect, popupRect, position.align, popupOffset),\n };\n case 'left':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left - popupRect.width - margin,\n };\n case 'right':\n return {\n top: this.getVerticalPosition(anchorRect, popupRect, position.align, popupOffset),\n left: anchorRect.left + anchorRect.width + margin,\n };\n default:\n throw new Error(`Unexpected direction '${position.direction}'`);\n }\n }\n\n private getPinOffset(align: string) {\n const { pinOffset } = this.props;\n\n switch (align) {\n case 'top':\n case 'bottom':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetY);\n case 'left':\n case 'right':\n return pinOffset || parseInt(this.theme.popupPinOffset) || parseInt(this.theme.popupPinOffsetX);\n case 'center':\n case 'middle':\n return 0;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getHorizontalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'left':\n return anchorRect.left - popupOffset;\n case 'center':\n return anchorRect.left - (popupRect.width - anchorRect.width) / 2;\n case 'right':\n return anchorRect.left - (popupRect.width - anchorRect.width) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n\n private getVerticalPosition(anchorRect: Rect, popupRect: Rect, align: string, popupOffset: number) {\n switch (align) {\n case 'top':\n return anchorRect.top - popupOffset;\n case 'middle':\n return anchorRect.top - (popupRect.height - anchorRect.height) / 2;\n case 'bottom':\n return anchorRect.top - (popupRect.height - anchorRect.height) + popupOffset;\n default:\n throw new Error(`Unexpected align '${align}'`);\n }\n }\n}\n"]}
@@ -20,24 +20,24 @@ export interface PopupProps extends CommonProps, PopupHandlerProps {
20
20
  backgroundColor?: React.CSSProperties['backgroundColor'];
21
21
  borderColor?: React.CSSProperties['borderColor'];
22
22
  children: React.ReactNode | (() => React.ReactNode);
23
- hasPin: boolean;
24
- hasShadow: boolean;
25
- disableAnimations: boolean;
23
+ hasPin?: boolean;
24
+ hasShadow?: boolean;
25
+ disableAnimations?: boolean;
26
26
  margin?: number;
27
27
  maxWidth?: number | string;
28
28
  opened: boolean;
29
29
  pinOffset?: number;
30
30
  pinSize?: number;
31
- popupOffset: number;
31
+ popupOffset?: number;
32
32
  positions: Readonly<PopupPositionsType[]>;
33
33
  /**
34
34
  * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.
35
35
  *
36
36
  * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.
37
37
  */
38
- useWrapper: boolean;
39
- ignoreHover: boolean;
40
- width: React.CSSProperties['width'];
38
+ useWrapper?: boolean;
39
+ ignoreHover?: boolean;
40
+ width?: React.CSSProperties['width'];
41
41
  /**
42
42
  * При очередном рендере пытаться сохранить первоначальную позицию попапа
43
43
  * (в числе числе, когда он выходит за пределы экрана, но может быть проскролен в него).
@@ -64,6 +64,7 @@ export declare const PopupDataTids: {
64
64
  readonly contentInner: "PopupContentInner";
65
65
  readonly popupPin: "PopupPin__root";
66
66
  };
67
+ declare type DefaultProps = Required<Pick<PopupProps, 'popupOffset' | 'hasPin' | 'hasShadow' | 'disableAnimations' | 'useWrapper' | 'ignoreHover' | 'width'>>;
67
68
  export declare class Popup extends React.Component<PopupProps, PopupState> {
68
69
  static __KONTUR_REACT_UI__: string;
69
70
  static propTypes: {
@@ -116,15 +117,8 @@ export declare class Popup extends React.Component<PopupProps, PopupState> {
116
117
  */
117
118
  ignoreHover: PropTypes.Requireable<boolean>;
118
119
  };
119
- static defaultProps: {
120
- popupOffset: number;
121
- hasPin: boolean;
122
- hasShadow: boolean;
123
- disableAnimations: boolean;
124
- useWrapper: boolean;
125
- ignoreHover: boolean;
126
- width: string;
127
- };
120
+ static defaultProps: DefaultProps;
121
+ private getProps;
128
122
  static readonly defaultRootNode: null;
129
123
  state: PopupState;
130
124
  private theme;
@@ -11,6 +11,7 @@ import { RenderLayer } from "../../RenderLayer";
11
11
  import { CommonWrapper } from "../../../internal/CommonWrapper";
12
12
  import { responsiveLayout } from "../../../components/ResponsiveLayout/decorator";
13
13
  import { rootNode } from "../../../lib/rootNode";
14
+ import { createPropsGetter } from "../../../lib/createPropsGetter";
14
15
  import { isValidPositions } from "../validatePositions";
15
16
  import { styles } from "../PopupMenu.styles";
16
17
  export var PopupMenuType = {
@@ -33,6 +34,7 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
33
34
  }
34
35
 
35
36
  _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
37
+ _this.getProps = createPropsGetter(PopupMenu.defaultProps);
36
38
  _this.state = {
37
39
  menuVisible: false,
38
40
  firstItemShouldBeSelected: false
@@ -188,6 +190,10 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
188
190
  var _proto = PopupMenu.prototype;
189
191
 
190
192
  _proto.render = function render() {
193
+ var _this$getProps = this.getProps(),
194
+ popupHasPin = _this$getProps.popupHasPin,
195
+ disableAnimations = _this$getProps.disableAnimations;
196
+
191
197
  return /*#__PURE__*/React.createElement(CommonWrapper, _extends({
192
198
  rootNodeRef: this.setRootNode
193
199
  }, this.props), /*#__PURE__*/React.createElement(RenderLayer, {
@@ -205,10 +211,10 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
205
211
  opened: this.state.menuVisible,
206
212
  hasShadow: true,
207
213
  margin: this.props.popupMargin,
208
- hasPin: this.props.popupHasPin,
214
+ hasPin: popupHasPin,
209
215
  pinOffset: this.props.popupPinOffset,
210
216
  positions: this.getPositions(),
211
- disableAnimations: this.props.disableAnimations,
217
+ disableAnimations: disableAnimations,
212
218
  onOpen: this.handleOpen,
213
219
  mobileOnCloseRequest: this.hideMenu,
214
220
  width: this.isMobileLayout ? 'auto' : this.props.menuWidth || 'auto'
@@ -226,8 +232,10 @@ export var PopupMenu = rootNode(_class = responsiveLayout(_class = (_temp = _cla
226
232
  };
227
233
 
228
234
  _proto.getPositions = function getPositions() {
229
- if (this.props.positions && isValidPositions(this.props.positions)) {
230
- return this.props.positions;
235
+ var positions = this.getProps().positions;
236
+
237
+ if (positions && isValidPositions(positions)) {
238
+ return positions;
231
239
  }
232
240
 
233
241
  return Positions;
@@ -1 +1 @@
1
- {"version":3,"sources":["PopupMenu.tsx"],"names":["React","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","someKeys","InternalMenu","Popup","RenderLayer","CommonWrapper","responsiveLayout","rootNode","isValidPositions","styles","PopupMenuType","Dropdown","Tooltip","PopupMenuDataTids","root","caption","Positions","PopupMenu","state","menuVisible","firstItemShouldBeSelected","captionWrapper","savedFocusableElement","menu","open","showMenu","close","hideMenu","refInternalMenu","element","handleOpen","focus","renderCaption","props","opened","openMenu","closeMenu","toggleMenu","handleCaptionClick","handleCaptionKeyDown","hideMenuWithoutFocusing","saveFocus","setState","handleChangeMenuVisible","restoreFocus","e","preventDefault","handleKeyDown","document","activeElement","focusShouldBeRestored","onOpen","onClose","onChangeMenuState","handleItemSelection","event","isDefaultPrevented","type","render","setRootNode","container","width","children","popupMargin","popupHasPin","popupPinOffset","getPositions","disableAnimations","isMobileLayout","menuWidth","menuMaxHeight","header","footer","positions","Component","__KONTUR_REACT_UI__","defaultProps","Type"],"mappings":"2JAAA,OAAOA,KAAP,MAAkB,OAAlB;;AAEA;AACEC,kBADF;AAEEC,UAFF;AAGEC,WAHF;AAIEC,UAJF;AAKEC,QALF;AAMO,uCANP;AAOA,SAASC,YAAT,QAA6B,iBAA7B;AACA,SAASC,KAAT,QAA0C,UAA1C;AACA,SAASC,WAAT,QAA4B,gBAA5B;;AAEA,SAAsBC,aAAtB,QAA2C,8BAA3C;AACA,SAASC,gBAAT,QAAiC,6CAAjC;AACA,SAASC,QAAT,QAAuC,oBAAvC;;AAEA,SAASC,gBAAT,QAAiC,qBAAjC;AACA,SAASC,MAAT,QAAuB,oBAAvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkDA,OAAO,IAAMC,aAAa,GAAG;AAC3BC,EAAAA,QAAQ,EAAE,UADiB;AAE3BC,EAAAA,OAAO,EAAE,SAFkB,EAAtB;;;AAKP,OAAO,IAAMC,iBAAiB,GAAG;AAC/BC,EAAAA,IAAI,EAAE,iBADyB;AAE/BC,EAAAA,OAAO,EAAE,oBAFsB,EAA1B;;;AAKP,IAAMC,SAA+B,GAAG;AACtC,UADsC;AAEtC,YAFsC;AAGtC,WAHsC;AAItC,WAJsC;AAKtC,cALsC;AAMtC,cANsC;AAOtC,aAPsC;AAQtC,eARsC;AAStC,cATsC;AAUtC,UAVsC;AAWtC,aAXsC;AAYtC,aAZsC,CAAxC;;;;;AAiBA,WAAaC,SAAb,GAFCV,QAED,UADCD,gBACD;;;;;;;;;;;;;;AAcSY,IAAAA,KAdT,GAciB;AACbC,MAAAA,WAAW,EAAE,KADA;AAEbC,MAAAA,yBAAyB,EAAE,KAFd,EAdjB;;;AAmBUC,IAAAA,cAnBV,GAmBmD,IAnBnD;AAoBUC,IAAAA,qBApBV,GAoBsD,IApBtD;AAqBUC,IAAAA,IArBV,GAqByC,IArBzC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqESC,IAAAA,IArET,GAqEgB,oBAAY,MAAKC,QAAL,EAAZ,EArEhB;AAsESC,IAAAA,KAtET,GAsEiB,oBAAY,MAAKC,QAAL,EAAZ,EAtEjB;;AAwEUC,IAAAA,eAxEV,GAwE4B,UAACC,OAAD,UAAsC,MAAKN,IAAL,GAAYM,OAAlD,EAxE5B;;AA0EUC,IAAAA,UA1EV,GA0EuB,YAAM;AACzB,UAAI,MAAKP,IAAT,EAAe;AACb,cAAKA,IAAL,CAAUQ,KAAV;AACD;AACF,KA9EH;;AAgFUC,IAAAA,aAhFV,GAgF0B,YAAM;AAC5B,UAAI,OAAO,MAAKC,KAAL,CAAWlB,OAAlB,KAA8B,UAAlC,EAA8C;AAC5C,YAAMA,OAAO,GAAG,MAAKkB,KAAL,CAAWlB,OAAX,CAAmB;AACjCmB,UAAAA,MAAM,EAAE,MAAKhB,KAAL,CAAWC,WADc;AAEjCgB,UAAAA,QAAQ,EAAE,MAAKV,QAFkB;AAGjCW,UAAAA,SAAS,EAAE,MAAKT,QAHiB;AAIjCU,UAAAA,UAAU,EAAE,MAAKA,UAJgB,EAAnB,CAAhB;;;AAOA;AACE;AACE,wBAAUxB,iBAAiB,CAACE,OAD9B;AAEE,YAAA,SAAS,EAAEN,MAAM,CAACM,OAAP,EAFb;AAGE,YAAA,GAAG,EAAE,aAACc,OAAD,UAAc,MAAKR,cAAL,GAAsBQ,OAApC,EAHP;;AAKGd,UAAAA,OALH,CADF;;;AASD;;AAED;AACE;AACE,sBAAUF,iBAAiB,CAACE,OAD9B;AAEE,UAAA,OAAO,EAAE,MAAKuB,kBAFhB;AAGE,UAAA,SAAS,EAAE,MAAKC,oBAHlB;AAIE,UAAA,GAAG,EAAE,aAACV,OAAD,UAAc,MAAKR,cAAL,GAAsBQ,OAApC,EAJP;AAKE,UAAA,SAAS,EAAEpB,MAAM,CAACM,OAAP,EALb;;AAOG,cAAKkB,KAAL,CAAWlB,OAPd,CADF;;;AAWD,KA/GH;;AAiHUyB,IAAAA,uBAjHV,GAiHoC,oBAAM,MAAKb,QAAL,EAAN,EAjHpC;;;;;;;;;;AA2HUF,IAAAA,QA3HV,GA2HqB,UAACL,yBAAD,EAA+C;AAChE,YAAKqB,SAAL;AACA,YAAKC,QAAL;AACE;AACEvB,QAAAA,WAAW,EAAE,IADf;AAEEC,QAAAA,yBAAyB,EAAzBA,yBAFF,EADF;;AAKE,kBAAM;AACJ,cAAKuB,uBAAL,CAA6B,KAA7B;AACD,OAPH;;AASD,KAtIH;;AAwIUhB,IAAAA,QAxIV,GAwIqB,UAACiB,YAAD,EAAkC;AACnD,YAAKF,QAAL;AACE;AACEvB,QAAAA,WAAW,EAAE,KADf;AAEEC,QAAAA,yBAAyB,EAAE,KAF7B,EADF;;AAKE,kBAAM;AACJ,cAAKuB,uBAAL,CAA6B,CAAC,CAACC,YAA/B;AACD,OAPH;;AASD,KAlJH;;AAoJUP,IAAAA,UApJV,GAoJuB,YAAY;AAC/B,YAAKnB,KAAL,CAAWC,WAAX,GAAyB,MAAKQ,QAAL,EAAzB,GAA2C,MAAKF,QAAL,EAA3C;AACD,KAtJH;;AAwJUa,IAAAA,kBAxJV,GAwJ+B,YAAY;AACvC,YAAKD,UAAL;AACD,KA1JH;;AA4JUE,IAAAA,oBA5JV,GA4JiC,UAACM,CAAD,EAA+C;AAC5E,UAAI5C,QAAQ,CAACH,UAAD,EAAaE,UAAb,EAAyBH,kBAAzB,CAAR,CAAqDgD,CAArD,CAAJ,EAA6D;AAC3DA,QAAAA,CAAC,CAACC,cAAF;AACA,cAAKrB,QAAL,CAAc,IAAd;AACD;AACF,KAjKH;;AAmKUsB,IAAAA,aAnKV,GAmK0B,UAACF,CAAD,EAAyC;AAC/D,UAAI9C,WAAW,CAAC8C,CAAD,CAAf,EAAoB;AAClB,YAAMD,aAAY,GAAG,IAArB;AACA,cAAKjB,QAAL,CAAciB,aAAd;AACD;AACF,KAxKH;;AA0KUH,IAAAA,SA1KV,GA0KsB,YAAY;AAC9B,UAAIO,QAAJ,EAAc;AACZ,cAAK1B,qBAAL,GAA6B0B,QAAQ,CAACC,aAAtC;AACD;AACF,KA9KH;;AAgLUL,IAAAA,YAhLV,GAgLyB,YAAY;AACjC,UAAI,MAAKtB,qBAAT,EAAgC;AAC9B,cAAKA,qBAAL,CAA2BS,KAA3B;AACA,cAAKT,qBAAL,GAA6B,IAA7B;AACD;AACF,KArLH;;AAuLUqB,IAAAA,uBAvLV,GAuLoC,UAACO,qBAAD,EAA0C;AAC1E,UAAIA,qBAAJ,EAA2B;AACzB,cAAKN,YAAL;AACD;;AAED,UAAI,MAAK1B,KAAL,CAAWC,WAAX,IAA0B,MAAKc,KAAL,CAAWkB,MAAzC,EAAiD;AAC/C,cAAKlB,KAAL,CAAWkB,MAAX;AACD;;AAED,UAAI,CAAC,MAAKjC,KAAL,CAAWC,WAAZ,IAA2B,MAAKc,KAAL,CAAWmB,OAA1C,EAAmD;AACjD,cAAKnB,KAAL,CAAWmB,OAAX;AACD;;AAED,UAAI,OAAO,MAAKnB,KAAL,CAAWoB,iBAAlB,KAAwC,UAA5C,EAAwD;AACtD,cAAKpB,KAAL,CAAWoB,iBAAX,CAA6B,MAAKnC,KAAL,CAAWC,WAAxC,EAAqD+B,qBAArD;AACD;AACF,KAvMH;;AAyMUI,IAAAA,mBAzMV,GAyMgC,UAACC,KAAD,EAAoD;AAChF,UAAIA,KAAK,CAACC,kBAAN,EAAJ,EAAgC;AAC9B;AACD;;AAED,UAAID,KAAK,CAACE,IAAN,KAAe,SAAnB,EAA8B;AAC5BF,QAAAA,KAAK,CAACT,cAAN;AACD;;AAED,UAAMF,YAAY,GAAGW,KAAK,CAACE,IAAN,KAAe,SAApC;AACA,YAAK9B,QAAL,CAAciB,YAAd;AACD,KApNH,uDAwBSc,MAxBT,GAwBE,kBAAgB,CACd,oBACE,oBAAC,aAAD,aAAe,WAAW,EAAE,KAAKC,WAAjC,IAAkD,KAAK1B,KAAvD,gBACE,oBAAC,WAAD,IACE,cAAc,EAAE,KAAKO,uBADvB,EAEE,cAAc,EAAE,KAAKA,uBAFvB,EAGE,MAAM,EAAE,KAAKtB,KAAL,CAAWC,WAHrB,iBAKE,6BAAK,YAAUN,iBAAiB,CAACC,IAAjC,EAAuC,SAAS,EAAEL,MAAM,CAACmD,SAAP,EAAlD,EAAsE,KAAK,EAAE,EAAEC,KAAK,EAAE,KAAK5B,KAAL,CAAW4B,KAApB,EAA7E,IACG,KAAK7B,aAAL,EADH,EAEG,KAAKX,cAAL,IAAuB,KAAKY,KAAL,CAAW6B,QAAlC,iBACC,oBAAC,KAAD,IACE,aAAa,EAAE,KAAKzC,cADtB,EAEE,MAAM,EAAE,KAAKH,KAAL,CAAWC,WAFrB,EAGE,SAAS,MAHX,EAIE,MAAM,EAAE,KAAKc,KAAL,CAAW8B,WAJrB,EAKE,MAAM,EAAE,KAAK9B,KAAL,CAAW+B,WALrB,EAME,SAAS,EAAE,KAAK/B,KAAL,CAAWgC,cANxB,EAOE,SAAS,EAAE,KAAKC,YAAL,EAPb,EAQE,iBAAiB,EAAE,KAAKjC,KAAL,CAAWkC,iBARhC,EASE,MAAM,EAAE,KAAKrC,UATf,EAUE,oBAAoB,EAAE,KAAKH,QAV7B,EAWE,KAAK,EAAE,KAAKyC,cAAL,GAAsB,MAAtB,GAA+B,KAAKnC,KAAL,CAAWoC,SAAX,IAAwB,MAXhE,iBAaE,oBAAC,YAAD,IACE,SAAS,EAAE,KADb,EAEE,SAAS,EAAE,KAAKD,cAAL,GAAsB,MAAtB,GAA+B,KAAKnC,KAAL,CAAWqC,aAAX,IAA4B,MAFxE,EAGE,SAAS,EAAE,KAAKvB,aAHlB,EAIE,WAAW,EAAE,KAAKO,mBAJpB,EAKE,eAAe,EAAE,KALnB,EAME,GAAG,EAAE,KAAK1B,eANZ,EAOE,wBAAwB,EAAE,KAAKV,KAAL,CAAWE,yBAAX,GAAuC,CAAvC,GAA2C,CAAC,CAPxE,EAQE,MAAM,EAAE,KAAKa,KAAL,CAAWsC,MARrB,EASE,MAAM,EAAE,KAAKtC,KAAL,CAAWuC,MATrB,IAWG,KAAKvC,KAAL,CAAW6B,QAXd,CAbF,CAHJ,CALF,CADF,CADF,CA0CD,CAnEH,QAmHUI,YAnHV,GAmHE,wBAAuD,CACrD,IAAI,KAAKjC,KAAL,CAAWwC,SAAX,IAAwBjE,gBAAgB,CAAC,KAAKyB,KAAL,CAAWwC,SAAZ,CAA5C,EAAoE,CAClE,OAAO,KAAKxC,KAAL,CAAWwC,SAAlB,CACD,CAED,OAAOzD,SAAP,CACD,CAzHH,oBAA+BpB,KAAK,CAAC8E,SAArC,WACgBC,mBADhB,GACsC,WADtC,UAKgBC,YALhB,GAK+B,EAC3BH,SAAS,EAAEzD,SADgB,EAE3ByC,IAAI,EAAE/C,aAAa,CAACE,OAFO,EAG3BoD,WAAW,EAAE,IAHc,EAI3BG,iBAAiB,EAAE,KAJQ,EAL/B,UAYgBU,IAZhB,GAYuBnE,aAZvB","sourcesContent":["import React from 'react';\n\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { InternalMenu } from '../InternalMenu';\nimport { Popup, PopupPositionsType } from '../Popup';\nimport { RenderLayer } from '../RenderLayer';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { isValidPositions } from './validatePositions';\nimport { styles } from './PopupMenu.styles';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n}\n\nexport interface PopupMenuProps extends CommonProps {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPositionsType[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations: boolean;\n /** Действие при открытии меню */\n onOpen?: () => void;\n /** Действие при закрытии меню */\n onClose?: () => void;\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n};\n\nexport const PopupMenuDataTids = {\n root: 'PopupMenu__root',\n caption: 'PopupMenu__caption',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n 'left top',\n 'left middle',\n 'left bottom',\n];\n\n@rootNode\n@responsiveLayout\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n\n private isMobileLayout!: boolean;\n\n public static defaultProps = {\n positions: Positions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<InternalMenu> = null;\n private setRootNode!: TSetRootNode;\n\n public render() {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div data-tid={PopupMenuDataTids.root} className={styles.container()} style={{ width: this.props.width }}>\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={this.props.popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={this.props.disableAnimations}\n onOpen={this.handleOpen}\n mobileOnCloseRequest={this.hideMenu}\n width={this.isMobileLayout ? 'auto' : this.props.menuWidth || 'auto'}\n >\n <InternalMenu\n hasShadow={false}\n maxHeight={this.isMobileLayout ? 'none' : this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n cyclicSelection={false}\n ref={this.refInternalMenu}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </InternalMenu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private refInternalMenu = (element: Nullable<InternalMenu>) => (this.menu = element);\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n });\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n className={styles.caption()}\n ref={(element) => (this.captionWrapper = element)}\n >\n {caption}\n </span>\n );\n }\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => (this.captionWrapper = element)}\n className={styles.caption()}\n >\n {this.props.caption}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions(): Readonly<PopupPositionsType[]> {\n if (this.props.positions && isValidPositions(this.props.positions)) {\n return this.props.positions;\n }\n\n return Positions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (document) {\n this.savedFocusableElement = document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n\n if (this.state.menuVisible && this.props.onOpen) {\n this.props.onOpen();\n }\n\n if (!this.state.menuVisible && this.props.onClose) {\n this.props.onClose();\n }\n\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
1
+ {"version":3,"sources":["PopupMenu.tsx"],"names":["React","isKeyArrowVertical","isKeyEnter","isKeyEscape","isKeySpace","someKeys","InternalMenu","Popup","RenderLayer","CommonWrapper","responsiveLayout","rootNode","createPropsGetter","isValidPositions","styles","PopupMenuType","Dropdown","Tooltip","PopupMenuDataTids","root","caption","Positions","PopupMenu","getProps","defaultProps","state","menuVisible","firstItemShouldBeSelected","captionWrapper","savedFocusableElement","menu","open","showMenu","close","hideMenu","refInternalMenu","element","handleOpen","focus","renderCaption","props","opened","openMenu","closeMenu","toggleMenu","handleCaptionClick","handleCaptionKeyDown","hideMenuWithoutFocusing","saveFocus","setState","handleChangeMenuVisible","restoreFocus","e","preventDefault","handleKeyDown","document","activeElement","focusShouldBeRestored","onOpen","onClose","onChangeMenuState","handleItemSelection","event","isDefaultPrevented","type","render","popupHasPin","disableAnimations","setRootNode","container","width","children","popupMargin","popupPinOffset","getPositions","isMobileLayout","menuWidth","menuMaxHeight","header","footer","positions","Component","__KONTUR_REACT_UI__","Type"],"mappings":"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","sourcesContent":["import React from 'react';\n\nimport {\n isKeyArrowVertical,\n isKeyEnter,\n isKeyEscape,\n isKeySpace,\n someKeys,\n} from '../../lib/events/keyboard/identifiers';\nimport { InternalMenu } from '../InternalMenu';\nimport { Popup, PopupPositionsType } from '../Popup';\nimport { RenderLayer } from '../RenderLayer';\nimport { Nullable } from '../../typings/utility-types';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../../components/ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { createPropsGetter } from '../../lib/createPropsGetter';\n\nimport { isValidPositions } from './validatePositions';\nimport { styles } from './PopupMenu.styles';\n\nexport interface PopupMenuCaptionProps {\n opened: boolean;\n openMenu: (firstItemShouldBeSelected?: boolean) => void;\n closeMenu: (restoreFocus?: boolean) => void;\n toggleMenu: () => void;\n}\n\nexport interface PopupMenuProps extends CommonProps {\n children?: React.ReactNode;\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /** Ширина контейнера и caption */\n width?: React.CSSProperties['width'];\n\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо ```caption```,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: React.ReactNode | ((props: PopupMenuCaptionProps) => React.ReactNode);\n\n header?: React.ReactNode;\n footer?: React.ReactNode;\n\n /** Массив разрешенных положений меню относительно caption'а. */\n positions?: PopupPositionsType[];\n /** Колбэк, вызываемый после открытия/закрытия меню */\n onChangeMenuState?: (isOpened: boolean, restoreFocus: boolean) => void;\n /** Пропсы, передающиеся в Popup */\n popupHasPin?: boolean;\n popupMargin?: number;\n popupPinOffset?: number;\n type?: 'dropdown' | 'tooltip';\n disableAnimations?: boolean;\n /** Действие при открытии меню */\n onOpen?: () => void;\n /** Действие при закрытии меню */\n onClose?: () => void;\n}\n\ninterface PopupMenuState {\n menuVisible: boolean;\n firstItemShouldBeSelected?: boolean;\n}\n\nexport const PopupMenuType = {\n Dropdown: 'dropdown',\n Tooltip: 'tooltip',\n} as const;\n\nexport const PopupMenuDataTids = {\n root: 'PopupMenu__root',\n caption: 'PopupMenu__caption',\n} as const;\n\nconst Positions: PopupPositionsType[] = [\n 'top left',\n 'top center',\n 'top right',\n 'right top',\n 'right middle',\n 'right bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n 'left top',\n 'left middle',\n 'left bottom',\n];\n\ntype DefaultProps = Required<Pick<PopupMenuProps, 'positions' | 'type' | 'popupHasPin' | 'disableAnimations'>>;\n\n@rootNode\n@responsiveLayout\nexport class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {\n public static __KONTUR_REACT_UI__ = 'PopupMenu';\n\n private isMobileLayout!: boolean;\n\n public static defaultProps: DefaultProps = {\n positions: Positions,\n type: PopupMenuType.Tooltip,\n popupHasPin: true,\n disableAnimations: false,\n };\n\n private getProps = createPropsGetter(PopupMenu.defaultProps);\n\n public static Type = PopupMenuType;\n\n public state = {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n };\n\n private captionWrapper: HTMLSpanElement | null = null;\n private savedFocusableElement: HTMLElement | null = null;\n private menu: Nullable<InternalMenu> = null;\n private setRootNode!: TSetRootNode;\n\n public render() {\n const { popupHasPin, disableAnimations } = this.getProps();\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <RenderLayer\n onClickOutside={this.hideMenuWithoutFocusing}\n onFocusOutside={this.hideMenuWithoutFocusing}\n active={this.state.menuVisible}\n >\n <div data-tid={PopupMenuDataTids.root} className={styles.container()} style={{ width: this.props.width }}>\n {this.renderCaption()}\n {this.captionWrapper && this.props.children && (\n <Popup\n anchorElement={this.captionWrapper}\n opened={this.state.menuVisible}\n hasShadow\n margin={this.props.popupMargin}\n hasPin={popupHasPin}\n pinOffset={this.props.popupPinOffset}\n positions={this.getPositions()}\n disableAnimations={disableAnimations}\n onOpen={this.handleOpen}\n mobileOnCloseRequest={this.hideMenu}\n width={this.isMobileLayout ? 'auto' : this.props.menuWidth || 'auto'}\n >\n <InternalMenu\n hasShadow={false}\n maxHeight={this.isMobileLayout ? 'none' : this.props.menuMaxHeight || 'none'}\n onKeyDown={this.handleKeyDown}\n onItemClick={this.handleItemSelection}\n cyclicSelection={false}\n ref={this.refInternalMenu}\n initialSelectedItemIndex={this.state.firstItemShouldBeSelected ? 0 : -1}\n header={this.props.header}\n footer={this.props.footer}\n >\n {this.props.children}\n </InternalMenu>\n </Popup>\n )}\n </div>\n </RenderLayer>\n </CommonWrapper>\n );\n }\n\n public open = (): void => this.showMenu();\n public close = (): void => this.hideMenu();\n\n private refInternalMenu = (element: Nullable<InternalMenu>) => (this.menu = element);\n\n private handleOpen = () => {\n if (this.menu) {\n this.menu.focus();\n }\n };\n\n private renderCaption = () => {\n if (typeof this.props.caption === 'function') {\n const caption = this.props.caption({\n opened: this.state.menuVisible,\n openMenu: this.showMenu,\n closeMenu: this.hideMenu,\n toggleMenu: this.toggleMenu,\n });\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n className={styles.caption()}\n ref={(element) => (this.captionWrapper = element)}\n >\n {caption}\n </span>\n );\n }\n\n return (\n <span\n data-tid={PopupMenuDataTids.caption}\n onClick={this.handleCaptionClick}\n onKeyDown={this.handleCaptionKeyDown}\n ref={(element) => (this.captionWrapper = element)}\n className={styles.caption()}\n >\n {this.props.caption}\n </span>\n );\n };\n\n private hideMenuWithoutFocusing = () => this.hideMenu();\n\n private getPositions(): Readonly<PopupPositionsType[]> {\n const positions = this.getProps().positions;\n if (positions && isValidPositions(positions)) {\n return positions;\n }\n\n return Positions;\n }\n\n private showMenu = (firstItemShouldBeSelected?: boolean): void => {\n this.saveFocus();\n this.setState(\n {\n menuVisible: true,\n firstItemShouldBeSelected,\n },\n () => {\n this.handleChangeMenuVisible(false);\n },\n );\n };\n\n private hideMenu = (restoreFocus?: boolean): void => {\n this.setState(\n {\n menuVisible: false,\n firstItemShouldBeSelected: false,\n },\n () => {\n this.handleChangeMenuVisible(!!restoreFocus);\n },\n );\n };\n\n private toggleMenu = (): void => {\n this.state.menuVisible ? this.hideMenu() : this.showMenu();\n };\n\n private handleCaptionClick = (): void => {\n this.toggleMenu();\n };\n\n private handleCaptionKeyDown = (e: React.KeyboardEvent<HTMLElement>): void => {\n if (someKeys(isKeyEnter, isKeySpace, isKeyArrowVertical)(e)) {\n e.preventDefault();\n this.showMenu(true);\n }\n };\n\n private handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n if (isKeyEscape(e)) {\n const restoreFocus = true;\n this.hideMenu(restoreFocus);\n }\n };\n\n private saveFocus = (): void => {\n if (document) {\n this.savedFocusableElement = document.activeElement as HTMLElement;\n }\n };\n\n private restoreFocus = (): void => {\n if (this.savedFocusableElement) {\n this.savedFocusableElement.focus();\n this.savedFocusableElement = null;\n }\n };\n\n private handleChangeMenuVisible = (focusShouldBeRestored: boolean): void => {\n if (focusShouldBeRestored) {\n this.restoreFocus();\n }\n\n if (this.state.menuVisible && this.props.onOpen) {\n this.props.onOpen();\n }\n\n if (!this.state.menuVisible && this.props.onClose) {\n this.props.onClose();\n }\n\n if (typeof this.props.onChangeMenuState === 'function') {\n this.props.onChangeMenuState(this.state.menuVisible, focusShouldBeRestored);\n }\n };\n\n private handleItemSelection = (event: React.SyntheticEvent<HTMLElement>): void => {\n if (event.isDefaultPrevented()) {\n return;\n }\n\n if (event.type === 'keydown') {\n event.preventDefault();\n }\n\n const restoreFocus = event.type === 'keydown';\n this.hideMenu(restoreFocus);\n };\n}\n"]}
@@ -33,7 +33,7 @@ export interface PopupMenuProps extends CommonProps {
33
33
  popupMargin?: number;
34
34
  popupPinOffset?: number;
35
35
  type?: 'dropdown' | 'tooltip';
36
- disableAnimations: boolean;
36
+ disableAnimations?: boolean;
37
37
  /** Действие при открытии меню */
38
38
  onOpen?: () => void;
39
39
  /** Действие при закрытии меню */
@@ -44,25 +44,22 @@ interface PopupMenuState {
44
44
  firstItemShouldBeSelected?: boolean;
45
45
  }
46
46
  export declare const PopupMenuType: {
47
- Dropdown: string;
48
- Tooltip: string;
47
+ readonly Dropdown: "dropdown";
48
+ readonly Tooltip: "tooltip";
49
49
  };
50
50
  export declare const PopupMenuDataTids: {
51
51
  readonly root: "PopupMenu__root";
52
52
  readonly caption: "PopupMenu__caption";
53
53
  };
54
+ declare type DefaultProps = Required<Pick<PopupMenuProps, 'positions' | 'type' | 'popupHasPin' | 'disableAnimations'>>;
54
55
  export declare class PopupMenu extends React.Component<PopupMenuProps, PopupMenuState> {
55
56
  static __KONTUR_REACT_UI__: string;
56
57
  private isMobileLayout;
57
- static defaultProps: {
58
- positions: ("top left" | "top center" | "top right" | "right top" | "right middle" | "right bottom" | "bottom right" | "bottom center" | "bottom left" | "left bottom" | "left middle" | "left top")[];
59
- type: string;
60
- popupHasPin: boolean;
61
- disableAnimations: boolean;
62
- };
58
+ static defaultProps: DefaultProps;
59
+ private getProps;
63
60
  static Type: {
64
- Dropdown: string;
65
- Tooltip: string;
61
+ readonly Dropdown: "dropdown";
62
+ readonly Tooltip: "tooltip";
66
63
  };
67
64
  state: {
68
65
  menuVisible: boolean;