@sberbusiness/triplex-next 0.39.0 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chunks/{AlertProcessSpoiler-DRoHuVl6.js → AlertProcessSpoiler-pSJaWhCa.js} +17 -17
- package/chunks/{AlertProcessSpoiler-DRoHuVl6.js.map → AlertProcessSpoiler-pSJaWhCa.js.map} +1 -1
- package/chunks/{CalendarViewItem-AChLlz4N.js → CalendarViewItem-Bwl6zTCS.js} +21 -21
- package/chunks/{CalendarViewItem-AChLlz4N.js.map → CalendarViewItem-Bwl6zTCS.js.map} +1 -1
- package/chunks/Card.module-CvHkJNAp.js +30 -0
- package/chunks/Card.module-CvHkJNAp.js.map +1 -0
- package/chunks/Carousel.module-DTaSq3Bq.js +30 -0
- package/chunks/Carousel.module-DTaSq3Bq.js.map +1 -0
- package/chunks/CheckboxTreeExtended.module-SaSBrJR4.js +24 -0
- package/chunks/CheckboxTreeExtended.module-SaSBrJR4.js.map +1 -0
- package/chunks/{Chip-DGvjOx0y.js → Chip-ClKhILGe.js} +17 -17
- package/chunks/{Chip-DGvjOx0y.js.map → Chip-ClKhILGe.js.map} +1 -1
- package/chunks/Confirm.module-D6mKowVi.js +24 -0
- package/chunks/Confirm.module-D6mKowVi.js.map +1 -0
- package/chunks/{DropdownListItem-COR0eOzM.js → DropdownListItem-V6Oe5CEm.js} +21 -23
- package/chunks/DropdownListItem-V6Oe5CEm.js.map +1 -0
- package/chunks/DropdownMobile.module-dTA2fTAB.js +40 -0
- package/chunks/DropdownMobile.module-dTA2fTAB.js.map +1 -0
- package/chunks/Footer.module-DUyQNLJD.js +12 -0
- package/chunks/Footer.module-DUyQNLJD.js.map +1 -0
- package/chunks/{HeaderLayoutSidebar.module-o5cCUCGl.js → HeaderLayoutSidebar.module-DZ9o9YLT.js} +4 -4
- package/chunks/HeaderLayoutSidebar.module-DZ9o9YLT.js.map +1 -0
- package/chunks/HeaderTabs.module-CfIX4nxS.js +12 -0
- package/chunks/HeaderTabs.module-CfIX4nxS.js.map +1 -0
- package/chunks/{HeaderTitle.module-CUVjwVW7.js → HeaderTitle.module-BmBk2AAI.js} +4 -4
- package/chunks/HeaderTitle.module-BmBk2AAI.js.map +1 -0
- package/chunks/ImageGalleryExtendedMain.module-DvyJj_xh.js +28 -0
- package/chunks/ImageGalleryExtendedMain.module-DvyJj_xh.js.map +1 -0
- package/chunks/{ImageGalleryExtendedThumb-B7xjP3UP.js → ImageGalleryExtendedThumb-BA0TstuP.js} +6 -6
- package/chunks/{ImageGalleryExtendedThumb-B7xjP3UP.js.map → ImageGalleryExtendedThumb-BA0TstuP.js.map} +1 -1
- package/chunks/IslandAccordion.module-rbKkMJ0T.js +44 -0
- package/chunks/IslandAccordion.module-rbKkMJ0T.js.map +1 -0
- package/chunks/IslandWidgetFooter.module-BatDP8na.js +12 -0
- package/chunks/IslandWidgetFooter.module-BatDP8na.js.map +1 -0
- package/chunks/IslandWidgetHeader.module-DF76XaTz.js +20 -0
- package/chunks/IslandWidgetHeader.module-DF76XaTz.js.map +1 -0
- package/chunks/{LightBoxContent-blTzF5vv.js → LightBoxContent-BY9UKPE0.js} +15 -15
- package/chunks/{LightBoxContent-blTzF5vv.js.map → LightBoxContent-BY9UKPE0.js.map} +1 -1
- package/chunks/LightBoxControls.module-CEa7tSP-.js +26 -0
- package/chunks/LightBoxControls.module-CEa7tSP-.js.map +1 -0
- package/chunks/{LightBoxSideOverlayClose.module-BVuB53vM.js → LightBoxSideOverlayClose.module-Dz_nN5cb.js} +4 -4
- package/chunks/LightBoxSideOverlayClose.module-Dz_nN5cb.js.map +1 -0
- package/chunks/{ListItemControlsButton-DulKpjwV.js → ListItemControlsButton-Cdfka5RR.js} +10 -10
- package/chunks/{ListItemControlsButton-DulKpjwV.js.map → ListItemControlsButton-Cdfka5RR.js.map} +1 -1
- package/chunks/ListItemTail.module-DhkBzx2c.js +18 -0
- package/chunks/ListItemTail.module-DhkBzx2c.js.map +1 -0
- package/chunks/ListMasterFooter.module-khPHsN9b.js +14 -0
- package/chunks/ListMasterFooter.module-khPHsN9b.js.map +1 -0
- package/chunks/ModalWindow.module-DZr3uvJa.js +28 -0
- package/chunks/ModalWindow.module-DZr3uvJa.js.map +1 -0
- package/chunks/Notification.module-DIhjUBLy.js +34 -0
- package/chunks/Notification.module-DIhjUBLy.js.map +1 -0
- package/chunks/Overlay.module-C5MzOOr3.js +30 -0
- package/chunks/Overlay.module-C5MzOOr3.js.map +1 -0
- package/chunks/Page.module-CujP9XrT.js +15 -0
- package/chunks/Page.module-CujP9XrT.js.map +1 -0
- package/chunks/SMSField.module-B5isl-Pm.js +26 -0
- package/chunks/SMSField.module-B5isl-Pm.js.map +1 -0
- package/chunks/SliderExtendedMarks.module-OQ_S7X8I.js +24 -0
- package/chunks/SliderExtendedMarks.module-OQ_S7X8I.js.map +1 -0
- package/chunks/{SliderExtendedRail-kRXLpNwt.js → SliderExtendedRail-C_QEaxu8.js} +6 -6
- package/chunks/{SliderExtendedRail-kRXLpNwt.js.map → SliderExtendedRail-C_QEaxu8.js.map} +1 -1
- package/chunks/StatusTracker.module-DCLE9tGr.js +42 -0
- package/chunks/StatusTracker.module-DCLE9tGr.js.map +1 -0
- package/chunks/{StepperStepArrowBorder-CsES9yvO.js → StepperStepArrowBorder-BNFcnlyF.js} +16 -16
- package/chunks/{StepperStepArrowBorder-CsES9yvO.js.map → StepperStepArrowBorder-BNFcnlyF.js.map} +1 -1
- package/chunks/{SuggestFieldMobileDropdownHint-YOB5F8TH.js → SuggestFieldMobileDropdownHint-DZV48TnI.js} +3 -3
- package/chunks/{SuggestFieldMobileDropdownHint-YOB5F8TH.js.map → SuggestFieldMobileDropdownHint-DZV48TnI.js.map} +1 -1
- package/chunks/TableFooter.module-DwBBlrsZ.js +22 -0
- package/chunks/TableFooter.module-DwBBlrsZ.js.map +1 -0
- package/chunks/TabsExtended.module-DrUKKP9t.js +26 -0
- package/chunks/TabsExtended.module-DrUKKP9t.js.map +1 -0
- package/chunks/TabsLine.module-D3PvmawY.js +36 -0
- package/chunks/TabsLine.module-D3PvmawY.js.map +1 -0
- package/chunks/TooltipDesktop.module-Cl4YkFeR.js +32 -0
- package/chunks/TooltipDesktop.module-Cl4YkFeR.js.map +1 -0
- package/chunks/TreeView.module-u57anLkg.js +12 -0
- package/chunks/TreeView.module-u57anLkg.js.map +1 -0
- package/chunks/{UploadZoneInput-Dc9Z6NrZ.js → UploadZoneInput-jFV3NG4O.js} +6 -6
- package/chunks/{UploadZoneInput-Dc9Z6NrZ.js.map → UploadZoneInput-jFV3NG4O.js.map} +1 -1
- package/chunks/{constants-b3mFJcdx.js → constants-DSPLz6qR.js} +27 -27
- package/chunks/{constants-b3mFJcdx.js.map → constants-DSPLz6qR.js.map} +1 -1
- package/chunks/{utils-Bv8Gz_QY.js → utils-CkRhDOwX.js} +27 -27
- package/chunks/{utils-Bv8Gz_QY.js.map → utils-CkRhDOwX.js.map} +1 -1
- package/chunks/{utils-BXgC_I8P.js → utils-DUYRscrm.js} +8 -8
- package/chunks/{utils-BXgC_I8P.js.map → utils-DUYRscrm.js.map} +1 -1
- package/chunks/{utils-DdrwqT9t.js → utils-t-KnNaPS.js} +6 -6
- package/chunks/{utils-DdrwqT9t.js.map → utils-t-KnNaPS.js.map} +1 -1
- package/chunks/{utils-B1pi9Ckc.js → utils-y1CGkIMc.js} +11 -11
- package/chunks/{utils-B1pi9Ckc.js.map → utils-y1CGkIMc.js.map} +1 -1
- package/chunks/vendor-BtZO8a0z.js +17814 -0
- package/chunks/vendor-BtZO8a0z.js.map +1 -0
- package/components/AbstractTree/AbstractTreeNode.js +1 -1
- package/components/AccordionBase/protected/AccordionBase.js +1 -1
- package/components/Alert/AlertContext/AlertContext.js +8 -8
- package/components/Alert/AlertProcess/AlertProcess.js +3 -3
- package/components/Alert/AlertProcess/components/AlertProcessSpoiler.js +2 -2
- package/components/Amount/Amount.js +3 -3
- package/components/Avatar/Avatar.js +14 -14
- package/components/Badge/Badge.js +5 -5
- package/components/Badge/BadgeDot.js +5 -5
- package/components/Badge/components/BadgeContent.js +7 -7
- package/components/Badge/components/BadgePostfix.js +2 -2
- package/components/Badge/components/BadgePrefix.js +2 -2
- package/components/Body/Body.js +4 -4
- package/components/Button/Button.js +21 -21
- package/components/Button/ButtonBase.js +1 -1
- package/components/Button/ButtonDropdown.js +9 -9
- package/components/Button/ButtonDropdownExtended.js +18 -22
- package/components/Button/ButtonDropdownExtended.js.map +1 -1
- package/components/Button/ButtonIcon.js +4 -4
- package/components/Button/ButtonIcon.js.map +1 -1
- package/components/Calendar/Calendar.js +5 -5
- package/components/Calendar/components/CalendarControls.js +1 -1
- package/components/Calendar/components/CalendarFooter.js +1 -1
- package/components/Calendar/components/CalendarViewDays.js +2 -2
- package/components/Calendar/components/CalendarViewItem.js +2 -2
- package/components/Calendar/components/CalendarViewMonths.js +1 -1
- package/components/Calendar/components/CalendarViewYears.js +1 -1
- package/components/Card/CardAction.js +6 -6
- package/components/Card/CardStatic.js +3 -3
- package/components/Card/components/CardContent/CardContent.js +2 -2
- package/components/Card/components/CardContent/components/CardContentBody.js +2 -2
- package/components/Card/components/CardContent/components/CardContentFooter.js +2 -2
- package/components/Card/components/CardContent/components/CardContentHeader.js +2 -2
- package/components/Card/components/CardMedia.js +2 -2
- package/components/Card/utils.js +1 -1
- package/components/Carousel/Carousel.js +2 -2
- package/components/Carousel/CarouselButton.js +2 -2
- package/components/Carousel/CarouselIndicators.js +2 -2
- package/components/Carousel/CarouselItem.js +2 -2
- package/components/Carousel/CarouselTrack.js +2 -2
- package/components/Carousel/CarouselViewport.js +2 -2
- package/components/CarouselExtended/CarouselExtended.js +2 -2
- package/components/Checkbox/Checkbox.js +11 -11
- package/components/Checkbox/CheckboxXGroup.js +9 -9
- package/components/Checkbox/CheckboxYGroup.js +2 -2
- package/components/CheckboxTreeExtended/CheckboxTreeExtended.js +2 -2
- package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedArrow.js +1 -1
- package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedCheckbox.js +2 -2
- package/components/CheckboxTreeExtended/components/CheckboxTreeExtendedNode.js +2 -2
- package/components/Chip/Chip.js +2 -2
- package/components/Chip/ChipClearButton.js +2 -2
- package/components/Chip/ChipDatePicker/ChipDatePicker.js +1 -1
- package/components/Chip/ChipDatePicker/ChipDatePickerTarget.js +1 -1
- package/components/Chip/ChipDropdownArrow.js +3 -3
- package/components/Chip/ChipIcon.js +1 -1
- package/components/Chip/ChipMultiselect.js +2 -2
- package/components/Chip/ChipOptions.js +2 -2
- package/components/Chip/ChipSelect/ChipSelect.js +2 -2
- package/components/Chip/ChipSelect/ChipSelectTarget.js +1 -1
- package/components/Chip/ChipSort.js +2 -2
- package/components/Chip/ChipSuggest/ChipSuggest.js +2 -2
- package/components/Chip/ChipSuggest/ChipSuggestDropdown.js +2 -2
- package/components/Chip/ChipSuggest/ChipSuggestTarget.js +1 -1
- package/components/Chip/ChipSuggest/desktop/ChipSuggestDesktopDropdownField.js +1 -1
- package/components/Chip/index.js +1 -1
- package/components/ChipGroup/ChipGroup.js +8 -8
- package/components/Col/Col.js +133 -133
- package/components/CollapsibleTree/CollapsibleTree.js +2 -2
- package/components/CollapsibleTree/components/CollapsibleTreeLeafContent.js +2 -2
- package/components/CollapsibleTree/components/CollapsibleTreeLeafNode.js +2 -2
- package/components/CollapsibleTree/components/CollapsibleTreeNodeHeader.js +5 -5
- package/components/CollapsibleTreeExtended/components/CollapsibleTreeExtendedNode.js +2 -2
- package/components/Confirm/Confirm.js +2 -2
- package/components/Confirm/components/ConfirmCloseButton.js +2 -2
- package/components/Confirm/components/ConfirmContent.js +2 -2
- package/components/Confirm/components/ConfirmContentTitle.js +2 -2
- package/components/Confirm/components/ConfirmControls.js +2 -2
- package/components/DatePickerExtended/DatePickerExtended.js +2 -2
- package/components/DatePickerExtended/DatePickerExtendedDropdown.js +2 -2
- package/components/DateRange/DateRange.js +4 -4
- package/components/DesignTokens/DesignTokenUtils.js +2 -2
- package/components/Divider/Divider.js +18 -18
- package/components/DocumentNumberEdit/DocumentNumberEdit.js +4 -4
- package/components/Dropdown/Dropdown.js +14 -7
- package/components/Dropdown/Dropdown.js.map +1 -1
- package/components/Dropdown/desktop/DropdownDesktop.js +21 -25
- package/components/Dropdown/desktop/DropdownDesktop.js.map +1 -1
- package/components/Dropdown/desktop/DropdownList.js +38 -73
- package/components/Dropdown/desktop/DropdownList.js.map +1 -1
- package/components/Dropdown/desktop/DropdownListItem.js +2 -2
- package/components/Dropdown/desktop/index.js +1 -1
- package/components/Dropdown/desktop/utils.js +34 -0
- package/components/Dropdown/desktop/utils.js.map +1 -0
- package/components/Dropdown/index.js +1 -1
- package/components/Dropdown/mobile/DropdownMobile.js +2 -2
- package/components/Dropdown/mobile/DropdownMobileBody.js +2 -2
- package/components/Dropdown/mobile/DropdownMobileClose.js +2 -2
- package/components/Dropdown/mobile/DropdownMobileFooter.js +2 -2
- package/components/Dropdown/mobile/DropdownMobileHeader.js +2 -2
- package/components/Dropdown/mobile/DropdownMobileInner.js +6 -4
- package/components/Dropdown/mobile/DropdownMobileInner.js.map +1 -1
- package/components/Dropdown/mobile/DropdownMobileInput.js +2 -2
- package/components/Dropdown/mobile/DropdownMobileList.js +3 -3
- package/components/Dropdown/mobile/DropdownMobileList.js.map +1 -1
- package/components/Dropdown/mobile/DropdownMobileListItem.js +2 -2
- package/components/Dropdown/mobile/DropdownMobileListItem.js.map +1 -1
- package/components/Dropdown/mobile/DropdownMobileLoader.js +2 -2
- package/components/Dropdown/mobile/DropdownMobileMaskedInput.js +2 -2
- package/components/Ellipsis/Ellipsis.js +4 -4
- package/components/EmptyView/EmptyView.js +5 -5
- package/components/ExpandAnimation/ExpandAnimation.js +2 -2
- package/components/FocusTrapExtended/FocusTrapExtended.js +1 -1
- package/components/Footer/Footer.js +1 -1
- package/components/Footer/components/FooterDescription.js +2 -2
- package/components/Footer/components/FooterDescriptionContent.js +2 -2
- package/components/Footer/components/FooterDescriptionControls.js +2 -2
- package/components/FormField/FormField.js +12 -12
- package/components/FormField/components/FormFieldClear.js +2 -2
- package/components/FormField/components/FormFieldCounter.js +1 -1
- package/components/FormField/components/FormFieldDescription.js +3 -3
- package/components/FormField/components/FormFieldInput.js +5 -5
- package/components/FormField/components/FormFieldLabel.js +8 -8
- package/components/FormField/components/FormFieldMaskedInput.js +7 -7
- package/components/FormField/components/FormFieldPostfix.js +2 -2
- package/components/FormField/components/FormFieldPrefix.js +2 -2
- package/components/FormField/components/FormFieldTarget.js +9 -9
- package/components/FormField/components/FormFieldTextarea.js +5 -5
- package/components/Gap/Gap.js +9 -9
- package/components/Header/Header.js +1 -1
- package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebar.js +2 -2
- package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarContent.js +2 -2
- package/components/Header/components/HeaderLayoutSidebar/HeaderLayoutSidebarSidebar.js +2 -2
- package/components/Header/components/HeaderSubheader/HeaderSubheader.js +3 -3
- package/components/Header/components/HeaderTabs/HeaderTabs.js +2 -2
- package/components/Header/components/HeaderTabs/HeaderTabsContent.js +2 -2
- package/components/Header/components/HeaderTabs/HeaderTabsControls.js +2 -2
- package/components/Header/components/HeaderTitle/HeaderTitle.js +2 -2
- package/components/Header/components/HeaderTitle/HeaderTitleContent.js +2 -2
- package/components/Header/components/HeaderTitle/HeaderTitleControls.js +2 -2
- package/components/HelpBox/HelpBox.js +2 -2
- package/components/IconWrapper/IconWrapper.js +3 -3
- package/components/ImageGallery/ImageGallery.js +1 -1
- package/components/ImageGalleryExtended/ImageGalleryExtended.js +3 -3
- package/components/ImageGalleryExtended/components/ImageGalleryExtendedArrow.js +2 -2
- package/components/ImageGalleryExtended/components/ImageGalleryExtendedDots.js +4 -4
- package/components/ImageGalleryExtended/components/ImageGalleryExtendedMain.js +2 -2
- package/components/ImageGalleryExtended/components/ImageGalleryExtendedSlide.js +2 -2
- package/components/ImageGalleryExtended/components/ImageGalleryExtendedSwipeTrack.js +2 -2
- package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumb.js +2 -2
- package/components/ImageGalleryExtended/components/ImageGalleryExtendedThumbnails.js +2 -2
- package/components/ImageGalleryExtended/components/index.js +1 -1
- package/components/ImageGalleryExtended/index.js +1 -1
- package/components/Island/Island.js +2 -2
- package/components/Island/components/IslandBody.js +2 -2
- package/components/Island/components/IslandFooter.js +2 -2
- package/components/Island/components/IslandHeader.js +2 -2
- package/components/Island/utils.js +1 -1
- package/components/IslandAccordion/IslandAccordion.js +3 -3
- package/components/IslandAccordion/components/IslandAccordionContent.js +1 -1
- package/components/IslandAccordion/components/IslandAccordionFooter.js +2 -2
- package/components/IslandAccordion/components/IslandAccordionItem.js +3 -3
- package/components/IslandWidget/IslandWidget.js +5 -5
- package/components/IslandWidget/components/IslandWidgetBody.js +2 -2
- package/components/IslandWidget/components/IslandWidgetExtraFooter.js +2 -2
- package/components/IslandWidget/components/IslandWidgetFooter.js +2 -2
- package/components/IslandWidget/components/IslandWidgetFooterContent.js +1 -1
- package/components/IslandWidget/components/IslandWidgetFooterControls.js +1 -1
- package/components/IslandWidget/components/IslandWidgetHeader.js +2 -2
- package/components/IslandWidget/components/IslandWidgetHeaderContent.js +2 -2
- package/components/IslandWidget/components/IslandWidgetHeaderControls.js +2 -2
- package/components/IslandWidget/components/IslandWidgetHeaderDescription.js +2 -2
- package/components/IslandWidget/components/IslandWidgetHeaderTitle.js +2 -2
- package/components/IslandWidget/components/IslandWidgetWrapper.js +2 -2
- package/components/LightBox/LightBox.js +6 -6
- package/components/LightBox/LightBoxContent.js +2 -2
- package/components/LightBox/LightBoxControls/LightBoxArrow.js +2 -2
- package/components/LightBox/LightBoxControls/LightBoxClose.js +2 -2
- package/components/LightBox/LightBoxControls/LightBoxControls.js +2 -2
- package/components/LightBox/LightBoxControls/LightBoxNext.js +2 -2
- package/components/LightBox/LightBoxControls/LightBoxPrev.js +2 -2
- package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlay.js +13 -13
- package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseDesktop.js +2 -2
- package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayCloseMobile.js +2 -2
- package/components/LightBox/LightBoxSideOverlay/LightBoxSideOverlayLoader.js +1 -1
- package/components/LightBox/LightBoxSidebars/LightBoxLeftSidebar.js +4 -4
- package/components/LightBox/LightBoxSidebars/LightBoxRightSidebar.js +4 -4
- package/components/LightBox/LightBoxViewManager/LightBoxViewManager.js +1 -1
- package/components/Link/Link.js +6 -6
- package/components/List/List.js +4 -4
- package/components/List/ListSortable.js +1 -1
- package/components/List/components/ListActionItem.js +2 -2
- package/components/List/components/ListEmptyState.js +2 -2
- package/components/List/components/ListItem.js +1 -1
- package/components/List/components/ListItemContent.js +5 -5
- package/components/List/components/ListItemControls.js +2 -2
- package/components/List/components/ListItemControlsButton.js +2 -2
- package/components/List/components/ListItemControlsButtonDropdown.js +2 -2
- package/components/List/components/ListItemLoading.js +2 -2
- package/components/List/components/ListItemSelectable.js +7 -7
- package/components/List/components/ListItemTailLeft.js +2 -2
- package/components/List/components/ListItemTailRight.js +2 -2
- package/components/List/components/ListSortableItem.js +3 -3
- package/components/List/components/ListSortableItemControls.js +2 -2
- package/components/List/components/ListSortableItemTarget.js +5 -5
- package/components/List/components/ListTableItem.js +4 -4
- package/components/List/index.js +1 -1
- package/components/ListMaster/ListMaster.js +1 -1
- package/components/ListMaster/components/ListMasterBody.js +1 -1
- package/components/ListMaster/components/ListMasterChipGroup.js +2 -2
- package/components/ListMaster/components/ListMasterFooter.js +2 -2
- package/components/ListMaster/components/ListMasterFooterControls.js +2 -2
- package/components/ListMaster/components/ListMasterFooterDescription.js +2 -2
- package/components/ListMaster/components/ListMasterHeader.js +3 -3
- package/components/ListMaster/components/SelectionControls.js +3 -3
- package/components/Loader/LoaderMiddle/LoaderMiddle.js +9 -9
- package/components/Loader/LoaderSmall/LoaderSmall.js +11 -11
- package/components/LoaderScreen/LoaderScreen.js +6 -6
- package/components/Marker/Marker.js +2 -2
- package/components/Marker/utils.js +1 -1
- package/components/MarkerStatus/MarkerStatus.js +8 -8
- package/components/ModalWindow/ModalWindow.js +2 -2
- package/components/ModalWindow/components/ModalWindowBody.js +2 -2
- package/components/ModalWindow/components/ModalWindowClose.js +1 -1
- package/components/ModalWindow/components/ModalWindowContent.js +2 -2
- package/components/ModalWindow/components/ModalWindowHeader.js +2 -2
- package/components/ModalWindow/components/ModalWindowViewManager.js +2 -2
- package/components/MonthYearRange/MonthYearRange.js +4 -4
- package/components/MultiselectField/components/MultiselectFieldDropdown.js +2 -2
- package/components/MultiselectField/components/MultiselectFieldDropdownContent.js +6 -6
- package/components/MultiselectField/components/MultiselectFieldDropdownFooter.js +2 -2
- package/components/MultiselectField/components/MultiselectFieldDropdownHeader.js +2 -2
- package/components/Notification/Notification.js +3 -3
- package/components/Notification/NotificationGrouped.js +1 -1
- package/components/Notification/components/NotificationBody.js +1 -1
- package/components/Notification/components/NotificationBodyList.js +2 -2
- package/components/Notification/components/NotificationClose.js +1 -1
- package/components/Notification/components/NotificationFooter.js +1 -1
- package/components/Notification/components/NotificationGroupedFooter.js +2 -2
- package/components/Notification/components/NotificationHeader.js +1 -1
- package/components/Notification/components/NotificationIcon.js +1 -1
- package/components/Notification/components/NotificationTime.js +1 -1
- package/components/OrderedList/OrderedList.js +3 -3
- package/components/OrderedList/OrderedListItem.js +3 -3
- package/components/Overlay/Overlay.js +2 -2
- package/components/Overlay/OverlayMask.js +2 -2
- package/components/Overlay/OverlayPanel.js +2 -2
- package/components/Page/Page.js +2 -2
- package/components/Page/components/BodyPage.js +4 -4
- package/components/Page/components/FooterPage.js +2 -2
- package/components/Page/components/HeaderPage.js +2 -2
- package/components/Pagination/components/PaginationExtended.js +3 -3
- package/components/Pagination/components/PaginationNavigationButton.js +2 -2
- package/components/Pagination/components/PaginationNavigationExtended.js +2 -2
- package/components/Pagination/components/PaginationPageButton.js +3 -3
- package/components/Pagination/components/PaginationPageEllipsis.js +2 -2
- package/components/Pagination/components/PaginationSelect.js +3 -3
- package/components/Pagination/utils/paginationUtils.js +1 -1
- package/components/Portal/Portal.js.map +1 -1
- package/components/Radio/Radio.js +10 -10
- package/components/Radio/RadioXGroup.js +9 -9
- package/components/Radio/RadioYGroup.js +2 -2
- package/components/Row/Row.js +5 -5
- package/components/SMSField/SMSField.js +3 -3
- package/components/SMSField/components/RefreshIcon.js +2 -2
- package/components/SMSField/components/SMSFieldInput.js +2 -2
- package/components/SMSField/components/SMSFieldRefresh.js +2 -2
- package/components/SMSField/components/SMSFieldSubmit.js +2 -2
- package/components/SMSField/components/SMSFieldTooltip.js +1 -1
- package/components/SegmentedControl/SegmentedControl.js +10 -10
- package/components/SegmentedControl/SegmentedControlSegment.js +4 -4
- package/components/SelectExtendedField/SelectExtendedField.js +2 -2
- package/components/SelectExtendedField/components/SelectExtendedFieldDropdown.js +1 -1
- package/components/SelectExtendedField/components/SelectExtendedFieldDropdownDefault.js +1 -1
- package/components/SelectExtendedField/components/SelectExtendedFieldTarget.js +8 -8
- package/components/SelectField/SelectField.js +2 -2
- package/components/Skeleton/Skeleton.js +5 -5
- package/components/SliderExtended/SliderExtended.js +3 -3
- package/components/SliderExtended/components/SliderExtendedDot/SliderExtendedDot.js +6 -6
- package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMark.js +2 -2
- package/components/SliderExtended/components/SliderExtendedMarks/SliderExtendedMarks.js +2 -2
- package/components/SliderExtended/components/SliderExtendedRail.js +2 -2
- package/components/SliderExtended/components/SliderExtendedTooltip/SliderExtendedTooltip.js +5 -5
- package/components/SliderExtended/components/SliderExtendedTrack/SliderExtendedTrack.js +7 -7
- package/components/SmallInput/SmallInput.js +2 -2
- package/components/Spoiler/Spoiler.js +11 -11
- package/components/StatusTracker/StatusTracker.js +3 -3
- package/components/StatusTracker/components/StatusTrackerAlert.js +2 -2
- package/components/StatusTracker/components/StatusTrackerBody.js +2 -2
- package/components/StatusTracker/components/StatusTrackerButton.js +2 -2
- package/components/StatusTracker/components/StatusTrackerDescription.js +2 -2
- package/components/StatusTracker/components/StatusTrackerFooter.js +2 -2
- package/components/StatusTracker/components/StatusTrackerHeader.js +2 -2
- package/components/StatusTracker/components/StatusTrackerMedia.js +2 -2
- package/components/StatusTracker/components/StatusTrackerStatus.js +2 -2
- package/components/StatusTracker/components/StatusTrackerStatusGroup.js +2 -2
- package/components/StatusTracker/components/StatusTrackerSum.js +2 -2
- package/components/StatusTracker/components/StatusTrackerTitle.js +2 -2
- package/components/Step/Step.js +11 -11
- package/components/Stepper/Stepper.js +9 -9
- package/components/Stepper/StepperExtended.js +2 -2
- package/components/Stepper/StepperStep.js +3 -3
- package/components/Stepper/StepperStepArrowBorder.js +1 -1
- package/components/Suggest/SuggestMobileDropdownContent.js +3 -3
- package/components/Suggest/useSuggest.js +1 -1
- package/components/SuggestField/SuggestField.js +1 -1
- package/components/SuggestField/desktop/SuggestFieldDesktop.js +2 -2
- package/components/SuggestField/desktop/SuggestFieldDesktopDropdown.js +1 -1
- package/components/SuggestField/index.js +1 -1
- package/components/SuggestField/mobile/SuggestFieldMobile.js +1 -1
- package/components/SuggestField/mobile/SuggestFieldMobileDropdown.js +2 -2
- package/components/SuggestField/mobile/SuggestFieldMobileDropdownHint.js +1 -1
- package/components/SuggestField/mobile/index.js +1 -1
- package/components/SwipeableArea/SwipeableArea.js +9 -9
- package/components/Table/ChipPanel.js +2 -2
- package/components/Table/ChipPanelLinks.js +2 -2
- package/components/Table/FilterPanel.js +3 -3
- package/components/Table/MasterTable.js +3 -3
- package/components/Table/NoColumns.js +3 -3
- package/components/Table/PaginationPanel.js +3 -3
- package/components/Table/TableBasic/TableBasic.js +2 -2
- package/components/Table/TableBasic/components/TableBasicBody.js +2 -2
- package/components/Table/TableBasic/components/TableBasicHeader.js +2 -2
- package/components/Table/TableBasic/components/TableBasicRow.js +2 -2
- package/components/Table/TableBasicSettings/TableBasicSettings.js +3 -3
- package/components/Table/TableBasicSettings/components/ColumnSettingsSortableListItemTarget.js +3 -3
- package/components/Table/TableBasicSettings/components/ColumnSettingsStaticListItem.js +2 -2
- package/components/Table/TableBasicSettings/components/TableBasicSettingsBody.js +2 -2
- package/components/Table/TableBasicSettings/components/TableBasicSettingsFooter.js +2 -2
- package/components/Table/TableBasicSettings/components/TableBasicSettingsHeader.js +2 -2
- package/components/Table/TableFooter/TableFooter.js +2 -2
- package/components/Table/TableFooter/components/TableFooterSummary.js +1 -1
- package/components/Table/TableFooter/components/TableFooterSummaryAmount.js +1 -1
- package/components/Table/TableFooter/components/TableFooterSummarySelectAllButton.js +1 -1
- package/components/Table/TableFooter/components/TableFooterSummarySelectedCount.js +1 -1
- package/components/Table/utils.js +1 -1
- package/components/Tabs/Tabs.js +6 -6
- package/components/TabsExtended/TabsExtended.js +3 -3
- package/components/TabsExtended/components/TabsExtendedContent.js +2 -2
- package/components/TabsExtended/components/TabsExtendedDropdownWrapper.js +2 -2
- package/components/TabsExtended/components/TabsExtendedTab.js +2 -2
- package/components/TabsExtended/components/TabsExtendedTabButton.js +2 -2
- package/components/TabsExtended/components/TabsExtendedTabsWrapper.js +2 -2
- package/components/TabsExtended/utils.js +1 -1
- package/components/TabsLine/TabsLine.js +2 -2
- package/components/TabsLine/components/TabsLineDesktop.js +2 -2
- package/components/TabsLine/components/TabsLineDropdown.js +3 -3
- package/components/TabsLine/components/TabsLineItem.js +2 -2
- package/components/TabsLine/components/TabsLineMobile.js +2 -2
- package/components/Tag/Tag.js +6 -6
- package/components/TagColor/TagColor.js +11 -11
- package/components/TagGroup/TagGroup.js +5 -5
- package/components/ThemeProvider/ThemeProvider.js +1 -1
- package/components/ThemeProvider/components/ThemeProviderView.js +1 -1
- package/components/Tooltip/components/common/TooltipBody.js +2 -2
- package/components/Tooltip/components/common/TooltipLink.js +6 -6
- package/components/Tooltip/components/common/TooltipXButton.js +1 -1
- package/components/Tooltip/components/desktop/components/TooltipDesktopBase.js +2 -2
- package/components/Tooltip/components/desktop/components/TooltipDesktopTip.js +2 -2
- package/components/Tooltip/components/mobile/TooltipMobile.js +5 -5
- package/components/TopOverlay/TopOverlay.js +7 -7
- package/components/TreeView/TreeView.js +2 -2
- package/components/TreeView/components/TreeViewGroup.js +1 -1
- package/components/TreeView/components/TreeViewNode.js +2 -2
- package/components/Typography/Caption.js +8 -8
- package/components/Typography/CodeText.js +3 -3
- package/components/Typography/Text.js +10 -10
- package/components/Typography/Title.js +11 -11
- package/components/Typography/Title.js.map +1 -1
- package/components/Typography/constants.js +1 -1
- package/components/UnorderedList/UnorderedList.js +3 -3
- package/components/UnorderedList/UnorderedListItem.js +3 -3
- package/components/UploadZone/UploadZone.js +3 -3
- package/components/UploadZone/components/UploadZoneInput.js +2 -2
- package/components/UploadZone/index.js +1 -1
- package/components/WindowResizeListener/WindowResizeListener.js +1 -1
- package/components/index.js +6 -6
- package/index.d.ts +52 -19
- package/index.js +6 -6
- package/package.json +1 -1
- package/styles/triplex-next.css +2933 -2932
- package/utils/amountUtils.js +1 -1
- package/chunks/Card.module-CZ1_wRdI.js +0 -30
- package/chunks/Card.module-CZ1_wRdI.js.map +0 -1
- package/chunks/Carousel.module-COe08s01.js +0 -30
- package/chunks/Carousel.module-COe08s01.js.map +0 -1
- package/chunks/CheckboxTreeExtended.module-CsB5Xz5K.js +0 -24
- package/chunks/CheckboxTreeExtended.module-CsB5Xz5K.js.map +0 -1
- package/chunks/Confirm.module-CEJR1txO.js +0 -24
- package/chunks/Confirm.module-CEJR1txO.js.map +0 -1
- package/chunks/DropdownListItem-COR0eOzM.js.map +0 -1
- package/chunks/DropdownMobile.module-DUiUSr13.js +0 -40
- package/chunks/DropdownMobile.module-DUiUSr13.js.map +0 -1
- package/chunks/Footer.module-DUTwBl0x.js +0 -12
- package/chunks/Footer.module-DUTwBl0x.js.map +0 -1
- package/chunks/HeaderLayoutSidebar.module-o5cCUCGl.js.map +0 -1
- package/chunks/HeaderTabs.module-Ch5Mbe7q.js +0 -12
- package/chunks/HeaderTabs.module-Ch5Mbe7q.js.map +0 -1
- package/chunks/HeaderTitle.module-CUVjwVW7.js.map +0 -1
- package/chunks/ImageGalleryExtendedMain.module-BMoLBevi.js +0 -28
- package/chunks/ImageGalleryExtendedMain.module-BMoLBevi.js.map +0 -1
- package/chunks/IslandAccordion.module-YxGUkwAy.js +0 -44
- package/chunks/IslandAccordion.module-YxGUkwAy.js.map +0 -1
- package/chunks/IslandWidgetFooter.module-Bk3x1llO.js +0 -12
- package/chunks/IslandWidgetFooter.module-Bk3x1llO.js.map +0 -1
- package/chunks/IslandWidgetHeader.module-BcrHca9Y.js +0 -20
- package/chunks/IslandWidgetHeader.module-BcrHca9Y.js.map +0 -1
- package/chunks/LightBoxControls.module-DisqspyG.js +0 -26
- package/chunks/LightBoxControls.module-DisqspyG.js.map +0 -1
- package/chunks/LightBoxSideOverlayClose.module-BVuB53vM.js.map +0 -1
- package/chunks/ListItemTail.module-B24d99yc.js +0 -18
- package/chunks/ListItemTail.module-B24d99yc.js.map +0 -1
- package/chunks/ListMasterFooter.module-XwfScyft.js +0 -14
- package/chunks/ListMasterFooter.module-XwfScyft.js.map +0 -1
- package/chunks/ModalWindow.module-CAccCwuD.js +0 -28
- package/chunks/ModalWindow.module-CAccCwuD.js.map +0 -1
- package/chunks/Notification.module-yXlyaoAB.js +0 -34
- package/chunks/Notification.module-yXlyaoAB.js.map +0 -1
- package/chunks/Overlay.module-gnmqM0Mg.js +0 -30
- package/chunks/Overlay.module-gnmqM0Mg.js.map +0 -1
- package/chunks/Page.module-CyuFcFEq.js +0 -15
- package/chunks/Page.module-CyuFcFEq.js.map +0 -1
- package/chunks/SMSField.module-By9uV96A.js +0 -26
- package/chunks/SMSField.module-By9uV96A.js.map +0 -1
- package/chunks/SliderExtendedMarks.module-DwGOsapl.js +0 -24
- package/chunks/SliderExtendedMarks.module-DwGOsapl.js.map +0 -1
- package/chunks/StatusTracker.module-DSfmXNxw.js +0 -42
- package/chunks/StatusTracker.module-DSfmXNxw.js.map +0 -1
- package/chunks/TableFooter.module-DM5tgc_b.js +0 -22
- package/chunks/TableFooter.module-DM5tgc_b.js.map +0 -1
- package/chunks/TabsExtended.module-91rJFYMk.js +0 -26
- package/chunks/TabsExtended.module-91rJFYMk.js.map +0 -1
- package/chunks/TabsLine.module-DAe_P2wh.js +0 -36
- package/chunks/TabsLine.module-DAe_P2wh.js.map +0 -1
- package/chunks/TooltipDesktop.module-BW_tN5pN.js +0 -32
- package/chunks/TooltipDesktop.module-BW_tN5pN.js.map +0 -1
- package/chunks/TreeView.module-BheprFto.js +0 -12
- package/chunks/TreeView.module-BheprFto.js.map +0 -1
- package/chunks/vendor-DKrjZZwJ.js +0 -36109
- package/chunks/vendor-DKrjZZwJ.js.map +0 -1
- package/components/Carousel/__tests__/utils.js +0 -92
- package/components/Carousel/__tests__/utils.js.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useState, useRef, useCallback, useEffect } from "react";
|
|
3
|
-
import { c as clsx } from "../../../chunks/vendor-
|
|
3
|
+
import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
4
4
|
import { EDropdownDirection, EDropdownAlignment, EDropdownWidth } from "./enums.js";
|
|
5
5
|
import { EComponentSize } from "../../../enums/EComponentSize.js";
|
|
6
6
|
import { createSizeToClassNameMap } from "../../../utils/classNameMaps.js";
|
|
7
7
|
import { useToken } from "../../ThemeProvider/useToken.js";
|
|
8
8
|
import { isKey } from "../../../utils/keyboard.js";
|
|
9
|
-
const dropdownDesktop = "
|
|
10
|
-
const sm = "
|
|
11
|
-
const md = "
|
|
12
|
-
const lg = "
|
|
13
|
-
const dropdownDesktopOverflowHidden = "
|
|
9
|
+
const dropdownDesktop = "dropdownDesktop__9d4d0210";
|
|
10
|
+
const sm = "sm__638f1290";
|
|
11
|
+
const md = "md__d107cb92";
|
|
12
|
+
const lg = "lg__ec7fe50f";
|
|
13
|
+
const dropdownDesktopOverflowHidden = "dropdownDesktopOverflowHidden__37408048";
|
|
14
14
|
const styles = {
|
|
15
15
|
dropdownDesktop,
|
|
16
16
|
sm,
|
|
@@ -20,6 +20,7 @@ const styles = {
|
|
|
20
20
|
};
|
|
21
21
|
const sizeToClassNameMap = createSizeToClassNameMap(styles);
|
|
22
22
|
const overflowHiddenClassName = styles.dropdownDesktopOverflowHidden;
|
|
23
|
+
const TARGET_OFFSET = 4;
|
|
23
24
|
const DropdownDesktop = React.forwardRef((props, ref) => {
|
|
24
25
|
const {
|
|
25
26
|
children,
|
|
@@ -38,15 +39,12 @@ const DropdownDesktop = React.forwardRef((props, ref) => {
|
|
|
38
39
|
const dropdownRef = useRef(null);
|
|
39
40
|
const { scopeClassName } = useToken();
|
|
40
41
|
const classNames = clsx(styles.dropdownDesktop, sizeToClassNameMap[size], scopeClassName, className);
|
|
41
|
-
const wheelHandler = useCallback(
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
},
|
|
48
|
-
[dropdownRef]
|
|
49
|
-
);
|
|
42
|
+
const wheelHandler = useCallback((event) => {
|
|
43
|
+
var _a;
|
|
44
|
+
if (!((_a = dropdownRef.current) == null ? void 0 : _a.contains(event.target))) {
|
|
45
|
+
event.preventDefault();
|
|
46
|
+
}
|
|
47
|
+
}, []);
|
|
50
48
|
const keyDownHandler = useCallback((event) => {
|
|
51
49
|
if (event.target === document.body) {
|
|
52
50
|
const key = event.code || event.keyCode;
|
|
@@ -56,7 +54,6 @@ const DropdownDesktop = React.forwardRef((props, ref) => {
|
|
|
56
54
|
}
|
|
57
55
|
}, []);
|
|
58
56
|
const toggleScrollEventListener = useCallback(
|
|
59
|
-
/** Запрет скролла всей страницы. */
|
|
60
57
|
(add) => {
|
|
61
58
|
if (add) {
|
|
62
59
|
document.addEventListener("wheel", wheelHandler, { passive: false });
|
|
@@ -85,19 +82,18 @@ const DropdownDesktop = React.forwardRef((props, ref) => {
|
|
|
85
82
|
);
|
|
86
83
|
const calculatePositionVertical = useCallback(
|
|
87
84
|
(css, dropdownRect, targetRect) => {
|
|
88
|
-
const offset = 4;
|
|
89
85
|
if (direction === EDropdownDirection.AUTO) {
|
|
90
|
-
if (targetRect.bottom +
|
|
91
|
-
css.top = targetRect.bottom +
|
|
92
|
-
} else if (targetRect.top -
|
|
93
|
-
css.bottom = document.documentElement.clientHeight - targetRect.top +
|
|
86
|
+
if (targetRect.bottom + TARGET_OFFSET + dropdownRect.height < document.documentElement.clientHeight) {
|
|
87
|
+
css.top = targetRect.bottom + TARGET_OFFSET;
|
|
88
|
+
} else if (targetRect.top - TARGET_OFFSET - dropdownRect.height > 0) {
|
|
89
|
+
css.bottom = document.documentElement.clientHeight - targetRect.top + TARGET_OFFSET;
|
|
94
90
|
} else {
|
|
95
|
-
css.top = targetRect.bottom +
|
|
91
|
+
css.top = targetRect.bottom + TARGET_OFFSET;
|
|
96
92
|
}
|
|
97
93
|
} else if (direction === EDropdownDirection.BOTTOM) {
|
|
98
|
-
css.top = targetRect.bottom +
|
|
94
|
+
css.top = targetRect.bottom + TARGET_OFFSET;
|
|
99
95
|
} else if (direction === EDropdownDirection.TOP) {
|
|
100
|
-
css.bottom = document.documentElement.clientHeight - targetRect.top +
|
|
96
|
+
css.bottom = document.documentElement.clientHeight - targetRect.top + TARGET_OFFSET;
|
|
101
97
|
}
|
|
102
98
|
},
|
|
103
99
|
[direction]
|
|
@@ -168,7 +164,7 @@ const DropdownDesktop = React.forwardRef((props, ref) => {
|
|
|
168
164
|
className: classNames,
|
|
169
165
|
style: { ...styleState, ...styleProp },
|
|
170
166
|
...rest,
|
|
171
|
-
"data-tx": "0.
|
|
167
|
+
"data-tx": "0.40.0",
|
|
172
168
|
ref: setRef,
|
|
173
169
|
children
|
|
174
170
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownDesktop.js","sources":["../../../../src/components/Dropdown/desktop/DropdownDesktop.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { EDropdownAlignment, EDropdownDirection, EDropdownWidth } from \"./enums\";\nimport { EComponentSize } from \"../../../enums/EComponentSize\";\nimport { createSizeToClassNameMap } from \"../../../utils/classNameMaps\";\nimport { useToken } from \"../../ThemeProvider/useToken\";\nimport { isKey } from \"../../../utils/keyboard\";\nimport styles from \"../styles/DropdownDesktop.module.less\";\n\n/** Свойства компонента DropdownDesktop. */\nexport interface IDropdownDesktopProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Открыт. */\n opened: boolean;\n /** Устанавливает флаг opened. */\n setOpened: (opened: boolean) => void;\n /** Ссылка на управляющий элемент. */\n targetRef: React.RefObject<HTMLElement>;\n /** Размер дропдауна. */\n size?: EComponentSize;\n /** Направление выпадающего меню. */\n direction?: EDropdownDirection;\n /** Выравнивание списка относительно управляющего элемента. */\n alignment?: EDropdownAlignment;\n /** Вариант расчёта ширины выпадающего списка. */\n width?: EDropdownWidth;\n}\n\nconst sizeToClassNameMap = createSizeToClassNameMap(styles);\n\nconst overflowHiddenClassName = styles.dropdownDesktopOverflowHidden;\n\n/** Выпадающее меню. */\nexport const DropdownDesktop = React.forwardRef<HTMLDivElement, IDropdownDesktopProps>((props, ref) => {\n const {\n children,\n className,\n style: styleProp,\n size = EComponentSize.MD,\n direction = EDropdownDirection.AUTO,\n alignment = EDropdownAlignment.LEFT,\n width = EDropdownWidth.CONTENT,\n opened,\n targetRef,\n setOpened,\n ...rest\n } = props;\n const [styleState, setStyleState] = useState<React.CSSProperties>({ opacity: 0 });\n const dropdownRef = useRef<HTMLDivElement | null>(null);\n\n const { scopeClassName } = useToken();\n const classNames = clsx(styles.dropdownDesktop, sizeToClassNameMap[size], scopeClassName, className);\n\n /** Блокировка скролла вне дропдауна. */\n const wheelHandler = useCallback(\n (event: WheelEvent) => {\n if (!dropdownRef.current?.contains(event.target as Node)) {\n event.preventDefault();\n }\n },\n [dropdownRef],\n );\n\n const keyDownHandler = useCallback((event: KeyboardEvent) => {\n if (event.target === document.body) {\n const key = event.code || event.keyCode;\n\n if (\n isKey(key, \"SPACE\") ||\n isKey(key, \"PAGE_UP\") ||\n isKey(key, \"PAGE_DOWN\") ||\n isKey(key, \"END\") ||\n isKey(key, \"HOME\") ||\n isKey(key, \"ARROW_LEFT\") ||\n isKey(key, \"ARROW_UP\") ||\n isKey(key, \"ARROW_RIGHT\") ||\n isKey(key, \"ARROW_DOWN\")\n ) {\n event.preventDefault();\n }\n }\n }, []);\n\n /** Управление скроллом внешней области. */\n const toggleScrollEventListener = useCallback(\n /** Запрет скролла всей страницы. */\n (add: boolean) => {\n if (add) {\n document.addEventListener(\"wheel\", wheelHandler, { passive: false });\n document.addEventListener(\"keydown\", keyDownHandler);\n } else {\n document.removeEventListener(\"wheel\", wheelHandler);\n document.removeEventListener(\"keydown\", keyDownHandler);\n }\n },\n [wheelHandler, keyDownHandler],\n );\n\n /** Расчёт положения по горизонтали. */\n const calculatePositionHorizontal = useCallback(\n (css: React.CSSProperties, targetRect: DOMRect, expectedWidth: number) => {\n const clientWidth = document.documentElement.clientWidth;\n\n const leftPos = targetRect.left;\n const rightPos = targetRect.right - expectedWidth;\n\n if (alignment === EDropdownAlignment.LEFT) {\n const fitsRightSide = leftPos + expectedWidth <= clientWidth;\n css.left = fitsRightSide ? leftPos : Math.max(0, rightPos);\n } else {\n const fitsLeftSide = rightPos >= 0;\n css.left = fitsLeftSide ? rightPos : Math.max(0, Math.min(leftPos, clientWidth - expectedWidth));\n }\n },\n [alignment],\n );\n\n /** Расчёт положения по вертикали. */\n const calculatePositionVertical = useCallback(\n (css: React.CSSProperties, dropdownRect: DOMRect, targetRect: DOMRect) => {\n // Отступ между target и dropdown.\n const offset = 4;\n\n if (direction === EDropdownDirection.AUTO) {\n if (targetRect.bottom + offset + dropdownRect.height < document.documentElement.clientHeight) {\n // Если влезает снизу.\n css.top = targetRect.bottom + offset;\n } else if (targetRect.top - offset - dropdownRect.height > 0) {\n // Если не влезает снизу, но влезает сверху.\n css.bottom = document.documentElement.clientHeight - targetRect.top + offset;\n } else {\n // Если не влезает снизу и сверху.\n css.top = targetRect.bottom + offset;\n }\n } else if (direction === EDropdownDirection.BOTTOM) {\n css.top = targetRect.bottom + offset;\n } else if (direction === EDropdownDirection.TOP) {\n css.bottom = document.documentElement.clientHeight - targetRect.top + offset;\n }\n },\n [direction],\n );\n\n /** Установка положения меню. */\n const setPosition = useCallback(() => {\n if (dropdownRef.current === null || targetRef.current === null) return;\n\n const dropdownRect = dropdownRef.current.getBoundingClientRect();\n const targetRect = targetRef.current.getBoundingClientRect();\n const css: React.CSSProperties = {};\n let expectedWidth = dropdownRect.width;\n\n if (width === EDropdownWidth.TARGET) {\n expectedWidth = targetRect.width;\n css.width = targetRect.width;\n } else if (width === EDropdownWidth.MIN_TARGET) {\n expectedWidth = Math.max(dropdownRect.width, targetRect.width);\n css.minWidth = targetRect.width;\n }\n\n calculatePositionVertical(css, dropdownRect, targetRect);\n calculatePositionHorizontal(css, targetRect, expectedWidth);\n\n setStyleState(css);\n }, [targetRef, width, calculatePositionVertical, calculatePositionHorizontal]);\n\n useEffect(() => {\n if (opened) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setPosition();\n } else {\n setStyleState({ opacity: 0 });\n }\n }, [opened, setPosition]);\n\n useEffect(() => {\n if (!opened || dropdownRef.current === null || targetRef.current === null) return;\n\n const observer = new ResizeObserver(setPosition);\n\n observer.observe(dropdownRef.current);\n observer.observe(targetRef.current);\n return () => observer.disconnect();\n }, [opened, targetRef, setPosition]);\n\n /** Планирует перерасчет позиции дропдауна в следующем кадре. */\n const updatePosition = useCallback(() => {\n setTimeout(setPosition);\n }, [setPosition]);\n\n useEffect(() => {\n if (opened) {\n document.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n toggleScrollEventListener(true);\n document.body.classList.add(overflowHiddenClassName);\n updatePosition();\n\n return () => {\n document.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n toggleScrollEventListener(false);\n document.body.classList.remove(overflowHiddenClassName);\n };\n }\n }, [opened, updatePosition, toggleScrollEventListener]);\n\n /** Функция для хранения ссылки. */\n const setRef = (instance: HTMLDivElement | null) => {\n dropdownRef.current = instance;\n if (typeof ref === \"function\") {\n ref(instance);\n } else if (ref) {\n ref.current = instance;\n }\n };\n\n if (!opened) {\n return null;\n }\n\n return (\n <div\n className={classNames}\n style={{ ...styleState, ...styleProp }}\n {...rest}\n data-tx={process.env.npm_package_version}\n ref={setRef}\n >\n {children}\n </div>\n );\n});\n\nDropdownDesktop.displayName = \"DropdownDesktop\";\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownDesktop.js","sources":["../../../../src/components/Dropdown/desktop/DropdownDesktop.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { EDropdownAlignment, EDropdownDirection, EDropdownWidth } from \"./enums\";\nimport { EComponentSize } from \"../../../enums/EComponentSize\";\nimport { createSizeToClassNameMap } from \"../../../utils/classNameMaps\";\nimport { useToken } from \"../../ThemeProvider/useToken\";\nimport { isKey } from \"../../../utils/keyboard\";\nimport styles from \"../styles/DropdownDesktop.module.less\";\n\n/** Свойства компонента DropdownDesktop. */\nexport interface IDropdownDesktopProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Открыт. */\n opened: boolean;\n /** Устанавливает флаг opened. */\n setOpened: (opened: boolean) => void;\n /** Ссылка на управляющий элемент. */\n targetRef: React.RefObject<HTMLElement>;\n /** Размер дропдауна. */\n size?: EComponentSize;\n /** Направление выпадающего меню. */\n direction?: EDropdownDirection;\n /** Выравнивание списка относительно управляющего элемента. */\n alignment?: EDropdownAlignment;\n /** Вариант расчёта ширины выпадающего списка. */\n width?: EDropdownWidth;\n}\n\nconst sizeToClassNameMap = createSizeToClassNameMap(styles);\n\nconst overflowHiddenClassName = styles.dropdownDesktopOverflowHidden;\n\n/** Отступ между управляющим элементом и выпадающим меню, px. */\nconst TARGET_OFFSET = 4;\n\n/**\n * Десктопная версия выпадающего меню.\n * Позиционируется фиксированно относительно targetRef, пересчитывает положение при скролле,\n * ресайзе окна и изменении размеров меню или управляющего элемента. Пока меню открыто,\n * скролл страницы вне меню заблокирован. В закрытом состоянии ничего не рендерит.\n */\nexport const DropdownDesktop = React.forwardRef<HTMLDivElement, IDropdownDesktopProps>((props, ref) => {\n const {\n children,\n className,\n style: styleProp,\n size = EComponentSize.MD,\n direction = EDropdownDirection.AUTO,\n alignment = EDropdownAlignment.LEFT,\n width = EDropdownWidth.CONTENT,\n opened,\n targetRef,\n setOpened,\n ...rest\n } = props;\n const [styleState, setStyleState] = useState<React.CSSProperties>({ opacity: 0 });\n const dropdownRef = useRef<HTMLDivElement | null>(null);\n\n const { scopeClassName } = useToken();\n const classNames = clsx(styles.dropdownDesktop, sizeToClassNameMap[size], scopeClassName, className);\n\n /** Блокировка скролла вне дропдауна. */\n const wheelHandler = useCallback((event: WheelEvent) => {\n if (!dropdownRef.current?.contains(event.target as Node)) {\n event.preventDefault();\n }\n }, []);\n\n const keyDownHandler = useCallback((event: KeyboardEvent) => {\n if (event.target === document.body) {\n const key = event.code || event.keyCode;\n\n if (\n isKey(key, \"SPACE\") ||\n isKey(key, \"PAGE_UP\") ||\n isKey(key, \"PAGE_DOWN\") ||\n isKey(key, \"END\") ||\n isKey(key, \"HOME\") ||\n isKey(key, \"ARROW_LEFT\") ||\n isKey(key, \"ARROW_UP\") ||\n isKey(key, \"ARROW_RIGHT\") ||\n isKey(key, \"ARROW_DOWN\")\n ) {\n event.preventDefault();\n }\n }\n }, []);\n\n /** Управление подпиской на события, блокирующие скролл страницы вне дропдауна. */\n const toggleScrollEventListener = useCallback(\n (add: boolean) => {\n if (add) {\n document.addEventListener(\"wheel\", wheelHandler, { passive: false });\n document.addEventListener(\"keydown\", keyDownHandler);\n } else {\n document.removeEventListener(\"wheel\", wheelHandler);\n document.removeEventListener(\"keydown\", keyDownHandler);\n }\n },\n [wheelHandler, keyDownHandler],\n );\n\n /** Расчёт положения по горизонтали. */\n const calculatePositionHorizontal = useCallback(\n (css: React.CSSProperties, targetRect: DOMRect, expectedWidth: number) => {\n const clientWidth = document.documentElement.clientWidth;\n\n const leftPos = targetRect.left;\n const rightPos = targetRect.right - expectedWidth;\n\n if (alignment === EDropdownAlignment.LEFT) {\n const fitsRightSide = leftPos + expectedWidth <= clientWidth;\n css.left = fitsRightSide ? leftPos : Math.max(0, rightPos);\n } else {\n const fitsLeftSide = rightPos >= 0;\n css.left = fitsLeftSide ? rightPos : Math.max(0, Math.min(leftPos, clientWidth - expectedWidth));\n }\n },\n [alignment],\n );\n\n /** Расчёт положения по вертикали. */\n const calculatePositionVertical = useCallback(\n (css: React.CSSProperties, dropdownRect: DOMRect, targetRect: DOMRect) => {\n if (direction === EDropdownDirection.AUTO) {\n if (targetRect.bottom + TARGET_OFFSET + dropdownRect.height < document.documentElement.clientHeight) {\n // Если влезает снизу.\n css.top = targetRect.bottom + TARGET_OFFSET;\n } else if (targetRect.top - TARGET_OFFSET - dropdownRect.height > 0) {\n // Если не влезает снизу, но влезает сверху.\n css.bottom = document.documentElement.clientHeight - targetRect.top + TARGET_OFFSET;\n } else {\n // Если не влезает снизу и сверху.\n css.top = targetRect.bottom + TARGET_OFFSET;\n }\n } else if (direction === EDropdownDirection.BOTTOM) {\n css.top = targetRect.bottom + TARGET_OFFSET;\n } else if (direction === EDropdownDirection.TOP) {\n css.bottom = document.documentElement.clientHeight - targetRect.top + TARGET_OFFSET;\n }\n },\n [direction],\n );\n\n /** Установка положения меню. */\n const setPosition = useCallback(() => {\n if (dropdownRef.current === null || targetRef.current === null) return;\n\n const dropdownRect = dropdownRef.current.getBoundingClientRect();\n const targetRect = targetRef.current.getBoundingClientRect();\n const css: React.CSSProperties = {};\n let expectedWidth = dropdownRect.width;\n\n if (width === EDropdownWidth.TARGET) {\n expectedWidth = targetRect.width;\n css.width = targetRect.width;\n } else if (width === EDropdownWidth.MIN_TARGET) {\n expectedWidth = Math.max(dropdownRect.width, targetRect.width);\n css.minWidth = targetRect.width;\n }\n\n calculatePositionVertical(css, dropdownRect, targetRect);\n calculatePositionHorizontal(css, targetRect, expectedWidth);\n\n setStyleState(css);\n }, [targetRef, width, calculatePositionVertical, calculatePositionHorizontal]);\n\n useEffect(() => {\n if (opened) {\n // Положение можно посчитать только после того, как меню отрендерено и его размеры измеримы.\n setPosition();\n } else {\n setStyleState({ opacity: 0 });\n }\n }, [opened, setPosition]);\n\n useEffect(() => {\n if (!opened || dropdownRef.current === null || targetRef.current === null) return;\n\n const observer = new ResizeObserver(setPosition);\n\n observer.observe(dropdownRef.current);\n observer.observe(targetRef.current);\n return () => observer.disconnect();\n }, [opened, targetRef, setPosition]);\n\n /** Планирует перерасчет позиции дропдауна в следующем кадре. */\n const updatePosition = useCallback(() => {\n setTimeout(setPosition);\n }, [setPosition]);\n\n useEffect(() => {\n if (opened) {\n document.addEventListener(\"scroll\", updatePosition, true);\n window.addEventListener(\"resize\", updatePosition);\n toggleScrollEventListener(true);\n document.body.classList.add(overflowHiddenClassName);\n updatePosition();\n\n return () => {\n document.removeEventListener(\"scroll\", updatePosition, true);\n window.removeEventListener(\"resize\", updatePosition);\n toggleScrollEventListener(false);\n document.body.classList.remove(overflowHiddenClassName);\n };\n }\n }, [opened, updatePosition, toggleScrollEventListener]);\n\n const setRef = (instance: HTMLDivElement | null) => {\n dropdownRef.current = instance;\n if (typeof ref === \"function\") {\n ref(instance);\n } else if (ref) {\n ref.current = instance;\n }\n };\n\n if (!opened) {\n return null;\n }\n\n return (\n <div\n className={classNames}\n style={{ ...styleState, ...styleProp }}\n {...rest}\n data-tx={process.env.npm_package_version}\n ref={setRef}\n >\n {children}\n </div>\n );\n});\n\nDropdownDesktop.displayName = \"DropdownDesktop\";\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useContext, useRef, useState, useEffect } from "react";
|
|
3
|
-
import { c as clsx } from "../../../chunks/vendor-
|
|
4
|
-
import { s as styles, D as DropdownListItem } from "../../../chunks/DropdownListItem-
|
|
3
|
+
import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
4
|
+
import { s as styles, D as DropdownListItem } from "../../../chunks/DropdownListItem-V6Oe5CEm.js";
|
|
5
5
|
import { EVENT_KEY_CODES } from "../../../utils/keyboard.js";
|
|
6
6
|
import { DropdownListContext } from "../DropdownListContext.js";
|
|
7
7
|
import { LoaderSmall } from "../../Loader/LoaderSmall/LoaderSmall.js";
|
|
@@ -9,7 +9,9 @@ import { ELoaderSmallTheme } from "../../Loader/LoaderSmall/enum.js";
|
|
|
9
9
|
import "../../Loader/LoaderMiddle/LoaderMiddle.js";
|
|
10
10
|
import { EComponentSize } from "../../../enums/EComponentSize.js";
|
|
11
11
|
import { createSizeToClassNameMap } from "../../../utils/classNameMaps.js";
|
|
12
|
+
import { getSelectedListItemIndex, scrollListToTop, scrollListToItem } from "./utils.js";
|
|
12
13
|
const sizeToClassNameMap = createSizeToClassNameMap(styles);
|
|
14
|
+
const LOADER_ITEM_ID = "dropdown-desktop-list-loader-item";
|
|
13
15
|
const DropdownList = (props) => {
|
|
14
16
|
const {
|
|
15
17
|
children,
|
|
@@ -21,65 +23,36 @@ const DropdownList = (props) => {
|
|
|
21
23
|
...htmlDivAttributes
|
|
22
24
|
} = props;
|
|
23
25
|
const classNames = clsx(styles.dropdownDesktopList, sizeToClassNameMap[size], className);
|
|
24
|
-
const {
|
|
25
|
-
const
|
|
26
|
+
const { setActiveDescendant } = useContext(DropdownListContext);
|
|
27
|
+
const innerContainerRef = useRef(null);
|
|
28
|
+
const containerRef = listRef || innerContainerRef;
|
|
26
29
|
const listItemsRef = useRef([]);
|
|
27
|
-
const
|
|
30
|
+
const selectedListItemIndex = getSelectedListItemIndex(children);
|
|
31
|
+
const activeListItemIndexOnOpen = selectedListItemIndex ?? 0;
|
|
32
|
+
const [activeListItemIndex, setActiveListItemIndex] = useState(
|
|
33
|
+
dropdownOpened ? activeListItemIndexOnOpen : void 0
|
|
34
|
+
);
|
|
35
|
+
const [prevDropdownOpened, setPrevDropdownOpened] = useState(dropdownOpened);
|
|
36
|
+
if (dropdownOpened !== prevDropdownOpened) {
|
|
37
|
+
setPrevDropdownOpened(dropdownOpened);
|
|
38
|
+
setActiveListItemIndex(dropdownOpened ? activeListItemIndexOnOpen : void 0);
|
|
39
|
+
}
|
|
28
40
|
const childrenCount = React.Children.count(children);
|
|
29
|
-
const scrollContainerToItem = (itemIndex) => {
|
|
30
|
-
const parent = containerRef == null ? void 0 : containerRef.current;
|
|
31
|
-
const activeItem = listItemsRef.current[itemIndex];
|
|
32
|
-
if (parent && activeItem) {
|
|
33
|
-
const { top: parentTop, bottom: parentBottom } = parent.getBoundingClientRect();
|
|
34
|
-
const { top: itemTop, bottom: itemBottom } = activeItem.getBoundingClientRect();
|
|
35
|
-
const offset = 4;
|
|
36
|
-
if (parentTop > itemTop) {
|
|
37
|
-
parent.scrollTop = parent.scrollTop - parentTop + itemTop - offset;
|
|
38
|
-
} else if (itemBottom > parentBottom) {
|
|
39
|
-
parent.scrollTop = parent.scrollTop + itemBottom - parentBottom + offset;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
const scrollContainerToTop = () => {
|
|
44
|
-
const container = containerRef == null ? void 0 : containerRef.current;
|
|
45
|
-
if (container) {
|
|
46
|
-
container.scrollTop = 0;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
41
|
useEffect(() => {
|
|
50
42
|
if (!dropdownOpened) {
|
|
51
43
|
return;
|
|
52
44
|
}
|
|
53
45
|
const handleKeyDown = (event) => {
|
|
54
|
-
const { keyCode } = event;
|
|
55
|
-
const childrenLength = childrenCount;
|
|
56
|
-
const currentIndex = activeListItemIndex;
|
|
57
46
|
let nextActiveListItemIndex;
|
|
58
|
-
if (keyCode === EVENT_KEY_CODES.ARROW_DOWN) {
|
|
59
|
-
|
|
60
|
-
if (currentIndex < childrenLength - 1) {
|
|
61
|
-
nextActiveListItemIndex = currentIndex + 1;
|
|
62
|
-
} else {
|
|
63
|
-
nextActiveListItemIndex = 0;
|
|
64
|
-
}
|
|
65
|
-
} else {
|
|
66
|
-
nextActiveListItemIndex = 0;
|
|
67
|
-
}
|
|
47
|
+
if (event.keyCode === EVENT_KEY_CODES.ARROW_DOWN) {
|
|
48
|
+
nextActiveListItemIndex = activeListItemIndex === void 0 || activeListItemIndex >= childrenCount - 1 ? 0 : activeListItemIndex + 1;
|
|
68
49
|
event.preventDefault();
|
|
69
|
-
} else if (keyCode === EVENT_KEY_CODES.ARROW_UP) {
|
|
70
|
-
|
|
71
|
-
if (currentIndex > 0) {
|
|
72
|
-
nextActiveListItemIndex = currentIndex - 1;
|
|
73
|
-
} else {
|
|
74
|
-
nextActiveListItemIndex = childrenLength - 1;
|
|
75
|
-
}
|
|
76
|
-
} else {
|
|
77
|
-
nextActiveListItemIndex = childrenLength - 1;
|
|
78
|
-
}
|
|
50
|
+
} else if (event.keyCode === EVENT_KEY_CODES.ARROW_UP) {
|
|
51
|
+
nextActiveListItemIndex = activeListItemIndex === void 0 || activeListItemIndex <= 0 ? childrenCount - 1 : activeListItemIndex - 1;
|
|
79
52
|
event.preventDefault();
|
|
80
53
|
}
|
|
81
|
-
if (nextActiveListItemIndex !== void 0 &&
|
|
82
|
-
|
|
54
|
+
if (nextActiveListItemIndex !== void 0 && activeListItemIndex !== nextActiveListItemIndex) {
|
|
55
|
+
scrollListToItem(containerRef.current, listItemsRef.current[nextActiveListItemIndex]);
|
|
83
56
|
setActiveListItemIndex(nextActiveListItemIndex);
|
|
84
57
|
}
|
|
85
58
|
};
|
|
@@ -87,22 +60,15 @@ const DropdownList = (props) => {
|
|
|
87
60
|
return () => {
|
|
88
61
|
document.removeEventListener("keydown", handleKeyDown);
|
|
89
62
|
};
|
|
90
|
-
}, [dropdownOpened, activeListItemIndex, childrenCount]);
|
|
63
|
+
}, [dropdownOpened, activeListItemIndex, childrenCount, containerRef]);
|
|
91
64
|
useEffect(() => {
|
|
92
65
|
if (!dropdownOpened) {
|
|
93
66
|
return;
|
|
94
67
|
}
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
scrollContainerToItem(index);
|
|
100
|
-
setActiveListItemIndex(index);
|
|
101
|
-
}
|
|
102
|
-
});
|
|
103
|
-
if (!isSelectedItemExist) {
|
|
104
|
-
setActiveListItemIndex(0);
|
|
105
|
-
scrollContainerToTop();
|
|
68
|
+
if (selectedListItemIndex === void 0) {
|
|
69
|
+
scrollListToTop(containerRef.current);
|
|
70
|
+
} else {
|
|
71
|
+
scrollListToItem(containerRef.current, listItemsRef.current[selectedListItemIndex]);
|
|
106
72
|
}
|
|
107
73
|
}, [dropdownOpened]);
|
|
108
74
|
useEffect(() => {
|
|
@@ -111,17 +77,16 @@ const DropdownList = (props) => {
|
|
|
111
77
|
setActiveDescendant((_a = listItemsRef.current[activeListItemIndex]) == null ? void 0 : _a.id);
|
|
112
78
|
return;
|
|
113
79
|
}
|
|
114
|
-
if (!dropdownOpened
|
|
115
|
-
setActiveDescendant();
|
|
80
|
+
if (!dropdownOpened) {
|
|
81
|
+
setActiveDescendant(void 0);
|
|
116
82
|
}
|
|
117
|
-
}, [dropdownOpened, activeListItemIndex,
|
|
118
|
-
useEffect(
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}, [activeDescendant, setActiveDescendant]);
|
|
83
|
+
}, [dropdownOpened, activeListItemIndex, setActiveDescendant]);
|
|
84
|
+
useEffect(
|
|
85
|
+
() => () => {
|
|
86
|
+
setActiveDescendant(void 0);
|
|
87
|
+
},
|
|
88
|
+
[setActiveDescendant]
|
|
89
|
+
);
|
|
125
90
|
const renderedChildren = React.Children.map(children, (child, index) => {
|
|
126
91
|
if (!React.isValidElement(child)) {
|
|
127
92
|
return child;
|
|
@@ -144,7 +109,7 @@ const DropdownList = (props) => {
|
|
|
144
109
|
}
|
|
145
110
|
});
|
|
146
111
|
});
|
|
147
|
-
const renderLoaderItem = () => /* @__PURE__ */ jsx(DropdownListItem, { id:
|
|
112
|
+
const renderLoaderItem = () => /* @__PURE__ */ jsx(DropdownListItem, { id: LOADER_ITEM_ID, children: /* @__PURE__ */ jsx(LoaderSmall, { className: styles.dropdownDesktopListLoader, theme: ELoaderSmallTheme.BRAND, size }) });
|
|
148
113
|
return /* @__PURE__ */ jsxs("div", { className: classNames, role: "listbox", ...htmlDivAttributes, ref: containerRef, children: [
|
|
149
114
|
renderedChildren,
|
|
150
115
|
loading && renderLoaderItem()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownList.js","sources":["../../../../src/components/Dropdown/desktop/DropdownList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport {\n DropdownListItem,\n IDropdownListItemProps,\n} from \"@sberbusiness/triplex-next/components/Dropdown/desktop/DropdownListItem\";\nimport { EVENT_KEY_CODES } from \"@sberbusiness/triplex-next/utils/keyboard\";\nimport { DropdownListContext } from \"@sberbusiness/triplex-next/components/Dropdown/DropdownListContext\";\nimport { LoaderSmall, ELoaderSmallTheme } from \"@sberbusiness/triplex-next/components/Loader\";\nimport { EComponentSize } from \"@sberbusiness/triplex-next/enums/EComponentSize\";\nimport { createSizeToClassNameMap } from \"../../../utils/classNameMaps\";\nimport styles from \"../styles/DropdownDesktopList.module.less\";\n\n/** Свойства компонента DropdownList. */\nexport interface IDropdownListProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Dropdown открыт. */\n dropdownOpened: boolean;\n /** Объект для создания ссылки на html-элемент \"список\". */\n listRef?: React.RefObject<HTMLDivElement>;\n /** Состояние загрузки. */\n loading?: boolean;\n /** Размер списка. */\n size?: EComponentSize;\n}\n\n/** Индекс текущего выделенного элемента списка при навигации с клавиатуры. */\ntype TActiveListItemIndex = number | undefined;\n\n/** Композиция компонента DropdownList. */\nexport interface IDropdownListComponent extends React.FC<IDropdownListProps> {\n Item: typeof DropdownListItem;\n}\n\n// Соответствие размера имени класса.\nconst sizeToClassNameMap = createSizeToClassNameMap(styles);\n\n/**\n * Компонент DropdownList.\n * Используется для обрамления вложенного списка и добавляет спику возможность навигации с клавиатуры.\n * В качестве children принимает только DropdownDesktopList.Item.\n */\nexport const DropdownList: IDropdownListComponent = (props) => {\n const {\n children,\n className,\n dropdownOpened,\n listRef,\n loading,\n size = EComponentSize.MD,\n ...htmlDivAttributes\n } = props;\n const classNames = clsx(styles.dropdownDesktopList, sizeToClassNameMap[size], className);\n\n const { activeDescendant, setActiveDescendant } = useContext(DropdownListContext);\n\n // Ref контейнера списка.\n const containerRef = listRef || React.createRef<HTMLDivElement>();\n // Массив DOM-элементов списка.\n const listItemsRef = useRef<Array<HTMLDivElement | null>>([]);\n const [activeListItemIndex, setActiveListItemIndex] = useState<TActiveListItemIndex>(undefined);\n\n const childrenCount = React.Children.count(children);\n\n const scrollContainerToItem = (itemIndex: number) => {\n const parent = containerRef?.current;\n const activeItem = listItemsRef.current[itemIndex];\n\n if (parent && activeItem) {\n const { top: parentTop, bottom: parentBottom } = parent.getBoundingClientRect();\n const { top: itemTop, bottom: itemBottom } = activeItem.getBoundingClientRect();\n const offset = 4;\n\n if (parentTop > itemTop) {\n parent.scrollTop = parent.scrollTop - parentTop + itemTop - offset;\n } else if (itemBottom > parentBottom) {\n parent.scrollTop = parent.scrollTop + itemBottom - parentBottom + offset;\n }\n }\n };\n\n const scrollContainerToTop = () => {\n const container = containerRef?.current;\n if (container) {\n container.scrollTop = 0;\n }\n };\n\n // Подписка на keydown когда открыт, с актуальным индексом.\n useEffect(() => {\n if (!dropdownOpened) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const { keyCode } = event;\n const childrenLength = childrenCount;\n const currentIndex = activeListItemIndex;\n let nextActiveListItemIndex: number | undefined;\n\n if (keyCode === EVENT_KEY_CODES.ARROW_DOWN) {\n if (currentIndex !== undefined) {\n if (currentIndex < childrenLength - 1) {\n nextActiveListItemIndex = currentIndex + 1;\n } else {\n nextActiveListItemIndex = 0;\n }\n } else {\n nextActiveListItemIndex = 0;\n }\n event.preventDefault();\n } else if (keyCode === EVENT_KEY_CODES.ARROW_UP) {\n if (currentIndex !== undefined) {\n if (currentIndex > 0) {\n nextActiveListItemIndex = currentIndex - 1;\n } else {\n nextActiveListItemIndex = childrenLength - 1;\n }\n } else {\n nextActiveListItemIndex = childrenLength - 1;\n }\n event.preventDefault();\n }\n\n if (nextActiveListItemIndex !== undefined && currentIndex !== nextActiveListItemIndex) {\n scrollContainerToItem(nextActiveListItemIndex);\n setActiveListItemIndex(nextActiveListItemIndex);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dropdownOpened, activeListItemIndex, childrenCount]);\n\n // Установка активного элемента и скролла при открытии.\n useEffect(() => {\n if (!dropdownOpened) {\n return;\n }\n let isSelectedItemExist = false;\n React.Children.forEach(children, (child, index) => {\n if (React.isValidElement<IDropdownListItemProps>(child) && child.props.selected) {\n isSelectedItemExist = true;\n scrollContainerToItem(index);\n setActiveListItemIndex(index);\n }\n });\n if (!isSelectedItemExist) {\n setActiveListItemIndex(0);\n scrollContainerToTop();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dropdownOpened]);\n\n // Синхронизация activeDescendant при изменении activeListItemIndex\n useEffect(() => {\n if (dropdownOpened && activeListItemIndex !== undefined) {\n setActiveDescendant(listItemsRef.current[activeListItemIndex]?.id);\n return;\n }\n if (!dropdownOpened && activeDescendant !== undefined) {\n setActiveDescendant();\n }\n }, [dropdownOpened, activeListItemIndex, activeDescendant, setActiveDescendant]);\n\n useEffect(() => {\n return () => {\n if (activeDescendant !== undefined) {\n setActiveDescendant();\n }\n };\n }, [activeDescendant, setActiveDescendant]);\n\n const renderedChildren = React.Children.map(children, (child, index) => {\n if (!React.isValidElement<IDropdownListItemProps & React.RefAttributes<HTMLDivElement>>(child)) {\n return child;\n }\n\n return React.cloneElement(child, {\n active: activeListItemIndex === index,\n onMouseOver: (event: React.MouseEvent<HTMLDivElement>) => {\n setActiveListItemIndex(index);\n child.props.onMouseOver?.(event);\n },\n onMouseOut: (event: React.MouseEvent<HTMLDivElement>) => {\n setActiveListItemIndex(undefined);\n child.props.onMouseOut?.(event);\n },\n size: size,\n ref: (node: HTMLDivElement | null) => {\n listItemsRef.current[index] = node;\n },\n });\n });\n\n const renderLoaderItem = () => (\n <DropdownListItem id=\"dropdown-desktop-list-loader-item\">\n <LoaderSmall className={styles.dropdownDesktopListLoader} theme={ELoaderSmallTheme.BRAND} size={size} />\n </DropdownListItem>\n );\n\n return (\n <div className={classNames} role=\"listbox\" {...htmlDivAttributes} ref={containerRef}>\n {renderedChildren}\n {loading && renderLoaderItem()}\n </div>\n );\n};\n\nDropdownList.Item = DropdownListItem;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DropdownList.js","sources":["../../../../src/components/Dropdown/desktop/DropdownList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef, useState } from \"react\";\nimport clsx from \"clsx\";\nimport {\n DropdownListItem,\n IDropdownListItemProps,\n} from \"@sberbusiness/triplex-next/components/Dropdown/desktop/DropdownListItem\";\nimport { EVENT_KEY_CODES } from \"@sberbusiness/triplex-next/utils/keyboard\";\nimport { DropdownListContext } from \"@sberbusiness/triplex-next/components/Dropdown/DropdownListContext\";\nimport { LoaderSmall, ELoaderSmallTheme } from \"@sberbusiness/triplex-next/components/Loader\";\nimport { EComponentSize } from \"@sberbusiness/triplex-next/enums/EComponentSize\";\nimport { createSizeToClassNameMap } from \"../../../utils/classNameMaps\";\nimport { getSelectedListItemIndex, scrollListToItem, scrollListToTop } from \"./utils\";\nimport styles from \"../styles/DropdownDesktopList.module.less\";\n\n/** Свойства компонента DropdownList. */\nexport interface IDropdownListProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Dropdown открыт. При открытии список подписывается на клавиатурную навигацию. */\n dropdownOpened: boolean;\n /** Объект для создания ссылки на html-элемент \"список\". */\n listRef?: React.RefObject<HTMLDivElement>;\n /** Состояние загрузки. Дополняет список элементом с лоадером. */\n loading?: boolean;\n /** Размер списка. Пробрасывается в элементы списка. */\n size?: EComponentSize;\n}\n\n/** Индекс текущего выделенного элемента списка при навигации с клавиатуры. */\ntype TActiveListItemIndex = number | undefined;\n\n/** Композиция компонента DropdownList. */\nexport interface IDropdownListComponent extends React.FC<IDropdownListProps> {\n /** Элемент выпадающего списка. */\n Item: typeof DropdownListItem;\n}\n\n// Соответствие размера имени класса.\nconst sizeToClassNameMap = createSizeToClassNameMap(styles);\n\n/** Идентификатор служебного элемента списка с лоадером. */\nconst LOADER_ITEM_ID = \"dropdown-desktop-list-loader-item\";\n\n/**\n * Компонент DropdownList.\n * Используется для обрамления вложенного списка и добавляет списку возможность навигации с клавиатуры.\n * В качестве children принимает только DropdownList.Item.\n */\nexport const DropdownList: IDropdownListComponent = (props) => {\n const {\n children,\n className,\n dropdownOpened,\n listRef,\n loading,\n size = EComponentSize.MD,\n ...htmlDivAttributes\n } = props;\n const classNames = clsx(styles.dropdownDesktopList, sizeToClassNameMap[size], className);\n\n const { setActiveDescendant } = useContext(DropdownListContext);\n\n // Ref контейнера списка. Используется внутренний ref, если listRef не передан снаружи.\n const innerContainerRef = useRef<HTMLDivElement>(null);\n const containerRef = listRef || innerContainerRef;\n // Массив DOM-элементов списка.\n const listItemsRef = useRef<Array<HTMLDivElement | null>>([]);\n\n // Индекс элемента, который становится активным при открытии: выбранный элемент либо первый.\n const selectedListItemIndex = getSelectedListItemIndex(children);\n const activeListItemIndexOnOpen = selectedListItemIndex ?? 0;\n\n const [activeListItemIndex, setActiveListItemIndex] = useState<TActiveListItemIndex>(\n dropdownOpened ? activeListItemIndexOnOpen : undefined,\n );\n const [prevDropdownOpened, setPrevDropdownOpened] = useState(dropdownOpened);\n\n // Сброс активного элемента при смене открытости — корректировка state в ответ на изменение props.\n // Сброс симметричен: на закрытии активный элемент снимается вместе с activeDescendant,\n // иначе список, оставленный смонтированным в закрытом виде, сохранял бы подсветку.\n if (dropdownOpened !== prevDropdownOpened) {\n setPrevDropdownOpened(dropdownOpened);\n setActiveListItemIndex(dropdownOpened ? activeListItemIndexOnOpen : undefined);\n }\n\n const childrenCount = React.Children.count(children);\n\n // Подписка на keydown когда открыт, с актуальным индексом.\n useEffect(() => {\n if (!dropdownOpened) {\n return;\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n let nextActiveListItemIndex: number | undefined;\n\n if (event.keyCode === EVENT_KEY_CODES.ARROW_DOWN) {\n nextActiveListItemIndex =\n activeListItemIndex === undefined || activeListItemIndex >= childrenCount - 1\n ? 0\n : activeListItemIndex + 1;\n event.preventDefault();\n } else if (event.keyCode === EVENT_KEY_CODES.ARROW_UP) {\n nextActiveListItemIndex =\n activeListItemIndex === undefined || activeListItemIndex <= 0\n ? childrenCount - 1\n : activeListItemIndex - 1;\n event.preventDefault();\n }\n\n if (nextActiveListItemIndex !== undefined && activeListItemIndex !== nextActiveListItemIndex) {\n scrollListToItem(containerRef.current, listItemsRef.current[nextActiveListItemIndex]);\n setActiveListItemIndex(nextActiveListItemIndex);\n }\n };\n\n document.addEventListener(\"keydown\", handleKeyDown);\n return () => {\n document.removeEventListener(\"keydown\", handleKeyDown);\n };\n }, [dropdownOpened, activeListItemIndex, childrenCount, containerRef]);\n\n // Прокрутка списка к активному элементу при открытии.\n useEffect(() => {\n if (!dropdownOpened) {\n return;\n }\n\n if (selectedListItemIndex === undefined) {\n scrollListToTop(containerRef.current);\n } else {\n scrollListToItem(containerRef.current, listItemsRef.current[selectedListItemIndex]);\n }\n // Прокрутка выполняется один раз на открытие, по состоянию списка на момент открытия.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [dropdownOpened]);\n\n // Синхронизация activeDescendant при изменении activeListItemIndex.\n useEffect(() => {\n if (dropdownOpened && activeListItemIndex !== undefined) {\n setActiveDescendant(listItemsRef.current[activeListItemIndex]?.id);\n return;\n }\n\n if (!dropdownOpened) {\n setActiveDescendant(undefined);\n }\n }, [dropdownOpened, activeListItemIndex, setActiveDescendant]);\n\n // Сброс activeDescendant при размонтировании списка.\n useEffect(\n () => () => {\n setActiveDescendant(undefined);\n },\n [setActiveDescendant],\n );\n\n const renderedChildren = React.Children.map(children, (child, index) => {\n if (!React.isValidElement<IDropdownListItemProps & React.RefAttributes<HTMLDivElement>>(child)) {\n return child;\n }\n\n return React.cloneElement(child, {\n active: activeListItemIndex === index,\n onMouseOver: (event: React.MouseEvent<HTMLDivElement>) => {\n setActiveListItemIndex(index);\n child.props.onMouseOver?.(event);\n },\n onMouseOut: (event: React.MouseEvent<HTMLDivElement>) => {\n setActiveListItemIndex(undefined);\n child.props.onMouseOut?.(event);\n },\n size: size,\n ref: (node: HTMLDivElement | null) => {\n listItemsRef.current[index] = node;\n },\n });\n });\n\n const renderLoaderItem = () => (\n <DropdownListItem id={LOADER_ITEM_ID}>\n <LoaderSmall className={styles.dropdownDesktopListLoader} theme={ELoaderSmallTheme.BRAND} size={size} />\n </DropdownListItem>\n );\n\n return (\n <div className={classNames} role=\"listbox\" {...htmlDivAttributes} ref={containerRef}>\n {renderedChildren}\n {loading && renderLoaderItem()}\n </div>\n );\n};\n\nDropdownList.Item = DropdownListItem;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import "react/jsx-runtime";
|
|
2
2
|
import "react";
|
|
3
|
-
import "../../../chunks/vendor-
|
|
3
|
+
import "../../../chunks/vendor-BtZO8a0z.js";
|
|
4
4
|
import "../../../enums/EComponentSize.js";
|
|
5
5
|
import "../../../utils/keyboard.js";
|
|
6
6
|
import "../../Badge/Badge.js";
|
|
7
|
-
import { D } from "../../../chunks/DropdownListItem-
|
|
7
|
+
import { D } from "../../../chunks/DropdownListItem-V6Oe5CEm.js";
|
|
8
8
|
export {
|
|
9
9
|
D as DropdownListItem
|
|
10
10
|
};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { DropdownDesktop } from "./DropdownDesktop.js";
|
|
2
2
|
import { DropdownList } from "./DropdownList.js";
|
|
3
|
-
import { D } from "../../../chunks/DropdownListItem-
|
|
3
|
+
import { D } from "../../../chunks/DropdownListItem-V6Oe5CEm.js";
|
|
4
4
|
import { EDropdownAlignment, EDropdownDirection, EDropdownWidth } from "./enums.js";
|
|
5
5
|
export {
|
|
6
6
|
DropdownDesktop,
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
const SCROLL_OFFSET = 4;
|
|
3
|
+
const getSelectedListItemIndex = (children) => {
|
|
4
|
+
let selectedIndex;
|
|
5
|
+
React.Children.forEach(children, (child, index) => {
|
|
6
|
+
if (React.isValidElement(child) && child.props.selected) {
|
|
7
|
+
selectedIndex = index;
|
|
8
|
+
}
|
|
9
|
+
});
|
|
10
|
+
return selectedIndex;
|
|
11
|
+
};
|
|
12
|
+
const scrollListToTop = (container) => {
|
|
13
|
+
if (container) {
|
|
14
|
+
container.scrollTop = 0;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const scrollListToItem = (container, item) => {
|
|
18
|
+
if (!container || !item) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const { top: containerTop, bottom: containerBottom } = container.getBoundingClientRect();
|
|
22
|
+
const { top: itemTop, bottom: itemBottom } = item.getBoundingClientRect();
|
|
23
|
+
if (containerTop > itemTop) {
|
|
24
|
+
container.scrollTop = container.scrollTop - containerTop + itemTop - SCROLL_OFFSET;
|
|
25
|
+
} else if (itemBottom > containerBottom) {
|
|
26
|
+
container.scrollTop = container.scrollTop + itemBottom - containerBottom + SCROLL_OFFSET;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export {
|
|
30
|
+
getSelectedListItemIndex,
|
|
31
|
+
scrollListToItem,
|
|
32
|
+
scrollListToTop
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sources":["../../../../src/components/Dropdown/desktop/utils.ts"],"sourcesContent":["import React from \"react\";\nimport { IDropdownListItemProps } from \"./DropdownListItem\";\n\n/** Отступ между краем списка и элементом при автоматической прокрутке, px. */\nconst SCROLL_OFFSET = 4;\n\n/**\n * Возвращает индекс выбранного (selected) элемента списка.\n * Если выбранных элементов несколько, возвращается индекс последнего из них.\n * Если выбранных элементов нет, возвращается undefined.\n */\nexport const getSelectedListItemIndex = (children: React.ReactNode): number | undefined => {\n let selectedIndex: number | undefined;\n\n React.Children.forEach(children, (child, index) => {\n if (React.isValidElement<IDropdownListItemProps>(child) && child.props.selected) {\n selectedIndex = index;\n }\n });\n\n return selectedIndex;\n};\n\n/** Прокручивает контейнер списка к началу. */\nexport const scrollListToTop = (container: HTMLElement | null): void => {\n if (container) {\n container.scrollTop = 0;\n }\n};\n\n/**\n * Прокручивает контейнер списка так, чтобы элемент целиком попал в видимую область.\n * Если элемент уже видим полностью, прокрутка не выполняется.\n */\nexport const scrollListToItem = (container: HTMLElement | null, item: HTMLElement | null): void => {\n if (!container || !item) {\n return;\n }\n\n const { top: containerTop, bottom: containerBottom } = container.getBoundingClientRect();\n const { top: itemTop, bottom: itemBottom } = item.getBoundingClientRect();\n\n if (containerTop > itemTop) {\n container.scrollTop = container.scrollTop - containerTop + itemTop - SCROLL_OFFSET;\n } else if (itemBottom > containerBottom) {\n container.scrollTop = container.scrollTop + itemBottom - containerBottom + SCROLL_OFFSET;\n }\n};\n"],"names":[],"mappings":";AAIA,MAAM,gBAAgB;AAOf,MAAM,2BAA2B,CAAC,aAAkD;AACvF,MAAI;AAEJ,QAAM,SAAS,QAAQ,UAAU,CAAC,OAAO,UAAU;AAC/C,QAAI,MAAM,eAAuC,KAAK,KAAK,MAAM,MAAM,UAAU;AAC7E,sBAAgB;AAAA,IACpB;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AAGO,MAAM,kBAAkB,CAAC,cAAwC;AACpE,MAAI,WAAW;AACX,cAAU,YAAY;AAAA,EAC1B;AACJ;AAMO,MAAM,mBAAmB,CAAC,WAA+B,SAAmC;AAC/F,MAAI,CAAC,aAAa,CAAC,MAAM;AACrB;AAAA,EACJ;AAEA,QAAM,EAAE,KAAK,cAAc,QAAQ,gBAAA,IAAoB,UAAU,sBAAA;AACjE,QAAM,EAAE,KAAK,SAAS,QAAQ,WAAA,IAAe,KAAK,sBAAA;AAElD,MAAI,eAAe,SAAS;AACxB,cAAU,YAAY,UAAU,YAAY,eAAe,UAAU;AAAA,EACzE,WAAW,aAAa,iBAAiB;AACrC,cAAU,YAAY,UAAU,YAAY,aAAa,kBAAkB;AAAA,EAC/E;AACJ;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DropdownListContext } from "./DropdownListContext.js";
|
|
2
2
|
import { DropdownDesktop } from "./desktop/DropdownDesktop.js";
|
|
3
3
|
import { DropdownList } from "./desktop/DropdownList.js";
|
|
4
|
-
import { D } from "../../chunks/DropdownListItem-
|
|
4
|
+
import { D } from "../../chunks/DropdownListItem-V6Oe5CEm.js";
|
|
5
5
|
import { EDropdownAlignment, EDropdownDirection, EDropdownWidth } from "./desktop/enums.js";
|
|
6
6
|
import { DropdownMobile } from "./mobile/DropdownMobile.js";
|
|
7
7
|
import { DropdownMobileBody } from "./mobile/DropdownMobileBody.js";
|
|
@@ -2,7 +2,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import React, { useEffect } from "react";
|
|
3
3
|
import { OverlayBase, EOverlayDirection } from "../../Overlay/OverlayBase.js";
|
|
4
4
|
import { DropdownMobileInner } from "./DropdownMobileInner.js";
|
|
5
|
-
import { s as styles } from "../../../chunks/DropdownMobile.module-
|
|
5
|
+
import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
|
|
6
6
|
const dropdownMobileBodyOverflowClassName = styles.dropdownMobileBodyOverflow;
|
|
7
7
|
const DropdownMobile = React.forwardRef(
|
|
8
8
|
({ children, opened, setOpened, ...htmlAttributes }, ref) => {
|
|
@@ -20,7 +20,7 @@ const DropdownMobile = React.forwardRef(
|
|
|
20
20
|
...props,
|
|
21
21
|
...htmlAttributes,
|
|
22
22
|
ref,
|
|
23
|
-
"data-tx": "0.
|
|
23
|
+
"data-tx": "0.40.0",
|
|
24
24
|
children
|
|
25
25
|
}
|
|
26
26
|
) });
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import { c as clsx } from "../../../chunks/vendor-
|
|
4
|
-
import { s as styles } from "../../../chunks/DropdownMobile.module-
|
|
3
|
+
import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
4
|
+
import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
|
|
5
5
|
const DropdownMobileBody = React.forwardRef(
|
|
6
6
|
({ children, className, ...htmlAttributes }, ref) => /* @__PURE__ */ jsx("div", { className: clsx(styles.dropdownMobileContent, className), ref, ...htmlAttributes, children })
|
|
7
7
|
);
|
|
@@ -2,8 +2,8 @@ import { jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { ButtonIcon } from "../../Button/ButtonIcon.js";
|
|
4
4
|
import { CrossStrokeSrvIcon16 } from "@sberbusiness/icons-next";
|
|
5
|
-
import { c as clsx } from "../../../chunks/vendor-
|
|
6
|
-
import { s as styles } from "../../../chunks/DropdownMobile.module-
|
|
5
|
+
import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
6
|
+
import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
|
|
7
7
|
const DropdownMobileClose = React.forwardRef(
|
|
8
8
|
({ className, ...buttonIconProps }, ref) => /* @__PURE__ */ jsx(ButtonIcon, { className: clsx(styles.dropdownMobileClose, className), ref, ...buttonIconProps, children: /* @__PURE__ */ jsx(CrossStrokeSrvIcon16, { paletteIndex: 5 }) })
|
|
9
9
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import { c as clsx } from "../../../chunks/vendor-
|
|
4
|
-
import { s as styles } from "../../../chunks/DropdownMobile.module-
|
|
3
|
+
import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
4
|
+
import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
|
|
5
5
|
const DropdownMobileFooter = React.forwardRef(
|
|
6
6
|
({ children, className, ...htmlAttributes }, ref) => /* @__PURE__ */ jsx("div", { className: clsx(styles.dropdownMobileFooter, className), ref, ...htmlAttributes, children })
|
|
7
7
|
);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import { c as clsx } from "../../../chunks/vendor-
|
|
4
|
-
import { s as styles } from "../../../chunks/DropdownMobile.module-
|
|
3
|
+
import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
4
|
+
import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
|
|
5
5
|
const DropdownMobileHeader = React.forwardRef(
|
|
6
6
|
({ children, className, controlButtons, ...htmlAttributes }, ref) => /* @__PURE__ */ jsxs("div", { className: clsx(styles.dropdownMobileHeader, className), ref, ...htmlAttributes, children: [
|
|
7
7
|
/* @__PURE__ */ jsx("div", { className: styles.dropdownMobileHeaderContent, children }),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useState, useEffect } from "react";
|
|
3
|
-
import { c as clsx } from "../../../chunks/vendor-
|
|
3
|
+
import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
4
4
|
import { useToken } from "../../ThemeProvider/useToken.js";
|
|
5
|
-
import { s as styles } from "../../../chunks/DropdownMobile.module-
|
|
5
|
+
import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
|
|
6
6
|
const DropdownMobileInner = React.forwardRef(
|
|
7
7
|
({
|
|
8
8
|
children,
|
|
@@ -19,10 +19,12 @@ const DropdownMobileInner = React.forwardRef(
|
|
|
19
19
|
const [openedState, setOpenedState] = useState(false);
|
|
20
20
|
const { scopeClassName } = useToken();
|
|
21
21
|
useEffect(() => {
|
|
22
|
-
setTimeout(() => setOpeningState(openingProps));
|
|
22
|
+
const timeoutId = setTimeout(() => setOpeningState(openingProps));
|
|
23
|
+
return () => clearTimeout(timeoutId);
|
|
23
24
|
}, [openingProps]);
|
|
24
25
|
useEffect(() => {
|
|
25
|
-
setTimeout(() => setOpenedState(openedProps));
|
|
26
|
+
const timeoutId = setTimeout(() => setOpenedState(openedProps));
|
|
27
|
+
return () => clearTimeout(timeoutId);
|
|
26
28
|
}, [openedProps]);
|
|
27
29
|
const classNamesWrapper = clsx(styles.dropdownMobileWrapper, scopeClassName, className);
|
|
28
30
|
const classNamesBackDrop = clsx(styles.dropdownMobileBackdrop, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownMobileInner.js","sources":["../../../../src/components/Dropdown/mobile/DropdownMobileInner.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { IOverlayChildrenProvideProps } from \"@sberbusiness/triplex-next/components/Overlay/OverlayBase\";\nimport { useToken } from \"../../ThemeProvider/useToken\";\nimport styles from \"../styles/DropdownMobile.module.less\";\n\n/** Свойства компонента DropdownMobileInner. */\nexport interface IDropdownMobileInnerProps extends IOverlayChildrenProvideProps, React.HTMLAttributes<HTMLDivElement> {}\n\n/** Контент мобильного Dropdown. */\nexport const DropdownMobileInner = React.forwardRef<HTMLDivElement, IDropdownMobileInnerProps>(\n (\n {\n children,\n className,\n opened: openedProps,\n opening: openingProps,\n closing,\n setOpened,\n setClosing,\n setOpening,\n ...htmlAttributes\n },\n ref,\n ) => {\n // OpeningState после рендера становится равен openingProps. Чтобы появилась анимация открытия, сначала нужно отрендерить элемент в закрытом виде.\n const [openingState, setOpeningState] = useState(false);\n const [openedState, setOpenedState] = useState(false);\n const { scopeClassName } = useToken();\n\n useEffect(() => {\n setTimeout(() => setOpeningState(openingProps));\n }, [openingProps]);\n\n useEffect(() => {\n setTimeout(() => setOpenedState(openedProps));\n }, [openedProps]);\n\n const classNamesWrapper = clsx(styles.dropdownMobileWrapper, scopeClassName, className);\n\n const classNamesBackDrop = clsx(styles.dropdownMobileBackdrop, {\n [styles.closing]: closing,\n [styles.opened]: openedState,\n [styles.opening]: openingState,\n });\n\n const classNamesContent = clsx(styles.dropdownMobile, {\n [styles.closing]: closing,\n [styles.opened]: openedState,\n [styles.opening]: openingState,\n });\n\n const handleTransitionEnd = (event: React.TransitionEvent<HTMLDivElement>) => {\n const { target, currentTarget } = event;\n\n if (target === currentTarget) {\n if (closing) {\n setClosing(false);\n } else if (openingProps) {\n setOpening(false);\n }\n }\n };\n\n /** Функция закрытия DropdownMobile. */\n const closeDropdown = () => {\n if (openedProps) {\n setOpened(false);\n }\n };\n\n if (!openingProps && !openedProps && !closing) {\n return null;\n }\n\n return (\n <div className={classNamesWrapper}>\n <div\n className={classNamesBackDrop}\n onTransitionEnd={handleTransitionEnd}\n onTouchStart={closeDropdown}\n onMouseDown={closeDropdown}\n />\n <div className={classNamesContent} ref={ref} {...htmlAttributes}>\n {children}\n </div>\n </div>\n );\n },\n);\n\nDropdownMobileInner.displayName = \"DropdownMobileInner\";\n"],"names":[],"mappings":";;;;;AAUO,MAAM,sBAAsB,MAAM;AAAA,EACrC,CACI;AAAA,IACI;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEP,QACC;AAED,UAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,UAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,UAAM,EAAE,eAAA,IAAmB,SAAA;AAE3B,cAAU,MAAM;AACZ,
|
|
1
|
+
{"version":3,"file":"DropdownMobileInner.js","sources":["../../../../src/components/Dropdown/mobile/DropdownMobileInner.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport clsx from \"clsx\";\nimport { IOverlayChildrenProvideProps } from \"@sberbusiness/triplex-next/components/Overlay/OverlayBase\";\nimport { useToken } from \"../../ThemeProvider/useToken\";\nimport styles from \"../styles/DropdownMobile.module.less\";\n\n/** Свойства компонента DropdownMobileInner. */\nexport interface IDropdownMobileInnerProps extends IOverlayChildrenProvideProps, React.HTMLAttributes<HTMLDivElement> {}\n\n/** Контент мобильного Dropdown. */\nexport const DropdownMobileInner = React.forwardRef<HTMLDivElement, IDropdownMobileInnerProps>(\n (\n {\n children,\n className,\n opened: openedProps,\n opening: openingProps,\n closing,\n setOpened,\n setClosing,\n setOpening,\n ...htmlAttributes\n },\n ref,\n ) => {\n // OpeningState после рендера становится равен openingProps. Чтобы появилась анимация открытия, сначала нужно отрендерить элемент в закрытом виде.\n const [openingState, setOpeningState] = useState(false);\n const [openedState, setOpenedState] = useState(false);\n const { scopeClassName } = useToken();\n\n useEffect(() => {\n const timeoutId = setTimeout(() => setOpeningState(openingProps));\n\n return () => clearTimeout(timeoutId);\n }, [openingProps]);\n\n useEffect(() => {\n const timeoutId = setTimeout(() => setOpenedState(openedProps));\n\n return () => clearTimeout(timeoutId);\n }, [openedProps]);\n\n const classNamesWrapper = clsx(styles.dropdownMobileWrapper, scopeClassName, className);\n\n const classNamesBackDrop = clsx(styles.dropdownMobileBackdrop, {\n [styles.closing]: closing,\n [styles.opened]: openedState,\n [styles.opening]: openingState,\n });\n\n const classNamesContent = clsx(styles.dropdownMobile, {\n [styles.closing]: closing,\n [styles.opened]: openedState,\n [styles.opening]: openingState,\n });\n\n const handleTransitionEnd = (event: React.TransitionEvent<HTMLDivElement>) => {\n const { target, currentTarget } = event;\n\n if (target === currentTarget) {\n if (closing) {\n setClosing(false);\n } else if (openingProps) {\n setOpening(false);\n }\n }\n };\n\n /** Функция закрытия DropdownMobile. */\n const closeDropdown = () => {\n if (openedProps) {\n setOpened(false);\n }\n };\n\n if (!openingProps && !openedProps && !closing) {\n return null;\n }\n\n return (\n <div className={classNamesWrapper}>\n <div\n className={classNamesBackDrop}\n onTransitionEnd={handleTransitionEnd}\n onTouchStart={closeDropdown}\n onMouseDown={closeDropdown}\n />\n <div className={classNamesContent} ref={ref} {...htmlAttributes}>\n {children}\n </div>\n </div>\n );\n },\n);\n\nDropdownMobileInner.displayName = \"DropdownMobileInner\";\n"],"names":[],"mappings":";;;;;AAUO,MAAM,sBAAsB,MAAM;AAAA,EACrC,CACI;AAAA,IACI;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,EAAA,GAEP,QACC;AAED,UAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,UAAM,CAAC,aAAa,cAAc,IAAI,SAAS,KAAK;AACpD,UAAM,EAAE,eAAA,IAAmB,SAAA;AAE3B,cAAU,MAAM;AACZ,YAAM,YAAY,WAAW,MAAM,gBAAgB,YAAY,CAAC;AAEhE,aAAO,MAAM,aAAa,SAAS;AAAA,IACvC,GAAG,CAAC,YAAY,CAAC;AAEjB,cAAU,MAAM;AACZ,YAAM,YAAY,WAAW,MAAM,eAAe,WAAW,CAAC;AAE9D,aAAO,MAAM,aAAa,SAAS;AAAA,IACvC,GAAG,CAAC,WAAW,CAAC;AAEhB,UAAM,oBAAoB,KAAK,OAAO,uBAAuB,gBAAgB,SAAS;AAEtF,UAAM,qBAAqB,KAAK,OAAO,wBAAwB;AAAA,MAC3D,CAAC,OAAO,OAAO,GAAG;AAAA,MAClB,CAAC,OAAO,MAAM,GAAG;AAAA,MACjB,CAAC,OAAO,OAAO,GAAG;AAAA,IAAA,CACrB;AAED,UAAM,oBAAoB,KAAK,OAAO,gBAAgB;AAAA,MAClD,CAAC,OAAO,OAAO,GAAG;AAAA,MAClB,CAAC,OAAO,MAAM,GAAG;AAAA,MACjB,CAAC,OAAO,OAAO,GAAG;AAAA,IAAA,CACrB;AAED,UAAM,sBAAsB,CAAC,UAAiD;AAC1E,YAAM,EAAE,QAAQ,cAAA,IAAkB;AAElC,UAAI,WAAW,eAAe;AAC1B,YAAI,SAAS;AACT,qBAAW,KAAK;AAAA,QACpB,WAAW,cAAc;AACrB,qBAAW,KAAK;AAAA,QACpB;AAAA,MACJ;AAAA,IACJ;AAGA,UAAM,gBAAgB,MAAM;AACxB,UAAI,aAAa;AACb,kBAAU,KAAK;AAAA,MACnB;AAAA,IACJ;AAEA,QAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,SAAS;AAC3C,aAAO;AAAA,IACX;AAEA,WACI,qBAAC,OAAA,EAAI,WAAW,mBACZ,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACG,WAAW;AAAA,UACX,iBAAiB;AAAA,UACjB,cAAc;AAAA,UACd,aAAa;AAAA,QAAA;AAAA,MAAA;AAAA,0BAEhB,OAAA,EAAI,WAAW,mBAAmB,KAAW,GAAG,gBAC5C,SAAA,CACL;AAAA,IAAA,GACJ;AAAA,EAER;AACJ;AAEA,oBAAoB,cAAc;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import { c as clsx } from "../../../chunks/vendor-
|
|
4
|
-
const dropdownMobileInput = "
|
|
3
|
+
import { c as clsx } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
4
|
+
const dropdownMobileInput = "dropdownMobileInput__e57ad2c3";
|
|
5
5
|
const styles = {
|
|
6
6
|
dropdownMobileInput
|
|
7
7
|
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useState } from "react";
|
|
3
|
-
import { u as uniqueId, c as clsx } from "../../../chunks/vendor-DKrjZZwJ.js";
|
|
4
3
|
import { LoaderSmall } from "../../Loader/LoaderSmall/LoaderSmall.js";
|
|
5
4
|
import { ELoaderSmallTheme } from "../../Loader/LoaderSmall/enum.js";
|
|
6
5
|
import "../../Loader/LoaderMiddle/LoaderMiddle.js";
|
|
7
6
|
import { EComponentSize } from "../../../enums/EComponentSize.js";
|
|
8
7
|
import { DropdownMobileListItem } from "./DropdownMobileListItem.js";
|
|
9
|
-
import { s as styles } from "../../../chunks/DropdownMobile.module-
|
|
8
|
+
import { s as styles } from "../../../chunks/DropdownMobile.module-dTA2fTAB.js";
|
|
9
|
+
import { u as uniqueId } from "../../../chunks/vendor-BtZO8a0z.js";
|
|
10
10
|
const DropdownMobileList = React.forwardRef(
|
|
11
11
|
({ children, className, loading, ...htmlAttributes }, ref) => {
|
|
12
12
|
const [loaderId] = useState(() => uniqueId());
|
|
13
13
|
const renderLoaderItem = () => /* @__PURE__ */ jsx(DropdownMobileListItem, { id: loaderId, className: styles.dropdownMobileListLoader, children: /* @__PURE__ */ jsx(LoaderSmall, { theme: ELoaderSmallTheme.BRAND, size: EComponentSize.MD }) });
|
|
14
|
-
return /* @__PURE__ */ jsxs("div", { className
|
|
14
|
+
return /* @__PURE__ */ jsxs("div", { className, role: "listbox", ...htmlAttributes, ref, children: [
|
|
15
15
|
children,
|
|
16
16
|
loading && renderLoaderItem()
|
|
17
17
|
] });
|