@vkontakte/vkui 7.0.0-dev-efd91c.0 → 7.0.0-dev-efd91c.2
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/dist/components/Accordion/Accordion.d.ts.map +1 -1
- package/dist/components/Accordion/Accordion.js +9 -5
- package/dist/components/Accordion/Accordion.js.map +1 -1
- package/dist/components/ActionSheet/ActionSheet.d.ts.map +1 -1
- package/dist/components/ActionSheet/ActionSheet.js +20 -14
- package/dist/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/components/Alert/Alert.d.ts +3 -1
- package/dist/components/Alert/Alert.d.ts.map +1 -1
- package/dist/components/Alert/Alert.js +61 -56
- package/dist/components/Alert/Alert.js.map +1 -1
- package/dist/components/AppRoot/AppRoot.d.ts +2 -1
- package/dist/components/AppRoot/AppRoot.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRoot.js +75 -102
- package/dist/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/components/AppRoot/AppRootContext.d.ts +6 -1
- package/dist/components/AppRoot/AppRootContext.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRootContext.js +5 -1
- package/dist/components/AppRoot/AppRootContext.js.map +1 -1
- package/dist/components/AppRoot/AppRootPortal.d.ts +6 -2
- package/dist/components/AppRoot/AppRootPortal.d.ts.map +1 -1
- package/dist/components/AppRoot/AppRootPortal.js +49 -27
- package/dist/components/AppRoot/AppRootPortal.js.map +1 -1
- package/dist/components/AppRoot/AppRootStyleContainer.d.ts +16 -0
- package/dist/components/AppRoot/AppRootStyleContainer.d.ts.map +1 -0
- package/dist/components/AppRoot/AppRootStyleContainer.js +57 -0
- package/dist/components/AppRoot/AppRootStyleContainer.js.map +1 -0
- package/dist/components/AppRoot/ModalPopoutPortal.d.ts +11 -0
- package/dist/components/AppRoot/ModalPopoutPortal.d.ts.map +1 -0
- package/dist/components/AppRoot/ModalPopoutPortal.js +28 -0
- package/dist/components/AppRoot/ModalPopoutPortal.js.map +1 -0
- package/dist/components/AppRoot/helpers.d.ts +2 -12
- package/dist/components/AppRoot/helpers.d.ts.map +1 -1
- package/dist/components/AppRoot/helpers.js +6 -56
- package/dist/components/AppRoot/helpers.js.map +1 -1
- package/dist/components/BaseGallery/BaseGallery.js.map +1 -1
- package/dist/components/BaseGallery/CarouselBase/CarouselBase.d.ts.map +1 -1
- package/dist/components/BaseGallery/CarouselBase/CarouselBase.js +1 -0
- package/dist/components/BaseGallery/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/components/CalendarHeader/CalendarHeader.d.ts.map +1 -1
- package/dist/components/CalendarHeader/CalendarHeader.js +2 -2
- package/dist/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/components/CalendarTime/CalendarTime.d.ts.map +1 -1
- package/dist/components/CalendarTime/CalendarTime.js +2 -2
- package/dist/components/CalendarTime/CalendarTime.js.map +1 -1
- package/dist/components/ConfigProvider/ConfigProvider.d.ts.map +1 -1
- package/dist/components/ConfigProvider/ConfigProvider.js +15 -7
- package/dist/components/ConfigProvider/ConfigProvider.js.map +1 -1
- package/dist/components/Counter/Counter.d.ts +16 -6
- package/dist/components/Counter/Counter.d.ts.map +1 -1
- package/dist/components/Counter/Counter.js +50 -5
- package/dist/components/Counter/Counter.js.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.d.ts.map +1 -1
- package/dist/components/CustomSelect/CustomSelect.js +7 -1
- package/dist/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/components/FormItem/FormItem.d.ts.map +1 -1
- package/dist/components/FormItem/FormItem.js +5 -3
- package/dist/components/FormItem/FormItem.js.map +1 -1
- package/dist/components/Gallery/Gallery.js.map +1 -1
- package/dist/components/Group/GroupContainer.d.ts.map +1 -1
- package/dist/components/Group/GroupContainer.js +2 -2
- package/dist/components/Group/GroupContainer.js.map +1 -1
- package/dist/components/Link/Link.d.ts +15 -2
- package/dist/components/Link/Link.d.ts.map +1 -1
- package/dist/components/Link/Link.js +20 -5
- package/dist/components/Link/Link.js.map +1 -1
- package/dist/components/ModalCard/ModalCard.d.ts +2 -6
- package/dist/components/ModalCard/ModalCard.d.ts.map +1 -1
- package/dist/components/ModalCard/ModalCard.js +40 -65
- package/dist/components/ModalCard/ModalCard.js.map +1 -1
- package/dist/components/ModalCard/ModalCardInternal.d.ts +13 -0
- package/dist/components/ModalCard/ModalCardInternal.d.ts.map +1 -0
- package/dist/components/ModalCard/ModalCardInternal.js +147 -0
- package/dist/components/ModalCard/ModalCardInternal.js.map +1 -0
- package/dist/components/ModalCard/types.d.ts +44 -0
- package/dist/components/ModalCard/types.d.ts.map +1 -0
- package/dist/components/ModalCard/types.js +3 -0
- package/dist/components/ModalCard/types.js.map +1 -0
- package/dist/components/ModalCardBase/ModalCardBase.d.ts.map +1 -1
- package/dist/components/ModalCardBase/ModalCardBase.js +1 -3
- package/dist/components/ModalCardBase/ModalCardBase.js.map +1 -1
- package/dist/components/ModalOutlet/ModalOutlet.d.ts +9 -0
- package/dist/components/ModalOutlet/ModalOutlet.d.ts.map +1 -0
- package/dist/components/ModalOutlet/ModalOutlet.js +25 -0
- package/dist/components/ModalOutlet/ModalOutlet.js.map +1 -0
- package/dist/components/ModalOverlay/ModalOverlay.d.ts +12 -0
- package/dist/components/ModalOverlay/ModalOverlay.d.ts.map +1 -0
- package/dist/components/ModalOverlay/ModalOverlay.js +47 -0
- package/dist/components/ModalOverlay/ModalOverlay.js.map +1 -0
- package/dist/components/ModalPage/ModalPage.d.ts +2 -60
- package/dist/components/ModalPage/ModalPage.d.ts.map +1 -1
- package/dist/components/ModalPage/ModalPage.js +39 -111
- package/dist/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/components/ModalPage/ModalPageInternal.d.ts +13 -0
- package/dist/components/ModalPage/ModalPageInternal.d.ts.map +1 -0
- package/dist/components/ModalPage/ModalPageInternal.js +181 -0
- package/dist/components/ModalPage/ModalPageInternal.js.map +1 -0
- package/dist/components/ModalPage/types.d.ts +104 -0
- package/dist/components/ModalPage/types.d.ts.map +1 -0
- package/dist/components/ModalPage/types.js +3 -0
- package/dist/components/ModalPage/types.js.map +1 -0
- package/dist/components/ModalPageContent/ModalPageContent.d.ts +4 -0
- package/dist/components/ModalPageContent/ModalPageContent.d.ts.map +1 -0
- package/dist/components/ModalPageContent/ModalPageContent.js +22 -0
- package/dist/components/ModalPageContent/ModalPageContent.js.map +1 -0
- package/dist/components/ModalPageFooter/ModalPageFooter.d.ts +7 -0
- package/dist/components/ModalPageFooter/ModalPageFooter.d.ts.map +1 -0
- package/dist/components/ModalPageFooter/ModalPageFooter.js +30 -0
- package/dist/components/ModalPageFooter/ModalPageFooter.js.map +1 -0
- package/dist/components/ModalPageHeader/ModalPageHeader.d.ts.map +1 -1
- package/dist/components/ModalPageHeader/ModalPageHeader.js +4 -4
- package/dist/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.d.ts +5 -2
- package/dist/components/ModalRoot/ModalRoot.d.ts.map +1 -1
- package/dist/components/ModalRoot/ModalRoot.js +52 -590
- package/dist/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/components/ModalRoot/ModalRootContext.d.ts +8 -18
- package/dist/components/ModalRoot/ModalRootContext.d.ts.map +1 -1
- package/dist/components/ModalRoot/ModalRootContext.js +13 -40
- package/dist/components/ModalRoot/ModalRootContext.js.map +1 -1
- package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.d.ts +13 -0
- package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.d.ts.map +1 -0
- package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js +33 -0
- package/dist/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js.map +1 -0
- package/dist/components/ModalRoot/types.d.ts +52 -21
- package/dist/components/ModalRoot/types.d.ts.map +1 -1
- package/dist/components/ModalRoot/types.js +1 -1
- package/dist/components/ModalRoot/types.js.map +1 -1
- package/dist/components/ModalRoot/useModalManager.d.ts +27 -38
- package/dist/components/ModalRoot/useModalManager.d.ts.map +1 -1
- package/dist/components/ModalRoot/useModalManager.js +37 -193
- package/dist/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/components/ModalRoot/useModalRootContext.d.ts +2 -2
- package/dist/components/ModalRoot/useModalRootContext.d.ts.map +1 -1
- package/dist/components/ModalRoot/useModalRootContext.js +18 -2
- package/dist/components/ModalRoot/useModalRootContext.js.map +1 -1
- package/dist/components/ModalRoot/withModalRootContext.d.ts +6 -1
- package/dist/components/ModalRoot/withModalRootContext.d.ts.map +1 -1
- package/dist/components/ModalRoot/withModalRootContext.js +7 -4
- package/dist/components/ModalRoot/withModalRootContext.js.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.d.ts +5 -6
- package/dist/components/NativeSelect/NativeSelect.d.ts.map +1 -1
- package/dist/components/NativeSelect/NativeSelect.js +7 -1
- package/dist/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/components/NavTransitionContext/NavTransitionContext.d.ts.map +1 -1
- package/dist/components/NavTransitionContext/NavTransitionContext.js +6 -4
- package/dist/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
- package/dist/components/PanelHeader/PanelHeader.d.ts.map +1 -1
- package/dist/components/PanelHeader/PanelHeader.js +2 -2
- package/dist/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/components/PanelHeaderBack/PanelHeaderBack.d.ts +5 -4
- package/dist/components/PanelHeaderBack/PanelHeaderBack.d.ts.map +1 -1
- package/dist/components/PanelHeaderBack/PanelHeaderBack.js +10 -12
- package/dist/components/PanelHeaderBack/PanelHeaderBack.js.map +1 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.d.ts.map +1 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js +6 -1
- package/dist/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/components/PanelHeaderClose/PanelHeaderClose.d.ts +2 -1
- package/dist/components/PanelHeaderClose/PanelHeaderClose.d.ts.map +1 -1
- package/dist/components/PanelHeaderClose/PanelHeaderClose.js +9 -13
- package/dist/components/PanelHeaderClose/PanelHeaderClose.js.map +1 -1
- package/dist/components/PanelHeaderEdit/PanelHeaderEdit.d.ts +1 -1
- package/dist/components/PanelHeaderEdit/PanelHeaderEdit.d.ts.map +1 -1
- package/dist/components/PanelHeaderEdit/PanelHeaderEdit.js +7 -11
- package/dist/components/PanelHeaderEdit/PanelHeaderEdit.js.map +1 -1
- package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.d.ts +2 -1
- package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.d.ts.map +1 -1
- package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.js +10 -14
- package/dist/components/PanelHeaderSubmit/PanelHeaderSubmit.js.map +1 -1
- package/dist/components/PopoutWrapper/PopoutWrapper.d.ts +5 -1
- package/dist/components/PopoutWrapper/PopoutWrapper.d.ts.map +1 -1
- package/dist/components/PopoutWrapper/PopoutWrapper.js +6 -2
- package/dist/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
- package/dist/components/PullToRefresh/PullToRefresh.d.ts.map +1 -1
- package/dist/components/PullToRefresh/PullToRefresh.js +9 -8
- package/dist/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinner.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/ScreenSpinner.js +23 -18
- package/dist/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
- package/dist/components/ScreenSpinner/types.d.ts +2 -0
- package/dist/components/ScreenSpinner/types.d.ts.map +1 -1
- package/dist/components/ScreenSpinner/types.js.map +1 -1
- package/dist/components/Separator/Separator.d.ts +2 -0
- package/dist/components/Separator/Separator.d.ts.map +1 -1
- package/dist/components/Separator/Separator.js +4 -5
- package/dist/components/Separator/Separator.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.js +4 -4
- package/dist/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/Spacing/Spacing.d.ts +3 -1
- package/dist/components/Spacing/Spacing.d.ts.map +1 -1
- package/dist/components/Spacing/Spacing.js +4 -5
- package/dist/components/Spacing/Spacing.js.map +1 -1
- package/dist/components/SplitCol/SplitCol.d.ts.map +1 -1
- package/dist/components/SplitCol/SplitCol.js +7 -5
- package/dist/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/components/SplitLayout/SplitLayout.d.ts +9 -1
- package/dist/components/SplitLayout/SplitLayout.d.ts.map +1 -1
- package/dist/components/SplitLayout/SplitLayout.js +17 -12
- package/dist/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/components/Tappable/Tappable.d.ts.map +1 -1
- package/dist/components/Tappable/Tappable.js +1 -1
- package/dist/components/Tappable/Tappable.js.map +1 -1
- package/dist/components/View/useLayoutEffectCall.d.ts +1 -1
- package/dist/components/View/useLayoutEffectCall.d.ts.map +1 -1
- package/dist/components/View/useLayoutEffectCall.js +8 -33
- package/dist/components/View/useLayoutEffectCall.js.map +1 -1
- package/dist/components.css +1 -1
- package/dist/components.css.map +1 -1
- package/dist/context/ModalContext.d.ts +15 -0
- package/dist/context/ModalContext.d.ts.map +1 -0
- package/dist/context/ModalContext.js +13 -0
- package/dist/context/ModalContext.js.map +1 -0
- package/dist/cssm/components/Accordion/Accordion.js +9 -5
- package/dist/cssm/components/Accordion/Accordion.js.map +1 -1
- package/dist/cssm/components/ActionSheet/ActionSheet.js +20 -14
- package/dist/cssm/components/ActionSheet/ActionSheet.js.map +1 -1
- package/dist/cssm/components/Alert/Alert.js +60 -56
- package/dist/cssm/components/Alert/Alert.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.js +73 -100
- package/dist/cssm/components/AppRoot/AppRoot.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRoot.module.css +2 -40
- package/dist/cssm/components/AppRoot/AppRootContext.js +5 -1
- package/dist/cssm/components/AppRoot/AppRootContext.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRootPortal.js +49 -27
- package/dist/cssm/components/AppRoot/AppRootPortal.js.map +1 -1
- package/dist/cssm/components/AppRoot/AppRootStyleContainer.js +57 -0
- package/dist/cssm/components/AppRoot/AppRootStyleContainer.js.map +1 -0
- package/dist/cssm/components/AppRoot/AppRootStyleContainer.module.css +87 -0
- package/dist/cssm/components/AppRoot/ModalPopoutPortal.js +27 -0
- package/dist/cssm/components/AppRoot/ModalPopoutPortal.js.map +1 -0
- package/dist/cssm/components/AppRoot/helpers.js +6 -56
- package/dist/cssm/components/AppRoot/helpers.js.map +1 -1
- package/dist/cssm/components/BaseGallery/BaseGallery.js.map +1 -1
- package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js +1 -0
- package/dist/cssm/components/BaseGallery/CarouselBase/CarouselBase.js.map +1 -1
- package/dist/cssm/components/CalendarHeader/CalendarHeader.js +2 -2
- package/dist/cssm/components/CalendarHeader/CalendarHeader.js.map +1 -1
- package/dist/cssm/components/CalendarTime/CalendarTime.js +2 -2
- package/dist/cssm/components/CalendarTime/CalendarTime.js.map +1 -1
- package/dist/cssm/components/ConfigProvider/ConfigProvider.js +15 -7
- package/dist/cssm/components/ConfigProvider/ConfigProvider.js.map +1 -1
- package/dist/cssm/components/Counter/Counter.js +48 -4
- package/dist/cssm/components/Counter/Counter.js.map +1 -1
- package/dist/cssm/components/Counter/Counter.module.css +81 -12
- package/dist/cssm/components/CustomSelect/CustomSelect.js +7 -1
- package/dist/cssm/components/CustomSelect/CustomSelect.js.map +1 -1
- package/dist/cssm/components/FormItem/FormItem.js +5 -3
- package/dist/cssm/components/FormItem/FormItem.js.map +1 -1
- package/dist/cssm/components/Gallery/Gallery.js.map +1 -1
- package/dist/cssm/components/Group/GroupContainer.js +2 -2
- package/dist/cssm/components/Group/GroupContainer.js.map +1 -1
- package/dist/cssm/components/Link/Link.js +17 -5
- package/dist/cssm/components/Link/Link.js.map +1 -1
- package/dist/cssm/components/Link/Link.module.css +13 -4
- package/dist/cssm/components/ModalCard/ModalCard.js +30 -51
- package/dist/cssm/components/ModalCard/ModalCard.js.map +1 -1
- package/dist/cssm/components/ModalCard/ModalCard.module.css +62 -44
- package/dist/cssm/components/ModalCard/ModalCardInternal.js +122 -0
- package/dist/cssm/components/ModalCard/ModalCardInternal.js.map +1 -0
- package/dist/cssm/components/ModalCard/types.js +3 -0
- package/dist/cssm/components/ModalCard/types.js.map +1 -0
- package/dist/cssm/components/ModalCardBase/ModalCardBase.js +1 -3
- package/dist/cssm/components/ModalCardBase/ModalCardBase.js.map +1 -1
- package/dist/cssm/components/ModalCardBase/ModalCardBase.module.css +0 -2
- package/dist/cssm/components/ModalOutlet/ModalOutlet.js +17 -0
- package/dist/cssm/components/ModalOutlet/ModalOutlet.js.map +1 -0
- package/dist/cssm/components/ModalOutlet/ModalOutlet.module.css +17 -0
- package/dist/cssm/components/ModalOverlay/ModalOverlay.js +40 -0
- package/dist/cssm/components/ModalOverlay/ModalOverlay.js.map +1 -0
- package/dist/cssm/components/ModalOverlay/ModalOverlay.module.css +71 -0
- package/dist/cssm/components/ModalPage/ModalPage.js +32 -99
- package/dist/cssm/components/ModalPage/ModalPage.js.map +1 -1
- package/dist/cssm/components/ModalPage/ModalPage.module.css +125 -123
- package/dist/cssm/components/ModalPage/ModalPageInternal.js +161 -0
- package/dist/cssm/components/ModalPage/ModalPageInternal.js.map +1 -0
- package/dist/cssm/components/ModalPage/types.js +3 -0
- package/dist/cssm/components/ModalPage/types.js.map +1 -0
- package/dist/cssm/components/ModalPageContent/ModalPageContent.js +15 -0
- package/dist/cssm/components/ModalPageContent/ModalPageContent.js.map +1 -0
- package/dist/cssm/components/ModalPageContent/ModalPageContent.module.css +4 -0
- package/dist/cssm/components/ModalPageFooter/ModalPageFooter.js +23 -0
- package/dist/cssm/components/ModalPageFooter/ModalPageFooter.js.map +1 -0
- package/dist/cssm/components/ModalPageFooter/ModalPageFooter.module.css +35 -0
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js +4 -4
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.js.map +1 -1
- package/dist/cssm/components/ModalPageHeader/ModalPageHeader.module.css +8 -2
- package/dist/cssm/components/ModalRoot/ModalRoot.js +52 -571
- package/dist/cssm/components/ModalRoot/ModalRoot.js.map +1 -1
- package/dist/cssm/components/ModalRoot/ModalRootContext.js +13 -40
- package/dist/cssm/components/ModalRoot/ModalRootContext.js.map +1 -1
- package/dist/cssm/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js +27 -0
- package/dist/cssm/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.js.map +1 -0
- package/dist/cssm/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.module.css +8 -0
- package/dist/cssm/components/ModalRoot/types.js +1 -1
- package/dist/cssm/components/ModalRoot/types.js.map +1 -1
- package/dist/cssm/components/ModalRoot/useModalManager.js +36 -194
- package/dist/cssm/components/ModalRoot/useModalManager.js.map +1 -1
- package/dist/cssm/components/ModalRoot/useModalRootContext.js +18 -2
- package/dist/cssm/components/ModalRoot/useModalRootContext.js.map +1 -1
- package/dist/cssm/components/ModalRoot/withModalRootContext.js +7 -4
- package/dist/cssm/components/ModalRoot/withModalRootContext.js.map +1 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.js +7 -1
- package/dist/cssm/components/NativeSelect/NativeSelect.js.map +1 -1
- package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js +6 -4
- package/dist/cssm/components/NavTransitionContext/NavTransitionContext.js.map +1 -1
- package/dist/cssm/components/PanelHeader/PanelHeader.js +2 -2
- package/dist/cssm/components/PanelHeader/PanelHeader.js.map +1 -1
- package/dist/cssm/components/PanelHeaderBack/PanelHeaderBack.js +9 -12
- package/dist/cssm/components/PanelHeaderBack/PanelHeaderBack.js.map +1 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js +6 -1
- package/dist/cssm/components/PanelHeaderButton/PanelHeaderButton.js.map +1 -1
- package/dist/cssm/components/PanelHeaderClose/PanelHeaderClose.js +8 -12
- package/dist/cssm/components/PanelHeaderClose/PanelHeaderClose.js.map +1 -1
- package/dist/cssm/components/PanelHeaderEdit/PanelHeaderEdit.js +7 -11
- package/dist/cssm/components/PanelHeaderEdit/PanelHeaderEdit.js.map +1 -1
- package/dist/cssm/components/PanelHeaderSubmit/PanelHeaderSubmit.js +8 -12
- package/dist/cssm/components/PanelHeaderSubmit/PanelHeaderSubmit.js.map +1 -1
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js +5 -1
- package/dist/cssm/components/PopoutWrapper/PopoutWrapper.js.map +1 -1
- package/dist/cssm/components/PullToRefresh/PullToRefresh.js +9 -8
- package/dist/cssm/components/PullToRefresh/PullToRefresh.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js +23 -19
- package/dist/cssm/components/ScreenSpinner/ScreenSpinner.js.map +1 -1
- package/dist/cssm/components/ScreenSpinner/types.js.map +1 -1
- package/dist/cssm/components/Search/Search.module.css +2 -2
- package/dist/cssm/components/Separator/Separator.js +9 -8
- package/dist/cssm/components/Separator/Separator.js.map +1 -1
- package/dist/cssm/components/Skeleton/Skeleton.js +4 -4
- package/dist/cssm/components/Skeleton/Skeleton.js.map +1 -1
- package/dist/cssm/components/Spacing/Spacing.js +6 -7
- package/dist/cssm/components/Spacing/Spacing.js.map +1 -1
- package/dist/cssm/components/SplitCol/SplitCol.js +7 -5
- package/dist/cssm/components/SplitCol/SplitCol.js.map +1 -1
- package/dist/cssm/components/SplitLayout/SplitLayout.js +14 -9
- package/dist/cssm/components/SplitLayout/SplitLayout.js.map +1 -1
- package/dist/cssm/components/Tappable/Tappable.js +1 -1
- package/dist/cssm/components/Tappable/Tappable.js.map +1 -1
- package/dist/cssm/components/View/useLayoutEffectCall.js +8 -23
- package/dist/cssm/components/View/useLayoutEffectCall.js.map +1 -1
- package/dist/cssm/context/ModalContext.js +13 -0
- package/dist/cssm/context/ModalContext.js.map +1 -0
- package/dist/cssm/helpers/range.js +3 -0
- package/dist/cssm/helpers/range.js.map +1 -1
- package/dist/cssm/hooks/useObjectMemo.js +6 -2
- package/dist/cssm/hooks/useObjectMemo.js.map +1 -1
- package/dist/cssm/hooks/usePrevious.js +9 -2
- package/dist/cssm/hooks/usePrevious.js.map +1 -1
- package/dist/cssm/hooks/useStableCallback.js +1 -1
- package/dist/cssm/hooks/useStableCallback.js.map +1 -1
- package/dist/cssm/hooks/useStateWithPrev.js +34 -0
- package/dist/cssm/hooks/useStateWithPrev.js.map +1 -0
- package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js +23 -0
- package/dist/cssm/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -0
- package/dist/cssm/hooks/useSyncHTMLWithTokens.js +19 -0
- package/dist/cssm/hooks/useSyncHTMLWithTokens.js.map +1 -0
- package/dist/cssm/hooks/useVirtualKeyboardState.js +134 -0
- package/dist/cssm/hooks/useVirtualKeyboardState.js.map +1 -0
- package/dist/cssm/index.js +6 -2
- package/dist/cssm/index.js.map +1 -1
- package/dist/cssm/lib/SSR.js +1 -7
- package/dist/cssm/lib/SSR.js.map +1 -1
- package/dist/cssm/lib/adaptivity/functions.js +7 -1
- package/dist/cssm/lib/adaptivity/functions.js.map +1 -1
- package/dist/cssm/lib/animation/useCSSKeyframesAnimationController.js +7 -5
- package/dist/cssm/lib/animation/useCSSKeyframesAnimationController.js.map +1 -1
- package/dist/cssm/lib/animation/useCSSTransition.js +4 -4
- package/dist/cssm/lib/animation/useCSSTransition.js.map +1 -1
- package/dist/cssm/lib/dom.js +65 -11
- package/dist/cssm/lib/dom.js.map +1 -1
- package/dist/cssm/lib/floating/usePlacementChangeCallback.js +6 -3
- package/dist/cssm/lib/floating/usePlacementChangeCallback.js.map +1 -1
- package/dist/cssm/lib/sheet/constants.js +23 -0
- package/dist/cssm/lib/sheet/constants.js.map +1 -0
- package/dist/cssm/lib/sheet/controllers/BottomSheetController.js +252 -0
- package/dist/cssm/lib/sheet/controllers/BottomSheetController.js.map +1 -0
- package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js +50 -0
- package/dist/cssm/lib/sheet/controllers/CSSTransitionController.js.map +1 -0
- package/dist/cssm/lib/sheet/index.js +4 -0
- package/dist/cssm/lib/sheet/index.js.map +1 -0
- package/dist/cssm/lib/sheet/useBottomSheet.js +116 -0
- package/dist/cssm/lib/sheet/useBottomSheet.js.map +1 -0
- package/dist/cssm/lib/spacings/sizes.js +23 -0
- package/dist/cssm/lib/spacings/sizes.js.map +1 -1
- package/dist/cssm/lib/touch/UIPanGestureRecognizer.js +10 -0
- package/dist/cssm/lib/touch/UIPanGestureRecognizer.js.map +1 -1
- package/dist/cssm/lib/touch/index.js.map +1 -1
- package/dist/cssm/styles/common.css +31 -34
- package/dist/cssm/styles/constants.css +5 -0
- package/dist/helpers/range.d.ts +1 -0
- package/dist/helpers/range.d.ts.map +1 -1
- package/dist/helpers/range.js +3 -0
- package/dist/helpers/range.js.map +1 -1
- package/dist/hooks/useObjectMemo.d.ts +3 -0
- package/dist/hooks/useObjectMemo.d.ts.map +1 -1
- package/dist/hooks/useObjectMemo.js +6 -2
- package/dist/hooks/useObjectMemo.js.map +1 -1
- package/dist/hooks/usePrevious.d.ts +3 -0
- package/dist/hooks/usePrevious.d.ts.map +1 -1
- package/dist/hooks/usePrevious.js +9 -2
- package/dist/hooks/usePrevious.js.map +1 -1
- package/dist/hooks/useStableCallback.js +1 -1
- package/dist/hooks/useStableCallback.js.map +1 -1
- package/dist/hooks/useStateWithPrev.d.ts +12 -0
- package/dist/hooks/useStateWithPrev.d.ts.map +1 -0
- package/dist/hooks/useStateWithPrev.js +34 -0
- package/dist/hooks/useStateWithPrev.js.map +1 -0
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts +8 -0
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.d.ts.map +1 -0
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js +24 -0
- package/dist/hooks/useSyncHTMLWithBaseVKUIClasses.js.map +1 -0
- package/dist/hooks/useSyncHTMLWithTokens.d.ts +5 -0
- package/dist/hooks/useSyncHTMLWithTokens.d.ts.map +1 -0
- package/dist/hooks/useSyncHTMLWithTokens.js +20 -0
- package/dist/hooks/useSyncHTMLWithTokens.js.map +1 -0
- package/dist/hooks/useVirtualKeyboardState.d.ts +32 -0
- package/dist/hooks/useVirtualKeyboardState.d.ts.map +1 -0
- package/dist/hooks/useVirtualKeyboardState.js +134 -0
- package/dist/hooks/useVirtualKeyboardState.js.map +1 -0
- package/dist/index.d.ts +13 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/SSR.d.ts.map +1 -1
- package/dist/lib/SSR.js +1 -7
- package/dist/lib/SSR.js.map +1 -1
- package/dist/lib/adaptivity/functions.d.ts +1 -0
- package/dist/lib/adaptivity/functions.d.ts.map +1 -1
- package/dist/lib/adaptivity/functions.js +7 -1
- package/dist/lib/adaptivity/functions.js.map +1 -1
- package/dist/lib/animation/useCSSKeyframesAnimationController.d.ts.map +1 -1
- package/dist/lib/animation/useCSSKeyframesAnimationController.js +7 -5
- package/dist/lib/animation/useCSSKeyframesAnimationController.js.map +1 -1
- package/dist/lib/animation/useCSSTransition.d.ts.map +1 -1
- package/dist/lib/animation/useCSSTransition.js +4 -4
- package/dist/lib/animation/useCSSTransition.js.map +1 -1
- package/dist/lib/dom.d.ts +20 -5
- package/dist/lib/dom.d.ts.map +1 -1
- package/dist/lib/dom.js +65 -11
- package/dist/lib/dom.js.map +1 -1
- package/dist/lib/floating/usePlacementChangeCallback.d.ts.map +1 -1
- package/dist/lib/floating/usePlacementChangeCallback.js +6 -3
- package/dist/lib/floating/usePlacementChangeCallback.js.map +1 -1
- package/dist/lib/sheet/constants.d.ts +28 -0
- package/dist/lib/sheet/constants.d.ts.map +1 -0
- package/dist/lib/sheet/constants.js +23 -0
- package/dist/lib/sheet/constants.js.map +1 -0
- package/dist/lib/sheet/controllers/BottomSheetController.d.ts +51 -0
- package/dist/lib/sheet/controllers/BottomSheetController.d.ts.map +1 -0
- package/dist/lib/sheet/controllers/BottomSheetController.js +259 -0
- package/dist/lib/sheet/controllers/BottomSheetController.js.map +1 -0
- package/dist/lib/sheet/controllers/CSSTransitionController.d.ts +14 -0
- package/dist/lib/sheet/controllers/CSSTransitionController.d.ts.map +1 -0
- package/dist/lib/sheet/controllers/CSSTransitionController.js +51 -0
- package/dist/lib/sheet/controllers/CSSTransitionController.js.map +1 -0
- package/dist/lib/sheet/index.d.ts +3 -0
- package/dist/lib/sheet/index.d.ts.map +1 -0
- package/dist/lib/sheet/index.js +4 -0
- package/dist/lib/sheet/index.js.map +1 -0
- package/dist/lib/sheet/useBottomSheet.d.ts +56 -0
- package/dist/lib/sheet/useBottomSheet.d.ts.map +1 -0
- package/dist/lib/sheet/useBottomSheet.js +116 -0
- package/dist/lib/sheet/useBottomSheet.js.map +1 -0
- package/dist/lib/spacings/sizes.d.ts +3 -2
- package/dist/lib/spacings/sizes.d.ts.map +1 -1
- package/dist/lib/spacings/sizes.js +23 -0
- package/dist/lib/spacings/sizes.js.map +1 -1
- package/dist/lib/touch/UIPanGestureRecognizer.d.ts +8 -9
- package/dist/lib/touch/UIPanGestureRecognizer.d.ts.map +1 -1
- package/dist/lib/touch/UIPanGestureRecognizer.js +10 -0
- package/dist/lib/touch/UIPanGestureRecognizer.js.map +1 -1
- package/dist/lib/touch/index.d.ts +1 -1
- package/dist/lib/touch/index.d.ts.map +1 -1
- package/dist/lib/touch/index.js.map +1 -1
- package/dist/vkui.css +1 -1
- package/dist/vkui.css.map +1 -1
- package/package.json +9 -6
- package/src/components/Accordion/Accordion.tsx +9 -7
- package/src/components/ActionSheet/ActionSheet.tsx +18 -13
- package/src/components/Alert/Alert.tsx +65 -59
- package/src/components/AppRoot/AppRoot.module.css +2 -30
- package/src/components/AppRoot/AppRoot.tsx +90 -122
- package/src/components/AppRoot/AppRootContext.ts +11 -2
- package/src/components/AppRoot/AppRootPortal.tsx +71 -30
- package/src/components/AppRoot/AppRootStyleContainer.module.css +77 -0
- package/src/components/AppRoot/AppRootStyleContainer.tsx +72 -0
- package/src/components/AppRoot/ModalPopoutPortal.tsx +27 -0
- package/src/components/AppRoot/helpers.ts +10 -65
- package/src/components/BaseGallery/BaseGallery.tsx +1 -1
- package/src/components/BaseGallery/CarouselBase/CarouselBase.tsx +1 -0
- package/src/components/CalendarHeader/CalendarHeader.tsx +5 -2
- package/src/components/CalendarTime/CalendarTime.tsx +5 -2
- package/src/components/ConfigProvider/ConfigProvider.tsx +22 -11
- package/src/components/Counter/Counter.module.css +80 -12
- package/src/components/Counter/Counter.tsx +64 -7
- package/src/components/CustomSelect/CustomSelect.tsx +7 -1
- package/src/components/FormItem/FormItem.tsx +1 -2
- package/src/components/Gallery/Gallery.tsx +1 -1
- package/src/components/Group/GroupContainer.tsx +2 -2
- package/src/components/Link/Link.module.css +11 -3
- package/src/components/Link/Link.tsx +28 -2
- package/src/components/ModalCard/ModalCard.module.css +60 -44
- package/src/components/ModalCard/ModalCard.tsx +41 -74
- package/src/components/ModalCard/ModalCardInternal.tsx +175 -0
- package/src/components/ModalCard/types.ts +51 -0
- package/src/components/ModalCardBase/ModalCardBase.module.css +0 -1
- package/src/components/ModalCardBase/ModalCardBase.tsx +1 -8
- package/src/components/ModalOutlet/ModalOutlet.module.css +16 -0
- package/src/components/ModalOutlet/ModalOutlet.tsx +31 -0
- package/src/components/ModalOverlay/ModalOverlay.module.css +65 -0
- package/src/components/ModalOverlay/ModalOverlay.tsx +66 -0
- package/src/components/ModalPage/ModalPage.module.css +124 -123
- package/src/components/ModalPage/ModalPage.tsx +42 -164
- package/src/components/ModalPage/ModalPageInternal.tsx +229 -0
- package/src/components/ModalPage/types.ts +112 -0
- package/src/components/ModalPageContent/ModalPageContent.module.css +4 -0
- package/src/components/ModalPageContent/ModalPageContent.tsx +25 -0
- package/src/components/ModalPageFooter/ModalPageFooter.module.css +33 -0
- package/src/components/ModalPageFooter/ModalPageFooter.tsx +31 -0
- package/src/components/ModalPageHeader/ModalPageHeader.module.css +8 -2
- package/src/components/ModalPageHeader/ModalPageHeader.tsx +5 -5
- package/src/components/ModalRoot/ModalRoot.tsx +62 -716
- package/src/components/ModalRoot/ModalRootContext.tsx +13 -50
- package/src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.module.css +6 -0
- package/src/components/ModalRoot/VisuallyHiddenModalOverlay/VisuallyHiddenModalOverlay.tsx +37 -0
- package/src/components/ModalRoot/types.ts +60 -20
- package/src/components/ModalRoot/useModalManager.tsx +74 -228
- package/src/components/ModalRoot/useModalRootContext.ts +21 -0
- package/src/components/ModalRoot/withModalRootContext.tsx +8 -3
- package/src/components/NativeSelect/NativeSelect.tsx +12 -9
- package/src/components/NavTransitionContext/NavTransitionContext.tsx +7 -4
- package/src/components/PanelHeader/PanelHeader.tsx +2 -2
- package/src/components/PanelHeaderBack/PanelHeaderBack.tsx +14 -12
- package/src/components/PanelHeaderButton/PanelHeaderButton.tsx +4 -1
- package/src/components/PanelHeaderClose/PanelHeaderClose.tsx +10 -13
- package/src/components/PanelHeaderEdit/PanelHeaderEdit.tsx +10 -12
- package/src/components/PanelHeaderSubmit/PanelHeaderSubmit.tsx +11 -10
- package/src/components/PopoutWrapper/PopoutWrapper.tsx +9 -0
- package/src/components/PullToRefresh/PullToRefresh.tsx +11 -7
- package/src/components/ScreenSpinner/ScreenSpinner.tsx +10 -6
- package/src/components/ScreenSpinner/types.tsx +2 -0
- package/src/components/Search/Search.module.css +2 -2
- package/src/components/Separator/Separator.tsx +32 -20
- package/src/components/Skeleton/Skeleton.tsx +4 -4
- package/src/components/Spacing/Spacing.tsx +17 -10
- package/src/components/SplitCol/SplitCol.tsx +7 -5
- package/src/components/SplitLayout/SplitLayout.tsx +20 -10
- package/src/components/Tappable/Tappable.tsx +1 -0
- package/src/components/View/useLayoutEffectCall.tsx +7 -29
- package/src/context/ModalContext.tsx +18 -0
- package/src/helpers/range.ts +4 -0
- package/src/hooks/useObjectMemo.ts +6 -0
- package/src/hooks/usePrevious.ts +9 -0
- package/src/hooks/useStableCallback.ts +1 -1
- package/src/hooks/useStateWithPrev.ts +43 -0
- package/src/hooks/useSyncHTMLWithBaseVKUIClasses.ts +39 -0
- package/src/hooks/useSyncHTMLWithTokens.ts +27 -0
- package/src/hooks/useVirtualKeyboardState.ts +152 -0
- package/src/index.ts +22 -5
- package/src/lib/SSR.tsx +1 -7
- package/src/lib/adaptivity/functions.ts +8 -1
- package/src/lib/animation/useCSSKeyframesAnimationController.ts +10 -5
- package/src/lib/animation/useCSSTransition.ts +4 -10
- package/src/lib/dom.tsx +85 -13
- package/src/lib/floating/usePlacementChangeCallback.ts +9 -3
- package/src/lib/sheet/constants.ts +32 -0
- package/src/lib/sheet/controllers/BottomSheetController.ts +382 -0
- package/src/lib/sheet/controllers/CSSTransitionController.ts +51 -0
- package/src/lib/sheet/index.ts +10 -0
- package/src/lib/sheet/useBottomSheet.ts +175 -0
- package/src/lib/spacings/sizes.ts +17 -2
- package/src/lib/touch/UIPanGestureRecognizer.ts +12 -9
- package/src/lib/touch/index.ts +4 -1
- package/src/styles/common.css +31 -41
- package/src/styles/constants.css +5 -0
- package/dist/components/ModalPage/ModalPageContext.d.ts +0 -6
- package/dist/components/ModalPage/ModalPageContext.d.ts.map +0 -1
- package/dist/components/ModalPage/ModalPageContext.js +0 -4
- package/dist/components/ModalPage/ModalPageContext.js.map +0 -1
- package/dist/components/ModalRoot/ModalRootAdaptive.d.ts +0 -7
- package/dist/components/ModalRoot/ModalRootAdaptive.d.ts.map +0 -1
- package/dist/components/ModalRoot/ModalRootAdaptive.js +0 -18
- package/dist/components/ModalRoot/ModalRootAdaptive.js.map +0 -1
- package/dist/components/ModalRoot/ModalRootDesktop.d.ts +0 -4
- package/dist/components/ModalRoot/ModalRootDesktop.d.ts.map +0 -1
- package/dist/components/ModalRoot/ModalRootDesktop.js +0 -186
- package/dist/components/ModalRoot/ModalRootDesktop.js.map +0 -1
- package/dist/components/ModalRoot/constants.d.ts +0 -2
- package/dist/components/ModalRoot/constants.d.ts.map +0 -1
- package/dist/components/ModalRoot/constants.js +0 -3
- package/dist/components/ModalRoot/constants.js.map +0 -1
- package/dist/components/PopoutRoot/PopoutRoot.d.ts +0 -19
- package/dist/components/PopoutRoot/PopoutRoot.d.ts.map +0 -1
- package/dist/components/PopoutRoot/PopoutRoot.js +0 -55
- package/dist/components/PopoutRoot/PopoutRoot.js.map +0 -1
- package/dist/cssm/components/ModalPage/ModalPageContext.js +0 -4
- package/dist/cssm/components/ModalPage/ModalPageContext.js.map +0 -1
- package/dist/cssm/components/ModalRoot/ModalRoot.module.css +0 -61
- package/dist/cssm/components/ModalRoot/ModalRootAdaptive.js +0 -19
- package/dist/cssm/components/ModalRoot/ModalRootAdaptive.js.map +0 -1
- package/dist/cssm/components/ModalRoot/ModalRootDesktop.js +0 -179
- package/dist/cssm/components/ModalRoot/ModalRootDesktop.js.map +0 -1
- package/dist/cssm/components/ModalRoot/constants.js +0 -3
- package/dist/cssm/components/ModalRoot/constants.js.map +0 -1
- package/dist/cssm/components/PopoutRoot/PopoutRoot.js +0 -41
- package/dist/cssm/components/PopoutRoot/PopoutRoot.js.map +0 -1
- package/dist/cssm/components/PopoutRoot/PopoutRoot.module.css +0 -28
- package/dist/cssm/hooks/useKeyboard.js +0 -40
- package/dist/cssm/hooks/useKeyboard.js.map +0 -1
- package/dist/hooks/useKeyboard.d.ts +0 -11
- package/dist/hooks/useKeyboard.d.ts.map +0 -1
- package/dist/hooks/useKeyboard.js +0 -42
- package/dist/hooks/useKeyboard.js.map +0 -1
- package/src/components/ModalPage/ModalPageContext.tsx +0 -8
- package/src/components/ModalRoot/ModalRoot.module.css +0 -59
- package/src/components/ModalRoot/ModalRootAdaptive.tsx +0 -21
- package/src/components/ModalRoot/ModalRootDesktop.tsx +0 -243
- package/src/components/ModalRoot/constants.ts +0 -1
- package/src/components/ModalRoot/useModalRootContext.tsx +0 -5
- package/src/components/PopoutRoot/PopoutRoot.module.css +0 -28
- package/src/components/PopoutRoot/PopoutRoot.tsx +0 -51
- package/src/hooks/useKeyboard.ts +0 -56
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CalendarTime/CalendarTime.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { setHours, setMinutes } from 'date-fns';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { Button } from '../Button/Button';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport styles from './CalendarTime.module.css';\n\nexport type CalendarTimeTestsProps = {\n hoursTestId?: string;\n minutesTestId?: string;\n doneButtonTestId?: string;\n};\n\nexport interface CalendarTimeProps extends CalendarTimeTestsProps {\n value: Date;\n doneButtonText?: string;\n doneButtonShow?: boolean;\n doneButtonDisabled?: boolean;\n changeHoursLabel?: string;\n changeMinutesLabel?: string;\n onChange?: (value: Date) => void;\n onDoneButtonClick?: () => void;\n isDayDisabled?: (day: Date, withTime?: boolean) => boolean;\n}\n\nconst hours: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 24; i += 1) {\n hours.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nconst minutes: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 60; i += 1) {\n minutes.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nexport const CalendarTime = ({\n value,\n onChange,\n onDoneButtonClick,\n changeHoursLabel,\n changeMinutesLabel,\n isDayDisabled,\n doneButtonText = 'Готово',\n doneButtonDisabled = false,\n doneButtonShow = true,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n}: CalendarTimeProps): React.ReactNode => {\n const localHours = isDayDisabled\n ? hours.map((hour) => {\n return { ...hour, disabled: isDayDisabled(setHours(value, hour.value), true) };\n })\n : hours;\n\n const localMinutes = isDayDisabled\n ? minutes.map((minute) => {\n return { ...minute, disabled: isDayDisabled(setMinutes(value, minute.value), true) };\n })\n : minutes;\n\n const onHoursChange = React.useCallback(\n (newValue: SelectProps['value'])
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CalendarTime/CalendarTime.tsx"],"sourcesContent":["'use client';\n\nimport { type ChangeEvent } from 'react';\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { setHours, setMinutes } from 'date-fns';\nimport { AdaptivityProvider } from '../AdaptivityProvider/AdaptivityProvider';\nimport { Button } from '../Button/Button';\nimport { CustomSelect, type SelectProps } from '../CustomSelect/CustomSelect';\nimport styles from './CalendarTime.module.css';\n\nexport type CalendarTimeTestsProps = {\n hoursTestId?: string;\n minutesTestId?: string;\n doneButtonTestId?: string;\n};\n\nexport interface CalendarTimeProps extends CalendarTimeTestsProps {\n value: Date;\n doneButtonText?: string;\n doneButtonShow?: boolean;\n doneButtonDisabled?: boolean;\n changeHoursLabel?: string;\n changeMinutesLabel?: string;\n onChange?: (value: Date) => void;\n onDoneButtonClick?: () => void;\n isDayDisabled?: (day: Date, withTime?: boolean) => boolean;\n}\n\nconst hours: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 24; i += 1) {\n hours.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nconst minutes: Array<{\n value: number;\n label: string;\n}> = [];\nfor (let i = 0; i < 60; i += 1) {\n minutes.push({ value: i, label: String(i).padStart(2, '0') });\n}\n\nexport const CalendarTime = ({\n value,\n onChange,\n onDoneButtonClick,\n changeHoursLabel,\n changeMinutesLabel,\n isDayDisabled,\n doneButtonText = 'Готово',\n doneButtonDisabled = false,\n doneButtonShow = true,\n minutesTestId,\n hoursTestId,\n doneButtonTestId,\n}: CalendarTimeProps): React.ReactNode => {\n const localHours = isDayDisabled\n ? hours.map((hour) => {\n return { ...hour, disabled: isDayDisabled(setHours(value, hour.value), true) };\n })\n : hours;\n\n const localMinutes = isDayDisabled\n ? minutes.map((minute) => {\n return { ...minute, disabled: isDayDisabled(setMinutes(value, minute.value), true) };\n })\n : minutes;\n\n const onHoursChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange?.(setHours(value, Number(newValue))),\n [onChange, value],\n );\n const onMinutesChange = React.useCallback(\n (_: ChangeEvent<HTMLSelectElement>, newValue: SelectProps['value']) =>\n onChange?.(setMinutes(value, Number(newValue))),\n [onChange, value],\n );\n\n return (\n <div className={classNames(styles.host, !doneButtonShow && styles.host__withoutDone)}>\n <div className={styles.picker}>\n <AdaptivityProvider sizeY=\"compact\">\n <CustomSelect\n value={value.getHours()}\n options={localHours}\n onChange={onHoursChange}\n forceDropdownPortal={false}\n aria-label={changeHoursLabel}\n data-testid={hoursTestId}\n />\n </AdaptivityProvider>\n </div>\n <div className={styles.divider}>:</div>\n <div className={styles.picker}>\n <AdaptivityProvider sizeY=\"compact\">\n <CustomSelect\n value={value.getMinutes()}\n options={localMinutes}\n onChange={onMinutesChange}\n forceDropdownPortal={false}\n aria-label={changeMinutesLabel}\n data-testid={minutesTestId}\n />\n </AdaptivityProvider>\n </div>\n {doneButtonShow && (\n <div className={styles.button}>\n <AdaptivityProvider sizeY=\"compact\">\n <Button\n mode=\"secondary\"\n onClick={onDoneButtonClick}\n size=\"l\"\n disabled={doneButtonDisabled}\n data-testid={doneButtonTestId}\n >\n {doneButtonText}\n </Button>\n </AdaptivityProvider>\n </div>\n )}\n </div>\n );\n};\n"],"names":["React","classNames","setHours","setMinutes","AdaptivityProvider","Button","CustomSelect","styles","hours","i","push","value","label","String","padStart","minutes","CalendarTime","onChange","onDoneButtonClick","changeHoursLabel","changeMinutesLabel","isDayDisabled","doneButtonText","doneButtonDisabled","doneButtonShow","minutesTestId","hoursTestId","doneButtonTestId","localHours","map","hour","disabled","localMinutes","minute","onHoursChange","useCallback","_","newValue","Number","onMinutesChange","div","className","host","host__withoutDone","picker","sizeY","getHours","options","forceDropdownPortal","aria-label","data-testid","divider","getMinutes","button","mode","onClick","size"],"mappings":"AAAA;;AAGA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAC7C,SAASC,QAAQ,EAAEC,UAAU,QAAQ,WAAW;AAChD,SAASC,kBAAkB,QAAQ,8CAA2C;AAC9E,SAASC,MAAM,QAAQ,sBAAmB;AAC1C,SAASC,YAAY,QAA0B,kCAA+B;AAC9E,OAAOC,YAAY,4BAA4B;AAoB/C,MAAMC,QAGD,EAAE;AACP,IAAK,IAAIC,IAAI,GAAGA,IAAI,IAAIA,KAAK,EAAG;IAC9BD,MAAME,IAAI,CAAC;QAAEC,OAAOF;QAAGG,OAAOC,OAAOJ,GAAGK,QAAQ,CAAC,GAAG;IAAK;AAC3D;AAEA,MAAMC,UAGD,EAAE;AACP,IAAK,IAAIN,IAAI,GAAGA,IAAI,IAAIA,KAAK,EAAG;IAC9BM,QAAQL,IAAI,CAAC;QAAEC,OAAOF;QAAGG,OAAOC,OAAOJ,GAAGK,QAAQ,CAAC,GAAG;IAAK;AAC7D;AAEA,OAAO,MAAME,eAAe,CAAC,EAC3BL,KAAK,EACLM,QAAQ,EACRC,iBAAiB,EACjBC,gBAAgB,EAChBC,kBAAkB,EAClBC,aAAa,EACbC,iBAAiB,QAAQ,EACzBC,qBAAqB,KAAK,EAC1BC,iBAAiB,IAAI,EACrBC,aAAa,EACbC,WAAW,EACXC,gBAAgB,EACE;IAClB,MAAMC,aAAaP,gBACfb,MAAMqB,GAAG,CAAC,CAACC;QACT,OAAO;YAAE,GAAGA,IAAI;YAAEC,UAAUV,cAAcnB,SAASS,OAAOmB,KAAKnB,KAAK,GAAG;QAAM;IAC/E,KACAH;IAEJ,MAAMwB,eAAeX,gBACjBN,QAAQc,GAAG,CAAC,CAACI;QACX,OAAO;YAAE,GAAGA,MAAM;YAAEF,UAAUV,cAAclB,WAAWQ,OAAOsB,OAAOtB,KAAK,GAAG;QAAM;IACrF,KACAI;IAEJ,MAAMmB,gBAAgBlC,MAAMmC,WAAW,CACrC,CAACC,GAAmCC,WAClCpB,WAAWf,SAASS,OAAO2B,OAAOD,aACpC;QAACpB;QAAUN;KAAM;IAEnB,MAAM4B,kBAAkBvC,MAAMmC,WAAW,CACvC,CAACC,GAAmCC,WAClCpB,WAAWd,WAAWQ,OAAO2B,OAAOD,aACtC;QAACpB;QAAUN;KAAM;IAGnB,qBACE,MAAC6B;QAAIC,WAAWxC,WAAWM,OAAOmC,IAAI,EAAE,CAAClB,kBAAkBjB,OAAOoC,iBAAiB;;0BACjF,KAACH;gBAAIC,WAAWlC,OAAOqC,MAAM;0BAC3B,cAAA,KAACxC;oBAAmByC,OAAM;8BACxB,cAAA,KAACvC;wBACCK,OAAOA,MAAMmC,QAAQ;wBACrBC,SAASnB;wBACTX,UAAUiB;wBACVc,qBAAqB;wBACrBC,cAAY9B;wBACZ+B,eAAaxB;;;;0BAInB,KAACc;gBAAIC,WAAWlC,OAAO4C,OAAO;0BAAE;;0BAChC,KAACX;gBAAIC,WAAWlC,OAAOqC,MAAM;0BAC3B,cAAA,KAACxC;oBAAmByC,OAAM;8BACxB,cAAA,KAACvC;wBACCK,OAAOA,MAAMyC,UAAU;wBACvBL,SAASf;wBACTf,UAAUsB;wBACVS,qBAAqB;wBACrBC,cAAY7B;wBACZ8B,eAAazB;;;;YAIlBD,gCACC,KAACgB;gBAAIC,WAAWlC,OAAO8C,MAAM;0BAC3B,cAAA,KAACjD;oBAAmByC,OAAM;8BACxB,cAAA,KAACxC;wBACCiD,MAAK;wBACLC,SAASrC;wBACTsC,MAAK;wBACLzB,UAAUR;wBACV2B,eAAavB;kCAEZL;;;;;;AAOf,EAAE"}
|
|
@@ -3,7 +3,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { IconAppearanceProvider } from "@vkontakte/icons";
|
|
5
5
|
import { useAutoDetectColorScheme } from "../../hooks/useAutoDetectColorScheme.js";
|
|
6
|
-
import { useObjectMemo } from "../../hooks/useObjectMemo.js";
|
|
7
6
|
import { TokensClassProvider } from "../../lib/tokens/index.js";
|
|
8
7
|
import { excludeKeysWithUndefined } from "../../lib/utils.js";
|
|
9
8
|
import { ConfigProviderContext, useConfigProvider } from "./ConfigProviderContext.js";
|
|
@@ -17,16 +16,25 @@ import { ConfigProviderContext, useConfigProvider } from "./ConfigProviderContex
|
|
|
17
16
|
...props
|
|
18
17
|
};
|
|
19
18
|
const colorScheme = useAutoDetectColorScheme(colorSchemeProp);
|
|
20
|
-
const configContext =
|
|
21
|
-
|
|
19
|
+
const configContext = React.useMemo(()=>({
|
|
20
|
+
hasCustomPanelHeaderAfter,
|
|
21
|
+
customPanelHeaderAfterMinWidth,
|
|
22
|
+
isWebView,
|
|
23
|
+
transitionMotionEnabled,
|
|
24
|
+
platform,
|
|
25
|
+
locale,
|
|
26
|
+
tokensClassNames,
|
|
27
|
+
colorScheme
|
|
28
|
+
}), [
|
|
29
|
+
colorScheme,
|
|
22
30
|
customPanelHeaderAfterMinWidth,
|
|
31
|
+
hasCustomPanelHeaderAfter,
|
|
23
32
|
isWebView,
|
|
24
|
-
transitionMotionEnabled,
|
|
25
|
-
platform,
|
|
26
33
|
locale,
|
|
34
|
+
platform,
|
|
27
35
|
tokensClassNames,
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
transitionMotionEnabled
|
|
37
|
+
]);
|
|
30
38
|
return /*#__PURE__*/ _jsx(ConfigProviderContext.Provider, {
|
|
31
39
|
value: configContext,
|
|
32
40
|
children: /*#__PURE__*/ _jsx(IconAppearanceProvider, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/ConfigProvider/ConfigProvider.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { IconAppearanceProvider } from '@vkontakte/icons';\nimport { useAutoDetectColorScheme } from '../../hooks/useAutoDetectColorScheme';\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/ConfigProvider/ConfigProvider.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { IconAppearanceProvider } from '@vkontakte/icons';\nimport { useAutoDetectColorScheme } from '../../hooks/useAutoDetectColorScheme';\nimport { TokensClassProvider } from '../../lib/tokens';\nimport { excludeKeysWithUndefined } from '../../lib/utils';\nimport {\n ConfigProviderContext,\n type ConfigProviderContextInterface,\n useConfigProvider,\n} from './ConfigProviderContext';\n\nexport interface ConfigProviderProps extends Partial<ConfigProviderContextInterface> {\n children: React.ReactNode;\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/ConfigProvider\n */\nexport const ConfigProvider = (propsRaw: ConfigProviderProps): React.ReactNode => {\n const props = excludeKeysWithUndefined(propsRaw);\n const parentConfig = useConfigProvider();\n\n const {\n children,\n hasCustomPanelHeaderAfter,\n customPanelHeaderAfterMinWidth,\n isWebView,\n transitionMotionEnabled,\n platform,\n locale,\n colorScheme: colorSchemeProp,\n tokensClassNames,\n } = {\n ...parentConfig,\n ...props,\n };\n\n const colorScheme = useAutoDetectColorScheme(colorSchemeProp);\n\n const configContext = React.useMemo(\n () => ({\n hasCustomPanelHeaderAfter,\n customPanelHeaderAfterMinWidth,\n isWebView,\n transitionMotionEnabled,\n platform,\n locale,\n tokensClassNames,\n colorScheme,\n }),\n [\n colorScheme,\n customPanelHeaderAfterMinWidth,\n hasCustomPanelHeaderAfter,\n isWebView,\n locale,\n platform,\n tokensClassNames,\n transitionMotionEnabled,\n ],\n );\n\n return (\n <ConfigProviderContext.Provider value={configContext}>\n <IconAppearanceProvider value={colorScheme}>\n <TokensClassProvider>{children}</TokensClassProvider>\n </IconAppearanceProvider>\n </ConfigProviderContext.Provider>\n );\n};\n"],"names":["React","IconAppearanceProvider","useAutoDetectColorScheme","TokensClassProvider","excludeKeysWithUndefined","ConfigProviderContext","useConfigProvider","ConfigProvider","propsRaw","props","parentConfig","children","hasCustomPanelHeaderAfter","customPanelHeaderAfterMinWidth","isWebView","transitionMotionEnabled","platform","locale","colorScheme","colorSchemeProp","tokensClassNames","configContext","useMemo","Provider","value"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,sBAAsB,QAAQ,mBAAmB;AAC1D,SAASC,wBAAwB,QAAQ,0CAAuC;AAChF,SAASC,mBAAmB,QAAQ,4BAAmB;AACvD,SAASC,wBAAwB,QAAQ,qBAAkB;AAC3D,SACEC,qBAAqB,EAErBC,iBAAiB,QACZ,6BAA0B;AAMjC;;CAEC,GACD,OAAO,MAAMC,iBAAiB,CAACC;IAC7B,MAAMC,QAAQL,yBAAyBI;IACvC,MAAME,eAAeJ;IAErB,MAAM,EACJK,QAAQ,EACRC,yBAAyB,EACzBC,8BAA8B,EAC9BC,SAAS,EACTC,uBAAuB,EACvBC,QAAQ,EACRC,MAAM,EACNC,aAAaC,eAAe,EAC5BC,gBAAgB,EACjB,GAAG;QACF,GAAGV,YAAY;QACf,GAAGD,KAAK;IACV;IAEA,MAAMS,cAAchB,yBAAyBiB;IAE7C,MAAME,gBAAgBrB,MAAMsB,OAAO,CACjC,IAAO,CAAA;YACLV;YACAC;YACAC;YACAC;YACAC;YACAC;YACAG;YACAF;QACF,CAAA,GACA;QACEA;QACAL;QACAD;QACAE;QACAG;QACAD;QACAI;QACAL;KACD;IAGH,qBACE,KAACV,sBAAsBkB,QAAQ;QAACC,OAAOH;kBACrC,cAAA,KAACpB;YAAuBuB,OAAON;sBAC7B,cAAA,KAACf;0BAAqBQ;;;;AAI9B,EAAE"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
'use client';
|
|
1
2
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
3
|
import * as React from "react";
|
|
3
4
|
import { classNames } from "@vkontakte/vkjs";
|
|
@@ -5,19 +6,61 @@ import { Caption } from "../Typography/Caption/Caption.js";
|
|
|
5
6
|
import { Headline } from "../Typography/Headline/Headline.js";
|
|
6
7
|
import styles from "./Counter.module.css";
|
|
7
8
|
const modeClassNames = {
|
|
8
|
-
secondary: styles.modeSecondary,
|
|
9
9
|
primary: styles.modePrimary,
|
|
10
|
-
prominent: styles.modeProminent,
|
|
11
10
|
contrast: styles.modeContrast,
|
|
11
|
+
tertiary: styles.modeTertiary,
|
|
12
12
|
inherit: styles.modeInherit
|
|
13
13
|
};
|
|
14
|
+
const appearanceClassNames = {
|
|
15
|
+
'custom': styles.appearanceCustom,
|
|
16
|
+
'accent': styles.appearanceAccent,
|
|
17
|
+
'neutral': styles.appearanceNeutral,
|
|
18
|
+
'accent-green': styles.appearanceAccentGreen,
|
|
19
|
+
'accent-red': styles.appearanceAccentRed
|
|
20
|
+
};
|
|
14
21
|
const sizeClassNames = {
|
|
15
22
|
s: styles.sizeS,
|
|
16
23
|
m: styles.sizeM
|
|
17
24
|
};
|
|
18
25
|
/**
|
|
19
26
|
* @see https://vkcom.github.io/VKUI/#/Counter
|
|
20
|
-
*/ export const Counter = ({ mode = 'inherit', size = 'm', children, className, ...restProps })=>{
|
|
27
|
+
*/ export const Counter = ({ mode = 'inherit', appearance: appearanceProp, color, size = 'm', children, className, style: styleProp, ...restProps })=>{
|
|
28
|
+
const appearance = React.useMemo(()=>{
|
|
29
|
+
if (mode === 'inherit') {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
if (appearanceProp) {
|
|
33
|
+
return appearanceProp;
|
|
34
|
+
}
|
|
35
|
+
return 'accent';
|
|
36
|
+
}, [
|
|
37
|
+
appearanceProp,
|
|
38
|
+
mode
|
|
39
|
+
]);
|
|
40
|
+
const style = React.useMemo(()=>{
|
|
41
|
+
if (mode === 'inherit' || appearance !== 'custom' || !color) {
|
|
42
|
+
return styleProp;
|
|
43
|
+
}
|
|
44
|
+
switch(mode){
|
|
45
|
+
case 'primary':
|
|
46
|
+
return {
|
|
47
|
+
...styleProp,
|
|
48
|
+
'--vkui_internal--counter_background': color
|
|
49
|
+
};
|
|
50
|
+
case 'contrast':
|
|
51
|
+
case 'tertiary':
|
|
52
|
+
return {
|
|
53
|
+
...styleProp,
|
|
54
|
+
'--vkui_internal--counter_foreground': color
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
return styleProp;
|
|
58
|
+
}, [
|
|
59
|
+
appearance,
|
|
60
|
+
color,
|
|
61
|
+
mode,
|
|
62
|
+
styleProp
|
|
63
|
+
]);
|
|
21
64
|
if (React.Children.count(children) === 0) {
|
|
22
65
|
return null;
|
|
23
66
|
}
|
|
@@ -25,8 +68,9 @@ const sizeClassNames = {
|
|
|
25
68
|
const counterLevel = size === 's' ? '1' : '2';
|
|
26
69
|
return /*#__PURE__*/ _jsx(CounterTypography, {
|
|
27
70
|
...restProps,
|
|
71
|
+
style: style,
|
|
28
72
|
Component: "span",
|
|
29
|
-
className: classNames('vkuiInternalCounter', styles.host, modeClassNames[mode], sizeClassNames[size], className),
|
|
73
|
+
className: classNames('vkuiInternalCounter', styles.host, modeClassNames[mode], !!appearance && appearanceClassNames[appearance], sizeClassNames[size], className),
|
|
30
74
|
level: counterLevel,
|
|
31
75
|
children: children
|
|
32
76
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/Counter/Counter.tsx"],"sourcesContent":["
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/Counter/Counter.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames } from '@vkontakte/vkjs';\nimport { type HTMLAttributesWithRootRef } from '../../types';\nimport { Caption } from '../Typography/Caption/Caption';\nimport { Headline } from '../Typography/Headline/Headline';\nimport styles from './Counter.module.css';\n\nconst modeClassNames = {\n primary: styles.modePrimary,\n contrast: styles.modeContrast,\n tertiary: styles.modeTertiary,\n inherit: styles.modeInherit,\n};\n\nconst appearanceClassNames: Record<string, string> = {\n 'custom': styles.appearanceCustom,\n 'accent': styles.appearanceAccent,\n 'neutral': styles.appearanceNeutral,\n 'accent-green': styles.appearanceAccentGreen,\n 'accent-red': styles.appearanceAccentRed,\n};\n\nconst sizeClassNames = {\n s: styles.sizeS,\n m: styles.sizeM,\n};\n\nexport interface CounterProps extends HTMLAttributesWithRootRef<HTMLSpanElement> {\n /**\n * Режим отображения счетчика\n */\n mode?: 'primary' | 'contrast' | 'tertiary' | 'inherit';\n\n /**\n * Внешний вид счетчика\n */\n appearance?: 'accent' | 'neutral' | 'accent-green' | 'accent-red' | 'custom';\n\n /**\n * Пользовательский цвет (работает только при appearance=\"custom\")\n * - При mode=\"primary\" - изменяет фон\n * - При mode=\"contrast\" - изменяет цвет текста\n * - При mode=\"tertiary\" - изменяет цвет текста\n * - При mode=\"inherit\" - не работает\n */\n color?: string;\n\n size?: 's' | 'm';\n}\n\n/**\n * @see https://vkcom.github.io/VKUI/#/Counter\n */\nexport const Counter = ({\n mode = 'inherit',\n appearance: appearanceProp,\n color,\n size = 'm',\n children,\n className,\n style: styleProp,\n ...restProps\n}: CounterProps): React.ReactNode => {\n const appearance = React.useMemo<CounterProps['appearance']>(() => {\n if (mode === 'inherit') {\n return undefined;\n }\n if (appearanceProp) {\n return appearanceProp;\n }\n return 'accent';\n }, [appearanceProp, mode]);\n\n const style = React.useMemo(() => {\n if (mode === 'inherit' || appearance !== 'custom' || !color) {\n return styleProp;\n }\n switch (mode) {\n case 'primary':\n return {\n ...styleProp,\n '--vkui_internal--counter_background': color,\n };\n case 'contrast':\n case 'tertiary':\n return {\n ...styleProp,\n '--vkui_internal--counter_foreground': color,\n };\n }\n return styleProp;\n }, [appearance, color, mode, styleProp]);\n\n if (React.Children.count(children) === 0) {\n return null;\n }\n\n const CounterTypography = size === 's' ? Caption : Headline;\n const counterLevel = size === 's' ? '1' : '2';\n\n return (\n <CounterTypography\n {...restProps}\n style={style}\n Component=\"span\"\n className={classNames(\n 'vkuiInternalCounter',\n styles.host,\n modeClassNames[mode],\n !!appearance && appearanceClassNames[appearance],\n sizeClassNames[size],\n className,\n )}\n level={counterLevel}\n >\n {children}\n </CounterTypography>\n );\n};\n"],"names":["React","classNames","Caption","Headline","styles","modeClassNames","primary","modePrimary","contrast","modeContrast","tertiary","modeTertiary","inherit","modeInherit","appearanceClassNames","appearanceCustom","appearanceAccent","appearanceNeutral","appearanceAccentGreen","appearanceAccentRed","sizeClassNames","s","sizeS","m","sizeM","Counter","mode","appearance","appearanceProp","color","size","children","className","style","styleProp","restProps","useMemo","undefined","Children","count","CounterTypography","counterLevel","Component","host","level"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,QAAQ,kBAAkB;AAE7C,SAASC,OAAO,QAAQ,mCAAgC;AACxD,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,OAAOC,YAAY,uBAAuB;AAE1C,MAAMC,iBAAiB;IACrBC,SAASF,OAAOG,WAAW;IAC3BC,UAAUJ,OAAOK,YAAY;IAC7BC,UAAUN,OAAOO,YAAY;IAC7BC,SAASR,OAAOS,WAAW;AAC7B;AAEA,MAAMC,uBAA+C;IACnD,UAAUV,OAAOW,gBAAgB;IACjC,UAAUX,OAAOY,gBAAgB;IACjC,WAAWZ,OAAOa,iBAAiB;IACnC,gBAAgBb,OAAOc,qBAAqB;IAC5C,cAAcd,OAAOe,mBAAmB;AAC1C;AAEA,MAAMC,iBAAiB;IACrBC,GAAGjB,OAAOkB,KAAK;IACfC,GAAGnB,OAAOoB,KAAK;AACjB;AAyBA;;CAEC,GACD,OAAO,MAAMC,UAAU,CAAC,EACtBC,OAAO,SAAS,EAChBC,YAAYC,cAAc,EAC1BC,KAAK,EACLC,OAAO,GAAG,EACVC,QAAQ,EACRC,SAAS,EACTC,OAAOC,SAAS,EAChB,GAAGC,WACU;IACb,MAAMR,aAAa3B,MAAMoC,OAAO,CAA6B;QAC3D,IAAIV,SAAS,WAAW;YACtB,OAAOW;QACT;QACA,IAAIT,gBAAgB;YAClB,OAAOA;QACT;QACA,OAAO;IACT,GAAG;QAACA;QAAgBF;KAAK;IAEzB,MAAMO,QAAQjC,MAAMoC,OAAO,CAAC;QAC1B,IAAIV,SAAS,aAAaC,eAAe,YAAY,CAACE,OAAO;YAC3D,OAAOK;QACT;QACA,OAAQR;YACN,KAAK;gBACH,OAAO;oBACL,GAAGQ,SAAS;oBACZ,uCAAuCL;gBACzC;YACF,KAAK;YACL,KAAK;gBACH,OAAO;oBACL,GAAGK,SAAS;oBACZ,uCAAuCL;gBACzC;QACJ;QACA,OAAOK;IACT,GAAG;QAACP;QAAYE;QAAOH;QAAMQ;KAAU;IAEvC,IAAIlC,MAAMsC,QAAQ,CAACC,KAAK,CAACR,cAAc,GAAG;QACxC,OAAO;IACT;IAEA,MAAMS,oBAAoBV,SAAS,MAAM5B,UAAUC;IACnD,MAAMsC,eAAeX,SAAS,MAAM,MAAM;IAE1C,qBACE,KAACU;QACE,GAAGL,SAAS;QACbF,OAAOA;QACPS,WAAU;QACVV,WAAW/B,WACT,uBACAG,OAAOuC,IAAI,EACXtC,cAAc,CAACqB,KAAK,EACpB,CAAC,CAACC,cAAcb,oBAAoB,CAACa,WAAW,EAChDP,cAAc,CAACU,KAAK,EACpBE;QAEFY,OAAOH;kBAENV;;AAGP,EAAE"}
|
|
@@ -5,28 +5,94 @@
|
|
|
5
5
|
padding-inline: 5px;
|
|
6
6
|
text-align: center;
|
|
7
7
|
box-sizing: border-box;
|
|
8
|
+
background: var(--vkui_internal--counter_background);
|
|
9
|
+
color: var(--vkui_internal--counter_foreground);
|
|
10
|
+
|
|
11
|
+
--vkui_internal--counter_background: transparent;
|
|
12
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_contrast);
|
|
8
13
|
}
|
|
9
14
|
|
|
15
|
+
/* -------- Mode Primary --------- */
|
|
16
|
+
|
|
10
17
|
.modePrimary {
|
|
11
|
-
|
|
12
|
-
color: var(--vkui--color_text_contrast);
|
|
18
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_contrast);
|
|
13
19
|
}
|
|
14
20
|
|
|
15
|
-
.
|
|
16
|
-
|
|
17
|
-
|
|
21
|
+
.modePrimary.appearanceAccent {
|
|
22
|
+
--vkui_internal--counter_background: var(--vkui--color_background_accent_themed);
|
|
23
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_contrast_themed);
|
|
18
24
|
}
|
|
19
25
|
|
|
20
|
-
.
|
|
21
|
-
|
|
22
|
-
color: var(--vkui--color_text_contrast);
|
|
26
|
+
.modePrimary.appearanceNeutral {
|
|
27
|
+
--vkui_internal--counter_background: var(--vkui--color_icon_secondary);
|
|
23
28
|
}
|
|
24
29
|
|
|
30
|
+
.modePrimary.appearanceAccentGreen {
|
|
31
|
+
--vkui_internal--counter_background: var(--vkui--color_accent_green);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.modePrimary.appearanceAccentRed {
|
|
35
|
+
--vkui_internal--counter_background: var(--vkui--color_accent_red);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.modePrimary.appearanceCustom {
|
|
39
|
+
--vkui_internal--counter_background: transparent;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* -------- Mode Contrast --------- */
|
|
43
|
+
|
|
25
44
|
.modeContrast {
|
|
26
|
-
|
|
27
|
-
|
|
45
|
+
--vkui_internal--counter_background: var(--vkui--color_background_contrast);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.modeContrast.appearanceAccent {
|
|
49
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_accent);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.modeContrast.appearanceNeutral {
|
|
53
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_tertiary);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.modeContrast.appearanceAccentGreen {
|
|
57
|
+
--vkui_internal--counter_foreground: var(--vkui--color_accent_green);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.modeContrast.appearanceAccentRed {
|
|
61
|
+
--vkui_internal--counter_foreground: var(--vkui--color_accent_red);
|
|
28
62
|
}
|
|
29
63
|
|
|
64
|
+
.modeContrast.appearanceCustom {
|
|
65
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_primary_invariably);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/* -------- Mode Tertiary --------- */
|
|
69
|
+
|
|
70
|
+
.modeTertiary {
|
|
71
|
+
--vkui_internal--counter_background: transparent;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
.modeTertiary.appearanceAccent {
|
|
75
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_accent);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.modeTertiary.appearanceNeutral {
|
|
79
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_subhead);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
.modeTertiary.appearanceAccentGreen {
|
|
83
|
+
--vkui_internal--counter_foreground: var(--vkui--color_accent_green);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.modeTertiary.appearanceAccentRed {
|
|
87
|
+
--vkui_internal--counter_foreground: var(--vkui--color_accent_red);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
.modeTertiary.appearanceCustom {
|
|
91
|
+
--vkui_internal--counter_foreground: var(--vkui--color_text_contrast);
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/*----------------------------------*/
|
|
95
|
+
|
|
30
96
|
.sizeM {
|
|
31
97
|
block-size: 24px;
|
|
32
98
|
min-inline-size: 24px;
|
|
@@ -40,11 +106,14 @@
|
|
|
40
106
|
}
|
|
41
107
|
|
|
42
108
|
.modeInherit {
|
|
43
|
-
|
|
109
|
+
--vkui_internal--counter_background: var(
|
|
44
110
|
--vkui_internal--counter_inherit_background,
|
|
45
111
|
var(--vkui--color_icon_secondary)
|
|
46
112
|
);
|
|
47
|
-
|
|
113
|
+
--vkui_internal--counter_foreground: var(
|
|
114
|
+
--vkui_internal--counter_inherit_color,
|
|
115
|
+
var(--vkui--color_text_contrast_themed)
|
|
116
|
+
);
|
|
48
117
|
}
|
|
49
118
|
|
|
50
119
|
/**
|
|
@@ -337,7 +337,13 @@ const filter = (options, inputValue, filterFn)=>{
|
|
|
337
337
|
if (!isControlledOutside) {
|
|
338
338
|
setSelectedOptionIndex(newSelectedOptionIndex);
|
|
339
339
|
}
|
|
340
|
-
|
|
340
|
+
if (e.target.value === NOT_SELECTED.NATIVE) {
|
|
341
|
+
e.target.value = '';
|
|
342
|
+
}
|
|
343
|
+
if (e.currentTarget.value === NOT_SELECTED.NATIVE) {
|
|
344
|
+
e.currentTarget.value = '';
|
|
345
|
+
}
|
|
346
|
+
onChange?.(e, remappedNativeValue);
|
|
341
347
|
}
|
|
342
348
|
};
|
|
343
349
|
const onInputChange = React.useCallback((e)=>{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n type CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport {\n NOT_SELECTED,\n remapFromNativeValueToSelectValue,\n remapFromSelectValueToNativeValue,\n} from '../NativeSelect/NativeSelect';\nimport type {\n NativeSelectProps,\n NativeSelectValue,\n SelectValue,\n} from '../NativeSelect/NativeSelect';\nimport type { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nconst checkMixControlledAndUncontrolledState = (\n oldIsControlled: boolean,\n newIsControlled: boolean,\n) => {\n if (!oldIsControlled && newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n if (oldIsControlled && !newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n) {\n if (value === NOT_SELECTED.CUSTOM) {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nexport interface CustomSelectOptionInterface {\n value: Exclude<SelectValue, null>;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'readOnly'> {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n 'onInputChange': onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n searchable = false,\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n 'options': optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n 'icon': iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n 'aria-labelledby': ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState<NativeSelectValue>(() => {\n if (props.value !== undefined) {\n return remapFromSelectValueToNativeValue(props.value);\n }\n if (defaultValue !== undefined) {\n return remapFromSelectValueToNativeValue(defaultValue);\n }\n return NOT_SELECTED.NATIVE;\n });\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue ?? null),\n );\n\n React.useEffect(() => {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = props.value !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n setNativeSelectValue((nativeSelectValue) => {\n if (props.value !== undefined) {\n return remapFromSelectValueToNativeValue(props.value);\n }\n return nativeSelectValue;\n });\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n setNativeSelectValue(item?.value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value =\n props.value !== undefined\n ? props.value\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n },\n [filterFn, inputValue, nativeSelectValue, optionsProp, defaultValue, props.value, searchable],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);\n const newSelectedOptionIndex = findSelectedIndex(options, remappedNativeValue);\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n onChange?.(remappedNativeValue);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n\n const controlledValueSet = isControlledOutside && props.value !== NOT_SELECTED.CUSTOM;\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== NOT_SELECTED.NATIVE;\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles.clearIcon : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n setInputValue('');\n selectInputRef.current && selectInputRef.current.focus();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n selectInputRef,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles.dropdownIcon : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n selectInputRef.current.focus();\n }\n }\n },\n [document, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n 'aria-activedescendant':\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles.control}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","debounce","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","NOT_SELECTED","remapFromNativeValueToSelectValue","remapFromSelectValueToNativeValue","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","styles","sizeYClassNames","none","sizeYNone","compact","sizeYCompact","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","checkMixControlledAndUncontrolledState","oldIsControlled","newIsControlled","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","CUSTOM","Number","filter","inputValue","filterFn","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","searchable","renderOptionProp","optionsProp","emptyText","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","NATIVE","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","popUp","popDown","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","remappedNativeValue","currentTarget","newSelectedOptionIndex","onInputChange","target","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","renderOption","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","empty","selectInputRef","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearIcon","clearSelectState","focus","data-testid","icon","dropdownIcon","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","host","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","control","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"AAAA;;AAEA,YAAYA,WAAW,QAAQ;AAC/B,SAASC,UAAU,EAAEC,QAAQ,QAAQ,kBAAkB;AACvD,SAASC,aAAa,QAAQ,+BAA4B;AAC1D,SAASC,YAAY,QAAQ,8BAA2B;AACxD,SAASC,cAAc,QAAQ,gCAA6B;AAC5D,SAASC,MAAM,QAAQ,mBAAgB;AAEvC,SAASC,eAAe,QAAuB,sBAAmB;AAClE,SAASC,yBAAyB,QAAQ,yCAAsC;AAChF,SAASC,QAAQ,QAAQ,wBAAqB;AAC9C,SACEC,oBAAoB,QAEf,kDAA+C;AACtD,SACEC,kBAAkB,QAEb,8CAA2C;AAClD,SAASC,YAAY,QAAQ,kCAA+B;AAE5D,SACEC,YAAY,EACZC,iCAAiC,EACjCC,iCAAiC,QAC5B,kCAA+B;AAOtC,SAASC,QAAQ,QAAQ,qCAAkC;AAC3D,SAASC,cAAc,QAAQ,sCAAmC;AAClE,SACEC,uBAAuB,QAElB,+BAA4B;AACnC,SACEC,iBAAiB,QAEZ,2CAAwC;AAC/C,OAAOC,YAAY,4BAA4B;AAE/C,MAAMC,kBAAkB;IACtBC,MAAMF,OAAOG,SAAS;IACtBC,SAASJ,OAAOK,YAAY;AAC9B;AAEA,MAAMC,iBAAiB,CAACC,UAAyC,EAAE,EAAEC,aAAa,CAAC,CAAC;IAClF,IAAIA,cAAcD,QAAQE,MAAM,GAAG,GAAG;QACpC,OAAO,CAAC;IACV;IACA,OAAOF,QAAQG,SAAS,CAAC,CAACC,QAAQC,IAAMA,IAAIJ,cAAc,CAACG,OAAOE,QAAQ;AAC5E;AAEA,MAAMC,kBAAkB,CACtBP,UAAyC,EAAE,EAC3CQ,WAAmBR,QAAQE,MAAM;IAEjC,IAAIO,SAAS,CAAC;IACd,IAAID,YAAY,GAAG;QACjB,OAAOC;IACT;IACA,IAAK,IAAIJ,IAAIG,WAAW,GAAGH,KAAK,GAAGA,IAAK;QACtC,IAAID,SAASJ,OAAO,CAACK,EAAE;QAEvB,IAAI,CAACD,OAAOE,QAAQ,EAAE;YACpBG,SAASJ;YACT;QACF;IACF;IACA,OAAOI;AACT;AAEA,MAAMC,OAAO5B,SAAS;AAEtB,MAAM6B,wBAAwB,CAAwCX;IACpE,IAAI,IAAIY,IAAIZ,QAAQa,GAAG,CAAC,CAACC,OAAS,OAAOA,KAAKC,KAAK,GAAGC,IAAI,GAAG,GAAG;QAC9DN,KACE,+FACA;IAEJ;AACF;AAEA,MAAMO,yCAAyC,CAC7CC,iBACAC;IAEA,IAAI,CAACD,mBAAmBC,iBAAiB;QACvCT,KACE,CAAC,2MAA2M,CAAC,EAC7M;IAEJ;IACA,IAAIQ,mBAAmB,CAACC,iBAAiB;QACvCT,KACE,CAAC,2MAA2M,CAAC,EAC7M;IAEJ;AACF;AAEA,SAASU,sBAA6D,EACpEhB,MAAM,EACN,GAAGiB,OACyB;IAC5B,qBAAO,KAACrC;QAAoB,GAAGqC,KAAK;;AACtC;AAEA,MAAMC,mBAAsC,CAACC;IAC3CA,EAAEC,cAAc;AAClB;AAEA,SAASC,kBACPzB,UAAe,EAAE,EACjBe,KAAkB;IAElB,IAAIA,UAAU7B,aAAawC,MAAM,EAAE;QACjC,OAAO,CAAC;IACV;IACA,OACE1B,QAAQG,SAAS,CAAC,CAACW;QACjBC,QAAQ,OAAOD,KAAKC,KAAK,KAAK,WAAWY,OAAOZ,SAASA;QACzD,OAAOD,KAAKC,KAAK,KAAKA;IACxB,MAAM,CAAC;AAEX;AAEA,MAAMa,SAAS,CACb5B,SACA6B,YACAC;IAEA,OAAO,OAAOA,aAAa,aACvB9B,QAAQ4B,MAAM,CAAC,CAACxB,SAAW0B,SAASD,YAAYzB,WAChDJ;AACN;AA8GA;;CAEC,GACD,OAAO,SAAS+B,aACdV,KAAoC;IAEpC,MAAM,CAACW,QAAQC,UAAU,GAAG5D,MAAM6D,QAAQ,CAAC;IAC3C,MAAM,EACJC,MAAM,EACNC,IAAI,EACJC,SAAS,EACTC,MAAM,EACNC,UAAU,EACVC,iBAAiB,QAAQ,EACzBC,KAAK,EACLC,QAAQ,EACRC,QAAQ,EACR,iBAAiBC,iBAAiB,EAClCC,cAAc,EACdC,MAAM,EACNC,OAAO,EACPC,QAAQ,EACRC,mBAAmB,EACnBC,aAAa,SAAS,EACtBC,aAAa,KAAK,EAClB,gBAAgBC,mBAAmBhC,qBAAqB,EACxD,WAAWiC,WAAW,EACtBC,YAAY,mBAAmB,EAC/BxB,WAAWlD,eAAe,EAC1B,QAAQ2E,QAAQ,EAChBC,cAAcjE,uBAAuB,EACrCkE,mBAAmB,KAAK,EACxBC,yBAAyB,CAAC,EAC1BC,oBAAoB,KAAK,EACzBC,cAAc,KAAK,EACnB,mBAAmBC,cAAc,EACjCC,iBAAiB,EACjBC,kBAAkB,EAClBC,YAAY,EACZC,QAAQ,EACRC,iBAAiB,EACjBC,kBAAkB,EAClB,GAAGC,WACJ,GAAG/C;IAEJ,IAAIgD,QAAQC,GAAG,CAACC,QAAQ,KAAK,eAAe;QAC1C5D,sBAAsB0C;IACxB;IAEA,MAAM,EAAEmB,QAAQ,MAAM,EAAE,GAAGhG;IAE3B,MAAMiG,eAAepG,MAAMqG,MAAM,CAAiB;IAClD,MAAMC,gBAAgBlG,aAAagG,cAAclC;IACjD,MAAMqC,eAAevG,MAAMqG,MAAM,CAAwB;IACzD,MAAMG,cAAcpG,aAAa6D;IACjC,MAAMwC,oBAAoBzG,MAAMqG,MAAM,CAAiB;IAEvD,MAAM,CAACK,oBAAoBC,sBAAsB,GAAG3G,MAAM6D,QAAQ,CAAqB,CAAC;IACxF,MAAM,CAAC+C,qBAAqBC,uBAAuB,GAAG7G,MAAM6D,QAAQ,CAACb,MAAMN,KAAK,KAAKoE;IACrF,MAAM,CAACtD,YAAYuD,cAAc,GAAG/G,MAAM6D,QAAQ,CAAC;IACnD,MAAM,CAACmD,mBAAmBC,qBAAqB,GAAGjH,MAAM6D,QAAQ,CAAoB;QAClF,IAAIb,MAAMN,KAAK,KAAKoE,WAAW;YAC7B,OAAO/F,kCAAkCiC,MAAMN,KAAK;QACtD;QACA,IAAIiD,iBAAiBmB,WAAW;YAC9B,OAAO/F,kCAAkC4E;QAC3C;QACA,OAAO9E,aAAaqG,MAAM;IAC5B;IAEA,MAAM,CAACC,iBAAiBC,mBAAmB,GAAGpH,MAAM6D,QAAQ,CAAYM;IACxE,MAAM,CAACxC,SAAS0F,WAAW,GAAGrH,MAAM6D,QAAQ,CAACmB;IAC7C,MAAM,CAACsC,qBAAqBC,uBAAuB,GAAGvH,MAAM6D,QAAQ,CAClET,kBAAkB4B,aAAahC,MAAMN,KAAK,IAAIiD,gBAAgB;IAGhE3F,MAAMwH,SAAS,CAAC;QACdX,uBAAuB,CAAChE;YACtB,MAAMC,kBAAkBE,MAAMN,KAAK,KAAKoE;YACxClE,uCAAuCC,iBAAiBC;YACxD,OAAOA;QACT;QACAmE,qBAAqB,CAACD;YACpB,IAAIhE,MAAMN,KAAK,KAAKoE,WAAW;gBAC7B,OAAO/F,kCAAkCiC,MAAMN,KAAK;YACtD;YACA,OAAOsE;QACT;IACF,GAAG;QAAChE,MAAMN,KAAK;KAAC;IAEhBlC,0BAA0B;QACxB,IACEmB,QAAQ8F,IAAI,CAAC,CAAC,EAAE/E,KAAK,EAAE,GAAKsE,sBAAsBtE,UACjD0C,oBAAoB4B,sBAAsBnG,aAAaqG,MAAM,EAC9D;YACA,MAAMQ,QAAQ,IAAIC,MAAM,UAAU;gBAAEC,SAAS;YAAK;YAElDpB,YAAYqB,OAAO,EAAEC,cAAcJ;QACrC;IACF,GAAG;QAACV;KAAkB;IAEtB,MAAMe,WAAW/H,MAAMgI,OAAO,CAAC;QAC7B,IAAI,CAACrG,QAAQE,MAAM,EAAE;YACnB,OAAO;QACT;QAEA,OAAOyF,wBAAwBR,YAAYnF,OAAO,CAAC2F,oBAAoB,GAAGR;IAC5E,GAAG;QAACnF;QAAS2F;KAAoB;IAEjC,MAAMW,mBAAmBjI,MAAMgI,OAAO,CACpC,IACE,AAACrE,UACC0B,2BAA2B,KAC1B8B,CAAAA,gBAAgBe,QAAQ,CAAC,SAAS9G,OAAO+G,KAAK,GAAG/G,OAAOgH,OAAO,AAAD,KACjEtB,WACF;QAACzB;QAAwB1B;QAAQwD;KAAgB;IAGnD,MAAMkB,kBAAkBrI,MAAMsI,WAAW,CAAC,CAACC,OAAeC,SAAS,KAAK;QACtE,MAAMC,WAAWlC,aAAasB,OAAO;QACrC,MAAMa,iBAAiBjC,kBAAkBoB,OAAO;QAChD,MAAMpF,OACJgG,YAAYC,iBAAkBA,eAAepE,QAAQ,CAACiE,MAAM,GAAmB;QAEjF,IAAI,CAAC9F,QAAQ,CAACgG,UAAU;YACtB;QACF;QAEA,MAAME,iBAAiBF,SAASG,YAAY;QAC5C,MAAMC,YAAYJ,SAASI,SAAS;QACpC,MAAMC,UAAUrG,KAAKsG,SAAS;QAC9B,MAAMC,aAAavG,KAAKmG,YAAY;QAEpC,IAAIJ,QAAQ;YACVC,SAASI,SAAS,GAAGC,UAAUH,iBAAiB,IAAIK,aAAa;QACnE,OAAO,IAAIF,UAAUE,aAAaL,iBAAiBE,WAAW;YAC5DJ,SAASI,SAAS,GAAGC,UAAUH,iBAAiBK;QAClD,OAAO,IAAIF,UAAUD,WAAW;YAC9BJ,SAASI,SAAS,GAAGC;QACvB;IACF,GAAG,EAAE;IAEL,MAAMG,qBAAqBjJ,MAAMsI,WAAW,CAC1C,CAACC,OAA2BW,WAAW,IAAI;QACzC,IAAIX,UAAUzB,aAAayB,QAAQ,KAAKA,QAAQ,AAAC5G,CAAAA,QAAQE,MAAM,IAAI,CAAA,IAAK,GAAG;YACzE;QACF;QAEA,MAAME,SAASJ,OAAO,CAAC4G,MAAM;QAE7B,IAAIxG,QAAQE,UAAU;YACpB;QACF;QAEA,IAAIiH,UAAU;YACZb,gBAAgBE;QAClB;QAEA,mDAAmD;QACnD5B,sBAAsB,CAACD,qBACrBA,uBAAuB6B,QAAQA,QAAQ7B;IAE3C,GACA;QAAC/E;QAAS0G;KAAgB;IAG5B,MAAMc,eAAenJ,MAAMsI,WAAW,CACpC,CAACC;QACC,OAAOA,SAAS,KAAKA,QAAS5G,CAAAA,QAAQE,MAAM,IAAI,CAAA;IAClD,GACA;QAACF,QAAQE,MAAM;KAAC;IAGlB,MAAMuH,kBAAkBpJ,MAAMsI,WAAW,CACvC,CAACe;QACC9C,aAAasB,OAAO,GAAGwB;QAEvB,IAAIA,OAAO/B,wBAAwBR,aAAaqC,aAAa7B,sBAAsB;YACjF;gBACEe,gBAAgBf,qBAAqB;YACvC;QACF;IACF,GACA;QAAC6B;QAAcd;QAAiBf;KAAoB;IAGtD,MAAM,CAACgC,eAAeC,iBAAiB,GAAGvJ,MAAM6D,QAAQ,CAAC;IACzD,MAAM2F,qBAAqBxJ,MAAMsI,WAAW,CAAC;QAC3CiB,iBAAiB;IACnB,GAAG,EAAE;IAEL,MAAME,qBAAqBzJ,MAAMsI,WAAW,CAAC;QAC3C3B,sBAAsB,CAAC;IACzB,GAAG,EAAE;IAEL,MAAM+C,kBAAkB1J,MAAMsI,WAAW,CACvC,CAACqB;QACC,IAAI,CAAChG,QAAQ;YACXC,UAAU;QACZ;QACA6F;QACA,MAAMG,YAAYN,gBAAgBK;QAElCJ,iBAAiBK;IACnB,GACA;QAACN;QAAe3F;QAAQ8F;KAAmB;IAG7C;;;GAGC,GACD,MAAMI,QAAQ7J,MAAMsI,WAAW,CAAC;QAC9BkB;QAEAzC,cAAc;QACdnD,UAAU;QACV6F;QACA/E;IACF,GAAG;QAACA;QAAS8E;QAAoBC;KAAmB;IAEpD,MAAMK,eAAe9J,MAAMsI,WAAW,CACpC,CAACC;QACC,MAAM9F,OAAOd,OAAO,CAAC4G,MAAM;QAC3BtB,qBAAqBxE,MAAMC,SAAS7B,aAAaqG,MAAM;QACvD2C;QAEA,MAAME,8DACJnD,uBACA5D,MAAMN,KAAK,KAAKsE,qBAChBA,sBAAsBvE,MAAMC;QAE9B,IAAIqH,6DAA6D;YAC/D,MAAMrC,QAAQ,IAAIC,MAAM,UAAU;gBAAEC,SAAS;YAAK;YAClDpB,YAAYqB,OAAO,EAAEC,cAAcJ;QACrC;IACF,GACA;QAACmC;QAAOlI;QAAS6E;QAAaI;QAAqB5D,MAAMN,KAAK;QAAEsE;KAAkB;IAGpF,MAAMgD,gBAAgBhK,MAAMsI,WAAW,CAAC;QACtC,IAAI5B,uBAAuBI,aAAa,CAACqC,aAAazC,qBAAqB;YACzE;QACF;QAEAoD,aAAapD;IACf,GAAG;QAACA;QAAoByC;QAAcW;KAAa;IAEnD,MAAMG,OAAOjK,MAAMsI,WAAW,CAAC;QAC7B1E,UAAU;QACV+C,sBAAsBW;QAEtB,IAAI,OAAO7C,WAAW,YAAY;YAChCA;QACF;IACF,GAAG;QAACA;QAAQ6C;KAAoB;IAEhC,MAAM4C,SAASlK,MAAMsI,WAAW,CAAC;QAC/BuB;QACA,MAAMnC,QAAQ,IAAIC,MAAM,YAAY;YAAEC,SAAS;QAAK;QACpDpB,YAAYqB,OAAO,EAAEC,cAAcJ;IACrC,GAAG;QAACmC;QAAOrD;KAAY;IAEvB,MAAM2D,UAAUnK,MAAMsI,WAAW,CAAC;QAChC,MAAMZ,QAAQ,IAAIC,MAAM,WAAW;YAAEC,SAAS;QAAK;QACnDpB,YAAYqB,OAAO,EAAEC,cAAcJ;IACrC,GAAG;QAAClB;KAAY;IAEhB,MAAM4D,UAAUpK,MAAMsI,WAAW,CAAC;QAChC,IAAI3E,QAAQ;YACVkG;QACF,OAAO;YACLI;QACF;IACF,GAAG;QAACJ;QAAOI;QAAMtG;KAAO;IAExB,MAAM0G,cAAcrK,MAAMgI,OAAO,CAAC,IAAM9H,SAASsJ,oBAAoB,OAAO;QAACA;KAAmB;IAEhG,MAAMc,cAActK,MAAMsI,WAAW,CACnC,CAACiC;QACC,IAAIhC,QAAQ7B;QAEZ,IAAI6D,SAAS,QAAQ;YACnB,MAAMC,YAAY9I,eAAeC,SAAS4G;YAC1CA,QAAQiC,cAAc,CAAC,IAAI9I,eAAeC,WAAW6I,WAAW,kDAAkD;QACpH,OAAO,IAAID,SAAS,QAAQ;YAC1B,MAAME,cAAcvI,gBAAgBP,SAAS4G;YAC7CA,QAAQkC,gBAAgB,CAAC,IAAIvI,gBAAgBP,WAAW8I,aAAa,0DAA0D;QACjI;QAEAxB,mBAAmBV;IACrB,GACA;QAACU;QAAoBvC;QAAoB/E;KAAQ;IAGnD3B,MAAMwH,SAAS,CACb,SAASkD;QACP,MAAMhI,QACJM,MAAMN,KAAK,KAAKoE,YACZ9D,MAAMN,KAAK,GACX5B,kCAAkCkG;QAExC,MAAMrF,UACJmD,cAActB,eAAesD,YACzBvD,OAAOyB,aAAaxB,YAAYC,YAChCuB;QAENqC,WAAW1F;QACX4F,uBAAuBnE,kBAAkBzB,SAASe;IACpD,GACA;QAACe;QAAUD;QAAYwD;QAAmBhC;QAAaW;QAAc3C,MAAMN,KAAK;QAAEoC;KAAW;IAG/F,MAAM6F,uBAAoE,CAACzH;QACzE,MAAM0H,sBAAsB9J,kCAAkCoC,EAAE2H,aAAa,CAACnI,KAAK;QACnF,MAAMoI,yBAAyB1H,kBAAkBzB,SAASiJ;QAE1D,IAAItD,wBAAwBwD,wBAAwB;YAClD,IAAI,CAAClE,qBAAqB;gBACxBW,uBAAuBuD;YACzB;YACAzG,WAAWuG;QACb;IACF;IAEA,MAAMG,gBAA4D/K,MAAMsI,WAAW,CACjF,CAACpF;QACCqB,qBAAqBA,kBAAkBrB;QAEvC,MAAMvB,UAAU4B,OAAOyB,aAAa9B,EAAE8H,MAAM,CAACtI,KAAK,EAAEe;QACpD4D,WAAW1F;QACX4F,uBAAuBnE,kBAAkBzB,SAASqF;QAElDD,cAAc7D,EAAE8H,MAAM,CAACtI,KAAK;IAC9B,GACA;QAACe;QAAUuD;QAAmBzC;QAAmBS;KAAY;IAG/D,MAAMiG,kBAAkBjL,MAAMsI,WAAW,CAAC;QACxC,OAAO/B,aAAasB,OAAO,KAAK;IAClC,GAAG,EAAE;IAEL,MAAMqD,sBAAsBlL,MAAMsI,WAAW,CAC3C,CAACZ;QACC,IAAIA,MAAMiC,GAAG,CAAC9H,MAAM,KAAK,KAAK6F,MAAMiC,GAAG,KAAK,KAAK;YAC/CD,gBAAgBhC,MAAMiC,GAAG;YACzB;QACF;QAEA;YAAC;YAAW;YAAa;YAAU;SAAQ,CAACzB,QAAQ,CAACR,MAAMiC,GAAG,KAC5DsB,qBACAvD,MAAMvE,cAAc;QAEtB,OAAQuE,MAAMiC,GAAG;YACf,KAAK;gBACH,IAAIhG,QAAQ;oBACVsH,qBAAqBX,YAAY;gBACnC,OAAO;oBACLL;gBACF;gBACA;YACF,KAAK;gBACH,IAAItG,QAAQ;oBACVsH,qBAAqBX,YAAY;gBACnC,OAAO;oBACLL;gBACF;gBACA;YACF,KAAK;gBACHJ;gBACA;YACF,KAAK;YACL,KAAK;gBAAU;oBACb,IAAI,CAAClG,QAAQ;wBACXC,UAAU;oBACZ;oBACA6F;oBAEA;gBACF;YACA,KAAK;YACL,KAAK;YACL,KAAK;gBACH,IAAI9F,QAAQ;oBACVsH,qBAAqBjB;gBACvB,OAAO;oBACLC;gBACF;gBACA;QACJ;IACF,GACA;QACEgB;QACApB;QACAS;QACAZ;QACAO;QACAtG;QACAqG;QACAP;KACD;IAGH,MAAM0B,oBAAoBnL,MAAMsI,WAAW,CACzC,CAACpF;QACC,MAAMqF,QAAQ6C,MAAMC,SAAS,CAACC,OAAO,CAACC,IAAI,CACxCrI,EAAE2H,aAAa,CAACW,UAAU,EAAElH,UAC5BpB,EAAE2H,aAAa;QAEjB,MAAM9I,SAASJ,OAAO,CAAC4G,MAAM;QAE7B,IAAIxG,UAAU,CAACA,OAAOE,QAAQ,EAAE;YAC9B6H,aAAavB;QACf;IACF,GACA;QAAC5G;QAASmI;KAAa;IAGzB,MAAM2B,uBAAuBzL,MAAMqG,MAAM,CAGtC;QAAEqF,GAAG;QAAGC,GAAG;IAAE;IAChB,MAAMC,yBAAyB5L,MAAMsI,WAAW,CAC9C,CAACpF,GAAkCqF;QACjC,MAAMsD,yBACJC,KAAKC,GAAG,CAACN,qBAAqB5D,OAAO,CAAC6D,CAAC,GAAGxI,EAAE8I,OAAO,KAAK,KACxDF,KAAKC,GAAG,CAACN,qBAAqB5D,OAAO,CAAC8D,CAAC,GAAGzI,EAAE+I,OAAO,KAAK;QAE1D,IAAIJ,wBAAwB;YAC1B5C,mBAAmBV,OAAO;QAC5B;QAEAkD,qBAAqB5D,OAAO,GAAG;YAAE6D,GAAGxI,EAAE8I,OAAO;YAAEL,GAAGzI,EAAE+I,OAAO;QAAC;IAC9D,GACA;QAAChD;KAAmB;IAGtB,MAAMiD,cAAclM,MAAMmM,KAAK;IAC/B,MAAMC,eAAepM,MAAMsI,WAAW,CACpC,CAACvG,QAA0BwG;QACzB,MAAM8D,UAAU9D,UAAU7B;QAC1B,MAAMqB,WAAWQ,UAAUjB;QAE3B,qBACE,KAACtH,MAAMsM,QAAQ;sBACZvH,iBAAiB;gBAChBhD;gBACAsK;gBACA/H,UAAUvC,OAAOwK,KAAK;gBACtBxE;gBACA9F,UAAUF,OAAOE,QAAQ;gBACzBmI,SAASe;gBACTqB,aAAavJ;gBACb,8DAA8D;gBAC9D,+DAA+D;gBAC/D,8FAA8F;gBAC9F,yIAAyI;gBACzI,sFAAsF;gBACtF,8EAA8E;gBAC9E,6IAA6I;gBAC7IwJ,aAAa,CAACvJ,IAAM0I,uBAAuB1I,GAAGqF;gBAC9CmE,IAAI,GAAGR,YAAY,CAAC,EAAEnK,OAAOW,KAAK,EAAE;YACtC;WAlBmB,GAAG,OAAOX,OAAOW,KAAK,CAAC,CAAC,EAAEX,OAAOW,KAAK,EAAE;IAqBjE,GACA;QACEgE;QACAyE;QACAS;QACA7G;QACAuC;QACA4E;KACD;IAGH,MAAMS,kBAAkB3M,MAAMgI,OAAO,CAAC;QACpC,MAAM4E,yBACJjL,QAAQE,MAAM,GAAG,kBACf,KAACgL;YAAIxD,KAAK5C;sBAAoB9E,QAAQa,GAAG,CAAC4J;2BAE1C,KAACpL;YAASgD,WAAW5C,OAAO0L,KAAK;sBAAG7H;;QAGxC,IAAI,OAAOT,mBAAmB,YAAY;YACxC,OAAOA,eAAe;gBAAEoI;YAAuB;QACjD,OAAO;YACL,OAAOA;QACT;IACF,GAAG;QAAC3H;QAAWtD;QAAS6C;QAAgB4H;KAAa;IAErD,MAAMW,iBAAiB3M,aAAayF;IAEpC,MAAMmH,qBAAqBpG,uBAAuB5D,MAAMN,KAAK,KAAK7B,aAAawC,MAAM;IACrF,MAAM4J,uBAAuB,CAACrG,uBAAuBI,sBAAsBnG,aAAaqG,MAAM;IAC9F,MAAMgG,mBACJ9H,oBAAoB,CAACzB,UAAWqJ,CAAAA,sBAAsBC,oBAAmB;IAE3E,MAAME,cAAcnN,MAAMgI,OAAO,CAAC;QAChC,IAAI,CAACkF,kBAAkB;YACrB,OAAO;QACT;QAEA,qBACE,KAAC/H;YACCnB,WAAWkB,aAAa4B,YAAY1F,OAAOgM,SAAS,GAAGtG;YACvDsD,SAAS,SAASiD;gBAChBpG,qBAAqBpG,aAAaqG,MAAM;gBACxCH,cAAc;gBACdgG,eAAelF,OAAO,IAAIkF,eAAelF,OAAO,CAACyF,KAAK;YACxD;YACArL,UAAU8D,UAAU9D,QAAQ;YAC5BsL,eAAa9H;;IAGnB,GAAG;QACDyH;QACA/H;QACAD;QACAa,UAAU9D,QAAQ;QAClBwD;QACAsH;KACD;IAED,MAAMS,OAAOxN,MAAMgI,OAAO,CAAC;QACzB,IAAI9C,aAAa4B,WAAW;YAC1B,OAAO5B;QACT;QAEA,qBACE,KAACtE;YACCoD,WAAWkJ,mBAAmB9L,OAAOqM,YAAY,GAAG3G;YACpDnD,QAAQA;;IAGd,GAAG;QAACuJ;QAAkBhI;QAAUvB;KAAO;IAEvC,MAAM+J,aAAa,AAACF,CAAAA,QAAQN,gBAAe,mBACzC,MAAClN,MAAMsM,QAAQ;;YACZa;YACAK;;;IAIL,MAAM,EAAEG,QAAQ,EAAE,GAAGrN;IACrB,MAAMsN,kCAAkC5N,MAAMsI,WAAW,CACvD,CAACpF;QACC,yGAAyG;QACzG,kGAAkG;QAClG,qHAAqH;QACrH,8EAA8E;QAC9E,8EAA8E;QAC9E,mGAAmG;QACnG,2FAA2F;QAC3F,8FAA8F;QAE9F,IAAI,CAAC6J,eAAelF,OAAO,IAAI,CAAC8F,UAAU;YACxC;QACF;QAEA,MAAME,0BAA0B3K,EAAE8H,MAAM,KAAK+B,eAAelF,OAAO;QACnE,IAAIgG,yBAAyB;YAC3Bd,eAAelF,OAAO,CAACiG,KAAK;YAE5B,MAAMC,oBAAoBJ,SAASK,aAAa,KAAKjB,eAAelF,OAAO;YAC3E,IAAIkG,mBAAmB;gBACrBhB,eAAelF,OAAO,CAACyF,KAAK;YAC9B;QACF;IACF,GACA;QAACK;QAAUZ;KAAe;IAG5B,MAAMkB,mDAAmD,CACvD/K;QAEA,gFAAgF;QAChF,8EAA8E;QAC9E,sFAAsF;QACtF,MAAMgL,iBAAiBP,YAAYA,SAASK,aAAa,KAAKjB,eAAelF,OAAO;QACpF,IAAIqG,gBAAgB;YAClBhL,EAAEC,cAAc;QAClB;IACF;IAEA,MAAMgL,kCACJzH,uBAAuB,CAAC,IAAIA,qBAAqBI;IACnD,MAAMsH,yBACJD,oCAAoCrH,YAChCnF,OAAO,CAACwM,gCAAgC,IAAIxM,OAAO,CAACwM,gCAAgC,CAACzL,KAAK,GAC1F;IAEN,MAAM2L,uBAA0D;QAC9D,QAAQ;QACR,iBAAiBnC;QACjB,aAAaA;QACb,iBAAiBvI;QACjB,yBACEyK,0BAA0BzK,SAAS,GAAGuI,YAAY,CAAC,EAAEkC,wBAAwB,GAAGtH;QAClF,mBAAmBtB;QACnB,iBAAiB;QACjB,qBAAqB;IACvB;IAEA,MAAM8I,cAAcjO,eAAeiG;IAEnC,qBACE,MAACuG;QACC7I,WAAW/D,WAAWmB,OAAOmN,IAAI,EAAEpI,UAAU,aAAa9E,eAAe,CAAC8E,MAAM,EAAEnC;QAClFI,OAAOA;QACPiF,KAAK/C;QACL8D,SAASwD;QACTpB,aAAayB;;YAEZK,eAAevG,YAAY,CAACpE,wBAC3B,KAAC1C;gBAAeuN,aAAU;0BAAUzG,SAASwE,KAAK;;0BAEpD,KAACpL;gBACCsN,cAAa;gBACbC,gBAAe;gBACfC,aAAY;gBACZC,YAAW;gBACV,GAAG7I,SAAS;gBACZ,GAAGsI,oBAAoB;gBACxBpK,QAAQ8I;gBACR5C,SAASA;gBACTD,QAAQA;gBACRlG,WAAWiE;gBACX4G,UAAU,CAAC/J;gBACXH,UAAUA;gBACVjC,OAAOc;gBACPsL,SAASzE;gBACT0E,WAAW7D;gBACX7G,UAAU0G;gBACVX,SAASA;gBACTtG,QAAQA;gBACRkL,OAAOtB;gBACP7I,YAAYA;0BAEXkD,UAAUwE;;0BAEb,MAAC0C;gBACC5F,KAAK7C;gBACLzC,MAAMA;gBACNM,UAAUsG;gBACVT,QAAQlH,MAAMkH,MAAM;gBACpBC,SAASnH,MAAMmH,OAAO;gBACtBC,SAASpH,MAAMoH,OAAO;gBACtB1H,OAAOsE;gBACPkI,aAAW;gBACXlL,WAAW5C,OAAO+N,OAAO;gBACzB5B,eAAa7H;gBACbE,UAAUA;;oBAERR,CAAAA,oBAAoB4B,sBAAsBnG,aAAaqG,MAAM,AAAD,mBAC5D,KAACnF;wBAAiCW,OAAO7B,aAAaqG,MAAM;uBAA/CrG,aAAaqG,MAAM;oBAEjClC,YAAYxC,GAAG,CAAC,CAACC,qBAChB,KAACV;4BAA6BW,OAAOD,KAAKC,KAAK;2BAAlC,GAAGD,KAAKC,KAAK,EAAE;;;YAG/BiB,wBACC,KAACjD;gBACC0O,WAAWhJ;gBACXiJ,WAAWlI;gBACXZ,cAAc6C;gBACdkG,mBAAmBlI;gBACnBmI,cAAc9F;gBACd9E,UAAUA;gBACVmB,oBAAoBA;gBACpB0J,gBAAgBnK;gBAChBoK,WAAWnK;gBACXoK,aAAa9K;gBACbW,aAAaA;gBACboK,MAAK;gBACLjD,IAAIR;gBACJ0D,mBAAiBpK;gBACjBqK,UAAU,CAAC;0BAEVlD;;;;AAKX"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/components/CustomSelect/CustomSelect.tsx"],"sourcesContent":["'use client';\n\nimport * as React from 'react';\nimport { classNames, debounce } from '@vkontakte/vkjs';\nimport { useAdaptivity } from '../../hooks/useAdaptivity';\nimport { useExternRef } from '../../hooks/useExternRef';\nimport { useFocusWithin } from '../../hooks/useFocusWithin';\nimport { useDOM } from '../../lib/dom';\nimport type { Placement } from '../../lib/floating';\nimport { defaultFilterFn, type FilterFn } from '../../lib/select';\nimport { useIsomorphicLayoutEffect } from '../../lib/useIsomorphicLayoutEffect';\nimport { warnOnce } from '../../lib/warnOnce';\nimport {\n CustomSelectDropdown,\n type CustomSelectDropdownProps,\n} from '../CustomSelectDropdown/CustomSelectDropdown';\nimport {\n CustomSelectOption,\n type CustomSelectOptionProps,\n} from '../CustomSelectOption/CustomSelectOption';\nimport { DropdownIcon } from '../DropdownIcon/DropdownIcon';\nimport type { FormFieldProps } from '../FormField/FormField';\nimport {\n NOT_SELECTED,\n remapFromNativeValueToSelectValue,\n remapFromSelectValueToNativeValue,\n} from '../NativeSelect/NativeSelect';\nimport type {\n NativeSelectProps,\n NativeSelectValue,\n SelectValue,\n} from '../NativeSelect/NativeSelect';\nimport type { SelectType } from '../Select/Select';\nimport { Footnote } from '../Typography/Footnote/Footnote';\nimport { VisuallyHidden } from '../VisuallyHidden/VisuallyHidden';\nimport {\n CustomSelectClearButton,\n type CustomSelectClearButtonProps,\n} from './CustomSelectClearButton';\nimport {\n CustomSelectInput,\n type CustomSelectInputProps,\n} from './CustomSelectInput/CustomSelectInput';\nimport styles from './CustomSelect.module.css';\n\nconst sizeYClassNames = {\n none: styles.sizeYNone,\n compact: styles.sizeYCompact,\n};\n\nconst findIndexAfter = (options: CustomSelectOptionInterface[] = [], startIndex = -1) => {\n if (startIndex >= options.length - 1) {\n return -1;\n }\n return options.findIndex((option, i) => i > startIndex && !option.disabled);\n};\n\nconst findIndexBefore = (\n options: CustomSelectOptionInterface[] = [],\n endIndex: number = options.length,\n) => {\n let result = -1;\n if (endIndex <= 0) {\n return result;\n }\n for (let i = endIndex - 1; i >= 0; i--) {\n let option = options[i];\n\n if (!option.disabled) {\n result = i;\n break;\n }\n }\n return result;\n};\n\nconst warn = warnOnce('CustomSelect');\n\nconst checkOptionsValueType = <T extends CustomSelectOptionInterface>(options: T[]) => {\n if (new Set(options.map((item) => typeof item.value)).size > 1) {\n warn(\n 'Некоторые значения ваших опций имеют разные типы. onChange всегда возвращает строковый тип.',\n 'error',\n );\n }\n};\n\nconst checkMixControlledAndUncontrolledState = (\n oldIsControlled: boolean,\n newIsControlled: boolean,\n) => {\n if (!oldIsControlled && newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Uncontrolled в Controlled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n if (oldIsControlled && !newIsControlled) {\n warn(\n `Похоже, что компонент был переведен из состояния Controlled в Uncontrolled. Пожалуйста, не делайте так. Если вам нужно отобразить невыбранное состояние компонента, используйте value=null вместо undefined`,\n 'error',\n );\n }\n};\n\nfunction defaultRenderOptionFn<T extends CustomSelectOptionInterface>({\n option,\n ...props\n}: CustomSelectRenderOption<T>): React.ReactNode {\n return <CustomSelectOption {...props} />;\n}\n\nconst handleOptionDown: MouseEventHandler = (e: React.MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\nfunction findSelectedIndex<T extends CustomSelectOptionInterface>(\n options: T[] = [],\n value: SelectValue,\n) {\n if (value === NOT_SELECTED.CUSTOM) {\n return -1;\n }\n return (\n options.findIndex((item) => {\n value = typeof item.value === 'number' ? Number(value) : value;\n return item.value === value;\n }) ?? -1\n );\n}\n\nconst filter = <T extends CustomSelectOptionInterface>(\n options: SelectProps<T>['options'],\n inputValue: string,\n filterFn: SelectProps<T>['filterFn'],\n) => {\n return typeof filterFn === 'function'\n ? options.filter((option) => filterFn(inputValue, option))\n : options;\n};\n\nexport interface CustomSelectOptionInterface {\n value: Exclude<SelectValue, null>;\n label: React.ReactElement | string;\n disabled?: boolean;\n [index: string]: any;\n}\n\nexport interface CustomSelectRenderOption<T extends CustomSelectOptionInterface>\n extends CustomSelectOptionProps {\n option: T;\n}\n\nexport type { CustomSelectClearButtonProps };\n\nexport interface SelectProps<\n OptionInterfaceT extends CustomSelectOptionInterface = CustomSelectOptionInterface,\n> extends NativeSelectProps,\n Omit<FormFieldProps, 'maxHeight'>,\n Pick<CustomSelectDropdownProps, 'overscrollBehavior'>,\n Pick<CustomSelectInputProps, 'minLength' | 'maxLength' | 'pattern' | 'readOnly'> {\n /**\n * ref на внутрений компонент input\n */\n getSelectInputRef?: React.Ref<HTMLInputElement>;\n /**\n * Если `true`, то при клике на `CustomSelect` в нём появится текстовое поле для поиска по `options`. По умолчанию поиск\n * производится по `option.label`.\n */\n searchable?: boolean;\n /**\n * Текст, который будет отображен, если приходит пустой `options`.\n */\n emptyText?: string;\n /**\n * Событие изменения текстового поля\n */\n onInputChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n options: OptionInterfaceT[];\n /**\n * Функция для кастомной фильтрации. По умолчанию поиск производится по `option.label`.\n */\n filterFn?: false | FilterFn<OptionInterfaceT>;\n popupDirection?: 'top' | 'bottom';\n /**\n * Рендер-проп для кастомного рендера опции.\n * В объекте аргумента приходят [свойства опции](https://vkcom.github.io/VKUI/#/CustomSelectOption?id=props)\n *\n * > ⚠️ Важно: cвойство опции `disabled` должно выставляться только через проп `options`.\n * > Запрещается выставлять `disabled` проп опциям в обход `options`, иначе `CustomSelect` не будет знать об актуальном состоянии\n * опции.\n */\n renderOption?: (props: CustomSelectRenderOption<OptionInterfaceT>) => React.ReactNode;\n /**\n * Рендер-проп для кастомного рендера содержимого дропдауна.\n * В `defaultDropdownContent` содержится список опций в виде скроллящегося блока.\n */\n renderDropdown?: ({\n defaultDropdownContent,\n }: {\n defaultDropdownContent: React.ReactNode;\n }) => React.ReactNode;\n /**\n * Если `true`, то в дропдауне вместо списка опций рисуется спиннер. При переданных `renderDropdown` и `fetching: true`\n * \"победит\" `renderDropdown`.\n */\n fetching?: boolean;\n onClose?: VoidFunction;\n onOpen?: VoidFunction;\n /**\n * Иконка раскрывающегося списка\n */\n icon?: React.ReactNode;\n /**\n * Кастомная кнопка для очистки значения.\n * Должна принимать обязательное свойство `onClick`\n */\n ClearButton?: React.ComponentType<CustomSelectClearButtonProps>;\n /**\n * Если `true`, то справа будет отображаться кнопка для очистки значения\n */\n allowClearButton?: boolean;\n /**\n * (e2e) testId кнопки очистки\n */\n clearButtonTestId?: string;\n /**\n * Отступ от выпадающего списка\n */\n dropdownOffsetDistance?: number;\n /**\n * Ширина раскрывающегося списка зависит от контента\n */\n dropdownAutoWidth?: boolean;\n forceDropdownPortal?: boolean;\n selectType?: SelectType;\n /**\n * Отключает максимальную высоту по умолчанию\n */\n noMaxHeight?: boolean;\n /**\n * (e2e) testId элемента, внутри которого отображается текст выбранной опции `CustomSelect` или плейсхолдер.\n */\n labelTextTestId?: string;\n nativeSelectTestId?: string;\n}\n\ntype MouseEventHandler = (event: React.MouseEvent<HTMLElement>) => void;\n\n/**\n * @see https://vkcom.github.io/VKUI/#/CustomSelect\n */\nexport function CustomSelect<OptionInterfaceT extends CustomSelectOptionInterface>(\n props: SelectProps<OptionInterfaceT>,\n): React.ReactNode {\n const [opened, setOpened] = React.useState(false);\n const {\n before,\n name,\n className,\n getRef,\n getRootRef,\n popupDirection = 'bottom',\n style,\n onChange,\n children,\n 'onInputChange': onInputChangeProp,\n renderDropdown,\n onOpen,\n onClose,\n fetching,\n forceDropdownPortal,\n selectType = 'default',\n searchable = false,\n 'renderOption': renderOptionProp = defaultRenderOptionFn,\n 'options': optionsProp,\n emptyText = 'Ничего не найдено',\n filterFn = defaultFilterFn,\n 'icon': iconProp,\n ClearButton = CustomSelectClearButton,\n allowClearButton = false,\n dropdownOffsetDistance = 0,\n dropdownAutoWidth = false,\n noMaxHeight = false,\n 'aria-labelledby': ariaLabelledBy,\n clearButtonTestId,\n nativeSelectTestId,\n defaultValue,\n required,\n getSelectInputRef,\n overscrollBehavior,\n ...restProps\n } = props;\n\n if (process.env.NODE_ENV === 'development') {\n checkOptionsValueType(optionsProp);\n }\n\n const { sizeY = 'none' } = useAdaptivity();\n\n const containerRef = React.useRef<HTMLDivElement>(null);\n const handleRootRef = useExternRef(containerRef, getRootRef);\n const scrollBoxRef = React.useRef<HTMLDivElement | null>(null);\n const selectElRef = useExternRef(getRef);\n const optionsWrapperRef = React.useRef<HTMLDivElement>(null);\n\n const [focusedOptionIndex, setFocusedOptionIndex] = React.useState<number | undefined>(-1);\n const [isControlledOutside, setIsControlledOutside] = React.useState(props.value !== undefined);\n const [inputValue, setInputValue] = React.useState('');\n const [nativeSelectValue, setNativeSelectValue] = React.useState<NativeSelectValue>(() => {\n if (props.value !== undefined) {\n return remapFromSelectValueToNativeValue(props.value);\n }\n if (defaultValue !== undefined) {\n return remapFromSelectValueToNativeValue(defaultValue);\n }\n return NOT_SELECTED.NATIVE;\n });\n\n const [popperPlacement, setPopperPlacement] = React.useState<Placement>(popupDirection);\n const [options, setOptions] = React.useState(optionsProp);\n const [selectedOptionIndex, setSelectedOptionIndex] = React.useState<number | undefined>(\n findSelectedIndex(optionsProp, props.value ?? defaultValue ?? null),\n );\n\n React.useEffect(() => {\n setIsControlledOutside((oldIsControlled) => {\n const newIsControlled = props.value !== undefined;\n checkMixControlledAndUncontrolledState(oldIsControlled, newIsControlled);\n return newIsControlled;\n });\n setNativeSelectValue((nativeSelectValue) => {\n if (props.value !== undefined) {\n return remapFromSelectValueToNativeValue(props.value);\n }\n return nativeSelectValue;\n });\n }, [props.value]);\n\n useIsomorphicLayoutEffect(() => {\n if (\n options.some(({ value }) => nativeSelectValue === value) ||\n (allowClearButton && nativeSelectValue === NOT_SELECTED.NATIVE)\n ) {\n const event = new Event('change', { bubbles: true });\n\n selectElRef.current?.dispatchEvent(event);\n }\n }, [nativeSelectValue]);\n\n const selected = React.useMemo(() => {\n if (!options.length) {\n return null;\n }\n\n return selectedOptionIndex !== undefined ? options[selectedOptionIndex] : undefined;\n }, [options, selectedOptionIndex]);\n\n const openedClassNames = React.useMemo(\n () =>\n (opened &&\n dropdownOffsetDistance === 0 &&\n (popperPlacement.includes('top') ? styles.popUp : styles.popDown)) ||\n undefined,\n [dropdownOffsetDistance, opened, popperPlacement],\n );\n\n const scrollToElement = React.useCallback((index: number, center = false) => {\n const dropdown = scrollBoxRef.current;\n const optionsWrapper = optionsWrapperRef.current;\n const item =\n dropdown && optionsWrapper ? (optionsWrapper.children[index] as HTMLElement) : null;\n\n if (!item || !dropdown) {\n return;\n }\n\n const dropdownHeight = dropdown.offsetHeight;\n const scrollTop = dropdown.scrollTop;\n const itemTop = item.offsetTop;\n const itemHeight = item.offsetHeight;\n\n if (center) {\n dropdown.scrollTop = itemTop - dropdownHeight / 2 + itemHeight / 2;\n } else if (itemTop + itemHeight > dropdownHeight + scrollTop) {\n dropdown.scrollTop = itemTop - dropdownHeight + itemHeight;\n } else if (itemTop < scrollTop) {\n dropdown.scrollTop = itemTop;\n }\n }, []);\n\n const focusOptionByIndex = React.useCallback(\n (index: number | undefined, scrollTo = true) => {\n if (index === undefined || index < 0 || index > (options.length ?? 0) - 1) {\n return;\n }\n\n const option = options[index];\n\n if (option?.disabled) {\n return;\n }\n\n if (scrollTo) {\n scrollToElement(index);\n }\n\n // Это оптимизация, прежде всего, под `onMouseMove`\n setFocusedOptionIndex((focusedOptionIndex) =>\n focusedOptionIndex !== index ? index : focusedOptionIndex,\n );\n },\n [options, scrollToElement],\n );\n\n const isValidIndex = React.useCallback(\n (index: number) => {\n return index >= 0 && index < (options.length ?? 0);\n },\n [options.length],\n );\n\n const setScrollBoxRef = React.useCallback(\n (ref: HTMLDivElement | null) => {\n scrollBoxRef.current = ref;\n\n if (ref && selectedOptionIndex !== undefined && isValidIndex(selectedOptionIndex)) {\n {\n scrollToElement(selectedOptionIndex, true);\n }\n }\n },\n [isValidIndex, scrollToElement, selectedOptionIndex],\n );\n\n const [keyboardInput, setKeyboardInput] = React.useState('');\n const resetKeyboardInput = React.useCallback(() => {\n setKeyboardInput('');\n }, []);\n\n const resetFocusedOption = React.useCallback(() => {\n setFocusedOptionIndex(-1);\n }, []);\n\n const onKeyboardInput = React.useCallback(\n (key: string) => {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n const fullInput = keyboardInput + key;\n\n setKeyboardInput(fullInput);\n },\n [keyboardInput, opened, resetFocusedOption],\n );\n\n /**\n * Note: сбрасывать `options` через `setOptions(optionsProp)` не нужно.\n * Сброс происходит в одном из эффекте `updateOptionsAndSelectedOptionIndex()`.\n */\n const close = React.useCallback(() => {\n resetKeyboardInput();\n\n setInputValue('');\n setOpened(false);\n resetFocusedOption();\n onClose?.();\n }, [onClose, resetKeyboardInput, resetFocusedOption]);\n\n const selectOption = React.useCallback(\n (index: number) => {\n const item = options[index];\n setNativeSelectValue(item?.value ?? NOT_SELECTED.NATIVE);\n close();\n\n const shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync =\n isControlledOutside &&\n props.value !== nativeSelectValue &&\n nativeSelectValue === item?.value;\n\n if (shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync) {\n const event = new Event('change', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }\n },\n [close, options, selectElRef, isControlledOutside, props.value, nativeSelectValue],\n );\n\n const selectFocused = React.useCallback(() => {\n if (focusedOptionIndex === undefined || !isValidIndex(focusedOptionIndex)) {\n return;\n }\n\n selectOption(focusedOptionIndex);\n }, [focusedOptionIndex, isValidIndex, selectOption]);\n\n const open = React.useCallback(() => {\n setOpened(true);\n setFocusedOptionIndex(selectedOptionIndex);\n\n if (typeof onOpen === 'function') {\n onOpen();\n }\n }, [onOpen, selectedOptionIndex]);\n\n const onBlur = React.useCallback(() => {\n close();\n const event = new Event('focusout', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [close, selectElRef]);\n\n const onFocus = React.useCallback(() => {\n const event = new Event('focusin', { bubbles: true });\n selectElRef.current?.dispatchEvent(event);\n }, [selectElRef]);\n\n const onClick = React.useCallback(() => {\n if (opened) {\n close();\n } else {\n open();\n }\n }, [close, open, opened]);\n\n const handleKeyUp = React.useMemo(() => debounce(resetKeyboardInput, 1000), [resetKeyboardInput]);\n\n const focusOption = React.useCallback(\n (type: 'next' | 'prev') => {\n let index = focusedOptionIndex;\n\n if (type === 'next') {\n const nextIndex = findIndexAfter(options, index);\n index = nextIndex === -1 ? findIndexAfter(options) : nextIndex; // Следующий за index или первый валидный до index\n } else if (type === 'prev') {\n const beforeIndex = findIndexBefore(options, index);\n index = beforeIndex === -1 ? findIndexBefore(options) : beforeIndex; // Предшествующий index или последний валидный после index\n }\n\n focusOptionByIndex(index);\n },\n [focusOptionByIndex, focusedOptionIndex, options],\n );\n\n React.useEffect(\n function updateOptionsAndSelectedOptionIndex() {\n const value =\n props.value !== undefined\n ? props.value\n : remapFromNativeValueToSelectValue(nativeSelectValue);\n\n const options =\n searchable && inputValue !== undefined\n ? filter(optionsProp, inputValue, filterFn)\n : optionsProp;\n\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, value));\n },\n [filterFn, inputValue, nativeSelectValue, optionsProp, defaultValue, props.value, searchable],\n );\n\n const onNativeSelectChange: React.ChangeEventHandler<HTMLSelectElement> = (e) => {\n const remappedNativeValue = remapFromNativeValueToSelectValue(e.currentTarget.value);\n const newSelectedOptionIndex = findSelectedIndex(options, remappedNativeValue);\n\n if (selectedOptionIndex !== newSelectedOptionIndex) {\n if (!isControlledOutside) {\n setSelectedOptionIndex(newSelectedOptionIndex);\n }\n if (e.target.value === NOT_SELECTED.NATIVE) {\n e.target.value = '';\n }\n if (e.currentTarget.value === NOT_SELECTED.NATIVE) {\n e.currentTarget.value = '';\n }\n onChange?.(e, remappedNativeValue);\n }\n };\n\n const onInputChange: React.ChangeEventHandler<HTMLInputElement> = React.useCallback(\n (e) => {\n onInputChangeProp && onInputChangeProp(e);\n\n const options = filter(optionsProp, e.target.value, filterFn);\n setOptions(options);\n setSelectedOptionIndex(findSelectedIndex(options, nativeSelectValue));\n\n setInputValue(e.target.value);\n },\n [filterFn, nativeSelectValue, onInputChangeProp, optionsProp],\n );\n\n const areOptionsShown = React.useCallback(() => {\n return scrollBoxRef.current !== null;\n }, []);\n\n const handleKeyDownSelect = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key.length === 1 && event.key !== ' ') {\n onKeyboardInput(event.key);\n return;\n }\n\n ['ArrowUp', 'ArrowDown', 'Escape', 'Enter'].includes(event.key) &&\n areOptionsShown() &&\n event.preventDefault();\n\n switch (event.key) {\n case 'ArrowUp':\n if (opened) {\n areOptionsShown() && focusOption('prev');\n } else {\n open();\n }\n break;\n case 'ArrowDown':\n if (opened) {\n areOptionsShown() && focusOption('next');\n } else {\n open();\n }\n break;\n case 'Escape':\n close();\n break;\n case 'Backspace':\n case 'Delete': {\n if (!opened) {\n setOpened(true);\n }\n resetFocusedOption();\n\n break;\n }\n case 'Enter':\n case 'Spacebar':\n case ' ':\n if (opened) {\n areOptionsShown() && selectFocused();\n } else {\n open();\n }\n break;\n }\n },\n [\n areOptionsShown,\n close,\n focusOption,\n onKeyboardInput,\n open,\n opened,\n selectFocused,\n resetFocusedOption,\n ],\n );\n\n const handleOptionClick = React.useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n const index = Array.prototype.indexOf.call(\n e.currentTarget.parentNode?.children,\n e.currentTarget,\n );\n const option = options[index];\n\n if (option && !option.disabled) {\n selectOption(index);\n }\n },\n [options, selectOption],\n );\n\n const prevMousePositionRef = React.useRef<{\n x: React.MouseEvent['clientX'];\n y: React.MouseEvent['clientY'];\n }>({ x: 0, y: 0 });\n const focusOptionOnMouseMove = React.useCallback(\n (e: React.MouseEvent<HTMLElement>, index: number) => {\n const isMouseChangedPosition =\n Math.abs(prevMousePositionRef.current.x - e.clientX) >= 1 ||\n Math.abs(prevMousePositionRef.current.y - e.clientY) >= 1;\n\n if (isMouseChangedPosition) {\n focusOptionByIndex(index, false);\n }\n\n prevMousePositionRef.current = { x: e.clientX, y: e.clientY };\n },\n [focusOptionByIndex],\n );\n\n const popupAriaId = React.useId();\n const renderOption = React.useCallback(\n (option: OptionInterfaceT, index: number) => {\n const hovered = index === focusedOptionIndex;\n const selected = index === selectedOptionIndex;\n\n return (\n <React.Fragment key={`${typeof option.value}-${option.value}`}>\n {renderOptionProp({\n option,\n hovered,\n children: option.label,\n selected,\n disabled: option.disabled,\n onClick: handleOptionClick,\n onMouseDown: handleOptionDown,\n // Используем `onMouseMove` вместо `onMouseEnter/onMouseOver`.\n // Потому что если при навигации с клавиатуры курсор наведён на\n // список, то при первом автоматическом скролле списка вызывается событие MouseOver/MouseEnter\n // обработчик которого фокусирует опцию под курсором, хотя при навигация с клавиатуры пользователь мог уйти дальше по списку, это путает.\n // Причём координаты события меняются на пару пикселей по сравнению с прошлым вызовом,\n // а значит нельзя на них опираться, чтобы запретить обработку такого события.\n // C mousemove такой проблемы нет, что позволяет реализовать поведение при наведении с клавиатуры и при наведении мышью идентично `<select>`.\n onMouseMove: (e) => focusOptionOnMouseMove(e, index),\n id: `${popupAriaId}-${option.value}`,\n })}\n </React.Fragment>\n );\n },\n [\n focusedOptionIndex,\n handleOptionClick,\n focusOptionOnMouseMove,\n renderOptionProp,\n selectedOptionIndex,\n popupAriaId,\n ],\n );\n\n const resolvedContent = React.useMemo(() => {\n const defaultDropdownContent =\n options.length > 0 ? (\n <div ref={optionsWrapperRef}>{options.map(renderOption)}</div>\n ) : (\n <Footnote className={styles.empty}>{emptyText}</Footnote>\n );\n\n if (typeof renderDropdown === 'function') {\n return renderDropdown({ defaultDropdownContent });\n } else {\n return defaultDropdownContent;\n }\n }, [emptyText, options, renderDropdown, renderOption]);\n\n const selectInputRef = useExternRef(getSelectInputRef);\n\n const controlledValueSet = isControlledOutside && props.value !== NOT_SELECTED.CUSTOM;\n const uncontrolledValueSet = !isControlledOutside && nativeSelectValue !== NOT_SELECTED.NATIVE;\n const clearButtonShown =\n allowClearButton && !opened && (controlledValueSet || uncontrolledValueSet);\n\n const clearButton = React.useMemo(() => {\n if (!clearButtonShown) {\n return null;\n }\n\n return (\n <ClearButton\n className={iconProp === undefined ? styles.clearIcon : undefined}\n onClick={function clearSelectState() {\n setNativeSelectValue(NOT_SELECTED.NATIVE);\n setInputValue('');\n selectInputRef.current && selectInputRef.current.focus();\n }}\n disabled={restProps.disabled}\n data-testid={clearButtonTestId}\n />\n );\n }, [\n clearButtonShown,\n ClearButton,\n iconProp,\n restProps.disabled,\n clearButtonTestId,\n selectInputRef,\n ]);\n\n const icon = React.useMemo(() => {\n if (iconProp !== undefined) {\n return iconProp;\n }\n\n return (\n <DropdownIcon\n className={clearButtonShown ? styles.dropdownIcon : undefined}\n opened={opened}\n />\n );\n }, [clearButtonShown, iconProp, opened]);\n\n const afterIcons = (icon || clearButtonShown) && (\n <React.Fragment>\n {clearButton}\n {icon}\n </React.Fragment>\n );\n\n const { document } = useDOM();\n const passClickAndFocusToInputOnClick = React.useCallback(\n (e: React.MouseEvent<HTMLDivElement>) => {\n // Раньше внешней оберткой CustomSelect был <label>, что позволяло по клику в любую область CustomSelect,\n // даже где нету интерактивного элемента, фокусировать <input> и передавать на него событие клика.\n // Так как мы больше не оборачиваем CustomSelect в <label>, то для обертки CustomSelect мы симулируем работу <label>.\n // передаем фокус и клик по <input>, если пользователь кликнул в зоне обертки.\n // В <label> мы не больше не оборачиваем, потому что это заставляет скринридер\n // дважды произносить текст выбранной опции при фокусе, если CustomSelect связан с внешним <label>.\n // Воспроизводится в некоторых версиях Chrome, при навигации по странице с помощью стрелок.\n // Договорились со специалистом по доступности убрать <label>-обёртки из Select и CustomSelect\n\n if (!selectInputRef.current || !document) {\n return;\n }\n\n const clickTargetIsNotAnInput = e.target !== selectInputRef.current;\n if (clickTargetIsNotAnInput) {\n selectInputRef.current.click();\n\n const inputIsNotFocused = document.activeElement !== selectInputRef.current;\n if (inputIsNotFocused) {\n selectInputRef.current.focus();\n }\n }\n },\n [document, selectInputRef],\n );\n\n const preventInputBlurWhenClickInsideFocusedSelectArea = (\n e: React.MouseEvent<HTMLDivElement>,\n ) => {\n // Так как инпут больше не оборачивается пустым лэйблом, то клик внутри обертки,\n // но вне инпута (например по иконке дропдауна), будет убирать фокус с инпута.\n // Чтобы в такой ситуации отключить blur инпута мы превентим mousedown событие обёртки\n const isInputFocused = document && document.activeElement === selectInputRef.current;\n if (isInputFocused) {\n e.preventDefault();\n }\n };\n\n const ariaActiveDescendantOptionIndex: undefined | number =\n focusedOptionIndex !== -1 ? focusedOptionIndex : undefined;\n const ariaActiveDescendantId =\n ariaActiveDescendantOptionIndex !== undefined\n ? options[ariaActiveDescendantOptionIndex] && options[ariaActiveDescendantOptionIndex].value\n : null;\n\n const selectInputAriaProps: React.HTMLAttributes<HTMLElement> = {\n 'role': 'combobox',\n 'aria-controls': popupAriaId,\n 'aria-owns': popupAriaId,\n 'aria-expanded': opened,\n 'aria-activedescendant':\n ariaActiveDescendantId && opened ? `${popupAriaId}-${ariaActiveDescendantId}` : undefined,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-haspopup': 'listbox',\n 'aria-autocomplete': 'none',\n };\n\n const focusWithin = useFocusWithin(handleRootRef);\n\n return (\n <div\n className={classNames(styles.host, sizeY !== 'regular' && sizeYClassNames[sizeY], className)}\n style={style}\n ref={handleRootRef}\n onClick={passClickAndFocusToInputOnClick}\n onMouseDown={preventInputBlurWhenClickInsideFocusedSelectArea}\n >\n {focusWithin && selected && !opened && (\n <VisuallyHidden aria-live=\"polite\">{selected.label}</VisuallyHidden>\n )}\n <CustomSelectInput\n autoComplete=\"off\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck=\"false\"\n {...restProps}\n {...selectInputAriaProps}\n getRef={selectInputRef}\n onFocus={onFocus}\n onBlur={onBlur}\n className={openedClassNames}\n readOnly={!searchable}\n fetching={fetching}\n value={inputValue}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDownSelect}\n onChange={onInputChange}\n onClick={onClick}\n before={before}\n after={afterIcons}\n selectType={selectType}\n >\n {selected?.label}\n </CustomSelectInput>\n <select\n ref={selectElRef}\n name={name}\n onChange={onNativeSelectChange}\n onBlur={props.onBlur}\n onFocus={props.onFocus}\n onClick={props.onClick}\n value={nativeSelectValue}\n aria-hidden\n className={styles.control}\n data-testid={nativeSelectTestId}\n required={required}\n >\n {(allowClearButton || nativeSelectValue === NOT_SELECTED.NATIVE) && (\n <option key={NOT_SELECTED.NATIVE} value={NOT_SELECTED.NATIVE} />\n )}\n {optionsProp.map((item) => (\n <option key={`${item.value}`} value={item.value} />\n ))}\n </select>\n {opened && (\n <CustomSelectDropdown\n targetRef={containerRef}\n placement={popperPlacement}\n scrollBoxRef={setScrollBoxRef}\n onPlacementChange={setPopperPlacement}\n onMouseLeave={resetFocusedOption}\n fetching={fetching}\n overscrollBehavior={overscrollBehavior}\n offsetDistance={dropdownOffsetDistance}\n autoWidth={dropdownAutoWidth}\n forcePortal={forceDropdownPortal}\n noMaxHeight={noMaxHeight}\n role=\"listbox\"\n id={popupAriaId}\n aria-labelledby={ariaLabelledBy}\n tabIndex={-1}\n >\n {resolvedContent}\n </CustomSelectDropdown>\n )}\n </div>\n );\n}\n"],"names":["React","classNames","debounce","useAdaptivity","useExternRef","useFocusWithin","useDOM","defaultFilterFn","useIsomorphicLayoutEffect","warnOnce","CustomSelectDropdown","CustomSelectOption","DropdownIcon","NOT_SELECTED","remapFromNativeValueToSelectValue","remapFromSelectValueToNativeValue","Footnote","VisuallyHidden","CustomSelectClearButton","CustomSelectInput","styles","sizeYClassNames","none","sizeYNone","compact","sizeYCompact","findIndexAfter","options","startIndex","length","findIndex","option","i","disabled","findIndexBefore","endIndex","result","warn","checkOptionsValueType","Set","map","item","value","size","checkMixControlledAndUncontrolledState","oldIsControlled","newIsControlled","defaultRenderOptionFn","props","handleOptionDown","e","preventDefault","findSelectedIndex","CUSTOM","Number","filter","inputValue","filterFn","CustomSelect","opened","setOpened","useState","before","name","className","getRef","getRootRef","popupDirection","style","onChange","children","onInputChangeProp","renderDropdown","onOpen","onClose","fetching","forceDropdownPortal","selectType","searchable","renderOptionProp","optionsProp","emptyText","iconProp","ClearButton","allowClearButton","dropdownOffsetDistance","dropdownAutoWidth","noMaxHeight","ariaLabelledBy","clearButtonTestId","nativeSelectTestId","defaultValue","required","getSelectInputRef","overscrollBehavior","restProps","process","env","NODE_ENV","sizeY","containerRef","useRef","handleRootRef","scrollBoxRef","selectElRef","optionsWrapperRef","focusedOptionIndex","setFocusedOptionIndex","isControlledOutside","setIsControlledOutside","undefined","setInputValue","nativeSelectValue","setNativeSelectValue","NATIVE","popperPlacement","setPopperPlacement","setOptions","selectedOptionIndex","setSelectedOptionIndex","useEffect","some","event","Event","bubbles","current","dispatchEvent","selected","useMemo","openedClassNames","includes","popUp","popDown","scrollToElement","useCallback","index","center","dropdown","optionsWrapper","dropdownHeight","offsetHeight","scrollTop","itemTop","offsetTop","itemHeight","focusOptionByIndex","scrollTo","isValidIndex","setScrollBoxRef","ref","keyboardInput","setKeyboardInput","resetKeyboardInput","resetFocusedOption","onKeyboardInput","key","fullInput","close","selectOption","shouldTriggerOnChangeWhenControlledAndInnerValueIsOutOfSync","selectFocused","open","onBlur","onFocus","onClick","handleKeyUp","focusOption","type","nextIndex","beforeIndex","updateOptionsAndSelectedOptionIndex","onNativeSelectChange","remappedNativeValue","currentTarget","newSelectedOptionIndex","target","onInputChange","areOptionsShown","handleKeyDownSelect","handleOptionClick","Array","prototype","indexOf","call","parentNode","prevMousePositionRef","x","y","focusOptionOnMouseMove","isMouseChangedPosition","Math","abs","clientX","clientY","popupAriaId","useId","renderOption","hovered","Fragment","label","onMouseDown","onMouseMove","id","resolvedContent","defaultDropdownContent","div","empty","selectInputRef","controlledValueSet","uncontrolledValueSet","clearButtonShown","clearButton","clearIcon","clearSelectState","focus","data-testid","icon","dropdownIcon","afterIcons","document","passClickAndFocusToInputOnClick","clickTargetIsNotAnInput","click","inputIsNotFocused","activeElement","preventInputBlurWhenClickInsideFocusedSelectArea","isInputFocused","ariaActiveDescendantOptionIndex","ariaActiveDescendantId","selectInputAriaProps","focusWithin","host","aria-live","autoComplete","autoCapitalize","autoCorrect","spellCheck","readOnly","onKeyUp","onKeyDown","after","select","aria-hidden","control","targetRef","placement","onPlacementChange","onMouseLeave","offsetDistance","autoWidth","forcePortal","role","aria-labelledby","tabIndex"],"mappings":"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"}
|