@sberbusiness/triplex-next 0.51.0 → 0.53.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 (612) hide show
  1. package/chunks/{AlertProcessSpoiler-Ctx-2wgy.js → AlertProcessSpoiler-STpCfJuF.js} +16 -16
  2. package/chunks/{AlertProcessSpoiler-Ctx-2wgy.js.map → AlertProcessSpoiler-STpCfJuF.js.map} +1 -1
  3. package/chunks/{CalendarViewItem-CvdMWlYm.js → CalendarViewItem-BDetBtIJ.js} +20 -20
  4. package/chunks/{CalendarViewItem-CvdMWlYm.js.map → CalendarViewItem-BDetBtIJ.js.map} +1 -1
  5. package/chunks/Card.module-BDKegNQB.js +32 -0
  6. package/chunks/Card.module-BDKegNQB.js.map +1 -0
  7. package/chunks/Carousel.module-ugT1KfWo.js +26 -0
  8. package/chunks/Carousel.module-ugT1KfWo.js.map +1 -0
  9. package/chunks/CheckboxTreeExtended.module-DIkMbiFc.js +24 -0
  10. package/chunks/CheckboxTreeExtended.module-DIkMbiFc.js.map +1 -0
  11. package/chunks/{Chip-SVIdZjNC.js → Chip-DOtRbYR5.js} +16 -16
  12. package/chunks/{Chip-SVIdZjNC.js.map → Chip-DOtRbYR5.js.map} +1 -1
  13. package/chunks/Confirm.module-Bd5pQ3Lp.js +24 -0
  14. package/chunks/Confirm.module-Bd5pQ3Lp.js.map +1 -0
  15. package/chunks/{DropdownListItem-DbG8a_Rw.js → DropdownListItem-DtBDNMDu.js} +10 -10
  16. package/chunks/{DropdownListItem-DbG8a_Rw.js.map → DropdownListItem-DtBDNMDu.js.map} +1 -1
  17. package/chunks/Footer.module-D6LiswG5.js +12 -0
  18. package/chunks/Footer.module-D6LiswG5.js.map +1 -0
  19. package/chunks/{HeaderLayoutSidebar.module-BvCPxkNk.js → HeaderLayoutSidebar.module-DvuWrb8r.js} +4 -4
  20. package/chunks/HeaderLayoutSidebar.module-DvuWrb8r.js.map +1 -0
  21. package/chunks/HeaderTabs.module-49s0no12.js +12 -0
  22. package/chunks/HeaderTabs.module-49s0no12.js.map +1 -0
  23. package/chunks/{HeaderTitle.module-gbla84yG.js → HeaderTitle.module-BoICKOHo.js} +4 -4
  24. package/chunks/HeaderTitle.module-BoICKOHo.js.map +1 -0
  25. package/chunks/ImageGalleryExtendedMain.module-CJbkuDsY.js +28 -0
  26. package/chunks/ImageGalleryExtendedMain.module-CJbkuDsY.js.map +1 -0
  27. package/chunks/{ImageGalleryExtendedThumb-eZ1U9hun.js → ImageGalleryExtendedThumb-DaYWIal7.js} +5 -5
  28. package/chunks/{ImageGalleryExtendedThumb-eZ1U9hun.js.map → ImageGalleryExtendedThumb-DaYWIal7.js.map} +1 -1
  29. package/chunks/IslandAccordion.module-DulT1VwH.js +44 -0
  30. package/chunks/IslandAccordion.module-DulT1VwH.js.map +1 -0
  31. package/chunks/IslandWidgetFooter.module-DTifP3wy.js +18 -0
  32. package/chunks/IslandWidgetFooter.module-DTifP3wy.js.map +1 -0
  33. package/chunks/IslandWidgetHeader.module-E-Y7Ydgr.js +28 -0
  34. package/chunks/IslandWidgetHeader.module-E-Y7Ydgr.js.map +1 -0
  35. package/chunks/{LightBoxContent-CWtp-PJm.js → LightBoxContent-Cb1g3JDX.js} +16 -16
  36. package/chunks/{LightBoxContent-CWtp-PJm.js.map → LightBoxContent-Cb1g3JDX.js.map} +1 -1
  37. package/chunks/LightBoxControls.module-CKff0gTS.js +26 -0
  38. package/chunks/LightBoxControls.module-CKff0gTS.js.map +1 -0
  39. package/chunks/{LightBoxSideOverlayClose.module-Bu0mbQ2E.js → LightBoxSideOverlayClose.module-DWKvzJvF.js} +4 -4
  40. package/chunks/LightBoxSideOverlayClose.module-DWKvzJvF.js.map +1 -0
  41. package/chunks/{ListItemControlsButton-EF-ovU6G.js → ListItemControlsButton-CTZwACLC.js} +9 -9
  42. package/chunks/{ListItemControlsButton-EF-ovU6G.js.map → ListItemControlsButton-CTZwACLC.js.map} +1 -1
  43. package/chunks/ListItemTail.module-Dj4lU9aU.js +18 -0
  44. package/chunks/ListItemTail.module-Dj4lU9aU.js.map +1 -0
  45. package/chunks/ListMasterFooter.module-MxUcjmi_.js +14 -0
  46. package/chunks/ListMasterFooter.module-MxUcjmi_.js.map +1 -0
  47. package/chunks/ModalWindow.module-DACUI-Ug.js +28 -0
  48. package/chunks/ModalWindow.module-DACUI-Ug.js.map +1 -0
  49. package/chunks/Notification.module-DvJpk7mJ.js +34 -0
  50. package/chunks/Notification.module-DvJpk7mJ.js.map +1 -0
  51. package/chunks/Overlay.module-BUiSNz4S.js +30 -0
  52. package/chunks/Overlay.module-BUiSNz4S.js.map +1 -0
  53. package/chunks/Page.module-BcGCfrAq.js +17 -0
  54. package/chunks/Page.module-BcGCfrAq.js.map +1 -0
  55. package/chunks/Puller.module-D99aZDfb.js +38 -0
  56. package/chunks/Puller.module-D99aZDfb.js.map +1 -0
  57. package/chunks/SMSField.module-DsssNQ7k.js +30 -0
  58. package/chunks/SMSField.module-DsssNQ7k.js.map +1 -0
  59. package/chunks/SliderExtendedMarks.module-DqaV_gtD.js +24 -0
  60. package/chunks/SliderExtendedMarks.module-DqaV_gtD.js.map +1 -0
  61. package/chunks/{SliderExtendedRail-BLBXp_mr.js → SliderExtendedRail-C9_AzU7r.js} +5 -5
  62. package/chunks/{SliderExtendedRail-BLBXp_mr.js.map → SliderExtendedRail-C9_AzU7r.js.map} +1 -1
  63. package/chunks/StatusTracker.module-BlqC0dZw.js +44 -0
  64. package/chunks/StatusTracker.module-BlqC0dZw.js.map +1 -0
  65. package/chunks/{StepperStepArrowBorder-BAh7ttCH.js → StepperStepArrowBorder-DxBecxv9.js} +16 -16
  66. package/chunks/{StepperStepArrowBorder-BAh7ttCH.js.map → StepperStepArrowBorder-DxBecxv9.js.map} +1 -1
  67. package/chunks/{SuggestFieldMobileDropdownHint-Dwl6zzq8.js → SuggestFieldMobileDropdownHint-MIGePHD9.js} +3 -3
  68. package/chunks/{SuggestFieldMobileDropdownHint-Dwl6zzq8.js.map → SuggestFieldMobileDropdownHint-MIGePHD9.js.map} +1 -1
  69. package/chunks/TableFooter.module-CtnIdZfR.js +22 -0
  70. package/chunks/TableFooter.module-CtnIdZfR.js.map +1 -0
  71. package/chunks/TabsExtended.module-CUIB5d3J.js +26 -0
  72. package/chunks/TabsExtended.module-CUIB5d3J.js.map +1 -0
  73. package/chunks/TabsLine.module-eEenlMUm.js +36 -0
  74. package/chunks/TabsLine.module-eEenlMUm.js.map +1 -0
  75. package/chunks/TooltipDesktop.module-DItC194g.js +32 -0
  76. package/chunks/TooltipDesktop.module-DItC194g.js.map +1 -0
  77. package/chunks/TreeView.module-D7TFEY8e.js +12 -0
  78. package/chunks/TreeView.module-D7TFEY8e.js.map +1 -0
  79. package/chunks/{UploadZoneInput-dlRcClcR.js → UploadZoneInput-CEMLfPD2.js} +5 -5
  80. package/chunks/{UploadZoneInput-dlRcClcR.js.map → UploadZoneInput-CEMLfPD2.js.map} +1 -1
  81. package/chunks/{constants-D9y0PXCn.js → constants-C_cUBgTm.js} +27 -27
  82. package/chunks/{constants-D9y0PXCn.js.map → constants-C_cUBgTm.js.map} +1 -1
  83. package/chunks/{utils-C5ANP-lJ.js → utils-CR7AKWB9.js} +6 -6
  84. package/chunks/{utils-C5ANP-lJ.js.map → utils-CR7AKWB9.js.map} +1 -1
  85. package/chunks/{utils-EB3nf6Gq.js → utils-CjT9HwBp.js} +10 -10
  86. package/chunks/{utils-EB3nf6Gq.js.map → utils-CjT9HwBp.js.map} +1 -1
  87. package/chunks/{utils-TRZEn9vv.js → utils-CrdZr25q.js} +27 -27
  88. package/chunks/{utils-TRZEn9vv.js.map → utils-CrdZr25q.js.map} +1 -1
  89. package/chunks/{utils-NWb0RM-6.js → utils-CuHxUheL.js} +11 -11
  90. package/chunks/{utils-NWb0RM-6.js.map → utils-CuHxUheL.js.map} +1 -1
  91. package/components/Alert/AlertContext/AlertContext.js +7 -7
  92. package/components/Alert/AlertProcess/AlertProcess.js +2 -2
  93. package/components/Alert/AlertProcess/components/AlertProcessSpoiler.js +1 -1
  94. package/components/Amount/Amount.js +2 -2
  95. package/components/AmountField/AmountField.js +8 -8
  96. package/components/Avatar/Avatar.js +13 -13
  97. package/components/Badge/Badge.js +4 -4
  98. package/components/Badge/BadgeDot.js +4 -4
  99. package/components/Badge/components/BadgeContent.js +6 -6
  100. package/components/Badge/components/BadgePostfix.js +1 -1
  101. package/components/Badge/components/BadgePrefix.js +1 -1
  102. package/components/Body/Body.js +3 -3
  103. package/components/Button/Button.js +20 -20
  104. package/components/Button/ButtonBase.js +1 -1
  105. package/components/Button/ButtonDropdown.js +22 -28
  106. package/components/Button/ButtonDropdown.js.map +1 -1
  107. package/components/Button/ButtonDropdownExtended.js +2 -2
  108. package/components/Button/ButtonIcon.js +3 -3
  109. package/components/Calendar/Calendar.js +4 -4
  110. package/components/Calendar/components/CalendarControls.js +1 -1
  111. package/components/Calendar/components/CalendarFooter.js +1 -1
  112. package/components/Calendar/components/CalendarViewDays.js +1 -1
  113. package/components/Calendar/components/CalendarViewItem.js +1 -1
  114. package/components/Calendar/components/CalendarViewMonths.js +1 -1
  115. package/components/Calendar/components/CalendarViewYears.js +1 -1
  116. package/components/Card/CardAction.js +5 -5
  117. package/components/Card/CardStatic.js +2 -2
  118. package/components/Card/components/CardContent/CardContent.js +1 -1
  119. package/components/Card/components/CardContent/components/CardContentBody.js +1 -1
  120. package/components/Card/components/CardContent/components/CardContentFooter.js +1 -1
  121. package/components/Card/components/CardContent/components/CardContentHeader.js +1 -1
  122. package/components/Card/components/CardMedia.js +1 -1
  123. package/components/Card/utils.js +1 -1
  124. package/components/Carousel/Carousel.js +10 -6
  125. package/components/Carousel/Carousel.js.map +1 -1
  126. package/components/Carousel/CarouselButton.js +40 -35
  127. package/components/Carousel/CarouselButton.js.map +1 -1
  128. package/components/Carousel/CarouselIndicators.js +1 -1
  129. package/components/Carousel/CarouselItem.js +2 -2
  130. package/components/Carousel/CarouselItem.js.map +1 -1
  131. package/components/Carousel/CarouselTrack.js +1 -1
  132. package/components/Carousel/CarouselViewport.js +75 -105
  133. package/components/Carousel/CarouselViewport.js.map +1 -1
  134. package/components/CarouselExtended/CarouselExtended.js +1 -1
  135. package/components/Checkbox/Checkbox.js +10 -10
  136. package/components/Checkbox/CheckboxXGroup.js +8 -8
  137. package/components/Checkbox/CheckboxYGroup.js +1 -1
  138. package/components/CheckboxTreeExtended/CheckboxTreeExtended.js +1 -1
  139. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedArrow.js +1 -1
  140. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedCheckbox.js +1 -1
  141. package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedNode.js +1 -1
  142. package/components/Chip/Chip.js +1 -1
  143. package/components/Chip/ChipClearButton.js +1 -1
  144. package/components/Chip/ChipDatePicker/ChipDatePicker.js +5 -5
  145. package/components/Chip/ChipDatePicker/ChipDatePicker.js.map +1 -1
  146. package/components/Chip/ChipDatePicker/ChipDatePickerTarget.js +1 -1
  147. package/components/Chip/ChipDatePicker/ChipDatePickerTarget.js.map +1 -1
  148. package/components/Chip/ChipDropdownArrow.js +2 -2
  149. package/components/Chip/ChipIcon.js +1 -1
  150. package/components/Chip/ChipMonthYearPicker/ChipMonthYearPicker.js +1 -1
  151. package/components/Chip/ChipMonthYearPicker/ChipMonthYearPickerTarget.js +1 -1
  152. package/components/Chip/ChipMultiselect.js +1 -1
  153. package/components/Chip/ChipOptions.js +2 -2
  154. package/components/Chip/ChipSelect/ChipSelect.js +1 -1
  155. package/components/Chip/ChipSelect/ChipSelect.js.map +1 -1
  156. package/components/Chip/ChipSelect/ChipSelectTarget.js +1 -1
  157. package/components/Chip/ChipSort.js +1 -1
  158. package/components/Chip/ChipSuggest/ChipSuggest.js +1 -1
  159. package/components/Chip/ChipSuggest/ChipSuggestDropdown.js +2 -13
  160. package/components/Chip/ChipSuggest/ChipSuggestDropdown.js.map +1 -1
  161. package/components/Chip/ChipSuggest/ChipSuggestTarget.js +1 -1
  162. package/components/Chip/ChipSuggest/desktop/ChipSuggestDesktopDropdownField.js +1 -1
  163. package/components/Chip/index.js +1 -1
  164. package/components/ChipGroup/ChipGroup.js +7 -7
  165. package/components/Col/Col.js +132 -132
  166. package/components/CollapsibleTree/CollapsibleTree.js +1 -1
  167. package/components/CollapsibleTree/components/CollapsibleTreeLeafContent.js +1 -1
  168. package/components/CollapsibleTree/components/CollapsibleTreeLeafNode.js +1 -1
  169. package/components/CollapsibleTree/components/CollapsibleTreeNodeHeader.js +4 -4
  170. package/components/CollapsibleTreeExtended/components/CollapsibleTreeExtendedNode.js +1 -1
  171. package/components/Confirm/Confirm.js +1 -1
  172. package/components/Confirm/components/ConfirmCloseButton.js +1 -1
  173. package/components/Confirm/components/ConfirmContent.js +1 -1
  174. package/components/Confirm/components/ConfirmContentTitle.js +1 -1
  175. package/components/Confirm/components/ConfirmControls.js +1 -1
  176. package/components/DateField/DateField.js +3 -3
  177. package/components/DateField/DateField.js.map +1 -1
  178. package/components/DateField/DateFieldTarget.js +4 -4
  179. package/components/DatePickerExtended/DatePickerExtended.js +3 -14
  180. package/components/DatePickerExtended/DatePickerExtended.js.map +1 -1
  181. package/components/DatePickerExtended/DatePickerExtendedDropdown.js +13 -13
  182. package/components/DatePickerExtended/DatePickerExtendedDropdown.js.map +1 -1
  183. package/components/DateRange/DateRange.js +20 -16
  184. package/components/DateRange/DateRange.js.map +1 -1
  185. package/components/DateRange/utils.js +10 -3
  186. package/components/DateRange/utils.js.map +1 -1
  187. package/components/DesignTokens/DesignTokenUtils.js +1 -1
  188. package/components/DesignTokens/DesignTokensComponents.js +9 -10
  189. package/components/DesignTokens/DesignTokensComponents.js.map +1 -1
  190. package/components/DesignTokens/DesignTokensComponentsThemeDark.js +9 -10
  191. package/components/DesignTokens/DesignTokensComponentsThemeDark.js.map +1 -1
  192. package/components/DesignTokens/components/Puller.js +24 -0
  193. package/components/DesignTokens/components/Puller.js.map +1 -0
  194. package/components/DesignTokens/components/PullerList.js +12 -0
  195. package/components/DesignTokens/components/PullerList.js.map +1 -0
  196. package/components/DesignTokens/components/SmartSpot.js +57 -0
  197. package/components/DesignTokens/components/SmartSpot.js.map +1 -0
  198. package/components/DesignTokens/components/index.js +9 -6
  199. package/components/DesignTokens/components/index.js.map +1 -1
  200. package/components/DesignTokens/types/DesignTokensTypes.js.map +1 -1
  201. package/components/Divider/Divider.js +17 -17
  202. package/components/DocumentNumberEdit/DocumentNumberEdit.js +3 -3
  203. package/components/Dropdown/Dropdown.js +4 -4
  204. package/components/Dropdown/Dropdown.js.map +1 -1
  205. package/components/Dropdown/desktop/DropdownDesktop.js +10 -10
  206. package/components/Dropdown/desktop/DropdownDesktop.js.map +1 -1
  207. package/components/Dropdown/desktop/DropdownList.js +1 -1
  208. package/components/Dropdown/desktop/DropdownListItem.js +1 -1
  209. package/components/Dropdown/desktop/index.js +1 -1
  210. package/components/Dropdown/index.js +1 -21
  211. package/components/Dropdown/index.js.map +1 -1
  212. package/components/Ellipsis/Ellipsis.js +3 -3
  213. package/components/EmptyView/EmptyView.js +4 -4
  214. package/components/ExpandAnimation/ExpandAnimation.js +1 -1
  215. package/components/Footer/Footer.js +1 -1
  216. package/components/Footer/components/FooterDescription.js +1 -1
  217. package/components/Footer/components/FooterDescriptionContent.js +1 -1
  218. package/components/Footer/components/FooterDescriptionControls.js +1 -1
  219. package/components/FormField/FormField.js +11 -11
  220. package/components/FormField/FormFieldContext.js +1 -1
  221. package/components/FormField/FormFieldContext.js.map +1 -1
  222. package/components/FormField/components/FormFieldClear.js +1 -1
  223. package/components/FormField/components/FormFieldCounter.js +1 -1
  224. package/components/FormField/components/FormFieldDescription.js +2 -2
  225. package/components/FormField/components/FormFieldInput.js +4 -4
  226. package/components/FormField/components/FormFieldLabel.js +7 -7
  227. package/components/FormField/components/FormFieldMaskedInput.js +8 -8
  228. package/components/FormField/components/FormFieldPostfix.js +1 -1
  229. package/components/FormField/components/FormFieldPrefix.js +1 -1
  230. package/components/FormField/components/FormFieldTarget.js +8 -8
  231. package/components/FormField/components/FormFieldTextarea.js +4 -4
  232. package/components/Gap/Gap.js +8 -8
  233. package/components/Header/Header.js +1 -1
  234. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebar.js +1 -1
  235. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarContent.js +1 -1
  236. package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarSidebar.js +1 -1
  237. package/components/Header/components/HeaderSubheader/HeaderSubheader.js +2 -2
  238. package/components/Header/components/HeaderTabs/HeaderTabs.js +1 -1
  239. package/components/Header/components/HeaderTabs/HeaderTabsContent.js +1 -1
  240. package/components/Header/components/HeaderTabs/HeaderTabsControls.js +1 -1
  241. package/components/Header/components/HeaderTitle/HeaderTitle.js +1 -1
  242. package/components/Header/components/HeaderTitle/HeaderTitleContent.js +1 -1
  243. package/components/Header/components/HeaderTitle/HeaderTitleControls.js +1 -1
  244. package/components/HelpBox/HelpBox.js +1 -1
  245. package/components/IconWrapper/IconWrapper.js +2 -2
  246. package/components/ImageGallery/ImageGallery.js +1 -1
  247. package/components/ImageGalleryExtended/ImageGalleryExtended.js +2 -2
  248. package/components/ImageGalleryExtended/components/ImageGalleryExtendedArrow.js +1 -1
  249. package/components/ImageGalleryExtended/components/ImageGalleryExtendedMain.js +1 -1
  250. package/components/ImageGalleryExtended/components/ImageGalleryExtendedPageIndicators.js +1 -1
  251. package/components/ImageGalleryExtended/components/ImageGalleryExtendedSlide.js +1 -1
  252. package/components/ImageGalleryExtended/components/ImageGalleryExtendedSwipeTrack.js +1 -1
  253. package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumb.js +1 -1
  254. package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumbnails.js +1 -1
  255. package/components/ImageGalleryExtended/components/index.js +1 -1
  256. package/components/ImageGalleryExtended/index.js +1 -1
  257. package/components/Island/Island.js +1 -1
  258. package/components/Island/components/IslandBody.js +1 -1
  259. package/components/Island/components/IslandFooter.js +1 -1
  260. package/components/Island/components/IslandHeader.js +1 -1
  261. package/components/Island/utils.js +1 -1
  262. package/components/IslandAccordion/IslandAccordion.js +2 -2
  263. package/components/IslandAccordion/components/IslandAccordionContent.js +1 -1
  264. package/components/IslandAccordion/components/IslandAccordionFooter.js +1 -1
  265. package/components/IslandAccordion/components/IslandAccordionItem.js +2 -2
  266. package/components/IslandWidget/IslandWidget.js +3 -3
  267. package/components/IslandWidget/components/IslandWidgetBody.js +4 -4
  268. package/components/IslandWidget/components/IslandWidgetExtraFooter.js +1 -1
  269. package/components/IslandWidget/components/IslandWidgetFooter.js +1 -1
  270. package/components/IslandWidget/components/IslandWidgetFooterContent.js +1 -1
  271. package/components/IslandWidget/components/IslandWidgetFooterControls.js +1 -1
  272. package/components/IslandWidget/components/IslandWidgetHeader.js +1 -1
  273. package/components/IslandWidget/components/IslandWidgetHeaderControls.js +1 -1
  274. package/components/IslandWidget/components/IslandWidgetHeaderDescription.js +1 -1
  275. package/components/IslandWidget/components/IslandWidgetHeaderTitle.js +1 -1
  276. package/components/IslandWidget/components/IslandWidgetWrapper.js +1 -1
  277. package/components/LightBox/LightBox.js +5 -5
  278. package/components/LightBox/LightBoxContent.js +1 -1
  279. package/components/LightBox/LightBoxControls/LightBoxArrow.js +1 -1
  280. package/components/LightBox/LightBoxControls/LightBoxClose.js +1 -1
  281. package/components/LightBox/LightBoxControls/LightBoxControls.js +1 -1
  282. package/components/LightBox/LightBoxControls/LightBoxNext.js +1 -1
  283. package/components/LightBox/LightBoxControls/LightBoxPrev.js +1 -1
  284. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlay.js +12 -12
  285. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseDesktop.js +1 -1
  286. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseMobile.js +1 -1
  287. package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayLoader.js +1 -1
  288. package/components/LightBox/LightBoxSidebars/LightBoxLeftSidebar.js +3 -3
  289. package/components/LightBox/LightBoxSidebars/LightBoxRightSidebar.js +3 -3
  290. package/components/Link/Link.js +5 -5
  291. package/components/List/List.js +3 -3
  292. package/components/List/components/ListActionItem.js +1 -1
  293. package/components/List/components/ListEmptyState.js +1 -1
  294. package/components/List/components/ListItem.js +1 -1
  295. package/components/List/components/ListItemContent.js +4 -4
  296. package/components/List/components/ListItemControls.js +1 -1
  297. package/components/List/components/ListItemControlsButton.js +1 -1
  298. package/components/List/components/ListItemControlsButtonDropdown.js +15 -21
  299. package/components/List/components/ListItemControlsButtonDropdown.js.map +1 -1
  300. package/components/List/components/ListItemLoading.js +1 -1
  301. package/components/List/components/ListItemSelectable.js +6 -6
  302. package/components/List/components/ListItemTailLeft.js +1 -1
  303. package/components/List/components/ListItemTailRight.js +1 -1
  304. package/components/List/components/ListSortableItem.js +2 -2
  305. package/components/List/components/ListSortableItemControls.js +1 -1
  306. package/components/List/components/ListSortableItemTarget.js +4 -4
  307. package/components/List/components/ListTableItem.js +3 -3
  308. package/components/List/index.js +1 -1
  309. package/components/ListMaster/ListMaster.js +1 -1
  310. package/components/ListMaster/components/ListMasterBody.js +1 -1
  311. package/components/ListMaster/components/ListMasterChipGroup.js +1 -1
  312. package/components/ListMaster/components/ListMasterFooter.js +1 -1
  313. package/components/ListMaster/components/ListMasterFooterControls.js +1 -1
  314. package/components/ListMaster/components/ListMasterFooterDescription.js +1 -1
  315. package/components/ListMaster/components/ListMasterHeader.js +2 -2
  316. package/components/ListMaster/components/SelectionControls.js +2 -2
  317. package/components/Loader/LoaderMiddle/LoaderMiddle.js +8 -8
  318. package/components/Loader/LoaderSmall/LoaderSmall.js +10 -10
  319. package/components/LoaderScreen/LoaderScreen.js +5 -5
  320. package/components/Marker/Marker.js +1 -1
  321. package/components/Marker/utils.js +1 -1
  322. package/components/MarkerStatus/MarkerStatus.js +7 -7
  323. package/components/ModalWindow/ModalWindow.js +1 -1
  324. package/components/ModalWindow/components/ModalWindowBody.js +1 -1
  325. package/components/ModalWindow/components/ModalWindowClose.js +1 -1
  326. package/components/ModalWindow/components/ModalWindowContent.js +1 -1
  327. package/components/ModalWindow/components/ModalWindowHeader.js +1 -1
  328. package/components/ModalWindow/components/ModalWindowViewManager.js +1 -1
  329. package/components/MonthYearField/MonthYearFieldTarget.js +4 -4
  330. package/components/MonthYearRange/MonthYearRange.js +19 -24
  331. package/components/MonthYearRange/MonthYearRange.js.map +1 -1
  332. package/components/MonthYearRange/types.js +2 -0
  333. package/components/MonthYearRange/types.js.map +1 -0
  334. package/components/MultiselectField/components/MultiselectFieldDropdown.js +4 -15
  335. package/components/MultiselectField/components/MultiselectFieldDropdown.js.map +1 -1
  336. package/components/MultiselectField/components/MultiselectFieldDropdownContent.js +5 -5
  337. package/components/MultiselectField/components/MultiselectFieldDropdownFooter.js +1 -1
  338. package/components/MultiselectField/components/MultiselectFieldDropdownHeader.js +1 -1
  339. package/components/Notification/Notification.js +2 -2
  340. package/components/Notification/NotificationGrouped.js +1 -1
  341. package/components/Notification/components/NotificationBody.js +1 -1
  342. package/components/Notification/components/NotificationBodyList.js +1 -1
  343. package/components/Notification/components/NotificationClose.js +1 -1
  344. package/components/Notification/components/NotificationFooter.js +1 -1
  345. package/components/Notification/components/NotificationGroupedFooter.js +1 -1
  346. package/components/Notification/components/NotificationHeader.js +1 -1
  347. package/components/Notification/components/NotificationIcon.js +1 -1
  348. package/components/Notification/components/NotificationTime.js +1 -1
  349. package/components/OrderedList/OrderedList.js +2 -2
  350. package/components/OrderedList/OrderedListItem.js +2 -2
  351. package/components/Overlay/Overlay.js +1 -1
  352. package/components/Overlay/OverlayMask.js +1 -1
  353. package/components/Overlay/OverlayPanel.js +1 -1
  354. package/components/Page/Page.js +1 -1
  355. package/components/Page/components/BodyPage.js +7 -7
  356. package/components/Page/components/FooterPage.js +1 -1
  357. package/components/Page/components/HeaderPage.js +1 -1
  358. package/components/PageIndicators/PageIndicators.js +5 -5
  359. package/components/Pagination/components/PaginationExtended.js +2 -2
  360. package/components/Pagination/components/PaginationNavigationButton.js +2 -2
  361. package/components/Pagination/components/PaginationNavigationExtended.js +1 -1
  362. package/components/Pagination/components/PaginationPageButton.js +2 -2
  363. package/components/Pagination/components/PaginationPageEllipsis.js +1 -1
  364. package/components/Pagination/components/PaginationSelect.js +2 -2
  365. package/components/Puller/Puller.js +21 -0
  366. package/components/Puller/Puller.js.map +1 -0
  367. package/components/Puller/PullerBody.js +12 -0
  368. package/components/Puller/PullerBody.js.map +1 -0
  369. package/components/Puller/PullerClose.js +10 -0
  370. package/components/Puller/PullerClose.js.map +1 -0
  371. package/components/Puller/PullerFooter.js +12 -0
  372. package/components/Puller/PullerFooter.js.map +1 -0
  373. package/components/Puller/PullerHeader.js +15 -0
  374. package/components/Puller/PullerHeader.js.map +1 -0
  375. package/components/{Dropdown/mobile/DropdownMobileInner.js → Puller/PullerInner.js} +18 -25
  376. package/components/Puller/PullerInner.js.map +1 -0
  377. package/components/Puller/PullerInput.js +13 -0
  378. package/components/Puller/PullerInput.js.map +1 -0
  379. package/components/Puller/PullerList.js +18 -0
  380. package/components/Puller/PullerList.js.map +1 -0
  381. package/components/{Dropdown/mobile/DropdownMobileListItem.js → Puller/PullerListItem.js} +15 -14
  382. package/components/Puller/PullerListItem.js.map +1 -0
  383. package/components/Puller/PullerLoader.js +20 -0
  384. package/components/Puller/PullerLoader.js.map +1 -0
  385. package/components/Puller/PullerMaskedInput.js +19 -0
  386. package/components/Puller/PullerMaskedInput.js.map +1 -0
  387. package/components/Puller/index.js +23 -0
  388. package/components/Radio/Radio.js +9 -9
  389. package/components/Radio/RadioXGroup.js +8 -8
  390. package/components/Radio/RadioYGroup.js +1 -1
  391. package/components/Row/Row.js +4 -4
  392. package/components/SMSField/SMSField.js +2 -2
  393. package/components/SMSField/components/RefreshIcon.js +1 -1
  394. package/components/SMSField/components/SMSFieldInput.js +1 -1
  395. package/components/SMSField/components/SMSFieldRefresh.js +1 -1
  396. package/components/SMSField/components/SMSFieldSubmit.js +1 -1
  397. package/components/SegmentedControl/SegmentedControl.js +9 -9
  398. package/components/SegmentedControl/SegmentedControlSegment.js +3 -3
  399. package/components/SelectExtendedField/SelectExtendedField.js +1 -1
  400. package/components/SelectExtendedField/components/SelectExtendedFieldDropdown.js +1 -12
  401. package/components/SelectExtendedField/components/SelectExtendedFieldDropdown.js.map +1 -1
  402. package/components/SelectExtendedField/components/SelectExtendedFieldDropdownDefault.js +12 -17
  403. package/components/SelectExtendedField/components/SelectExtendedFieldDropdownDefault.js.map +1 -1
  404. package/components/SelectExtendedField/components/SelectExtendedFieldTarget.js +7 -7
  405. package/components/SelectField/SelectField.js +1 -12
  406. package/components/SelectField/SelectField.js.map +1 -1
  407. package/components/Skeleton/Skeleton.js +5 -5
  408. package/components/SliderExtended/SliderExtended.js +2 -2
  409. package/components/SliderExtended/components/SliderExtendedDot/SliderExtendedDot.js +5 -5
  410. package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMark.js +1 -1
  411. package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMarks.js +1 -1
  412. package/components/SliderExtended/components/SliderExtendedRail.js +1 -1
  413. package/components/SliderExtended/components/SliderExtendedTooltip/SliderExtendedTooltip.js +4 -4
  414. package/components/SliderExtended/components/SliderExtendedTrack/SliderExtendedTrack.js +6 -6
  415. package/components/SmallInput/SmallInput.js +1 -1
  416. package/components/SmartSpot/SmartSpot.js +110 -0
  417. package/components/SmartSpot/SmartSpot.js.map +1 -0
  418. package/components/SmartSpot/consts.js +47 -0
  419. package/components/SmartSpot/consts.js.map +1 -0
  420. package/components/SmartSpot/enums.js +26 -0
  421. package/components/SmartSpot/enums.js.map +1 -0
  422. package/components/SmartSpot/index.js +9 -0
  423. package/components/SmartSpot/index.js.map +1 -0
  424. package/components/SmartSpot/utils.js +36 -0
  425. package/components/SmartSpot/utils.js.map +1 -0
  426. package/components/Spoiler/Spoiler.js +10 -10
  427. package/components/StatusTracker/StatusTracker.js +2 -2
  428. package/components/StatusTracker/components/StatusTrackerAlert.js +1 -1
  429. package/components/StatusTracker/components/StatusTrackerBody.js +1 -1
  430. package/components/StatusTracker/components/StatusTrackerButton.js +1 -1
  431. package/components/StatusTracker/components/StatusTrackerDescription.js +1 -1
  432. package/components/StatusTracker/components/StatusTrackerFooter.js +1 -1
  433. package/components/StatusTracker/components/StatusTrackerHeader.js +1 -1
  434. package/components/StatusTracker/components/StatusTrackerMedia.js +1 -1
  435. package/components/StatusTracker/components/StatusTrackerStatus.js +1 -1
  436. package/components/StatusTracker/components/StatusTrackerStatusGroup.js +1 -1
  437. package/components/StatusTracker/components/StatusTrackerSum.js +1 -1
  438. package/components/StatusTracker/components/StatusTrackerTitle.js +1 -1
  439. package/components/Step/Step.js +10 -10
  440. package/components/Stepper/Stepper.js +8 -8
  441. package/components/Stepper/StepperExtended.js +1 -1
  442. package/components/Stepper/StepperStep.js +2 -2
  443. package/components/Stepper/StepperStepArrowBorder.js +1 -1
  444. package/components/Suggest/SuggestMobileDropdownContent.js +19 -24
  445. package/components/Suggest/SuggestMobileDropdownContent.js.map +1 -1
  446. package/components/SuggestField/SuggestField.js +1 -1
  447. package/components/SuggestField/desktop/SuggestFieldDesktop.js +1 -10
  448. package/components/SuggestField/desktop/SuggestFieldDesktop.js.map +1 -1
  449. package/components/SuggestField/desktop/SuggestFieldDesktopDropdown.js +1 -12
  450. package/components/SuggestField/desktop/SuggestFieldDesktopDropdown.js.map +1 -1
  451. package/components/SuggestField/index.js +1 -1
  452. package/components/SuggestField/mobile/SuggestFieldMobile.js +1 -1
  453. package/components/SuggestField/mobile/SuggestFieldMobileDropdown.js +19 -19
  454. package/components/SuggestField/mobile/SuggestFieldMobileDropdown.js.map +1 -1
  455. package/components/SuggestField/mobile/SuggestFieldMobileDropdownHint.js +1 -1
  456. package/components/SuggestField/mobile/index.js +1 -1
  457. package/components/SwipeableArea/SwipeableArea.js +8 -8
  458. package/components/Table/ChipPanel.js +1 -1
  459. package/components/Table/ChipPanelLinks.js +1 -1
  460. package/components/Table/FilterPanel.js +2 -2
  461. package/components/Table/MasterTable.js +2 -2
  462. package/components/Table/NoColumns.js +2 -2
  463. package/components/Table/PaginationPanel.js +2 -2
  464. package/components/Table/TableBasic/TableBasic.js +1 -1
  465. package/components/Table/TableBasic/components/TableBasicBody.js +1 -1
  466. package/components/Table/TableBasic/components/TableBasicHeader.js +1 -1
  467. package/components/Table/TableBasic/components/TableBasicRow.js +1 -1
  468. package/components/Table/TableBasicSettings/TableBasicSettings.js +2 -2
  469. package/components/Table/TableBasicSettings/components/ColumnSettingsSortableListItemTarget.js +2 -2
  470. package/components/Table/TableBasicSettings/components/ColumnSettingsStaticListItem.js +1 -1
  471. package/components/Table/TableBasicSettings/components/TableBasicSettingsBody.js +1 -1
  472. package/components/Table/TableBasicSettings/components/TableBasicSettingsFooter.js +1 -1
  473. package/components/Table/TableBasicSettings/components/TableBasicSettingsHeader.js +1 -1
  474. package/components/Table/TableFooter/TableFooter.js +1 -1
  475. package/components/Table/TableFooter/components/TableFooterSummary.js +1 -1
  476. package/components/Table/TableFooter/components/TableFooterSummaryAmount.js +1 -1
  477. package/components/Table/TableFooter/components/TableFooterSummarySelectAllButton.js +1 -1
  478. package/components/Table/TableFooter/components/TableFooterSummarySelectedCount.js +1 -1
  479. package/components/Table/utils.js +1 -1
  480. package/components/Tabs/Tabs.js +8 -8
  481. package/components/TabsExtended/TabsExtended.js +2 -2
  482. package/components/TabsExtended/components/TabsExtendedContent.js +1 -1
  483. package/components/TabsExtended/components/TabsExtendedDropdownWrapper.js +1 -1
  484. package/components/TabsExtended/components/TabsExtendedTab.js +1 -1
  485. package/components/TabsExtended/components/TabsExtendedTabButton.js +1 -1
  486. package/components/TabsExtended/components/TabsExtendedTabsWrapper.js +1 -1
  487. package/components/TabsExtended/utils.js +1 -1
  488. package/components/TabsLine/TabsLine.js +1 -1
  489. package/components/TabsLine/components/TabsLineDesktop.js +1 -1
  490. package/components/TabsLine/components/TabsLineDropdown.js +2 -13
  491. package/components/TabsLine/components/TabsLineDropdown.js.map +1 -1
  492. package/components/TabsLine/components/TabsLineItem.js +1 -1
  493. package/components/TabsLine/components/TabsLineMobile.js +2 -2
  494. package/components/Tag/Tag.js +5 -5
  495. package/components/TagColor/TagColor.js +10 -10
  496. package/components/TagGroup/TagGroup.js +4 -4
  497. package/components/Tooltip/components/common/TooltipBody.js +1 -1
  498. package/components/Tooltip/components/common/TooltipLink.js +4 -4
  499. package/components/Tooltip/components/common/TooltipXButton.js +1 -1
  500. package/components/Tooltip/components/desktop/components/TooltipDesktopBase.js +1 -1
  501. package/components/Tooltip/components/desktop/components/TooltipDesktopTip.js +1 -1
  502. package/components/Tooltip/components/mobile/TooltipMobile.js +10 -10
  503. package/components/Tooltip/components/mobile/TooltipMobile.js.map +1 -1
  504. package/components/Tooltip/components/mobile/components/TooltipMobileCloseButton.js +2 -2
  505. package/components/Tooltip/components/mobile/components/TooltipMobileCloseButton.js.map +1 -1
  506. package/components/Tooltip/components/mobile/components/TooltipMobileHeader.js +2 -2
  507. package/components/Tooltip/components/mobile/components/TooltipMobileHeader.js.map +1 -1
  508. package/components/TopOverlay/TopOverlay.js +6 -6
  509. package/components/TreeView/TreeView.js +1 -1
  510. package/components/TreeView/components/TreeViewGroup.js +1 -1
  511. package/components/TreeView/components/TreeViewNode.js +1 -1
  512. package/components/Typography/Caption.js +7 -7
  513. package/components/Typography/CodeText.js +2 -2
  514. package/components/Typography/Text.js +9 -9
  515. package/components/Typography/Title.js +9 -9
  516. package/components/Typography/constants.js +1 -1
  517. package/components/UnorderedListExtended/UnorderedListExtended.js +2 -2
  518. package/components/UnorderedListExtended/UnorderedListExtendedItem.js +2 -2
  519. package/components/UnorderedListExtended/UnorderedListExtendedItemMarker.js +3 -3
  520. package/components/UploadZone/UploadZone.js +2 -2
  521. package/components/UploadZone/components/UploadZoneInput.js +1 -1
  522. package/components/UploadZone/index.js +1 -1
  523. package/components/index.js +32 -26
  524. package/components/index.js.map +1 -1
  525. package/index.d.ts +233 -134
  526. package/index.js +32 -26
  527. package/index.js.map +1 -1
  528. package/package.json +9 -1
  529. package/styles/triplex-next.css +3139 -3038
  530. package/utils/scroll/bodyScrollLock.js +23 -0
  531. package/utils/scroll/bodyScrollLock.js.map +1 -0
  532. package/chunks/Card.module-C7xz0eKx.js +0 -32
  533. package/chunks/Card.module-C7xz0eKx.js.map +0 -1
  534. package/chunks/Carousel.module-CXIfk_97.js +0 -26
  535. package/chunks/Carousel.module-CXIfk_97.js.map +0 -1
  536. package/chunks/CheckboxTreeExtended.module-DLKb2rTf.js +0 -24
  537. package/chunks/CheckboxTreeExtended.module-DLKb2rTf.js.map +0 -1
  538. package/chunks/Confirm.module-YWhb2Ve3.js +0 -24
  539. package/chunks/Confirm.module-YWhb2Ve3.js.map +0 -1
  540. package/chunks/DropdownMobile.module-CHJp6QN5.js +0 -40
  541. package/chunks/DropdownMobile.module-CHJp6QN5.js.map +0 -1
  542. package/chunks/Footer.module-52DeBs5u.js +0 -12
  543. package/chunks/Footer.module-52DeBs5u.js.map +0 -1
  544. package/chunks/HeaderLayoutSidebar.module-BvCPxkNk.js.map +0 -1
  545. package/chunks/HeaderTabs.module-DcnxvYN-.js +0 -12
  546. package/chunks/HeaderTabs.module-DcnxvYN-.js.map +0 -1
  547. package/chunks/HeaderTitle.module-gbla84yG.js.map +0 -1
  548. package/chunks/ImageGalleryExtendedMain.module-DEMmSVQp.js +0 -28
  549. package/chunks/ImageGalleryExtendedMain.module-DEMmSVQp.js.map +0 -1
  550. package/chunks/IslandAccordion.module-bwQFP0tP.js +0 -44
  551. package/chunks/IslandAccordion.module-bwQFP0tP.js.map +0 -1
  552. package/chunks/IslandWidgetFooter.module-CP5njAOS.js +0 -18
  553. package/chunks/IslandWidgetFooter.module-CP5njAOS.js.map +0 -1
  554. package/chunks/IslandWidgetHeader.module-Czxumpj0.js +0 -28
  555. package/chunks/IslandWidgetHeader.module-Czxumpj0.js.map +0 -1
  556. package/chunks/LightBoxControls.module-CCqAYXOp.js +0 -26
  557. package/chunks/LightBoxControls.module-CCqAYXOp.js.map +0 -1
  558. package/chunks/LightBoxSideOverlayClose.module-Bu0mbQ2E.js.map +0 -1
  559. package/chunks/ListItemTail.module-DNcipOgP.js +0 -18
  560. package/chunks/ListItemTail.module-DNcipOgP.js.map +0 -1
  561. package/chunks/ListMasterFooter.module-BO7_lx0S.js +0 -14
  562. package/chunks/ListMasterFooter.module-BO7_lx0S.js.map +0 -1
  563. package/chunks/ModalWindow.module-Bb8wLMOR.js +0 -28
  564. package/chunks/ModalWindow.module-Bb8wLMOR.js.map +0 -1
  565. package/chunks/Notification.module-C27U0YZV.js +0 -34
  566. package/chunks/Notification.module-C27U0YZV.js.map +0 -1
  567. package/chunks/Overlay.module-BzjO-w78.js +0 -30
  568. package/chunks/Overlay.module-BzjO-w78.js.map +0 -1
  569. package/chunks/Page.module-BkhV9GYk.js +0 -17
  570. package/chunks/Page.module-BkhV9GYk.js.map +0 -1
  571. package/chunks/SMSField.module-ro6oGp6K.js +0 -30
  572. package/chunks/SMSField.module-ro6oGp6K.js.map +0 -1
  573. package/chunks/SliderExtendedMarks.module-kZFbIl0G.js +0 -24
  574. package/chunks/SliderExtendedMarks.module-kZFbIl0G.js.map +0 -1
  575. package/chunks/StatusTracker.module-C20aPMTU.js +0 -44
  576. package/chunks/StatusTracker.module-C20aPMTU.js.map +0 -1
  577. package/chunks/TableFooter.module-0fRaQavw.js +0 -22
  578. package/chunks/TableFooter.module-0fRaQavw.js.map +0 -1
  579. package/chunks/TabsExtended.module-edmUKSS3.js +0 -26
  580. package/chunks/TabsExtended.module-edmUKSS3.js.map +0 -1
  581. package/chunks/TabsLine.module-0jeKJFx6.js +0 -36
  582. package/chunks/TabsLine.module-0jeKJFx6.js.map +0 -1
  583. package/chunks/TooltipDesktop.module-B4l074WB.js +0 -32
  584. package/chunks/TooltipDesktop.module-B4l074WB.js.map +0 -1
  585. package/chunks/TreeView.module-6Cj379Bu.js +0 -12
  586. package/chunks/TreeView.module-6Cj379Bu.js.map +0 -1
  587. package/components/DesignTokens/components/DropdownMobile.js +0 -24
  588. package/components/DesignTokens/components/DropdownMobile.js.map +0 -1
  589. package/components/DesignTokens/components/DropdownMobileList.js +0 -12
  590. package/components/DesignTokens/components/DropdownMobileList.js.map +0 -1
  591. package/components/Dropdown/mobile/DropdownMobile.js +0 -33
  592. package/components/Dropdown/mobile/DropdownMobile.js.map +0 -1
  593. package/components/Dropdown/mobile/DropdownMobileBody.js +0 -12
  594. package/components/Dropdown/mobile/DropdownMobileBody.js.map +0 -1
  595. package/components/Dropdown/mobile/DropdownMobileClose.js +0 -14
  596. package/components/Dropdown/mobile/DropdownMobileClose.js.map +0 -1
  597. package/components/Dropdown/mobile/DropdownMobileFooter.js +0 -12
  598. package/components/Dropdown/mobile/DropdownMobileFooter.js.map +0 -1
  599. package/components/Dropdown/mobile/DropdownMobileHeader.js +0 -15
  600. package/components/Dropdown/mobile/DropdownMobileHeader.js.map +0 -1
  601. package/components/Dropdown/mobile/DropdownMobileInner.js.map +0 -1
  602. package/components/Dropdown/mobile/DropdownMobileInput.js +0 -15
  603. package/components/Dropdown/mobile/DropdownMobileInput.js.map +0 -1
  604. package/components/Dropdown/mobile/DropdownMobileList.js +0 -24
  605. package/components/Dropdown/mobile/DropdownMobileList.js.map +0 -1
  606. package/components/Dropdown/mobile/DropdownMobileListItem.js.map +0 -1
  607. package/components/Dropdown/mobile/DropdownMobileLoader.js +0 -20
  608. package/components/Dropdown/mobile/DropdownMobileLoader.js.map +0 -1
  609. package/components/Dropdown/mobile/DropdownMobileMaskedInput.js +0 -19
  610. package/components/Dropdown/mobile/DropdownMobileMaskedInput.js.map +0 -1
  611. package/components/Dropdown/mobile/index.js +0 -23
  612. /package/components/{Dropdown/mobile → Puller}/index.js.map +0 -0
@@ -6,7 +6,7 @@ import { ECarouselScrollMode } from "./enums.js";
6
6
  import { EOrientation } from "../../enums/EOrientation.js";
7
7
  import { resolveViewportPadding } from "./utils.js";
8
8
  import { useLatestRef } from "../../utils/refs.js";
9
- import { s as styles } from "../../chunks/Carousel.module-CXIfk_97.js";
9
+ import { s as styles } from "../../chunks/Carousel.module-ugT1KfWo.js";
10
10
  import { CarouselViewport } from "./CarouselViewport.js";
11
11
  import { CarouselTrack } from "./CarouselTrack.js";
12
12
  import { CarouselItem } from "./CarouselItem.js";
@@ -118,6 +118,7 @@ const CarouselRoot = React.forwardRef(
118
118
  const { start: startKey, end: endKey } = ORIENTATION_TO_PADDING_KEY[orientation];
119
119
  const startP = normalizedPadding[startKey];
120
120
  const endP = normalizedPadding[endKey];
121
+ const pageSize = Math.max(0, containerSize - startP - endP);
121
122
  const calculatedMaxOffset = Math.max(0, totalContentSize + startP + endP - containerSize);
122
123
  maxOffsetRef.current = calculatedMaxOffset;
123
124
  let targetOffset = 0;
@@ -128,7 +129,7 @@ const CarouselRoot = React.forwardRef(
128
129
  for (let i = 0; i < slidesCount; i++) {
129
130
  const slideSize = getSlideSize(i);
130
131
  const addedSize = currentPage.length > 0 ? slideSize + gap : slideSize;
131
- if (currentGroupSize + addedSize <= containerSize + 1) {
132
+ if (currentGroupSize + addedSize <= pageSize + 1) {
132
133
  currentPage.push(i);
133
134
  currentGroupSize += addedSize;
134
135
  } else {
@@ -161,7 +162,7 @@ const CarouselRoot = React.forwardRef(
161
162
  const lastSlideSize = getSlideSize(lastSlideIndex);
162
163
  const groupEnd = getSlideStart(lastSlideIndex) + lastSlideSize;
163
164
  const groupSize = groupEnd - groupStart;
164
- targetOffset = groupStart - (containerSize - groupSize) / 2;
165
+ targetOffset = groupStart - (pageSize - groupSize) / 2;
165
166
  }
166
167
  } else {
167
168
  setActiveIndices((prev) => prev.length === 0 ? prev : []);
@@ -206,7 +207,8 @@ const CarouselRoot = React.forwardRef(
206
207
  normalizedPadding,
207
208
  pageMode,
208
209
  getSlideSize,
209
- getSlideStart
210
+ getSlideStart,
211
+ offsetRef
210
212
  ]
211
213
  );
212
214
  const nextSlide = useCallback(() => {
@@ -292,7 +294,7 @@ const CarouselRoot = React.forwardRef(
292
294
  observer.observe(viewportRef.current);
293
295
  observer.observe(trackRef.current);
294
296
  return () => observer.disconnect();
295
- }, [updateOffsetAndPages]);
297
+ }, [updateOffsetAndPages, currentIndexRef]);
296
298
  useEffect(() => {
297
299
  setCurrentIndex(0);
298
300
  }, [gap, scrollMode, orientation]);
@@ -342,7 +344,9 @@ const CarouselRoot = React.forwardRef(
342
344
  atEnd,
343
345
  nextSlide,
344
346
  prevSlide,
345
- goToSlide
347
+ goToSlide,
348
+ orientationRef,
349
+ offsetRef
346
350
  ]
347
351
  );
348
352
  return /* @__PURE__ */ jsx(CarouselContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx("div", { className: classNames, ...restProps, ref, children }) });
@@ -1 +1 @@
1
- {"version":3,"file":"Carousel.js","sources":["../../../src/components/Carousel/Carousel.tsx"],"sourcesContent":["import React, { useState, useMemo, useRef, useLayoutEffect, useCallback, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { CarouselContext } from \"./CarouselContext\";\nimport { ICarouselProps } from \"./types\";\nimport { ECarouselScrollMode } from \"./enums\";\nimport { EOrientation } from \"../../enums\";\nimport { resolveViewportPadding } from \"./utils\";\nimport { useLatestRef } from \"../../utils/refs\";\nimport styles from \"./styles/Carousel.module.less\";\nimport { CarouselViewport } from \"./CarouselViewport\";\nimport { CarouselTrack } from \"./CarouselTrack\";\nimport { CarouselItem } from \"./CarouselItem\";\nimport { CarouselPrevButton, CarouselNextButton } from \"./CarouselButton\";\nimport { CarouselIndicators } from \"./CarouselIndicators\";\n\nconst ORIENTATION_TO_PADDING_KEY = {\n [EOrientation.HORIZONTAL]: { start: \"left\", end: \"right\" },\n [EOrientation.VERTICAL]: { start: \"top\", end: \"bottom\" },\n} as const;\n\nconst ORIENTATION_TO_RECT_SIZE_KEY = {\n [EOrientation.HORIZONTAL]: \"width\",\n [EOrientation.VERTICAL]: \"height\",\n} as const;\n\nconst ORIENTATION_TO_CLIENT_SIZE_KEY = {\n [EOrientation.HORIZONTAL]: \"clientWidth\",\n [EOrientation.VERTICAL]: \"clientHeight\",\n} as const;\n\nconst CarouselRoot = React.forwardRef<HTMLDivElement, ICarouselProps>(\n (\n {\n children,\n orientation = EOrientation.HORIZONTAL,\n scrollMode = ECarouselScrollMode.ITEM,\n gap = 16,\n viewportPadding = 0,\n className,\n ...restProps\n },\n ref,\n ) => {\n const [offset, setOffset] = useState(0);\n const [maxOffset, setMaxOffset] = useState(0);\n const [activeIndices, setActiveIndices] = useState<number[]>([]);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const paddingKey = Array.isArray(viewportPadding) ? viewportPadding.join(\",\") : String(viewportPadding);\n const { metrics: normalizedPadding, style: viewportPaddingStyle } = useMemo(\n () => resolveViewportPadding(viewportPadding),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- мемоизация по значению, а не по ссылке\n [paddingKey],\n );\n\n // Защита от пересоздания обработчиков жестов во Viewport при смене ориентации\n const orientationRef = useLatestRef(orientation);\n // Защита от бесконечного цикла рендеров в updateOffsetAndPages\n const offsetRef = useLatestRef(offset);\n // Защита от stale closures в ResizeObserver\n const currentIndexRef = useLatestRef(currentIndex);\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const trackRef = useRef<HTMLDivElement | null>(null);\n const slideRefs = useRef<Map<number, HTMLDivElement>>(new Map());\n const maxOffsetRef = useRef(maxOffset);\n\n // Реф для отслеживания запланированного кадра анимации\n const pageRafIdRef = useRef<number | null>(null);\n // Хранит настройки предыдущего успешного расчёта для авто-сброса кэша\n const lastConfigRef = useRef({ gap, scrollMode, orientation });\n\n const geometryCacheRef = useRef<{\n sizes: Map<number, number>;\n starts: Map<number, number>;\n }>({ sizes: new Map(), starts: new Map() });\n\n const pageMode = scrollMode === ECarouselScrollMode.PAGE;\n\n const getSlideSize = useCallback(\n (index: number) => {\n if (geometryCacheRef.current.sizes.has(index)) {\n // Безопасно: строка выше гарантирует наличие значения в кэше.\n return geometryCacheRef.current.sizes.get(index)!;\n }\n\n const slide = slideRefs.current.get(index);\n if (!slide) return 0;\n\n const rect = slide.getBoundingClientRect();\n const key = ORIENTATION_TO_RECT_SIZE_KEY[orientation];\n const size = rect[key];\n\n geometryCacheRef.current.sizes.set(index, size);\n return size;\n },\n [orientation],\n );\n\n const getSlidesCount = useCallback(() => slideRefs.current.size, []);\n\n const getSlideStart = useCallback(\n (index: number): number => {\n if (index <= 0) {\n return 0;\n }\n\n if (geometryCacheRef.current.starts.has(index)) {\n // Безопасно: строка выше гарантирует наличие значения в кэше.\n return geometryCacheRef.current.starts.get(index)!;\n }\n\n const prevIndex = index - 1;\n const start = getSlideStart(prevIndex) + getSlideSize(prevIndex) + gap;\n\n geometryCacheRef.current.starts.set(index, start);\n return start;\n },\n [gap, getSlideSize],\n );\n\n const getSlideEnd = useCallback(\n (index: number) => {\n return getSlideStart(index) + getSlideSize(index);\n },\n [getSlideStart, getSlideSize],\n );\n\n const getViewportSize = useCallback(() => {\n if (!viewportRef.current) return 0;\n const key = ORIENTATION_TO_CLIENT_SIZE_KEY[orientation];\n return viewportRef.current[key];\n }, [orientation]);\n\n const updateOffsetAndPages = useCallback(\n (index: number) => {\n const lastConfig = lastConfigRef.current;\n if (\n lastConfig.gap !== gap ||\n lastConfig.scrollMode !== scrollMode ||\n lastConfig.orientation !== orientation\n ) {\n geometryCacheRef.current.sizes.clear();\n geometryCacheRef.current.starts.clear();\n lastConfigRef.current = { gap, scrollMode, orientation };\n }\n\n const slidesCount = getSlidesCount();\n if (slidesCount === 0) {\n maxOffsetRef.current = 0;\n setOffset((prev) => (prev !== 0 ? 0 : prev));\n setMaxOffset((prev) => (prev !== 0 ? 0 : prev));\n setActiveIndices(Array.of());\n return;\n }\n\n const totalContentSize = getSlideEnd(slidesCount - 1);\n const containerSize = getViewportSize();\n\n const { start: startKey, end: endKey } = ORIENTATION_TO_PADDING_KEY[orientation];\n const startP = normalizedPadding[startKey];\n const endP = normalizedPadding[endKey];\n\n const calculatedMaxOffset = Math.max(0, totalContentSize + startP + endP - containerSize);\n maxOffsetRef.current = calculatedMaxOffset;\n\n let targetOffset = 0;\n\n if (pageMode && containerSize > 0) {\n const pagesMatrix: number[][] = [];\n let currentPage: number[] = [];\n let currentGroupSize = 0;\n\n for (let i = 0; i < slidesCount; i++) {\n const slideSize = getSlideSize(i);\n const addedSize = currentPage.length > 0 ? slideSize + gap : slideSize;\n\n if (currentGroupSize + addedSize <= containerSize + 1) {\n currentPage.push(i);\n currentGroupSize += addedSize;\n } else {\n if (currentPage.length > 0) pagesMatrix.push(currentPage);\n currentPage = [i];\n currentGroupSize = slideSize;\n }\n }\n\n if (currentPage.length > 0) pagesMatrix.push(currentPage);\n\n const clampedIndex = Math.max(0, Math.min(index, pagesMatrix.length - 1));\n\n if (clampedIndex !== index) {\n if (pageRafIdRef.current !== null) {\n cancelAnimationFrame(pageRafIdRef.current);\n }\n\n pageRafIdRef.current = requestAnimationFrame(() => {\n setCurrentIndex(clampedIndex);\n pageRafIdRef.current = null;\n });\n }\n\n const validPageIndices = Array.from({ length: pagesMatrix.length }, (_, i) => i);\n\n setActiveIndices((prev) => {\n if (prev.length === validPageIndices.length) return prev;\n return validPageIndices;\n });\n\n const currentGroup = pagesMatrix[clampedIndex];\n if (currentGroup && currentGroup.length > 0) {\n const firstSlideIndex = currentGroup[0];\n const lastSlideIndex = currentGroup[currentGroup.length - 1];\n const groupStart = getSlideStart(firstSlideIndex);\n\n const lastSlideSize = getSlideSize(lastSlideIndex);\n const groupEnd = getSlideStart(lastSlideIndex) + lastSlideSize;\n const groupSize = groupEnd - groupStart;\n\n targetOffset = groupStart - (containerSize - groupSize) / 2;\n }\n } else {\n setActiveIndices((prev) => (prev.length === 0 ? prev : []));\n\n const slideStart = getSlideStart(index);\n const slideEnd = getSlideEnd(index);\n\n const currentOffset = offsetRef.current;\n const containerEnd = currentOffset + containerSize;\n\n // Ситуация 1: Слайд шире, чем сам контейнер (огромный слайд)\n if (slideEnd - slideStart > containerSize) {\n if (currentOffset < slideStart - startP) {\n targetOffset = slideStart - startP;\n } else if (currentOffset + containerSize > slideEnd + endP) {\n targetOffset = slideEnd - containerSize + endP;\n } else {\n targetOffset = currentOffset;\n }\n }\n // Ситуация 2: Стандартный слайд (меньше или равен размеру контейнера)\n else {\n if (slideEnd > containerEnd + 1) {\n targetOffset = slideEnd - containerSize + startP + endP;\n } else if (slideStart < currentOffset - 1) {\n targetOffset = slideStart - startP;\n } else {\n targetOffset = currentOffset;\n }\n }\n }\n\n if (targetOffset <= 0 || calculatedMaxOffset === 0) {\n setOffset(0);\n } else if (targetOffset >= calculatedMaxOffset) {\n setOffset(calculatedMaxOffset);\n } else {\n setOffset(targetOffset);\n }\n\n // Обновляем реактивный стейт для синхронизации с кнопками (стрелками)\n setMaxOffset((prev) => (prev !== calculatedMaxOffset ? calculatedMaxOffset : prev));\n },\n [\n gap,\n scrollMode,\n orientation,\n getSlidesCount,\n getSlideEnd,\n getViewportSize,\n normalizedPadding,\n pageMode,\n getSlideSize,\n getSlideStart,\n ],\n );\n\n const nextSlide = useCallback(() => {\n if (pageMode) {\n setCurrentIndex((prev) => (prev === activeIndices.length - 1 ? prev : prev + 1));\n return;\n }\n\n const slidesCount = getSlidesCount();\n const containerSize = getViewportSize();\n\n const currentSlideEnd = getSlideEnd(currentIndex);\n\n const { end: endKey } = ORIENTATION_TO_PADDING_KEY[orientation];\n const endP = normalizedPadding[endKey];\n\n // Случай 1: Мы на огромном слайде, и его правый край всё еще скрыт за экраном\n if (currentSlideEnd + endP > offset + containerSize + 1) {\n // Вычисляем следующий шаг (не дальше, чем правый край слайда с учётом endP)\n const maxSlideOffset = currentSlideEnd - containerSize + endP;\n const nextOffset = Math.min(offset + containerSize, maxSlideOffset);\n const clampedOffset = Math.min(nextOffset, maxOffsetRef.current);\n\n setOffset(clampedOffset);\n return; // Индекс не меняем, просто продвинули скролл внутри слайда\n }\n\n // Случай 2: Текущий слайд закончился, ищем следующий скрытый элемент\n for (let i = currentIndex + 1; i < slidesCount; i++) {\n const slideEnd = getSlideEnd(i);\n\n if (slideEnd + endP > offset + containerSize + 1) {\n setCurrentIndex(i);\n return;\n }\n }\n setCurrentIndex(Math.max(0, slidesCount - 1));\n }, [\n pageMode,\n activeIndices.length,\n getSlidesCount,\n getViewportSize,\n getSlideEnd,\n orientation,\n normalizedPadding,\n offset,\n currentIndex,\n ]);\n\n const prevSlide = useCallback(() => {\n if (pageMode) {\n setCurrentIndex((prev) => (prev === 0 ? prev : prev - 1));\n return;\n }\n\n const containerSize = getViewportSize();\n const currentSlideStart = getSlideStart(currentIndex);\n\n const { start: startKey } = ORIENTATION_TO_PADDING_KEY[orientation];\n const startP = normalizedPadding[startKey];\n\n // Случай 1: Мы на огромном слайде, и его левый край скрыт слева за экраном\n if (currentSlideStart - startP < offset - 1) {\n // Вычисляем шаг назад (не дальше, чем левый край слайда с учётом startP)\n const minSlideOffset = currentSlideStart - startP;\n const prevOffset = Math.max(offset - containerSize, minSlideOffset);\n const clampedOffset = Math.max(0, prevOffset);\n\n setOffset(clampedOffset);\n return; // Индекс не меняем, скроллим назад внутри слайда\n }\n\n // Случай 2: Левый край текущего слайда полностью виден, ищем предыдущие скрытые элементы\n for (let i = currentIndex - 1; i >= 0; i--) {\n const slideStart = getSlideStart(i);\n\n if (slideStart - startP < offset - 1) {\n setCurrentIndex(i);\n return;\n }\n }\n\n setCurrentIndex(0);\n }, [pageMode, getViewportSize, getSlideStart, orientation, normalizedPadding, offset, currentIndex]);\n\n const goToSlide = useCallback(\n (slideIndex: number) => {\n const slidesCount = getSlidesCount();\n if (slidesCount === 0) {\n setCurrentIndex(0);\n return;\n }\n\n const clampedIndex = Math.max(0, Math.min(slideIndex, slidesCount - 1));\n setCurrentIndex(clampedIndex);\n },\n [getSlidesCount],\n );\n\n // ResizeObserver для адаптивности при изменении размеров экрана или контента\n useLayoutEffect(() => {\n if (!viewportRef.current || !trackRef.current) return;\n\n const observer = new ResizeObserver(() => {\n geometryCacheRef.current.sizes.clear();\n geometryCacheRef.current.starts.clear();\n\n updateOffsetAndPages(currentIndexRef.current);\n });\n\n observer.observe(viewportRef.current);\n observer.observe(trackRef.current);\n\n return () => observer.disconnect();\n }, [updateOffsetAndPages]);\n\n // Сброс индекса при изменении ключевых настроек карусели\n useEffect(() => {\n setCurrentIndex(0);\n }, [gap, scrollMode, orientation]);\n\n // Синхронизация смещения при изменении индекса\n useEffect(() => {\n updateOffsetAndPages(currentIndex);\n }, [currentIndex, updateOffsetAndPages]);\n\n // Очистка запланированных анимационных фреймов при размонтировании карусели\n useEffect(() => {\n return () => {\n if (pageRafIdRef.current !== null) {\n cancelAnimationFrame(pageRafIdRef.current);\n }\n };\n }, []);\n\n // Вычисление граничных состояний (актуально для отключения стрелок навигации)\n const atStart = pageMode ? currentIndex === 0 : offset <= 1;\n const atEnd = pageMode\n ? activeIndices.length === 0 || currentIndex >= activeIndices.length - 1\n : maxOffset > 0\n ? offset >= maxOffset - 1\n : true;\n\n const classNames = clsx(styles.carousel, styles[orientation], className);\n\n const contextValue = useMemo(\n () => ({\n gap,\n orientation,\n scrollMode,\n offset,\n activeIndices,\n currentIndex,\n viewportPaddingStyle,\n atStart,\n atEnd,\n nextSlide,\n prevSlide,\n goToSlide,\n orientationRef,\n offsetRef,\n maxOffsetRef,\n viewportRef,\n trackRef,\n slideRefs,\n }),\n [\n gap,\n orientation,\n scrollMode,\n offset,\n activeIndices,\n currentIndex,\n viewportPaddingStyle,\n atStart,\n atEnd,\n nextSlide,\n prevSlide,\n goToSlide,\n ],\n );\n\n return (\n <CarouselContext.Provider value={contextValue}>\n <div className={classNames} {...restProps} ref={ref}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\n\nCarouselRoot.displayName = \"Carousel\";\n\n/** Карусель. */\nexport const Carousel = Object.assign(CarouselRoot, {\n Viewport: CarouselViewport,\n Track: CarouselTrack,\n Item: CarouselItem,\n PrevButton: CarouselPrevButton,\n NextButton: CarouselNextButton,\n Indicators: CarouselIndicators,\n});\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Carousel.js","sources":["../../../src/components/Carousel/Carousel.tsx"],"sourcesContent":["import React, { useState, useMemo, useRef, useLayoutEffect, useCallback, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { CarouselContext } from \"./CarouselContext\";\nimport { ICarouselProps } from \"./types\";\nimport { ECarouselScrollMode } from \"./enums\";\nimport { EOrientation } from \"../../enums\";\nimport { resolveViewportPadding } from \"./utils\";\nimport { useLatestRef } from \"../../utils/refs\";\nimport styles from \"./styles/Carousel.module.less\";\nimport { CarouselViewport } from \"./CarouselViewport\";\nimport { CarouselTrack } from \"./CarouselTrack\";\nimport { CarouselItem } from \"./CarouselItem\";\nimport { CarouselPrevButton, CarouselNextButton } from \"./CarouselButton\";\nimport { CarouselIndicators } from \"./CarouselIndicators\";\n\nconst ORIENTATION_TO_PADDING_KEY = {\n [EOrientation.HORIZONTAL]: { start: \"left\", end: \"right\" },\n [EOrientation.VERTICAL]: { start: \"top\", end: \"bottom\" },\n} as const;\n\nconst ORIENTATION_TO_RECT_SIZE_KEY = {\n [EOrientation.HORIZONTAL]: \"width\",\n [EOrientation.VERTICAL]: \"height\",\n} as const;\n\nconst ORIENTATION_TO_CLIENT_SIZE_KEY = {\n [EOrientation.HORIZONTAL]: \"clientWidth\",\n [EOrientation.VERTICAL]: \"clientHeight\",\n} as const;\n\n/** Контейнер составной карусели: управляет геометрией, текущим слайдом и состоянием навигации. */\nconst CarouselRoot = React.forwardRef<HTMLDivElement, ICarouselProps>(\n (\n {\n children,\n orientation = EOrientation.HORIZONTAL,\n scrollMode = ECarouselScrollMode.ITEM,\n gap = 16,\n viewportPadding = 0,\n className,\n ...restProps\n },\n ref,\n ) => {\n const [offset, setOffset] = useState(0);\n const [maxOffset, setMaxOffset] = useState(0);\n const [activeIndices, setActiveIndices] = useState<number[]>([]);\n const [currentIndex, setCurrentIndex] = useState(0);\n\n const paddingKey = Array.isArray(viewportPadding) ? viewportPadding.join(\",\") : String(viewportPadding);\n const { metrics: normalizedPadding, style: viewportPaddingStyle } = useMemo(\n () => resolveViewportPadding(viewportPadding),\n // eslint-disable-next-line react-hooks/exhaustive-deps -- мемоизация по значению, а не по ссылке\n [paddingKey],\n );\n\n // Защита от пересоздания обработчиков жестов во Viewport при смене ориентации\n const orientationRef = useLatestRef(orientation);\n // Защита от бесконечного цикла рендеров в updateOffsetAndPages\n const offsetRef = useLatestRef(offset);\n // Защита от stale closures в ResizeObserver\n const currentIndexRef = useLatestRef(currentIndex);\n\n const viewportRef = useRef<HTMLDivElement | null>(null);\n const trackRef = useRef<HTMLDivElement | null>(null);\n const slideRefs = useRef<Map<number, HTMLDivElement>>(new Map());\n const maxOffsetRef = useRef(maxOffset);\n\n // Реф для отслеживания запланированного кадра анимации\n const pageRafIdRef = useRef<number | null>(null);\n // Хранит настройки предыдущего успешного расчёта для авто-сброса кэша\n const lastConfigRef = useRef({ gap, scrollMode, orientation });\n\n const geometryCacheRef = useRef<{\n sizes: Map<number, number>;\n starts: Map<number, number>;\n }>({ sizes: new Map(), starts: new Map() });\n\n const pageMode = scrollMode === ECarouselScrollMode.PAGE;\n\n const getSlideSize = useCallback(\n (index: number) => {\n if (geometryCacheRef.current.sizes.has(index)) {\n // Безопасно: строка выше гарантирует наличие значения в кэше.\n return geometryCacheRef.current.sizes.get(index)!;\n }\n\n const slide = slideRefs.current.get(index);\n if (!slide) return 0;\n\n const rect = slide.getBoundingClientRect();\n const key = ORIENTATION_TO_RECT_SIZE_KEY[orientation];\n const size = rect[key];\n\n geometryCacheRef.current.sizes.set(index, size);\n return size;\n },\n [orientation],\n );\n\n const getSlidesCount = useCallback(() => slideRefs.current.size, []);\n\n const getSlideStart = useCallback(\n (index: number): number => {\n if (index <= 0) {\n return 0;\n }\n\n if (geometryCacheRef.current.starts.has(index)) {\n // Безопасно: строка выше гарантирует наличие значения в кэше.\n return geometryCacheRef.current.starts.get(index)!;\n }\n\n const prevIndex = index - 1;\n const start = getSlideStart(prevIndex) + getSlideSize(prevIndex) + gap;\n\n geometryCacheRef.current.starts.set(index, start);\n return start;\n },\n [gap, getSlideSize],\n );\n\n const getSlideEnd = useCallback(\n (index: number) => {\n return getSlideStart(index) + getSlideSize(index);\n },\n [getSlideStart, getSlideSize],\n );\n\n const getViewportSize = useCallback(() => {\n if (!viewportRef.current) return 0;\n const key = ORIENTATION_TO_CLIENT_SIZE_KEY[orientation];\n return viewportRef.current[key];\n }, [orientation]);\n\n const updateOffsetAndPages = useCallback(\n (index: number) => {\n const lastConfig = lastConfigRef.current;\n if (\n lastConfig.gap !== gap ||\n lastConfig.scrollMode !== scrollMode ||\n lastConfig.orientation !== orientation\n ) {\n geometryCacheRef.current.sizes.clear();\n geometryCacheRef.current.starts.clear();\n lastConfigRef.current = { gap, scrollMode, orientation };\n }\n\n const slidesCount = getSlidesCount();\n if (slidesCount === 0) {\n maxOffsetRef.current = 0;\n setOffset((prev) => (prev !== 0 ? 0 : prev));\n setMaxOffset((prev) => (prev !== 0 ? 0 : prev));\n setActiveIndices(Array.of());\n return;\n }\n\n const totalContentSize = getSlideEnd(slidesCount - 1);\n const containerSize = getViewportSize();\n\n const { start: startKey, end: endKey } = ORIENTATION_TO_PADDING_KEY[orientation];\n const startP = normalizedPadding[startKey];\n const endP = normalizedPadding[endKey];\n // Видимая область для группировки и центрирования страниц — без отступов Viewport\n const pageSize = Math.max(0, containerSize - startP - endP);\n\n const calculatedMaxOffset = Math.max(0, totalContentSize + startP + endP - containerSize);\n maxOffsetRef.current = calculatedMaxOffset;\n\n let targetOffset = 0;\n\n if (pageMode && containerSize > 0) {\n const pagesMatrix: number[][] = [];\n let currentPage: number[] = [];\n let currentGroupSize = 0;\n\n for (let i = 0; i < slidesCount; i++) {\n const slideSize = getSlideSize(i);\n const addedSize = currentPage.length > 0 ? slideSize + gap : slideSize;\n\n if (currentGroupSize + addedSize <= pageSize + 1) {\n currentPage.push(i);\n currentGroupSize += addedSize;\n } else {\n if (currentPage.length > 0) pagesMatrix.push(currentPage);\n currentPage = [i];\n currentGroupSize = slideSize;\n }\n }\n\n if (currentPage.length > 0) pagesMatrix.push(currentPage);\n\n const clampedIndex = Math.max(0, Math.min(index, pagesMatrix.length - 1));\n\n if (clampedIndex !== index) {\n if (pageRafIdRef.current !== null) {\n cancelAnimationFrame(pageRafIdRef.current);\n }\n\n pageRafIdRef.current = requestAnimationFrame(() => {\n setCurrentIndex(clampedIndex);\n pageRafIdRef.current = null;\n });\n }\n\n const validPageIndices = Array.from({ length: pagesMatrix.length }, (_, i) => i);\n\n setActiveIndices((prev) => {\n if (prev.length === validPageIndices.length) return prev;\n return validPageIndices;\n });\n\n const currentGroup = pagesMatrix[clampedIndex];\n if (currentGroup && currentGroup.length > 0) {\n const firstSlideIndex = currentGroup[0];\n const lastSlideIndex = currentGroup[currentGroup.length - 1];\n const groupStart = getSlideStart(firstSlideIndex);\n\n const lastSlideSize = getSlideSize(lastSlideIndex);\n const groupEnd = getSlideStart(lastSlideIndex) + lastSlideSize;\n const groupSize = groupEnd - groupStart;\n\n targetOffset = groupStart - (pageSize - groupSize) / 2;\n }\n } else {\n setActiveIndices((prev) => (prev.length === 0 ? prev : []));\n\n const slideStart = getSlideStart(index);\n const slideEnd = getSlideEnd(index);\n\n const currentOffset = offsetRef.current;\n const containerEnd = currentOffset + containerSize;\n\n // Ситуация 1: Слайд шире, чем сам контейнер (огромный слайд)\n if (slideEnd - slideStart > containerSize) {\n if (currentOffset < slideStart - startP) {\n targetOffset = slideStart - startP;\n } else if (currentOffset + containerSize > slideEnd + endP) {\n targetOffset = slideEnd - containerSize + endP;\n } else {\n targetOffset = currentOffset;\n }\n }\n // Ситуация 2: Стандартный слайд (меньше или равен размеру контейнера)\n else {\n if (slideEnd > containerEnd + 1) {\n targetOffset = slideEnd - containerSize + startP + endP;\n } else if (slideStart < currentOffset - 1) {\n targetOffset = slideStart - startP;\n } else {\n targetOffset = currentOffset;\n }\n }\n }\n\n if (targetOffset <= 0 || calculatedMaxOffset === 0) {\n setOffset(0);\n } else if (targetOffset >= calculatedMaxOffset) {\n setOffset(calculatedMaxOffset);\n } else {\n setOffset(targetOffset);\n }\n\n // Обновляем реактивный стейт для синхронизации с кнопками (стрелками)\n setMaxOffset((prev) => (prev !== calculatedMaxOffset ? calculatedMaxOffset : prev));\n },\n [\n gap,\n scrollMode,\n orientation,\n getSlidesCount,\n getSlideEnd,\n getViewportSize,\n normalizedPadding,\n pageMode,\n getSlideSize,\n getSlideStart,\n offsetRef,\n ],\n );\n\n const nextSlide = useCallback(() => {\n if (pageMode) {\n setCurrentIndex((prev) => (prev === activeIndices.length - 1 ? prev : prev + 1));\n return;\n }\n\n const slidesCount = getSlidesCount();\n const containerSize = getViewportSize();\n\n const currentSlideEnd = getSlideEnd(currentIndex);\n\n const { end: endKey } = ORIENTATION_TO_PADDING_KEY[orientation];\n const endP = normalizedPadding[endKey];\n\n // Случай 1: Мы на огромном слайде, и его правый край всё еще скрыт за экраном\n if (currentSlideEnd + endP > offset + containerSize + 1) {\n // Вычисляем следующий шаг (не дальше, чем правый край слайда с учётом endP)\n const maxSlideOffset = currentSlideEnd - containerSize + endP;\n const nextOffset = Math.min(offset + containerSize, maxSlideOffset);\n const clampedOffset = Math.min(nextOffset, maxOffsetRef.current);\n\n setOffset(clampedOffset);\n return; // Индекс не меняем, просто продвинули скролл внутри слайда\n }\n\n // Случай 2: Текущий слайд закончился, ищем следующий скрытый элемент\n for (let i = currentIndex + 1; i < slidesCount; i++) {\n const slideEnd = getSlideEnd(i);\n\n if (slideEnd + endP > offset + containerSize + 1) {\n setCurrentIndex(i);\n return;\n }\n }\n setCurrentIndex(Math.max(0, slidesCount - 1));\n }, [\n pageMode,\n activeIndices.length,\n getSlidesCount,\n getViewportSize,\n getSlideEnd,\n orientation,\n normalizedPadding,\n offset,\n currentIndex,\n ]);\n\n const prevSlide = useCallback(() => {\n if (pageMode) {\n setCurrentIndex((prev) => (prev === 0 ? prev : prev - 1));\n return;\n }\n\n const containerSize = getViewportSize();\n const currentSlideStart = getSlideStart(currentIndex);\n\n const { start: startKey } = ORIENTATION_TO_PADDING_KEY[orientation];\n const startP = normalizedPadding[startKey];\n\n // Случай 1: Мы на огромном слайде, и его левый край скрыт слева за экраном\n if (currentSlideStart - startP < offset - 1) {\n // Вычисляем шаг назад (не дальше, чем левый край слайда с учётом startP)\n const minSlideOffset = currentSlideStart - startP;\n const prevOffset = Math.max(offset - containerSize, minSlideOffset);\n const clampedOffset = Math.max(0, prevOffset);\n\n setOffset(clampedOffset);\n return; // Индекс не меняем, скроллим назад внутри слайда\n }\n\n // Случай 2: Левый край текущего слайда полностью виден, ищем предыдущие скрытые элементы\n for (let i = currentIndex - 1; i >= 0; i--) {\n const slideStart = getSlideStart(i);\n\n if (slideStart - startP < offset - 1) {\n setCurrentIndex(i);\n return;\n }\n }\n\n setCurrentIndex(0);\n }, [pageMode, getViewportSize, getSlideStart, orientation, normalizedPadding, offset, currentIndex]);\n\n const goToSlide = useCallback(\n (slideIndex: number) => {\n const slidesCount = getSlidesCount();\n if (slidesCount === 0) {\n setCurrentIndex(0);\n return;\n }\n\n const clampedIndex = Math.max(0, Math.min(slideIndex, slidesCount - 1));\n setCurrentIndex(clampedIndex);\n },\n [getSlidesCount],\n );\n\n // ResizeObserver для адаптивности при изменении размеров экрана или контента\n useLayoutEffect(() => {\n if (!viewportRef.current || !trackRef.current) return;\n\n const observer = new ResizeObserver(() => {\n geometryCacheRef.current.sizes.clear();\n geometryCacheRef.current.starts.clear();\n\n updateOffsetAndPages(currentIndexRef.current);\n });\n\n observer.observe(viewportRef.current);\n observer.observe(trackRef.current);\n\n return () => observer.disconnect();\n }, [updateOffsetAndPages, currentIndexRef]);\n\n // Сброс индекса при изменении ключевых настроек карусели\n useEffect(() => {\n setCurrentIndex(0);\n }, [gap, scrollMode, orientation]);\n\n // Синхронизация смещения при изменении индекса\n useEffect(() => {\n updateOffsetAndPages(currentIndex);\n }, [currentIndex, updateOffsetAndPages]);\n\n // Очистка запланированных анимационных фреймов при размонтировании карусели\n useEffect(() => {\n return () => {\n if (pageRafIdRef.current !== null) {\n cancelAnimationFrame(pageRafIdRef.current);\n }\n };\n }, []);\n\n // Вычисление граничных состояний (актуально для отключения стрелок навигации)\n const atStart = pageMode ? currentIndex === 0 : offset <= 1;\n const atEnd = pageMode\n ? activeIndices.length === 0 || currentIndex >= activeIndices.length - 1\n : maxOffset > 0\n ? offset >= maxOffset - 1\n : true;\n\n const classNames = clsx(styles.carousel, styles[orientation], className);\n\n const contextValue = useMemo(\n () => ({\n gap,\n orientation,\n scrollMode,\n offset,\n activeIndices,\n currentIndex,\n viewportPaddingStyle,\n atStart,\n atEnd,\n nextSlide,\n prevSlide,\n goToSlide,\n orientationRef,\n offsetRef,\n maxOffsetRef,\n viewportRef,\n trackRef,\n slideRefs,\n }),\n [\n gap,\n orientation,\n scrollMode,\n offset,\n activeIndices,\n currentIndex,\n viewportPaddingStyle,\n atStart,\n atEnd,\n nextSlide,\n prevSlide,\n goToSlide,\n orientationRef,\n offsetRef,\n ],\n );\n\n return (\n <CarouselContext.Provider value={contextValue}>\n <div className={classNames} {...restProps} ref={ref}>\n {children}\n </div>\n </CarouselContext.Provider>\n );\n },\n);\n\nCarouselRoot.displayName = \"Carousel\";\n\n/** Составная карусель с прокруткой по элементам или страницам в горизонтальной или вертикальной ориентации. */\nexport const Carousel = Object.assign(CarouselRoot, {\n Viewport: CarouselViewport,\n Track: CarouselTrack,\n Item: CarouselItem,\n PrevButton: CarouselPrevButton,\n NextButton: CarouselNextButton,\n Indicators: CarouselIndicators,\n});\n"],"names":[],"mappings":"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"}
@@ -1,26 +1,21 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
- import React, { useContext, useCallback } from "react";
2
+ import React, { useCallback, useContext } from "react";
3
3
  import { c as clsx } from "../../chunks/vendor-Bf_-FiU6.js";
4
- import { CarouselContext } from "./CarouselContext.js";
5
- import { useMatchMedia } from "../MediaWidth/useMatchMedia.js";
6
- import { ButtonIcon } from "../Button/ButtonIcon.js";
7
4
  import { CaretupStrokeSrvIcon20, CaretleftStrokeSrvIcon20, CaretdownStrokeSrvIcon20, CaretrightStrokeSrvIcon20 } from "@sberbusiness/icons-next";
8
5
  import { EOrientation } from "../../enums/EOrientation.js";
9
- import { s as styles } from "../../chunks/Carousel.module-CXIfk_97.js";
10
- const ORIENTATION_TO_PREV_ICON_MAP = {
11
- [EOrientation.HORIZONTAL]: /* @__PURE__ */ jsx(CaretleftStrokeSrvIcon20, { paletteIndex: 7 }),
12
- [EOrientation.VERTICAL]: /* @__PURE__ */ jsx(CaretupStrokeSrvIcon20, { paletteIndex: 7 })
13
- };
14
- const CarouselPrevButton = React.forwardRef(
15
- ({ children, className, onClick, ...restProps }, ref) => {
16
- const { orientation, atStart, prevSlide } = useContext(CarouselContext);
6
+ import { ButtonIcon } from "../Button/ButtonIcon.js";
7
+ import { useMatchMedia } from "../MediaWidth/useMatchMedia.js";
8
+ import { CarouselContext } from "./CarouselContext.js";
9
+ import { s as styles } from "../../chunks/Carousel.module-ugT1KfWo.js";
10
+ const CarouselNavButton = React.forwardRef(
11
+ ({ atBoundary, slide, onClick, className, children, defaultIcon, ...restProps }, ref) => {
17
12
  const touchDevice = useMatchMedia("(pointer: coarse)");
18
13
  const handleClick = useCallback(
19
14
  (event) => {
20
- if (!atStart) prevSlide();
15
+ if (!atBoundary) slide();
21
16
  onClick == null ? void 0 : onClick(event);
22
17
  },
23
- [atStart, prevSlide, onClick]
18
+ [atBoundary, slide, onClick]
24
19
  );
25
20
  if (touchDevice) {
26
21
  return null;
@@ -29,11 +24,32 @@ const CarouselPrevButton = React.forwardRef(
29
24
  ButtonIcon,
30
25
  {
31
26
  ...restProps,
32
- className: clsx(styles.navButton, styles.prev, className),
33
- "aria-disabled": atStart,
27
+ className: clsx(styles.navButton, className),
28
+ "aria-disabled": atBoundary,
34
29
  onClick: handleClick,
35
30
  ref,
36
- children: children || ORIENTATION_TO_PREV_ICON_MAP[orientation]
31
+ children: children || defaultIcon
32
+ }
33
+ );
34
+ }
35
+ );
36
+ CarouselNavButton.displayName = "CarouselNavButton";
37
+ const ORIENTATION_TO_PREV_ICON_MAP = {
38
+ [EOrientation.HORIZONTAL]: /* @__PURE__ */ jsx(CaretleftStrokeSrvIcon20, { paletteIndex: 7 }),
39
+ [EOrientation.VERTICAL]: /* @__PURE__ */ jsx(CaretupStrokeSrvIcon20, { paletteIndex: 7 })
40
+ };
41
+ const CarouselPrevButton = React.forwardRef(
42
+ ({ className, ...restProps }, ref) => {
43
+ const { orientation, atStart, prevSlide } = useContext(CarouselContext);
44
+ return /* @__PURE__ */ jsx(
45
+ CarouselNavButton,
46
+ {
47
+ ...restProps,
48
+ className: clsx(styles.prev, className),
49
+ atBoundary: atStart,
50
+ slide: prevSlide,
51
+ defaultIcon: ORIENTATION_TO_PREV_ICON_MAP[orientation],
52
+ ref
37
53
  }
38
54
  );
39
55
  }
@@ -44,28 +60,17 @@ const ORIENTATION_TO_NEXT_ICON_MAP = {
44
60
  [EOrientation.VERTICAL]: /* @__PURE__ */ jsx(CaretdownStrokeSrvIcon20, { paletteIndex: 7 })
45
61
  };
46
62
  const CarouselNextButton = React.forwardRef(
47
- ({ children, className, onClick, ...restProps }, ref) => {
63
+ ({ className, ...restProps }, ref) => {
48
64
  const { orientation, atEnd, nextSlide } = useContext(CarouselContext);
49
- const touchDevice = useMatchMedia("(pointer: coarse)");
50
- const handleClick = useCallback(
51
- (event) => {
52
- if (!atEnd) nextSlide();
53
- onClick == null ? void 0 : onClick(event);
54
- },
55
- [atEnd, nextSlide, onClick]
56
- );
57
- if (touchDevice) {
58
- return null;
59
- }
60
65
  return /* @__PURE__ */ jsx(
61
- ButtonIcon,
66
+ CarouselNavButton,
62
67
  {
63
68
  ...restProps,
64
- className: clsx(styles.navButton, styles.next, className),
65
- "aria-disabled": atEnd,
66
- onClick: handleClick,
67
- ref,
68
- children: children || ORIENTATION_TO_NEXT_ICON_MAP[orientation]
69
+ className: clsx(styles.next, className),
70
+ atBoundary: atEnd,
71
+ slide: nextSlide,
72
+ defaultIcon: ORIENTATION_TO_NEXT_ICON_MAP[orientation],
73
+ ref
69
74
  }
70
75
  );
71
76
  }
@@ -1 +1 @@
1
- {"version":3,"file":"CarouselButton.js","sources":["../../../src/components/Carousel/CarouselButton.tsx"],"sourcesContent":["import React, { useContext, useCallback } from \"react\";\nimport clsx from \"clsx\";\nimport { CarouselContext } from \"./CarouselContext\";\nimport { useMatchMedia } from \"../MediaWidth/useMatchMedia\";\nimport { ButtonIcon, IButtonIconProps } from \"../Button/ButtonIcon\";\nimport {\n CaretleftStrokeSrvIcon20,\n CaretupStrokeSrvIcon20,\n CaretrightStrokeSrvIcon20,\n CaretdownStrokeSrvIcon20,\n} from \"@sberbusiness/icons-next\";\nimport { EOrientation } from \"../../enums\";\nimport styles from \"./styles/Carousel.module.less\";\n\nconst ORIENTATION_TO_PREV_ICON_MAP: Record<EOrientation, React.ReactElement> = {\n [EOrientation.HORIZONTAL]: <CaretleftStrokeSrvIcon20 paletteIndex={7} />,\n [EOrientation.VERTICAL]: <CaretupStrokeSrvIcon20 paletteIndex={7} />,\n};\n\nexport const CarouselPrevButton = React.forwardRef<HTMLButtonElement, IButtonIconProps>(\n ({ children, className, onClick, ...restProps }, ref) => {\n const { orientation, atStart, prevSlide } = useContext(CarouselContext);\n const touchDevice = useMatchMedia(\"(pointer: coarse)\");\n\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n if (!atStart) prevSlide();\n onClick?.(event);\n },\n [atStart, prevSlide, onClick],\n );\n\n if (touchDevice) {\n return null;\n }\n\n return (\n <ButtonIcon\n {...restProps}\n className={clsx(styles.navButton, styles.prev, className)}\n aria-disabled={atStart}\n onClick={handleClick}\n ref={ref}\n >\n {children || ORIENTATION_TO_PREV_ICON_MAP[orientation]}\n </ButtonIcon>\n );\n },\n);\n\nCarouselPrevButton.displayName = \"Carousel.PrevButton\";\n\nconst ORIENTATION_TO_NEXT_ICON_MAP: Record<EOrientation, React.ReactElement> = {\n [EOrientation.HORIZONTAL]: <CaretrightStrokeSrvIcon20 paletteIndex={7} />,\n [EOrientation.VERTICAL]: <CaretdownStrokeSrvIcon20 paletteIndex={7} />,\n};\n\nexport const CarouselNextButton = React.forwardRef<HTMLButtonElement, IButtonIconProps>(\n ({ children, className, onClick, ...restProps }, ref) => {\n const { orientation, atEnd, nextSlide } = useContext(CarouselContext);\n const touchDevice = useMatchMedia(\"(pointer: coarse)\");\n\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n if (!atEnd) nextSlide();\n onClick?.(event);\n },\n [atEnd, nextSlide, onClick],\n );\n\n if (touchDevice) {\n return null;\n }\n\n return (\n <ButtonIcon\n {...restProps}\n className={clsx(styles.navButton, styles.next, className)}\n aria-disabled={atEnd}\n onClick={handleClick}\n ref={ref}\n >\n {children || ORIENTATION_TO_NEXT_ICON_MAP[orientation]}\n </ButtonIcon>\n );\n },\n);\n\nCarouselNextButton.displayName = \"Carousel.NextButton\";\n"],"names":[],"mappings":";;;;;;;;;AAcA,MAAM,+BAAyE;AAAA,EAC3E,CAAC,aAAa,UAAU,GAAG,oBAAC,0BAAA,EAAyB,cAAc,GAAG;AAAA,EACtE,CAAC,aAAa,QAAQ,GAAG,oBAAC,wBAAA,EAAuB,cAAc,EAAA,CAAG;AACtE;AAEO,MAAM,qBAAqB,MAAM;AAAA,EACpC,CAAC,EAAE,UAAU,WAAW,SAAS,GAAG,UAAA,GAAa,QAAQ;AACrD,UAAM,EAAE,aAAa,SAAS,UAAA,IAAc,WAAW,eAAe;AACtE,UAAM,cAAc,cAAc,mBAAmB;AAErD,UAAM,cAAc;AAAA,MAChB,CAAC,UAAU;AACP,YAAI,CAAC,QAAS,WAAA;AACd,2CAAU;AAAA,MACd;AAAA,MACA,CAAC,SAAS,WAAW,OAAO;AAAA,IAAA;AAGhC,QAAI,aAAa;AACb,aAAO;AAAA,IACX;AAEA,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACI,GAAG;AAAA,QACJ,WAAW,KAAK,OAAO,WAAW,OAAO,MAAM,SAAS;AAAA,QACxD,iBAAe;AAAA,QACf,SAAS;AAAA,QACT;AAAA,QAEC,UAAA,YAAY,6BAA6B,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAGjE;AACJ;AAEA,mBAAmB,cAAc;AAEjC,MAAM,+BAAyE;AAAA,EAC3E,CAAC,aAAa,UAAU,GAAG,oBAAC,2BAAA,EAA0B,cAAc,GAAG;AAAA,EACvE,CAAC,aAAa,QAAQ,GAAG,oBAAC,0BAAA,EAAyB,cAAc,EAAA,CAAG;AACxE;AAEO,MAAM,qBAAqB,MAAM;AAAA,EACpC,CAAC,EAAE,UAAU,WAAW,SAAS,GAAG,UAAA,GAAa,QAAQ;AACrD,UAAM,EAAE,aAAa,OAAO,UAAA,IAAc,WAAW,eAAe;AACpE,UAAM,cAAc,cAAc,mBAAmB;AAErD,UAAM,cAAc;AAAA,MAChB,CAAC,UAAU;AACP,YAAI,CAAC,MAAO,WAAA;AACZ,2CAAU;AAAA,MACd;AAAA,MACA,CAAC,OAAO,WAAW,OAAO;AAAA,IAAA;AAG9B,QAAI,aAAa;AACb,aAAO;AAAA,IACX;AAEA,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACI,GAAG;AAAA,QACJ,WAAW,KAAK,OAAO,WAAW,OAAO,MAAM,SAAS;AAAA,QACxD,iBAAe;AAAA,QACf,SAAS;AAAA,QACT;AAAA,QAEC,UAAA,YAAY,6BAA6B,WAAW;AAAA,MAAA;AAAA,IAAA;AAAA,EAGjE;AACJ;AAEA,mBAAmB,cAAc;"}
1
+ {"version":3,"file":"CarouselButton.js","sources":["../../../src/components/Carousel/CarouselButton.tsx"],"sourcesContent":["import React, { useContext, useCallback } from \"react\";\nimport clsx from \"clsx\";\nimport {\n CaretleftStrokeSrvIcon20,\n CaretupStrokeSrvIcon20,\n CaretrightStrokeSrvIcon20,\n CaretdownStrokeSrvIcon20,\n} from \"@sberbusiness/icons-next\";\nimport { EOrientation } from \"../../enums\";\nimport { ButtonIcon, IButtonIconProps } from \"../Button/ButtonIcon\";\nimport { useMatchMedia } from \"../MediaWidth/useMatchMedia\";\nimport { CarouselContext } from \"./CarouselContext\";\nimport styles from \"./styles/Carousel.module.less\";\n\n/** Свойства компонента CarouselNavButton. */\ninterface ICarouselNavButtonProps extends IButtonIconProps {\n /** Карусель у края в направлении кнопки: переход не выполняется, `aria-disabled` равен `true`. */\n atBoundary: boolean;\n /** Переход к соседнему слайду в направлении кнопки. */\n slide: () => void;\n /** Иконка, когда `children` не заданы. */\n defaultIcon: React.ReactElement;\n}\n\n/** Общая реализация `Carousel.PrevButton` и `Carousel.NextButton`. */\nconst CarouselNavButton = React.forwardRef<HTMLButtonElement, ICarouselNavButtonProps>(\n ({ atBoundary, slide, onClick, className, children, defaultIcon, ...restProps }, ref) => {\n const touchDevice = useMatchMedia(\"(pointer: coarse)\");\n\n const handleClick = useCallback<React.MouseEventHandler<HTMLButtonElement>>(\n (event) => {\n if (!atBoundary) slide();\n onClick?.(event);\n },\n [atBoundary, slide, onClick],\n );\n\n if (touchDevice) {\n return null;\n }\n\n return (\n <ButtonIcon\n {...restProps}\n className={clsx(styles.navButton, className)}\n aria-disabled={atBoundary}\n onClick={handleClick}\n ref={ref}\n >\n {children || defaultIcon}\n </ButtonIcon>\n );\n },\n);\n\nCarouselNavButton.displayName = \"CarouselNavButton\";\n\nconst ORIENTATION_TO_PREV_ICON_MAP: Record<EOrientation, React.ReactElement> = {\n [EOrientation.HORIZONTAL]: <CaretleftStrokeSrvIcon20 paletteIndex={7} />,\n [EOrientation.VERTICAL]: <CaretupStrokeSrvIcon20 paletteIndex={7} />,\n};\n\n/** Кнопка перехода к предыдущему слайду Carousel. При (pointer: coarse) не рендерится. */\nexport const CarouselPrevButton = React.forwardRef<HTMLButtonElement, IButtonIconProps>(\n ({ className, ...restProps }, ref) => {\n const { orientation, atStart, prevSlide } = useContext(CarouselContext);\n\n return (\n <CarouselNavButton\n {...restProps}\n className={clsx(styles.prev, className)}\n atBoundary={atStart}\n slide={prevSlide}\n defaultIcon={ORIENTATION_TO_PREV_ICON_MAP[orientation]}\n ref={ref}\n />\n );\n },\n);\n\nCarouselPrevButton.displayName = \"Carousel.PrevButton\";\n\nconst ORIENTATION_TO_NEXT_ICON_MAP: Record<EOrientation, React.ReactElement> = {\n [EOrientation.HORIZONTAL]: <CaretrightStrokeSrvIcon20 paletteIndex={7} />,\n [EOrientation.VERTICAL]: <CaretdownStrokeSrvIcon20 paletteIndex={7} />,\n};\n\n/** Кнопка перехода к следующему слайду Carousel. При (pointer: coarse) не рендерится. */\nexport const CarouselNextButton = React.forwardRef<HTMLButtonElement, IButtonIconProps>(\n ({ className, ...restProps }, ref) => {\n const { orientation, atEnd, nextSlide } = useContext(CarouselContext);\n\n return (\n <CarouselNavButton\n {...restProps}\n className={clsx(styles.next, className)}\n atBoundary={atEnd}\n slide={nextSlide}\n defaultIcon={ORIENTATION_TO_NEXT_ICON_MAP[orientation]}\n ref={ref}\n />\n );\n },\n);\n\nCarouselNextButton.displayName = \"Carousel.NextButton\";\n"],"names":[],"mappings":";;;;;;;;;AAyBA,MAAM,oBAAoB,MAAM;AAAA,EAC5B,CAAC,EAAE,YAAY,OAAO,SAAS,WAAW,UAAU,aAAa,GAAG,UAAA,GAAa,QAAQ;AACrF,UAAM,cAAc,cAAc,mBAAmB;AAErD,UAAM,cAAc;AAAA,MAChB,CAAC,UAAU;AACP,YAAI,CAAC,WAAY,OAAA;AACjB,2CAAU;AAAA,MACd;AAAA,MACA,CAAC,YAAY,OAAO,OAAO;AAAA,IAAA;AAG/B,QAAI,aAAa;AACb,aAAO;AAAA,IACX;AAEA,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACI,GAAG;AAAA,QACJ,WAAW,KAAK,OAAO,WAAW,SAAS;AAAA,QAC3C,iBAAe;AAAA,QACf,SAAS;AAAA,QACT;AAAA,QAEC,UAAA,YAAY;AAAA,MAAA;AAAA,IAAA;AAAA,EAGzB;AACJ;AAEA,kBAAkB,cAAc;AAEhC,MAAM,+BAAyE;AAAA,EAC3E,CAAC,aAAa,UAAU,GAAG,oBAAC,0BAAA,EAAyB,cAAc,GAAG;AAAA,EACtE,CAAC,aAAa,QAAQ,GAAG,oBAAC,wBAAA,EAAuB,cAAc,EAAA,CAAG;AACtE;AAGO,MAAM,qBAAqB,MAAM;AAAA,EACpC,CAAC,EAAE,WAAW,GAAG,UAAA,GAAa,QAAQ;AAClC,UAAM,EAAE,aAAa,SAAS,UAAA,IAAc,WAAW,eAAe;AAEtE,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACI,GAAG;AAAA,QACJ,WAAW,KAAK,OAAO,MAAM,SAAS;AAAA,QACtC,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,aAAa,6BAA6B,WAAW;AAAA,QACrD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGZ;AACJ;AAEA,mBAAmB,cAAc;AAEjC,MAAM,+BAAyE;AAAA,EAC3E,CAAC,aAAa,UAAU,GAAG,oBAAC,2BAAA,EAA0B,cAAc,GAAG;AAAA,EACvE,CAAC,aAAa,QAAQ,GAAG,oBAAC,0BAAA,EAAyB,cAAc,EAAA,CAAG;AACxE;AAGO,MAAM,qBAAqB,MAAM;AAAA,EACpC,CAAC,EAAE,WAAW,GAAG,UAAA,GAAa,QAAQ;AAClC,UAAM,EAAE,aAAa,OAAO,UAAA,IAAc,WAAW,eAAe;AAEpE,WACI;AAAA,MAAC;AAAA,MAAA;AAAA,QACI,GAAG;AAAA,QACJ,WAAW,KAAK,OAAO,MAAM,SAAS;AAAA,QACtC,YAAY;AAAA,QACZ,OAAO;AAAA,QACP,aAAa,6BAA6B,WAAW;AAAA,QACrD;AAAA,MAAA;AAAA,IAAA;AAAA,EAGZ;AACJ;AAEA,mBAAmB,cAAc;"}
@@ -4,7 +4,7 @@ import { c as clsx } from "../../chunks/vendor-Bf_-FiU6.js";
4
4
  import { CarouselContext } from "./CarouselContext.js";
5
5
  import { ECarouselScrollMode } from "./enums.js";
6
6
  import { PageIndicators } from "../PageIndicators/PageIndicators.js";
7
- import { s as styles } from "../../chunks/Carousel.module-CXIfk_97.js";
7
+ import { s as styles } from "../../chunks/Carousel.module-ugT1KfWo.js";
8
8
  const CarouselIndicators = React.forwardRef(
9
9
  ({ className, ...restProps }, ref) => {
10
10
  const { currentIndex, orientation, scrollMode, activeIndices, goToSlide } = useContext(CarouselContext);
@@ -3,7 +3,7 @@ import React, { useContext, useRef, useCallback } from "react";
3
3
  import { c as clsx } from "../../chunks/vendor-Bf_-FiU6.js";
4
4
  import { CarouselContext } from "./CarouselContext.js";
5
5
  import { mergeRefs } from "../../utils/refs.js";
6
- import { s as styles } from "../../chunks/Carousel.module-CXIfk_97.js";
6
+ import { s as styles } from "../../chunks/Carousel.module-ugT1KfWo.js";
7
7
  const CarouselItem = React.forwardRef(
8
8
  ({ children, className, index, ...restProps }, ref) => {
9
9
  const { slideRefs } = useContext(CarouselContext);
@@ -21,7 +21,7 @@ const CarouselItem = React.forwardRef(
21
21
  lastRegisteredIndexRef.current = null;
22
22
  }
23
23
  },
24
- [index]
24
+ [index, slideRefs]
25
25
  );
26
26
  const combinedRef = mergeRefs(ref, registerItemRef);
27
27
  return /* @__PURE__ */ jsx("div", { className: clsx(styles.slide, className), role: "group", ...restProps, ref: combinedRef, children });
@@ -1 +1 @@
1
- {"version":3,"file":"CarouselItem.js","sources":["../../../src/components/Carousel/CarouselItem.tsx"],"sourcesContent":["import React, { useContext, useRef, useCallback } from \"react\";\nimport clsx from \"clsx\";\nimport { ICarouselItemProps } from \"./types\";\nimport { CarouselContext } from \"./CarouselContext\";\nimport { mergeRefs } from \"../../utils/refs\";\nimport styles from \"./styles/Carousel.module.less\";\n\nexport const CarouselItem = React.forwardRef<HTMLDivElement, ICarouselItemProps>(\n ({ children, className, index, ...restProps }, ref) => {\n const { slideRefs } = useContext(CarouselContext);\n\n const lastRegisteredIndexRef = useRef<number | null>(null);\n\n const registerItemRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (node) {\n if (lastRegisteredIndexRef.current !== null && lastRegisteredIndexRef.current !== index) {\n slideRefs.current.delete(lastRegisteredIndexRef.current);\n }\n slideRefs.current.set(index, node);\n lastRegisteredIndexRef.current = index;\n } else if (lastRegisteredIndexRef.current !== null) {\n slideRefs.current.delete(lastRegisteredIndexRef.current);\n lastRegisteredIndexRef.current = null;\n }\n },\n [index],\n );\n\n const combinedRef = mergeRefs(ref, registerItemRef);\n\n return (\n <div className={clsx(styles.slide, className)} role=\"group\" {...restProps} ref={combinedRef}>\n {children}\n </div>\n );\n },\n);\n\nCarouselItem.displayName = \"Carousel.Item\";\n"],"names":[],"mappings":";;;;;;AAOO,MAAM,eAAe,MAAM;AAAA,EAC9B,CAAC,EAAE,UAAU,WAAW,OAAO,GAAG,UAAA,GAAa,QAAQ;AACnD,UAAM,EAAE,UAAA,IAAc,WAAW,eAAe;AAEhD,UAAM,yBAAyB,OAAsB,IAAI;AAEzD,UAAM,kBAAkB;AAAA,MACpB,CAAC,SAAgC;AAC7B,YAAI,MAAM;AACN,cAAI,uBAAuB,YAAY,QAAQ,uBAAuB,YAAY,OAAO;AACrF,sBAAU,QAAQ,OAAO,uBAAuB,OAAO;AAAA,UAC3D;AACA,oBAAU,QAAQ,IAAI,OAAO,IAAI;AACjC,iCAAuB,UAAU;AAAA,QACrC,WAAW,uBAAuB,YAAY,MAAM;AAChD,oBAAU,QAAQ,OAAO,uBAAuB,OAAO;AACvD,iCAAuB,UAAU;AAAA,QACrC;AAAA,MACJ;AAAA,MACA,CAAC,KAAK;AAAA,IAAA;AAGV,UAAM,cAAc,UAAU,KAAK,eAAe;AAElD,WACI,oBAAC,OAAA,EAAI,WAAW,KAAK,OAAO,OAAO,SAAS,GAAG,MAAK,SAAS,GAAG,WAAW,KAAK,aAC3E,UACL;AAAA,EAER;AACJ;AAEA,aAAa,cAAc;"}
1
+ {"version":3,"file":"CarouselItem.js","sources":["../../../src/components/Carousel/CarouselItem.tsx"],"sourcesContent":["import React, { useContext, useRef, useCallback } from \"react\";\nimport clsx from \"clsx\";\nimport { ICarouselItemProps } from \"./types\";\nimport { CarouselContext } from \"./CarouselContext\";\nimport { mergeRefs } from \"../../utils/refs\";\nimport styles from \"./styles/Carousel.module.less\";\n\n/** Слайд карусели: регистрирует свой DOM-узел по индексу для измерения и навигации. */\nexport const CarouselItem = React.forwardRef<HTMLDivElement, ICarouselItemProps>(\n ({ children, className, index, ...restProps }, ref) => {\n const { slideRefs } = useContext(CarouselContext);\n\n const lastRegisteredIndexRef = useRef<number | null>(null);\n\n const registerItemRef = useCallback(\n (node: HTMLDivElement | null) => {\n if (node) {\n if (lastRegisteredIndexRef.current !== null && lastRegisteredIndexRef.current !== index) {\n slideRefs.current.delete(lastRegisteredIndexRef.current);\n }\n slideRefs.current.set(index, node);\n lastRegisteredIndexRef.current = index;\n } else if (lastRegisteredIndexRef.current !== null) {\n slideRefs.current.delete(lastRegisteredIndexRef.current);\n lastRegisteredIndexRef.current = null;\n }\n },\n [index, slideRefs],\n );\n\n const combinedRef = mergeRefs(ref, registerItemRef);\n\n return (\n <div className={clsx(styles.slide, className)} role=\"group\" {...restProps} ref={combinedRef}>\n {children}\n </div>\n );\n },\n);\n\nCarouselItem.displayName = \"Carousel.Item\";\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,eAAe,MAAM;AAAA,EAC9B,CAAC,EAAE,UAAU,WAAW,OAAO,GAAG,UAAA,GAAa,QAAQ;AACnD,UAAM,EAAE,UAAA,IAAc,WAAW,eAAe;AAEhD,UAAM,yBAAyB,OAAsB,IAAI;AAEzD,UAAM,kBAAkB;AAAA,MACpB,CAAC,SAAgC;AAC7B,YAAI,MAAM;AACN,cAAI,uBAAuB,YAAY,QAAQ,uBAAuB,YAAY,OAAO;AACrF,sBAAU,QAAQ,OAAO,uBAAuB,OAAO;AAAA,UAC3D;AACA,oBAAU,QAAQ,IAAI,OAAO,IAAI;AACjC,iCAAuB,UAAU;AAAA,QACrC,WAAW,uBAAuB,YAAY,MAAM;AAChD,oBAAU,QAAQ,OAAO,uBAAuB,OAAO;AACvD,iCAAuB,UAAU;AAAA,QACrC;AAAA,MACJ;AAAA,MACA,CAAC,OAAO,SAAS;AAAA,IAAA;AAGrB,UAAM,cAAc,UAAU,KAAK,eAAe;AAElD,WACI,oBAAC,OAAA,EAAI,WAAW,KAAK,OAAO,OAAO,SAAS,GAAG,MAAK,SAAS,GAAG,WAAW,KAAK,aAC3E,UACL;AAAA,EAER;AACJ;AAEA,aAAa,cAAc;"}
@@ -4,7 +4,7 @@ import { c as clsx } from "../../chunks/vendor-Bf_-FiU6.js";
4
4
  import { CarouselContext } from "./CarouselContext.js";
5
5
  import { mergeRefs } from "../../utils/refs.js";
6
6
  import { ORIENTATION_TRANSFORM } from "./constants.js";
7
- import { s as styles } from "../../chunks/Carousel.module-CXIfk_97.js";
7
+ import { s as styles } from "../../chunks/Carousel.module-ugT1KfWo.js";
8
8
  const CarouselTrack = React.forwardRef(
9
9
  ({ children, className, style, ...restProps }, ref) => {
10
10
  const { gap, orientation, offset, trackRef } = useContext(CarouselContext);
@@ -2,18 +2,17 @@ import { jsx } from "react/jsx-runtime";
2
2
  import React, { useContext, useRef, useCallback, useEffect } from "react";
3
3
  import { c as clsx } from "../../chunks/vendor-Bf_-FiU6.js";
4
4
  import { CarouselContext } from "./CarouselContext.js";
5
- import { mergeRefs } from "../../utils/refs.js";
5
+ import { mergeRefs, useLatestRef } from "../../utils/refs.js";
6
6
  import { ORIENTATION_TRANSFORM } from "./constants.js";
7
7
  import { EOrientation } from "../../enums/EOrientation.js";
8
- import { s as styles } from "../../chunks/Carousel.module-CXIfk_97.js";
9
- const ORIENTATION_TO_TOUCH_KEY = {
10
- [EOrientation.HORIZONTAL]: "clientX",
11
- [EOrientation.VERTICAL]: "clientY"
12
- };
13
- const ORIENTATION_TO_CROSS_TOUCH_KEY = {
14
- [EOrientation.HORIZONTAL]: "clientY",
15
- [EOrientation.VERTICAL]: "clientX"
8
+ import { s as styles } from "../../chunks/Carousel.module-ugT1KfWo.js";
9
+ const ORIENTATION_TOUCH_KEYS = {
10
+ [EOrientation.HORIZONTAL]: { main: "clientX", cross: "clientY" },
11
+ [EOrientation.VERTICAL]: { main: "clientY", cross: "clientX" }
16
12
  };
13
+ const AXIS_LOCK_THRESHOLD = 5;
14
+ const SWIPE_THRESHOLD = 50;
15
+ const RUBBER_BAND_RESISTANCE = 3;
17
16
  const CarouselViewport = React.forwardRef(
18
17
  ({ children, className, style, onTouchStart, ...restProps }, ref) => {
19
18
  const {
@@ -27,112 +26,83 @@ const CarouselViewport = React.forwardRef(
27
26
  trackRef
28
27
  } = useContext(CarouselContext);
29
28
  const combinedRef = mergeRefs(ref, viewportRef);
30
- const draggingRef = useRef(false);
31
- const scrollingRef = useRef(null);
32
- const startCoordsRef = useRef({ clientX: 0, clientY: 0 });
33
- const startOffsetRef = useRef(0);
34
- const dragDistanceRef = useRef(0);
35
- const touchMoveHandlerRef = useRef(null);
36
- const touchEndHandlerRef = useRef(null);
29
+ const nextSlideRef = useLatestRef(nextSlide);
30
+ const prevSlideRef = useLatestRef(prevSlide);
31
+ const removeTouchListenersRef = useRef(null);
37
32
  const clearTouchListeners = useCallback(() => {
38
- if (touchMoveHandlerRef.current) {
39
- window.removeEventListener("touchmove", touchMoveHandlerRef.current);
40
- touchMoveHandlerRef.current = null;
41
- }
42
- if (touchEndHandlerRef.current) {
43
- window.removeEventListener("touchend", touchEndHandlerRef.current);
44
- window.removeEventListener("touchcancel", touchEndHandlerRef.current);
45
- touchEndHandlerRef.current = null;
46
- }
33
+ var _a;
34
+ (_a = removeTouchListenersRef.current) == null ? void 0 : _a.call(removeTouchListenersRef);
35
+ removeTouchListenersRef.current = null;
47
36
  }, []);
48
- const handleTouchMove = useCallback((event) => {
49
- if (!draggingRef.current || !trackRef.current) return;
50
- const touch = event.targetTouches[0];
51
- if (!touch) return;
37
+ const startGesture = (touch) => {
52
38
  const orientation = orientationRef.current;
53
- const touchKey = ORIENTATION_TO_TOUCH_KEY[orientation];
54
- const crossKey = ORIENTATION_TO_CROSS_TOUCH_KEY[orientation];
55
- const dragDistance = touch[touchKey] - startCoordsRef.current[touchKey];
56
- const crossDistance = touch[crossKey] - startCoordsRef.current[crossKey];
57
- if (scrollingRef.current === null) {
58
- const absMain = Math.abs(dragDistance);
59
- const absCross = Math.abs(crossDistance);
60
- if (absMain > 5 || absCross > 5) {
61
- scrollingRef.current = absCross > absMain;
39
+ const { main: mainKey, cross: crossKey } = ORIENTATION_TOUCH_KEYS[orientation];
40
+ const startMain = touch[mainKey];
41
+ const startCross = touch[crossKey];
42
+ const startOffset = offsetRef.current;
43
+ let scrolling = null;
44
+ let dragDistance = 0;
45
+ const handleTouchMove = (moveEvent) => {
46
+ if (!trackRef.current) return;
47
+ const moveTouch = moveEvent.targetTouches[0];
48
+ if (!moveTouch) return;
49
+ const mainDistance = moveTouch[mainKey] - startMain;
50
+ const crossDistance = moveTouch[crossKey] - startCross;
51
+ if (scrolling === null) {
52
+ const absMain = Math.abs(mainDistance);
53
+ const absCross = Math.abs(crossDistance);
54
+ if (absMain <= AXIS_LOCK_THRESHOLD && absCross <= AXIS_LOCK_THRESHOLD) return;
55
+ scrolling = absCross > absMain;
56
+ if (scrolling) {
57
+ window.removeEventListener("touchmove", handleTouchMove);
58
+ return;
59
+ }
60
+ trackRef.current.style.transition = "none";
62
61
  }
63
- }
64
- if (scrollingRef.current) {
65
- return;
66
- }
67
- if (event.cancelable) {
68
- event.preventDefault();
69
- }
70
- dragDistanceRef.current = dragDistance;
71
- const maxOffset = maxOffsetRef.current;
72
- const targetOffset = startOffsetRef.current - dragDistance;
73
- let currentTranslate = -targetOffset;
74
- if (targetOffset < 0) {
75
- currentTranslate = -targetOffset / 3;
76
- } else if (targetOffset > maxOffset) {
77
- currentTranslate = -(maxOffset + (targetOffset - maxOffset) / 3);
78
- }
79
- trackRef.current.style.transform = ORIENTATION_TRANSFORM[orientation](currentTranslate);
80
- trackRef.current.style.transition = "none";
81
- }, []);
82
- const handleTouchEnd = useCallback(
83
- (event) => {
84
- if (!draggingRef.current) return;
85
- draggingRef.current = false;
86
- const scrolling = scrollingRef.current;
87
- scrollingRef.current = null;
62
+ if (moveEvent.cancelable) {
63
+ moveEvent.preventDefault();
64
+ }
65
+ dragDistance = mainDistance;
66
+ const maxOffset = maxOffsetRef.current;
67
+ const targetOffset = startOffset - mainDistance;
68
+ let currentTranslate = -targetOffset;
69
+ if (targetOffset < 0) {
70
+ currentTranslate = -targetOffset / RUBBER_BAND_RESISTANCE;
71
+ } else if (targetOffset > maxOffset) {
72
+ currentTranslate = -(maxOffset + (targetOffset - maxOffset) / RUBBER_BAND_RESISTANCE);
73
+ }
74
+ trackRef.current.style.transform = ORIENTATION_TRANSFORM[orientation](currentTranslate);
75
+ };
76
+ const handleTouchEnd = (endEvent) => {
88
77
  clearTouchListeners();
89
78
  if (!trackRef.current) return;
90
79
  trackRef.current.style.transition = "";
91
- if (event.type === "touchcancel" || scrolling) {
92
- trackRef.current.style.transform = "";
93
- return;
94
- }
95
- const finalDrag = dragDistanceRef.current;
96
- const threshold = 50;
97
- if (finalDrag > threshold) {
98
- prevSlide();
99
- } else if (finalDrag < -threshold) {
100
- nextSlide();
101
- }
102
80
  trackRef.current.style.transform = "";
103
- },
104
- [nextSlide, prevSlide, clearTouchListeners]
105
- );
106
- const handleTouchStart = useCallback(
107
- (event) => {
108
- const touch = event.targetTouches[0];
109
- if (!touch) return;
110
- draggingRef.current = true;
111
- scrollingRef.current = null;
112
- startCoordsRef.current = {
113
- clientX: touch.clientX,
114
- clientY: touch.clientY
115
- };
116
- startOffsetRef.current = offsetRef.current;
117
- dragDistanceRef.current = 0;
118
- if (trackRef.current) {
119
- trackRef.current.style.transition = "none";
81
+ if (endEvent.type === "touchcancel" || scrolling) return;
82
+ if (dragDistance > SWIPE_THRESHOLD) {
83
+ prevSlideRef.current();
84
+ } else if (dragDistance < -SWIPE_THRESHOLD) {
85
+ nextSlideRef.current();
120
86
  }
121
- clearTouchListeners();
122
- touchMoveHandlerRef.current = handleTouchMove;
123
- touchEndHandlerRef.current = handleTouchEnd;
124
- window.addEventListener("touchmove", handleTouchMove, { passive: false });
125
- window.addEventListener("touchend", handleTouchEnd);
126
- window.addEventListener("touchcancel", handleTouchEnd);
127
- onTouchStart == null ? void 0 : onTouchStart(event);
128
- },
129
- [handleTouchMove, handleTouchEnd, clearTouchListeners, onTouchStart]
130
- );
131
- useEffect(() => {
132
- return () => {
133
- clearTouchListeners();
134
87
  };
135
- }, [clearTouchListeners]);
88
+ clearTouchListeners();
89
+ window.addEventListener("touchmove", handleTouchMove, { passive: false });
90
+ window.addEventListener("touchend", handleTouchEnd);
91
+ window.addEventListener("touchcancel", handleTouchEnd);
92
+ removeTouchListenersRef.current = () => {
93
+ window.removeEventListener("touchmove", handleTouchMove);
94
+ window.removeEventListener("touchend", handleTouchEnd);
95
+ window.removeEventListener("touchcancel", handleTouchEnd);
96
+ };
97
+ };
98
+ const handleTouchStart = (event) => {
99
+ const touch = event.targetTouches[0];
100
+ if (touch) {
101
+ startGesture(touch);
102
+ }
103
+ onTouchStart == null ? void 0 : onTouchStart(event);
104
+ };
105
+ useEffect(() => clearTouchListeners, [clearTouchListeners]);
136
106
  const runtimeStyle = {
137
107
  "--triplex-next-runtime-carousel-viewport-padding": viewportPaddingStyle
138
108
  };