@sberbusiness/triplex-next 1.40.0 → 1.41.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 (599) hide show
  1. package/chunks/{AlertProcessSpoiler-BNrk1vyk.js → AlertProcessSpoiler-Dnwmfds3.js} +16 -16
  2. package/chunks/{AlertProcessSpoiler-BNrk1vyk.js.map → AlertProcessSpoiler-Dnwmfds3.js.map} +1 -1
  3. package/chunks/{CalendarViewItem-knPscTce.js → CalendarViewItem-CeA4XADM.js} +30 -28
  4. package/chunks/CalendarViewItem-CeA4XADM.js.map +1 -0
  5. package/chunks/Card.module-CnX8TfnM.js +32 -0
  6. package/chunks/Card.module-CnX8TfnM.js.map +1 -0
  7. package/chunks/Carousel.module-By3qExUV.js +30 -0
  8. package/chunks/Carousel.module-By3qExUV.js.map +1 -0
  9. package/chunks/CheckboxTreeExtended.module-9l5Ifhk7.js +24 -0
  10. package/chunks/CheckboxTreeExtended.module-9l5Ifhk7.js.map +1 -0
  11. package/chunks/{Chip-CI8ALCUS.js → Chip-B5RNQL8v.js} +27 -27
  12. package/chunks/Chip-B5RNQL8v.js.map +1 -0
  13. package/chunks/Confirm.module-Cpg9tBFI.js +24 -0
  14. package/chunks/Confirm.module-Cpg9tBFI.js.map +1 -0
  15. package/chunks/{DropdownListItem-BqOoPFSx.js → DropdownListItem-BVgGltGX.js} +10 -10
  16. package/chunks/{DropdownListItem-BqOoPFSx.js.map → DropdownListItem-BVgGltGX.js.map} +1 -1
  17. package/chunks/DropdownMobile.module-DRF4HXhL.js +40 -0
  18. package/chunks/DropdownMobile.module-DRF4HXhL.js.map +1 -0
  19. package/chunks/Footer.module-C3ICz5DE.js +12 -0
  20. package/chunks/Footer.module-C3ICz5DE.js.map +1 -0
  21. package/chunks/{HeaderLayoutSidebar.module-MnhSBdiv.js → HeaderLayoutSidebar.module-CfWoWqQ1.js} +4 -4
  22. package/chunks/HeaderLayoutSidebar.module-CfWoWqQ1.js.map +1 -0
  23. package/chunks/HeaderTabs.module-CQ5eAWqH.js +12 -0
  24. package/chunks/HeaderTabs.module-CQ5eAWqH.js.map +1 -0
  25. package/chunks/{HeaderTitle.module-BGOYMt6r.js → HeaderTitle.module-DeWO1h-Y.js} +4 -4
  26. package/chunks/HeaderTitle.module-DeWO1h-Y.js.map +1 -0
  27. package/chunks/ImageGalleryExtendedMain.module-Ci9TjdxN.js +28 -0
  28. package/chunks/ImageGalleryExtendedMain.module-Ci9TjdxN.js.map +1 -0
  29. package/chunks/{ImageGalleryExtendedThumb-D6RAJpt8.js → ImageGalleryExtendedThumb-BWOvPHBA.js} +5 -5
  30. package/chunks/{ImageGalleryExtendedThumb-D6RAJpt8.js.map → ImageGalleryExtendedThumb-BWOvPHBA.js.map} +1 -1
  31. package/chunks/IslandAccordion.module-DDGI83_h.js +44 -0
  32. package/chunks/IslandAccordion.module-DDGI83_h.js.map +1 -0
  33. package/chunks/IslandWidgetFooter.module-DPeifuz4.js +12 -0
  34. package/chunks/IslandWidgetFooter.module-DPeifuz4.js.map +1 -0
  35. package/chunks/IslandWidgetHeader.module-6il25_jE.js +20 -0
  36. package/chunks/IslandWidgetHeader.module-6il25_jE.js.map +1 -0
  37. package/chunks/{LightBoxContent-d_LBU_ZW.js → LightBoxContent-CfT1YJ33.js} +14 -14
  38. package/chunks/{LightBoxContent-d_LBU_ZW.js.map → LightBoxContent-CfT1YJ33.js.map} +1 -1
  39. package/chunks/LightBoxControls.module-Cs64xjct.js +26 -0
  40. package/chunks/LightBoxControls.module-Cs64xjct.js.map +1 -0
  41. package/chunks/{LightBoxSideOverlayClose.module-eTdxNvSz.js → LightBoxSideOverlayClose.module-sV6yxJQT.js} +4 -4
  42. package/chunks/LightBoxSideOverlayClose.module-sV6yxJQT.js.map +1 -0
  43. package/chunks/{ListItemControlsButton-D2ONoqII.js → ListItemControlsButton-Cs8N-_FI.js} +9 -9
  44. package/chunks/{ListItemControlsButton-D2ONoqII.js.map → ListItemControlsButton-Cs8N-_FI.js.map} +1 -1
  45. package/chunks/ListItemTail.module-Cv3Fx6WM.js +18 -0
  46. package/chunks/ListItemTail.module-Cv3Fx6WM.js.map +1 -0
  47. package/chunks/ListMasterFooter.module-DcmWf5IP.js +14 -0
  48. package/chunks/ListMasterFooter.module-DcmWf5IP.js.map +1 -0
  49. package/chunks/ModalWindow.module-BsRM6pWm.js +28 -0
  50. package/chunks/ModalWindow.module-BsRM6pWm.js.map +1 -0
  51. package/chunks/Notification.module-Diy7bSw7.js +34 -0
  52. package/chunks/Notification.module-Diy7bSw7.js.map +1 -0
  53. package/chunks/Overlay.module-Bc3D2mQ-.js +30 -0
  54. package/chunks/Overlay.module-Bc3D2mQ-.js.map +1 -0
  55. package/chunks/Page.module-CqkiljCk.js +15 -0
  56. package/chunks/Page.module-CqkiljCk.js.map +1 -0
  57. package/chunks/SMSField.module-BY_XV_HG.js +26 -0
  58. package/chunks/SMSField.module-BY_XV_HG.js.map +1 -0
  59. package/chunks/SliderExtendedMarks.module-DXI6Xg6v.js +24 -0
  60. package/chunks/SliderExtendedMarks.module-DXI6Xg6v.js.map +1 -0
  61. package/chunks/{SliderExtendedRail-CVEwe6OK.js → SliderExtendedRail-D7gQetwK.js} +5 -5
  62. package/chunks/{SliderExtendedRail-CVEwe6OK.js.map → SliderExtendedRail-D7gQetwK.js.map} +1 -1
  63. package/chunks/StatusTracker.module-DYVyu4Qv.js +44 -0
  64. package/chunks/StatusTracker.module-DYVyu4Qv.js.map +1 -0
  65. package/chunks/{StepperStepArrowBorder-BO_ItxMh.js → StepperStepArrowBorder-CY-4Rorx.js} +16 -16
  66. package/chunks/{StepperStepArrowBorder-BO_ItxMh.js.map → StepperStepArrowBorder-CY-4Rorx.js.map} +1 -1
  67. package/chunks/{SuggestFieldMobileDropdownHint-DyfJuyUe.js → SuggestFieldMobileDropdownHint-B4k9UKDH.js} +3 -3
  68. package/chunks/{SuggestFieldMobileDropdownHint-DyfJuyUe.js.map → SuggestFieldMobileDropdownHint-B4k9UKDH.js.map} +1 -1
  69. package/chunks/TableFooter.module-C1BtmpbW.js +22 -0
  70. package/chunks/TableFooter.module-C1BtmpbW.js.map +1 -0
  71. package/chunks/TabsExtended.module-BVBDZGtj.js +26 -0
  72. package/chunks/TabsExtended.module-BVBDZGtj.js.map +1 -0
  73. package/chunks/TabsLine.module-DXgk6eNb.js +36 -0
  74. package/chunks/TabsLine.module-DXgk6eNb.js.map +1 -0
  75. package/chunks/TooltipDesktop.module-BKIRlstC.js +32 -0
  76. package/chunks/TooltipDesktop.module-BKIRlstC.js.map +1 -0
  77. package/chunks/TreeView.module-BZWQB1ox.js +12 -0
  78. package/chunks/TreeView.module-BZWQB1ox.js.map +1 -0
  79. package/chunks/{UploadZoneInput-BHUONqVR.js → UploadZoneInput-BdhIPJdP.js} +5 -5
  80. package/chunks/{UploadZoneInput-BHUONqVR.js.map → UploadZoneInput-BdhIPJdP.js.map} +1 -1
  81. package/chunks/{constants-C-WrqYH6.js → constants-Cn8ZrJM2.js} +27 -27
  82. package/chunks/{constants-C-WrqYH6.js.map → constants-Cn8ZrJM2.js.map} +1 -1
  83. package/chunks/{utils-BHxrQbA6.js → utils-Cr7DslJx.js} +8 -8
  84. package/chunks/utils-Cr7DslJx.js.map +1 -0
  85. package/chunks/{utils-D4UOxU49.js → utils-Dhu3zNqv.js} +27 -27
  86. package/chunks/{utils-D4UOxU49.js.map → utils-Dhu3zNqv.js.map} +1 -1
  87. package/chunks/{utils-BaakoACO.js → utils-Fg8ptXcX.js} +6 -6
  88. package/chunks/{utils-BaakoACO.js.map → utils-Fg8ptXcX.js.map} +1 -1
  89. package/chunks/{utils-g0xZYVuS.js → utils-QF2QqBDT.js} +11 -11
  90. package/chunks/{utils-g0xZYVuS.js.map → utils-QF2QqBDT.js.map} +1 -1
  91. package/components/Alert/AlertContext/AlertContext.js +7 -7
  92. package/components/Alert/AlertProcess/AlertProcess.js +2 -2
  93. package/components/Alert/AlertProcess/components/AlertProcessSpoiler.js +1 -1
  94. package/components/Amount/Amount.js +2 -2
  95. package/components/Avatar/Avatar.js +13 -13
  96. package/components/Badge/Badge.js +4 -4
  97. package/components/Badge/BadgeDot.js +4 -4
  98. package/components/Badge/components/BadgeContent.js +6 -6
  99. package/components/Badge/components/BadgePostfix.js +1 -1
  100. package/components/Badge/components/BadgePrefix.js +1 -1
  101. package/components/Body/Body.js +3 -3
  102. package/components/Button/Button.js +20 -20
  103. package/components/Button/ButtonBase.js +1 -1
  104. package/components/Button/ButtonDropdown.js +8 -8
  105. package/components/Button/ButtonDropdownExtended.js +2 -2
  106. package/components/Button/ButtonIcon.js +3 -3
  107. package/components/Calendar/Calendar.js +16 -16
  108. package/components/Calendar/Calendar.js.map +1 -1
  109. package/components/Calendar/CalendarContext.js.map +1 -1
  110. package/components/Calendar/CalendarViewContext.js.map +1 -1
  111. package/components/Calendar/components/CalendarControls.js +12 -32
  112. package/components/Calendar/components/CalendarControls.js.map +1 -1
  113. package/components/Calendar/components/CalendarFooter.js +3 -2
  114. package/components/Calendar/components/CalendarFooter.js.map +1 -1
  115. package/components/Calendar/components/CalendarView.js +1 -0
  116. package/components/Calendar/components/CalendarView.js.map +1 -1
  117. package/components/Calendar/components/CalendarViewDays.js +31 -55
  118. package/components/Calendar/components/CalendarViewDays.js.map +1 -1
  119. package/components/Calendar/components/CalendarViewItem.js +1 -1
  120. package/components/Calendar/components/CalendarViewMonths.js +30 -52
  121. package/components/Calendar/components/CalendarViewMonths.js.map +1 -1
  122. package/components/Calendar/components/CalendarViewYears.js +34 -55
  123. package/components/Calendar/components/CalendarViewYears.js.map +1 -1
  124. package/components/Calendar/utils.js +43 -10
  125. package/components/Calendar/utils.js.map +1 -1
  126. package/components/Card/CardAction.js +5 -5
  127. package/components/Card/CardStatic.js +2 -2
  128. package/components/Card/components/CardContent/CardContent.js +1 -1
  129. package/components/Card/components/CardContent/components/CardContentBody.js +1 -1
  130. package/components/Card/components/CardContent/components/CardContentFooter.js +1 -1
  131. package/components/Card/components/CardContent/components/CardContentHeader.js +1 -1
  132. package/components/Card/components/CardMedia.js +1 -1
  133. package/components/Card/enums.js +1 -0
  134. package/components/Card/enums.js.map +1 -1
  135. package/components/Card/utils.js +2 -1
  136. package/components/Card/utils.js.map +1 -1
  137. package/components/Carousel/Carousel.js +1 -1
  138. package/components/Carousel/CarouselButton.js +1 -1
  139. package/components/Carousel/CarouselIndicators.js +1 -1
  140. package/components/Carousel/CarouselItem.js +1 -1
  141. package/components/Carousel/CarouselTrack.js +1 -1
  142. package/components/Carousel/CarouselViewport.js +1 -1
  143. package/components/CarouselExtended/CarouselExtended.js +1 -1
  144. package/components/Checkbox/Checkbox.js +10 -10
  145. package/components/Checkbox/CheckboxXGroup.js +8 -8
  146. package/components/Checkbox/CheckboxYGroup.js +1 -1
  147. package/components/CheckboxTreeExtended/CheckboxTreeExtended.js +1 -1
  148. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedArrow.js +1 -1
  149. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedCheckbox.js +1 -1
  150. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedNode.js +1 -1
  151. package/components/Chip/Chip.js +1 -1
  152. package/components/Chip/ChipClearButton.js +1 -1
  153. package/components/Chip/ChipDatePicker/ChipDatePicker.js +1 -1
  154. package/components/Chip/ChipDatePicker/ChipDatePickerTarget.js +1 -1
  155. package/components/Chip/ChipDropdownArrow.js +2 -2
  156. package/components/Chip/ChipIcon.js +1 -1
  157. package/components/Chip/ChipMultiselect.js +1 -1
  158. package/components/Chip/ChipOptions.js +2 -2
  159. package/components/Chip/ChipSelect/ChipSelect.js +1 -1
  160. package/components/Chip/ChipSelect/ChipSelectTarget.js +1 -1
  161. package/components/Chip/ChipSort.js +1 -1
  162. package/components/Chip/ChipSuggest/ChipSuggest.js +1 -1
  163. package/components/Chip/ChipSuggest/ChipSuggestDropdown.js +1 -1
  164. package/components/Chip/ChipSuggest/ChipSuggestTarget.js +1 -1
  165. package/components/Chip/ChipSuggest/desktop/ChipSuggestDesktopDropdownField.js +1 -1
  166. package/components/Chip/index.js +1 -1
  167. package/components/ChipGroup/ChipGroup.js +7 -7
  168. package/components/Col/Col.js +132 -132
  169. package/components/CollapsibleTree/CollapsibleTree.js +1 -1
  170. package/components/CollapsibleTree/components/CollapsibleTreeLeafContent.js +1 -1
  171. package/components/CollapsibleTree/components/CollapsibleTreeLeafNode.js +1 -1
  172. package/components/CollapsibleTree/components/CollapsibleTreeNodeHeader.js +4 -4
  173. package/components/CollapsibleTreeExtended/components/CollapsibleTreeExtendedNode.js +1 -1
  174. package/components/Confirm/Confirm.js +1 -1
  175. package/components/Confirm/components/ConfirmCloseButton.js +1 -1
  176. package/components/Confirm/components/ConfirmContent.js +1 -1
  177. package/components/Confirm/components/ConfirmContentTitle.js +1 -1
  178. package/components/Confirm/components/ConfirmControls.js +1 -1
  179. package/components/DateField/utils.js +2 -2
  180. package/components/DateField/utils.js.map +1 -1
  181. package/components/DatePickerExtended/DatePickerExtended.js +2 -2
  182. package/components/DatePickerExtended/DatePickerExtendedDropdown.js +1 -1
  183. package/components/DateRange/DateRange.js +3 -3
  184. package/components/DesignTokens/DesignTokenUtils.js +25 -20
  185. package/components/DesignTokens/DesignTokenUtils.js.map +1 -1
  186. package/components/DesignTokens/components/Calendar.js +2 -2
  187. package/components/DesignTokens/components/Calendar.js.map +1 -1
  188. package/components/DesignTokens/components/StatusTracker.js +8 -2
  189. package/components/DesignTokens/components/StatusTracker.js.map +1 -1
  190. package/components/Divider/Divider.js +17 -17
  191. package/components/DocumentNumberEdit/DocumentNumberEdit.js +3 -3
  192. package/components/Dropdown/desktop/DropdownDesktop.js +6 -6
  193. package/components/Dropdown/desktop/DropdownList.js +1 -1
  194. package/components/Dropdown/desktop/DropdownListItem.js +1 -1
  195. package/components/Dropdown/desktop/index.js +1 -1
  196. package/components/Dropdown/index.js +1 -1
  197. package/components/Dropdown/mobile/DropdownMobile.js +2 -2
  198. package/components/Dropdown/mobile/DropdownMobileBody.js +1 -1
  199. package/components/Dropdown/mobile/DropdownMobileClose.js +1 -1
  200. package/components/Dropdown/mobile/DropdownMobileFooter.js +1 -1
  201. package/components/Dropdown/mobile/DropdownMobileHeader.js +1 -1
  202. package/components/Dropdown/mobile/DropdownMobileInner.js +1 -1
  203. package/components/Dropdown/mobile/DropdownMobileInput.js +1 -1
  204. package/components/Dropdown/mobile/DropdownMobileList.js +1 -1
  205. package/components/Dropdown/mobile/DropdownMobileListItem.js +1 -1
  206. package/components/Dropdown/mobile/DropdownMobileLoader.js +1 -1
  207. package/components/Dropdown/mobile/DropdownMobileMaskedInput.js +1 -1
  208. package/components/Ellipsis/Ellipsis.js +3 -3
  209. package/components/EmptyView/EmptyView.js +4 -4
  210. package/components/ExpandAnimation/ExpandAnimation.js +1 -1
  211. package/components/FocusTrapExtended/FocusTrapExtended.js +20 -8
  212. package/components/FocusTrapExtended/FocusTrapExtended.js.map +1 -1
  213. package/components/Footer/Footer.js +1 -1
  214. package/components/Footer/components/FooterDescription.js +1 -1
  215. package/components/Footer/components/FooterDescriptionContent.js +1 -1
  216. package/components/Footer/components/FooterDescriptionControls.js +1 -1
  217. package/components/FormField/FormField.js +20 -20
  218. package/components/FormField/FormField.js.map +1 -1
  219. package/components/FormField/FormFieldContext.js.map +1 -1
  220. package/components/FormField/FormFieldDescriptionContext.js.map +1 -1
  221. package/components/FormField/components/FormFieldClear.js +1 -1
  222. package/components/FormField/components/FormFieldClear.js.map +1 -1
  223. package/components/FormField/components/FormFieldCounter.js +5 -4
  224. package/components/FormField/components/FormFieldCounter.js.map +1 -1
  225. package/components/FormField/components/FormFieldDescription.js +13 -5
  226. package/components/FormField/components/FormFieldDescription.js.map +1 -1
  227. package/components/FormField/components/FormFieldInput.js +7 -8
  228. package/components/FormField/components/FormFieldInput.js.map +1 -1
  229. package/components/FormField/components/FormFieldLabel.js +10 -11
  230. package/components/FormField/components/FormFieldLabel.js.map +1 -1
  231. package/components/FormField/components/FormFieldMaskedInput.js +6 -6
  232. package/components/FormField/components/FormFieldPostfix.js +5 -29
  233. package/components/FormField/components/FormFieldPostfix.js.map +1 -1
  234. package/components/FormField/components/FormFieldPrefix.js +5 -29
  235. package/components/FormField/components/FormFieldPrefix.js.map +1 -1
  236. package/components/FormField/components/FormFieldTarget.js +8 -8
  237. package/components/FormField/components/FormFieldTextarea.js +4 -4
  238. package/components/FormField/components/useFormFieldAffixWidth.js +33 -0
  239. package/components/FormField/components/useFormFieldAffixWidth.js.map +1 -0
  240. package/components/FormField/components/utils.js +9 -1
  241. package/components/FormField/components/utils.js.map +1 -1
  242. package/components/FormField/consts.js.map +1 -1
  243. package/components/FormField/enums.js.map +1 -1
  244. package/components/FormField/index.js +2 -3
  245. package/components/Gap/Gap.js +8 -8
  246. package/components/Header/Header.js +1 -1
  247. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebar.js +1 -1
  248. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarContent.js +1 -1
  249. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarSidebar.js +1 -1
  250. package/components/Header/components/HeaderSubheader/HeaderSubheader.js +2 -2
  251. package/components/Header/components/HeaderTabs/HeaderTabs.js +1 -1
  252. package/components/Header/components/HeaderTabs/HeaderTabsContent.js +1 -1
  253. package/components/Header/components/HeaderTabs/HeaderTabsControls.js +1 -1
  254. package/components/Header/components/HeaderTitle/HeaderTitle.js +1 -1
  255. package/components/Header/components/HeaderTitle/HeaderTitleContent.js +1 -1
  256. package/components/Header/components/HeaderTitle/HeaderTitleControls.js +1 -1
  257. package/components/HelpBox/HelpBox.js +1 -1
  258. package/components/IconWrapper/IconWrapper.js +7 -7
  259. package/components/IconWrapper/IconWrapper.js.map +1 -1
  260. package/components/ImageGallery/ImageGallery.js +1 -1
  261. package/components/ImageGalleryExtended/ImageGalleryExtended.js +2 -2
  262. package/components/ImageGalleryExtended/components/ImageGalleryExtendedArrow.js +1 -1
  263. package/components/ImageGalleryExtended/components/ImageGalleryExtendedDots.js +3 -3
  264. package/components/ImageGalleryExtended/components/ImageGalleryExtendedMain.js +1 -1
  265. package/components/ImageGalleryExtended/components/ImageGalleryExtendedSlide.js +1 -1
  266. package/components/ImageGalleryExtended/components/ImageGalleryExtendedSwipeTrack.js +1 -1
  267. package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumb.js +1 -1
  268. package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumbnails.js +1 -1
  269. package/components/ImageGalleryExtended/components/index.js +1 -1
  270. package/components/ImageGalleryExtended/index.js +1 -1
  271. package/components/Island/Island.js +3 -3
  272. package/components/Island/Island.js.map +1 -1
  273. package/components/Island/components/IslandBody.js +2 -1
  274. package/components/Island/components/IslandBody.js.map +1 -1
  275. package/components/Island/components/IslandFooter.js +7 -4
  276. package/components/Island/components/IslandFooter.js.map +1 -1
  277. package/components/Island/components/IslandHeader.js +7 -4
  278. package/components/Island/components/IslandHeader.js.map +1 -1
  279. package/components/Island/enums.js.map +1 -1
  280. package/components/Island/utils.js +1 -1
  281. package/components/IslandAccordion/IslandAccordion.js +2 -2
  282. package/components/IslandAccordion/components/IslandAccordionContent.js +1 -1
  283. package/components/IslandAccordion/components/IslandAccordionFooter.js +1 -1
  284. package/components/IslandAccordion/components/IslandAccordionItem.js +2 -2
  285. package/components/IslandWidget/IslandWidget.js +4 -4
  286. package/components/IslandWidget/components/IslandWidgetBody.js +1 -1
  287. package/components/IslandWidget/components/IslandWidgetExtraFooter.js +1 -1
  288. package/components/IslandWidget/components/IslandWidgetFooter.js +1 -1
  289. package/components/IslandWidget/components/IslandWidgetFooterContent.js +1 -1
  290. package/components/IslandWidget/components/IslandWidgetFooterControls.js +1 -1
  291. package/components/IslandWidget/components/IslandWidgetHeader.js +1 -1
  292. package/components/IslandWidget/components/IslandWidgetHeaderContent.js +1 -1
  293. package/components/IslandWidget/components/IslandWidgetHeaderControls.js +1 -1
  294. package/components/IslandWidget/components/IslandWidgetHeaderDescription.js +1 -1
  295. package/components/IslandWidget/components/IslandWidgetHeaderTitle.js +1 -1
  296. package/components/IslandWidget/components/IslandWidgetWrapper.js +1 -1
  297. package/components/KeyDownListener/ComposedKeyDownListener.js +7 -8
  298. package/components/KeyDownListener/ComposedKeyDownListener.js.map +1 -1
  299. package/components/KeyDownListener/KeyDownListener.js +3 -4
  300. package/components/KeyDownListener/KeyDownListener.js.map +1 -1
  301. package/components/LightBox/LightBox.js +5 -5
  302. package/components/LightBox/LightBoxContent.js +1 -1
  303. package/components/LightBox/LightBoxControls/LightBoxArrow.js +1 -1
  304. package/components/LightBox/LightBoxControls/LightBoxClose.js +1 -1
  305. package/components/LightBox/LightBoxControls/LightBoxControls.js +1 -1
  306. package/components/LightBox/LightBoxControls/LightBoxNext.js +1 -1
  307. package/components/LightBox/LightBoxControls/LightBoxPrev.js +1 -1
  308. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlay.js +12 -13
  309. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlay.js.map +1 -1
  310. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseDesktop.js +1 -1
  311. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseMobile.js +1 -1
  312. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayLoader.js +1 -1
  313. package/components/LightBox/LightBoxSidebars/LightBoxLeftSidebar.js +3 -3
  314. package/components/LightBox/LightBoxSidebars/LightBoxRightSidebar.js +3 -3
  315. package/components/Link/Link.js +5 -5
  316. package/components/List/List.js +3 -3
  317. package/components/List/components/ListActionItem.js +1 -1
  318. package/components/List/components/ListEmptyState.js +1 -1
  319. package/components/List/components/ListItem.js +1 -1
  320. package/components/List/components/ListItemContent.js +4 -4
  321. package/components/List/components/ListItemControls.js +1 -1
  322. package/components/List/components/ListItemControlsButton.js +1 -1
  323. package/components/List/components/ListItemControlsButtonDropdown.js +1 -1
  324. package/components/List/components/ListItemLoading.js +1 -1
  325. package/components/List/components/ListItemSelectable.js +6 -6
  326. package/components/List/components/ListItemTailLeft.js +1 -1
  327. package/components/List/components/ListItemTailRight.js +1 -1
  328. package/components/List/components/ListSortableItem.js +2 -2
  329. package/components/List/components/ListSortableItemControls.js +1 -1
  330. package/components/List/components/ListSortableItemTarget.js +4 -4
  331. package/components/List/components/ListTableItem.js +3 -3
  332. package/components/List/index.js +1 -1
  333. package/components/ListMaster/ListMaster.js +1 -1
  334. package/components/ListMaster/components/ListMasterBody.js +1 -1
  335. package/components/ListMaster/components/ListMasterChipGroup.js +1 -1
  336. package/components/ListMaster/components/ListMasterFooter.js +1 -1
  337. package/components/ListMaster/components/ListMasterFooterControls.js +1 -1
  338. package/components/ListMaster/components/ListMasterFooterDescription.js +1 -1
  339. package/components/ListMaster/components/ListMasterHeader.js +2 -2
  340. package/components/ListMaster/components/SelectionControls.js +2 -2
  341. package/components/Loader/LoaderMiddle/LoaderMiddle.js +10 -10
  342. package/components/Loader/LoaderMiddle/LoaderMiddle.js.map +1 -1
  343. package/components/Loader/LoaderSmall/LoaderSmall.js +10 -10
  344. package/components/LoaderScreen/LoaderScreen.js +13 -12
  345. package/components/LoaderScreen/LoaderScreen.js.map +1 -1
  346. package/components/Marker/Marker.js +1 -1
  347. package/components/Marker/utils.js +1 -1
  348. package/components/MarkerStatus/MarkerStatus.js +7 -7
  349. package/components/ModalWindow/ModalWindow.js +1 -1
  350. package/components/ModalWindow/components/ModalWindowBody.js +1 -1
  351. package/components/ModalWindow/components/ModalWindowClose.js +1 -1
  352. package/components/ModalWindow/components/ModalWindowContent.js +1 -1
  353. package/components/ModalWindow/components/ModalWindowHeader.js +1 -1
  354. package/components/ModalWindow/components/ModalWindowViewManager.js +1 -1
  355. package/components/MonthYearField/utils.js +2 -1
  356. package/components/MonthYearField/utils.js.map +1 -1
  357. package/components/MonthYearRange/MonthYearRange.js +3 -3
  358. package/components/MultiselectField/components/MultiselectFieldDropdown.js +1 -1
  359. package/components/MultiselectField/components/MultiselectFieldDropdownContent.js +5 -5
  360. package/components/MultiselectField/components/MultiselectFieldDropdownFooter.js +1 -1
  361. package/components/MultiselectField/components/MultiselectFieldDropdownHeader.js +1 -1
  362. package/components/Notification/Notification.js +2 -2
  363. package/components/Notification/NotificationGrouped.js +1 -1
  364. package/components/Notification/components/NotificationBody.js +1 -1
  365. package/components/Notification/components/NotificationBodyList.js +1 -1
  366. package/components/Notification/components/NotificationClose.js +1 -1
  367. package/components/Notification/components/NotificationFooter.js +1 -1
  368. package/components/Notification/components/NotificationGroupedFooter.js +1 -1
  369. package/components/Notification/components/NotificationHeader.js +1 -1
  370. package/components/Notification/components/NotificationIcon.js +1 -1
  371. package/components/Notification/components/NotificationTime.js +1 -1
  372. package/components/OrderedList/OrderedList.js +2 -2
  373. package/components/OrderedList/OrderedListItem.js +2 -2
  374. package/components/Overlay/Overlay.js +1 -1
  375. package/components/Overlay/OverlayMask.js +1 -1
  376. package/components/Overlay/OverlayPanel.js +1 -1
  377. package/components/Page/Page.js +1 -1
  378. package/components/Page/components/BodyPage.js +3 -3
  379. package/components/Page/components/FooterPage.js +1 -1
  380. package/components/Page/components/FooterPage.js.map +1 -1
  381. package/components/Page/components/HeaderPage.js +1 -1
  382. package/components/Page/components/HeaderPage.js.map +1 -1
  383. package/components/Pagination/components/PaginationExtended.js +2 -2
  384. package/components/Pagination/components/PaginationNavigation.js +1 -1
  385. package/components/Pagination/components/PaginationNavigation.js.map +1 -1
  386. package/components/Pagination/components/PaginationNavigationButton.js +2 -2
  387. package/components/Pagination/components/PaginationNavigationExtended.js +1 -1
  388. package/components/Pagination/components/PaginationPageButton.js +2 -2
  389. package/components/Pagination/components/PaginationPageEllipsis.js +1 -1
  390. package/components/Pagination/components/PaginationSelect.js +2 -2
  391. package/components/Pagination/{utils/paginationUtils.js → utils.js} +2 -2
  392. package/components/Pagination/utils.js.map +1 -0
  393. package/components/Radio/Radio.js +9 -9
  394. package/components/Radio/RadioXGroup.js +8 -8
  395. package/components/Radio/RadioYGroup.js +1 -1
  396. package/components/Row/Row.js +4 -4
  397. package/components/SMSField/SMSField.js +2 -2
  398. package/components/SMSField/components/RefreshIcon.js +1 -1
  399. package/components/SMSField/components/SMSFieldInput.js +1 -1
  400. package/components/SMSField/components/SMSFieldRefresh.js +1 -1
  401. package/components/SMSField/components/SMSFieldSubmit.js +1 -1
  402. package/components/SegmentedControl/SegmentedControl.js +9 -9
  403. package/components/SegmentedControl/SegmentedControlSegment.js +3 -3
  404. package/components/SelectExtendedField/SelectExtendedField.js +41 -46
  405. package/components/SelectExtendedField/SelectExtendedField.js.map +1 -1
  406. package/components/SelectExtendedField/components/SelectExtendedFieldDropdown.js +2 -1
  407. package/components/SelectExtendedField/components/SelectExtendedFieldDropdown.js.map +1 -1
  408. package/components/SelectExtendedField/components/SelectExtendedFieldDropdownDefault.js +18 -38
  409. package/components/SelectExtendedField/components/SelectExtendedFieldDropdownDefault.js.map +1 -1
  410. package/components/SelectExtendedField/components/SelectExtendedFieldTarget.js +47 -65
  411. package/components/SelectExtendedField/components/SelectExtendedFieldTarget.js.map +1 -1
  412. package/components/SelectField/SelectField.js +1 -1
  413. package/components/Skeleton/Skeleton.js +4 -4
  414. package/components/SliderExtended/SliderExtended.js +2 -2
  415. package/components/SliderExtended/components/SliderExtendedDot/SliderExtendedDot.js +6 -5
  416. package/components/SliderExtended/components/SliderExtendedDot/SliderExtendedDot.js.map +1 -1
  417. package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMark.js +1 -1
  418. package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMarks.js +1 -1
  419. package/components/SliderExtended/components/SliderExtendedRail.js +1 -1
  420. package/components/SliderExtended/components/SliderExtendedTooltip/SliderExtendedTooltip.js +4 -4
  421. package/components/SliderExtended/components/SliderExtendedTrack/SliderExtendedTrack.js +7 -6
  422. package/components/SliderExtended/components/SliderExtendedTrack/SliderExtendedTrack.js.map +1 -1
  423. package/components/SmallInput/SmallInput.js +1 -1
  424. package/components/Spoiler/Spoiler.js +10 -10
  425. package/components/StatusTracker/StatusTracker.js +7 -6
  426. package/components/StatusTracker/StatusTracker.js.map +1 -1
  427. package/components/StatusTracker/components/StatusTrackerAlert.js +1 -1
  428. package/components/StatusTracker/components/StatusTrackerBody.js +1 -1
  429. package/components/StatusTracker/components/StatusTrackerButton.js +1 -1
  430. package/components/StatusTracker/components/StatusTrackerDescription.js +1 -1
  431. package/components/StatusTracker/components/StatusTrackerFooter.js +1 -1
  432. package/components/StatusTracker/components/StatusTrackerHeader.js +1 -1
  433. package/components/StatusTracker/components/StatusTrackerMedia.js +1 -1
  434. package/components/StatusTracker/components/StatusTrackerStatus.js +1 -1
  435. package/components/StatusTracker/components/StatusTrackerStatusGroup.js +1 -1
  436. package/components/StatusTracker/components/StatusTrackerSum.js +1 -1
  437. package/components/StatusTracker/components/StatusTrackerTitle.js +1 -1
  438. package/components/Step/Step.js +10 -10
  439. package/components/Stepper/Stepper.js +8 -8
  440. package/components/Stepper/StepperExtended.js +1 -1
  441. package/components/Stepper/StepperStep.js +2 -2
  442. package/components/Stepper/StepperStepArrowBorder.js +1 -1
  443. package/components/Suggest/SuggestMobileDropdownContent.js +3 -3
  444. package/components/SuggestField/SuggestField.js +1 -1
  445. package/components/SuggestField/desktop/SuggestFieldDesktop.js +1 -1
  446. package/components/SuggestField/desktop/SuggestFieldDesktopDropdown.js +1 -1
  447. package/components/SuggestField/index.js +1 -1
  448. package/components/SuggestField/mobile/SuggestFieldMobile.js +1 -1
  449. package/components/SuggestField/mobile/SuggestFieldMobileDropdown.js +2 -2
  450. package/components/SuggestField/mobile/SuggestFieldMobileDropdownHint.js +1 -1
  451. package/components/SuggestField/mobile/index.js +1 -1
  452. package/components/SwipeableArea/SwipeableArea.js +8 -8
  453. package/components/Table/ChipPanel.js +1 -1
  454. package/components/Table/ChipPanelLinks.js +1 -1
  455. package/components/Table/FilterPanel.js +2 -2
  456. package/components/Table/MasterTable.js +2 -2
  457. package/components/Table/NoColumns.js +2 -2
  458. package/components/Table/PaginationPanel.js +2 -2
  459. package/components/Table/TableBasic/TableBasic.js +1 -1
  460. package/components/Table/TableBasic/components/TableBasicBody.js +1 -1
  461. package/components/Table/TableBasic/components/TableBasicHeader.js +1 -1
  462. package/components/Table/TableBasic/components/TableBasicRow.js +1 -1
  463. package/components/Table/TableBasicSettings/TableBasicSettings.js +2 -2
  464. package/components/Table/TableBasicSettings/components/ColumnSettingsSortableListItemTarget.js +2 -2
  465. package/components/Table/TableBasicSettings/components/ColumnSettingsStaticListItem.js +1 -1
  466. package/components/Table/TableBasicSettings/components/TableBasicSettingsBody.js +1 -1
  467. package/components/Table/TableBasicSettings/components/TableBasicSettingsFooter.js +1 -1
  468. package/components/Table/TableBasicSettings/components/TableBasicSettingsHeader.js +1 -1
  469. package/components/Table/TableFooter/TableFooter.js +1 -1
  470. package/components/Table/TableFooter/components/TableFooterSummary.js +1 -1
  471. package/components/Table/TableFooter/components/TableFooterSummaryAmount.js +1 -1
  472. package/components/Table/TableFooter/components/TableFooterSummarySelectAllButton.js +1 -1
  473. package/components/Table/TableFooter/components/TableFooterSummarySelectedCount.js +1 -1
  474. package/components/Table/utils.js +1 -1
  475. package/components/Tabs/Tabs.js +5 -5
  476. package/components/TabsExtended/TabsExtended.js +2 -2
  477. package/components/TabsExtended/components/TabsExtendedContent.js +1 -1
  478. package/components/TabsExtended/components/TabsExtendedDropdownWrapper.js +1 -1
  479. package/components/TabsExtended/components/TabsExtendedTab.js +1 -1
  480. package/components/TabsExtended/components/TabsExtendedTabButton.js +1 -1
  481. package/components/TabsExtended/components/TabsExtendedTabsWrapper.js +1 -1
  482. package/components/TabsExtended/utils.js +1 -1
  483. package/components/TabsLine/TabsLine.js +1 -1
  484. package/components/TabsLine/components/TabsLineDesktop.js +1 -1
  485. package/components/TabsLine/components/TabsLineDropdown.js +2 -2
  486. package/components/TabsLine/components/TabsLineItem.js +1 -1
  487. package/components/TabsLine/components/TabsLineMobile.js +2 -2
  488. package/components/Tag/Tag.js +5 -5
  489. package/components/TagColor/TagColor.js +10 -10
  490. package/components/TagGroup/TagGroup.js +4 -4
  491. package/components/ThemeProvider/ETriplexNextTheme.js.map +1 -1
  492. package/components/ThemeProvider/ThemeProvider.js +5 -3
  493. package/components/ThemeProvider/ThemeProvider.js.map +1 -1
  494. package/components/ThemeProvider/ThemeProviderContext.js.map +1 -1
  495. package/components/ThemeProvider/components/ThemeProviderView.js +6 -9
  496. package/components/ThemeProvider/components/ThemeProviderView.js.map +1 -1
  497. package/components/ThemeProvider/useToken.js.map +1 -1
  498. package/components/Tooltip/Tooltip.js +49 -52
  499. package/components/Tooltip/Tooltip.js.map +1 -1
  500. package/components/Tooltip/TootlipContext.js.map +1 -1
  501. package/components/Tooltip/components/common/TooltipBody.js +1 -1
  502. package/components/Tooltip/components/common/TooltipLink.js +7 -18
  503. package/components/Tooltip/components/common/TooltipLink.js.map +1 -1
  504. package/components/Tooltip/components/common/TooltipTarget.js.map +1 -1
  505. package/components/Tooltip/components/common/TooltipXButton.js +1 -1
  506. package/components/Tooltip/components/desktop/TooltipDesktop.js +24 -12
  507. package/components/Tooltip/components/desktop/TooltipDesktop.js.map +1 -1
  508. package/components/Tooltip/components/desktop/components/TooltipDesktopBase.js +25 -24
  509. package/components/Tooltip/components/desktop/components/TooltipDesktopBase.js.map +1 -1
  510. package/components/Tooltip/components/desktop/components/TooltipDesktopTip.js +8 -17
  511. package/components/Tooltip/components/desktop/components/TooltipDesktopTip.js.map +1 -1
  512. package/components/Tooltip/components/mobile/TooltipMobile.js +10 -6
  513. package/components/Tooltip/components/mobile/TooltipMobile.js.map +1 -1
  514. package/components/Tooltip/components/mobile/components/TooltipMobileHeader.js +2 -2
  515. package/components/Tooltip/components/mobile/components/TooltipMobileHeader.js.map +1 -1
  516. package/components/Tooltip/enums.js.map +1 -1
  517. package/components/Tooltip/utils/Positioning.js +18 -17
  518. package/components/Tooltip/utils/Positioning.js.map +1 -1
  519. package/components/Tooltip/utils/useTooltipTheme.js +40 -12
  520. package/components/Tooltip/utils/useTooltipTheme.js.map +1 -1
  521. package/components/TopOverlay/TopOverlay.js +6 -6
  522. package/components/TreeView/TreeView.js +1 -1
  523. package/components/TreeView/components/TreeViewGroup.js +1 -1
  524. package/components/TreeView/components/TreeViewNode.js +1 -1
  525. package/components/Typography/Caption.js +7 -7
  526. package/components/Typography/CodeText.js +2 -2
  527. package/components/Typography/Text.js +9 -9
  528. package/components/Typography/Title.js +9 -9
  529. package/components/Typography/constants.js +1 -1
  530. package/components/UnorderedList/UnorderedList.js +2 -2
  531. package/components/UnorderedList/UnorderedListItem.js +2 -2
  532. package/components/UploadZone/UploadZone.js +2 -2
  533. package/components/UploadZone/components/UploadZoneInput.js +1 -1
  534. package/components/UploadZone/index.js +1 -1
  535. package/components/index.js +7 -8
  536. package/consts/DateConst.js.map +1 -1
  537. package/index.d.ts +255 -107
  538. package/index.js +7 -8
  539. package/package.json +1 -1
  540. package/styles/triplex-next.css +2962 -2951
  541. package/chunks/CalendarViewItem-knPscTce.js.map +0 -1
  542. package/chunks/Card.module-Dd2_zoXF.js +0 -30
  543. package/chunks/Card.module-Dd2_zoXF.js.map +0 -1
  544. package/chunks/Carousel.module-LNo8o3qn.js +0 -30
  545. package/chunks/Carousel.module-LNo8o3qn.js.map +0 -1
  546. package/chunks/CheckboxTreeExtended.module-CKUO50mv.js +0 -24
  547. package/chunks/CheckboxTreeExtended.module-CKUO50mv.js.map +0 -1
  548. package/chunks/Chip-CI8ALCUS.js.map +0 -1
  549. package/chunks/Confirm.module-BtnLGqBz.js +0 -24
  550. package/chunks/Confirm.module-BtnLGqBz.js.map +0 -1
  551. package/chunks/DropdownMobile.module-xbkYiPM1.js +0 -40
  552. package/chunks/DropdownMobile.module-xbkYiPM1.js.map +0 -1
  553. package/chunks/Footer.module-CYELL0O7.js +0 -12
  554. package/chunks/Footer.module-CYELL0O7.js.map +0 -1
  555. package/chunks/HeaderLayoutSidebar.module-MnhSBdiv.js.map +0 -1
  556. package/chunks/HeaderTabs.module-D9u9xuSn.js +0 -12
  557. package/chunks/HeaderTabs.module-D9u9xuSn.js.map +0 -1
  558. package/chunks/HeaderTitle.module-BGOYMt6r.js.map +0 -1
  559. package/chunks/ImageGalleryExtendedMain.module-CQNClbso.js +0 -28
  560. package/chunks/ImageGalleryExtendedMain.module-CQNClbso.js.map +0 -1
  561. package/chunks/IslandAccordion.module-nyPnHohH.js +0 -44
  562. package/chunks/IslandAccordion.module-nyPnHohH.js.map +0 -1
  563. package/chunks/IslandWidgetFooter.module-CNyLawMh.js +0 -12
  564. package/chunks/IslandWidgetFooter.module-CNyLawMh.js.map +0 -1
  565. package/chunks/IslandWidgetHeader.module-ChE5SXll.js +0 -20
  566. package/chunks/IslandWidgetHeader.module-ChE5SXll.js.map +0 -1
  567. package/chunks/LightBoxControls.module-Buvm7RbG.js +0 -26
  568. package/chunks/LightBoxControls.module-Buvm7RbG.js.map +0 -1
  569. package/chunks/LightBoxSideOverlayClose.module-eTdxNvSz.js.map +0 -1
  570. package/chunks/ListItemTail.module-BhSOptJB.js +0 -18
  571. package/chunks/ListItemTail.module-BhSOptJB.js.map +0 -1
  572. package/chunks/ListMasterFooter.module-DrlO_YrT.js +0 -14
  573. package/chunks/ListMasterFooter.module-DrlO_YrT.js.map +0 -1
  574. package/chunks/ModalWindow.module-DrJpRuNK.js +0 -28
  575. package/chunks/ModalWindow.module-DrJpRuNK.js.map +0 -1
  576. package/chunks/Notification.module-tEh-vvv0.js +0 -34
  577. package/chunks/Notification.module-tEh-vvv0.js.map +0 -1
  578. package/chunks/Overlay.module-CPNLKKsF.js +0 -30
  579. package/chunks/Overlay.module-CPNLKKsF.js.map +0 -1
  580. package/chunks/Page.module-Dru0rPA5.js +0 -15
  581. package/chunks/Page.module-Dru0rPA5.js.map +0 -1
  582. package/chunks/SMSField.module-CjGkO6u6.js +0 -26
  583. package/chunks/SMSField.module-CjGkO6u6.js.map +0 -1
  584. package/chunks/SliderExtendedMarks.module-CAeqmSQq.js +0 -24
  585. package/chunks/SliderExtendedMarks.module-CAeqmSQq.js.map +0 -1
  586. package/chunks/StatusTracker.module-BD5zJfbg.js +0 -42
  587. package/chunks/StatusTracker.module-BD5zJfbg.js.map +0 -1
  588. package/chunks/TableFooter.module-DhudGmzN.js +0 -22
  589. package/chunks/TableFooter.module-DhudGmzN.js.map +0 -1
  590. package/chunks/TabsExtended.module-DNjJIne-.js +0 -26
  591. package/chunks/TabsExtended.module-DNjJIne-.js.map +0 -1
  592. package/chunks/TabsLine.module-CbVAypRw.js +0 -36
  593. package/chunks/TabsLine.module-CbVAypRw.js.map +0 -1
  594. package/chunks/TooltipDesktop.module-DBiY8cJJ.js +0 -32
  595. package/chunks/TooltipDesktop.module-DBiY8cJJ.js.map +0 -1
  596. package/chunks/TreeView.module-GA-NyzjK.js +0 -12
  597. package/chunks/TreeView.module-GA-NyzjK.js.map +0 -1
  598. package/chunks/utils-BHxrQbA6.js.map +0 -1
  599. package/components/Pagination/utils/paginationUtils.js.map +0 -1
@@ -5,6 +5,8 @@ import { DesignTokenUtils } from "../DesignTokens/DesignTokenUtils.js";
5
5
  import { ThemeProviderView } from "./components/ThemeProviderView.js";
6
6
  import { ETriplexNextTheme } from "./ETriplexNextTheme.js";
7
7
  const uniqueId = (prefix) => `${prefix}${Date.now()}${Math.floor(Math.random() * 1e6)}`;
8
+ const SCOPE_CLASS_NAME_PREFIX = "triplex-next-theme-";
9
+ const getStyleTagKey = (scopeClassName) => `triplex-next-dynamic-tokens-${scopeClassName}`;
8
10
  const ThemeProvider = ({
9
11
  children,
10
12
  scopeClassName,
@@ -12,16 +14,16 @@ const ThemeProvider = ({
12
14
  theme = ETriplexNextTheme.LIGHT,
13
15
  tokens
14
16
  }) => {
15
- const scopeCssClassName = useMemo(() => scopeClassName || uniqueId("triplex-next-theme-"), [scopeClassName]);
17
+ const scopeCssClassName = useMemo(() => scopeClassName || uniqueId(SCOPE_CLASS_NAME_PREFIX), [scopeClassName]);
16
18
  useLayoutEffect(() => {
17
19
  if (canUseDom()) {
18
20
  const style = `.${scopeCssClassName} {${DesignTokenUtils.getStyle(theme, tokens || {})}}`;
19
- updateCSS(style, `triplex-next-dynamic-tokens-${scopeCssClassName}`);
21
+ updateCSS(style, getStyleTagKey(scopeCssClassName));
20
22
  } else {
21
23
  console.warn("ThemeProvider", "SSR do not support dynamic theme with css variables.");
22
24
  }
23
25
  }, [scopeCssClassName, theme, tokens]);
24
- useLayoutEffect(() => () => removeCSS(`triplex-next-dynamic-tokens-${scopeCssClassName}`), [scopeCssClassName]);
26
+ useLayoutEffect(() => () => removeCSS(getStyleTagKey(scopeCssClassName)), [scopeCssClassName]);
25
27
  return /* @__PURE__ */ jsx(ThemeProviderView, { scopeClassName: scopeCssClassName, scopeRef, theme, tokens, children });
26
28
  };
27
29
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProvider.js","sources":["../../../scripts/uniqueId.ts","../../../src/components/ThemeProvider/ThemeProvider.tsx"],"sourcesContent":["export const uniqueId = (prefix?: string): string =>\n `${prefix ? prefix : \"\"}${Date.now()}${Math.floor(Math.random() * 1000000)}`;\n","import React, { useLayoutEffect, useMemo } from \"react\";\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { TDesignTokensPartial } from \"../DesignTokens/types/DesignTokensTypes\";\nimport { DesignTokenUtils } from \"../DesignTokens/DesignTokenUtils\";\nimport { ThemeProviderView } from \"./components/ThemeProviderView\";\nimport { uniqueId } from \"../../../scripts/uniqueId\";\nimport { ETriplexNextTheme } from \"./ETriplexNextTheme\";\n\nexport interface IThemeProviderProps {\n children: React.ReactNode;\n /** Classname, который добавлен к элементу из scopeRef для создания области видимости css-переменных. */\n scopeClassName?: string;\n /** Ref на HTML элемент, внутри которого будет действовать текущий конфиг. */\n scopeRef: React.RefObject<HTMLElement>;\n /** Дизайн-тема Triplex Next. */\n theme?: ETriplexNextTheme;\n /** Переопределяемые токены. */\n tokens?: TDesignTokensPartial;\n}\n\nexport const ThemeProvider: React.FC<IThemeProviderProps> = ({\n children,\n scopeClassName,\n scopeRef,\n theme = ETriplexNextTheme.LIGHT,\n tokens,\n}) => {\n // ClassName, добавляемый к HTML элементу, для определения области видимости CSS-переменных.\n const scopeCssClassName = useMemo(() => scopeClassName || uniqueId(\"triplex-next-theme-\"), [scopeClassName]);\n\n useLayoutEffect(() => {\n if (canUseDom()) {\n const style = `.${scopeCssClassName} {${DesignTokenUtils.getStyle(theme, tokens || {})}}`;\n // Обновление мета тега со стилями темы. Обновляется тег с ключом triplex-next-dynamic-theme.\n updateCSS(style, `triplex-next-dynamic-tokens-${scopeCssClassName}`);\n } else {\n console.warn(\"ThemeProvider\", \"SSR do not support dynamic theme with css variables.\");\n }\n }, [scopeCssClassName, theme, tokens]);\n\n // Удаляет стили при размонтировании компонента.\n useLayoutEffect(() => () => removeCSS(`triplex-next-dynamic-tokens-${scopeCssClassName}`), [scopeCssClassName]);\n\n return (\n <ThemeProviderView scopeClassName={scopeCssClassName} scopeRef={scopeRef} theme={theme} tokens={tokens}>\n {children}\n </ThemeProviderView>\n );\n};\n"],"names":[],"mappings":";;;;;;AAAO,MAAM,WAAW,CAAC,WACrB,GAAY,MAAW,GAAG,KAAK,IAAA,CAAK,GAAG,KAAK,MAAM,KAAK,OAAA,IAAW,GAAO,CAAC;ACoBvE,MAAM,gBAA+C,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,kBAAkB;AAAA,EAC1B;AACJ,MAAM;AAEF,QAAM,oBAAoB,QAAQ,MAAM,kBAAkB,SAAS,qBAAqB,GAAG,CAAC,cAAc,CAAC;AAE3G,kBAAgB,MAAM;AAClB,QAAI,aAAa;AACb,YAAM,QAAQ,IAAI,iBAAiB,KAAK,iBAAiB,SAAS,OAAO,UAAU,CAAA,CAAE,CAAC;AAEtF,gBAAU,OAAO,+BAA+B,iBAAiB,EAAE;AAAA,IACvE,OAAO;AACH,cAAQ,KAAK,iBAAiB,sDAAsD;AAAA,IACxF;AAAA,EACJ,GAAG,CAAC,mBAAmB,OAAO,MAAM,CAAC;AAGrC,kBAAgB,MAAM,MAAM,UAAU,+BAA+B,iBAAiB,EAAE,GAAG,CAAC,iBAAiB,CAAC;AAE9G,6BACK,mBAAA,EAAkB,gBAAgB,mBAAmB,UAAoB,OAAc,QACnF,UACL;AAER;"}
1
+ {"version":3,"file":"ThemeProvider.js","sources":["../../../scripts/uniqueId.ts","../../../src/components/ThemeProvider/ThemeProvider.tsx"],"sourcesContent":["export const uniqueId = (prefix?: string): string =>\n `${prefix ? prefix : \"\"}${Date.now()}${Math.floor(Math.random() * 1000000)}`;\n","import React, { useLayoutEffect, useMemo } from \"react\";\nimport canUseDom from \"rc-util/es/Dom/canUseDom\";\nimport { removeCSS, updateCSS } from \"rc-util/es/Dom/dynamicCSS\";\nimport { TDesignTokensPartial } from \"../DesignTokens/types/DesignTokensTypes\";\nimport { DesignTokenUtils } from \"../DesignTokens/DesignTokenUtils\";\nimport { ThemeProviderView } from \"./components/ThemeProviderView\";\nimport { uniqueId } from \"../../../scripts/uniqueId\";\nimport { ETriplexNextTheme } from \"./ETriplexNextTheme\";\n\n/** Префикс автогенерируемого scopeClassName. */\nconst SCOPE_CLASS_NAME_PREFIX = \"triplex-next-theme-\";\n\n/**\n * Возвращает ключ тега style с css-переменными темы. По этому ключу стили обновляются\n * и удаляются, поэтому ключ вычисляется в одном месте.\n */\nconst getStyleTagKey = (scopeClassName: string): string => `triplex-next-dynamic-tokens-${scopeClassName}`;\n\nexport interface IThemeProviderProps {\n /** Контент, внутри которого действуют тема и токены. */\n children: React.ReactNode;\n /** Classname, который добавлен к элементу из scopeRef для создания области видимости css-переменных. */\n scopeClassName?: string;\n /** Ref на HTML элемент, внутри которого будет действовать текущий конфиг. */\n scopeRef: React.RefObject<HTMLElement>;\n /** Дизайн-тема Triplex Next. @default ETriplexNextTheme.LIGHT */\n theme?: ETriplexNextTheme;\n /** Переопределяемые токены. */\n tokens?: TDesignTokensPartial;\n}\n\n/**\n * Провайдер темы. Рендерит css-переменные дизайн-токенов выбранной темы в тег style,\n * ограничивает их областью видимости элемента из scopeRef и передаёт тему и токены\n * дочерним компонентам через контекст (см. useToken).\n */\nexport const ThemeProvider: React.FC<IThemeProviderProps> = ({\n children,\n scopeClassName,\n scopeRef,\n theme = ETriplexNextTheme.LIGHT,\n tokens,\n}) => {\n // ClassName, добавляемый к HTML элементу, для определения области видимости CSS-переменных.\n const scopeCssClassName = useMemo(() => scopeClassName || uniqueId(SCOPE_CLASS_NAME_PREFIX), [scopeClassName]);\n\n useLayoutEffect(() => {\n if (canUseDom()) {\n const style = `.${scopeCssClassName} {${DesignTokenUtils.getStyle(theme, tokens || {})}}`;\n // Создание или обновление тега style с css-переменными текущей темы.\n updateCSS(style, getStyleTagKey(scopeCssClassName));\n } else {\n console.warn(\"ThemeProvider\", \"SSR do not support dynamic theme with css variables.\");\n }\n }, [scopeCssClassName, theme, tokens]);\n\n // Удаляет стили при размонтировании компонента.\n useLayoutEffect(() => () => removeCSS(getStyleTagKey(scopeCssClassName)), [scopeCssClassName]);\n\n return (\n <ThemeProviderView scopeClassName={scopeCssClassName} scopeRef={scopeRef} theme={theme} tokens={tokens}>\n {children}\n </ThemeProviderView>\n );\n};\n"],"names":[],"mappings":";;;;;;AAAO,MAAM,WAAW,CAAC,WACrB,GAAY,MAAW,GAAG,KAAK,IAAA,CAAK,GAAG,KAAK,MAAM,KAAK,OAAA,IAAW,GAAO,CAAC;ACS9E,MAAM,0BAA0B;AAMhC,MAAM,iBAAiB,CAAC,mBAAmC,+BAA+B,cAAc;AAoBjG,MAAM,gBAA+C,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ,kBAAkB;AAAA,EAC1B;AACJ,MAAM;AAEF,QAAM,oBAAoB,QAAQ,MAAM,kBAAkB,SAAS,uBAAuB,GAAG,CAAC,cAAc,CAAC;AAE7G,kBAAgB,MAAM;AAClB,QAAI,aAAa;AACb,YAAM,QAAQ,IAAI,iBAAiB,KAAK,iBAAiB,SAAS,OAAO,UAAU,CAAA,CAAE,CAAC;AAEtF,gBAAU,OAAO,eAAe,iBAAiB,CAAC;AAAA,IACtD,OAAO;AACH,cAAQ,KAAK,iBAAiB,sDAAsD;AAAA,IACxF;AAAA,EACJ,GAAG,CAAC,mBAAmB,OAAO,MAAM,CAAC;AAGrC,kBAAgB,MAAM,MAAM,UAAU,eAAe,iBAAiB,CAAC,GAAG,CAAC,iBAAiB,CAAC;AAE7F,6BACK,mBAAA,EAAkB,gBAAgB,mBAAmB,UAAoB,OAAc,QACnF,UACL;AAER;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProviderContext.js","sources":["../../../src/components/ThemeProvider/ThemeProviderContext.ts"],"sourcesContent":["import React from \"react\";\nimport { TDesignTokens } from \"../DesignTokens/types/DesignTokensTypes\";\nimport { ETriplexNextTheme } from \"./ETriplexNextTheme\";\nimport { DesignTokensCore, DesignTokensComponents } from \"../DesignTokens\";\n\nexport interface IThemeProviderContext {\n scopeClassName: string;\n theme: ETriplexNextTheme;\n tokens: TDesignTokens;\n}\n\nconst contextInitial: IThemeProviderContext = {\n scopeClassName: \"\",\n theme: ETriplexNextTheme.LIGHT,\n tokens: { ...DesignTokensCore, ...DesignTokensComponents },\n};\n\nexport const ThemeProviderContext = React.createContext<IThemeProviderContext>(contextInitial);\n"],"names":["React"],"mappings":";;;;;AAWA,MAAM,iBAAwC;AAAA,EAC1C,gBAAgB;AAAA,EAChB,OAAO,kBAAkB;AAAA,EACzB,QAAQ,EAAE,GAAG,kBAAkB,GAAG,uBAAA;AACtC;AAEO,MAAM,uBAAuBA,eAAM,cAAqC,cAAc;"}
1
+ {"version":3,"file":"ThemeProviderContext.js","sources":["../../../src/components/ThemeProvider/ThemeProviderContext.ts"],"sourcesContent":["import React from \"react\";\nimport { TDesignTokens } from \"../DesignTokens/types/DesignTokensTypes\";\nimport { ETriplexNextTheme } from \"./ETriplexNextTheme\";\nimport { DesignTokensCore, DesignTokensComponents } from \"../DesignTokens\";\n\nexport interface IThemeProviderContext {\n /** Classname, задающий область видимости css-переменных темы. Пустая строка вне ThemeProvider. */\n scopeClassName: string;\n /** Текущая дизайн-тема Triplex Next. */\n theme: ETriplexNextTheme;\n /** Итоговые токены: переопределения потребителя поверх токенов темы. */\n tokens: TDesignTokens;\n}\n\n/** Значение контекста вне ThemeProvider: светлая тема и токены по умолчанию. */\nconst contextInitial: IThemeProviderContext = {\n scopeClassName: \"\",\n theme: ETriplexNextTheme.LIGHT,\n tokens: { ...DesignTokensCore, ...DesignTokensComponents },\n};\n\n/** Контекст темы. Значение читается хуком useToken. */\nexport const ThemeProviderContext = React.createContext<IThemeProviderContext>(contextInitial);\n"],"names":["React"],"mappings":";;;;;AAeA,MAAM,iBAAwC;AAAA,EAC1C,gBAAgB;AAAA,EAChB,OAAO,kBAAkB;AAAA,EACzB,QAAQ,EAAE,GAAG,kBAAkB,GAAG,uBAAA;AACtC;AAGO,MAAM,uBAAuBA,eAAM,cAAqC,cAAc;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import { useRef, useEffect, useMemo } from "react";
2
+ import { useEffect, useMemo } from "react";
3
3
  import { ThemeProviderContext } from "../ThemeProviderContext.js";
4
4
  import { ETriplexNextTheme } from "../ETriplexNextTheme.js";
5
5
  import { DesignTokensCore } from "../../DesignTokens/DesignTokensCore.js";
@@ -14,17 +14,14 @@ const ThemeProviderView = ({
14
14
  theme,
15
15
  tokens: tokensProps
16
16
  }) => {
17
- const prevScopeClassName = useRef("");
18
17
  useEffect(() => {
19
- const scopeRefCurrent = scopeRef.current;
20
- if (scopeClassName) {
21
- scopeRefCurrent == null ? void 0 : scopeRefCurrent.classList.add(scopeClassName);
18
+ const scopeElement = scopeRef.current;
19
+ if (!scopeClassName) {
20
+ return;
22
21
  }
23
- prevScopeClassName.current = scopeClassName;
22
+ scopeElement == null ? void 0 : scopeElement.classList.add(scopeClassName);
24
23
  return () => {
25
- if (prevScopeClassName.current) {
26
- scopeRefCurrent == null ? void 0 : scopeRefCurrent.classList.remove(prevScopeClassName.current);
27
- }
24
+ scopeElement == null ? void 0 : scopeElement.classList.remove(scopeClassName);
28
25
  };
29
26
  }, [scopeClassName, scopeRef]);
30
27
  const value = useMemo(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeProviderView.js","sources":["../../../../src/components/ThemeProvider/components/ThemeProviderView.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useRef } from \"react\";\nimport { defaultsDeep } from \"lodash-es\";\nimport { TDesignTokens, TDesignTokensPartial } from \"../../DesignTokens/types/DesignTokensTypes\";\n// Импорт не должен быть относительным.\nimport { ThemeProviderContext } from \"../ThemeProviderContext\";\nimport { ETriplexNextTheme } from \"../ETriplexNextTheme\";\nimport {\n DesignTokensCore,\n DesignTokensCoreThemeDark,\n DesignTokensComponents,\n DesignTokensComponentsThemeDark,\n} from \"../../DesignTokens\";\n\ninterface IThemeProviderViewProps {\n // Дизайн-тема Triplex Next.\n theme: ETriplexNextTheme;\n // Дизайн-токены Triplex.\n tokens?: TDesignTokensPartial;\n // Classname, который добавлен к элементу из scopeRef для создания области видимости css-переменных.\n scopeClassName: string;\n // Ref на HTML элемент, внутри которого будет действовать текущий конфиг. По-умолчанию - html.\n scopeRef: React.RefObject<HTMLElement>;\n children?: React.ReactNode;\n}\n\n/**\n * Создает провайдер темы и создает область видимости для css-переменных.\n */\nexport const ThemeProviderView: React.FC<IThemeProviderViewProps> = ({\n children,\n scopeClassName,\n scopeRef,\n theme,\n tokens: tokensProps,\n}) => {\n const prevScopeClassName = useRef(\"\");\n\n useEffect(() => {\n const scopeRefCurrent = scopeRef.current;\n\n if (scopeClassName) {\n scopeRefCurrent?.classList.add(scopeClassName);\n }\n prevScopeClassName.current = scopeClassName;\n\n return () => {\n if (prevScopeClassName.current) {\n scopeRefCurrent?.classList.remove(prevScopeClassName.current);\n }\n };\n }, [scopeClassName, scopeRef]);\n\n const value = useMemo(() => {\n // Не менять порядок, иначе токены темы будут переопределять пользовательские значения.\n const tokens: TDesignTokens = defaultsDeep(\n {},\n tokensProps,\n theme === ETriplexNextTheme.LIGHT ? DesignTokensCore : DesignTokensCoreThemeDark,\n theme === ETriplexNextTheme.LIGHT ? DesignTokensComponents : DesignTokensComponentsThemeDark,\n );\n\n return { scopeClassName, theme, tokens };\n }, [scopeClassName, theme, tokensProps]);\n\n return <ThemeProviderContext.Provider value={value}>{children}</ThemeProviderContext.Provider>;\n};\n"],"names":[],"mappings":";;;;;;;;;AA4BO,MAAM,oBAAuD,CAAC;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACZ,MAAM;AACF,QAAM,qBAAqB,OAAO,EAAE;AAEpC,YAAU,MAAM;AACZ,UAAM,kBAAkB,SAAS;AAEjC,QAAI,gBAAgB;AAChB,yDAAiB,UAAU,IAAI;AAAA,IACnC;AACA,uBAAmB,UAAU;AAE7B,WAAO,MAAM;AACT,UAAI,mBAAmB,SAAS;AAC5B,2DAAiB,UAAU,OAAO,mBAAmB;AAAA,MACzD;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,gBAAgB,QAAQ,CAAC;AAE7B,QAAM,QAAQ,QAAQ,MAAM;AAExB,UAAM,SAAwB;AAAA,MAC1B,CAAA;AAAA,MACA;AAAA,MACA,UAAU,kBAAkB,QAAQ,mBAAmB;AAAA,MACvD,UAAU,kBAAkB,QAAQ,yBAAyB;AAAA,IAAA;AAGjE,WAAO,EAAE,gBAAgB,OAAO,OAAA;AAAA,EACpC,GAAG,CAAC,gBAAgB,OAAO,WAAW,CAAC;AAEvC,SAAO,oBAAC,qBAAqB,UAArB,EAA8B,OAAe,SAAA,CAAS;AAClE;"}
1
+ {"version":3,"file":"ThemeProviderView.js","sources":["../../../../src/components/ThemeProvider/components/ThemeProviderView.tsx"],"sourcesContent":["import React, { useEffect, useMemo } from \"react\";\nimport { defaultsDeep } from \"lodash-es\";\nimport { TDesignTokens, TDesignTokensPartial } from \"../../DesignTokens/types/DesignTokensTypes\";\nimport { ThemeProviderContext } from \"../ThemeProviderContext\";\nimport { ETriplexNextTheme } from \"../ETriplexNextTheme\";\nimport {\n DesignTokensCore,\n DesignTokensCoreThemeDark,\n DesignTokensComponents,\n DesignTokensComponentsThemeDark,\n} from \"../../DesignTokens\";\n\ninterface IThemeProviderViewProps {\n /** Дизайн-тема Triplex Next. */\n theme: ETriplexNextTheme;\n /** Переопределяемые токены. */\n tokens?: TDesignTokensPartial;\n /** Classname, который добавлен к элементу из scopeRef для создания области видимости css-переменных. */\n scopeClassName: string;\n /** Ref на HTML элемент, внутри которого будет действовать текущий конфиг. */\n scopeRef: React.RefObject<HTMLElement>;\n /** Контент, внутри которого действуют тема и токены. */\n children?: React.ReactNode;\n}\n\n/**\n * Создаёт провайдер темы: навешивает scopeClassName на элемент из scopeRef (область видимости\n * css-переменных) и отдаёт тему вместе с итоговыми токенами в контекст.\n */\nexport const ThemeProviderView: React.FC<IThemeProviderViewProps> = ({\n children,\n scopeClassName,\n scopeRef,\n theme,\n tokens: tokensProps,\n}) => {\n useEffect(() => {\n const scopeElement = scopeRef.current;\n\n if (!scopeClassName) {\n return;\n }\n\n scopeElement?.classList.add(scopeClassName);\n\n return () => {\n scopeElement?.classList.remove(scopeClassName);\n };\n }, [scopeClassName, scopeRef]);\n\n const value = useMemo(() => {\n // Не менять порядок, иначе токены темы будут переопределять пользовательские значения.\n const tokens: TDesignTokens = defaultsDeep(\n {},\n tokensProps,\n theme === ETriplexNextTheme.LIGHT ? DesignTokensCore : DesignTokensCoreThemeDark,\n theme === ETriplexNextTheme.LIGHT ? DesignTokensComponents : DesignTokensComponentsThemeDark,\n );\n\n return { scopeClassName, theme, tokens };\n }, [scopeClassName, theme, tokensProps]);\n\n return <ThemeProviderContext.Provider value={value}>{children}</ThemeProviderContext.Provider>;\n};\n"],"names":[],"mappings":";;;;;;;;;AA6BO,MAAM,oBAAuD,CAAC;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACZ,MAAM;AACF,YAAU,MAAM;AACZ,UAAM,eAAe,SAAS;AAE9B,QAAI,CAAC,gBAAgB;AACjB;AAAA,IACJ;AAEA,iDAAc,UAAU,IAAI;AAE5B,WAAO,MAAM;AACT,mDAAc,UAAU,OAAO;AAAA,IACnC;AAAA,EACJ,GAAG,CAAC,gBAAgB,QAAQ,CAAC;AAE7B,QAAM,QAAQ,QAAQ,MAAM;AAExB,UAAM,SAAwB;AAAA,MAC1B,CAAA;AAAA,MACA;AAAA,MACA,UAAU,kBAAkB,QAAQ,mBAAmB;AAAA,MACvD,UAAU,kBAAkB,QAAQ,yBAAyB;AAAA,IAAA;AAGjE,WAAO,EAAE,gBAAgB,OAAO,OAAA;AAAA,EACpC,GAAG,CAAC,gBAAgB,OAAO,WAAW,CAAC;AAEvC,SAAO,oBAAC,qBAAqB,UAArB,EAA8B,OAAe,SAAA,CAAS;AAClE;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useToken.js","sources":["../../../src/components/ThemeProvider/useToken.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { TDesignTokens } from \"../DesignTokens/types/DesignTokensTypes\";\nimport { ThemeProviderContext } from \"@sberbusiness/triplex-next/components/ThemeProvider/ThemeProviderContext\";\nimport { ETriplexNextTheme } from \"./ETriplexNextTheme\";\n\n/**\n * Хук, возвращающий текущую тему и токены.\n */\nexport const useToken = (): { scopeClassName: string; theme: ETriplexNextTheme; tokens: TDesignTokens } => {\n const { scopeClassName, theme, tokens } = useContext(ThemeProviderContext);\n\n return { scopeClassName, theme, tokens };\n};\n"],"names":[],"mappings":";;AAQO,MAAM,WAAW,MAAmF;AACvG,QAAM,EAAE,gBAAgB,OAAO,OAAA,IAAW,WAAW,oBAAoB;AAEzE,SAAO,EAAE,gBAAgB,OAAO,OAAA;AACpC;"}
1
+ {"version":3,"file":"useToken.js","sources":["../../../src/components/ThemeProvider/useToken.ts"],"sourcesContent":["import { useContext } from \"react\";\nimport { TDesignTokens } from \"../DesignTokens/types/DesignTokensTypes\";\nimport { ThemeProviderContext } from \"@sberbusiness/triplex-next/components/ThemeProvider/ThemeProviderContext\";\nimport { ETriplexNextTheme } from \"./ETriplexNextTheme\";\n\n/**\n * Хук, возвращающий текущую тему и токены ближайшего ThemeProvider.\n * Вне ThemeProvider возвращает светлую тему, токены по умолчанию и пустой scopeClassName.\n */\nexport const useToken = (): { scopeClassName: string; theme: ETriplexNextTheme; tokens: TDesignTokens } => {\n const { scopeClassName, theme, tokens } = useContext(ThemeProviderContext);\n\n return { scopeClassName, theme, tokens };\n};\n"],"names":[],"mappings":";;AASO,MAAM,WAAW,MAAmF;AACvG,QAAM,EAAE,gBAAgB,OAAO,OAAA,IAAW,WAAW,oBAAoB;AAEzE,SAAO,EAAE,gBAAgB,OAAO,OAAA;AACpC;"}
@@ -1,5 +1,5 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import React__default, { useState, useRef, useEffect, useCallback } from "react";
2
+ import React__default, { useState, useRef, useEffect, useMemo, useCallback } from "react";
3
3
  import { TooltipContext } from "./TootlipContext.js";
4
4
  import { MobileView } from "../MobileView/MobileView.js";
5
5
  import { TooltipDesktop } from "./components/desktop/TooltipDesktop.js";
@@ -12,6 +12,29 @@ import { TooltipMobileHeader } from "./components/mobile/components/TooltipMobil
12
12
  import { useTooltipTheme } from "./utils/useTooltipTheme.js";
13
13
  import { useMobileView } from "../MobileView/useMobileView.js";
14
14
  import "./enums.js";
15
+ const collectTooltipElements = (children) => {
16
+ const elements = {
17
+ body: null,
18
+ link: null,
19
+ closeButton: null,
20
+ mobileHeader: null,
21
+ target: null
22
+ };
23
+ React__default.Children.forEach(children, (child) => {
24
+ if (React__default.isValidElement(child) && child.type === TooltipTarget) {
25
+ elements.target = child;
26
+ } else if (React__default.isValidElement(child) && child.type === TooltipBody) {
27
+ elements.body = child;
28
+ } else if (React__default.isValidElement(child) && child.type === TooltipLink) {
29
+ elements.link = child;
30
+ } else if (React__default.isValidElement(child) && child.type === TooltipXButton) {
31
+ elements.closeButton = child;
32
+ } else if (React__default.isValidElement(child) && child.type === TooltipMobileHeader) {
33
+ elements.mobileHeader = child;
34
+ }
35
+ });
36
+ return elements;
37
+ };
15
38
  const Tooltip = ({
16
39
  children,
17
40
  toggleType,
@@ -26,65 +49,39 @@ const Tooltip = ({
26
49
  const targetHoveredRef = useRef(false);
27
50
  const open = openProp ?? openState;
28
51
  const isBodyOnlyRenderContainer = isMobileScreenWidth && !disableAdaptiveMode;
29
- useTooltipTheme(open, isBodyOnlyRenderContainer ? document.body : rest.renderContainer ?? document.body);
52
+ const themeContainer = isBodyOnlyRenderContainer ? document.body : rest.renderContainer ?? document.body;
53
+ useTooltipTheme(open, themeContainer);
30
54
  useEffect(() => {
31
55
  if (openProp === false) {
32
56
  targetHoveredRef.current = false;
33
57
  }
34
58
  }, [openProp]);
35
- const getChildrenElements = useCallback(() => {
36
- const elements = {
37
- body: null,
38
- link: null,
39
- closeButton: null,
40
- mobileHeader: null,
41
- target: null
42
- };
43
- React__default.Children.map(children, (child) => {
44
- if (React__default.isValidElement(child)) {
45
- if (child.type === TooltipTarget) {
46
- elements.target = child;
47
- } else if (child.type === TooltipBody) {
48
- elements.body = child;
49
- } else if (child.type === TooltipLink) {
50
- elements.link = child;
51
- } else if (child.type === TooltipXButton) {
52
- elements.closeButton = child;
53
- } else if (child.type === TooltipMobileHeader) {
54
- elements.mobileHeader = child;
59
+ const elements = useMemo(() => collectTooltipElements(children), [children]);
60
+ const handleOpen = useCallback(
61
+ (nextOpen) => {
62
+ if (openProp === void 0) {
63
+ if (!nextOpen) {
64
+ targetHoveredRef.current = false;
55
65
  }
66
+ setOpenState(nextOpen);
56
67
  }
57
- });
58
- return elements;
59
- }, [children]);
60
- const handleOpen = (nextOpen) => {
61
- if (openProp === void 0) {
62
- if (!nextOpen) {
63
- targetHoveredRef.current = false;
64
- }
65
- setOpenState(nextOpen);
66
- }
67
- toggle == null ? void 0 : toggle(nextOpen);
68
- };
69
- const renderDesktopTooltip = () => {
70
- return /* @__PURE__ */ jsx(TooltipDesktop, { isOpen: open, toggleType, preferPlace, ...rest });
71
- };
72
- const renderMobileTooltip = () => {
73
- return /* @__PURE__ */ jsx(TooltipMobile, { isOpen: open, ...rest });
74
- };
75
- return /* @__PURE__ */ jsx(
76
- TooltipContext.Provider,
77
- {
78
- value: {
79
- elements: getChildrenElements(),
80
- setTooltipOpen: handleOpen,
81
- targetHoveredRef,
82
- toggleType,
83
- tooltipOpen: open
84
- },
85
- children: disableAdaptiveMode ? renderDesktopTooltip() : /* @__PURE__ */ jsx(MobileView, { fallback: renderDesktopTooltip(), children: renderMobileTooltip() })
86
- }
68
+ toggle == null ? void 0 : toggle(nextOpen);
69
+ },
70
+ [openProp, toggle]
71
+ );
72
+ const contextValue = useMemo(
73
+ () => ({
74
+ elements,
75
+ setTooltipOpen: handleOpen,
76
+ targetHoveredRef,
77
+ toggleType,
78
+ tooltipOpen: open
79
+ }),
80
+ [elements, handleOpen, toggleType, open]
87
81
  );
82
+ const renderDesktopTooltip = () => /* @__PURE__ */ jsx(TooltipDesktop, { isOpen: open, toggleType, preferPlace, ...rest });
83
+ const renderMobileTooltip = () => /* @__PURE__ */ jsx(TooltipMobile, { isOpen: open, ...rest });
84
+ return /* @__PURE__ */ jsx(TooltipContext.Provider, { value: contextValue, children: disableAdaptiveMode ? renderDesktopTooltip() : /* @__PURE__ */ jsx(MobileView, { fallback: renderDesktopTooltip(), children: renderMobileTooltip() }) });
88
85
  };
89
86
  Tooltip.Target = TooltipTarget;
90
87
  Tooltip.Body = TooltipBody;
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useRef } from \"react\";\nimport { TooltipContext } from \"./TootlipContext\";\nimport { MobileView } from \"../MobileView/MobileView\";\nimport { TooltipDesktop } from \"./components/desktop/TooltipDesktop\";\nimport { TooltipMobile } from \"./components/mobile/TooltipMobile\";\nimport { TooltipBody } from \"./components/common/TooltipBody\";\nimport { TooltipLink } from \"./components/common/TooltipLink\";\nimport { TooltipTarget } from \"./components/common/TooltipTarget\";\nimport { TooltipXButton } from \"./components/common/TooltipXButton\";\nimport { TooltipMobileHeader } from \"./components/mobile/components/TooltipMobileHeader\";\nimport { ITooltipElements, ITooltipProps } from \"./types\";\nimport { useTooltipTheme } from \"./utils/useTooltipTheme\";\nimport { useMobileView } from \"../MobileView\";\n\n/** Внутренние составляющие компонента Tooltip. */\ninterface ITooltipComposition {\n Target: typeof TooltipTarget;\n Body: typeof TooltipBody;\n Link: typeof TooltipLink;\n XButton: typeof TooltipXButton;\n MobileHeader: typeof TooltipMobileHeader;\n}\n\n/** Всплывающая подсказка. */\nexport const Tooltip: React.FC<ITooltipProps> & ITooltipComposition = ({\n children,\n toggleType,\n preferPlace,\n disableAdaptiveMode,\n isOpen: openProp,\n toggle,\n ...rest\n}) => {\n const isMobileScreenWidth = useMobileView();\n const [openState, setOpenState] = useState(false);\n const targetHoveredRef = useRef(false);\n const open = openProp ?? openState;\n // renderContainer для mobile режима только document.body\n const isBodyOnlyRenderContainer = isMobileScreenWidth && !disableAdaptiveMode;\n useTooltipTheme(open, isBodyOnlyRenderContainer ? document.body : (rest.renderContainer ?? document.body));\n\n useEffect(() => {\n if (openProp === false) {\n targetHoveredRef.current = false;\n }\n }, [openProp]);\n\n /** Получить дочерние React-элементы. */\n const getChildrenElements = useCallback(() => {\n const elements: ITooltipElements = {\n body: null,\n link: null,\n closeButton: null,\n mobileHeader: null,\n target: null,\n };\n\n React.Children.map(children, (child) => {\n if (React.isValidElement<React.ReactElement>(child)) {\n if (child.type === TooltipTarget) {\n elements.target = child as React.ReactElement;\n } else if (child.type === TooltipBody) {\n elements.body = child as React.ReactElement;\n } else if (child.type === TooltipLink) {\n elements.link = child as React.ReactElement;\n } else if (child.type === TooltipXButton) {\n elements.closeButton = child as React.ReactElement;\n } else if (child.type === TooltipMobileHeader) {\n elements.mobileHeader = child as React.ReactElement;\n }\n }\n });\n\n return elements;\n }, [children]);\n\n /** Обработчик изменения состояния компонента. */\n const handleOpen = (nextOpen: boolean) => {\n if (openProp === undefined) {\n if (!nextOpen) {\n targetHoveredRef.current = false;\n }\n setOpenState(nextOpen);\n }\n\n toggle?.(nextOpen);\n };\n\n /** Рендер десктоп версии компонента. */\n const renderDesktopTooltip = () => {\n return <TooltipDesktop isOpen={open} toggleType={toggleType} preferPlace={preferPlace} {...rest} />;\n };\n\n /** Рендер мобильной версии компонента. */\n const renderMobileTooltip = () => {\n return <TooltipMobile isOpen={open} {...rest} />;\n };\n\n return (\n <TooltipContext.Provider\n value={{\n elements: getChildrenElements(),\n setTooltipOpen: handleOpen,\n targetHoveredRef,\n toggleType,\n tooltipOpen: open,\n }}\n >\n {disableAdaptiveMode ? (\n renderDesktopTooltip()\n ) : (\n <MobileView fallback={renderDesktopTooltip()}>{renderMobileTooltip()}</MobileView>\n )}\n </TooltipContext.Provider>\n );\n};\n\nTooltip.Target = TooltipTarget;\nTooltip.Body = TooltipBody;\nTooltip.Link = TooltipLink;\nTooltip.XButton = TooltipXButton;\nTooltip.MobileHeader = TooltipMobileHeader;\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;AAwBO,MAAM,UAAyD,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACP,MAAM;AACF,QAAM,sBAAsB,cAAA;AAC5B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,mBAAmB,OAAO,KAAK;AACrC,QAAM,OAAO,YAAY;AAEzB,QAAM,4BAA4B,uBAAuB,CAAC;AAC1D,kBAAgB,MAAM,4BAA4B,SAAS,OAAQ,KAAK,mBAAmB,SAAS,IAAK;AAEzG,YAAU,MAAM;AACZ,QAAI,aAAa,OAAO;AACpB,uBAAiB,UAAU;AAAA,IAC/B;AAAA,EACJ,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,sBAAsB,YAAY,MAAM;AAC1C,UAAM,WAA6B;AAAA,MAC/B,MAAM;AAAA,MACN,MAAM;AAAA,MACN,aAAa;AAAA,MACb,cAAc;AAAA,MACd,QAAQ;AAAA,IAAA;AAGZA,mBAAM,SAAS,IAAI,UAAU,CAAC,UAAU;AACpC,UAAIA,eAAM,eAAmC,KAAK,GAAG;AACjD,YAAI,MAAM,SAAS,eAAe;AAC9B,mBAAS,SAAS;AAAA,QACtB,WAAW,MAAM,SAAS,aAAa;AACnC,mBAAS,OAAO;AAAA,QACpB,WAAW,MAAM,SAAS,aAAa;AACnC,mBAAS,OAAO;AAAA,QACpB,WAAW,MAAM,SAAS,gBAAgB;AACtC,mBAAS,cAAc;AAAA,QAC3B,WAAW,MAAM,SAAS,qBAAqB;AAC3C,mBAAS,eAAe;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,WAAO;AAAA,EACX,GAAG,CAAC,QAAQ,CAAC;AAGb,QAAM,aAAa,CAAC,aAAsB;AACtC,QAAI,aAAa,QAAW;AACxB,UAAI,CAAC,UAAU;AACX,yBAAiB,UAAU;AAAA,MAC/B;AACA,mBAAa,QAAQ;AAAA,IACzB;AAEA,qCAAS;AAAA,EACb;AAGA,QAAM,uBAAuB,MAAM;AAC/B,+BAAQ,gBAAA,EAAe,QAAQ,MAAM,YAAwB,aAA2B,GAAG,MAAM;AAAA,EACrG;AAGA,QAAM,sBAAsB,MAAM;AAC9B,WAAO,oBAAC,eAAA,EAAc,QAAQ,MAAO,GAAG,MAAM;AAAA,EAClD;AAEA,SACI;AAAA,IAAC,eAAe;AAAA,IAAf;AAAA,MACG,OAAO;AAAA,QACH,UAAU,oBAAA;AAAA,QACV,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,QACA,aAAa;AAAA,MAAA;AAAA,MAGhB,UAAA,sBACG,yBAEA,oBAAC,cAAW,UAAU,qBAAA,GAAyB,UAAA,oBAAA,EAAoB,CAAE;AAAA,IAAA;AAAA,EAAA;AAIrF;AAEA,QAAQ,SAAS;AACjB,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,QAAQ,UAAU;AAClB,QAAQ,eAAe;"}
1
+ {"version":3,"file":"Tooltip.js","sources":["../../../src/components/Tooltip/Tooltip.tsx"],"sourcesContent":["import React, { useState, useEffect, useCallback, useMemo, useRef } from \"react\";\nimport { TooltipContext } from \"./TootlipContext\";\nimport { MobileView } from \"../MobileView/MobileView\";\nimport { TooltipDesktop } from \"./components/desktop/TooltipDesktop\";\nimport { TooltipMobile } from \"./components/mobile/TooltipMobile\";\nimport { TooltipBody } from \"./components/common/TooltipBody\";\nimport { TooltipLink } from \"./components/common/TooltipLink\";\nimport { TooltipTarget } from \"./components/common/TooltipTarget\";\nimport { TooltipXButton } from \"./components/common/TooltipXButton\";\nimport { TooltipMobileHeader } from \"./components/mobile/components/TooltipMobileHeader\";\nimport {\n ITooltipBodyProps,\n ITooltipElements,\n ITooltipLinkProps,\n ITooltipMobileHeaderProps,\n ITooltipProps,\n ITooltipTargetProps,\n ITooltipXButtonProps,\n} from \"./types\";\nimport { useTooltipTheme } from \"./utils/useTooltipTheme\";\nimport { useMobileView } from \"../MobileView\";\n\n/** Внутренние составляющие компонента Tooltip. */\ninterface ITooltipComposition {\n /** Целевой элемент, к которому привязана подсказка. */\n Target: typeof TooltipTarget;\n /** Содержимое подсказки. */\n Body: typeof TooltipBody;\n /** Гиперссылка внутри подсказки. */\n Link: typeof TooltipLink;\n /** Кнопка закрытия подсказки. */\n XButton: typeof TooltipXButton;\n /** Заголовок мобильной (адаптивной) версии подсказки. */\n MobileHeader: typeof TooltipMobileHeader;\n}\n\n/**\n * Разбирает children на именованные слоты Tooltip.\n * Узлы, не являющиеся субкомпонентами Tooltip, игнорируются.\n */\nconst collectTooltipElements = (children: React.ReactNode): ITooltipElements => {\n const elements: ITooltipElements = {\n body: null,\n link: null,\n closeButton: null,\n mobileHeader: null,\n target: null,\n };\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<ITooltipTargetProps>(child) && child.type === TooltipTarget) {\n elements.target = child;\n } else if (React.isValidElement<ITooltipBodyProps>(child) && child.type === TooltipBody) {\n elements.body = child;\n } else if (React.isValidElement<ITooltipLinkProps>(child) && child.type === TooltipLink) {\n elements.link = child;\n } else if (React.isValidElement<ITooltipXButtonProps>(child) && child.type === TooltipXButton) {\n elements.closeButton = child;\n } else if (React.isValidElement<ITooltipMobileHeaderProps>(child) && child.type === TooltipMobileHeader) {\n elements.mobileHeader = child;\n }\n });\n\n return elements;\n};\n\n/** Всплывающая подсказка. */\nexport const Tooltip: React.FC<ITooltipProps> & ITooltipComposition = ({\n children,\n toggleType,\n preferPlace,\n disableAdaptiveMode,\n isOpen: openProp,\n toggle,\n ...rest\n}) => {\n const isMobileScreenWidth = useMobileView();\n const [openState, setOpenState] = useState(false);\n const targetHoveredRef = useRef(false);\n const open = openProp ?? openState;\n // renderContainer для mobile режима только document.body\n const isBodyOnlyRenderContainer = isMobileScreenWidth && !disableAdaptiveMode;\n const themeContainer = isBodyOnlyRenderContainer ? document.body : (rest.renderContainer ?? document.body);\n\n useTooltipTheme(open, themeContainer);\n\n useEffect(() => {\n if (openProp === false) {\n targetHoveredRef.current = false;\n }\n }, [openProp]);\n\n const elements = useMemo(() => collectTooltipElements(children), [children]);\n\n /** Обработчик изменения состояния компонента. */\n const handleOpen = useCallback(\n (nextOpen: boolean) => {\n if (openProp === undefined) {\n if (!nextOpen) {\n targetHoveredRef.current = false;\n }\n setOpenState(nextOpen);\n }\n\n toggle?.(nextOpen);\n },\n [openProp, toggle],\n );\n\n const contextValue = useMemo(\n () => ({\n elements,\n setTooltipOpen: handleOpen,\n targetHoveredRef,\n toggleType,\n tooltipOpen: open,\n }),\n [elements, handleOpen, toggleType, open],\n );\n\n /** Рендер десктоп версии компонента. */\n const renderDesktopTooltip = () => (\n <TooltipDesktop isOpen={open} toggleType={toggleType} preferPlace={preferPlace} {...rest} />\n );\n\n /** Рендер мобильной версии компонента. */\n const renderMobileTooltip = () => <TooltipMobile isOpen={open} {...rest} />;\n\n return (\n <TooltipContext.Provider value={contextValue}>\n {disableAdaptiveMode ? (\n renderDesktopTooltip()\n ) : (\n <MobileView fallback={renderDesktopTooltip()}>{renderMobileTooltip()}</MobileView>\n )}\n </TooltipContext.Provider>\n );\n};\n\nTooltip.Target = TooltipTarget;\nTooltip.Body = TooltipBody;\nTooltip.Link = TooltipLink;\nTooltip.XButton = TooltipXButton;\nTooltip.MobileHeader = TooltipMobileHeader;\n"],"names":["React"],"mappings":";;;;;;;;;;;;;;AAwCA,MAAM,yBAAyB,CAAC,aAAgD;AAC5E,QAAM,WAA6B;AAAA,IAC/B,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,EAAA;AAGZA,iBAAM,SAAS,QAAQ,UAAU,CAAC,UAAU;AACxC,QAAIA,eAAM,eAAoC,KAAK,KAAK,MAAM,SAAS,eAAe;AAClF,eAAS,SAAS;AAAA,IACtB,WAAWA,eAAM,eAAkC,KAAK,KAAK,MAAM,SAAS,aAAa;AACrF,eAAS,OAAO;AAAA,IACpB,WAAWA,eAAM,eAAkC,KAAK,KAAK,MAAM,SAAS,aAAa;AACrF,eAAS,OAAO;AAAA,IACpB,WAAWA,eAAM,eAAqC,KAAK,KAAK,MAAM,SAAS,gBAAgB;AAC3F,eAAS,cAAc;AAAA,IAC3B,WAAWA,eAAM,eAA0C,KAAK,KAAK,MAAM,SAAS,qBAAqB;AACrG,eAAS,eAAe;AAAA,IAC5B;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AAGO,MAAM,UAAyD,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,GAAG;AACP,MAAM;AACF,QAAM,sBAAsB,cAAA;AAC5B,QAAM,CAAC,WAAW,YAAY,IAAI,SAAS,KAAK;AAChD,QAAM,mBAAmB,OAAO,KAAK;AACrC,QAAM,OAAO,YAAY;AAEzB,QAAM,4BAA4B,uBAAuB,CAAC;AAC1D,QAAM,iBAAiB,4BAA4B,SAAS,OAAQ,KAAK,mBAAmB,SAAS;AAErG,kBAAgB,MAAM,cAAc;AAEpC,YAAU,MAAM;AACZ,QAAI,aAAa,OAAO;AACpB,uBAAiB,UAAU;AAAA,IAC/B;AAAA,EACJ,GAAG,CAAC,QAAQ,CAAC;AAEb,QAAM,WAAW,QAAQ,MAAM,uBAAuB,QAAQ,GAAG,CAAC,QAAQ,CAAC;AAG3E,QAAM,aAAa;AAAA,IACf,CAAC,aAAsB;AACnB,UAAI,aAAa,QAAW;AACxB,YAAI,CAAC,UAAU;AACX,2BAAiB,UAAU;AAAA,QAC/B;AACA,qBAAa,QAAQ;AAAA,MACzB;AAEA,uCAAS;AAAA,IACb;AAAA,IACA,CAAC,UAAU,MAAM;AAAA,EAAA;AAGrB,QAAM,eAAe;AAAA,IACjB,OAAO;AAAA,MACH;AAAA,MACA,gBAAgB;AAAA,MAChB;AAAA,MACA;AAAA,MACA,aAAa;AAAA,IAAA;AAAA,IAEjB,CAAC,UAAU,YAAY,YAAY,IAAI;AAAA,EAAA;AAI3C,QAAM,uBAAuB,MACzB,oBAAC,gBAAA,EAAe,QAAQ,MAAM,YAAwB,aAA2B,GAAG,MAAM;AAI9F,QAAM,sBAAsB,MAAM,oBAAC,iBAAc,QAAQ,MAAO,GAAG,MAAM;AAEzE,6BACK,eAAe,UAAf,EAAwB,OAAO,cAC3B,UAAA,sBACG,qBAAA,IAEA,oBAAC,cAAW,UAAU,qBAAA,GAAyB,UAAA,oBAAA,GAAsB,GAE7E;AAER;AAEA,QAAQ,SAAS;AACjB,QAAQ,OAAO;AACf,QAAQ,OAAO;AACf,QAAQ,UAAU;AAClB,QAAQ,eAAe;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TootlipContext.js","sources":["../../../src/components/Tooltip/TootlipContext.ts"],"sourcesContent":["import React from \"react\";\nimport { TTooltipToggleType, ITooltipElements } from \"@sberbusiness/triplex-next/components/Tooltip/types\";\n\n/** Свойства контекста Tooltip. */\nexport interface ITooltipContext {\n toggleType?: TTooltipToggleType;\n elements: ITooltipElements;\n tooltipOpen: boolean;\n targetHoveredRef: React.MutableRefObject<boolean>;\n setTooltipOpen: (open: boolean) => void;\n}\n\n/** Контекст компонента Tooltip. */\nexport const TooltipContext = React.createContext<ITooltipContext>({\n elements: {\n body: null,\n link: null,\n closeButton: null,\n mobileHeader: null,\n target: null,\n },\n setTooltipOpen: () => {},\n targetHoveredRef: { current: false },\n tooltipOpen: false,\n});\n"],"names":["React"],"mappings":";AAaO,MAAM,iBAAiBA,eAAM,cAA+B;AAAA,EAC/D,UAAU;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,EAAA;AAAA,EAEZ,gBAAgB,MAAM;AAAA,EAAC;AAAA,EACvB,kBAAkB,EAAE,SAAS,MAAA;AAAA,EAC7B,aAAa;AACjB,CAAC;"}
1
+ {"version":3,"file":"TootlipContext.js","sources":["../../../src/components/Tooltip/TootlipContext.ts"],"sourcesContent":["import React from \"react\";\nimport { TTooltipToggleType, ITooltipElements } from \"@sberbusiness/triplex-next/components/Tooltip/types\";\n\n/** Свойства контекста Tooltip. */\nexport interface ITooltipContext {\n /** Способ открытия подсказки: по клику или по наведению. */\n toggleType?: TTooltipToggleType;\n /** Субкомпоненты, разобранные из children Tooltip. */\n elements: ITooltipElements;\n /** Признак того, что подсказка открыта. */\n tooltipOpen: boolean;\n /** Признак того, что открытие было инициировано наведением на целевой элемент. */\n targetHoveredRef: React.MutableRefObject<boolean>;\n /** Изменение состояния открытости подсказки. */\n setTooltipOpen: (open: boolean) => void;\n}\n\n/** Контекст компонента Tooltip. */\nexport const TooltipContext = React.createContext<ITooltipContext>({\n elements: {\n body: null,\n link: null,\n closeButton: null,\n mobileHeader: null,\n target: null,\n },\n setTooltipOpen: () => {},\n targetHoveredRef: { current: false },\n tooltipOpen: false,\n});\n"],"names":["React"],"mappings":";AAkBO,MAAM,iBAAiBA,eAAM,cAA+B;AAAA,EAC/D,UAAU;AAAA,IACN,MAAM;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,EAAA;AAAA,EAEZ,gBAAgB,MAAM;AAAA,EAAC;AAAA,EACvB,kBAAkB,EAAE,SAAS,MAAA;AAAA,EAC7B,aAAa;AACjB,CAAC;"}
@@ -4,7 +4,7 @@ import { c as clsx } from "../../../../chunks/vendor-CtuAQuEN.js";
4
4
  import { MobileView } from "../../../MobileView/MobileView.js";
5
5
  import { Text } from "../../../Typography/Text.js";
6
6
  import { ELineType, ETextSize } from "../../../Typography/enums.js";
7
- import { s as styles } from "../../../../chunks/TooltipDesktop.module-DBiY8cJJ.js";
7
+ import { s as styles } from "../../../../chunks/TooltipDesktop.module-BKIRlstC.js";
8
8
  const TooltipBody = React__default.forwardRef(({ className, ...rest }, ref) => {
9
9
  const classNames = clsx(styles.tooltipBody, className);
10
10
  return /* @__PURE__ */ jsx(MobileView, { fallback: /* @__PURE__ */ jsx("div", { className: classNames, ...rest, ref }), children: /* @__PURE__ */ jsx(Text, { className: classNames, size: ETextSize.B3, line: ELineType.NORMAL, tag: "div", ...rest, ref }) });
@@ -3,9 +3,9 @@ import React__default from "react";
3
3
  import { c as clsx } from "../../../../chunks/vendor-CtuAQuEN.js";
4
4
  import { MobileView } from "../../../MobileView/MobileView.js";
5
5
  import { getSafeRel } from "../../../../utils/html/anchorSecurity.js";
6
- const tooltipLink = "tooltipLink__86ee5f38";
7
- const desktop = "desktop__188a8712";
8
- const mobile = "mobile__2985087c";
6
+ const tooltipLink = "tooltipLink__d211ddc1";
7
+ const desktop = "desktop__11edf5a1";
8
+ const mobile = "mobile__2cca39dd";
9
9
  const styles = {
10
10
  tooltipLink,
11
11
  desktop,
@@ -14,30 +14,19 @@ const styles = {
14
14
  const TooltipLink = React__default.forwardRef(
15
15
  ({ children, className, target, rel, ...rest }, ref) => {
16
16
  const safeRel = getSafeRel(target, rel);
17
- const renderDesktopLink = () => /* @__PURE__ */ jsx(
17
+ const renderLink = (variantClassName) => /* @__PURE__ */ jsx(
18
18
  "a",
19
19
  {
20
- className: clsx(styles.tooltipLink, styles.desktop, className),
20
+ className: clsx(styles.tooltipLink, variantClassName, className),
21
21
  ...rest,
22
22
  target,
23
23
  rel: safeRel,
24
- "data-tx": "1.40.0",
24
+ "data-tx": "1.41.1",
25
25
  ref,
26
26
  children
27
27
  }
28
28
  );
29
- return /* @__PURE__ */ jsx(MobileView, { fallback: renderDesktopLink(), children: /* @__PURE__ */ jsx(
30
- "a",
31
- {
32
- className: clsx(styles.tooltipLink, styles.mobile, className),
33
- ...rest,
34
- target,
35
- rel: safeRel,
36
- "data-tx": "1.40.0",
37
- ref,
38
- children
39
- }
40
- ) });
29
+ return /* @__PURE__ */ jsx(MobileView, { fallback: renderLink(styles.desktop), children: renderLink(styles.mobile) });
41
30
  }
42
31
  );
43
32
  TooltipLink.displayName = "TooltipLink";
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipLink.js","sources":["../../../../../src/components/Tooltip/components/common/TooltipLink.tsx"],"sourcesContent":["import React from \"react\";\nimport clsx from \"clsx\";\nimport { MobileView } from \"@sberbusiness/triplex-next/components/MobileView/MobileView\";\nimport { getSafeRel } from \"@sberbusiness/triplex-next/utils/html/anchorSecurity\";\nimport styles from \"@sberbusiness/triplex-next/components/Tooltip/styles/TooltipLink.module.less\";\nimport { ITooltipLinkProps } from \"@sberbusiness/triplex-next/components/Tooltip/types\";\n\n/** Гиперссылка в Tooltip. */\nexport const TooltipLink = React.forwardRef<HTMLAnchorElement, ITooltipLinkProps>(\n ({ children, className, target, rel, ...rest }, ref) => {\n // Защита от reverse tabnabbing при target=\"_blank\".\n const safeRel = getSafeRel(target, rel);\n\n /** Рендер десктоп версии. */\n const renderDesktopLink = () => (\n <a\n className={clsx(styles.tooltipLink, styles.desktop, className)}\n {...rest}\n target={target}\n rel={safeRel}\n data-tx={process.env.npm_package_version}\n ref={ref}\n >\n {children}\n </a>\n );\n\n return (\n <MobileView fallback={renderDesktopLink()}>\n <a\n className={clsx(styles.tooltipLink, styles.mobile, className)}\n {...rest}\n target={target}\n rel={safeRel}\n data-tx={process.env.npm_package_version}\n ref={ref}\n >\n {children}\n </a>\n </MobileView>\n );\n },\n);\n\nTooltipLink.displayName = \"TooltipLink\";\n"],"names":["React"],"mappings":";;;;;;;;;;;;;AAQO,MAAM,cAAcA,eAAM;AAAA,EAC7B,CAAC,EAAE,UAAU,WAAW,QAAQ,KAAK,GAAG,KAAA,GAAQ,QAAQ;AAEpD,UAAM,UAAU,WAAW,QAAQ,GAAG;AAGtC,UAAM,oBAAoB,MACtB;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAW,KAAK,OAAO,aAAa,OAAO,SAAS,SAAS;AAAA,QAC5D,GAAG;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,QACL,WAAS;AAAA,QACT;AAAA,QAEC;AAAA,MAAA;AAAA,IAAA;AAIT,+BACK,YAAA,EAAW,UAAU,kBAAA,GAClB,UAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAW,KAAK,OAAO,aAAa,OAAO,QAAQ,SAAS;AAAA,QAC3D,GAAG;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,QACL,WAAS;AAAA,QACT;AAAA,QAEC;AAAA,MAAA;AAAA,IAAA,GAET;AAAA,EAER;AACJ;AAEA,YAAY,cAAc;"}
1
+ {"version":3,"file":"TooltipLink.js","sources":["../../../../../src/components/Tooltip/components/common/TooltipLink.tsx"],"sourcesContent":["import React from \"react\";\nimport clsx from \"clsx\";\nimport { MobileView } from \"@sberbusiness/triplex-next/components/MobileView/MobileView\";\nimport { getSafeRel } from \"@sberbusiness/triplex-next/utils/html/anchorSecurity\";\nimport styles from \"@sberbusiness/triplex-next/components/Tooltip/styles/TooltipLink.module.less\";\nimport { ITooltipLinkProps } from \"@sberbusiness/triplex-next/components/Tooltip/types\";\n\n/** Гиперссылка в Tooltip. */\nexport const TooltipLink = React.forwardRef<HTMLAnchorElement, ITooltipLinkProps>(\n ({ children, className, target, rel, ...rest }, ref) => {\n // Защита от reverse tabnabbing при target=\"_blank\".\n const safeRel = getSafeRel(target, rel);\n\n /** Рендер ссылки с классом варианта отображения (десктопный или мобильный). */\n const renderLink = (variantClassName: string) => (\n <a\n className={clsx(styles.tooltipLink, variantClassName, className)}\n {...rest}\n target={target}\n rel={safeRel}\n data-tx={process.env.npm_package_version}\n ref={ref}\n >\n {children}\n </a>\n );\n\n return <MobileView fallback={renderLink(styles.desktop)}>{renderLink(styles.mobile)}</MobileView>;\n },\n);\n\nTooltipLink.displayName = \"TooltipLink\";\n"],"names":["React"],"mappings":";;;;;;;;;;;;;AAQO,MAAM,cAAcA,eAAM;AAAA,EAC7B,CAAC,EAAE,UAAU,WAAW,QAAQ,KAAK,GAAG,KAAA,GAAQ,QAAQ;AAEpD,UAAM,UAAU,WAAW,QAAQ,GAAG;AAGtC,UAAM,aAAa,CAAC,qBAChB;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,WAAW,KAAK,OAAO,aAAa,kBAAkB,SAAS;AAAA,QAC9D,GAAG;AAAA,QACJ;AAAA,QACA,KAAK;AAAA,QACL,WAAS;AAAA,QACT;AAAA,QAEC;AAAA,MAAA;AAAA,IAAA;AAIT,WAAO,oBAAC,YAAA,EAAW,UAAU,WAAW,OAAO,OAAO,GAAI,UAAA,WAAW,OAAO,MAAM,GAAE;AAAA,EACxF;AACJ;AAEA,YAAY,cAAc;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipTarget.js","sources":["../../../../../src/components/Tooltip/components/common/TooltipTarget.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\nimport { TooltipContext } from \"@sberbusiness/triplex-next/components/Tooltip/TootlipContext\";\nimport { isKey } from \"@sberbusiness/triplex-next/utils/keyboard\";\nimport { ITooltipTargetProps } from \"@sberbusiness/triplex-next/components/Tooltip/types\";\n\n/** Целевой элемент компонента Tooltip. */\nexport const TooltipTarget: React.FC<ITooltipTargetProps> = ({ children }) => {\n const { toggleType, tooltipOpen, targetHoveredRef, setTooltipOpen } = useContext(TooltipContext);\n const child = React.Children.only(children);\n\n /** Обработчик нажатия клавиши. */\n const handleKeyDown = (onKeyDown?: React.KeyboardEventHandler) => (event: React.KeyboardEvent) => {\n const key = event.code || event.keyCode;\n\n if (isKey(key, \"TAB\")) {\n if (tooltipOpen) {\n setTooltipOpen(false);\n }\n }\n onKeyDown?.(event);\n };\n\n /** Обработчик клика. */\n const handleClick = (onClick?: React.MouseEventHandler) => (event: React.MouseEvent) => {\n if (\n toggleType === \"click\" ||\n (toggleType === \"hover\" && !targetHoveredRef.current && event.currentTarget.contains(event.target as Node))\n ) {\n setTooltipOpen(!tooltipOpen);\n }\n onClick?.(event);\n };\n\n if (React.isValidElement<React.HTMLAttributes<Element>>(child)) {\n return React.cloneElement(child, {\n onClick: handleClick(child.props.onClick),\n onKeyDown: handleKeyDown(child.props.onKeyDown),\n });\n }\n\n return child;\n};\n"],"names":["React"],"mappings":";;;AAMO,MAAM,gBAA+C,CAAC,EAAE,eAAe;AAC1E,QAAM,EAAE,YAAY,aAAa,kBAAkB,eAAA,IAAmB,WAAW,cAAc;AAC/F,QAAM,QAAQA,eAAM,SAAS,KAAK,QAAQ;AAG1C,QAAM,gBAAgB,CAAC,cAA2C,CAAC,UAA+B;AAC9F,UAAM,MAAM,MAAM,QAAQ,MAAM;AAEhC,QAAI,MAAM,KAAK,KAAK,GAAG;AACnB,UAAI,aAAa;AACb,uBAAe,KAAK;AAAA,MACxB;AAAA,IACJ;AACA,2CAAY;AAAA,EAChB;AAGA,QAAM,cAAc,CAAC,YAAsC,CAAC,UAA4B;AACpF,QACI,eAAe,WACd,eAAe,WAAW,CAAC,iBAAiB,WAAW,MAAM,cAAc,SAAS,MAAM,MAAc,GAC3G;AACE,qBAAe,CAAC,WAAW;AAAA,IAC/B;AACA,uCAAU;AAAA,EACd;AAEA,MAAIA,eAAM,eAA8C,KAAK,GAAG;AAC5D,WAAOA,eAAM,aAAa,OAAO;AAAA,MAC7B,SAAS,YAAY,MAAM,MAAM,OAAO;AAAA,MACxC,WAAW,cAAc,MAAM,MAAM,SAAS;AAAA,IAAA,CACjD;AAAA,EACL;AAEA,SAAO;AACX;"}
1
+ {"version":3,"file":"TooltipTarget.js","sources":["../../../../../src/components/Tooltip/components/common/TooltipTarget.tsx"],"sourcesContent":["import React, { useContext } from \"react\";\nimport { TooltipContext } from \"@sberbusiness/triplex-next/components/Tooltip/TootlipContext\";\nimport { isKey } from \"@sberbusiness/triplex-next/utils/keyboard\";\nimport { ITooltipTargetProps } from \"@sberbusiness/triplex-next/components/Tooltip/types\";\n\n/**\n * Целевой элемент компонента Tooltip.\n * Не рендерит собственную разметку: клонирует единственный дочерний элемент,\n * добавляя ему обработчики открытия подсказки. Собственные onClick/onKeyDown ребёнка сохраняются.\n */\nexport const TooltipTarget: React.FC<ITooltipTargetProps> = ({ children }) => {\n const { toggleType, tooltipOpen, targetHoveredRef, setTooltipOpen } = useContext(TooltipContext);\n const child = React.Children.only(children);\n\n /** Обработчик нажатия клавиши. */\n const handleKeyDown = (onKeyDown?: React.KeyboardEventHandler) => (event: React.KeyboardEvent) => {\n const key = event.code || event.keyCode;\n\n if (isKey(key, \"TAB\")) {\n if (tooltipOpen) {\n setTooltipOpen(false);\n }\n }\n onKeyDown?.(event);\n };\n\n /** Обработчик клика. */\n const handleClick = (onClick?: React.MouseEventHandler) => (event: React.MouseEvent) => {\n if (\n toggleType === \"click\" ||\n (toggleType === \"hover\" && !targetHoveredRef.current && event.currentTarget.contains(event.target as Node))\n ) {\n setTooltipOpen(!tooltipOpen);\n }\n onClick?.(event);\n };\n\n if (React.isValidElement<React.HTMLAttributes<Element>>(child)) {\n return React.cloneElement(child, {\n onClick: handleClick(child.props.onClick),\n onKeyDown: handleKeyDown(child.props.onKeyDown),\n });\n }\n\n return child;\n};\n"],"names":["React"],"mappings":";;;AAUO,MAAM,gBAA+C,CAAC,EAAE,eAAe;AAC1E,QAAM,EAAE,YAAY,aAAa,kBAAkB,eAAA,IAAmB,WAAW,cAAc;AAC/F,QAAM,QAAQA,eAAM,SAAS,KAAK,QAAQ;AAG1C,QAAM,gBAAgB,CAAC,cAA2C,CAAC,UAA+B;AAC9F,UAAM,MAAM,MAAM,QAAQ,MAAM;AAEhC,QAAI,MAAM,KAAK,KAAK,GAAG;AACnB,UAAI,aAAa;AACb,uBAAe,KAAK;AAAA,MACxB;AAAA,IACJ;AACA,2CAAY;AAAA,EAChB;AAGA,QAAM,cAAc,CAAC,YAAsC,CAAC,UAA4B;AACpF,QACI,eAAe,WACd,eAAe,WAAW,CAAC,iBAAiB,WAAW,MAAM,cAAc,SAAS,MAAM,MAAc,GAC3G;AACE,qBAAe,CAAC,WAAW;AAAA,IAC/B;AACA,uCAAU;AAAA,EACd;AAEA,MAAIA,eAAM,eAA8C,KAAK,GAAG;AAC5D,WAAOA,eAAM,aAAa,OAAO;AAAA,MAC7B,SAAS,YAAY,MAAM,MAAM,OAAO;AAAA,MACxC,WAAW,cAAc,MAAM,MAAM,SAAS;AAAA,IAAA,CACjD;AAAA,EACL;AAEA,SAAO;AACX;"}
@@ -3,7 +3,7 @@ import { useContext } from "react";
3
3
  import { CrossStrokeSrvIcon16 } from "@sberbusiness/icons-next";
4
4
  import { TooltipContext } from "../../TootlipContext.js";
5
5
  import { ButtonIcon } from "../../../Button/ButtonIcon.js";
6
- import { s as styles } from "../../../../chunks/TooltipDesktop.module-DBiY8cJJ.js";
6
+ import { s as styles } from "../../../../chunks/TooltipDesktop.module-BKIRlstC.js";
7
7
  const TooltipXButton = ({ onClick, ...rest }) => {
8
8
  const { setTooltipOpen } = useContext(TooltipContext);
9
9
  const handleClick = (event) => {
@@ -6,11 +6,13 @@ import React__default from "react";
6
6
  import { TooltipDesktopBase } from "./components/TooltipDesktopBase.js";
7
7
  import { TooltipContext } from "../../TootlipContext.js";
8
8
  import { isKey } from "../../../../utils/keyboard.js";
9
+ const HOVER_CLOSE_DELAY_MS = 500;
9
10
  class TooltipDesktop extends React__default.Component {
10
11
  constructor() {
11
12
  super(...arguments);
12
13
  __publicField(this, "tooltip", null);
13
14
  __publicField(this, "timeout");
15
+ /** Сохранение ноды подсказки и подписка её на события наведения. */
14
16
  __publicField(this, "setTooltipRef", (node) => {
15
17
  const { toggleType } = this.props;
16
18
  if (node && toggleType === "hover") {
@@ -18,7 +20,7 @@ class TooltipDesktop extends React__default.Component {
18
20
  }
19
21
  this.tooltip = node;
20
22
  });
21
- // Закрываем Tooltip при клике за его пределами.
23
+ /** Закрытие подсказки при действии мышью за её пределами. */
22
24
  __publicField(this, "closeIfOuterAction", (event) => {
23
25
  const { targetRef } = this.props;
24
26
  const { setTooltipOpen } = this.context;
@@ -30,21 +32,24 @@ class TooltipDesktop extends React__default.Component {
30
32
  }
31
33
  }
32
34
  });
33
- // Закрываем Tooltip по нажатию Esc
35
+ /** Закрытие подсказки по нажатию Escape. */
34
36
  __publicField(this, "closeIfEscapeKey", (event) => {
35
37
  const key = event.code || event.keyCode;
36
38
  if (isKey(key, "ESCAPE")) {
37
39
  this.context.setTooltipOpen(false);
38
40
  }
39
41
  });
42
+ /** Подписка элемента на события наведения. */
40
43
  __publicField(this, "addHoverListeners", (element) => {
41
44
  element.addEventListener("mouseenter", this.handleMouseEnter);
42
45
  element.addEventListener("mouseleave", this.handleMouseLeave);
43
46
  });
47
+ /** Отписка элемента от событий наведения. */
44
48
  __publicField(this, "removeHoverListeners", (element) => {
45
49
  element.removeEventListener("mouseenter", this.handleMouseEnter);
46
50
  element.removeEventListener("mouseleave", this.handleMouseLeave);
47
51
  });
52
+ /** Обработчик наведения курсора на целевой элемент или на саму подсказку. */
48
53
  __publicField(this, "handleMouseEnter", () => {
49
54
  const { tooltipOpen, targetHoveredRef, setTooltipOpen } = this.context;
50
55
  if (!tooltipOpen) {
@@ -53,11 +58,12 @@ class TooltipDesktop extends React__default.Component {
53
58
  }
54
59
  clearTimeout(this.timeout);
55
60
  });
61
+ /** Обработчик ухода курсора: подсказка закрывается с задержкой, чтобы курсор успел дойти до неё. */
56
62
  __publicField(this, "handleMouseLeave", () => {
57
63
  const { setTooltipOpen } = this.context;
58
64
  this.timeout = window.setTimeout(() => {
59
65
  setTooltipOpen(false);
60
- }, 500);
66
+ }, HOVER_CLOSE_DELAY_MS);
61
67
  });
62
68
  }
63
69
  render() {
@@ -65,9 +71,9 @@ class TooltipDesktop extends React__default.Component {
65
71
  return /* @__PURE__ */ jsx(TooltipDesktopBase, { ...rest, setTooltipRef: this.setTooltipRef });
66
72
  }
67
73
  componentDidMount() {
68
- const { toggleType, targetRef } = this.props;
69
- if (this.props.isOpen) {
70
- document.addEventListener("click", this.closeIfOuterAction);
74
+ const { toggleType, targetRef, isOpen } = this.props;
75
+ if (isOpen) {
76
+ document.addEventListener("mousedown", this.closeIfOuterAction);
71
77
  document.addEventListener("keydown", this.closeIfEscapeKey);
72
78
  }
73
79
  if (targetRef.current && toggleType === "hover") {
@@ -85,15 +91,16 @@ class TooltipDesktop extends React__default.Component {
85
91
  if (isClosed) {
86
92
  document.removeEventListener("mousedown", this.closeIfOuterAction);
87
93
  document.removeEventListener("keydown", this.closeIfEscapeKey);
88
- if (this.props.toggleType === "hover") {
94
+ if (this.props.toggleType === "hover" && this.tooltip) {
89
95
  this.removeHoverListeners(this.tooltip);
90
96
  }
91
97
  }
92
- if (targetRef.current && prevProps.toggleType != this.props.toggleType) {
98
+ if (prevProps.toggleType !== this.props.toggleType) {
99
+ const elements = [targetRef.current, this.tooltip];
93
100
  if (this.props.toggleType === "hover") {
94
- this.addHoverListeners(targetRef.current);
101
+ elements.forEach((element) => element && this.addHoverListeners(element));
95
102
  } else if (prevProps.toggleType === "hover") {
96
- this.removeHoverListeners(targetRef.current);
103
+ elements.forEach((element) => element && this.removeHoverListeners(element));
97
104
  }
98
105
  }
99
106
  }
@@ -101,8 +108,13 @@ class TooltipDesktop extends React__default.Component {
101
108
  const { toggleType, targetRef } = this.props;
102
109
  document.removeEventListener("mousedown", this.closeIfOuterAction);
103
110
  document.removeEventListener("keydown", this.closeIfEscapeKey);
104
- if (targetRef.current && toggleType === "hover") {
105
- this.removeHoverListeners(targetRef.current);
111
+ if (toggleType === "hover") {
112
+ if (targetRef.current) {
113
+ this.removeHoverListeners(targetRef.current);
114
+ }
115
+ if (this.tooltip) {
116
+ this.removeHoverListeners(this.tooltip);
117
+ }
106
118
  }
107
119
  clearTimeout(this.timeout);
108
120
  }
@@ -1 +1 @@
1
- {"version":3,"file":"TooltipDesktop.js","sources":["../../../../../src/components/Tooltip/components/desktop/TooltipDesktop.tsx"],"sourcesContent":["import React from \"react\";\nimport { TooltipDesktopBase } from \"@sberbusiness/triplex-next/components/Tooltip/components/desktop/components/TooltipDesktopBase\";\nimport { TooltipContext } from \"@sberbusiness/triplex-next/components/Tooltip/TootlipContext\";\nimport { isKey } from \"@sberbusiness/triplex-next/utils/keyboard\";\nimport { ITooltipDesktopProps } from \"@sberbusiness/triplex-next/components/Tooltip/types\";\n\n/** Десктоп версия компонента Tooltip. */\nexport class TooltipDesktop extends React.Component<ITooltipDesktopProps> {\n public static displayName = \"TooltipDesktop\";\n public static contextType = TooltipContext;\n\n declare context: React.ContextType<typeof TooltipContext>;\n\n private tooltip: Element | null = null;\n private timeout?: number;\n\n public render(): JSX.Element {\n const { children, toggleType, ...rest } = this.props;\n\n return <TooltipDesktopBase {...rest} setTooltipRef={this.setTooltipRef} />;\n }\n\n public componentDidMount(): void {\n const { toggleType, targetRef } = this.props;\n\n // Если Tooltip открывается по клику, то должен уметь закрываться по клику вне и по Esc.\n if (this.props.isOpen) {\n document.addEventListener(\"click\", this.closeIfOuterAction);\n document.addEventListener(\"keydown\", this.closeIfEscapeKey);\n }\n\n if (targetRef.current && toggleType === \"hover\") {\n this.addHoverListeners(targetRef.current);\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<ITooltipDesktopProps>): void {\n const { targetRef } = this.props;\n const isOpen = !prevProps.isOpen && this.props.isOpen;\n const isClosed = prevProps.isOpen && !this.props.isOpen;\n\n // Tooltip открылся.\n if (isOpen) {\n document.addEventListener(\"mousedown\", this.closeIfOuterAction);\n document.addEventListener(\"keydown\", this.closeIfEscapeKey);\n }\n\n // Tooltip закрылся.\n if (isClosed) {\n document.removeEventListener(\"mousedown\", this.closeIfOuterAction);\n document.removeEventListener(\"keydown\", this.closeIfEscapeKey);\n\n if (this.props.toggleType === \"hover\") {\n this.removeHoverListeners(this.tooltip!);\n }\n }\n\n if (targetRef.current && prevProps.toggleType != this.props.toggleType) {\n if (this.props.toggleType === \"hover\") {\n this.addHoverListeners(targetRef.current);\n } else if (prevProps.toggleType === \"hover\") {\n this.removeHoverListeners(targetRef.current);\n }\n }\n }\n\n public componentWillUnmount(): void {\n const { toggleType, targetRef } = this.props;\n\n document.removeEventListener(\"mousedown\", this.closeIfOuterAction);\n document.removeEventListener(\"keydown\", this.closeIfEscapeKey);\n\n if (targetRef.current && toggleType === \"hover\") {\n this.removeHoverListeners(targetRef.current);\n }\n\n clearTimeout(this.timeout);\n }\n\n private setTooltipRef = (node: HTMLDivElement | null) => {\n const { toggleType } = this.props;\n\n if (node && toggleType === \"hover\") {\n this.addHoverListeners(node);\n }\n\n this.tooltip = node;\n };\n\n // Закрываем Tooltip при клике за его пределами.\n private closeIfOuterAction = (event: Event) => {\n const { targetRef } = this.props;\n const { setTooltipOpen } = this.context;\n\n if (targetRef.current && this.tooltip) {\n const outOfTarget = !targetRef.current.contains(event.target as Node);\n const outOfTooltip = !this.tooltip.contains(event.target as Node);\n\n if (outOfTarget && outOfTooltip) {\n setTooltipOpen(false);\n }\n }\n };\n\n // Закрываем Tooltip по нажатию Esc\n private closeIfEscapeKey = (event: KeyboardEvent) => {\n const key = event.code || event.keyCode;\n\n if (isKey(key, \"ESCAPE\")) {\n this.context.setTooltipOpen(false);\n }\n };\n\n private addHoverListeners = (element: Element) => {\n element.addEventListener(\"mouseenter\", this.handleMouseEnter);\n element.addEventListener(\"mouseleave\", this.handleMouseLeave);\n };\n\n private removeHoverListeners = (element: Element) => {\n element.removeEventListener(\"mouseenter\", this.handleMouseEnter);\n element.removeEventListener(\"mouseleave\", this.handleMouseLeave);\n };\n\n private handleMouseEnter = () => {\n const { tooltipOpen, targetHoveredRef, setTooltipOpen } = this.context;\n\n if (!tooltipOpen) {\n setTooltipOpen(true);\n targetHoveredRef.current = true;\n }\n clearTimeout(this.timeout);\n };\n\n private handleMouseLeave = () => {\n const { setTooltipOpen } = this.context;\n\n this.timeout = window.setTimeout(() => {\n setTooltipOpen(false);\n }, 500);\n };\n}\n"],"names":["React"],"mappings":"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"}
1
+ {"version":3,"file":"TooltipDesktop.js","sources":["../../../../../src/components/Tooltip/components/desktop/TooltipDesktop.tsx"],"sourcesContent":["import React from \"react\";\nimport { TooltipDesktopBase } from \"@sberbusiness/triplex-next/components/Tooltip/components/desktop/components/TooltipDesktopBase\";\nimport { TooltipContext } from \"@sberbusiness/triplex-next/components/Tooltip/TootlipContext\";\nimport { isKey } from \"@sberbusiness/triplex-next/utils/keyboard\";\nimport { ITooltipDesktopProps } from \"@sberbusiness/triplex-next/components/Tooltip/types\";\n\n/** Задержка закрытия подсказки после ухода курсора, мс. */\nconst HOVER_CLOSE_DELAY_MS = 500;\n\n/**\n * Десктоп версия компонента Tooltip.\n * Отвечает за подписки на события документа и целевого элемента: закрытие по клику вне,\n * по Escape и открытие/закрытие по наведению.\n */\nexport class TooltipDesktop extends React.Component<ITooltipDesktopProps> {\n public static displayName = \"TooltipDesktop\";\n public static contextType = TooltipContext;\n\n declare context: React.ContextType<typeof TooltipContext>;\n\n private tooltip: Element | null = null;\n private timeout?: number;\n\n public render(): JSX.Element {\n // children и toggleType не должны попадать в DOM — исключаются из rest.\n const { children, toggleType, ...rest } = this.props;\n\n return <TooltipDesktopBase {...rest} setTooltipRef={this.setTooltipRef} />;\n }\n\n public componentDidMount(): void {\n const { toggleType, targetRef, isOpen } = this.props;\n\n // Если Tooltip открывается по клику, то должен уметь закрываться по клику вне и по Esc.\n if (isOpen) {\n document.addEventListener(\"mousedown\", this.closeIfOuterAction);\n document.addEventListener(\"keydown\", this.closeIfEscapeKey);\n }\n\n if (targetRef.current && toggleType === \"hover\") {\n this.addHoverListeners(targetRef.current);\n }\n }\n\n public componentDidUpdate(prevProps: Readonly<ITooltipDesktopProps>): void {\n const { targetRef } = this.props;\n const isOpen = !prevProps.isOpen && this.props.isOpen;\n const isClosed = prevProps.isOpen && !this.props.isOpen;\n\n // Tooltip открылся.\n if (isOpen) {\n document.addEventListener(\"mousedown\", this.closeIfOuterAction);\n document.addEventListener(\"keydown\", this.closeIfEscapeKey);\n }\n\n // Tooltip закрылся.\n if (isClosed) {\n document.removeEventListener(\"mousedown\", this.closeIfOuterAction);\n document.removeEventListener(\"keydown\", this.closeIfEscapeKey);\n\n if (this.props.toggleType === \"hover\" && this.tooltip) {\n this.removeHoverListeners(this.tooltip);\n }\n }\n\n // Смена toggleType на лету: обработчики нужно синхронизировать и на целевом элементе,\n // и на самой подсказке — на неё их вешает setTooltipRef, который повторно не вызывается.\n if (prevProps.toggleType !== this.props.toggleType) {\n const elements = [targetRef.current, this.tooltip];\n\n if (this.props.toggleType === \"hover\") {\n elements.forEach((element) => element && this.addHoverListeners(element));\n } else if (prevProps.toggleType === \"hover\") {\n elements.forEach((element) => element && this.removeHoverListeners(element));\n }\n }\n }\n\n public componentWillUnmount(): void {\n const { toggleType, targetRef } = this.props;\n\n document.removeEventListener(\"mousedown\", this.closeIfOuterAction);\n document.removeEventListener(\"keydown\", this.closeIfEscapeKey);\n\n if (toggleType === \"hover\") {\n if (targetRef.current) {\n this.removeHoverListeners(targetRef.current);\n }\n\n // На саму подсказку обработчики вешает setTooltipRef — снимаем их симметрично,\n // иначе при размонтировании открытой подсказки они остаются на ноде.\n if (this.tooltip) {\n this.removeHoverListeners(this.tooltip);\n }\n }\n\n clearTimeout(this.timeout);\n }\n\n /** Сохранение ноды подсказки и подписка её на события наведения. */\n private setTooltipRef = (node: HTMLDivElement | null) => {\n const { toggleType } = this.props;\n\n if (node && toggleType === \"hover\") {\n this.addHoverListeners(node);\n }\n\n this.tooltip = node;\n };\n\n /** Закрытие подсказки при действии мышью за её пределами. */\n private closeIfOuterAction = (event: Event) => {\n const { targetRef } = this.props;\n const { setTooltipOpen } = this.context;\n\n if (targetRef.current && this.tooltip) {\n const outOfTarget = !targetRef.current.contains(event.target as Node);\n const outOfTooltip = !this.tooltip.contains(event.target as Node);\n\n if (outOfTarget && outOfTooltip) {\n setTooltipOpen(false);\n }\n }\n };\n\n /** Закрытие подсказки по нажатию Escape. */\n private closeIfEscapeKey = (event: KeyboardEvent) => {\n const key = event.code || event.keyCode;\n\n if (isKey(key, \"ESCAPE\")) {\n this.context.setTooltipOpen(false);\n }\n };\n\n /** Подписка элемента на события наведения. */\n private addHoverListeners = (element: Element) => {\n element.addEventListener(\"mouseenter\", this.handleMouseEnter);\n element.addEventListener(\"mouseleave\", this.handleMouseLeave);\n };\n\n /** Отписка элемента от событий наведения. */\n private removeHoverListeners = (element: Element) => {\n element.removeEventListener(\"mouseenter\", this.handleMouseEnter);\n element.removeEventListener(\"mouseleave\", this.handleMouseLeave);\n };\n\n /** Обработчик наведения курсора на целевой элемент или на саму подсказку. */\n private handleMouseEnter = () => {\n const { tooltipOpen, targetHoveredRef, setTooltipOpen } = this.context;\n\n if (!tooltipOpen) {\n setTooltipOpen(true);\n targetHoveredRef.current = true;\n }\n clearTimeout(this.timeout);\n };\n\n /** Обработчик ухода курсора: подсказка закрывается с задержкой, чтобы курсор успел дойти до неё. */\n private handleMouseLeave = () => {\n const { setTooltipOpen } = this.context;\n\n this.timeout = window.setTimeout(() => {\n setTooltipOpen(false);\n }, HOVER_CLOSE_DELAY_MS);\n };\n}\n"],"names":["React"],"mappings":"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"}