@sberbusiness/triplex-next 0.39.0 → 0.40.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/chunks/{AlertProcessSpoiler-DRoHuVl6.js → AlertProcessSpoiler-pSJaWhCa.js} +17 -17
  2. package/chunks/{AlertProcessSpoiler-DRoHuVl6.js.map → AlertProcessSpoiler-pSJaWhCa.js.map} +1 -1
  3. package/chunks/{CalendarViewItem-AChLlz4N.js → CalendarViewItem-Bwl6zTCS.js} +21 -21
  4. package/chunks/{CalendarViewItem-AChLlz4N.js.map → CalendarViewItem-Bwl6zTCS.js.map} +1 -1
  5. package/chunks/Card.module-CvHkJNAp.js +30 -0
  6. package/chunks/Card.module-CvHkJNAp.js.map +1 -0
  7. package/chunks/Carousel.module-DTaSq3Bq.js +30 -0
  8. package/chunks/Carousel.module-DTaSq3Bq.js.map +1 -0
  9. package/chunks/CheckboxTreeExtended.module-SaSBrJR4.js +24 -0
  10. package/chunks/CheckboxTreeExtended.module-SaSBrJR4.js.map +1 -0
  11. package/chunks/{Chip-DGvjOx0y.js → Chip-ClKhILGe.js} +17 -17
  12. package/chunks/{Chip-DGvjOx0y.js.map → Chip-ClKhILGe.js.map} +1 -1
  13. package/chunks/Confirm.module-D6mKowVi.js +24 -0
  14. package/chunks/Confirm.module-D6mKowVi.js.map +1 -0
  15. package/chunks/{DropdownListItem-COR0eOzM.js → DropdownListItem-V6Oe5CEm.js} +21 -23
  16. package/chunks/DropdownListItem-V6Oe5CEm.js.map +1 -0
  17. package/chunks/DropdownMobile.module-dTA2fTAB.js +40 -0
  18. package/chunks/DropdownMobile.module-dTA2fTAB.js.map +1 -0
  19. package/chunks/Footer.module-DUyQNLJD.js +12 -0
  20. package/chunks/Footer.module-DUyQNLJD.js.map +1 -0
  21. package/chunks/{HeaderLayoutSidebar.module-o5cCUCGl.js → HeaderLayoutSidebar.module-DZ9o9YLT.js} +4 -4
  22. package/chunks/HeaderLayoutSidebar.module-DZ9o9YLT.js.map +1 -0
  23. package/chunks/HeaderTabs.module-CfIX4nxS.js +12 -0
  24. package/chunks/HeaderTabs.module-CfIX4nxS.js.map +1 -0
  25. package/chunks/{HeaderTitle.module-CUVjwVW7.js → HeaderTitle.module-BmBk2AAI.js} +4 -4
  26. package/chunks/HeaderTitle.module-BmBk2AAI.js.map +1 -0
  27. package/chunks/ImageGalleryExtendedMain.module-DvyJj_xh.js +28 -0
  28. package/chunks/ImageGalleryExtendedMain.module-DvyJj_xh.js.map +1 -0
  29. package/chunks/{ImageGalleryExtendedThumb-B7xjP3UP.js → ImageGalleryExtendedThumb-BA0TstuP.js} +6 -6
  30. package/chunks/{ImageGalleryExtendedThumb-B7xjP3UP.js.map → ImageGalleryExtendedThumb-BA0TstuP.js.map} +1 -1
  31. package/chunks/IslandAccordion.module-rbKkMJ0T.js +44 -0
  32. package/chunks/IslandAccordion.module-rbKkMJ0T.js.map +1 -0
  33. package/chunks/IslandWidgetFooter.module-BatDP8na.js +12 -0
  34. package/chunks/IslandWidgetFooter.module-BatDP8na.js.map +1 -0
  35. package/chunks/IslandWidgetHeader.module-DF76XaTz.js +20 -0
  36. package/chunks/IslandWidgetHeader.module-DF76XaTz.js.map +1 -0
  37. package/chunks/{LightBoxContent-blTzF5vv.js → LightBoxContent-BY9UKPE0.js} +15 -15
  38. package/chunks/{LightBoxContent-blTzF5vv.js.map → LightBoxContent-BY9UKPE0.js.map} +1 -1
  39. package/chunks/LightBoxControls.module-CEa7tSP-.js +26 -0
  40. package/chunks/LightBoxControls.module-CEa7tSP-.js.map +1 -0
  41. package/chunks/{LightBoxSideOverlayClose.module-BVuB53vM.js → LightBoxSideOverlayClose.module-Dz_nN5cb.js} +4 -4
  42. package/chunks/LightBoxSideOverlayClose.module-Dz_nN5cb.js.map +1 -0
  43. package/chunks/{ListItemControlsButton-DulKpjwV.js → ListItemControlsButton-Cdfka5RR.js} +10 -10
  44. package/chunks/{ListItemControlsButton-DulKpjwV.js.map → ListItemControlsButton-Cdfka5RR.js.map} +1 -1
  45. package/chunks/ListItemTail.module-DhkBzx2c.js +18 -0
  46. package/chunks/ListItemTail.module-DhkBzx2c.js.map +1 -0
  47. package/chunks/ListMasterFooter.module-khPHsN9b.js +14 -0
  48. package/chunks/ListMasterFooter.module-khPHsN9b.js.map +1 -0
  49. package/chunks/ModalWindow.module-DZr3uvJa.js +28 -0
  50. package/chunks/ModalWindow.module-DZr3uvJa.js.map +1 -0
  51. package/chunks/Notification.module-DIhjUBLy.js +34 -0
  52. package/chunks/Notification.module-DIhjUBLy.js.map +1 -0
  53. package/chunks/Overlay.module-C5MzOOr3.js +30 -0
  54. package/chunks/Overlay.module-C5MzOOr3.js.map +1 -0
  55. package/chunks/Page.module-CujP9XrT.js +15 -0
  56. package/chunks/Page.module-CujP9XrT.js.map +1 -0
  57. package/chunks/SMSField.module-B5isl-Pm.js +26 -0
  58. package/chunks/SMSField.module-B5isl-Pm.js.map +1 -0
  59. package/chunks/SliderExtendedMarks.module-OQ_S7X8I.js +24 -0
  60. package/chunks/SliderExtendedMarks.module-OQ_S7X8I.js.map +1 -0
  61. package/chunks/{SliderExtendedRail-kRXLpNwt.js → SliderExtendedRail-C_QEaxu8.js} +6 -6
  62. package/chunks/{SliderExtendedRail-kRXLpNwt.js.map → SliderExtendedRail-C_QEaxu8.js.map} +1 -1
  63. package/chunks/StatusTracker.module-DCLE9tGr.js +42 -0
  64. package/chunks/StatusTracker.module-DCLE9tGr.js.map +1 -0
  65. package/chunks/{StepperStepArrowBorder-CsES9yvO.js → StepperStepArrowBorder-BNFcnlyF.js} +16 -16
  66. package/chunks/{StepperStepArrowBorder-CsES9yvO.js.map → StepperStepArrowBorder-BNFcnlyF.js.map} +1 -1
  67. package/chunks/{SuggestFieldMobileDropdownHint-YOB5F8TH.js → SuggestFieldMobileDropdownHint-DZV48TnI.js} +3 -3
  68. package/chunks/{SuggestFieldMobileDropdownHint-YOB5F8TH.js.map → SuggestFieldMobileDropdownHint-DZV48TnI.js.map} +1 -1
  69. package/chunks/TableFooter.module-DwBBlrsZ.js +22 -0
  70. package/chunks/TableFooter.module-DwBBlrsZ.js.map +1 -0
  71. package/chunks/TabsExtended.module-DrUKKP9t.js +26 -0
  72. package/chunks/TabsExtended.module-DrUKKP9t.js.map +1 -0
  73. package/chunks/TabsLine.module-D3PvmawY.js +36 -0
  74. package/chunks/TabsLine.module-D3PvmawY.js.map +1 -0
  75. package/chunks/TooltipDesktop.module-Cl4YkFeR.js +32 -0
  76. package/chunks/TooltipDesktop.module-Cl4YkFeR.js.map +1 -0
  77. package/chunks/TreeView.module-u57anLkg.js +12 -0
  78. package/chunks/TreeView.module-u57anLkg.js.map +1 -0
  79. package/chunks/{UploadZoneInput-Dc9Z6NrZ.js → UploadZoneInput-jFV3NG4O.js} +6 -6
  80. package/chunks/{UploadZoneInput-Dc9Z6NrZ.js.map → UploadZoneInput-jFV3NG4O.js.map} +1 -1
  81. package/chunks/{constants-b3mFJcdx.js → constants-DSPLz6qR.js} +27 -27
  82. package/chunks/{constants-b3mFJcdx.js.map → constants-DSPLz6qR.js.map} +1 -1
  83. package/chunks/{utils-Bv8Gz_QY.js → utils-CkRhDOwX.js} +27 -27
  84. package/chunks/{utils-Bv8Gz_QY.js.map → utils-CkRhDOwX.js.map} +1 -1
  85. package/chunks/{utils-BXgC_I8P.js → utils-DUYRscrm.js} +8 -8
  86. package/chunks/{utils-BXgC_I8P.js.map → utils-DUYRscrm.js.map} +1 -1
  87. package/chunks/{utils-DdrwqT9t.js → utils-t-KnNaPS.js} +6 -6
  88. package/chunks/{utils-DdrwqT9t.js.map → utils-t-KnNaPS.js.map} +1 -1
  89. package/chunks/{utils-B1pi9Ckc.js → utils-y1CGkIMc.js} +11 -11
  90. package/chunks/{utils-B1pi9Ckc.js.map → utils-y1CGkIMc.js.map} +1 -1
  91. package/chunks/vendor-BtZO8a0z.js +17814 -0
  92. package/chunks/vendor-BtZO8a0z.js.map +1 -0
  93. package/components/AbstractTree/AbstractTreeNode.js +1 -1
  94. package/components/AccordionBase/protected/AccordionBase.js +1 -1
  95. package/components/Alert/AlertContext/AlertContext.js +8 -8
  96. package/components/Alert/AlertProcess/AlertProcess.js +3 -3
  97. package/components/Alert/AlertProcess/components/AlertProcessSpoiler.js +2 -2
  98. package/components/Amount/Amount.js +3 -3
  99. package/components/Avatar/Avatar.js +14 -14
  100. package/components/Badge/Badge.js +5 -5
  101. package/components/Badge/BadgeDot.js +5 -5
  102. package/components/Badge/components/BadgeContent.js +7 -7
  103. package/components/Badge/components/BadgePostfix.js +2 -2
  104. package/components/Badge/components/BadgePrefix.js +2 -2
  105. package/components/Body/Body.js +4 -4
  106. package/components/Button/Button.js +21 -21
  107. package/components/Button/ButtonBase.js +1 -1
  108. package/components/Button/ButtonDropdown.js +9 -9
  109. package/components/Button/ButtonDropdownExtended.js +18 -22
  110. package/components/Button/ButtonDropdownExtended.js.map +1 -1
  111. package/components/Button/ButtonIcon.js +4 -4
  112. package/components/Button/ButtonIcon.js.map +1 -1
  113. package/components/Calendar/Calendar.js +5 -5
  114. package/components/Calendar/components/CalendarControls.js +1 -1
  115. package/components/Calendar/components/CalendarFooter.js +1 -1
  116. package/components/Calendar/components/CalendarViewDays.js +2 -2
  117. package/components/Calendar/components/CalendarViewItem.js +2 -2
  118. package/components/Calendar/components/CalendarViewMonths.js +1 -1
  119. package/components/Calendar/components/CalendarViewYears.js +1 -1
  120. package/components/Card/CardAction.js +6 -6
  121. package/components/Card/CardStatic.js +3 -3
  122. package/components/Card/components/CardContent/CardContent.js +2 -2
  123. package/components/Card/components/CardContent/components/CardContentBody.js +2 -2
  124. package/components/Card/components/CardContent/components/CardContentFooter.js +2 -2
  125. package/components/Card/components/CardContent/components/CardContentHeader.js +2 -2
  126. package/components/Card/components/CardMedia.js +2 -2
  127. package/components/Card/utils.js +1 -1
  128. package/components/Carousel/Carousel.js +2 -2
  129. package/components/Carousel/CarouselButton.js +2 -2
  130. package/components/Carousel/CarouselIndicators.js +2 -2
  131. package/components/Carousel/CarouselItem.js +2 -2
  132. package/components/Carousel/CarouselTrack.js +2 -2
  133. package/components/Carousel/CarouselViewport.js +2 -2
  134. package/components/CarouselExtended/CarouselExtended.js +2 -2
  135. package/components/Checkbox/Checkbox.js +11 -11
  136. package/components/Checkbox/CheckboxXGroup.js +9 -9
  137. package/components/Checkbox/CheckboxYGroup.js +2 -2
  138. package/components/CheckboxTreeExtended/CheckboxTreeExtended.js +2 -2
  139. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedArrow.js +1 -1
  140. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedCheckbox.js +2 -2
  141. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedNode.js +2 -2
  142. package/components/Chip/Chip.js +2 -2
  143. package/components/Chip/ChipClearButton.js +2 -2
  144. package/components/Chip/ChipDatePicker/ChipDatePicker.js +1 -1
  145. package/components/Chip/ChipDatePicker/ChipDatePickerTarget.js +1 -1
  146. package/components/Chip/ChipDropdownArrow.js +3 -3
  147. package/components/Chip/ChipIcon.js +1 -1
  148. package/components/Chip/ChipMultiselect.js +2 -2
  149. package/components/Chip/ChipOptions.js +2 -2
  150. package/components/Chip/ChipSelect/ChipSelect.js +2 -2
  151. package/components/Chip/ChipSelect/ChipSelectTarget.js +1 -1
  152. package/components/Chip/ChipSort.js +2 -2
  153. package/components/Chip/ChipSuggest/ChipSuggest.js +2 -2
  154. package/components/Chip/ChipSuggest/ChipSuggestDropdown.js +2 -2
  155. package/components/Chip/ChipSuggest/ChipSuggestTarget.js +1 -1
  156. package/components/Chip/ChipSuggest/desktop/ChipSuggestDesktopDropdownField.js +1 -1
  157. package/components/Chip/index.js +1 -1
  158. package/components/ChipGroup/ChipGroup.js +8 -8
  159. package/components/Col/Col.js +133 -133
  160. package/components/CollapsibleTree/CollapsibleTree.js +2 -2
  161. package/components/CollapsibleTree/components/CollapsibleTreeLeafContent.js +2 -2
  162. package/components/CollapsibleTree/components/CollapsibleTreeLeafNode.js +2 -2
  163. package/components/CollapsibleTree/components/CollapsibleTreeNodeHeader.js +5 -5
  164. package/components/CollapsibleTreeExtended/components/CollapsibleTreeExtendedNode.js +2 -2
  165. package/components/Confirm/Confirm.js +2 -2
  166. package/components/Confirm/components/ConfirmCloseButton.js +2 -2
  167. package/components/Confirm/components/ConfirmContent.js +2 -2
  168. package/components/Confirm/components/ConfirmContentTitle.js +2 -2
  169. package/components/Confirm/components/ConfirmControls.js +2 -2
  170. package/components/DatePickerExtended/DatePickerExtended.js +2 -2
  171. package/components/DatePickerExtended/DatePickerExtendedDropdown.js +2 -2
  172. package/components/DateRange/DateRange.js +4 -4
  173. package/components/DesignTokens/DesignTokenUtils.js +2 -2
  174. package/components/Divider/Divider.js +18 -18
  175. package/components/DocumentNumberEdit/DocumentNumberEdit.js +4 -4
  176. package/components/Dropdown/Dropdown.js +14 -7
  177. package/components/Dropdown/Dropdown.js.map +1 -1
  178. package/components/Dropdown/desktop/DropdownDesktop.js +21 -25
  179. package/components/Dropdown/desktop/DropdownDesktop.js.map +1 -1
  180. package/components/Dropdown/desktop/DropdownList.js +38 -73
  181. package/components/Dropdown/desktop/DropdownList.js.map +1 -1
  182. package/components/Dropdown/desktop/DropdownListItem.js +2 -2
  183. package/components/Dropdown/desktop/index.js +1 -1
  184. package/components/Dropdown/desktop/utils.js +34 -0
  185. package/components/Dropdown/desktop/utils.js.map +1 -0
  186. package/components/Dropdown/index.js +1 -1
  187. package/components/Dropdown/mobile/DropdownMobile.js +2 -2
  188. package/components/Dropdown/mobile/DropdownMobileBody.js +2 -2
  189. package/components/Dropdown/mobile/DropdownMobileClose.js +2 -2
  190. package/components/Dropdown/mobile/DropdownMobileFooter.js +2 -2
  191. package/components/Dropdown/mobile/DropdownMobileHeader.js +2 -2
  192. package/components/Dropdown/mobile/DropdownMobileInner.js +6 -4
  193. package/components/Dropdown/mobile/DropdownMobileInner.js.map +1 -1
  194. package/components/Dropdown/mobile/DropdownMobileInput.js +2 -2
  195. package/components/Dropdown/mobile/DropdownMobileList.js +3 -3
  196. package/components/Dropdown/mobile/DropdownMobileList.js.map +1 -1
  197. package/components/Dropdown/mobile/DropdownMobileListItem.js +2 -2
  198. package/components/Dropdown/mobile/DropdownMobileListItem.js.map +1 -1
  199. package/components/Dropdown/mobile/DropdownMobileLoader.js +2 -2
  200. package/components/Dropdown/mobile/DropdownMobileMaskedInput.js +2 -2
  201. package/components/Ellipsis/Ellipsis.js +4 -4
  202. package/components/EmptyView/EmptyView.js +5 -5
  203. package/components/ExpandAnimation/ExpandAnimation.js +2 -2
  204. package/components/FocusTrapExtended/FocusTrapExtended.js +1 -1
  205. package/components/Footer/Footer.js +1 -1
  206. package/components/Footer/components/FooterDescription.js +2 -2
  207. package/components/Footer/components/FooterDescriptionContent.js +2 -2
  208. package/components/Footer/components/FooterDescriptionControls.js +2 -2
  209. package/components/FormField/FormField.js +12 -12
  210. package/components/FormField/components/FormFieldClear.js +2 -2
  211. package/components/FormField/components/FormFieldCounter.js +1 -1
  212. package/components/FormField/components/FormFieldDescription.js +3 -3
  213. package/components/FormField/components/FormFieldInput.js +5 -5
  214. package/components/FormField/components/FormFieldLabel.js +8 -8
  215. package/components/FormField/components/FormFieldMaskedInput.js +7 -7
  216. package/components/FormField/components/FormFieldPostfix.js +2 -2
  217. package/components/FormField/components/FormFieldPrefix.js +2 -2
  218. package/components/FormField/components/FormFieldTarget.js +9 -9
  219. package/components/FormField/components/FormFieldTextarea.js +5 -5
  220. package/components/Gap/Gap.js +9 -9
  221. package/components/Header/Header.js +1 -1
  222. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebar.js +2 -2
  223. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarContent.js +2 -2
  224. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarSidebar.js +2 -2
  225. package/components/Header/components/HeaderSubheader/HeaderSubheader.js +3 -3
  226. package/components/Header/components/HeaderTabs/HeaderTabs.js +2 -2
  227. package/components/Header/components/HeaderTabs/HeaderTabsContent.js +2 -2
  228. package/components/Header/components/HeaderTabs/HeaderTabsControls.js +2 -2
  229. package/components/Header/components/HeaderTitle/HeaderTitle.js +2 -2
  230. package/components/Header/components/HeaderTitle/HeaderTitleContent.js +2 -2
  231. package/components/Header/components/HeaderTitle/HeaderTitleControls.js +2 -2
  232. package/components/HelpBox/HelpBox.js +2 -2
  233. package/components/IconWrapper/IconWrapper.js +3 -3
  234. package/components/ImageGallery/ImageGallery.js +1 -1
  235. package/components/ImageGalleryExtended/ImageGalleryExtended.js +3 -3
  236. package/components/ImageGalleryExtended/components/ImageGalleryExtendedArrow.js +2 -2
  237. package/components/ImageGalleryExtended/components/ImageGalleryExtendedDots.js +4 -4
  238. package/components/ImageGalleryExtended/components/ImageGalleryExtendedMain.js +2 -2
  239. package/components/ImageGalleryExtended/components/ImageGalleryExtendedSlide.js +2 -2
  240. package/components/ImageGalleryExtended/components/ImageGalleryExtendedSwipeTrack.js +2 -2
  241. package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumb.js +2 -2
  242. package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumbnails.js +2 -2
  243. package/components/ImageGalleryExtended/components/index.js +1 -1
  244. package/components/ImageGalleryExtended/index.js +1 -1
  245. package/components/Island/Island.js +2 -2
  246. package/components/Island/components/IslandBody.js +2 -2
  247. package/components/Island/components/IslandFooter.js +2 -2
  248. package/components/Island/components/IslandHeader.js +2 -2
  249. package/components/Island/utils.js +1 -1
  250. package/components/IslandAccordion/IslandAccordion.js +3 -3
  251. package/components/IslandAccordion/components/IslandAccordionContent.js +1 -1
  252. package/components/IslandAccordion/components/IslandAccordionFooter.js +2 -2
  253. package/components/IslandAccordion/components/IslandAccordionItem.js +3 -3
  254. package/components/IslandWidget/IslandWidget.js +5 -5
  255. package/components/IslandWidget/components/IslandWidgetBody.js +2 -2
  256. package/components/IslandWidget/components/IslandWidgetExtraFooter.js +2 -2
  257. package/components/IslandWidget/components/IslandWidgetFooter.js +2 -2
  258. package/components/IslandWidget/components/IslandWidgetFooterContent.js +1 -1
  259. package/components/IslandWidget/components/IslandWidgetFooterControls.js +1 -1
  260. package/components/IslandWidget/components/IslandWidgetHeader.js +2 -2
  261. package/components/IslandWidget/components/IslandWidgetHeaderContent.js +2 -2
  262. package/components/IslandWidget/components/IslandWidgetHeaderControls.js +2 -2
  263. package/components/IslandWidget/components/IslandWidgetHeaderDescription.js +2 -2
  264. package/components/IslandWidget/components/IslandWidgetHeaderTitle.js +2 -2
  265. package/components/IslandWidget/components/IslandWidgetWrapper.js +2 -2
  266. package/components/LightBox/LightBox.js +6 -6
  267. package/components/LightBox/LightBoxContent.js +2 -2
  268. package/components/LightBox/LightBoxControls/LightBoxArrow.js +2 -2
  269. package/components/LightBox/LightBoxControls/LightBoxClose.js +2 -2
  270. package/components/LightBox/LightBoxControls/LightBoxControls.js +2 -2
  271. package/components/LightBox/LightBoxControls/LightBoxNext.js +2 -2
  272. package/components/LightBox/LightBoxControls/LightBoxPrev.js +2 -2
  273. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlay.js +13 -13
  274. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseDesktop.js +2 -2
  275. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseMobile.js +2 -2
  276. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayLoader.js +1 -1
  277. package/components/LightBox/LightBoxSidebars/LightBoxLeftSidebar.js +4 -4
  278. package/components/LightBox/LightBoxSidebars/LightBoxRightSidebar.js +4 -4
  279. package/components/LightBox/LightBoxViewManager/LightBoxViewManager.js +1 -1
  280. package/components/Link/Link.js +6 -6
  281. package/components/List/List.js +4 -4
  282. package/components/List/ListSortable.js +1 -1
  283. package/components/List/components/ListActionItem.js +2 -2
  284. package/components/List/components/ListEmptyState.js +2 -2
  285. package/components/List/components/ListItem.js +1 -1
  286. package/components/List/components/ListItemContent.js +5 -5
  287. package/components/List/components/ListItemControls.js +2 -2
  288. package/components/List/components/ListItemControlsButton.js +2 -2
  289. package/components/List/components/ListItemControlsButtonDropdown.js +2 -2
  290. package/components/List/components/ListItemLoading.js +2 -2
  291. package/components/List/components/ListItemSelectable.js +7 -7
  292. package/components/List/components/ListItemTailLeft.js +2 -2
  293. package/components/List/components/ListItemTailRight.js +2 -2
  294. package/components/List/components/ListSortableItem.js +3 -3
  295. package/components/List/components/ListSortableItemControls.js +2 -2
  296. package/components/List/components/ListSortableItemTarget.js +5 -5
  297. package/components/List/components/ListTableItem.js +4 -4
  298. package/components/List/index.js +1 -1
  299. package/components/ListMaster/ListMaster.js +1 -1
  300. package/components/ListMaster/components/ListMasterBody.js +1 -1
  301. package/components/ListMaster/components/ListMasterChipGroup.js +2 -2
  302. package/components/ListMaster/components/ListMasterFooter.js +2 -2
  303. package/components/ListMaster/components/ListMasterFooterControls.js +2 -2
  304. package/components/ListMaster/components/ListMasterFooterDescription.js +2 -2
  305. package/components/ListMaster/components/ListMasterHeader.js +3 -3
  306. package/components/ListMaster/components/SelectionControls.js +3 -3
  307. package/components/Loader/LoaderMiddle/LoaderMiddle.js +9 -9
  308. package/components/Loader/LoaderSmall/LoaderSmall.js +11 -11
  309. package/components/LoaderScreen/LoaderScreen.js +6 -6
  310. package/components/Marker/Marker.js +2 -2
  311. package/components/Marker/utils.js +1 -1
  312. package/components/MarkerStatus/MarkerStatus.js +8 -8
  313. package/components/ModalWindow/ModalWindow.js +2 -2
  314. package/components/ModalWindow/components/ModalWindowBody.js +2 -2
  315. package/components/ModalWindow/components/ModalWindowClose.js +1 -1
  316. package/components/ModalWindow/components/ModalWindowContent.js +2 -2
  317. package/components/ModalWindow/components/ModalWindowHeader.js +2 -2
  318. package/components/ModalWindow/components/ModalWindowViewManager.js +2 -2
  319. package/components/MonthYearRange/MonthYearRange.js +4 -4
  320. package/components/MultiselectField/components/MultiselectFieldDropdown.js +2 -2
  321. package/components/MultiselectField/components/MultiselectFieldDropdownContent.js +6 -6
  322. package/components/MultiselectField/components/MultiselectFieldDropdownFooter.js +2 -2
  323. package/components/MultiselectField/components/MultiselectFieldDropdownHeader.js +2 -2
  324. package/components/Notification/Notification.js +3 -3
  325. package/components/Notification/NotificationGrouped.js +1 -1
  326. package/components/Notification/components/NotificationBody.js +1 -1
  327. package/components/Notification/components/NotificationBodyList.js +2 -2
  328. package/components/Notification/components/NotificationClose.js +1 -1
  329. package/components/Notification/components/NotificationFooter.js +1 -1
  330. package/components/Notification/components/NotificationGroupedFooter.js +2 -2
  331. package/components/Notification/components/NotificationHeader.js +1 -1
  332. package/components/Notification/components/NotificationIcon.js +1 -1
  333. package/components/Notification/components/NotificationTime.js +1 -1
  334. package/components/OrderedList/OrderedList.js +3 -3
  335. package/components/OrderedList/OrderedListItem.js +3 -3
  336. package/components/Overlay/Overlay.js +2 -2
  337. package/components/Overlay/OverlayMask.js +2 -2
  338. package/components/Overlay/OverlayPanel.js +2 -2
  339. package/components/Page/Page.js +2 -2
  340. package/components/Page/components/BodyPage.js +4 -4
  341. package/components/Page/components/FooterPage.js +2 -2
  342. package/components/Page/components/HeaderPage.js +2 -2
  343. package/components/Pagination/components/PaginationExtended.js +3 -3
  344. package/components/Pagination/components/PaginationNavigationButton.js +2 -2
  345. package/components/Pagination/components/PaginationNavigationExtended.js +2 -2
  346. package/components/Pagination/components/PaginationPageButton.js +3 -3
  347. package/components/Pagination/components/PaginationPageEllipsis.js +2 -2
  348. package/components/Pagination/components/PaginationSelect.js +3 -3
  349. package/components/Pagination/utils/paginationUtils.js +1 -1
  350. package/components/Portal/Portal.js.map +1 -1
  351. package/components/Radio/Radio.js +10 -10
  352. package/components/Radio/RadioXGroup.js +9 -9
  353. package/components/Radio/RadioYGroup.js +2 -2
  354. package/components/Row/Row.js +5 -5
  355. package/components/SMSField/SMSField.js +3 -3
  356. package/components/SMSField/components/RefreshIcon.js +2 -2
  357. package/components/SMSField/components/SMSFieldInput.js +2 -2
  358. package/components/SMSField/components/SMSFieldRefresh.js +2 -2
  359. package/components/SMSField/components/SMSFieldSubmit.js +2 -2
  360. package/components/SMSField/components/SMSFieldTooltip.js +1 -1
  361. package/components/SegmentedControl/SegmentedControl.js +10 -10
  362. package/components/SegmentedControl/SegmentedControlSegment.js +4 -4
  363. package/components/SelectExtendedField/SelectExtendedField.js +2 -2
  364. package/components/SelectExtendedField/components/SelectExtendedFieldDropdown.js +1 -1
  365. package/components/SelectExtendedField/components/SelectExtendedFieldDropdownDefault.js +1 -1
  366. package/components/SelectExtendedField/components/SelectExtendedFieldTarget.js +8 -8
  367. package/components/SelectField/SelectField.js +2 -2
  368. package/components/Skeleton/Skeleton.js +5 -5
  369. package/components/SliderExtended/SliderExtended.js +3 -3
  370. package/components/SliderExtended/components/SliderExtendedDot/SliderExtendedDot.js +6 -6
  371. package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMark.js +2 -2
  372. package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMarks.js +2 -2
  373. package/components/SliderExtended/components/SliderExtendedRail.js +2 -2
  374. package/components/SliderExtended/components/SliderExtendedTooltip/SliderExtendedTooltip.js +5 -5
  375. package/components/SliderExtended/components/SliderExtendedTrack/SliderExtendedTrack.js +7 -7
  376. package/components/SmallInput/SmallInput.js +2 -2
  377. package/components/Spoiler/Spoiler.js +11 -11
  378. package/components/StatusTracker/StatusTracker.js +3 -3
  379. package/components/StatusTracker/components/StatusTrackerAlert.js +2 -2
  380. package/components/StatusTracker/components/StatusTrackerBody.js +2 -2
  381. package/components/StatusTracker/components/StatusTrackerButton.js +2 -2
  382. package/components/StatusTracker/components/StatusTrackerDescription.js +2 -2
  383. package/components/StatusTracker/components/StatusTrackerFooter.js +2 -2
  384. package/components/StatusTracker/components/StatusTrackerHeader.js +2 -2
  385. package/components/StatusTracker/components/StatusTrackerMedia.js +2 -2
  386. package/components/StatusTracker/components/StatusTrackerStatus.js +2 -2
  387. package/components/StatusTracker/components/StatusTrackerStatusGroup.js +2 -2
  388. package/components/StatusTracker/components/StatusTrackerSum.js +2 -2
  389. package/components/StatusTracker/components/StatusTrackerTitle.js +2 -2
  390. package/components/Step/Step.js +11 -11
  391. package/components/Stepper/Stepper.js +9 -9
  392. package/components/Stepper/StepperExtended.js +2 -2
  393. package/components/Stepper/StepperStep.js +3 -3
  394. package/components/Stepper/StepperStepArrowBorder.js +1 -1
  395. package/components/Suggest/SuggestMobileDropdownContent.js +3 -3
  396. package/components/Suggest/useSuggest.js +1 -1
  397. package/components/SuggestField/SuggestField.js +1 -1
  398. package/components/SuggestField/desktop/SuggestFieldDesktop.js +2 -2
  399. package/components/SuggestField/desktop/SuggestFieldDesktopDropdown.js +1 -1
  400. package/components/SuggestField/index.js +1 -1
  401. package/components/SuggestField/mobile/SuggestFieldMobile.js +1 -1
  402. package/components/SuggestField/mobile/SuggestFieldMobileDropdown.js +2 -2
  403. package/components/SuggestField/mobile/SuggestFieldMobileDropdownHint.js +1 -1
  404. package/components/SuggestField/mobile/index.js +1 -1
  405. package/components/SwipeableArea/SwipeableArea.js +9 -9
  406. package/components/Table/ChipPanel.js +2 -2
  407. package/components/Table/ChipPanelLinks.js +2 -2
  408. package/components/Table/FilterPanel.js +3 -3
  409. package/components/Table/MasterTable.js +3 -3
  410. package/components/Table/NoColumns.js +3 -3
  411. package/components/Table/PaginationPanel.js +3 -3
  412. package/components/Table/TableBasic/TableBasic.js +2 -2
  413. package/components/Table/TableBasic/components/TableBasicBody.js +2 -2
  414. package/components/Table/TableBasic/components/TableBasicHeader.js +2 -2
  415. package/components/Table/TableBasic/components/TableBasicRow.js +2 -2
  416. package/components/Table/TableBasicSettings/TableBasicSettings.js +3 -3
  417. package/components/Table/TableBasicSettings/components/ColumnSettingsSortableListItemTarget.js +3 -3
  418. package/components/Table/TableBasicSettings/components/ColumnSettingsStaticListItem.js +2 -2
  419. package/components/Table/TableBasicSettings/components/TableBasicSettingsBody.js +2 -2
  420. package/components/Table/TableBasicSettings/components/TableBasicSettingsFooter.js +2 -2
  421. package/components/Table/TableBasicSettings/components/TableBasicSettingsHeader.js +2 -2
  422. package/components/Table/TableFooter/TableFooter.js +2 -2
  423. package/components/Table/TableFooter/components/TableFooterSummary.js +1 -1
  424. package/components/Table/TableFooter/components/TableFooterSummaryAmount.js +1 -1
  425. package/components/Table/TableFooter/components/TableFooterSummarySelectAllButton.js +1 -1
  426. package/components/Table/TableFooter/components/TableFooterSummarySelectedCount.js +1 -1
  427. package/components/Table/utils.js +1 -1
  428. package/components/Tabs/Tabs.js +6 -6
  429. package/components/TabsExtended/TabsExtended.js +3 -3
  430. package/components/TabsExtended/components/TabsExtendedContent.js +2 -2
  431. package/components/TabsExtended/components/TabsExtendedDropdownWrapper.js +2 -2
  432. package/components/TabsExtended/components/TabsExtendedTab.js +2 -2
  433. package/components/TabsExtended/components/TabsExtendedTabButton.js +2 -2
  434. package/components/TabsExtended/components/TabsExtendedTabsWrapper.js +2 -2
  435. package/components/TabsExtended/utils.js +1 -1
  436. package/components/TabsLine/TabsLine.js +2 -2
  437. package/components/TabsLine/components/TabsLineDesktop.js +2 -2
  438. package/components/TabsLine/components/TabsLineDropdown.js +3 -3
  439. package/components/TabsLine/components/TabsLineItem.js +2 -2
  440. package/components/TabsLine/components/TabsLineMobile.js +2 -2
  441. package/components/Tag/Tag.js +6 -6
  442. package/components/TagColor/TagColor.js +11 -11
  443. package/components/TagGroup/TagGroup.js +5 -5
  444. package/components/ThemeProvider/ThemeProvider.js +1 -1
  445. package/components/ThemeProvider/components/ThemeProviderView.js +1 -1
  446. package/components/Tooltip/components/common/TooltipBody.js +2 -2
  447. package/components/Tooltip/components/common/TooltipLink.js +6 -6
  448. package/components/Tooltip/components/common/TooltipXButton.js +1 -1
  449. package/components/Tooltip/components/desktop/components/TooltipDesktopBase.js +2 -2
  450. package/components/Tooltip/components/desktop/components/TooltipDesktopTip.js +2 -2
  451. package/components/Tooltip/components/mobile/TooltipMobile.js +5 -5
  452. package/components/TopOverlay/TopOverlay.js +7 -7
  453. package/components/TreeView/TreeView.js +2 -2
  454. package/components/TreeView/components/TreeViewGroup.js +1 -1
  455. package/components/TreeView/components/TreeViewNode.js +2 -2
  456. package/components/Typography/Caption.js +8 -8
  457. package/components/Typography/CodeText.js +3 -3
  458. package/components/Typography/Text.js +10 -10
  459. package/components/Typography/Title.js +11 -11
  460. package/components/Typography/Title.js.map +1 -1
  461. package/components/Typography/constants.js +1 -1
  462. package/components/UnorderedList/UnorderedList.js +3 -3
  463. package/components/UnorderedList/UnorderedListItem.js +3 -3
  464. package/components/UploadZone/UploadZone.js +3 -3
  465. package/components/UploadZone/components/UploadZoneInput.js +2 -2
  466. package/components/UploadZone/index.js +1 -1
  467. package/components/WindowResizeListener/WindowResizeListener.js +1 -1
  468. package/components/index.js +6 -6
  469. package/index.d.ts +52 -19
  470. package/index.js +6 -6
  471. package/package.json +1 -1
  472. package/styles/triplex-next.css +2933 -2932
  473. package/utils/amountUtils.js +1 -1
  474. package/chunks/Card.module-CZ1_wRdI.js +0 -30
  475. package/chunks/Card.module-CZ1_wRdI.js.map +0 -1
  476. package/chunks/Carousel.module-COe08s01.js +0 -30
  477. package/chunks/Carousel.module-COe08s01.js.map +0 -1
  478. package/chunks/CheckboxTreeExtended.module-CsB5Xz5K.js +0 -24
  479. package/chunks/CheckboxTreeExtended.module-CsB5Xz5K.js.map +0 -1
  480. package/chunks/Confirm.module-CEJR1txO.js +0 -24
  481. package/chunks/Confirm.module-CEJR1txO.js.map +0 -1
  482. package/chunks/DropdownListItem-COR0eOzM.js.map +0 -1
  483. package/chunks/DropdownMobile.module-DUiUSr13.js +0 -40
  484. package/chunks/DropdownMobile.module-DUiUSr13.js.map +0 -1
  485. package/chunks/Footer.module-DUTwBl0x.js +0 -12
  486. package/chunks/Footer.module-DUTwBl0x.js.map +0 -1
  487. package/chunks/HeaderLayoutSidebar.module-o5cCUCGl.js.map +0 -1
  488. package/chunks/HeaderTabs.module-Ch5Mbe7q.js +0 -12
  489. package/chunks/HeaderTabs.module-Ch5Mbe7q.js.map +0 -1
  490. package/chunks/HeaderTitle.module-CUVjwVW7.js.map +0 -1
  491. package/chunks/ImageGalleryExtendedMain.module-BMoLBevi.js +0 -28
  492. package/chunks/ImageGalleryExtendedMain.module-BMoLBevi.js.map +0 -1
  493. package/chunks/IslandAccordion.module-YxGUkwAy.js +0 -44
  494. package/chunks/IslandAccordion.module-YxGUkwAy.js.map +0 -1
  495. package/chunks/IslandWidgetFooter.module-Bk3x1llO.js +0 -12
  496. package/chunks/IslandWidgetFooter.module-Bk3x1llO.js.map +0 -1
  497. package/chunks/IslandWidgetHeader.module-BcrHca9Y.js +0 -20
  498. package/chunks/IslandWidgetHeader.module-BcrHca9Y.js.map +0 -1
  499. package/chunks/LightBoxControls.module-DisqspyG.js +0 -26
  500. package/chunks/LightBoxControls.module-DisqspyG.js.map +0 -1
  501. package/chunks/LightBoxSideOverlayClose.module-BVuB53vM.js.map +0 -1
  502. package/chunks/ListItemTail.module-B24d99yc.js +0 -18
  503. package/chunks/ListItemTail.module-B24d99yc.js.map +0 -1
  504. package/chunks/ListMasterFooter.module-XwfScyft.js +0 -14
  505. package/chunks/ListMasterFooter.module-XwfScyft.js.map +0 -1
  506. package/chunks/ModalWindow.module-CAccCwuD.js +0 -28
  507. package/chunks/ModalWindow.module-CAccCwuD.js.map +0 -1
  508. package/chunks/Notification.module-yXlyaoAB.js +0 -34
  509. package/chunks/Notification.module-yXlyaoAB.js.map +0 -1
  510. package/chunks/Overlay.module-gnmqM0Mg.js +0 -30
  511. package/chunks/Overlay.module-gnmqM0Mg.js.map +0 -1
  512. package/chunks/Page.module-CyuFcFEq.js +0 -15
  513. package/chunks/Page.module-CyuFcFEq.js.map +0 -1
  514. package/chunks/SMSField.module-By9uV96A.js +0 -26
  515. package/chunks/SMSField.module-By9uV96A.js.map +0 -1
  516. package/chunks/SliderExtendedMarks.module-DwGOsapl.js +0 -24
  517. package/chunks/SliderExtendedMarks.module-DwGOsapl.js.map +0 -1
  518. package/chunks/StatusTracker.module-DSfmXNxw.js +0 -42
  519. package/chunks/StatusTracker.module-DSfmXNxw.js.map +0 -1
  520. package/chunks/TableFooter.module-DM5tgc_b.js +0 -22
  521. package/chunks/TableFooter.module-DM5tgc_b.js.map +0 -1
  522. package/chunks/TabsExtended.module-91rJFYMk.js +0 -26
  523. package/chunks/TabsExtended.module-91rJFYMk.js.map +0 -1
  524. package/chunks/TabsLine.module-DAe_P2wh.js +0 -36
  525. package/chunks/TabsLine.module-DAe_P2wh.js.map +0 -1
  526. package/chunks/TooltipDesktop.module-BW_tN5pN.js +0 -32
  527. package/chunks/TooltipDesktop.module-BW_tN5pN.js.map +0 -1
  528. package/chunks/TreeView.module-BheprFto.js +0 -12
  529. package/chunks/TreeView.module-BheprFto.js.map +0 -1
  530. package/chunks/vendor-DKrjZZwJ.js +0 -36109
  531. package/chunks/vendor-DKrjZZwJ.js.map +0 -1
  532. package/components/Carousel/__tests__/utils.js +0 -92
  533. package/components/Carousel/__tests__/utils.js.map +0 -1
@@ -1,16 +1,16 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import React, { useState, useRef, useCallback, useEffect } from "react";
3
- import { c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
3
+ import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
4
4
  import { EDropdownDirection, EDropdownAlignment, EDropdownWidth } from "./enums.js";
5
5
  import { EComponentSize } from "../../../enums/EComponentSize.js";
6
6
  import { createSizeToClassNameMap } from "../../../utils/classNameMaps.js";
7
7
  import { useToken } from "../../ThemeProvider/useToken.js";
8
8
  import { isKey } from "../../../utils/keyboard.js";
9
- const dropdownDesktop = "dropdownDesktop__24dc6a5d";
10
- const sm = "sm__dcb0ddff";
11
- const md = "md__d60308a5";
12
- const lg = "lg__878186ec";
13
- const dropdownDesktopOverflowHidden = "dropdownDesktopOverflowHidden__571e1f26";
9
+ const dropdownDesktop = "dropdownDesktop__9d4d0210";
10
+ const sm = "sm__638f1290";
11
+ const md = "md__d107cb92";
12
+ const lg = "lg__ec7fe50f";
13
+ const dropdownDesktopOverflowHidden = "dropdownDesktopOverflowHidden__37408048";
14
14
  const styles = {
15
15
  dropdownDesktop,
16
16
  sm,
@@ -20,6 +20,7 @@ const styles = {
20
20
  };
21
21
  const sizeToClassNameMap = createSizeToClassNameMap(styles);
22
22
  const overflowHiddenClassName = styles.dropdownDesktopOverflowHidden;
23
+ const TARGET_OFFSET = 4;
23
24
  const DropdownDesktop = React.forwardRef((props, ref) => {
24
25
  const {
25
26
  children,
@@ -38,15 +39,12 @@ const DropdownDesktop = React.forwardRef((props, ref) => {
38
39
  const dropdownRef = useRef(null);
39
40
  const { scopeClassName } = useToken();
40
41
  const classNames = clsx(styles.dropdownDesktop, sizeToClassNameMap[size], scopeClassName, className);
41
- const wheelHandler = useCallback(
42
- (event) => {
43
- var _a;
44
- if (!((_a = dropdownRef.current) == null ? void 0 : _a.contains(event.target))) {
45
- event.preventDefault();
46
- }
47
- },
48
- [dropdownRef]
49
- );
42
+ const wheelHandler = useCallback((event) => {
43
+ var _a;
44
+ if (!((_a = dropdownRef.current) == null ? void 0 : _a.contains(event.target))) {
45
+ event.preventDefault();
46
+ }
47
+ }, []);
50
48
  const keyDownHandler = useCallback((event) => {
51
49
  if (event.target === document.body) {
52
50
  const key = event.code || event.keyCode;
@@ -56,7 +54,6 @@ const DropdownDesktop = React.forwardRef((props, ref) => {
56
54
  }
57
55
  }, []);
58
56
  const toggleScrollEventListener = useCallback(
59
- /** Запрет скролла всей страницы. */
60
57
  (add) => {
61
58
  if (add) {
62
59
  document.addEventListener("wheel", wheelHandler, { passive: false });
@@ -85,19 +82,18 @@ const DropdownDesktop = React.forwardRef((props, ref) => {
85
82
  );
86
83
  const calculatePositionVertical = useCallback(
87
84
  (css, dropdownRect, targetRect) => {
88
- const offset = 4;
89
85
  if (direction === EDropdownDirection.AUTO) {
90
- if (targetRect.bottom + offset + dropdownRect.height < document.documentElement.clientHeight) {
91
- css.top = targetRect.bottom + offset;
92
- } else if (targetRect.top - offset - dropdownRect.height > 0) {
93
- css.bottom = document.documentElement.clientHeight - targetRect.top + offset;
86
+ if (targetRect.bottom + TARGET_OFFSET + dropdownRect.height < document.documentElement.clientHeight) {
87
+ css.top = targetRect.bottom + TARGET_OFFSET;
88
+ } else if (targetRect.top - TARGET_OFFSET - dropdownRect.height > 0) {
89
+ css.bottom = document.documentElement.clientHeight - targetRect.top + TARGET_OFFSET;
94
90
  } else {
95
- css.top = targetRect.bottom + offset;
91
+ css.top = targetRect.bottom + TARGET_OFFSET;
96
92
  }
97
93
  } else if (direction === EDropdownDirection.BOTTOM) {
98
- css.top = targetRect.bottom + offset;
94
+ css.top = targetRect.bottom + TARGET_OFFSET;
99
95
  } else if (direction === EDropdownDirection.TOP) {
100
- css.bottom = document.documentElement.clientHeight - targetRect.top + offset;
96
+ css.bottom = document.documentElement.clientHeight - targetRect.top + TARGET_OFFSET;
101
97
  }
102
98
  },
103
99
  [direction]
@@ -168,7 +164,7 @@ const DropdownDesktop = React.forwardRef((props, ref) => {
168
164
  className: classNames,
169
165
  style: { ...styleState, ...styleProp },
170
166
  ...rest,
171
- "data-tx": "0.39.0",
167
+ "data-tx": "0.40.0",
172
168
  ref: setRef,
173
169
  children
174
170
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownDesktop.js","sources":["../../../../src/components/Dropdown/desktop/DropdownDesktop.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { EDropdownAlignment, EDropdownDirection, EDropdownWidth } from \"./enums\";\nimport { EComponentSize } from \"../../../enums/EComponentSize\";\nimport { createSizeToClassNameMap } from \"../../../utils/classNameMaps\";\nimport { useToken } from \"../../ThemeProvider/useToken\";\nimport { isKey } from \"../../../utils/keyboard\";\nimport styles from \"../styles/DropdownDesktop.module.less\";\n\n/** Свойства компонента DropdownDesktop. */\nexport interface IDropdownDesktopProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Открыт. */\n opened: boolean;\n /** Устанавливает флаг opened. */\n setOpened: (opened: boolean) => void;\n /** Ссылка на управляющий элемент. */\n targetRef: React.RefObject<HTMLElement>;\n /** Размер дропдауна. */\n size?: EComponentSize;\n /** Направление выпадающего меню. */\n direction?: EDropdownDirection;\n /** Выравнивание списка относительно управляющего элемента. */\n alignment?: EDropdownAlignment;\n /** Вариант расчёта ширины выпадающего списка. */\n width?: EDropdownWidth;\n}\n\nconst sizeToClassNameMap = createSizeToClassNameMap(styles);\n\nconst overflowHiddenClassName = styles.dropdownDesktopOverflowHidden;\n\n/** Выпадающее меню. */\nexport const DropdownDesktop = React.forwardRef<HTMLDivElement, IDropdownDesktopProps>((props, ref) => {\n const {\n children,\n className,\n style: styleProp,\n size = EComponentSize.MD,\n direction = EDropdownDirection.AUTO,\n alignment = EDropdownAlignment.LEFT,\n width = EDropdownWidth.CONTENT,\n opened,\n targetRef,\n setOpened,\n ...rest\n } = props;\n const [styleState, setStyleState] = useState<React.CSSProperties>({ opacity: 0 });\n const dropdownRef = useRef<HTMLDivElement | null>(null);\n\n const { scopeClassName } = useToken();\n const classNames = clsx(styles.dropdownDesktop, sizeToClassNameMap[size], scopeClassName, className);\n\n /** Блокировка скролла вне дропдауна. */\n const wheelHandler = useCallback(\n (event: WheelEvent) => {\n if (!dropdownRef.current?.contains(event.target as Node)) {\n event.preventDefault();\n }\n },\n [dropdownRef],\n );\n\n const keyDownHandler = useCallback((event: KeyboardEvent) => {\n if (event.target === document.body) {\n const key = event.code || event.keyCode;\n\n if (\n isKey(key, \"SPACE\") ||\n isKey(key, \"PAGE_UP\") ||\n isKey(key, \"PAGE_DOWN\") ||\n isKey(key, \"END\") ||\n isKey(key, \"HOME\") ||\n isKey(key, \"ARROW_LEFT\") ||\n isKey(key, \"ARROW_UP\") ||\n isKey(key, \"ARROW_RIGHT\") ||\n isKey(key, \"ARROW_DOWN\")\n ) {\n event.preventDefault();\n }\n }\n }, []);\n\n /** Управление скроллом внешней области. */\n const toggleScrollEventListener = useCallback(\n /** Запрет скролла всей страницы. */\n (add: boolean) => {\n if (add) {\n document.addEventListener(\"wheel\", wheelHandler, { passive: false });\n document.addEventListener(\"keydown\", keyDownHandler);\n } else {\n document.removeEventListener(\"wheel\", wheelHandler);\n document.removeEventListener(\"keydown\", keyDownHandler);\n }\n },\n [wheelHandler, keyDownHandler],\n );\n\n /** Расчёт положения по горизонтали. */\n const calculatePositionHorizontal = useCallback(\n (css: React.CSSProperties, targetRect: DOMRect, expectedWidth: number) => {\n const clientWidth = document.documentElement.clientWidth;\n\n const leftPos = targetRect.left;\n const rightPos = targetRect.right - expectedWidth;\n\n if (alignment === EDropdownAlignment.LEFT) {\n const fitsRightSide = leftPos + expectedWidth <= clientWidth;\n css.left = fitsRightSide ? leftPos : Math.max(0, rightPos);\n } else {\n const fitsLeftSide = rightPos >= 0;\n css.left = fitsLeftSide ? rightPos : Math.max(0, Math.min(leftPos, clientWidth - expectedWidth));\n }\n },\n [alignment],\n );\n\n /** Расчёт положения по вертикали. */\n const calculatePositionVertical = useCallback(\n (css: React.CSSProperties, dropdownRect: DOMRect, targetRect: DOMRect) => {\n // Отступ между target и dropdown.\n const offset = 4;\n\n if (direction === EDropdownDirection.AUTO) {\n if (targetRect.bottom + offset + dropdownRect.height < document.documentElement.clientHeight) {\n // Если влезает снизу.\n css.top = targetRect.bottom + offset;\n } else if (targetRect.top - offset - dropdownRect.height > 0) {\n // Если не влезает снизу, но влезает сверху.\n css.bottom = document.documentElement.clientHeight - targetRect.top + offset;\n } else {\n // Если не влезает снизу и сверху.\n css.top = targetRect.bottom + offset;\n }\n } else if (direction === EDropdownDirection.BOTTOM) {\n css.top = targetRect.bottom + offset;\n } else if (direction === EDropdownDirection.TOP) {\n css.bottom = document.documentElement.clientHeight - targetRect.top + offset;\n }\n },\n [direction],\n );\n\n /** Установка положения меню. */\n const setPosition = useCallback(() => {\n if (dropdownRef.current === null || targetRef.current === null) return;\n\n const dropdownRect = dropdownRef.current.getBoundingClientRect();\n const targetRect = targetRef.current.getBoundingClientRect();\n const css: React.CSSProperties = {};\n let expectedWidth = dropdownRect.width;\n\n if (width === EDropdownWidth.TARGET) {\n expectedWidth = targetRect.width;\n css.width = targetRect.width;\n } else if (width === EDropdownWidth.MIN_TARGET) {\n expectedWidth = Math.max(dropdownRect.width, targetRect.width);\n css.minWidth = targetRect.width;\n }\n\n calculatePositionVertical(css, dropdownRect, targetRect);\n calculatePositionHorizontal(css, targetRect, expectedWidth);\n\n setStyleState(css);\n }, [targetRef, width, calculatePositionVertical, calculatePositionHorizontal]);\n\n useEffect(() => {\n if (opened) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setPosition();\n } else {\n setStyleState({ opacity: 0 });\n }\n }, [opened, setPosition]);\n\n useEffect(() => {\n if (!opened || dropdownRef.current === null || targetRef.current === null) return;\n\n const observer = new ResizeObserver(setPosition);\n\n observer.observe(dropdownRef.current);\n observer.observe(targetRef.current);\n return () => observer.disconnect();\n }, [opened, targetRef, setPosition]);\n\n /** Планирует перерасчет позиции дропдауна в следующем кадре. */\n const updatePosition = useCallback(() => {\n setTimeout(setPosition);\n }, [setPosition]);\n\n useEffect(() => {\n if (opened) {\n document.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n toggleScrollEventListener(true);\n document.body.classList.add(overflowHiddenClassName);\n updatePosition();\n\n return () => {\n document.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n toggleScrollEventListener(false);\n document.body.classList.remove(overflowHiddenClassName);\n };\n }\n }, [opened, updatePosition, toggleScrollEventListener]);\n\n /** Функция для хранения ссылки. */\n const setRef = (instance: HTMLDivElement | null) => {\n dropdownRef.current = instance;\n if (typeof ref === \"function\") {\n ref(instance);\n } else if (ref) {\n ref.current = instance;\n }\n };\n\n if (!opened) {\n return null;\n }\n\n return (\n <div\n className={classNames}\n style={{ ...styleState, ...styleProp }}\n {...rest}\n data-tx={process.env.npm_package_version}\n ref={setRef}\n >\n {children}\n </div>\n );\n});\n\nDropdownDesktop.displayName = \"DropdownDesktop\";\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,qBAAqB,yBAAyB,MAAM;AAE1D,MAAM,0BAA0B,OAAO;AAGhC,MAAM,kBAAkB,MAAM,WAAkD,CAAC,OAAO,QAAQ;AACnG,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,OAAO,eAAe;AAAA,IACtB,YAAY,mBAAmB;AAAA,IAC/B,YAAY,mBAAmB;AAAA,IAC/B,QAAQ,eAAe;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,IACH;AACJ,QAAM,CAAC,YAAY,aAAa,IAAI,SAA8B,EAAE,SAAS,GAAG;AAChF,QAAM,cAAc,OAA8B,IAAI;AAEtD,QAAM,EAAE,eAAA,IAAmB,SAAA;AAC3B,QAAM,aAAa,KAAK,OAAO,iBAAiB,mBAAmB,IAAI,GAAG,gBAAgB,SAAS;AAGnG,QAAM,eAAe;AAAA,IACjB,CAAC,UAAsB;;AACnB,UAAI,GAAC,iBAAY,YAAZ,mBAAqB,SAAS,MAAM,UAAiB;AACtD,cAAM,eAAA;AAAA,MACV;AAAA,IACJ;AAAA,IACA,CAAC,WAAW;AAAA,EAAA;AAGhB,QAAM,iBAAiB,YAAY,CAAC,UAAyB;AACzD,QAAI,MAAM,WAAW,SAAS,MAAM;AAChC,YAAM,MAAM,MAAM,QAAQ,MAAM;AAEhC,UACI,MAAM,KAAK,OAAO,KAClB,MAAM,KAAK,SAAS,KACpB,MAAM,KAAK,WAAW,KACtB,MAAM,KAAK,KAAK,KAChB,MAAM,KAAK,MAAM,KACjB,MAAM,KAAK,YAAY,KACvB,MAAM,KAAK,UAAU,KACrB,MAAM,KAAK,aAAa,KACxB,MAAM,KAAK,YAAY,GACzB;AACE,cAAM,eAAA;AAAA,MACV;AAAA,IACJ;AAAA,EACJ,GAAG,CAAA,CAAE;AAGL,QAAM,4BAA4B;AAAA;AAAA,IAE9B,CAAC,QAAiB;AACd,UAAI,KAAK;AACL,iBAAS,iBAAiB,SAAS,cAAc,EAAE,SAAS,OAAO;AACnE,iBAAS,iBAAiB,WAAW,cAAc;AAAA,MACvD,OAAO;AACH,iBAAS,oBAAoB,SAAS,YAAY;AAClD,iBAAS,oBAAoB,WAAW,cAAc;AAAA,MAC1D;AAAA,IACJ;AAAA,IACA,CAAC,cAAc,cAAc;AAAA,EAAA;AAIjC,QAAM,8BAA8B;AAAA,IAChC,CAAC,KAA0B,YAAqB,kBAA0B;AACtE,YAAM,cAAc,SAAS,gBAAgB;AAE7C,YAAM,UAAU,WAAW;AAC3B,YAAM,WAAW,WAAW,QAAQ;AAEpC,UAAI,cAAc,mBAAmB,MAAM;AACvC,cAAM,gBAAgB,UAAU,iBAAiB;AACjD,YAAI,OAAO,gBAAgB,UAAU,KAAK,IAAI,GAAG,QAAQ;AAAA,MAC7D,OAAO;AACH,cAAM,eAAe,YAAY;AACjC,YAAI,OAAO,eAAe,WAAW,KAAK,IAAI,GAAG,KAAK,IAAI,SAAS,cAAc,aAAa,CAAC;AAAA,MACnG;AAAA,IACJ;AAAA,IACA,CAAC,SAAS;AAAA,EAAA;AAId,QAAM,4BAA4B;AAAA,IAC9B,CAAC,KAA0B,cAAuB,eAAwB;AAEtE,YAAM,SAAS;AAEf,UAAI,cAAc,mBAAmB,MAAM;AACvC,YAAI,WAAW,SAAS,SAAS,aAAa,SAAS,SAAS,gBAAgB,cAAc;AAE1F,cAAI,MAAM,WAAW,SAAS;AAAA,QAClC,WAAW,WAAW,MAAM,SAAS,aAAa,SAAS,GAAG;AAE1D,cAAI,SAAS,SAAS,gBAAgB,eAAe,WAAW,MAAM;AAAA,QAC1E,OAAO;AAEH,cAAI,MAAM,WAAW,SAAS;AAAA,QAClC;AAAA,MACJ,WAAW,cAAc,mBAAmB,QAAQ;AAChD,YAAI,MAAM,WAAW,SAAS;AAAA,MAClC,WAAW,cAAc,mBAAmB,KAAK;AAC7C,YAAI,SAAS,SAAS,gBAAgB,eAAe,WAAW,MAAM;AAAA,MAC1E;AAAA,IACJ;AAAA,IACA,CAAC,SAAS;AAAA,EAAA;AAId,QAAM,cAAc,YAAY,MAAM;AAClC,QAAI,YAAY,YAAY,QAAQ,UAAU,YAAY,KAAM;AAEhE,UAAM,eAAe,YAAY,QAAQ,sBAAA;AACzC,UAAM,aAAa,UAAU,QAAQ,sBAAA;AACrC,UAAM,MAA2B,CAAA;AACjC,QAAI,gBAAgB,aAAa;AAEjC,QAAI,UAAU,eAAe,QAAQ;AACjC,sBAAgB,WAAW;AAC3B,UAAI,QAAQ,WAAW;AAAA,IAC3B,WAAW,UAAU,eAAe,YAAY;AAC5C,sBAAgB,KAAK,IAAI,aAAa,OAAO,WAAW,KAAK;AAC7D,UAAI,WAAW,WAAW;AAAA,IAC9B;AAEA,8BAA0B,KAAK,cAAc,UAAU;AACvD,gCAA4B,KAAK,YAAY,aAAa;AAE1D,kBAAc,GAAG;AAAA,EACrB,GAAG,CAAC,WAAW,OAAO,2BAA2B,2BAA2B,CAAC;AAE7E,YAAU,MAAM;AACZ,QAAI,QAAQ;AAER,kBAAA;AAAA,IACJ,OAAO;AACH,oBAAc,EAAE,SAAS,GAAG;AAAA,IAChC;AAAA,EACJ,GAAG,CAAC,QAAQ,WAAW,CAAC;AAExB,YAAU,MAAM;AACZ,QAAI,CAAC,UAAU,YAAY,YAAY,QAAQ,UAAU,YAAY,KAAM;AAE3E,UAAM,WAAW,IAAI,eAAe,WAAW;AAE/C,aAAS,QAAQ,YAAY,OAAO;AACpC,aAAS,QAAQ,UAAU,OAAO;AAClC,WAAO,MAAM,SAAS,WAAA;AAAA,EAC1B,GAAG,CAAC,QAAQ,WAAW,WAAW,CAAC;AAGnC,QAAM,iBAAiB,YAAY,MAAM;AACrC,eAAW,WAAW;AAAA,EAC1B,GAAG,CAAC,WAAW,CAAC;AAEhB,YAAU,MAAM;AACZ,QAAI,QAAQ;AACR,eAAS,iBAAiB,UAAU,gBAAgB,IAAI;AACxD,aAAO,iBAAiB,UAAU,cAAc;AAChD,gCAA0B,IAAI;AAC9B,eAAS,KAAK,UAAU,IAAI,uBAAuB;AACnD,qBAAA;AAEA,aAAO,MAAM;AACT,iBAAS,oBAAoB,UAAU,gBAAgB,IAAI;AAC3D,eAAO,oBAAoB,UAAU,cAAc;AACnD,kCAA0B,KAAK;AAC/B,iBAAS,KAAK,UAAU,OAAO,uBAAuB;AAAA,MAC1D;AAAA,IACJ;AAAA,EACJ,GAAG,CAAC,QAAQ,gBAAgB,yBAAyB,CAAC;AAGtD,QAAM,SAAS,CAAC,aAAoC;AAChD,gBAAY,UAAU;AACtB,QAAI,OAAO,QAAQ,YAAY;AAC3B,UAAI,QAAQ;AAAA,IAChB,WAAW,KAAK;AACZ,UAAI,UAAU;AAAA,IAClB;AAAA,EACJ;AAEA,MAAI,CAAC,QAAQ;AACT,WAAO;AAAA,EACX;AAEA,SACI;AAAA,IAAC;AAAA,IAAA;AAAA,MACG,WAAW;AAAA,MACX,OAAO,EAAE,GAAG,YAAY,GAAG,UAAA;AAAA,MAC1B,GAAG;AAAA,MACJ,WAAS;AAAA,MACT,KAAK;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA;AAGb,CAAC;AAED,gBAAgB,cAAc;"}
1
+ {"version":3,"file":"DropdownDesktop.js","sources":["../../../../src/components/Dropdown/desktop/DropdownDesktop.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { EDropdownAlignment, EDropdownDirection, EDropdownWidth } from \"./enums\";\nimport { EComponentSize } from \"../../../enums/EComponentSize\";\nimport { createSizeToClassNameMap } from \"../../../utils/classNameMaps\";\nimport { useToken } from \"../../ThemeProvider/useToken\";\nimport { isKey } from \"../../../utils/keyboard\";\nimport styles from \"../styles/DropdownDesktop.module.less\";\n\n/** Свойства компонента DropdownDesktop. */\nexport interface IDropdownDesktopProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Открыт. */\n opened: boolean;\n /** Устанавливает флаг opened. */\n setOpened: (opened: boolean) => void;\n /** Ссылка на управляющий элемент. */\n targetRef: React.RefObject<HTMLElement>;\n /** Размер дропдауна. */\n size?: EComponentSize;\n /** Направление выпадающего меню. */\n direction?: EDropdownDirection;\n /** Выравнивание списка относительно управляющего элемента. */\n alignment?: EDropdownAlignment;\n /** Вариант расчёта ширины выпадающего списка. */\n width?: EDropdownWidth;\n}\n\nconst sizeToClassNameMap = createSizeToClassNameMap(styles);\n\nconst overflowHiddenClassName = styles.dropdownDesktopOverflowHidden;\n\n/** Отступ между управляющим элементом и выпадающим меню, px. */\nconst TARGET_OFFSET = 4;\n\n/**\n * Десктопная версия выпадающего меню.\n * Позиционируется фиксированно относительно targetRef, пересчитывает положение при скролле,\n * ресайзе окна и изменении размеров меню или управляющего элемента. Пока меню открыто,\n * скролл страницы вне меню заблокирован. В закрытом состоянии ничего не рендерит.\n */\nexport const DropdownDesktop = React.forwardRef<HTMLDivElement, IDropdownDesktopProps>((props, ref) => {\n const {\n children,\n className,\n style: styleProp,\n size = EComponentSize.MD,\n direction = EDropdownDirection.AUTO,\n alignment = EDropdownAlignment.LEFT,\n width = EDropdownWidth.CONTENT,\n opened,\n targetRef,\n setOpened,\n ...rest\n } = props;\n const [styleState, setStyleState] = useState<React.CSSProperties>({ opacity: 0 });\n const dropdownRef = useRef<HTMLDivElement | null>(null);\n\n const { scopeClassName } = useToken();\n const classNames = clsx(styles.dropdownDesktop, sizeToClassNameMap[size], scopeClassName, className);\n\n /** Блокировка скролла вне дропдауна. */\n const wheelHandler = useCallback((event: WheelEvent) => {\n if (!dropdownRef.current?.contains(event.target as Node)) {\n event.preventDefault();\n }\n }, []);\n\n const keyDownHandler = useCallback((event: KeyboardEvent) => {\n if (event.target === document.body) {\n const key = event.code || event.keyCode;\n\n if (\n isKey(key, \"SPACE\") ||\n isKey(key, \"PAGE_UP\") ||\n isKey(key, \"PAGE_DOWN\") ||\n isKey(key, \"END\") ||\n isKey(key, \"HOME\") ||\n isKey(key, \"ARROW_LEFT\") ||\n isKey(key, \"ARROW_UP\") ||\n isKey(key, \"ARROW_RIGHT\") ||\n isKey(key, \"ARROW_DOWN\")\n ) {\n event.preventDefault();\n }\n }\n }, []);\n\n /** Управление подпиской на события, блокирующие скролл страницы вне дропдауна. */\n const toggleScrollEventListener = useCallback(\n (add: boolean) => {\n if (add) {\n document.addEventListener(\"wheel\", wheelHandler, { passive: false });\n document.addEventListener(\"keydown\", keyDownHandler);\n } else {\n document.removeEventListener(\"wheel\", wheelHandler);\n document.removeEventListener(\"keydown\", keyDownHandler);\n }\n },\n [wheelHandler, keyDownHandler],\n );\n\n /** Расчёт положения по горизонтали. */\n const calculatePositionHorizontal = useCallback(\n (css: React.CSSProperties, targetRect: DOMRect, expectedWidth: number) => {\n const clientWidth = document.documentElement.clientWidth;\n\n const leftPos = targetRect.left;\n const rightPos = targetRect.right - expectedWidth;\n\n if (alignment === EDropdownAlignment.LEFT) {\n const fitsRightSide = leftPos + expectedWidth <= clientWidth;\n css.left = fitsRightSide ? leftPos : Math.max(0, rightPos);\n } else {\n const fitsLeftSide = rightPos >= 0;\n css.left = fitsLeftSide ? rightPos : Math.max(0, Math.min(leftPos, clientWidth - expectedWidth));\n }\n },\n [alignment],\n );\n\n /** Расчёт положения по вертикали. */\n const calculatePositionVertical = useCallback(\n (css: React.CSSProperties, dropdownRect: DOMRect, targetRect: DOMRect) => {\n if (direction === EDropdownDirection.AUTO) {\n if (targetRect.bottom + TARGET_OFFSET + dropdownRect.height < document.documentElement.clientHeight) {\n // Если влезает снизу.\n css.top = targetRect.bottom + TARGET_OFFSET;\n } else if (targetRect.top - TARGET_OFFSET - dropdownRect.height > 0) {\n // Если не влезает снизу, но влезает сверху.\n css.bottom = document.documentElement.clientHeight - targetRect.top + TARGET_OFFSET;\n } else {\n // Если не влезает снизу и сверху.\n css.top = targetRect.bottom + TARGET_OFFSET;\n }\n } else if (direction === EDropdownDirection.BOTTOM) {\n css.top = targetRect.bottom + TARGET_OFFSET;\n } else if (direction === EDropdownDirection.TOP) {\n css.bottom = document.documentElement.clientHeight - targetRect.top + TARGET_OFFSET;\n }\n },\n [direction],\n );\n\n /** Установка положения меню. */\n const setPosition = useCallback(() => {\n if (dropdownRef.current === null || targetRef.current === null) return;\n\n const dropdownRect = dropdownRef.current.getBoundingClientRect();\n const targetRect = targetRef.current.getBoundingClientRect();\n const css: React.CSSProperties = {};\n let expectedWidth = dropdownRect.width;\n\n if (width === EDropdownWidth.TARGET) {\n expectedWidth = targetRect.width;\n css.width = targetRect.width;\n } else if (width === EDropdownWidth.MIN_TARGET) {\n expectedWidth = Math.max(dropdownRect.width, targetRect.width);\n css.minWidth = targetRect.width;\n }\n\n calculatePositionVertical(css, dropdownRect, targetRect);\n calculatePositionHorizontal(css, targetRect, expectedWidth);\n\n setStyleState(css);\n }, [targetRef, width, calculatePositionVertical, calculatePositionHorizontal]);\n\n useEffect(() => {\n if (opened) {\n // Положение можно посчитать только после того, как меню отрендерено и его размеры измеримы.\n setPosition();\n } else {\n setStyleState({ opacity: 0 });\n }\n }, [opened, setPosition]);\n\n useEffect(() => {\n if (!opened || dropdownRef.current === null || targetRef.current === null) return;\n\n const observer = new ResizeObserver(setPosition);\n\n observer.observe(dropdownRef.current);\n observer.observe(targetRef.current);\n return () => observer.disconnect();\n }, [opened, targetRef, setPosition]);\n\n /** Планирует перерасчет позиции дропдауна в следующем кадре. */\n const updatePosition = useCallback(() => {\n setTimeout(setPosition);\n }, [setPosition]);\n\n useEffect(() => {\n if (opened) {\n document.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n toggleScrollEventListener(true);\n document.body.classList.add(overflowHiddenClassName);\n updatePosition();\n\n return () => {\n document.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n toggleScrollEventListener(false);\n document.body.classList.remove(overflowHiddenClassName);\n };\n }\n }, [opened, updatePosition, toggleScrollEventListener]);\n\n const setRef = (instance: HTMLDivElement | null) => {\n dropdownRef.current = instance;\n if (typeof ref === \"function\") {\n ref(instance);\n } else if (ref) {\n ref.current = instance;\n }\n };\n\n if (!opened) {\n return null;\n }\n\n return (\n <div\n className={classNames}\n style={{ ...styleState, ...styleProp }}\n {...rest}\n data-tx={process.env.npm_package_version}\n ref={setRef}\n >\n {children}\n </div>\n );\n});\n\nDropdownDesktop.displayName = \"DropdownDesktop\";\n"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import React, { useContext, useRef, useState, useEffect } from "react";
3
- import { c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
4
- import { s as styles, D as DropdownListItem } from "../../../chunks/DropdownListItem-COR0eOzM.js";
3
+ import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
4
+ import { s as styles, D as DropdownListItem } from "../../../chunks/DropdownListItem-V6Oe5CEm.js";
5
5
  import { EVENT_KEY_CODES } from "../../../utils/keyboard.js";
6
6
  import { DropdownListContext } from "../DropdownListContext.js";
7
7
  import { LoaderSmall } from "../../Loader/LoaderSmall/LoaderSmall.js";
@@ -9,7 +9,9 @@ import { ELoaderSmallTheme } from "../../Loader/LoaderSmall/enum.js";
9
9
  import "../../Loader/LoaderMiddle/LoaderMiddle.js";
10
10
  import { EComponentSize } from "../../../enums/EComponentSize.js";
11
11
  import { createSizeToClassNameMap } from "../../../utils/classNameMaps.js";
12
+ import { getSelectedListItemIndex, scrollListToTop, scrollListToItem } from "./utils.js";
12
13
  const sizeToClassNameMap = createSizeToClassNameMap(styles);
14
+ const LOADER_ITEM_ID = "dropdown-desktop-list-loader-item";
13
15
  const DropdownList = (props) => {
14
16
  const {
15
17
  children,
@@ -21,65 +23,36 @@ const DropdownList = (props) => {
21
23
  ...htmlDivAttributes
22
24
  } = props;
23
25
  const classNames = clsx(styles.dropdownDesktopList, sizeToClassNameMap[size], className);
24
- const { activeDescendant, setActiveDescendant } = useContext(DropdownListContext);
25
- const containerRef = listRef || React.createRef();
26
+ const { setActiveDescendant } = useContext(DropdownListContext);
27
+ const innerContainerRef = useRef(null);
28
+ const containerRef = listRef || innerContainerRef;
26
29
  const listItemsRef = useRef([]);
27
- const [activeListItemIndex, setActiveListItemIndex] = useState(void 0);
30
+ const selectedListItemIndex = getSelectedListItemIndex(children);
31
+ const activeListItemIndexOnOpen = selectedListItemIndex ?? 0;
32
+ const [activeListItemIndex, setActiveListItemIndex] = useState(
33
+ dropdownOpened ? activeListItemIndexOnOpen : void 0
34
+ );
35
+ const [prevDropdownOpened, setPrevDropdownOpened] = useState(dropdownOpened);
36
+ if (dropdownOpened !== prevDropdownOpened) {
37
+ setPrevDropdownOpened(dropdownOpened);
38
+ setActiveListItemIndex(dropdownOpened ? activeListItemIndexOnOpen : void 0);
39
+ }
28
40
  const childrenCount = React.Children.count(children);
29
- const scrollContainerToItem = (itemIndex) => {
30
- const parent = containerRef == null ? void 0 : containerRef.current;
31
- const activeItem = listItemsRef.current[itemIndex];
32
- if (parent && activeItem) {
33
- const { top: parentTop, bottom: parentBottom } = parent.getBoundingClientRect();
34
- const { top: itemTop, bottom: itemBottom } = activeItem.getBoundingClientRect();
35
- const offset = 4;
36
- if (parentTop > itemTop) {
37
- parent.scrollTop = parent.scrollTop - parentTop + itemTop - offset;
38
- } else if (itemBottom > parentBottom) {
39
- parent.scrollTop = parent.scrollTop + itemBottom - parentBottom + offset;
40
- }
41
- }
42
- };
43
- const scrollContainerToTop = () => {
44
- const container = containerRef == null ? void 0 : containerRef.current;
45
- if (container) {
46
- container.scrollTop = 0;
47
- }
48
- };
49
41
  useEffect(() => {
50
42
  if (!dropdownOpened) {
51
43
  return;
52
44
  }
53
45
  const handleKeyDown = (event) => {
54
- const { keyCode } = event;
55
- const childrenLength = childrenCount;
56
- const currentIndex = activeListItemIndex;
57
46
  let nextActiveListItemIndex;
58
- if (keyCode === EVENT_KEY_CODES.ARROW_DOWN) {
59
- if (currentIndex !== void 0) {
60
- if (currentIndex < childrenLength - 1) {
61
- nextActiveListItemIndex = currentIndex + 1;
62
- } else {
63
- nextActiveListItemIndex = 0;
64
- }
65
- } else {
66
- nextActiveListItemIndex = 0;
67
- }
47
+ if (event.keyCode === EVENT_KEY_CODES.ARROW_DOWN) {
48
+ nextActiveListItemIndex = activeListItemIndex === void 0 || activeListItemIndex >= childrenCount - 1 ? 0 : activeListItemIndex + 1;
68
49
  event.preventDefault();
69
- } else if (keyCode === EVENT_KEY_CODES.ARROW_UP) {
70
- if (currentIndex !== void 0) {
71
- if (currentIndex > 0) {
72
- nextActiveListItemIndex = currentIndex - 1;
73
- } else {
74
- nextActiveListItemIndex = childrenLength - 1;
75
- }
76
- } else {
77
- nextActiveListItemIndex = childrenLength - 1;
78
- }
50
+ } else if (event.keyCode === EVENT_KEY_CODES.ARROW_UP) {
51
+ nextActiveListItemIndex = activeListItemIndex === void 0 || activeListItemIndex <= 0 ? childrenCount - 1 : activeListItemIndex - 1;
79
52
  event.preventDefault();
80
53
  }
81
- if (nextActiveListItemIndex !== void 0 && currentIndex !== nextActiveListItemIndex) {
82
- scrollContainerToItem(nextActiveListItemIndex);
54
+ if (nextActiveListItemIndex !== void 0 && activeListItemIndex !== nextActiveListItemIndex) {
55
+ scrollListToItem(containerRef.current, listItemsRef.current[nextActiveListItemIndex]);
83
56
  setActiveListItemIndex(nextActiveListItemIndex);
84
57
  }
85
58
  };
@@ -87,22 +60,15 @@ const DropdownList = (props) => {
87
60
  return () => {
88
61
  document.removeEventListener("keydown", handleKeyDown);
89
62
  };
90
- }, [dropdownOpened, activeListItemIndex, childrenCount]);
63
+ }, [dropdownOpened, activeListItemIndex, childrenCount, containerRef]);
91
64
  useEffect(() => {
92
65
  if (!dropdownOpened) {
93
66
  return;
94
67
  }
95
- let isSelectedItemExist = false;
96
- React.Children.forEach(children, (child, index) => {
97
- if (React.isValidElement(child) && child.props.selected) {
98
- isSelectedItemExist = true;
99
- scrollContainerToItem(index);
100
- setActiveListItemIndex(index);
101
- }
102
- });
103
- if (!isSelectedItemExist) {
104
- setActiveListItemIndex(0);
105
- scrollContainerToTop();
68
+ if (selectedListItemIndex === void 0) {
69
+ scrollListToTop(containerRef.current);
70
+ } else {
71
+ scrollListToItem(containerRef.current, listItemsRef.current[selectedListItemIndex]);
106
72
  }
107
73
  }, [dropdownOpened]);
108
74
  useEffect(() => {
@@ -111,17 +77,16 @@ const DropdownList = (props) => {
111
77
  setActiveDescendant((_a = listItemsRef.current[activeListItemIndex]) == null ? void 0 : _a.id);
112
78
  return;
113
79
  }
114
- if (!dropdownOpened && activeDescendant !== void 0) {
115
- setActiveDescendant();
80
+ if (!dropdownOpened) {
81
+ setActiveDescendant(void 0);
116
82
  }
117
- }, [dropdownOpened, activeListItemIndex, activeDescendant, setActiveDescendant]);
118
- useEffect(() => {
119
- return () => {
120
- if (activeDescendant !== void 0) {
121
- setActiveDescendant();
122
- }
123
- };
124
- }, [activeDescendant, setActiveDescendant]);
83
+ }, [dropdownOpened, activeListItemIndex, setActiveDescendant]);
84
+ useEffect(
85
+ () => () => {
86
+ setActiveDescendant(void 0);
87
+ },
88
+ [setActiveDescendant]
89
+ );
125
90
  const renderedChildren = React.Children.map(children, (child, index) => {
126
91
  if (!React.isValidElement(child)) {
127
92
  return child;
@@ -144,7 +109,7 @@ const DropdownList = (props) => {
144
109
  }
145
110
  });
146
111
  });
147
- const renderLoaderItem = () => /* @__PURE__ */ jsx(DropdownListItem, { id: "dropdown-desktop-list-loader-item", children: /* @__PURE__ */ jsx(LoaderSmall, { className: styles.dropdownDesktopListLoader, theme: ELoaderSmallTheme.BRAND, size }) });
112
+ const renderLoaderItem = () => /* @__PURE__ */ jsx(DropdownListItem, { id: LOADER_ITEM_ID, children: /* @__PURE__ */ jsx(LoaderSmall, { className: styles.dropdownDesktopListLoader, theme: ELoaderSmallTheme.BRAND, size }) });
148
113
  return /* @__PURE__ */ jsxs("div", { className: classNames, role: "listbox", ...htmlDivAttributes, ref: containerRef, children: [
149
114
  renderedChildren,
150
115
  loading && renderLoaderItem()
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownList.js","sources":["../../../../src/components/Dropdown/desktop/DropdownList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport {\n DropdownListItem,\n IDropdownListItemProps,\n} from \"@sberbusiness/triplex-next/components/Dropdown/desktop/DropdownListItem\";\nimport { EVENT_KEY_CODES } from \"@sberbusiness/triplex-next/utils/keyboard\";\nimport { DropdownListContext } from \"@sberbusiness/triplex-next/components/Dropdown/DropdownListContext\";\nimport { LoaderSmall, ELoaderSmallTheme } from \"@sberbusiness/triplex-next/components/Loader\";\nimport { EComponentSize } from \"@sberbusiness/triplex-next/enums/EComponentSize\";\nimport { createSizeToClassNameMap } from \"../../../utils/classNameMaps\";\nimport styles from \"../styles/DropdownDesktopList.module.less\";\n\n/** Свойства компонента DropdownList. */\nexport interface IDropdownListProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Dropdown открыт. */\n dropdownOpened: boolean;\n /** Объект для создания ссылки на html-элемент \"список\". */\n listRef?: React.RefObject<HTMLDivElement>;\n /** Состояние загрузки. */\n loading?: boolean;\n /** Размер списка. */\n size?: EComponentSize;\n}\n\n/** Индекс текущего выделенного элемента списка при навигации с клавиатуры. */\ntype TActiveListItemIndex = number | undefined;\n\n/** Композиция компонента DropdownList. */\nexport interface IDropdownListComponent extends React.FC<IDropdownListProps> {\n Item: typeof DropdownListItem;\n}\n\n// Соответствие размера имени класса.\nconst sizeToClassNameMap = createSizeToClassNameMap(styles);\n\n/**\n * Компонент DropdownList.\n * Используется для обрамления вложенного списка и добавляет спику возможность навигации с клавиатуры.\n * В качестве children принимает только DropdownDesktopList.Item.\n */\nexport const DropdownList: IDropdownListComponent = (props) => {\n const {\n children,\n className,\n dropdownOpened,\n listRef,\n loading,\n size = EComponentSize.MD,\n ...htmlDivAttributes\n } = props;\n const classNames = clsx(styles.dropdownDesktopList, sizeToClassNameMap[size], className);\n\n const { activeDescendant, setActiveDescendant } = useContext(DropdownListContext);\n\n // Ref контейнера списка.\n const containerRef = listRef || React.createRef<HTMLDivElement>();\n // Массив DOM-элементов списка.\n const listItemsRef = useRef<Array<HTMLDivElement | null>>([]);\n const [activeListItemIndex, setActiveListItemIndex] = useState<TActiveListItemIndex>(undefined);\n\n const childrenCount = React.Children.count(children);\n\n const scrollContainerToItem = (itemIndex: number) => {\n const parent = containerRef?.current;\n const activeItem = listItemsRef.current[itemIndex];\n\n if (parent && activeItem) {\n const { top: parentTop, bottom: parentBottom } = parent.getBoundingClientRect();\n const { top: itemTop, bottom: itemBottom } = activeItem.getBoundingClientRect();\n const offset = 4;\n\n if (parentTop > itemTop) {\n parent.scrollTop = parent.scrollTop - parentTop + itemTop - offset;\n } else if (itemBottom > parentBottom) {\n parent.scrollTop = parent.scrollTop + itemBottom - parentBottom + offset;\n }\n }\n };\n\n const scrollContainerToTop = () => {\n const container = containerRef?.current;\n if (container) {\n container.scrollTop = 0;\n }\n };\n\n // Подписка на keydown когда открыт, с актуальным индексом.\n useEffect(() => {\n if (!dropdownOpened) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const { keyCode } = event;\n const childrenLength = childrenCount;\n const currentIndex = activeListItemIndex;\n let nextActiveListItemIndex: number | undefined;\n\n if (keyCode === EVENT_KEY_CODES.ARROW_DOWN) {\n if (currentIndex !== undefined) {\n if (currentIndex < childrenLength - 1) {\n nextActiveListItemIndex = currentIndex + 1;\n } else {\n nextActiveListItemIndex = 0;\n }\n } else {\n nextActiveListItemIndex = 0;\n }\n event.preventDefault();\n } else if (keyCode === EVENT_KEY_CODES.ARROW_UP) {\n if (currentIndex !== undefined) {\n if (currentIndex > 0) {\n nextActiveListItemIndex = currentIndex - 1;\n } else {\n nextActiveListItemIndex = childrenLength - 1;\n }\n } else {\n nextActiveListItemIndex = childrenLength - 1;\n }\n event.preventDefault();\n }\n\n if (nextActiveListItemIndex !== undefined && currentIndex !== nextActiveListItemIndex) {\n scrollContainerToItem(nextActiveListItemIndex);\n setActiveListItemIndex(nextActiveListItemIndex);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dropdownOpened, activeListItemIndex, childrenCount]);\n\n // Установка активного элемента и скролла при открытии.\n useEffect(() => {\n if (!dropdownOpened) {\n return;\n }\n let isSelectedItemExist = false;\n React.Children.forEach(children, (child, index) => {\n if (React.isValidElement<IDropdownListItemProps>(child) && child.props.selected) {\n isSelectedItemExist = true;\n scrollContainerToItem(index);\n setActiveListItemIndex(index);\n }\n });\n if (!isSelectedItemExist) {\n setActiveListItemIndex(0);\n scrollContainerToTop();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dropdownOpened]);\n\n // Синхронизация activeDescendant при изменении activeListItemIndex\n useEffect(() => {\n if (dropdownOpened && activeListItemIndex !== undefined) {\n setActiveDescendant(listItemsRef.current[activeListItemIndex]?.id);\n return;\n }\n if (!dropdownOpened && activeDescendant !== undefined) {\n setActiveDescendant();\n }\n }, [dropdownOpened, activeListItemIndex, activeDescendant, setActiveDescendant]);\n\n useEffect(() => {\n return () => {\n if (activeDescendant !== undefined) {\n setActiveDescendant();\n }\n };\n }, [activeDescendant, setActiveDescendant]);\n\n const renderedChildren = React.Children.map(children, (child, index) => {\n if (!React.isValidElement<IDropdownListItemProps & React.RefAttributes<HTMLDivElement>>(child)) {\n return child;\n }\n\n return React.cloneElement(child, {\n active: activeListItemIndex === index,\n onMouseOver: (event: React.MouseEvent<HTMLDivElement>) => {\n setActiveListItemIndex(index);\n child.props.onMouseOver?.(event);\n },\n onMouseOut: (event: React.MouseEvent<HTMLDivElement>) => {\n setActiveListItemIndex(undefined);\n child.props.onMouseOut?.(event);\n },\n size: size,\n ref: (node: HTMLDivElement | null) => {\n listItemsRef.current[index] = node;\n },\n });\n });\n\n const renderLoaderItem = () => (\n <DropdownListItem id=\"dropdown-desktop-list-loader-item\">\n <LoaderSmall className={styles.dropdownDesktopListLoader} theme={ELoaderSmallTheme.BRAND} size={size} />\n </DropdownListItem>\n );\n\n return (\n <div className={classNames} role=\"listbox\" {...htmlDivAttributes} ref={containerRef}>\n {renderedChildren}\n {loading && renderLoaderItem()}\n </div>\n );\n};\n\nDropdownList.Item = DropdownListItem;\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DropdownList.js","sources":["../../../../src/components/Dropdown/desktop/DropdownList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport {\n DropdownListItem,\n IDropdownListItemProps,\n} from \"@sberbusiness/triplex-next/components/Dropdown/desktop/DropdownListItem\";\nimport { EVENT_KEY_CODES } from \"@sberbusiness/triplex-next/utils/keyboard\";\nimport { DropdownListContext } from \"@sberbusiness/triplex-next/components/Dropdown/DropdownListContext\";\nimport { LoaderSmall, ELoaderSmallTheme } from \"@sberbusiness/triplex-next/components/Loader\";\nimport { EComponentSize } from \"@sberbusiness/triplex-next/enums/EComponentSize\";\nimport { createSizeToClassNameMap } from \"../../../utils/classNameMaps\";\nimport { getSelectedListItemIndex, scrollListToItem, scrollListToTop } from \"./utils\";\nimport styles from \"../styles/DropdownDesktopList.module.less\";\n\n/** Свойства компонента DropdownList. */\nexport interface IDropdownListProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Dropdown открыт. При открытии список подписывается на клавиатурную навигацию. */\n dropdownOpened: boolean;\n /** Объект для создания ссылки на html-элемент \"список\". */\n listRef?: React.RefObject<HTMLDivElement>;\n /** Состояние загрузки. Дополняет список элементом с лоадером. */\n loading?: boolean;\n /** Размер списка. Пробрасывается в элементы списка. */\n size?: EComponentSize;\n}\n\n/** Индекс текущего выделенного элемента списка при навигации с клавиатуры. */\ntype TActiveListItemIndex = number | undefined;\n\n/** Композиция компонента DropdownList. */\nexport interface IDropdownListComponent extends React.FC<IDropdownListProps> {\n /** Элемент выпадающего списка. */\n Item: typeof DropdownListItem;\n}\n\n// Соответствие размера имени класса.\nconst sizeToClassNameMap = createSizeToClassNameMap(styles);\n\n/** Идентификатор служебного элемента списка с лоадером. */\nconst LOADER_ITEM_ID = \"dropdown-desktop-list-loader-item\";\n\n/**\n * Компонент DropdownList.\n * Используется для обрамления вложенного списка и добавляет списку возможность навигации с клавиатуры.\n * В качестве children принимает только DropdownList.Item.\n */\nexport const DropdownList: IDropdownListComponent = (props) => {\n const {\n children,\n className,\n dropdownOpened,\n listRef,\n loading,\n size = EComponentSize.MD,\n ...htmlDivAttributes\n } = props;\n const classNames = clsx(styles.dropdownDesktopList, sizeToClassNameMap[size], className);\n\n const { setActiveDescendant } = useContext(DropdownListContext);\n\n // Ref контейнера списка. Используется внутренний ref, если listRef не передан снаружи.\n const innerContainerRef = useRef<HTMLDivElement>(null);\n const containerRef = listRef || innerContainerRef;\n // Массив DOM-элементов списка.\n const listItemsRef = useRef<Array<HTMLDivElement | null>>([]);\n\n // Индекс элемента, который становится активным при открытии: выбранный элемент либо первый.\n const selectedListItemIndex = getSelectedListItemIndex(children);\n const activeListItemIndexOnOpen = selectedListItemIndex ?? 0;\n\n const [activeListItemIndex, setActiveListItemIndex] = useState<TActiveListItemIndex>(\n dropdownOpened ? activeListItemIndexOnOpen : undefined,\n );\n const [prevDropdownOpened, setPrevDropdownOpened] = useState(dropdownOpened);\n\n // Сброс активного элемента при смене открытости — корректировка state в ответ на изменение props.\n // Сброс симметричен: на закрытии активный элемент снимается вместе с activeDescendant,\n // иначе список, оставленный смонтированным в закрытом виде, сохранял бы подсветку.\n if (dropdownOpened !== prevDropdownOpened) {\n setPrevDropdownOpened(dropdownOpened);\n setActiveListItemIndex(dropdownOpened ? activeListItemIndexOnOpen : undefined);\n }\n\n const childrenCount = React.Children.count(children);\n\n // Подписка на keydown когда открыт, с актуальным индексом.\n useEffect(() => {\n if (!dropdownOpened) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n let nextActiveListItemIndex: number | undefined;\n\n if (event.keyCode === EVENT_KEY_CODES.ARROW_DOWN) {\n nextActiveListItemIndex =\n activeListItemIndex === undefined || activeListItemIndex >= childrenCount - 1\n ? 0\n : activeListItemIndex + 1;\n event.preventDefault();\n } else if (event.keyCode === EVENT_KEY_CODES.ARROW_UP) {\n nextActiveListItemIndex =\n activeListItemIndex === undefined || activeListItemIndex <= 0\n ? childrenCount - 1\n : activeListItemIndex - 1;\n event.preventDefault();\n }\n\n if (nextActiveListItemIndex !== undefined && activeListItemIndex !== nextActiveListItemIndex) {\n scrollListToItem(containerRef.current, listItemsRef.current[nextActiveListItemIndex]);\n setActiveListItemIndex(nextActiveListItemIndex);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [dropdownOpened, activeListItemIndex, childrenCount, containerRef]);\n\n // Прокрутка списка к активному элементу при открытии.\n useEffect(() => {\n if (!dropdownOpened) {\n return;\n }\n\n if (selectedListItemIndex === undefined) {\n scrollListToTop(containerRef.current);\n } else {\n scrollListToItem(containerRef.current, listItemsRef.current[selectedListItemIndex]);\n }\n // Прокрутка выполняется один раз на открытие, по состоянию списка на момент открытия.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dropdownOpened]);\n\n // Синхронизация activeDescendant при изменении activeListItemIndex.\n useEffect(() => {\n if (dropdownOpened && activeListItemIndex !== undefined) {\n setActiveDescendant(listItemsRef.current[activeListItemIndex]?.id);\n return;\n }\n\n if (!dropdownOpened) {\n setActiveDescendant(undefined);\n }\n }, [dropdownOpened, activeListItemIndex, setActiveDescendant]);\n\n // Сброс activeDescendant при размонтировании списка.\n useEffect(\n () => () => {\n setActiveDescendant(undefined);\n },\n [setActiveDescendant],\n );\n\n const renderedChildren = React.Children.map(children, (child, index) => {\n if (!React.isValidElement<IDropdownListItemProps & React.RefAttributes<HTMLDivElement>>(child)) {\n return child;\n }\n\n return React.cloneElement(child, {\n active: activeListItemIndex === index,\n onMouseOver: (event: React.MouseEvent<HTMLDivElement>) => {\n setActiveListItemIndex(index);\n child.props.onMouseOver?.(event);\n },\n onMouseOut: (event: React.MouseEvent<HTMLDivElement>) => {\n setActiveListItemIndex(undefined);\n child.props.onMouseOut?.(event);\n },\n size: size,\n ref: (node: HTMLDivElement | null) => {\n listItemsRef.current[index] = node;\n },\n });\n });\n\n const renderLoaderItem = () => (\n <DropdownListItem id={LOADER_ITEM_ID}>\n <LoaderSmall className={styles.dropdownDesktopListLoader} theme={ELoaderSmallTheme.BRAND} size={size} />\n </DropdownListItem>\n );\n\n return (\n <div className={classNames} role=\"listbox\" {...htmlDivAttributes} ref={containerRef}>\n {renderedChildren}\n {loading && renderLoaderItem()}\n </div>\n );\n};\n\nDropdownList.Item = DropdownListItem;\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import "react/jsx-runtime";
2
2
  import "react";
3
- import "../../../chunks/vendor-DKrjZZwJ.js";
3
+ import "../../../chunks/vendor-BtZO8a0z.js";
4
4
  import "../../../enums/EComponentSize.js";
5
5
  import "../../../utils/keyboard.js";
6
6
  import "../../Badge/Badge.js";
7
- import { D } from "../../../chunks/DropdownListItem-COR0eOzM.js";
7
+ import { D } from "../../../chunks/DropdownListItem-V6Oe5CEm.js";
8
8
  export {
9
9
  D as DropdownListItem
10
10
  };
@@ -1,6 +1,6 @@
1
1
  import { DropdownDesktop } from "./DropdownDesktop.js";
2
2
  import { DropdownList } from "./DropdownList.js";
3
- import { D } from "../../../chunks/DropdownListItem-COR0eOzM.js";
3
+ import { D } from "../../../chunks/DropdownListItem-V6Oe5CEm.js";
4
4
  import { EDropdownAlignment, EDropdownDirection, EDropdownWidth } from "./enums.js";
5
5
  export {
6
6
  DropdownDesktop,
@@ -0,0 +1,34 @@
1
+ import React from "react";
2
+ const SCROLL_OFFSET = 4;
3
+ const getSelectedListItemIndex = (children) => {
4
+ let selectedIndex;
5
+ React.Children.forEach(children, (child, index) => {
6
+ if (React.isValidElement(child) && child.props.selected) {
7
+ selectedIndex = index;
8
+ }
9
+ });
10
+ return selectedIndex;
11
+ };
12
+ const scrollListToTop = (container) => {
13
+ if (container) {
14
+ container.scrollTop = 0;
15
+ }
16
+ };
17
+ const scrollListToItem = (container, item) => {
18
+ if (!container || !item) {
19
+ return;
20
+ }
21
+ const { top: containerTop, bottom: containerBottom } = container.getBoundingClientRect();
22
+ const { top: itemTop, bottom: itemBottom } = item.getBoundingClientRect();
23
+ if (containerTop > itemTop) {
24
+ container.scrollTop = container.scrollTop - containerTop + itemTop - SCROLL_OFFSET;
25
+ } else if (itemBottom > containerBottom) {
26
+ container.scrollTop = container.scrollTop + itemBottom - containerBottom + SCROLL_OFFSET;
27
+ }
28
+ };
29
+ export {
30
+ getSelectedListItemIndex,
31
+ scrollListToItem,
32
+ scrollListToTop
33
+ };
34
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/Dropdown/desktop/utils.ts"],"sourcesContent":["import React from \"react\";\nimport { IDropdownListItemProps } from \"./DropdownListItem\";\n\n/** Отступ между краем списка и элементом при автоматической прокрутке, px. */\nconst SCROLL_OFFSET = 4;\n\n/**\n * Возвращает индекс выбранного (selected) элемента списка.\n * Если выбранных элементов несколько, возвращается индекс последнего из них.\n * Если выбранных элементов нет, возвращается undefined.\n */\nexport const getSelectedListItemIndex = (children: React.ReactNode): number | undefined => {\n let selectedIndex: number | undefined;\n\n React.Children.forEach(children, (child, index) => {\n if (React.isValidElement<IDropdownListItemProps>(child) && child.props.selected) {\n selectedIndex = index;\n }\n });\n\n return selectedIndex;\n};\n\n/** Прокручивает контейнер списка к началу. */\nexport const scrollListToTop = (container: HTMLElement | null): void => {\n if (container) {\n container.scrollTop = 0;\n }\n};\n\n/**\n * Прокручивает контейнер списка так, чтобы элемент целиком попал в видимую область.\n * Если элемент уже видим полностью, прокрутка не выполняется.\n */\nexport const scrollListToItem = (container: HTMLElement | null, item: HTMLElement | null): void => {\n if (!container || !item) {\n return;\n }\n\n const { top: containerTop, bottom: containerBottom } = container.getBoundingClientRect();\n const { top: itemTop, bottom: itemBottom } = item.getBoundingClientRect();\n\n if (containerTop > itemTop) {\n container.scrollTop = container.scrollTop - containerTop + itemTop - SCROLL_OFFSET;\n } else if (itemBottom > containerBottom) {\n container.scrollTop = container.scrollTop + itemBottom - containerBottom + SCROLL_OFFSET;\n }\n};\n"],"names":[],"mappings":";AAIA,MAAM,gBAAgB;AAOf,MAAM,2BAA2B,CAAC,aAAkD;AACvF,MAAI;AAEJ,QAAM,SAAS,QAAQ,UAAU,CAAC,OAAO,UAAU;AAC/C,QAAI,MAAM,eAAuC,KAAK,KAAK,MAAM,MAAM,UAAU;AAC7E,sBAAgB;AAAA,IACpB;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AAGO,MAAM,kBAAkB,CAAC,cAAwC;AACpE,MAAI,WAAW;AACX,cAAU,YAAY;AAAA,EAC1B;AACJ;AAMO,MAAM,mBAAmB,CAAC,WAA+B,SAAmC;AAC/F,MAAI,CAAC,aAAa,CAAC,MAAM;AACrB;AAAA,EACJ;AAEA,QAAM,EAAE,KAAK,cAAc,QAAQ,gBAAA,IAAoB,UAAU,sBAAA;AACjE,QAAM,EAAE,KAAK,SAAS,QAAQ,WAAA,IAAe,KAAK,sBAAA;AAElD,MAAI,eAAe,SAAS;AACxB,cAAU,YAAY,UAAU,YAAY,eAAe,UAAU;AAAA,EACzE,WAAW,aAAa,iBAAiB;AACrC,cAAU,YAAY,UAAU,YAAY,aAAa,kBAAkB;AAAA,EAC/E;AACJ;"}
@@ -1,7 +1,7 @@
1
1
  import { DropdownListContext } from "./DropdownListContext.js";
2
2
  import { DropdownDesktop } from "./desktop/DropdownDesktop.js";
3
3
  import { DropdownList } from "./desktop/DropdownList.js";
4
- import { D } from "../../chunks/DropdownListItem-COR0eOzM.js";
4
+ import { D } from "../../chunks/DropdownListItem-V6Oe5CEm.js";
5
5
  import { EDropdownAlignment, EDropdownDirection, EDropdownWidth } from "./desktop/enums.js";
6
6
  import { DropdownMobile } from "./mobile/DropdownMobile.js";
7
7
  import { DropdownMobileBody } from "./mobile/DropdownMobileBody.js";
@@ -2,7 +2,7 @@ import { jsx } from "react/jsx-runtime";
2
2
  import React, { useEffect } from "react";
3
3
  import { OverlayBase, EOverlayDirection } from "../../Overlay/OverlayBase.js";
4
4
  import { DropdownMobileInner } from "./DropdownMobileInner.js";
5
- import { s as styles } from "../../../chunks/DropdownMobile.module-DUiUSr13.js";
5
+ import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
6
6
  const dropdownMobileBodyOverflowClassName = styles.dropdownMobileBodyOverflow;
7
7
  const DropdownMobile = React.forwardRef(
8
8
  ({ children, opened, setOpened, ...htmlAttributes }, ref) => {
@@ -20,7 +20,7 @@ const DropdownMobile = React.forwardRef(
20
20
  ...props,
21
21
  ...htmlAttributes,
22
22
  ref,
23
- "data-tx": "0.39.0",
23
+ "data-tx": "0.40.0",
24
24
  children
25
25
  }
26
26
  ) });
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
- import { c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
4
- import { s as styles } from "../../../chunks/DropdownMobile.module-DUiUSr13.js";
3
+ import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
4
+ import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
5
5
  const DropdownMobileBody = React.forwardRef(
6
6
  ({ children, className, ...htmlAttributes }, ref) => /* @__PURE__ */ jsx("div", { className: clsx(styles.dropdownMobileContent, className), ref, ...htmlAttributes, children })
7
7
  );
@@ -2,8 +2,8 @@ import { jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
3
  import { ButtonIcon } from "../../Button/ButtonIcon.js";
4
4
  import { CrossStrokeSrvIcon16 } from "@sberbusiness/icons-next";
5
- import { c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
6
- import { s as styles } from "../../../chunks/DropdownMobile.module-DUiUSr13.js";
5
+ import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
6
+ import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
7
7
  const DropdownMobileClose = React.forwardRef(
8
8
  ({ className, ...buttonIconProps }, ref) => /* @__PURE__ */ jsx(ButtonIcon, { className: clsx(styles.dropdownMobileClose, className), ref, ...buttonIconProps, children: /* @__PURE__ */ jsx(CrossStrokeSrvIcon16, { paletteIndex: 5 }) })
9
9
  );
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
- import { c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
4
- import { s as styles } from "../../../chunks/DropdownMobile.module-DUiUSr13.js";
3
+ import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
4
+ import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
5
5
  const DropdownMobileFooter = React.forwardRef(
6
6
  ({ children, className, ...htmlAttributes }, ref) => /* @__PURE__ */ jsx("div", { className: clsx(styles.dropdownMobileFooter, className), ref, ...htmlAttributes, children })
7
7
  );
@@ -1,7 +1,7 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
- import { c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
4
- import { s as styles } from "../../../chunks/DropdownMobile.module-DUiUSr13.js";
3
+ import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
4
+ import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
5
5
  const DropdownMobileHeader = React.forwardRef(
6
6
  ({ children, className, controlButtons, ...htmlAttributes }, ref) => /* @__PURE__ */ jsxs("div", { className: clsx(styles.dropdownMobileHeader, className), ref, ...htmlAttributes, children: [
7
7
  /* @__PURE__ */ jsx("div", { className: styles.dropdownMobileHeaderContent, children }),
@@ -1,8 +1,8 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import React, { useState, useEffect } from "react";
3
- import { c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
3
+ import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
4
4
  import { useToken } from "../../ThemeProvider/useToken.js";
5
- import { s as styles } from "../../../chunks/DropdownMobile.module-DUiUSr13.js";
5
+ import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
6
6
  const DropdownMobileInner = React.forwardRef(
7
7
  ({
8
8
  children,
@@ -19,10 +19,12 @@ const DropdownMobileInner = React.forwardRef(
19
19
  const [openedState, setOpenedState] = useState(false);
20
20
  const { scopeClassName } = useToken();
21
21
  useEffect(() => {
22
- setTimeout(() => setOpeningState(openingProps));
22
+ const timeoutId = setTimeout(() => setOpeningState(openingProps));
23
+ return () => clearTimeout(timeoutId);
23
24
  }, [openingProps]);
24
25
  useEffect(() => {
25
- setTimeout(() => setOpenedState(openedProps));
26
+ const timeoutId = setTimeout(() => setOpenedState(openedProps));
27
+ return () => clearTimeout(timeoutId);
26
28
  }, [openedProps]);
27
29
  const classNamesWrapper = clsx(styles.dropdownMobileWrapper, scopeClassName, className);
28
30
  const classNamesBackDrop = clsx(styles.dropdownMobileBackdrop, {
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMobileInner.js","sources":["../../../../src/components/Dropdown/mobile/DropdownMobileInner.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { IOverlayChildrenProvideProps } from \"@sberbusiness/triplex-next/components/Overlay/OverlayBase\";\nimport { useToken } from \"../../ThemeProvider/useToken\";\nimport styles from \"../styles/DropdownMobile.module.less\";\n\n/** Свойства компонента DropdownMobileInner. */\nexport interface IDropdownMobileInnerProps extends IOverlayChildrenProvideProps, React.HTMLAttributes<HTMLDivElement> {}\n\n/** Контент мобильного Dropdown. */\nexport const DropdownMobileInner = React.forwardRef<HTMLDivElement, IDropdownMobileInnerProps>(\n (\n {\n children,\n className,\n opened: openedProps,\n opening: openingProps,\n closing,\n setOpened,\n setClosing,\n setOpening,\n ...htmlAttributes\n },\n ref,\n ) => {\n // OpeningState после рендера становится равен openingProps. Чтобы появилась анимация открытия, сначала нужно отрендерить элемент в закрытом виде.\n const [openingState, setOpeningState] = useState(false);\n const [openedState, setOpenedState] = useState(false);\n const { scopeClassName } = useToken();\n\n useEffect(() => {\n setTimeout(() => setOpeningState(openingProps));\n }, [openingProps]);\n\n useEffect(() => {\n setTimeout(() => setOpenedState(openedProps));\n }, [openedProps]);\n\n const classNamesWrapper = clsx(styles.dropdownMobileWrapper, scopeClassName, className);\n\n const classNamesBackDrop = clsx(styles.dropdownMobileBackdrop, {\n [styles.closing]: closing,\n [styles.opened]: openedState,\n [styles.opening]: openingState,\n });\n\n const classNamesContent = clsx(styles.dropdownMobile, {\n [styles.closing]: closing,\n [styles.opened]: openedState,\n [styles.opening]: openingState,\n });\n\n const handleTransitionEnd = (event: React.TransitionEvent<HTMLDivElement>) => {\n const { target, currentTarget } = event;\n\n if (target === currentTarget) {\n if (closing) {\n setClosing(false);\n } else if (openingProps) {\n setOpening(false);\n }\n }\n };\n\n /** Функция закрытия DropdownMobile. */\n const closeDropdown = () => {\n if (openedProps) {\n setOpened(false);\n }\n };\n\n if (!openingProps && !openedProps && !closing) {\n return null;\n }\n\n return (\n <div className={classNamesWrapper}>\n <div\n className={classNamesBackDrop}\n onTransitionEnd={handleTransitionEnd}\n onTouchStart={closeDropdown}\n onMouseDown={closeDropdown}\n />\n <div className={classNamesContent} ref={ref} {...htmlAttributes}>\n {children}\n </div>\n </div>\n );\n },\n);\n\nDropdownMobileInner.displayName = \"DropdownMobileInner\";\n"],"names":[],"mappings":";;;;;AAUO,MAAM,sBAAsB,MAAM;AAAA,EACrC,CACI;AAAA,IACI;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEP,QACC;AAED,UAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,UAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,UAAM,EAAE,eAAA,IAAmB,SAAA;AAE3B,cAAU,MAAM;AACZ,iBAAW,MAAM,gBAAgB,YAAY,CAAC;AAAA,IAClD,GAAG,CAAC,YAAY,CAAC;AAEjB,cAAU,MAAM;AACZ,iBAAW,MAAM,eAAe,WAAW,CAAC;AAAA,IAChD,GAAG,CAAC,WAAW,CAAC;AAEhB,UAAM,oBAAoB,KAAK,OAAO,uBAAuB,gBAAgB,SAAS;AAEtF,UAAM,qBAAqB,KAAK,OAAO,wBAAwB;AAAA,MAC3D,CAAC,OAAO,OAAO,GAAG;AAAA,MAClB,CAAC,OAAO,MAAM,GAAG;AAAA,MACjB,CAAC,OAAO,OAAO,GAAG;AAAA,IAAA,CACrB;AAED,UAAM,oBAAoB,KAAK,OAAO,gBAAgB;AAAA,MAClD,CAAC,OAAO,OAAO,GAAG;AAAA,MAClB,CAAC,OAAO,MAAM,GAAG;AAAA,MACjB,CAAC,OAAO,OAAO,GAAG;AAAA,IAAA,CACrB;AAED,UAAM,sBAAsB,CAAC,UAAiD;AAC1E,YAAM,EAAE,QAAQ,cAAA,IAAkB;AAElC,UAAI,WAAW,eAAe;AAC1B,YAAI,SAAS;AACT,qBAAW,KAAK;AAAA,QACpB,WAAW,cAAc;AACrB,qBAAW,KAAK;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ;AAGA,UAAM,gBAAgB,MAAM;AACxB,UAAI,aAAa;AACb,kBAAU,KAAK;AAAA,MACnB;AAAA,IACJ;AAEA,QAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS;AAC3C,aAAO;AAAA,IACX;AAEA,WACI,qBAAC,OAAA,EAAI,WAAW,mBACZ,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAW;AAAA,UACX,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,aAAa;AAAA,QAAA;AAAA,MAAA;AAAA,0BAEhB,OAAA,EAAI,WAAW,mBAAmB,KAAW,GAAG,gBAC5C,SAAA,CACL;AAAA,IAAA,GACJ;AAAA,EAER;AACJ;AAEA,oBAAoB,cAAc;"}
1
+ {"version":3,"file":"DropdownMobileInner.js","sources":["../../../../src/components/Dropdown/mobile/DropdownMobileInner.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { IOverlayChildrenProvideProps } from \"@sberbusiness/triplex-next/components/Overlay/OverlayBase\";\nimport { useToken } from \"../../ThemeProvider/useToken\";\nimport styles from \"../styles/DropdownMobile.module.less\";\n\n/** Свойства компонента DropdownMobileInner. */\nexport interface IDropdownMobileInnerProps extends IOverlayChildrenProvideProps, React.HTMLAttributes<HTMLDivElement> {}\n\n/** Контент мобильного Dropdown. */\nexport const DropdownMobileInner = React.forwardRef<HTMLDivElement, IDropdownMobileInnerProps>(\n (\n {\n children,\n className,\n opened: openedProps,\n opening: openingProps,\n closing,\n setOpened,\n setClosing,\n setOpening,\n ...htmlAttributes\n },\n ref,\n ) => {\n // OpeningState после рендера становится равен openingProps. Чтобы появилась анимация открытия, сначала нужно отрендерить элемент в закрытом виде.\n const [openingState, setOpeningState] = useState(false);\n const [openedState, setOpenedState] = useState(false);\n const { scopeClassName } = useToken();\n\n useEffect(() => {\n const timeoutId = setTimeout(() => setOpeningState(openingProps));\n\n return () => clearTimeout(timeoutId);\n }, [openingProps]);\n\n useEffect(() => {\n const timeoutId = setTimeout(() => setOpenedState(openedProps));\n\n return () => clearTimeout(timeoutId);\n }, [openedProps]);\n\n const classNamesWrapper = clsx(styles.dropdownMobileWrapper, scopeClassName, className);\n\n const classNamesBackDrop = clsx(styles.dropdownMobileBackdrop, {\n [styles.closing]: closing,\n [styles.opened]: openedState,\n [styles.opening]: openingState,\n });\n\n const classNamesContent = clsx(styles.dropdownMobile, {\n [styles.closing]: closing,\n [styles.opened]: openedState,\n [styles.opening]: openingState,\n });\n\n const handleTransitionEnd = (event: React.TransitionEvent<HTMLDivElement>) => {\n const { target, currentTarget } = event;\n\n if (target === currentTarget) {\n if (closing) {\n setClosing(false);\n } else if (openingProps) {\n setOpening(false);\n }\n }\n };\n\n /** Функция закрытия DropdownMobile. */\n const closeDropdown = () => {\n if (openedProps) {\n setOpened(false);\n }\n };\n\n if (!openingProps && !openedProps && !closing) {\n return null;\n }\n\n return (\n <div className={classNamesWrapper}>\n <div\n className={classNamesBackDrop}\n onTransitionEnd={handleTransitionEnd}\n onTouchStart={closeDropdown}\n onMouseDown={closeDropdown}\n />\n <div className={classNamesContent} ref={ref} {...htmlAttributes}>\n {children}\n </div>\n </div>\n );\n },\n);\n\nDropdownMobileInner.displayName = \"DropdownMobileInner\";\n"],"names":[],"mappings":";;;;;AAUO,MAAM,sBAAsB,MAAM;AAAA,EACrC,CACI;AAAA,IACI;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEP,QACC;AAED,UAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,UAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,UAAM,EAAE,eAAA,IAAmB,SAAA;AAE3B,cAAU,MAAM;AACZ,YAAM,YAAY,WAAW,MAAM,gBAAgB,YAAY,CAAC;AAEhE,aAAO,MAAM,aAAa,SAAS;AAAA,IACvC,GAAG,CAAC,YAAY,CAAC;AAEjB,cAAU,MAAM;AACZ,YAAM,YAAY,WAAW,MAAM,eAAe,WAAW,CAAC;AAE9D,aAAO,MAAM,aAAa,SAAS;AAAA,IACvC,GAAG,CAAC,WAAW,CAAC;AAEhB,UAAM,oBAAoB,KAAK,OAAO,uBAAuB,gBAAgB,SAAS;AAEtF,UAAM,qBAAqB,KAAK,OAAO,wBAAwB;AAAA,MAC3D,CAAC,OAAO,OAAO,GAAG;AAAA,MAClB,CAAC,OAAO,MAAM,GAAG;AAAA,MACjB,CAAC,OAAO,OAAO,GAAG;AAAA,IAAA,CACrB;AAED,UAAM,oBAAoB,KAAK,OAAO,gBAAgB;AAAA,MAClD,CAAC,OAAO,OAAO,GAAG;AAAA,MAClB,CAAC,OAAO,MAAM,GAAG;AAAA,MACjB,CAAC,OAAO,OAAO,GAAG;AAAA,IAAA,CACrB;AAED,UAAM,sBAAsB,CAAC,UAAiD;AAC1E,YAAM,EAAE,QAAQ,cAAA,IAAkB;AAElC,UAAI,WAAW,eAAe;AAC1B,YAAI,SAAS;AACT,qBAAW,KAAK;AAAA,QACpB,WAAW,cAAc;AACrB,qBAAW,KAAK;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ;AAGA,UAAM,gBAAgB,MAAM;AACxB,UAAI,aAAa;AACb,kBAAU,KAAK;AAAA,MACnB;AAAA,IACJ;AAEA,QAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS;AAC3C,aAAO;AAAA,IACX;AAEA,WACI,qBAAC,OAAA,EAAI,WAAW,mBACZ,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAW;AAAA,UACX,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,aAAa;AAAA,QAAA;AAAA,MAAA;AAAA,0BAEhB,OAAA,EAAI,WAAW,mBAAmB,KAAW,GAAG,gBAC5C,SAAA,CACL;AAAA,IAAA,GACJ;AAAA,EAER;AACJ;AAEA,oBAAoB,cAAc;"}
@@ -1,7 +1,7 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import React from "react";
3
- import { c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
4
- const dropdownMobileInput = "dropdownMobileInput__0cdf712b";
3
+ import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
4
+ const dropdownMobileInput = "dropdownMobileInput__e57ad2c3";
5
5
  const styles = {
6
6
  dropdownMobileInput
7
7
  };
@@ -1,17 +1,17 @@
1
1
  import { jsxs, jsx } from "react/jsx-runtime";
2
2
  import React, { useState } from "react";
3
- import { u as uniqueId, c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
4
3
  import { LoaderSmall } from "../../Loader/LoaderSmall/LoaderSmall.js";
5
4
  import { ELoaderSmallTheme } from "../../Loader/LoaderSmall/enum.js";
6
5
  import "../../Loader/LoaderMiddle/LoaderMiddle.js";
7
6
  import { EComponentSize } from "../../../enums/EComponentSize.js";
8
7
  import { DropdownMobileListItem } from "./DropdownMobileListItem.js";
9
- import { s as styles } from "../../../chunks/DropdownMobile.module-DUiUSr13.js";
8
+ import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
9
+ import { u as uniqueId } from "../../../chunks/vendor-BtZO8a0z.js";
10
10
  const DropdownMobileList = React.forwardRef(
11
11
  ({ children, className, loading, ...htmlAttributes }, ref) => {
12
12
  const [loaderId] = useState(() => uniqueId());
13
13
  const renderLoaderItem = () => /* @__PURE__ */ jsx(DropdownMobileListItem, { id: loaderId, className: styles.dropdownMobileListLoader, children: /* @__PURE__ */ jsx(LoaderSmall, { theme: ELoaderSmallTheme.BRAND, size: EComponentSize.MD }) });
14
- return /* @__PURE__ */ jsxs("div", { className: clsx(styles.dropdownMobileList, className), role: "listbox", ...htmlAttributes, ref, children: [
14
+ return /* @__PURE__ */ jsxs("div", { className, role: "listbox", ...htmlAttributes, ref, children: [
15
15
  children,
16
16
  loading && renderLoaderItem()
17
17
  ] });