@skbkontur/react-ui 4.1.0 → 4.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +1 -1
  3. package/cjs/components/Autocomplete/Autocomplete.js +8 -4
  4. package/cjs/components/Autocomplete/Autocomplete.js.map +1 -1
  5. package/cjs/components/Button/Button.d.ts +1 -5
  6. package/cjs/components/Button/Button.js +4 -12
  7. package/cjs/components/Button/Button.js.map +1 -1
  8. package/cjs/components/Checkbox/Checkbox.styles.js +4 -7
  9. package/cjs/components/Checkbox/Checkbox.styles.js.map +1 -1
  10. package/cjs/components/CurrencyInput/CurrencyHelper.js +18 -12
  11. package/cjs/components/CurrencyInput/CurrencyHelper.js.map +1 -1
  12. package/cjs/components/CurrencyInput/CurrencyInput.js +15 -7
  13. package/cjs/components/CurrencyInput/CurrencyInput.js.map +1 -1
  14. package/cjs/components/CurrencyInput/CurrencyInputHelper.js +7 -5
  15. package/cjs/components/CurrencyInput/CurrencyInputHelper.js.map +1 -1
  16. package/cjs/components/CurrencyInput/CursorHelper.js +19 -16
  17. package/cjs/components/CurrencyInput/CursorHelper.js.map +1 -1
  18. package/cjs/components/DateInput/helpers/InternalDateMediator.js +8 -2
  19. package/cjs/components/DateInput/helpers/InternalDateMediator.js.map +1 -1
  20. package/cjs/components/DropdownMenu/DropdownMenu.d.ts +1 -4
  21. package/cjs/components/DropdownMenu/DropdownMenu.js +2 -16
  22. package/cjs/components/DropdownMenu/DropdownMenu.js.map +1 -1
  23. package/cjs/components/FileUploader/FileUploader.js +3 -1
  24. package/cjs/components/FileUploader/FileUploader.js.map +1 -1
  25. package/cjs/components/Gapped/Gapped.js +2 -2
  26. package/cjs/components/Gapped/Gapped.js.map +1 -1
  27. package/cjs/components/GlobalLoader/GlobalLoader.js +3 -5
  28. package/cjs/components/GlobalLoader/GlobalLoader.js.map +1 -1
  29. package/cjs/components/Group/Group.js +74 -31
  30. package/cjs/components/Group/Group.js.map +1 -1
  31. package/cjs/components/Input/Input.js.map +1 -1
  32. package/cjs/components/Kebab/Kebab.d.ts +2 -13
  33. package/cjs/components/Kebab/Kebab.js +5 -29
  34. package/cjs/components/Kebab/Kebab.js.map +1 -1
  35. package/cjs/components/Modal/Modal.js +2 -1
  36. package/cjs/components/Modal/Modal.js.map +1 -1
  37. package/cjs/components/Modal/ModalFooter.js +1 -1
  38. package/cjs/components/Modal/ModalFooter.js.map +1 -1
  39. package/cjs/components/Modal/ModalHeader.js +1 -1
  40. package/cjs/components/Modal/ModalHeader.js.map +1 -1
  41. package/cjs/components/Paging/Paging.d.ts +1 -1
  42. package/cjs/components/Paging/Paging.js +3 -3
  43. package/cjs/components/Paging/Paging.js.map +1 -1
  44. package/cjs/components/PasswordInput/PasswordInput.js +2 -1
  45. package/cjs/components/PasswordInput/PasswordInput.js.map +1 -1
  46. package/cjs/components/Radio/Radio.styles.js +4 -7
  47. package/cjs/components/Radio/Radio.styles.js.map +1 -1
  48. package/cjs/components/RadioGroup/RadioGroup.js +1 -1
  49. package/cjs/components/RadioGroup/RadioGroup.js.map +1 -1
  50. package/cjs/components/ResponsiveLayout/ResponsiveLayout.js +1 -1
  51. package/cjs/components/ResponsiveLayout/ResponsiveLayout.js.map +1 -1
  52. package/cjs/components/ResponsiveLayout/ResponsiveLayoutEvents.js +3 -4
  53. package/cjs/components/ResponsiveLayout/ResponsiveLayoutEvents.js.map +1 -1
  54. package/cjs/components/Select/Select.js +30 -12
  55. package/cjs/components/Select/Select.js.map +1 -1
  56. package/cjs/components/SidePage/SidePage.js +2 -1
  57. package/cjs/components/SidePage/SidePage.js.map +1 -1
  58. package/cjs/components/Spinner/Spinner.d.ts +0 -1
  59. package/cjs/components/Spinner/Spinner.js +1 -5
  60. package/cjs/components/Spinner/Spinner.js.map +1 -1
  61. package/cjs/components/Spinner/SpinnerFallbackAnimation.js +16 -5
  62. package/cjs/components/Spinner/SpinnerFallbackAnimation.js.map +1 -1
  63. package/cjs/components/Textarea/Textarea.js.map +1 -1
  64. package/cjs/components/Textarea/TextareaCounter.d.ts +1 -2
  65. package/cjs/components/Textarea/TextareaCounter.js +5 -4
  66. package/cjs/components/Textarea/TextareaCounter.js.map +1 -1
  67. package/cjs/components/Toggle/Toggle.d.ts +1 -1
  68. package/cjs/components/Toggle/Toggle.js.map +1 -1
  69. package/cjs/components/Token/Token.js +14 -2
  70. package/cjs/components/Token/Token.js.map +1 -1
  71. package/cjs/components/Token/Token.styles.js +13 -6
  72. package/cjs/components/Token/Token.styles.js.map +1 -1
  73. package/cjs/components/TokenInput/TokenInput.js +13 -10
  74. package/cjs/components/TokenInput/TokenInput.js.map +1 -1
  75. package/cjs/components/Tooltip/Tooltip.js +5 -2
  76. package/cjs/components/Tooltip/Tooltip.js.map +1 -1
  77. package/cjs/components/TooltipMenu/TooltipMenu.d.ts +1 -1
  78. package/cjs/components/TooltipMenu/TooltipMenu.js +2 -0
  79. package/cjs/components/TooltipMenu/TooltipMenu.js.map +1 -1
  80. package/cjs/hooks/useDrop.js +3 -1
  81. package/cjs/hooks/useDrop.js.map +1 -1
  82. package/cjs/internal/Calendar/Calendar.js +3 -3
  83. package/cjs/internal/Calendar/Calendar.js.map +1 -1
  84. package/cjs/internal/Calendar/CalendarDateShape.d.ts +1 -1
  85. package/cjs/internal/Calendar/MonthViewModel.js +36 -17
  86. package/cjs/internal/Calendar/MonthViewModel.js.map +1 -1
  87. package/cjs/internal/CommonWrapper/CommonWrapper.js +3 -3
  88. package/cjs/internal/CommonWrapper/CommonWrapper.js.map +1 -1
  89. package/cjs/internal/CustomComboBox/ComboBoxMenu.js +6 -1
  90. package/cjs/internal/CustomComboBox/ComboBoxMenu.js.map +1 -1
  91. package/cjs/internal/CustomComboBox/CustomComboBox.js +3 -2
  92. package/cjs/internal/CustomComboBox/CustomComboBox.js.map +1 -1
  93. package/cjs/internal/CustomComboBox/CustomComboBoxReducer.d.ts +16 -16
  94. package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js +35 -35
  95. package/cjs/internal/CustomComboBox/CustomComboBoxReducer.js.map +1 -1
  96. package/cjs/internal/DateSelect/DateSelect.js +22 -11
  97. package/cjs/internal/DateSelect/DateSelect.js.map +1 -1
  98. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js +3 -1
  99. package/cjs/internal/FileUploaderControl/FileUploaderControlProvider.js.map +1 -1
  100. package/cjs/internal/InternalMenu/InternalMenu.js +4 -7
  101. package/cjs/internal/InternalMenu/InternalMenu.js.map +1 -1
  102. package/cjs/internal/InternalMenu/addIconPaddingIfPartOfMenu.d.ts +2 -0
  103. package/cjs/internal/InternalMenu/addIconPaddingIfPartOfMenu.js +16 -0
  104. package/cjs/internal/InternalMenu/addIconPaddingIfPartOfMenu.js.map +1 -0
  105. package/cjs/internal/MaskedInput/MaskedInput.js +7 -2
  106. package/cjs/internal/MaskedInput/MaskedInput.js.map +1 -1
  107. package/cjs/internal/Menu/Menu.js +12 -13
  108. package/cjs/internal/Menu/Menu.js.map +1 -1
  109. package/cjs/internal/Popup/Popup.d.ts +1 -0
  110. package/cjs/internal/Popup/Popup.js +8 -9
  111. package/cjs/internal/Popup/Popup.js.map +1 -1
  112. package/cjs/internal/PopupMenu/PopupMenu.d.ts +4 -0
  113. package/cjs/internal/PopupMenu/PopupMenu.js +13 -0
  114. package/cjs/internal/PopupMenu/PopupMenu.js.map +1 -1
  115. package/cjs/internal/PopupMenu/validatePositions.js +6 -6
  116. package/cjs/internal/PopupMenu/validatePositions.js.map +1 -1
  117. package/cjs/internal/RenderContainer/RenderInnerContainer.d.ts +1 -1
  118. package/cjs/internal/RenderContainer/RenderInnerContainer.js +2 -1
  119. package/cjs/internal/RenderContainer/RenderInnerContainer.js.map +1 -1
  120. package/cjs/internal/RenderLayer/RenderLayer.js +4 -1
  121. package/cjs/internal/RenderLayer/RenderLayer.js.map +1 -1
  122. package/cjs/internal/ThemePlayground/ThemeEditor.js +6 -1
  123. package/cjs/internal/ThemePlayground/ThemeEditor.js.map +1 -1
  124. package/cjs/internal/ThemePlayground/VariableValue.js +18 -6
  125. package/cjs/internal/ThemePlayground/VariableValue.js.map +1 -1
  126. package/cjs/internal/ThemeShowcase/ThemeShowcase.js +4 -7
  127. package/cjs/internal/ThemeShowcase/ThemeShowcase.js.map +1 -1
  128. package/cjs/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  129. package/cjs/internal/ThemeShowcase/VariablesCollector.js +5 -6
  130. package/cjs/internal/ThemeShowcase/VariablesCollector.js.map +1 -1
  131. package/cjs/internal/ZIndex/ZIndexStorage.d.ts +2 -1
  132. package/cjs/internal/ZIndex/ZIndexStorage.js +13 -6
  133. package/cjs/internal/ZIndex/ZIndexStorage.js.map +1 -1
  134. package/cjs/internal/icons/16px/index.d.ts +19 -19
  135. package/cjs/internal/icons/16px/index.js +37 -38
  136. package/cjs/internal/icons/16px/index.js.map +1 -1
  137. package/cjs/lib/animation/index.d.ts +1 -1
  138. package/cjs/lib/animation/index.js +3 -3
  139. package/cjs/lib/animation/index.js.map +1 -1
  140. package/cjs/lib/date/InternalDate.js +23 -9
  141. package/cjs/lib/date/InternalDate.js.map +1 -1
  142. package/cjs/lib/date/InternalDateCalculator.js +16 -2
  143. package/cjs/lib/date/InternalDateCalculator.js.map +1 -1
  144. package/cjs/lib/date/InternalDateGetter.js +23 -6
  145. package/cjs/lib/date/InternalDateGetter.js.map +1 -1
  146. package/cjs/lib/date/InternalDateTransformer.js +11 -2
  147. package/cjs/lib/date/InternalDateTransformer.js.map +1 -1
  148. package/cjs/lib/date/InternalDateValidator.js +31 -6
  149. package/cjs/lib/date/InternalDateValidator.js.map +1 -1
  150. package/cjs/lib/events/keyboard/extractCode.js +7 -5
  151. package/cjs/lib/events/keyboard/extractCode.js.map +1 -1
  152. package/cjs/lib/rootNode/getRootNode.d.ts +9 -0
  153. package/cjs/lib/rootNode/getRootNode.js +34 -6
  154. package/cjs/lib/rootNode/getRootNode.js.map +1 -1
  155. package/cjs/lib/rootNode/rootNodeDecorator.d.ts +9 -1
  156. package/cjs/lib/rootNode/rootNodeDecorator.js +9 -1
  157. package/cjs/lib/rootNode/rootNodeDecorator.js.map +1 -1
  158. package/cjs/lib/stringUtils.js +3 -1
  159. package/cjs/lib/stringUtils.js.map +1 -1
  160. package/cjs/lib/styles/ColorFactory.js +9 -9
  161. package/cjs/lib/styles/ColorFactory.js.map +1 -1
  162. package/cjs/lib/styles/ColorHelpers.d.ts +1 -0
  163. package/cjs/lib/styles/ColorHelpers.js +33 -10
  164. package/cjs/lib/styles/ColorHelpers.js.map +1 -1
  165. package/cjs/lib/styles/ColorObject.js +3 -2
  166. package/cjs/lib/styles/ColorObject.js.map +1 -1
  167. package/cjs/lib/styles/getLabGrotesqueBaselineCompensation.d.ts +1 -0
  168. package/cjs/lib/styles/getLabGrotesqueBaselineCompensation.js +9 -0
  169. package/cjs/lib/styles/getLabGrotesqueBaselineCompensation.js.map +1 -0
  170. package/cjs/lib/taskWithDelayAndMinimalDuration.js +3 -1
  171. package/cjs/lib/taskWithDelayAndMinimalDuration.js.map +1 -1
  172. package/cjs/lib/theming/Emotion.js +5 -2
  173. package/cjs/lib/theming/Emotion.js.map +1 -1
  174. package/cjs/lib/theming/ThemeFactory.js +5 -1
  175. package/cjs/lib/theming/ThemeFactory.js.map +1 -1
  176. package/cjs/lib/theming/ThemeHelpers.js +7 -2
  177. package/cjs/lib/theming/ThemeHelpers.js.map +1 -1
  178. package/cjs/lib/utils.d.ts +15 -0
  179. package/cjs/lib/utils.js +45 -9
  180. package/cjs/lib/utils.js.map +1 -1
  181. package/components/Autocomplete/Autocomplete/Autocomplete.js +6 -5
  182. package/components/Autocomplete/Autocomplete/Autocomplete.js.map +1 -1
  183. package/components/Button/Button/Button.js +4 -10
  184. package/components/Button/Button/Button.js.map +1 -1
  185. package/components/Button/Button.d.ts +1 -5
  186. package/components/Checkbox/Checkbox.styles/Checkbox.styles.js +2 -1
  187. package/components/Checkbox/Checkbox.styles/Checkbox.styles.js.map +1 -1
  188. package/components/CurrencyInput/CurrencyHelper/CurrencyHelper.js +12 -11
  189. package/components/CurrencyInput/CurrencyHelper/CurrencyHelper.js.map +1 -1
  190. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js +15 -7
  191. package/components/CurrencyInput/CurrencyInput/CurrencyInput.js.map +1 -1
  192. package/components/CurrencyInput/CurrencyInputHelper/CurrencyInputHelper.js +7 -1
  193. package/components/CurrencyInput/CurrencyInputHelper/CurrencyInputHelper.js.map +1 -1
  194. package/components/CurrencyInput/CursorHelper/CursorHelper.js +18 -11
  195. package/components/CurrencyInput/CursorHelper/CursorHelper.js.map +1 -1
  196. package/components/DateInput/helpers/InternalDateMediator/InternalDateMediator.js +7 -7
  197. package/components/DateInput/helpers/InternalDateMediator/InternalDateMediator.js.map +1 -1
  198. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js +3 -16
  199. package/components/DropdownMenu/DropdownMenu/DropdownMenu.js.map +1 -1
  200. package/components/DropdownMenu/DropdownMenu.d.ts +1 -4
  201. package/components/FileUploader/FileUploader/FileUploader.js +4 -1
  202. package/components/FileUploader/FileUploader/FileUploader.js.map +1 -1
  203. package/components/Gapped/Gapped/Gapped.js +2 -2
  204. package/components/Gapped/Gapped/Gapped.js.map +1 -1
  205. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js +5 -7
  206. package/components/GlobalLoader/GlobalLoader/GlobalLoader.js.map +1 -1
  207. package/components/Group/Group/Group.js +62 -30
  208. package/components/Group/Group/Group.js.map +1 -1
  209. package/components/Input/Input/Input.js.map +1 -1
  210. package/components/Kebab/Kebab/Kebab.js +3 -13
  211. package/components/Kebab/Kebab/Kebab.js.map +1 -1
  212. package/components/Kebab/Kebab.d.ts +2 -13
  213. package/components/Modal/Modal/Modal.js +2 -1
  214. package/components/Modal/Modal/Modal.js.map +1 -1
  215. package/components/Modal/ModalFooter/ModalFooter.js +1 -1
  216. package/components/Modal/ModalFooter/ModalFooter.js.map +1 -1
  217. package/components/Modal/ModalHeader/ModalHeader.js +1 -1
  218. package/components/Modal/ModalHeader/ModalHeader.js.map +1 -1
  219. package/components/Paging/Paging/Paging.js +6 -5
  220. package/components/Paging/Paging/Paging.js.map +1 -1
  221. package/components/Paging/Paging.d.ts +1 -1
  222. package/components/PasswordInput/PasswordInput/PasswordInput.js +2 -1
  223. package/components/PasswordInput/PasswordInput/PasswordInput.js.map +1 -1
  224. package/components/Radio/Radio.styles/Radio.styles.js +2 -1
  225. package/components/Radio/Radio.styles/Radio.styles.js.map +1 -1
  226. package/components/RadioGroup/RadioGroup/RadioGroup.js +2 -2
  227. package/components/RadioGroup/RadioGroup/RadioGroup.js.map +1 -1
  228. package/components/ResponsiveLayout/ResponsiveLayout/ResponsiveLayout.js +1 -1
  229. package/components/ResponsiveLayout/ResponsiveLayout/ResponsiveLayout.js.map +1 -1
  230. package/components/ResponsiveLayout/ResponsiveLayoutEvents/ResponsiveLayoutEvents.js +3 -3
  231. package/components/ResponsiveLayout/ResponsiveLayoutEvents/ResponsiveLayoutEvents.js.map +1 -1
  232. package/components/Select/Select/Select.js +26 -12
  233. package/components/Select/Select/Select.js.map +1 -1
  234. package/components/SidePage/SidePage/SidePage.js +2 -1
  235. package/components/SidePage/SidePage/SidePage.js.map +1 -1
  236. package/components/Spinner/Spinner/Spinner.js +6 -2
  237. package/components/Spinner/Spinner/Spinner.js.map +1 -1
  238. package/components/Spinner/Spinner.d.ts +0 -1
  239. package/components/Spinner/SpinnerFallbackAnimation/SpinnerFallbackAnimation.js +18 -4
  240. package/components/Spinner/SpinnerFallbackAnimation/SpinnerFallbackAnimation.js.map +1 -1
  241. package/components/Textarea/Textarea/Textarea.js.map +1 -1
  242. package/components/Textarea/TextareaCounter/TextareaCounter.js +2 -1
  243. package/components/Textarea/TextareaCounter/TextareaCounter.js.map +1 -1
  244. package/components/Textarea/TextareaCounter.d.ts +1 -2
  245. package/components/Toggle/Toggle/Toggle.js.map +1 -1
  246. package/components/Toggle/Toggle.d.ts +1 -1
  247. package/components/Token/Token/Token.js +12 -1
  248. package/components/Token/Token/Token.js.map +1 -1
  249. package/components/Token/Token.styles/Token.styles.js +11 -4
  250. package/components/Token/Token.styles/Token.styles.js.map +1 -1
  251. package/components/TokenInput/TokenInput/TokenInput.js +19 -14
  252. package/components/TokenInput/TokenInput/TokenInput.js.map +1 -1
  253. package/components/Tooltip/Tooltip/Tooltip.js +5 -2
  254. package/components/Tooltip/Tooltip/Tooltip.js.map +1 -1
  255. package/components/TooltipMenu/TooltipMenu/TooltipMenu.js +2 -0
  256. package/components/TooltipMenu/TooltipMenu/TooltipMenu.js.map +1 -1
  257. package/components/TooltipMenu/TooltipMenu.d.ts +1 -1
  258. package/hooks/useDrop/useDrop.js +5 -1
  259. package/hooks/useDrop/useDrop.js.map +1 -1
  260. package/internal/Calendar/Calendar/Calendar.js +6 -4
  261. package/internal/Calendar/Calendar/Calendar.js.map +1 -1
  262. package/internal/Calendar/CalendarDateShape.d.ts +1 -1
  263. package/internal/Calendar/MonthViewModel/MonthViewModel.js +35 -18
  264. package/internal/Calendar/MonthViewModel/MonthViewModel.js.map +1 -1
  265. package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js +3 -3
  266. package/internal/CommonWrapper/CommonWrapper/CommonWrapper.js.map +1 -1
  267. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js +23 -15
  268. package/internal/CustomComboBox/ComboBoxMenu/ComboBoxMenu.js.map +1 -1
  269. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js +18 -17
  270. package/internal/CustomComboBox/CustomComboBox/CustomComboBox.js.map +1 -1
  271. package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js +35 -35
  272. package/internal/CustomComboBox/CustomComboBoxReducer/CustomComboBoxReducer.js.map +1 -1
  273. package/internal/CustomComboBox/CustomComboBoxReducer.d.ts +16 -16
  274. package/internal/DateSelect/DateSelect/DateSelect.js +21 -15
  275. package/internal/DateSelect/DateSelect/DateSelect.js.map +1 -1
  276. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js +5 -1
  277. package/internal/FileUploaderControl/FileUploaderControlProvider/FileUploaderControlProvider.js.map +1 -1
  278. package/internal/InternalMenu/InternalMenu/InternalMenu.js +13 -16
  279. package/internal/InternalMenu/InternalMenu/InternalMenu.js.map +1 -1
  280. package/internal/InternalMenu/addIconPaddingIfPartOfMenu/addIconPaddingIfPartOfMenu.js +14 -0
  281. package/internal/InternalMenu/addIconPaddingIfPartOfMenu/addIconPaddingIfPartOfMenu.js.map +1 -0
  282. package/internal/InternalMenu/addIconPaddingIfPartOfMenu/package.json +6 -0
  283. package/internal/InternalMenu/addIconPaddingIfPartOfMenu.d.ts +2 -0
  284. package/internal/MaskedInput/MaskedInput/MaskedInput.js +8 -3
  285. package/internal/MaskedInput/MaskedInput/MaskedInput.js.map +1 -1
  286. package/internal/Menu/Menu/Menu.js +9 -14
  287. package/internal/Menu/Menu/Menu.js.map +1 -1
  288. package/internal/Popup/Popup/Popup.js +8 -7
  289. package/internal/Popup/Popup/Popup.js.map +1 -1
  290. package/internal/Popup/Popup.d.ts +1 -0
  291. package/internal/PopupMenu/PopupMenu/PopupMenu.js +8 -0
  292. package/internal/PopupMenu/PopupMenu/PopupMenu.js.map +1 -1
  293. package/internal/PopupMenu/PopupMenu.d.ts +4 -0
  294. package/internal/PopupMenu/validatePositions/validatePositions.js +6 -6
  295. package/internal/PopupMenu/validatePositions/validatePositions.js.map +1 -1
  296. package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js +5 -2
  297. package/internal/RenderContainer/RenderInnerContainer/RenderInnerContainer.js.map +1 -1
  298. package/internal/RenderContainer/RenderInnerContainer.d.ts +1 -1
  299. package/internal/RenderLayer/RenderLayer/RenderLayer.js +5 -1
  300. package/internal/RenderLayer/RenderLayer/RenderLayer.js.map +1 -1
  301. package/internal/ThemePlayground/ThemeEditor/ThemeEditor.js +5 -1
  302. package/internal/ThemePlayground/ThemeEditor/ThemeEditor.js.map +1 -1
  303. package/internal/ThemePlayground/VariableValue/VariableValue.js +16 -5
  304. package/internal/ThemePlayground/VariableValue/VariableValue.js.map +1 -1
  305. package/internal/ThemeShowcase/ThemeShowcase/ThemeShowcase.js +3 -6
  306. package/internal/ThemeShowcase/ThemeShowcase/ThemeShowcase.js.map +1 -1
  307. package/internal/ThemeShowcase/VariablesCollector/VariablesCollector.js +4 -6
  308. package/internal/ThemeShowcase/VariablesCollector/VariablesCollector.js.map +1 -1
  309. package/internal/ThemeShowcase/VariablesCollector.d.ts +1 -1
  310. package/internal/ZIndex/ZIndexStorage/ZIndexStorage.js +12 -6
  311. package/internal/ZIndex/ZIndexStorage/ZIndexStorage.js.map +1 -1
  312. package/internal/ZIndex/ZIndexStorage.d.ts +2 -1
  313. package/internal/icons/16px/index/index.js +21 -20
  314. package/internal/icons/16px/index/index.js.map +1 -1
  315. package/internal/icons/16px/index.d.ts +19 -19
  316. package/lib/animation/index/index.js +1 -1
  317. package/lib/animation/index/index.js.map +1 -1
  318. package/lib/animation/index.d.ts +1 -1
  319. package/lib/date/InternalDate/InternalDate.js +16 -1
  320. package/lib/date/InternalDate/InternalDate.js.map +1 -1
  321. package/lib/date/InternalDateCalculator/InternalDateCalculator.js +14 -2
  322. package/lib/date/InternalDateCalculator/InternalDateCalculator.js.map +1 -1
  323. package/lib/date/InternalDateGetter/InternalDateGetter.js +20 -6
  324. package/lib/date/InternalDateGetter/InternalDateGetter.js.map +1 -1
  325. package/lib/date/InternalDateTransformer/InternalDateTransformer.js +11 -1
  326. package/lib/date/InternalDateTransformer/InternalDateTransformer.js.map +1 -1
  327. package/lib/date/InternalDateValidator/InternalDateValidator.js +31 -4
  328. package/lib/date/InternalDateValidator/InternalDateValidator.js.map +1 -1
  329. package/lib/events/keyboard/extractCode/extractCode.js +5 -5
  330. package/lib/events/keyboard/extractCode/extractCode.js.map +1 -1
  331. package/lib/rootNode/getRootNode/getRootNode.js +35 -8
  332. package/lib/rootNode/getRootNode/getRootNode.js.map +1 -1
  333. package/lib/rootNode/getRootNode.d.ts +9 -0
  334. package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js +1 -1
  335. package/lib/rootNode/rootNodeDecorator/rootNodeDecorator.js.map +1 -1
  336. package/lib/rootNode/rootNodeDecorator.d.ts +9 -1
  337. package/lib/stringUtils/stringUtils.js +4 -1
  338. package/lib/stringUtils/stringUtils.js.map +1 -1
  339. package/lib/styles/ColorFactory/ColorFactory.js +9 -9
  340. package/lib/styles/ColorFactory/ColorFactory.js.map +1 -1
  341. package/lib/styles/ColorHelpers/ColorHelpers.js +26 -9
  342. package/lib/styles/ColorHelpers/ColorHelpers.js.map +1 -1
  343. package/lib/styles/ColorHelpers.d.ts +1 -0
  344. package/lib/styles/ColorObject/ColorObject.js +2 -2
  345. package/lib/styles/ColorObject/ColorObject.js.map +1 -1
  346. package/lib/styles/getLabGrotesqueBaselineCompensation/getLabGrotesqueBaselineCompensation.js +9 -0
  347. package/lib/styles/getLabGrotesqueBaselineCompensation/getLabGrotesqueBaselineCompensation.js.map +1 -0
  348. package/lib/styles/getLabGrotesqueBaselineCompensation/package.json +6 -0
  349. package/lib/styles/getLabGrotesqueBaselineCompensation.d.ts +1 -0
  350. package/lib/taskWithDelayAndMinimalDuration/taskWithDelayAndMinimalDuration.js +4 -1
  351. package/lib/taskWithDelayAndMinimalDuration/taskWithDelayAndMinimalDuration.js.map +1 -1
  352. package/lib/theming/Emotion/Emotion.js +5 -2
  353. package/lib/theming/Emotion/Emotion.js.map +1 -1
  354. package/lib/theming/ThemeFactory/ThemeFactory.js +5 -2
  355. package/lib/theming/ThemeFactory/ThemeFactory.js.map +1 -1
  356. package/lib/theming/ThemeHelpers/ThemeHelpers.js +5 -1
  357. package/lib/theming/ThemeHelpers/ThemeHelpers.js.map +1 -1
  358. package/lib/utils/utils.js +42 -6
  359. package/lib/utils/utils.js.map +1 -1
  360. package/lib/utils.d.ts +15 -0
  361. package/package.json +4 -3
  362. package/cjs/components/Button/Corners.d.ts +0 -6
  363. package/cjs/components/Button/Corners.js +0 -5
  364. package/cjs/components/Button/Corners.js.map +0 -1
  365. package/components/Button/Corners/Corners.js +0 -6
  366. package/components/Button/Corners/Corners.js.map +0 -1
  367. package/components/Button/Corners/package.json +0 -6
  368. package/components/Button/Corners.d.ts +0 -6
@@ -1 +1 @@
1
- {"version":3,"sources":["TokenInput.tsx"],"names":["TokenInputType","DefaultState","inputValue","reservedInputValue","undefined","autocompleteItems","activeTokens","editingTokenIndex","inFocus","loading","preventBlur","inputValueWidth","inputValueHeight","defaultToKey","item","toString","identity","defaultRenderToken","isActive","onClick","onDoubleClick","onRemove","disabled","TokenInput","TokenInputLocaleHelper","rootNode","state","input","tokensInputMenu","textHelper","wrapper","hasValueInItems","items","value","includes","some","inputRef","node","tokensInputMenuRef","textHelperRef","wrapperRef","dispatch","action","cb","setState","prevState","handleInputFocus","event","type","props","onFocus","handleInputBlur","isBlurToMenu","handleOutsideBlur","preventDefault","focus","requestAnimationFrame","payload","onBlur","valueToString","isEditingMode","finishTokenEdit","isTokenValueChanged","length","selectItem","isInputChanged","checkForUnexpectedInput","menuRef","menu","getMenuRef","relatedTarget","document","activeElement","contains","handleWrapperMouseDown","target","isClickOnToken","handleWrapperMouseUp","handleCopy","isCursorVisible","tokens","map","token","selectedItems","indexOf","sort","index","clipboardData","setData","join","delimiters","handleInputPaste","WithReference","paste","getData","delimiter","stopPropagation","split","valueToItem","filter","newItems","concat","onValueChange","tryGetItems","query","getItems","hideMenuIfEmptyInputValue","isSelectedItem","isEditingItem","editingItem","autocompleteItemsUnique","unshift","LayoutEvents","emit","highlightMenuItem","selectItemIndex","findIndex","toLowerCase","highlightItem","handleKeyDown","handleInputKeyDown","handleWrapperKeyDown","e","key","WithoutReference","newValue","handleAddItem","enter","up","down","blur","moveFocusToLastToken","selectionStart","focusInput","selectInputText","setSelectionRange","itemsNew","handleWrapperArrows","handleTokenEdit","activeItemIndex","newItemIndex","isLeftEdge","isRightEdge","shiftKey","handleWrapperArrowsWithoutShift","handleWrapperArrowsWithShift","itemNew","handleValueChange","handleRemoveToken","_","filteredActiveTokens","handleTokenClick","ctrlKey","editedItem","splice","onUnexpectedInput","returnedValue","handleChangeInputValue","trimLeft","endsWith","trimRight","onInputValueChange","Combined","renderTokensStart","slice","renderToken","renderTokensEnd","handleIconClick","handleTokenDoubleClick","renderAddButton","showAddItemHint","locale","addButtonComment","addButtonTitle","componentDidMount","updateInputTextWidth","addEventListener","autoFocus","componentDidUpdate","prevProps","isCursorVisibleForState","componentWillUnmount","removeEventListener","render","theme","renderMain","Error","width","maxMenuHeight","error","warning","placeholder","renderItem","renderNotFound","onMouseEnter","onMouseLeave","inputMode","menuWidth","menuAlign","showMenu","lineHeight","parseInt","tokenInputLineHeight","inputInlineStyles","height","Math","max","flex","caretColor","labelClassName","styles","label","labelDisabled","labelFocused","inputClassName","inputDisabled","inputEditing","setRootNode","helperText","helperTextEditing","reservedInput","reset","parseFloat","getTextWidth","toFixed","getTextHeight","isInputValueChanged","React","PureComponent","__KONTUR_REACT_UI__","defaultProps","renderValue","toKey","emptyHandler"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, FocusEvent, FocusEventHandler, KeyboardEvent, MouseEventHandler, ReactNode } from 'react';\nimport isEqual from 'lodash.isequal';\n\nimport {\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowRight,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyBackspace,\n isKeyComma,\n isKeyDelete,\n isKeyEnter,\n isKeyEscape,\n isShortcutSelectAll,\n} from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Menu } from '../../internal/Menu';\nimport { Token, TokenProps } from '../Token';\nimport { MenuItemState } from '../MenuItem';\nimport { emptyHandler } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { locale } from '../../lib/locale/decorators';\nimport { MenuItem } from '../MenuItem/MenuItem';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { TokenInputLocale, TokenInputLocaleHelper } from './locale';\nimport { styles } from './TokenInput.styles';\nimport { TokenInputAction, tokenInputReducer } from './TokenInputReducer';\nimport { TokenInputMenu } from './TokenInputMenu';\nimport { TextWidthHelper } from './TextWidthHelper';\n\nexport enum TokenInputType {\n WithReference,\n WithoutReference,\n Combined,\n}\n\nexport type TokenInputMenuAlign = 'left' | 'cursor';\n\nexport interface TokenInputProps<T> extends CommonProps {\n selectedItems: T[];\n onValueChange: (items: T[]) => void;\n onMouseEnter: MouseEventHandler<HTMLDivElement>;\n onMouseLeave: MouseEventHandler<HTMLDivElement>;\n onFocus: FocusEventHandler<HTMLTextAreaElement>;\n onBlur: FocusEventHandler<HTMLTextAreaElement>;\n autoFocus?: boolean;\n type?: TokenInputType;\n /**\n * Ширина выпадающего меню может быть указана как 'auto'\n * а также в пикселях, процентах (от ширины инпута)\n * или других конкретных единицах\n *\n * Если menuAlign = 'cursor', то ширина выпадающего меню всегда будет равна 'auto'\n * (по ширине текста)\n */\n menuWidth: React.CSSProperties['width'];\n menuAlign: TokenInputMenuAlign;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются строки.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `renderItem`, `valueToString`\n */\n getItems?: (query: string) => Promise<T[]>;\n hideMenuIfEmptyInputValue?: boolean;\n renderItem: (item: T, state: MenuItemState) => React.ReactNode | null;\n renderValue: (item: T) => React.ReactNode;\n /**\n * Функция должна возвращать строковое представление токена\n * @default item => item\n */\n valueToString: (item: T) => string;\n renderNotFound?: () => React.ReactNode;\n valueToItem: (item: string) => T;\n toKey: (item: T) => string | number | undefined;\n placeholder?: string;\n delimiters: string[];\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n disabled?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderToken?: (item: T, props: Partial<TokenProps>) => ReactNode;\n /**\n * Вызывается при изменении текста в поле ввода,\n */\n onInputValueChange?: (value: string) => void;\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string, onAddItem?: () => void) => ReactNode;\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с компонента\n *\n * Функция срабатывает с аргументом инпута строки\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `valueToString` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает `onValueChange` со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`, с которым будет вызван `onValueChange`.\n * Если возвращаемое значение будет равно `null`,\n * то сработает очистка текущего значения инпута,\n * а в режиме редактирования токен будет удален\n */\n onUnexpectedInput?: (value: string) => void | null | undefined | T;\n inputMode?: React.HTMLAttributes<HTMLTextAreaElement>['inputMode'];\n}\n\nexport interface TokenInputState<T> {\n autocompleteItems?: T[];\n activeTokens: T[];\n editingTokenIndex: number;\n clickedToken?: T;\n clickedTokenTimeout?: number;\n inFocus?: boolean;\n inputValue: string;\n reservedInputValue: string | undefined;\n inputValueWidth: number;\n inputValueHeight: number;\n preventBlur?: boolean;\n loading?: boolean;\n}\n\nexport const DefaultState = {\n inputValue: '',\n reservedInputValue: undefined,\n autocompleteItems: undefined,\n activeTokens: [],\n editingTokenIndex: -1,\n inFocus: false,\n loading: false,\n preventBlur: false,\n inputValueWidth: 2,\n inputValueHeight: 22,\n};\n\nconst defaultToKey = <T extends {}>(item: T): string => item.toString();\nconst identity = <T extends {}>(item: T): T => item;\nconst defaultRenderToken = <T extends {}>(\n item: T,\n { isActive, onClick, onDoubleClick, onRemove, disabled }: Partial<TokenProps>,\n) => (\n <Token\n key={item.toString()}\n isActive={isActive}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onRemove={onRemove}\n disabled={disabled}\n >\n {item}\n </Token>\n);\n\n@rootNode\n@locale('TokenInput', TokenInputLocaleHelper)\nexport class TokenInput<T = string> extends React.PureComponent<TokenInputProps<T>, TokenInputState<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInput';\n\n public static defaultProps: Partial<TokenInputProps<any>> = {\n selectedItems: [],\n delimiters: [',', ' '],\n renderItem: identity,\n renderValue: identity,\n valueToString: identity,\n valueToItem: (item: string) => item,\n toKey: defaultToKey,\n onValueChange: () => void 0,\n width: 250 as string | number,\n onBlur: emptyHandler,\n onFocus: emptyHandler,\n onMouseEnter: emptyHandler,\n onMouseLeave: emptyHandler,\n menuWidth: 'auto',\n menuAlign: 'cursor',\n };\n\n public state: TokenInputState<T> = DefaultState;\n\n private readonly locale!: TokenInputLocale;\n private theme!: Theme;\n private input: HTMLTextAreaElement | null = null;\n private tokensInputMenu: TokenInputMenu<T> | null = null;\n private textHelper: TextWidthHelper | null = null;\n private wrapper: HTMLLabelElement | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.updateInputTextWidth();\n document.addEventListener('copy', this.handleCopy);\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n\n public componentDidUpdate(prevProps: TokenInputProps<T>, prevState: TokenInputState<T>) {\n if (prevState.inputValue !== this.state.inputValue) {\n this.updateInputTextWidth();\n }\n if (prevState.activeTokens.length === 0 && this.state.activeTokens.length > 0) {\n this.dispatch({\n type: 'SET_AUTOCOMPLETE_ITEMS',\n payload: undefined,\n });\n }\n if (prevProps.selectedItems.length !== this.props.selectedItems.length) {\n LayoutEvents.emit();\n }\n if (!this.isCursorVisibleForState(prevState) && this.isCursorVisible) {\n this.tryGetItems(this.isEditingMode ? '' : this.state.inputValue);\n }\n }\n\n public componentWillUnmount() {\n document.removeEventListener('copy', this.handleCopy);\n }\n\n /**\n * @public\n */\n public focus() {\n this.input?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.input?.blur();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {\n throw Error('Missed getItems for type ' + this.type);\n }\n\n const {\n selectedItems,\n width,\n maxMenuHeight,\n error,\n warning,\n disabled,\n placeholder,\n renderItem,\n renderNotFound,\n hideMenuIfEmptyInputValue,\n onMouseEnter,\n onMouseLeave,\n inputMode,\n menuWidth,\n menuAlign,\n } = this.props;\n\n const {\n activeTokens,\n inFocus,\n inputValueWidth,\n inputValue,\n reservedInputValue,\n autocompleteItems,\n loading,\n inputValueHeight,\n } = this.state;\n\n const showMenu =\n this.type !== TokenInputType.WithoutReference &&\n this.isCursorVisible &&\n activeTokens.length === 0 &&\n (inputValue !== '' || !hideMenuIfEmptyInputValue);\n\n const theme = this.theme;\n\n const lineHeight = parseInt(theme.tokenInputLineHeight, 10) || 0;\n\n const inputInlineStyles: React.CSSProperties = {\n // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости\n width: inputValueWidth,\n height: Math.max(lineHeight, inputValueHeight),\n // input растягивается на всю ширину чтобы placeholder не обрезался\n flex: selectedItems && selectedItems.length === 0 ? 1 : undefined,\n // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее\n caretColor: this.isCursorVisible ? undefined : 'transparent',\n };\n\n const labelClassName = cx(styles.label(theme), {\n [styles.labelDisabled(theme)]: !!disabled,\n [styles.labelFocused(theme)]: !!inFocus,\n [styles.error(theme)]: !!error,\n [styles.warning(theme)]: !!warning,\n });\n const inputClassName = cx(styles.input(theme), {\n [styles.inputDisabled(theme)]: !!disabled,\n [styles.inputEditing(theme)]: this.isEditingMode,\n });\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n <label\n ref={this.wrapperRef}\n style={{ width }}\n className={labelClassName}\n onMouseDown={this.handleWrapperMouseDown}\n onMouseUp={this.handleWrapperMouseUp}\n >\n <TextWidthHelper\n ref={this.textHelperRef}\n classHelp={cx(styles.helperText(theme), {\n [styles.helperTextEditing(theme)]: this.isEditingMode,\n })}\n text={inputValue}\n theme={this.theme}\n />\n {this.renderTokensStart()}\n <textarea\n ref={this.inputRef}\n value={inputValue}\n style={inputInlineStyles}\n spellCheck={false}\n disabled={disabled}\n className={inputClassName}\n placeholder={selectedItems.length > 0 ? undefined : placeholder}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n onChange={this.handleChangeInputValue}\n onKeyDown={this.handleKeyDown}\n onPaste={this.handleInputPaste}\n inputMode={inputMode}\n />\n {showMenu && (\n <TokenInputMenu\n ref={this.tokensInputMenuRef}\n items={autocompleteItems}\n loading={loading}\n opened={showMenu}\n maxMenuHeight={maxMenuHeight}\n anchorElement={menuAlign === 'cursor' ? this.input! : this.wrapper!}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n menuWidth={menuWidth}\n menuAlign={menuAlign}\n />\n )}\n {this.renderTokensEnd()}\n {this.isEditingMode ? <span className={styles.reservedInput(theme)}>{reservedInputValue}</span> : null}\n </label>\n </div>\n </CommonWrapper>\n );\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n this.dispatch({ type: 'RESET' });\n }\n\n private hasValueInItems = (items: T[], value: T) => {\n if (typeof value === 'string') {\n return items.includes(value);\n }\n // todo: как то не очень\n return items.some((item) => isEqual(item, value));\n };\n\n private get showAddItemHint() {\n const items = this.state.autocompleteItems;\n const value = this.props.valueToItem(this.state.inputValue);\n\n if (items && this.hasValueInItems(items, value)) {\n return false;\n }\n\n const selectedItems = this.props.selectedItems;\n if (selectedItems && this.hasValueInItems(selectedItems, value)) {\n return false;\n }\n\n if (this.type === TokenInputType.Combined && this.state.inputValue !== '') {\n return true;\n }\n }\n\n private get type() {\n return this.props.type ? this.props.type : TokenInputType.WithReference;\n }\n\n private get menuRef(): Menu | null {\n return this.tokensInputMenu && this.tokensInputMenu.getMenuRef();\n }\n\n private get isCursorVisible() {\n return this.isCursorVisibleForState(this.state);\n }\n\n private get isEditingMode() {\n return this.state.editingTokenIndex > -1;\n }\n\n private isCursorVisibleForState(state: TokenInputState<T>) {\n return state.inFocus && (state.inputValue !== '' || state.activeTokens.length === 0);\n }\n\n private inputRef = (node: HTMLTextAreaElement) => (this.input = node);\n private tokensInputMenuRef = (node: TokenInputMenu<T>) => (this.tokensInputMenu = node);\n private textHelperRef = (node: TextWidthHelper) => (this.textHelper = node);\n private wrapperRef = (node: HTMLLabelElement) => (this.wrapper = node);\n\n private dispatch = (action: TokenInputAction, cb?: () => void) => {\n this.setState((prevState) => tokenInputReducer(prevState, action), cb);\n };\n\n private updateInputTextWidth() {\n if (this.textHelper) {\n // в IE текст иногда не помещается в input\n // из-за округления, поэтому округляем явно\n const inputValueWidth = parseFloat(this.textHelper.getTextWidth().toFixed(2));\n const inputValueHeight = parseFloat(this.textHelper.getTextHeight().toFixed(2));\n\n this.dispatch({ type: 'SET_INPUT_VALUE_WIDTH', payload: inputValueWidth }, LayoutEvents.emit);\n this.dispatch({ type: 'SET_INPUT_VALUE_HEIGHT', payload: inputValueHeight }, LayoutEvents.emit);\n }\n }\n\n private handleInputFocus = (event: FocusEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'SET_FOCUS_IN' });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleInputBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n const isBlurToMenu = this.isBlurToMenu(event);\n\n if (!isBlurToMenu) {\n this.handleOutsideBlur();\n }\n\n if (isBlurToMenu || this.state.preventBlur) {\n event.preventDefault();\n // первый focus нужен для предотвращения/уменьшения моргания в других браузерах\n this.input?.focus();\n // в firefox не работает без второго focus\n requestAnimationFrame(() => this.input?.focus());\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n } else {\n this.dispatch({ type: 'BLUR' });\n this.props.onBlur?.(event);\n }\n };\n\n private handleOutsideBlur = () => {\n const { inputValue, autocompleteItems } = this.state;\n const { valueToString } = this.props;\n\n if (inputValue === '') {\n // если стерли содержимое токена в режиме редактирования, то удаляем токен\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n return;\n }\n\n // если не изменилось значение токена при редактировании\n if (this.isEditingMode && !this.isTokenValueChanged) {\n this.finishTokenEdit();\n return;\n }\n\n // чекаем автокомплит на совпадение с введенным значением в инпут\n if (autocompleteItems && autocompleteItems.length === 1) {\n const item = autocompleteItems[0];\n\n if (valueToString(item) === inputValue) {\n this.isEditingMode ? this.finishTokenEdit() : this.selectItem(item);\n\n return;\n }\n }\n\n if (this.isInputChanged) this.checkForUnexpectedInput();\n };\n\n private get isInputChanged() {\n if (this.isEditingMode) {\n return this.isTokenValueChanged;\n }\n\n return this.isInputValueChanged;\n }\n\n private get isInputValueChanged() {\n const { inputValue } = this.state;\n\n return inputValue !== '';\n }\n\n private get isTokenValueChanged() {\n const { inputValue, editingTokenIndex } = this.state;\n const { selectedItems, valueToString } = this.props;\n\n if (this.isEditingMode) {\n return valueToString(selectedItems[editingTokenIndex]) !== inputValue;\n }\n\n return false;\n }\n\n private isBlurToMenu = (event: FocusEvent<HTMLElement>) => {\n if (this.menuRef) {\n const menu = getRootNode(this.tokensInputMenu?.getMenuRef());\n const relatedTarget = (event.relatedTarget || document.activeElement) as HTMLElement;\n\n if (menu && menu.contains(relatedTarget)) {\n return true;\n }\n }\n return false;\n };\n\n private handleWrapperMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: true });\n const target = event.target as HTMLElement;\n const isClickOnToken =\n target && this.wrapper?.contains(target) && target !== this.wrapper! && target !== this.input!;\n if (!isClickOnToken) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n }\n };\n\n private handleWrapperMouseUp = () => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n };\n\n private handleCopy = (event: any) => {\n if (!this.state.inFocus || this.state.activeTokens.length === 0 || this.isCursorVisible) {\n return;\n }\n event.preventDefault();\n\n // упорядочивание токенов по индексу\n const tokens = this.state.activeTokens\n .map((token) => this.props.selectedItems.indexOf(token))\n .sort()\n .map((index) => this.props.selectedItems[index])\n .map((item) => this.props.valueToString(item));\n event.clipboardData.setData('text/plain', tokens.join(this.props.delimiters[0]));\n };\n\n private handleInputPaste = (event: React.ClipboardEvent<HTMLElement>) => {\n if (this.type === TokenInputType.WithReference || !event.clipboardData) {\n return;\n }\n let paste = event.clipboardData.getData('text');\n const { delimiters } = this.props;\n if (delimiters.some((delimiter) => paste.includes(delimiter))) {\n event.preventDefault();\n event.stopPropagation();\n for (const delimiter of delimiters) {\n paste = paste.split(delimiter).join(delimiters[0]);\n }\n const tokens = paste.split(delimiters[0]);\n const items = tokens\n .map((token) => this.props.valueToItem(token))\n .filter((item) => !this.hasValueInItems(this.props.selectedItems, item));\n const newItems = this.props.selectedItems.concat(items);\n this.props.onValueChange(newItems);\n\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n this.tryGetItems();\n }\n };\n\n private tryGetItems = async (query = '') => {\n if (this.props.getItems && (this.state.inputValue !== '' || !this.props.hideMenuIfEmptyInputValue)) {\n this.dispatch({ type: 'SET_LOADING', payload: true });\n const autocompleteItems = await this.props.getItems(query);\n this.dispatch({ type: 'SET_LOADING', payload: false });\n\n const isSelectedItem = (item: T) => this.hasValueInItems(this.props.selectedItems, item);\n const isEditingItem = (item: T) => {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n return !!editingItem && isEqual(item, editingItem);\n };\n\n const autocompleteItemsUnique = autocompleteItems.filter((item) => !isSelectedItem(item) || isEditingItem(item));\n\n if (this.isEditingMode) {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n if (\n isEqual(editingItem, this.props.valueToItem(this.state.inputValue)) &&\n !this.hasValueInItems(autocompleteItemsUnique, editingItem)\n ) {\n autocompleteItemsUnique.unshift(editingItem);\n }\n }\n\n if (query === '' || this.state.inputValue !== '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: autocompleteItemsUnique }, () => {\n LayoutEvents.emit();\n this.highlightMenuItem();\n });\n }\n const selectItemIndex = autocompleteItemsUnique.findIndex(\n (item) => this.props.valueToString(item).toLowerCase() === this.state.inputValue.toLowerCase(),\n );\n if (this.menuRef) {\n this.menuRef.highlightItem(selectItemIndex < 0 ? 0 : selectItemIndex);\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (this.isCursorVisible) {\n this.handleInputKeyDown(event);\n } else {\n this.handleWrapperKeyDown(event);\n }\n };\n\n private handleInputKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n e.stopPropagation();\n\n if (\n (this.type !== TokenInputType.WithReference &&\n this.props.delimiters.some((key) => key === e.key || (key === ',' && isKeyComma(e)))) ||\n (isKeyEnter(e) && this.type === TokenInputType.WithoutReference)\n ) {\n e.preventDefault();\n const newValue = this.state.inputValue;\n if (newValue !== '') {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n } else {\n this.handleAddItem();\n }\n }\n }\n\n switch (true) {\n case isKeyEnter(e):\n if (this.menuRef) {\n this.menuRef.enter(e);\n }\n // don't allow textarea\n // became multiline\n e.preventDefault();\n break;\n case isKeyArrowVertical(e):\n e.preventDefault();\n if (this.menuRef) {\n if (isKeyArrowUp(e)) {\n this.menuRef.up();\n } else {\n this.menuRef.down();\n }\n }\n break;\n case isKeyEscape(e):\n this.input?.blur();\n break;\n case isKeyBackspace(e):\n if (!this.isEditingMode) this.moveFocusToLastToken();\n break;\n case isKeyArrowLeft(e):\n if (this.input?.selectionStart === 0) {\n this.moveFocusToLastToken();\n }\n break;\n }\n };\n\n private moveFocusToLastToken() {\n const items = this.props.selectedItems;\n if (this.state.inputValue === '' && items && items.length > 0) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) });\n }\n }\n\n private focusInput = () => {\n requestAnimationFrame(() => this.input?.focus());\n };\n\n private selectInputText = () => {\n if (this.input) {\n this.input.setSelectionRange(0, this.state.inputValue.length);\n }\n };\n\n private handleWrapperKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n switch (true) {\n case isKeyBackspace(e):\n case isKeyDelete(e): {\n if (!this.isEditingMode) {\n const itemsNew = this.props.selectedItems.filter(\n (item) => !this.hasValueInItems(this.state.activeTokens, item),\n );\n this.props.onValueChange(itemsNew);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => {\n LayoutEvents.emit();\n this.input?.focus();\n });\n }\n break;\n }\n case isKeyArrowHorizontal(e):\n this.handleWrapperArrows(e);\n break;\n case isKeyEscape(e):\n this.wrapper?.blur();\n break;\n case isKeyEnter(e):\n e.preventDefault();\n if (this.state.activeTokens.length === 1) {\n this.handleTokenEdit(this.state.activeTokens[0]);\n }\n break;\n case isShortcutSelectAll(e):\n e.preventDefault();\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: this.props.selectedItems,\n });\n break;\n }\n };\n\n private handleWrapperArrows = (e: KeyboardEvent<HTMLElement>) => {\n e.preventDefault();\n const activeTokens = this.state.activeTokens;\n const activeItemIndex = this.props.selectedItems.indexOf(activeTokens[0]);\n const newItemIndex = activeItemIndex + (isKeyArrowLeft(e) ? -1 : +1);\n const isLeftEdge = activeItemIndex === 0 && isKeyArrowLeft(e);\n const isRightEdge = activeItemIndex === this.props.selectedItems.length - 1 && isKeyArrowRight(e);\n if (!e.shiftKey && activeTokens.length === 1) {\n this.handleWrapperArrowsWithoutShift(isLeftEdge, isRightEdge, newItemIndex);\n } else {\n this.handleWrapperArrowsWithShift(isLeftEdge, isRightEdge, newItemIndex);\n }\n };\n\n private handleWrapperArrowsWithoutShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (isRightEdge) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => this.input?.focus());\n } else if (!isLeftEdge) {\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: [this.props.selectedItems[newItemIndex]],\n });\n }\n };\n\n private handleWrapperArrowsWithShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (!isLeftEdge && !isRightEdge) {\n const itemNew = this.props.selectedItems[newItemIndex];\n const itemsNew = [itemNew, ...this.state.activeTokens.filter((item) => !isEqual(item, itemNew))];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: itemsNew });\n }\n };\n\n private handleValueChange = (items: T[]) => {\n this.props.onValueChange(items);\n };\n\n private handleAddItem = () => {\n const item = this.props.valueToItem(this.state.inputValue);\n if (item) {\n this.selectItem(item);\n }\n };\n\n private selectItem = (item: T) => {\n const { selectedItems } = this.props;\n\n if (this.isEditingMode) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(item) }, this.finishTokenEdit);\n } else {\n if (!this.hasValueInItems(selectedItems, item)) {\n this.handleValueChange(selectedItems.concat([item]));\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n }\n }\n };\n\n private handleRemoveToken = (item: T) => {\n this.props.onValueChange(this.props.selectedItems.filter((_) => !isEqual(_, item)));\n const filteredActiveTokens = this.state.activeTokens.filter((_) => !isEqual(_, item));\n\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });\n if (filteredActiveTokens.length === 0) {\n this.focusInput();\n }\n\n this.tryGetItems();\n };\n\n private handleTokenClick = (event: React.MouseEvent<HTMLElement>, itemNew: T) => {\n const items = this.state.activeTokens;\n if (event.ctrlKey) {\n const newItems = this.hasValueInItems(this.state.activeTokens, itemNew)\n ? items.filter((item) => !isEqual(item, itemNew))\n : [...items, itemNew];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: newItems });\n } else {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] });\n }\n this.focusInput();\n };\n\n private handleTokenEdit = (itemNew: T) => {\n const editingTokenIndex = this.props.selectedItems.findIndex((item) => item === itemNew);\n this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });\n\n if (this.state.inputValue !== '') {\n if (this.state.reservedInputValue === undefined)\n this.dispatch({ type: 'SET_TEMPORARY_QUERY', payload: this.state.inputValue });\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(itemNew) }, this.selectInputText);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n\n this.tryGetItems();\n };\n\n private finishTokenEdit = () => {\n const { editingTokenIndex, inputValue, reservedInputValue } = this.state;\n const { selectedItems, valueToItem } = this.props;\n const editedItem = valueToItem(inputValue);\n const newItems = selectedItems.concat([]);\n\n if (!this.hasValueInItems(selectedItems, editedItem)) {\n newItems.splice(editingTokenIndex, 1, ...(inputValue !== '' ? [editedItem] : []));\n this.handleValueChange(newItems);\n }\n\n this.dispatch({ type: 'REMOVE_EDITING_TOKEN_INDEX' });\n\n if (reservedInputValue) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: reservedInputValue });\n this.dispatch({ type: 'REMOVE_TEMPORARY_QUERY' });\n } else {\n this.dispatch({ type: 'CLEAR_INPUT' });\n }\n\n if (newItems.length === selectedItems.length) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [newItems[editingTokenIndex]] });\n }\n };\n\n private checkForUnexpectedInput = () => {\n const { inputValue } = this.state;\n const { onUnexpectedInput } = this.props;\n\n if (onUnexpectedInput) {\n // чекаем не возвращает ли что-нибудь обработчик\n const returnedValue = onUnexpectedInput(inputValue);\n\n if (returnedValue === undefined) {\n return;\n }\n\n if (returnedValue === null) {\n this.dispatch({ type: 'CLEAR_INPUT' }, () => {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n });\n\n return;\n }\n\n if (returnedValue) {\n this.selectItem(returnedValue);\n }\n }\n };\n\n private handleChangeInputValue = (event: ChangeEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n let query = event.target.value.trimLeft();\n\n if (query.endsWith(' ')) {\n query = query.trimRight() + ' ';\n }\n if (this.state.inputValue !== '' && query === '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: query }, () => {\n this.tryGetItems(query);\n });\n if (this.props.onInputValueChange) {\n this.props.onInputValueChange(query);\n }\n };\n\n private highlightMenuItem = () => {\n if (\n this.menuRef &&\n this.state.autocompleteItems &&\n this.state.autocompleteItems.length > 0 &&\n this.type !== TokenInputType.Combined\n ) {\n this.menuRef.highlightItem(0);\n }\n };\n\n private renderTokensStart = () => {\n const { editingTokenIndex } = this.state;\n const { selectedItems } = this.props;\n const delimiter = editingTokenIndex >= 0 ? editingTokenIndex : selectedItems.length;\n return selectedItems.slice(0, delimiter).map(this.renderToken);\n };\n\n private renderTokensEnd = () => {\n if (this.state.editingTokenIndex >= 0) {\n return this.props.selectedItems.slice(this.state.editingTokenIndex + 1).map(this.renderToken);\n }\n };\n\n private renderToken = (item: T) => {\n const { renderToken = defaultRenderToken, disabled } = this.props;\n\n const isActive = this.state.activeTokens.includes(item);\n\n // TODO useCallback\n const handleIconClick: React.MouseEventHandler<HTMLElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleRemoveToken(item);\n }\n };\n\n // TODO useCallback\n const handleTokenClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenClick(event, item);\n }\n };\n\n const handleTokenDoubleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenEdit(item);\n }\n };\n\n return renderToken(item, {\n isActive,\n onClick: handleTokenClick,\n onDoubleClick: handleTokenDoubleClick,\n onRemove: handleIconClick,\n disabled,\n });\n };\n\n private renderAddButton = (value = this.state.inputValue): React.ReactNode | undefined => {\n if (!this.showAddItemHint) {\n return;\n }\n\n if (this.props.renderAddButton) {\n return this.props.renderAddButton(value, this.handleAddItem);\n }\n\n const { addButtonComment, addButtonTitle } = this.locale;\n\n return (\n <MenuItem onClick={this.handleAddItem} comment={addButtonComment} key=\"renderAddButton\">\n {addButtonTitle} {value}\n </MenuItem>\n );\n };\n}\n"]}
1
+ {"version":3,"sources":["TokenInput.tsx"],"names":["TokenInputType","DefaultState","inputValue","reservedInputValue","undefined","autocompleteItems","activeTokens","editingTokenIndex","inFocus","loading","preventBlur","inputValueWidth","inputValueHeight","defaultToKey","item","toString","identity","defaultRenderToken","isActive","onClick","onDoubleClick","onRemove","disabled","TokenInput","TokenInputLocaleHelper","rootNode","state","input","tokensInputMenu","textHelper","wrapper","hasValueInItems","items","value","includes","some","inputRef","node","tokensInputMenuRef","textHelperRef","wrapperRef","dispatch","action","cb","setState","prevState","handleInputFocus","event","type","props","onFocus","handleInputBlur","isBlurToMenu","handleOutsideBlur","preventDefault","focus","requestAnimationFrame","payload","onBlur","valueToString","isEditingMode","finishTokenEdit","isTokenValueChanged","length","selectItem","isInputChanged","checkForUnexpectedInput","menuRef","menu","getMenuRef","relatedTarget","document","activeElement","contains","handleWrapperMouseDown","target","isClickOnToken","handleWrapperMouseUp","handleCopy","isCursorVisible","tokens","map","token","selectedItems","indexOf","sort","index","clipboardData","setData","join","delimiters","handleInputPaste","WithReference","paste","getData","delimiter","stopPropagation","split","valueToItem","filter","newItems","concat","onValueChange","tryGetItems","query","getItems","hideMenuIfEmptyInputValue","isSelectedItem","isEditingItem","editingItem","autocompleteItemsUnique","unshift","LayoutEvents","emit","highlightMenuItem","selectItemIndex","findIndex","toLowerCase","highlightItem","handleKeyDown","handleInputKeyDown","handleWrapperKeyDown","e","key","WithoutReference","newValue","handleAddItem","enter","up","down","blur","moveFocusToLastToken","selectionStart","focusInput","selectInputText","setSelectionRange","itemsNew","handleWrapperArrows","handleTokenEdit","activeItemIndex","newItemIndex","isLeftEdge","isRightEdge","shiftKey","handleWrapperArrowsWithoutShift","handleWrapperArrowsWithShift","itemNew","handleValueChange","handleRemoveToken","_","filteredActiveTokens","handleTokenClick","ctrlKey","editedItem","splice","onUnexpectedInput","returnedValue","handleChangeInputValue","trimLeft","endsWith","trimRight","onInputValueChange","Combined","renderTokensStart","slice","renderToken","renderTokensEnd","handleIconClick","handleTokenDoubleClick","renderAddButton","showAddItemHint","locale","addButtonComment","addButtonTitle","componentDidMount","updateInputTextWidth","addEventListener","autoFocus","componentDidUpdate","prevProps","isCursorVisibleForState","componentWillUnmount","removeEventListener","render","theme","renderMain","Error","width","maxMenuHeight","error","warning","placeholder","renderItem","renderNotFound","onMouseEnter","onMouseLeave","inputMode","menuWidth","menuAlign","showMenu","lineHeight","parseInt","tokenInputLineHeight","inputInlineStyles","height","Math","max","flex","caretColor","labelClassName","styles","label","labelDisabled","labelFocused","inputClassName","inputDisabled","inputEditing","setRootNode","helperText","helperTextEditing","reservedInput","reset","parseFloat","getTextWidth","toFixed","getTextHeight","isInputValueChanged","React","PureComponent","__KONTUR_REACT_UI__","defaultProps","renderValue","toKey","emptyHandler"],"mappings":"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","sourcesContent":["import React, { ChangeEvent, FocusEvent, FocusEventHandler, KeyboardEvent, MouseEventHandler, ReactNode } from 'react';\nimport isEqual from 'lodash.isequal';\n\nimport {\n isKeyArrowHorizontal,\n isKeyArrowLeft,\n isKeyArrowRight,\n isKeyArrowUp,\n isKeyArrowVertical,\n isKeyBackspace,\n isKeyComma,\n isKeyDelete,\n isKeyEnter,\n isKeyEscape,\n isShortcutSelectAll,\n} from '../../lib/events/keyboard/identifiers';\nimport * as LayoutEvents from '../../lib/LayoutEvents';\nimport { Menu } from '../../internal/Menu';\nimport { Token, TokenProps } from '../Token';\nimport { MenuItemState } from '../MenuItem';\nimport { emptyHandler } from '../../lib/utils';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { locale } from '../../lib/locale/decorators';\nimport { MenuItem } from '../MenuItem/MenuItem';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { cx } from '../../lib/theming/Emotion';\nimport { getRootNode, rootNode, TSetRootNode } from '../../lib/rootNode';\n\nimport { TokenInputLocale, TokenInputLocaleHelper } from './locale';\nimport { styles } from './TokenInput.styles';\nimport { TokenInputAction, tokenInputReducer } from './TokenInputReducer';\nimport { TokenInputMenu } from './TokenInputMenu';\nimport { TextWidthHelper } from './TextWidthHelper';\n\nexport enum TokenInputType {\n WithReference,\n WithoutReference,\n Combined,\n}\n\nexport type TokenInputMenuAlign = 'left' | 'cursor';\n\nexport interface TokenInputProps<T> extends CommonProps {\n selectedItems: T[];\n onValueChange: (items: T[]) => void;\n onMouseEnter: MouseEventHandler<HTMLDivElement>;\n onMouseLeave: MouseEventHandler<HTMLDivElement>;\n onFocus: FocusEventHandler<HTMLTextAreaElement>;\n onBlur: FocusEventHandler<HTMLTextAreaElement>;\n autoFocus?: boolean;\n type?: TokenInputType;\n /**\n * Ширина выпадающего меню может быть указана как 'auto'\n * а также в пикселях, процентах (от ширины инпута)\n * или других конкретных единицах\n *\n * Если menuAlign = 'cursor', то ширина выпадающего меню всегда будет равна 'auto'\n * (по ширине текста)\n */\n menuWidth: React.CSSProperties['width'];\n menuAlign: TokenInputMenuAlign;\n\n /**\n * Функция поиска элементов, должна возвращать Promise с массивом элементов.\n * По умолчанию ожидаются строки.\n *\n * Элементы могут быть любого типа. В этом случае необходимо определить\n * свойства `renderItem`, `valueToString`\n */\n getItems?: (query: string) => Promise<T[]>;\n hideMenuIfEmptyInputValue?: boolean;\n renderItem: (item: T, state: MenuItemState) => React.ReactNode | null;\n renderValue: (item: T) => React.ReactNode;\n /**\n * Функция должна возвращать строковое представление токена\n * @default item => item\n */\n valueToString: (item: T) => string;\n renderNotFound?: () => React.ReactNode;\n valueToItem: (item: string) => T;\n toKey: (item: T) => string | number | undefined;\n placeholder?: string;\n delimiters: string[];\n /**\n * Состояние валидации при ошибке.\n */\n error?: boolean;\n /**\n * Состояние валидации при предупреждении.\n */\n warning?: boolean;\n disabled?: boolean;\n width?: string | number;\n maxMenuHeight?: number | string;\n renderToken?: (item: T, props: Partial<TokenProps>) => ReactNode;\n /**\n * Вызывается при изменении текста в поле ввода,\n */\n onInputValueChange?: (value: string) => void;\n /**\n * Функция отрисовки кнопки добавления в выпадающем списке\n */\n renderAddButton?: (query?: string, onAddItem?: () => void) => ReactNode;\n /**\n * Функция для обработки ситуации, когда была введена\n * строка в инпут и был потерян фокус с компонента\n *\n * Функция срабатывает с аргументом инпута строки\n *\n * Если при потере фокуса в выпадающем списке будет только один\n * элемент и результат `valueToString` с этим элементом будет\n * совпадать со значение в текстовом поле, то\n * сработает `onValueChange` со значением данного элемента\n *\n * Сама функция также может вернуть значение,\n * неравное `undefined`, с которым будет вызван `onValueChange`.\n * Если возвращаемое значение будет равно `null`,\n * то сработает очистка текущего значения инпута,\n * а в режиме редактирования токен будет удален\n */\n onUnexpectedInput?: (value: string) => void | null | undefined | T;\n inputMode?: React.HTMLAttributes<HTMLTextAreaElement>['inputMode'];\n}\n\nexport interface TokenInputState<T> {\n autocompleteItems?: T[];\n activeTokens: T[];\n editingTokenIndex: number;\n clickedToken?: T;\n clickedTokenTimeout?: number;\n inFocus?: boolean;\n inputValue: string;\n reservedInputValue: string | undefined;\n inputValueWidth: number;\n inputValueHeight: number;\n preventBlur?: boolean;\n loading?: boolean;\n}\n\nexport const DefaultState = {\n inputValue: '',\n reservedInputValue: undefined,\n autocompleteItems: undefined,\n activeTokens: [],\n editingTokenIndex: -1,\n inFocus: false,\n loading: false,\n preventBlur: false,\n inputValueWidth: 2,\n inputValueHeight: 22,\n};\n\nconst defaultToKey = <T extends {}>(item: T): string => item.toString();\nconst identity = <T extends {}>(item: T): T => item;\nconst defaultRenderToken = <T extends {}>(\n item: T,\n { isActive, onClick, onDoubleClick, onRemove, disabled }: Partial<TokenProps>,\n) => (\n <Token\n key={item.toString()}\n isActive={isActive}\n onClick={onClick}\n onDoubleClick={onDoubleClick}\n onRemove={onRemove}\n disabled={disabled}\n >\n {item}\n </Token>\n);\n\n@rootNode\n@locale('TokenInput', TokenInputLocaleHelper)\nexport class TokenInput<T = string> extends React.PureComponent<TokenInputProps<T>, TokenInputState<T>> {\n public static __KONTUR_REACT_UI__ = 'TokenInput';\n\n public static defaultProps: Partial<TokenInputProps<any>> = {\n selectedItems: [],\n delimiters: [',', ' '],\n renderItem: identity,\n renderValue: identity,\n valueToString: identity,\n valueToItem: (item: string) => item,\n toKey: defaultToKey,\n onValueChange: () => void 0,\n width: 250 as string | number,\n onBlur: emptyHandler,\n onFocus: emptyHandler,\n onMouseEnter: emptyHandler,\n onMouseLeave: emptyHandler,\n menuWidth: 'auto',\n menuAlign: 'cursor',\n };\n\n public state: TokenInputState<T> = DefaultState;\n\n private readonly locale!: TokenInputLocale;\n private theme!: Theme;\n private input: HTMLTextAreaElement | null = null;\n private tokensInputMenu: TokenInputMenu<T> | null = null;\n private textHelper: TextWidthHelper | null = null;\n private wrapper: HTMLLabelElement | null = null;\n private setRootNode!: TSetRootNode;\n\n public componentDidMount() {\n this.updateInputTextWidth();\n document.addEventListener('copy', this.handleCopy);\n if (this.props.autoFocus) {\n this.focusInput();\n }\n }\n\n public componentDidUpdate(prevProps: TokenInputProps<T>, prevState: TokenInputState<T>) {\n if (prevState.inputValue !== this.state.inputValue) {\n this.updateInputTextWidth();\n }\n if (prevState.activeTokens.length === 0 && this.state.activeTokens.length > 0) {\n this.dispatch({\n type: 'SET_AUTOCOMPLETE_ITEMS',\n payload: undefined,\n });\n }\n if (prevProps.selectedItems.length !== this.props.selectedItems.length) {\n LayoutEvents.emit();\n }\n if (!this.isCursorVisibleForState(prevState) && this.isCursorVisible) {\n this.tryGetItems(this.isEditingMode ? '' : this.state.inputValue);\n }\n }\n\n public componentWillUnmount() {\n document.removeEventListener('copy', this.handleCopy);\n }\n\n /**\n * @public\n */\n public focus() {\n this.input?.focus();\n }\n\n /**\n * @public\n */\n public blur() {\n this.input?.blur();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return this.renderMain();\n }}\n </ThemeContext.Consumer>\n );\n }\n\n private renderMain() {\n if (this.type !== TokenInputType.WithoutReference && !this.props.getItems) {\n throw Error('Missed getItems for type ' + this.type);\n }\n\n const {\n selectedItems,\n width,\n maxMenuHeight,\n error,\n warning,\n disabled,\n placeholder,\n renderItem,\n renderNotFound,\n hideMenuIfEmptyInputValue,\n onMouseEnter,\n onMouseLeave,\n inputMode,\n menuWidth,\n menuAlign,\n } = this.props;\n\n const {\n activeTokens,\n inFocus,\n inputValueWidth,\n inputValue,\n reservedInputValue,\n autocompleteItems,\n loading,\n inputValueHeight,\n } = this.state;\n\n const showMenu =\n this.type !== TokenInputType.WithoutReference &&\n this.isCursorVisible &&\n activeTokens.length === 0 &&\n (inputValue !== '' || !hideMenuIfEmptyInputValue);\n\n const theme = this.theme;\n\n const lineHeight = parseInt(theme.tokenInputLineHeight, 10) || 0;\n\n const inputInlineStyles: React.CSSProperties = {\n // вычисляем ширину чтобы input автоматически перенёсся на следующую строку при необходимости\n width: inputValueWidth,\n height: Math.max(lineHeight, inputValueHeight),\n // input растягивается на всю ширину чтобы placeholder не обрезался\n flex: selectedItems && selectedItems.length === 0 ? 1 : undefined,\n // в ie не работает, но альтернативный способ --- дать tabindex для label --- предположительно ещё сложнее\n caretColor: this.isCursorVisible ? undefined : 'transparent',\n };\n\n const labelClassName = cx(styles.label(theme), {\n [styles.labelDisabled(theme)]: !!disabled,\n [styles.labelFocused(theme)]: !!inFocus,\n [styles.error(theme)]: !!error,\n [styles.warning(theme)]: !!warning,\n });\n const inputClassName = cx(styles.input(theme), {\n [styles.inputDisabled(theme)]: !!disabled,\n [styles.inputEditing(theme)]: this.isEditingMode,\n });\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <div onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>\n <label\n ref={this.wrapperRef}\n style={{ width }}\n className={labelClassName}\n onMouseDown={this.handleWrapperMouseDown}\n onMouseUp={this.handleWrapperMouseUp}\n >\n <TextWidthHelper\n ref={this.textHelperRef}\n classHelp={cx(styles.helperText(theme), {\n [styles.helperTextEditing(theme)]: this.isEditingMode,\n })}\n text={inputValue}\n theme={this.theme}\n />\n {this.renderTokensStart()}\n <textarea\n ref={this.inputRef}\n value={inputValue}\n style={inputInlineStyles}\n spellCheck={false}\n disabled={disabled}\n className={inputClassName}\n placeholder={selectedItems.length > 0 ? undefined : placeholder}\n onFocus={this.handleInputFocus}\n onBlur={this.handleInputBlur}\n onChange={this.handleChangeInputValue}\n onKeyDown={this.handleKeyDown}\n onPaste={this.handleInputPaste}\n inputMode={inputMode}\n />\n {showMenu && (\n <TokenInputMenu\n ref={this.tokensInputMenuRef}\n items={autocompleteItems}\n loading={loading}\n opened={showMenu}\n maxMenuHeight={maxMenuHeight}\n anchorElement={menuAlign === 'cursor' ? this.input! : this.wrapper!}\n renderNotFound={renderNotFound}\n renderItem={renderItem}\n onValueChange={this.selectItem}\n renderAddButton={this.renderAddButton}\n menuWidth={menuWidth}\n menuAlign={menuAlign}\n />\n )}\n {this.renderTokensEnd()}\n {this.isEditingMode ? <span className={styles.reservedInput(theme)}>{reservedInputValue}</span> : null}\n </label>\n </div>\n </CommonWrapper>\n );\n }\n\n /**\n * Сбрасывает введенное пользователем значение\n * @public\n */\n public reset() {\n this.dispatch({ type: 'RESET' });\n }\n\n private hasValueInItems = (items: T[], value: T) => {\n if (typeof value === 'string') {\n return items.includes(value);\n }\n // todo: как то не очень\n return items.some((item) => isEqual(item, value));\n };\n\n private get showAddItemHint() {\n const items = this.state.autocompleteItems;\n const value = this.props.valueToItem(this.state.inputValue);\n\n if (items && this.hasValueInItems(items, value)) {\n return false;\n }\n\n const selectedItems = this.props.selectedItems;\n if (selectedItems && this.hasValueInItems(selectedItems, value)) {\n return false;\n }\n\n if (this.type === TokenInputType.Combined && this.state.inputValue !== '') {\n return true;\n }\n }\n\n private get type() {\n return this.props.type ? this.props.type : TokenInputType.WithReference;\n }\n\n private get menuRef(): Menu | null {\n return this.tokensInputMenu && this.tokensInputMenu.getMenuRef();\n }\n\n private get isCursorVisible() {\n return this.isCursorVisibleForState(this.state);\n }\n\n private get isEditingMode() {\n return this.state.editingTokenIndex > -1;\n }\n\n private isCursorVisibleForState(state: TokenInputState<T>) {\n return state.inFocus && (state.inputValue !== '' || state.activeTokens.length === 0);\n }\n\n private inputRef = (node: HTMLTextAreaElement) => (this.input = node);\n private tokensInputMenuRef = (node: TokenInputMenu<T>) => (this.tokensInputMenu = node);\n private textHelperRef = (node: TextWidthHelper) => (this.textHelper = node);\n private wrapperRef = (node: HTMLLabelElement) => (this.wrapper = node);\n\n private dispatch = (action: TokenInputAction, cb?: () => void) => {\n this.setState((prevState) => tokenInputReducer(prevState, action), cb);\n };\n\n private updateInputTextWidth() {\n if (this.textHelper) {\n // в IE текст иногда не помещается в input\n // из-за округления, поэтому округляем явно\n const inputValueWidth = parseFloat(this.textHelper.getTextWidth().toFixed(2));\n const inputValueHeight = parseFloat(this.textHelper.getTextHeight().toFixed(2));\n\n this.dispatch({ type: 'SET_INPUT_VALUE_WIDTH', payload: inputValueWidth }, LayoutEvents.emit);\n this.dispatch({ type: 'SET_INPUT_VALUE_HEIGHT', payload: inputValueHeight }, LayoutEvents.emit);\n }\n }\n\n private handleInputFocus = (event: FocusEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'SET_FOCUS_IN' });\n if (this.props.onFocus) {\n this.props.onFocus(event);\n }\n };\n\n private handleInputBlur = (event: FocusEvent<HTMLTextAreaElement>) => {\n const isBlurToMenu = this.isBlurToMenu(event);\n\n if (!isBlurToMenu) {\n this.handleOutsideBlur();\n }\n\n if (isBlurToMenu || this.state.preventBlur) {\n event.preventDefault();\n // первый focus нужен для предотвращения/уменьшения моргания в других браузерах\n this.input?.focus();\n // в firefox не работает без второго focus\n requestAnimationFrame(() => this.input?.focus());\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n } else {\n this.dispatch({ type: 'BLUR' });\n this.props.onBlur?.(event);\n }\n };\n\n private handleOutsideBlur = () => {\n const { inputValue, autocompleteItems } = this.state;\n const { valueToString } = this.props;\n\n if (inputValue === '') {\n // если стерли содержимое токена в режиме редактирования, то удаляем токен\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n return;\n }\n\n // если не изменилось значение токена при редактировании\n if (this.isEditingMode && !this.isTokenValueChanged) {\n this.finishTokenEdit();\n return;\n }\n\n // чекаем автокомплит на совпадение с введенным значением в инпут\n if (autocompleteItems && autocompleteItems.length === 1) {\n const item = autocompleteItems[0];\n\n if (valueToString(item) === inputValue) {\n this.isEditingMode ? this.finishTokenEdit() : this.selectItem(item);\n\n return;\n }\n }\n\n if (this.isInputChanged) {\n this.checkForUnexpectedInput();\n }\n };\n\n private get isInputChanged() {\n if (this.isEditingMode) {\n return this.isTokenValueChanged;\n }\n\n return this.isInputValueChanged;\n }\n\n private get isInputValueChanged() {\n const { inputValue } = this.state;\n\n return inputValue !== '';\n }\n\n private get isTokenValueChanged() {\n const { inputValue, editingTokenIndex } = this.state;\n const { selectedItems, valueToString } = this.props;\n\n if (this.isEditingMode) {\n return valueToString(selectedItems[editingTokenIndex]) !== inputValue;\n }\n\n return false;\n }\n\n private isBlurToMenu = (event: FocusEvent<HTMLElement>) => {\n if (this.menuRef) {\n const menu = getRootNode(this.tokensInputMenu?.getMenuRef());\n const relatedTarget = (event.relatedTarget || document.activeElement) as HTMLElement;\n\n if (menu && menu.contains(relatedTarget)) {\n return true;\n }\n }\n return false;\n };\n\n private handleWrapperMouseDown = (event: React.MouseEvent<HTMLElement>) => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: true });\n const target = event.target as HTMLElement;\n const isClickOnToken =\n target && this.wrapper?.contains(target) && target !== this.wrapper! && target !== this.input!;\n if (!isClickOnToken) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n }\n };\n\n private handleWrapperMouseUp = () => {\n this.dispatch({ type: 'SET_PREVENT_BLUR', payload: false });\n };\n\n private handleCopy = (event: any) => {\n if (!this.state.inFocus || this.state.activeTokens.length === 0 || this.isCursorVisible) {\n return;\n }\n event.preventDefault();\n\n // упорядочивание токенов по индексу\n const tokens = this.state.activeTokens\n .map((token) => this.props.selectedItems.indexOf(token))\n .sort()\n .map((index) => this.props.selectedItems[index])\n .map((item) => this.props.valueToString(item));\n event.clipboardData.setData('text/plain', tokens.join(this.props.delimiters[0]));\n };\n\n private handleInputPaste = (event: React.ClipboardEvent<HTMLElement>) => {\n if (this.type === TokenInputType.WithReference || !event.clipboardData) {\n return;\n }\n let paste = event.clipboardData.getData('text');\n const { delimiters } = this.props;\n if (delimiters.some((delimiter) => paste.includes(delimiter))) {\n event.preventDefault();\n event.stopPropagation();\n for (const delimiter of delimiters) {\n paste = paste.split(delimiter).join(delimiters[0]);\n }\n const tokens = paste.split(delimiters[0]);\n const items = tokens\n .map((token) => this.props.valueToItem(token))\n .filter((item) => !this.hasValueInItems(this.props.selectedItems, item));\n const newItems = this.props.selectedItems.concat(items);\n this.props.onValueChange(newItems);\n\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n this.tryGetItems();\n }\n };\n\n private tryGetItems = async (query = '') => {\n if (this.props.getItems && (this.state.inputValue !== '' || !this.props.hideMenuIfEmptyInputValue)) {\n this.dispatch({ type: 'SET_LOADING', payload: true });\n const autocompleteItems = await this.props.getItems(query);\n this.dispatch({ type: 'SET_LOADING', payload: false });\n\n const isSelectedItem = (item: T) => this.hasValueInItems(this.props.selectedItems, item);\n const isEditingItem = (item: T) => {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n return !!editingItem && isEqual(item, editingItem);\n };\n\n const autocompleteItemsUnique = autocompleteItems.filter((item) => !isSelectedItem(item) || isEditingItem(item));\n\n if (this.isEditingMode) {\n const editingItem = this.props.selectedItems[this.state.editingTokenIndex];\n if (\n isEqual(editingItem, this.props.valueToItem(this.state.inputValue)) &&\n !this.hasValueInItems(autocompleteItemsUnique, editingItem)\n ) {\n autocompleteItemsUnique.unshift(editingItem);\n }\n }\n\n if (query === '' || this.state.inputValue !== '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: autocompleteItemsUnique }, () => {\n LayoutEvents.emit();\n this.highlightMenuItem();\n });\n }\n const selectItemIndex = autocompleteItemsUnique.findIndex(\n (item) => this.props.valueToString(item).toLowerCase() === this.state.inputValue.toLowerCase(),\n );\n if (this.menuRef) {\n this.menuRef.highlightItem(selectItemIndex < 0 ? 0 : selectItemIndex);\n }\n }\n };\n\n private handleKeyDown = (event: KeyboardEvent<HTMLTextAreaElement>) => {\n if (this.isCursorVisible) {\n this.handleInputKeyDown(event);\n } else {\n this.handleWrapperKeyDown(event);\n }\n };\n\n private handleInputKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n e.stopPropagation();\n\n if (\n (this.type !== TokenInputType.WithReference &&\n this.props.delimiters.some((key) => key === e.key || (key === ',' && isKeyComma(e)))) ||\n (isKeyEnter(e) && this.type === TokenInputType.WithoutReference)\n ) {\n e.preventDefault();\n const newValue = this.state.inputValue;\n if (newValue !== '') {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n } else {\n this.handleAddItem();\n }\n }\n }\n\n switch (true) {\n case isKeyEnter(e):\n if (this.menuRef) {\n this.menuRef.enter(e);\n }\n // don't allow textarea\n // became multiline\n e.preventDefault();\n break;\n case isKeyArrowVertical(e):\n e.preventDefault();\n if (this.menuRef) {\n if (isKeyArrowUp(e)) {\n this.menuRef.up();\n } else {\n this.menuRef.down();\n }\n }\n break;\n case isKeyEscape(e):\n this.input?.blur();\n break;\n case isKeyBackspace(e):\n if (!this.isEditingMode) {\n this.moveFocusToLastToken();\n }\n break;\n case isKeyArrowLeft(e):\n if (this.input?.selectionStart === 0) {\n this.moveFocusToLastToken();\n }\n break;\n }\n };\n\n private moveFocusToLastToken() {\n const items = this.props.selectedItems;\n if (this.state.inputValue === '' && items && items.length > 0) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: items.slice(-1) });\n }\n }\n\n private focusInput = () => {\n requestAnimationFrame(() => this.input?.focus());\n };\n\n private selectInputText = () => {\n if (this.input) {\n this.input.setSelectionRange(0, this.state.inputValue.length);\n }\n };\n\n private handleWrapperKeyDown = (e: KeyboardEvent<HTMLElement>) => {\n switch (true) {\n case isKeyBackspace(e):\n case isKeyDelete(e): {\n if (!this.isEditingMode) {\n const itemsNew = this.props.selectedItems.filter(\n (item) => !this.hasValueInItems(this.state.activeTokens, item),\n );\n this.props.onValueChange(itemsNew);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => {\n LayoutEvents.emit();\n this.input?.focus();\n });\n }\n break;\n }\n case isKeyArrowHorizontal(e):\n this.handleWrapperArrows(e);\n break;\n case isKeyEscape(e):\n this.wrapper?.blur();\n break;\n case isKeyEnter(e):\n e.preventDefault();\n if (this.state.activeTokens.length === 1) {\n this.handleTokenEdit(this.state.activeTokens[0]);\n }\n break;\n case isShortcutSelectAll(e):\n e.preventDefault();\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: this.props.selectedItems,\n });\n break;\n }\n };\n\n private handleWrapperArrows = (e: KeyboardEvent<HTMLElement>) => {\n e.preventDefault();\n const activeTokens = this.state.activeTokens;\n const activeItemIndex = this.props.selectedItems.indexOf(activeTokens[0]);\n const newItemIndex = activeItemIndex + (isKeyArrowLeft(e) ? -1 : +1);\n const isLeftEdge = activeItemIndex === 0 && isKeyArrowLeft(e);\n const isRightEdge = activeItemIndex === this.props.selectedItems.length - 1 && isKeyArrowRight(e);\n if (!e.shiftKey && activeTokens.length === 1) {\n this.handleWrapperArrowsWithoutShift(isLeftEdge, isRightEdge, newItemIndex);\n } else {\n this.handleWrapperArrowsWithShift(isLeftEdge, isRightEdge, newItemIndex);\n }\n };\n\n private handleWrapperArrowsWithoutShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (isRightEdge) {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' }, () => this.input?.focus());\n } else if (!isLeftEdge) {\n this.dispatch({\n type: 'SET_ACTIVE_TOKENS',\n payload: [this.props.selectedItems[newItemIndex]],\n });\n }\n };\n\n private handleWrapperArrowsWithShift = (isLeftEdge: boolean, isRightEdge: boolean, newItemIndex: number) => {\n if (!isLeftEdge && !isRightEdge) {\n const itemNew = this.props.selectedItems[newItemIndex];\n const itemsNew = [itemNew, ...this.state.activeTokens.filter((item) => !isEqual(item, itemNew))];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: itemsNew });\n }\n };\n\n private handleValueChange = (items: T[]) => {\n this.props.onValueChange(items);\n };\n\n private handleAddItem = () => {\n const item = this.props.valueToItem(this.state.inputValue);\n if (item) {\n this.selectItem(item);\n }\n };\n\n private selectItem = (item: T) => {\n const { selectedItems } = this.props;\n\n if (this.isEditingMode) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(item) }, this.finishTokenEdit);\n } else if (!this.hasValueInItems(selectedItems, item)) {\n this.handleValueChange(selectedItems.concat([item]));\n this.dispatch({ type: 'CLEAR_INPUT' });\n this.tryGetItems();\n }\n };\n\n private handleRemoveToken = (item: T) => {\n this.props.onValueChange(this.props.selectedItems.filter((_) => !isEqual(_, item)));\n const filteredActiveTokens = this.state.activeTokens.filter((_) => !isEqual(_, item));\n\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: filteredActiveTokens });\n if (filteredActiveTokens.length === 0) {\n this.focusInput();\n }\n\n this.tryGetItems();\n };\n\n private handleTokenClick = (event: React.MouseEvent<HTMLElement>, itemNew: T) => {\n const items = this.state.activeTokens;\n if (event.ctrlKey) {\n const newItems = this.hasValueInItems(this.state.activeTokens, itemNew)\n ? items.filter((item) => !isEqual(item, itemNew))\n : [...items, itemNew];\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: newItems });\n } else {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [itemNew] });\n }\n this.focusInput();\n };\n\n private handleTokenEdit = (itemNew: T) => {\n const editingTokenIndex = this.props.selectedItems.findIndex((item) => item === itemNew);\n this.dispatch({ type: 'SET_EDITING_TOKEN_INDEX', payload: editingTokenIndex });\n\n if (this.state.inputValue !== '') {\n if (this.state.reservedInputValue === undefined) {\n this.dispatch({ type: 'SET_TEMPORARY_QUERY', payload: this.state.inputValue });\n }\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: this.props.valueToString(itemNew) }, this.selectInputText);\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n\n this.tryGetItems();\n };\n\n private finishTokenEdit = () => {\n const { editingTokenIndex, inputValue, reservedInputValue } = this.state;\n const { selectedItems, valueToItem } = this.props;\n const editedItem = valueToItem(inputValue);\n const newItems = selectedItems.concat([]);\n\n if (!this.hasValueInItems(selectedItems, editedItem)) {\n newItems.splice(editingTokenIndex, 1, ...(inputValue !== '' ? [editedItem] : []));\n this.handleValueChange(newItems);\n }\n\n this.dispatch({ type: 'REMOVE_EDITING_TOKEN_INDEX' });\n\n if (reservedInputValue) {\n this.dispatch({ type: 'UPDATE_QUERY', payload: reservedInputValue });\n this.dispatch({ type: 'REMOVE_TEMPORARY_QUERY' });\n } else {\n this.dispatch({ type: 'CLEAR_INPUT' });\n }\n\n if (newItems.length === selectedItems.length) {\n this.dispatch({ type: 'SET_ACTIVE_TOKENS', payload: [newItems[editingTokenIndex]] });\n }\n };\n\n private checkForUnexpectedInput = () => {\n const { inputValue } = this.state;\n const { onUnexpectedInput } = this.props;\n\n if (onUnexpectedInput) {\n // чекаем не возвращает ли что-нибудь обработчик\n const returnedValue = onUnexpectedInput(inputValue);\n\n if (returnedValue === undefined) {\n return;\n }\n\n if (returnedValue === null) {\n this.dispatch({ type: 'CLEAR_INPUT' }, () => {\n if (this.isEditingMode) {\n this.finishTokenEdit();\n }\n });\n\n return;\n }\n\n if (returnedValue) {\n this.selectItem(returnedValue);\n }\n }\n };\n\n private handleChangeInputValue = (event: ChangeEvent<HTMLTextAreaElement>) => {\n this.dispatch({ type: 'REMOVE_ALL_ACTIVE_TOKENS' });\n let query = event.target.value.trimLeft();\n\n if (query.endsWith(' ')) {\n query = query.trimRight() + ' ';\n }\n if (this.state.inputValue !== '' && query === '') {\n this.dispatch({ type: 'SET_AUTOCOMPLETE_ITEMS', payload: undefined });\n }\n this.dispatch({ type: 'UPDATE_QUERY', payload: query }, () => {\n this.tryGetItems(query);\n });\n if (this.props.onInputValueChange) {\n this.props.onInputValueChange(query);\n }\n };\n\n private highlightMenuItem = () => {\n if (\n this.menuRef &&\n this.state.autocompleteItems &&\n this.state.autocompleteItems.length > 0 &&\n this.type !== TokenInputType.Combined\n ) {\n this.menuRef.highlightItem(0);\n }\n };\n\n private renderTokensStart = () => {\n const { editingTokenIndex } = this.state;\n const { selectedItems } = this.props;\n const delimiter = editingTokenIndex >= 0 ? editingTokenIndex : selectedItems.length;\n return selectedItems.slice(0, delimiter).map(this.renderToken);\n };\n\n private renderTokensEnd = () => {\n if (this.state.editingTokenIndex >= 0) {\n return this.props.selectedItems.slice(this.state.editingTokenIndex + 1).map(this.renderToken);\n }\n };\n\n private renderToken = (item: T) => {\n const { renderToken = defaultRenderToken, disabled } = this.props;\n\n const isActive = this.state.activeTokens.includes(item);\n\n // TODO useCallback\n const handleIconClick: React.MouseEventHandler<HTMLElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleRemoveToken(item);\n }\n };\n\n // TODO useCallback\n const handleTokenClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenClick(event, item);\n }\n };\n\n const handleTokenDoubleClick: React.MouseEventHandler<HTMLDivElement> = (event) => {\n event.stopPropagation();\n if (!this.isEditingMode) {\n this.handleTokenEdit(item);\n }\n };\n\n return renderToken(item, {\n isActive,\n onClick: handleTokenClick,\n onDoubleClick: handleTokenDoubleClick,\n onRemove: handleIconClick,\n disabled,\n });\n };\n\n private renderAddButton = (value = this.state.inputValue): React.ReactNode | undefined => {\n if (!this.showAddItemHint) {\n return;\n }\n\n if (this.props.renderAddButton) {\n return this.props.renderAddButton(value, this.handleAddItem);\n }\n\n const { addButtonComment, addButtonTitle } = this.locale;\n\n return (\n <MenuItem onClick={this.handleAddItem} comment={addButtonComment} key=\"renderAddButton\">\n {addButtonTitle} {value}\n </MenuItem>\n );\n };\n}\n"]}
@@ -2,6 +2,7 @@
2
2
  var _warning = _interopRequireDefault(require("warning"));
3
3
  var _lodash = _interopRequireDefault(require("lodash.isequal"));
4
4
 
5
+ var _utils = require("../../lib/utils");
5
6
  var _ThemeFactory = require("../../lib/theming/ThemeFactory");
6
7
  var _Popup = require("../../internal/Popup");
7
8
  var _RenderLayer = require("../../internal/RenderLayer");
@@ -239,7 +240,7 @@ Tooltip = (0, _rootNode.rootNode)(_class = (0, _decorator.responsiveLayout)(_cla
239
240
 
240
241
  renderContent = function () {
241
242
  var content = _this.props.render ? _this.props.render() : null;
242
- if (content == null) {
243
+ if ((0, _utils.isNullable)(content)) {
243
244
  return null;
244
245
  }
245
246
 
@@ -343,6 +344,8 @@ Tooltip = (0, _rootNode.rootNode)(_class = (0, _decorator.responsiveLayout)(_cla
343
344
 
344
345
 
345
346
 
347
+
348
+
346
349
 
347
350
 
348
351
 
@@ -559,7 +562,7 @@ Tooltip = (0, _rootNode.rootNode)(_class = (0, _decorator.responsiveLayout)(_cla
559
562
  * Программно открывает тултип.
560
563
  * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>
561
564
  * @public
562
- */_proto.show = function show() {if (this.state.opened) return;if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {(0, _warning.default)(true, "Function 'show' is not supported with trigger specified '" + this.props.trigger + "'");return;}this.open();} /**
565
+ */_proto.show = function show() {if (this.state.opened) {return;}if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {(0, _warning.default)(true, "Function 'show' is not supported with trigger specified '" + this.props.trigger + "'");return;}this.open();} /**
563
566
  * Программно закрывает тултип.
564
567
  * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>
565
568
  * @public
@@ -1 +1 @@
1
- {"version":3,"sources":["Tooltip.tsx"],"names":["Positions","Tooltip","rootNode","responsiveLayout","state","opened","focused","hoverTimeout","contentElement","positions","clickedOutside","popupRef","React","createRef","renderContent","content","props","render","refContent","styles","tooltipContent","theme","renderCloseButton","getAnchorElement","current","anchorElement","mobileCloseHandler","trigger","close","node","open","setState","handleMouseEnter","event","isHoverAnchor","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","isMobileLayout","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","ThemeFactory","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","children","popup","renderPopup","setRootNode","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","DefaultPosition","isTestEnv","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\n@responsiveLayout\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n private isMobileLayout!: boolean;\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (content == null) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross || this.isMobileLayout) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<HTMLElement> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) return;\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n if (this.isMobileLayout) {\n return popup;\n }\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n mobileOnCloseRequest={this.mobileCloseHandler}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private mobileCloseHandler = () => {\n if (this.props.trigger === 'manual' || this.props.trigger === 'closed' || this.props.trigger === 'opened') {\n return;\n }\n\n this.close();\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n\n switch (this.props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
1
+ {"version":3,"sources":["Tooltip.tsx"],"names":["Positions","Tooltip","rootNode","responsiveLayout","state","opened","focused","hoverTimeout","contentElement","positions","clickedOutside","popupRef","React","createRef","renderContent","content","props","render","refContent","styles","tooltipContent","theme","renderCloseButton","getAnchorElement","current","anchorElement","mobileCloseHandler","trigger","close","node","open","setState","handleMouseEnter","event","isHoverAnchor","target","clearHoverTimeout","window","setTimeout","delay","handleMouseLeave","isMobileLayout","relatedTarget","handleClick","handleClickOutsideAnchor","isClickOutsideContent","onCloseRequest","handleFocus","handleBlur","handleCloseButtonClick","stopPropagation","onCloseClick","defaultPrevented","componentDidUpdate","prevProps","allowedPositions","pos","posChanged","allowedChanged","componentWillUnmount","ThemeFactory","create","popupPinOffset","tooltipPinOffset","popupMargin","tooltipMargin","popupBorder","tooltipBorder","popupBorderRadius","tooltipBorderRadius","popupPinSize","tooltipPinSize","popupPinOffsetX","tooltipPinOffsetX","popupPinOffsetY","tooltipPinOffsetY","renderMain","hasCross","closeButton","undefined","triggersWithoutCloseButton","includes","cross","show","hide","getProps","popupProps","layerProps","active","children","popup","renderPopup","setRootNode","disableAnimations","getPositions","onOpen","onClose","index","indexOf","Error","join","slice","useWrapper","onClickOutside","onMouseEnter","onMouseLeave","onClick","onFocus","onBlur","clearTimeout","Element","PureComponent","__KONTUR_REACT_UI__","propTypes","propName","componentName","Array","isArray","defaultProps","DefaultPosition","isTestEnv","closeOnChildrenMouseLeave"],"mappings":"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","sourcesContent":["import React from 'react';\nimport warning from 'warning';\nimport isEqual from 'lodash.isequal';\n\nimport { isNullable } from '../../lib/utils';\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { DefaultPosition, Popup, PopupProps, PopupPositionsType } from '../../internal/Popup';\nimport { RenderLayer, RenderLayerProps } from '../../internal/RenderLayer';\nimport { CrossIcon } from '../../internal/icons/CrossIcon';\nimport { Nullable } from '../../typings/utility-types';\nimport { MouseEventType } from '../../typings/event-types';\nimport { containsTargetOrRenderContainer } from '../../lib/listenFocusOutside';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { Theme } from '../../lib/theming/Theme';\nimport { isTestEnv } from '../../lib/currentEnvironment';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { responsiveLayout } from '../ResponsiveLayout/decorator';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\nimport { InstanceWithAnchorElement } from '../../lib/InstanceWithAnchorElement';\n\nimport { styles } from './Tooltip.styles';\n\nexport type TooltipTrigger =\n /** Наведение на children и на тултип */\n | 'hover'\n /** Клик на children */\n | 'click'\n /** Фокус на children */\n | 'focus'\n /** Наведение на children и на тултип и фокус на children */\n | 'hover&focus'\n /** Просто открыт */\n | 'opened'\n /** Просто закрыт */\n | 'closed'\n /** Наведение ТОЛЬКО на children, а не на тултип */\n | 'hoverAnchor'\n /** Управление через публичные функции show и hide */\n | 'manual';\n\nexport interface TooltipProps extends CommonProps {\n /**\n * Относительно какого элемента позиционировать тултип\n */\n anchorElement?: HTMLElement;\n\n /**\n * Если не указан `anchorElement` то тултип будет позиционироваться\n * относительно дочерних элементов\n */\n children?: React.ReactNode;\n\n className?: string;\n\n /**\n * Показывать крестик для закрытия тултипа. По-умолчанию крестик\n * показывается если проп *trigger* не `hover` и не `focus`.\n */\n closeButton?: boolean;\n\n /**\n * Функция, которая возвращает содержимое тултипа.\n *\n * Если эта функция вернула `null`, то тултип не показывается.\n */\n render?: Nullable<() => React.ReactNode>;\n\n /**\n * Значение по умолчанию: `\"top left\"`.\n */\n pos: PopupPositionsType;\n\n /**\n * Триггер открытия тултипа\n * ```ts\n * type TooltipTrigger =\n * | 'hover'\n * | 'click'\n * | 'focus'\n * | 'hover&focus'\n * | 'opened'\n * | 'closed'\n * | 'hoverAnchor'\n * | 'manual';\n * ```\n */\n trigger: TooltipTrigger;\n\n /**\n * Хэндлер, вызываемый при клике по крестику\n */\n onCloseClick?: React.MouseEventHandler<HTMLElement>;\n\n /**\n * Хэндлер, вызываемый при клике по крестику или\n * снаружи тултипа\n */\n onCloseRequest?: () => void;\n\n /**\n * Хэндлер, вызываемый при закрытии тултипа\n */\n onClose?: () => void;\n\n /**\n * Хэндлер, вызываемый при открытии тултипа\n */\n onOpen?: () => void;\n\n /**\n * Список позиций, которые тултип будет занимать.\n * Если положение тултипа в определенной позиции\n * будет выходить за край экрана, то будет выбрана\n * следующая позиция. Обязательно должен включать\n * позицию указанную в `pos`\n */\n allowedPositions: PopupPositionsType[];\n\n /**\n * Флаг отключения анимации.\n * @default false\n */\n disableAnimations: boolean;\n\n /**\n * Явно указывает, что вложенные элементы должны быть обёрнуты в `<span/>`. <br/> Используется для корректного позиционирования тултипа при двух и более вложенных элементах.\n *\n * _Примечание_: при **двух и более** вложенных элементах обёртка будет добавлена автоматически.\n */\n useWrapper: boolean;\n}\n\nexport interface TooltipState {\n opened: boolean;\n focused: boolean;\n}\n\nconst Positions: PopupPositionsType[] = [\n 'right bottom',\n 'right middle',\n 'right top',\n 'top right',\n 'top center',\n 'top left',\n 'left top',\n 'left middle',\n 'left bottom',\n 'bottom left',\n 'bottom center',\n 'bottom right',\n];\n\n@rootNode\n@responsiveLayout\nexport class Tooltip extends React.PureComponent<TooltipProps, TooltipState> implements InstanceWithAnchorElement {\n public static __KONTUR_REACT_UI__ = 'Tooltip';\n\n private isMobileLayout!: boolean;\n\n public static propTypes = {\n children(props: TooltipProps, propName: keyof TooltipProps, componentName: string) {\n const children = props[propName];\n warning(\n children || props.anchorElement,\n `[${componentName}]: you must provide either 'children' or 'anchorElement' prop for ${componentName} to work properly`,\n );\n warning(\n !(Array.isArray(children) && props.useWrapper === false),\n `[${componentName}]: you provided multiple children, but useWrapper={false} - forcing wrapper <span/> for positioning to work correctly`,\n );\n },\n };\n\n public static defaultProps = {\n pos: DefaultPosition,\n trigger: 'hover',\n allowedPositions: Positions,\n disableAnimations: isTestEnv,\n useWrapper: false,\n closeOnChildrenMouseLeave: false,\n };\n\n public static delay = 100;\n private static triggersWithoutCloseButton: TooltipTrigger[] = ['hover', 'hoverAnchor', 'focus', 'hover&focus'];\n\n public state: TooltipState = { opened: false, focused: false };\n private theme!: Theme;\n private hoverTimeout: Nullable<number> = null;\n private contentElement: Nullable<HTMLElement> = null;\n private positions: Nullable<PopupPositionsType[]> = null;\n private clickedOutside = true;\n private setRootNode!: TSetRootNode;\n\n private popupRef = React.createRef<Popup>();\n public componentDidUpdate(prevProps: TooltipProps) {\n if (this.props.trigger === 'closed' && this.state.opened) {\n this.close();\n }\n\n const { allowedPositions, pos } = this.props;\n const posChanged = prevProps.pos !== pos;\n const allowedChanged = !isEqual(prevProps.allowedPositions, allowedPositions);\n\n if (posChanged || allowedChanged) {\n this.positions = null;\n }\n }\n\n public componentWillUnmount() {\n this.clearHoverTimeout();\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n this.theme = theme;\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipPinOffset,\n popupMargin: theme.tooltipMargin,\n popupBorder: theme.tooltipBorder,\n popupBorderRadius: theme.tooltipBorderRadius,\n popupPinSize: theme.tooltipPinSize,\n popupPinOffsetX: theme.tooltipPinOffsetX,\n popupPinOffsetY: theme.tooltipPinOffsetY,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderContent = () => {\n const content = this.props.render ? this.props.render() : null;\n if (isNullable(content)) {\n return null;\n }\n\n return (\n <div ref={this.refContent} className={styles.tooltipContent(this.theme)}>\n {content}\n {this.renderCloseButton()}\n </div>\n );\n };\n\n public renderCloseButton() {\n const hasCross =\n this.props.closeButton === undefined\n ? !Tooltip.triggersWithoutCloseButton.includes(this.props.trigger)\n : this.props.closeButton;\n\n if (!hasCross || this.isMobileLayout) {\n return null;\n }\n\n return (\n <div className={styles.cross(this.theme)} onClick={this.handleCloseButtonClick}>\n <CrossIcon />\n </div>\n );\n }\n\n public getAnchorElement = (): Nullable<HTMLElement> => {\n return this.popupRef.current?.anchorElement;\n };\n\n /**\n * Программно открывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public show() {\n if (this.state.opened) {\n return;\n }\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'show' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.open();\n }\n\n /**\n * Программно закрывает тултип.\n * <p>Не действует если проп *trigger* `'opened'` или `'closed'`.</p>\n * @public\n */\n public hide() {\n if (this.props.trigger === 'opened' || this.props.trigger === 'closed') {\n warning(true, `Function 'hide' is not supported with trigger specified '${this.props.trigger}'`);\n return;\n }\n this.close();\n }\n\n private renderMain() {\n const props = this.props;\n const content = this.renderContent();\n const { popupProps, layerProps = { active: false } } = this.getProps();\n const anchorElement = props.children || props.anchorElement;\n const popup = this.renderPopup(anchorElement, popupProps, content);\n\n if (this.isMobileLayout) {\n return popup;\n }\n\n return (\n <RenderLayer {...layerProps} getAnchorElement={this.getAnchorElement}>\n {popup}\n </RenderLayer>\n );\n }\n\n private renderPopup(\n anchorElement: React.ReactNode | HTMLElement,\n popupProps: Partial<PopupProps>,\n content: JSX.Element | null,\n ) {\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <Popup\n anchorElement={anchorElement}\n hasPin\n hasShadow\n maxWidth=\"none\"\n opened={this.state.opened}\n disableAnimations={this.props.disableAnimations}\n positions={this.getPositions()}\n ignoreHover={this.props.trigger === 'hoverAnchor'}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n mobileOnCloseRequest={this.mobileCloseHandler}\n tryPreserveFirstRenderedPosition\n ref={this.popupRef}\n {...popupProps}\n >\n {content}\n </Popup>\n </CommonWrapper>\n );\n }\n\n private mobileCloseHandler = () => {\n if (this.props.trigger === 'manual' || this.props.trigger === 'closed' || this.props.trigger === 'opened') {\n return;\n }\n\n this.close();\n };\n\n private refContent = (node: HTMLElement | null) => {\n this.contentElement = node;\n };\n\n private getPositions() {\n if (!this.positions) {\n const allowedPositions = this.props.allowedPositions;\n const index = allowedPositions.indexOf(this.props.pos);\n if (index === -1) {\n throw new Error('Unexpected position passed to Tooltip. Expected one of: ' + allowedPositions.join(', '));\n }\n\n this.positions = [...allowedPositions.slice(index), ...allowedPositions.slice(0, index)];\n }\n\n return this.positions;\n }\n\n private getProps(): {\n layerProps?: Partial<RenderLayerProps>;\n popupProps: Partial<PopupProps>;\n } {\n const props = this.props;\n const useWrapper = !!props.children && props.useWrapper;\n\n switch (this.props.trigger) {\n case 'opened':\n return {\n layerProps: {\n active: true,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n opened: true,\n useWrapper,\n },\n };\n\n case 'closed':\n return {\n popupProps: {\n opened: false,\n useWrapper,\n },\n };\n\n case 'hoverAnchor':\n case 'hover':\n return {\n popupProps: {\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n case 'manual':\n return {\n popupProps: {\n useWrapper,\n },\n };\n case 'click':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onClick: this.handleClick,\n useWrapper,\n },\n };\n\n case 'focus':\n return {\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n useWrapper,\n },\n };\n\n case 'hover&focus':\n return {\n layerProps: {\n active: this.state.opened,\n onClickOutside: this.handleClickOutsideAnchor,\n },\n popupProps: {\n onFocus: this.handleFocus,\n onBlur: this.handleBlur,\n onMouseEnter: this.handleMouseEnter,\n onMouseLeave: this.handleMouseLeave,\n useWrapper,\n },\n };\n\n default:\n throw new Error('Unknown trigger specified: ' + props.trigger);\n }\n }\n\n private open = () => this.setState({ opened: true });\n\n private close = () => this.setState({ opened: false });\n\n private clearHoverTimeout() {\n if (this.hoverTimeout) {\n clearTimeout(this.hoverTimeout);\n this.hoverTimeout = null;\n }\n }\n\n private handleMouseEnter = (event: MouseEventType) => {\n const isHoverAnchor = this.props.trigger === 'hoverAnchor';\n if (isHoverAnchor && event.target === this.contentElement) {\n return;\n }\n\n this.clearHoverTimeout();\n\n this.hoverTimeout = window.setTimeout(this.open, Tooltip.delay);\n };\n\n private handleMouseLeave = (event: MouseEventType) => {\n if (this.isMobileLayout) {\n return;\n }\n\n if (\n (this.props.trigger === 'hover&focus' && this.state.focused) ||\n (this.props.trigger === 'hover' && event.relatedTarget === this.contentElement)\n ) {\n return;\n }\n\n this.clearHoverTimeout();\n\n if (this.props.trigger === 'hoverAnchor') {\n this.close();\n } else {\n this.hoverTimeout = window.setTimeout(this.close, Tooltip.delay);\n }\n };\n\n private handleClick = () => {\n this.open();\n };\n\n private handleClickOutsideAnchor = (event: Event) => {\n this.clickedOutside = this.isClickOutsideContent(event);\n if (this.clickedOutside) {\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n this.close();\n }\n };\n\n private isClickOutsideContent(event: Event) {\n if (this.contentElement && event.target instanceof Element) {\n return !containsTargetOrRenderContainer(event.target)(this.contentElement);\n }\n\n return true;\n }\n\n private handleFocus = () => {\n this.setState({ focused: true });\n this.open();\n };\n\n private handleBlur = () => {\n if (this.props.trigger === 'hover&focus' && this.clickedOutside) {\n this.close();\n }\n\n if (this.props.trigger === 'focus') {\n this.close();\n }\n\n this.clickedOutside = true;\n this.setState({ focused: false });\n };\n\n private handleCloseButtonClick = (event: React.MouseEvent<HTMLElement>) => {\n event.stopPropagation();\n\n if (this.props.onCloseClick) {\n this.props.onCloseClick(event);\n }\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (this.props.onCloseRequest) {\n this.props.onCloseRequest();\n }\n\n this.close();\n };\n}\n"]}
@@ -5,7 +5,7 @@ import { MenuHeaderProps } from '../MenuHeader';
5
5
  import { PopupPositionsType } from '../../internal/Popup';
6
6
  import { CommonProps } from '../../internal/CommonWrapper';
7
7
  export declare type TooltipMenuChildType = React.ReactElement<MenuItemProps | {} | MenuHeaderProps>;
8
- export interface TooltipMenuProps extends CommonProps {
8
+ export interface TooltipMenuProps extends CommonProps, Pick<PopupMenuProps, 'onOpen' | 'onClose'> {
9
9
  children?: TooltipMenuChildType | TooltipMenuChildType[];
10
10
  /** Максимальная высота меню */
11
11
  menuMaxHeight?: number | string;
@@ -114,6 +114,8 @@ TooltipMenu = (0, _rootNode.rootNode)(_class = (_temp = _class2 = /*#__PURE__*/f
114
114
  header: this.props.header,
115
115
  footer: this.props.footer,
116
116
  positions: this.props.positions,
117
+ onOpen: this.props.onOpen,
118
+ onClose: this.props.onClose,
117
119
  popupHasPin: true,
118
120
  disableAnimations: this.props.disableAnimations },
119
121
 
@@ -1 +1 @@
1
- {"version":3,"sources":["TooltipMenu.tsx"],"names":["TooltipMenu","rootNode","props","caption","isProductionEnv","Error","render","theme","ThemeFactory","create","popupPinOffset","tooltipMenuPinOffset","popupMargin","tooltipMenuMargin","popupPinSize","tooltipMenuPinSize","renderMain","setRootNode","menuMaxHeight","menuWidth","header","footer","positions","disableAnimations","children","React","Component","__KONTUR_REACT_UI__","defaultProps","isTestEnv"],"mappings":"yUAAA;;AAEA;AACA;AACA;;AAEA;;;AAGA;AACA,8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;AAEaA,W,OADZC,kB;;;;;;;AAQC,uBAAYC,KAAZ,EAAqC;AACnC,wCAAMA,KAAN;;AAEA,QAAI,CAACA,KAAK,CAACC,OAAP,IAAkB,CAACC,mCAAvB,EAAwC;AACtC,YAAM,IAAIC,KAAJ,CAAU,+BAAV,CAAN;AACD,KALkC;AAMpC,G;;AAEMC,EAAAA,M,GAAP,kBAAgB;AACd;AACE,mCAAC,0BAAD,CAAc,QAAd;AACG,gBAACC,KAAD,EAAW;AACV;AACE,uCAAC,0BAAD,CAAc,QAAd;AACE,YAAA,KAAK,EAAEC,2BAAaC,MAAb;AACL;AACEC,cAAAA,cAAc,EAAEH,KAAK,CAACI,oBADxB;AAEEC,cAAAA,WAAW,EAAEL,KAAK,CAACM,iBAFrB;AAGEC,cAAAA,YAAY,EAAEP,KAAK,CAACQ,kBAHtB,EADK;;AAMLR,YAAAA,KANK,CADT;;;AAUG,UAAA,MAAI,CAACS,UAAL,EAVH,CADF;;;AAcD,OAhBH,CADF;;;AAoBD,G;;AAEMA,EAAAA,U,GAAP,sBAAoB;AAClB,QAAI,CAAC,KAAKd,KAAL,CAAWC,OAAhB,EAAyB;AACvB,aAAO,IAAP;AACD;;AAED;AACE,mCAAC,4BAAD,2BAAe,WAAW,EAAE,KAAKc,WAAjC,IAAkD,KAAKf,KAAvD;AACE,mCAAC,oBAAD;AACE,QAAA,aAAa,EAAE,KAAKA,KAAL,CAAWgB,aAD5B;AAEE,QAAA,SAAS,EAAE,KAAKhB,KAAL,CAAWiB,SAFxB;AAGE,QAAA,OAAO,EAAE,KAAKjB,KAAL,CAAWC,OAHtB;AAIE,QAAA,MAAM,EAAE,KAAKD,KAAL,CAAWkB,MAJrB;AAKE,QAAA,MAAM,EAAE,KAAKlB,KAAL,CAAWmB,MALrB;AAME,QAAA,SAAS,EAAE,KAAKnB,KAAL,CAAWoB,SANxB;AAOE,QAAA,WAAW,MAPb;AAQE,QAAA,iBAAiB,EAAE,KAAKpB,KAAL,CAAWqB,iBARhC;;AAUG,WAAKrB,KAAL,CAAWsB,QAVd,CADF,CADF;;;;AAgBD,G,sBA3D8BC,eAAMC,S,WACvBC,mB,GAAsB,a,UAGtBC,Y,GAAe,EAC3BL,iBAAiB,EAAEM,6BADQ,E","sourcesContent":["import React from 'react';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { PopupMenu, PopupMenuProps } from '../../internal/PopupMenu';\nimport { MenuItemProps } from '../MenuItem';\nimport { isProductionEnv, isTestEnv } from '../../lib/currentEnvironment';\nimport { MenuHeaderProps } from '../MenuHeader';\nimport { PopupPositionsType } from '../../internal/Popup';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nexport type TooltipMenuChildType = React.ReactElement<MenuItemProps | {} | MenuHeaderProps>;\n\nexport interface TooltipMenuProps extends CommonProps {\n children?: TooltipMenuChildType | TooltipMenuChildType[];\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо `caption`,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: PopupMenuProps['caption'];\n /**\n * Произвольный элемент, который будет отрендерен в шапке меню.\n *\n * _Примечание_: контрол [`MenuHeader`](#/Components/MenuHeader) передаётся только в `children` меню-контролов. Не стоит передавать `MenuHeader` в `header`.\n */\n header?: React.ReactNode;\n /**\n * Произвольный элемент, который будет отрендерен в подвале меню.\n *\n * Перед элементом переданным в `footer` будет отрендерен [`MenuSeparator`](#/Components/MenuSeparator).\n */\n footer?: React.ReactNode;\n /** Список позиций доступных для расположения выпадашки относительно `caption`.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n */\n positions?: PopupPositionsType[];\n /**\n * Не показывать анимацию\n */\n disableAnimations: boolean;\n}\n\n/**\n * Меню, раскрывающееся по клику на переданный в `caption` элемент.\n *\n * Положение меню задаётся с помощью массива `positions` и работает так:\n * первое значение в массиве - дефолтная позиция, меню раскроется на этой позиции, если оно не будет выходить за пределы `viewport`,\n * если раскрыться в дефолтной позиции не получится - будет использована следующая позиция, и так далее, пока не будет достигнут конец массива. Если все положения из списка будут выходить за пределы `viewport`, в качестве положения будет использовано первое значение в массиве.\n *\n * Если меню должно раскрываться только в одну сторону - массив `positions` должен содержать только один элемент: сторону, в которую должно открываться меню.\n *\n * Если массив `positions` не передан (или передан пустой массив), будут использованы всевозможные значения.\n */\n@rootNode\nexport class TooltipMenu extends React.Component<TooltipMenuProps> {\n public static __KONTUR_REACT_UI__ = 'TooltipMenu';\n private setRootNode!: TSetRootNode;\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n };\n constructor(props: TooltipMenuProps) {\n super(props);\n\n if (!props.caption && !isProductionEnv) {\n throw new Error('Prop \"caption\" is required!!!');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipMenuPinOffset,\n popupMargin: theme.tooltipMenuMargin,\n popupPinSize: theme.tooltipMenuPinSize,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n if (!this.props.caption) {\n return null;\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <PopupMenu\n menuMaxHeight={this.props.menuMaxHeight}\n menuWidth={this.props.menuWidth}\n caption={this.props.caption}\n header={this.props.header}\n footer={this.props.footer}\n positions={this.props.positions}\n popupHasPin\n disableAnimations={this.props.disableAnimations}\n >\n {this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n}\n"]}
1
+ {"version":3,"sources":["TooltipMenu.tsx"],"names":["TooltipMenu","rootNode","props","caption","isProductionEnv","Error","render","theme","ThemeFactory","create","popupPinOffset","tooltipMenuPinOffset","popupMargin","tooltipMenuMargin","popupPinSize","tooltipMenuPinSize","renderMain","setRootNode","menuMaxHeight","menuWidth","header","footer","positions","onOpen","onClose","disableAnimations","children","React","Component","__KONTUR_REACT_UI__","defaultProps","isTestEnv"],"mappings":"yUAAA;;AAEA;AACA;AACA;;AAEA;;;AAGA;AACA,8C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,G;;AAEaA,W,OADZC,kB;;;;;;;AAQC,uBAAYC,KAAZ,EAAqC;AACnC,wCAAMA,KAAN;;AAEA,QAAI,CAACA,KAAK,CAACC,OAAP,IAAkB,CAACC,mCAAvB,EAAwC;AACtC,YAAM,IAAIC,KAAJ,CAAU,+BAAV,CAAN;AACD,KALkC;AAMpC,G;;AAEMC,EAAAA,M,GAAP,kBAAgB;AACd;AACE,mCAAC,0BAAD,CAAc,QAAd;AACG,gBAACC,KAAD,EAAW;AACV;AACE,uCAAC,0BAAD,CAAc,QAAd;AACE,YAAA,KAAK,EAAEC,2BAAaC,MAAb;AACL;AACEC,cAAAA,cAAc,EAAEH,KAAK,CAACI,oBADxB;AAEEC,cAAAA,WAAW,EAAEL,KAAK,CAACM,iBAFrB;AAGEC,cAAAA,YAAY,EAAEP,KAAK,CAACQ,kBAHtB,EADK;;AAMLR,YAAAA,KANK,CADT;;;AAUG,UAAA,MAAI,CAACS,UAAL,EAVH,CADF;;;AAcD,OAhBH,CADF;;;AAoBD,G;;AAEMA,EAAAA,U,GAAP,sBAAoB;AAClB,QAAI,CAAC,KAAKd,KAAL,CAAWC,OAAhB,EAAyB;AACvB,aAAO,IAAP;AACD;;AAED;AACE,mCAAC,4BAAD,2BAAe,WAAW,EAAE,KAAKc,WAAjC,IAAkD,KAAKf,KAAvD;AACE,mCAAC,oBAAD;AACE,QAAA,aAAa,EAAE,KAAKA,KAAL,CAAWgB,aAD5B;AAEE,QAAA,SAAS,EAAE,KAAKhB,KAAL,CAAWiB,SAFxB;AAGE,QAAA,OAAO,EAAE,KAAKjB,KAAL,CAAWC,OAHtB;AAIE,QAAA,MAAM,EAAE,KAAKD,KAAL,CAAWkB,MAJrB;AAKE,QAAA,MAAM,EAAE,KAAKlB,KAAL,CAAWmB,MALrB;AAME,QAAA,SAAS,EAAE,KAAKnB,KAAL,CAAWoB,SANxB;AAOE,QAAA,MAAM,EAAE,KAAKpB,KAAL,CAAWqB,MAPrB;AAQE,QAAA,OAAO,EAAE,KAAKrB,KAAL,CAAWsB,OARtB;AASE,QAAA,WAAW,MATb;AAUE,QAAA,iBAAiB,EAAE,KAAKtB,KAAL,CAAWuB,iBAVhC;;AAYG,WAAKvB,KAAL,CAAWwB,QAZd,CADF,CADF;;;;AAkBD,G,sBA7D8BC,eAAMC,S,WACvBC,mB,GAAsB,a,UAGtBC,Y,GAAe,EAC3BL,iBAAiB,EAAEM,6BADQ,E","sourcesContent":["import React from 'react';\n\nimport { ThemeFactory } from '../../lib/theming/ThemeFactory';\nimport { ThemeContext } from '../../lib/theming/ThemeContext';\nimport { PopupMenu, PopupMenuProps } from '../../internal/PopupMenu';\nimport { MenuItemProps } from '../MenuItem';\nimport { isProductionEnv, isTestEnv } from '../../lib/currentEnvironment';\nimport { MenuHeaderProps } from '../MenuHeader';\nimport { PopupPositionsType } from '../../internal/Popup';\nimport { CommonProps, CommonWrapper } from '../../internal/CommonWrapper';\nimport { rootNode, TSetRootNode } from '../../lib/rootNode';\n\nexport type TooltipMenuChildType = React.ReactElement<MenuItemProps | {} | MenuHeaderProps>;\n\nexport interface TooltipMenuProps extends CommonProps, Pick<PopupMenuProps, 'onOpen' | 'onClose'> {\n children?: TooltipMenuChildType | TooltipMenuChildType[];\n /** Максимальная высота меню */\n menuMaxHeight?: number | string;\n /** Ширина меню */\n menuWidth?: number | string;\n /**\n * Элемент или функция возвращающая элемент,\n * если передана, используется вместо `caption`,\n * в таком случае управлять открытием и закрытием меню\n * придется в этой функции\n */\n caption: PopupMenuProps['caption'];\n /**\n * Произвольный элемент, который будет отрендерен в шапке меню.\n *\n * _Примечание_: контрол [`MenuHeader`](#/Components/MenuHeader) передаётся только в `children` меню-контролов. Не стоит передавать `MenuHeader` в `header`.\n */\n header?: React.ReactNode;\n /**\n * Произвольный элемент, который будет отрендерен в подвале меню.\n *\n * Перед элементом переданным в `footer` будет отрендерен [`MenuSeparator`](#/Components/MenuSeparator).\n */\n footer?: React.ReactNode;\n /** Список позиций доступных для расположения выпадашки относительно `caption`.\n *\n * Если во всех позициях выпадашка вылезает за пределы `viewport`, будет использована первая из этого списка.\n *\n * **Возможные значения**: `top left`, `top center`, `top right`, `right top`, `right middle`, `right bottom`, `bottom left`, `bottom center`, `bottom right`, `left top`, `left middle`, `left bottom`\n */\n positions?: PopupPositionsType[];\n /**\n * Не показывать анимацию\n */\n disableAnimations: boolean;\n}\n\n/**\n * Меню, раскрывающееся по клику на переданный в `caption` элемент.\n *\n * Положение меню задаётся с помощью массива `positions` и работает так:\n * первое значение в массиве - дефолтная позиция, меню раскроется на этой позиции, если оно не будет выходить за пределы `viewport`,\n * если раскрыться в дефолтной позиции не получится - будет использована следующая позиция, и так далее, пока не будет достигнут конец массива. Если все положения из списка будут выходить за пределы `viewport`, в качестве положения будет использовано первое значение в массиве.\n *\n * Если меню должно раскрываться только в одну сторону - массив `positions` должен содержать только один элемент: сторону, в которую должно открываться меню.\n *\n * Если массив `positions` не передан (или передан пустой массив), будут использованы всевозможные значения.\n */\n@rootNode\nexport class TooltipMenu extends React.Component<TooltipMenuProps> {\n public static __KONTUR_REACT_UI__ = 'TooltipMenu';\n private setRootNode!: TSetRootNode;\n\n public static defaultProps = {\n disableAnimations: isTestEnv,\n };\n constructor(props: TooltipMenuProps) {\n super(props);\n\n if (!props.caption && !isProductionEnv) {\n throw new Error('Prop \"caption\" is required!!!');\n }\n }\n\n public render() {\n return (\n <ThemeContext.Consumer>\n {(theme) => {\n return (\n <ThemeContext.Provider\n value={ThemeFactory.create(\n {\n popupPinOffset: theme.tooltipMenuPinOffset,\n popupMargin: theme.tooltipMenuMargin,\n popupPinSize: theme.tooltipMenuPinSize,\n },\n theme,\n )}\n >\n {this.renderMain()}\n </ThemeContext.Provider>\n );\n }}\n </ThemeContext.Consumer>\n );\n }\n\n public renderMain() {\n if (!this.props.caption) {\n return null;\n }\n\n return (\n <CommonWrapper rootNodeRef={this.setRootNode} {...this.props}>\n <PopupMenu\n menuMaxHeight={this.props.menuMaxHeight}\n menuWidth={this.props.menuWidth}\n caption={this.props.caption}\n header={this.props.header}\n footer={this.props.footer}\n positions={this.props.positions}\n onOpen={this.props.onOpen}\n onClose={this.props.onClose}\n popupHasPin\n disableAnimations={this.props.disableAnimations}\n >\n {this.props.children}\n </PopupMenu>\n </CommonWrapper>\n );\n }\n}\n"]}
@@ -56,7 +56,9 @@ var useDrop = function useDrop(props) {if (props === void 0) {props = {};}
56
56
  (0, _react.useEffect)(function () {
57
57
  var ref = droppableRef.current;
58
58
 
59
- if (!ref) return;
59
+ if (!ref) {
60
+ return;
61
+ }
60
62
 
61
63
  ref.addEventListener('dragenter', preventDefault);
62
64
  ref.addEventListener('dragleave', preventDefault);